Generais bizantinos - MPI

65
PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL FACULDADE DE INFORMÁTICA - FACIN PROGRAMA DE PÓS GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO Implementação do algoritmo dos Generais Bizantinos com Broadcast e MPI Aline Zanin Cleverson Ledur Pedro Henrique Silva

Transcript of Generais bizantinos - MPI

Page 1: Generais bizantinos - MPI

PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SULFACULDADE DE INFORMÁTICA - FACIN

PROGRAMA DE PÓS GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO

Implementação do algoritmo dos Generais Bizantinos com Broadcast e MPI

Aline ZaninCleverson Ledur

Pedro Henrique Silva

Page 2: Generais bizantinos - MPI

Cronograma

➔ Broadcast; ➔ MPI;➔ O Problemas dos Generais bizantinos;➔ Como foi implementado;➔ Execução.

Page 3: Generais bizantinos - MPI

Broadcast

Page 4: Generais bizantinos - MPI
Page 5: Generais bizantinos - MPI

Broadcast

● Um processo envia (transmite) uma mensagem para todos os outros processos;

● Todos os processos recebem a mesma mensagem enviada por um mesmo processo;

● Todos os processos podem se comunicar entre sí;

Page 6: Generais bizantinos - MPI

Broadcast

Emissor

Receptores

Page 7: Generais bizantinos - MPI

Problema dos Generais Bizantinos

Page 8: Generais bizantinos - MPI

Problema dos Generais Bizantinos

➔ Generais cercam uma cidade com suas tropas;

➔ Generais estão separados pelo relevo, somente podem se comunicar

através de mensageiros;

➔ Generais devem chegar a um consenso sobre atacar ou recuar;

➔ Existem generais que são traidores;

➔ Os generais só vencem se todos os generais atacarem ao mesmo tempo.

Page 9: Generais bizantinos - MPI

Problemática

- Como o general deve saber se ataca ou recua?

- O exército consegue vencer a batalha quando existem traidores?

- Quantos traidores são necessários para que o exercito perca a _batalha? (generais >= traidores * 3 + 1)

Page 10: Generais bizantinos - MPI

A AA

OrdensA - AtacarR - Recuar

Page 11: Generais bizantinos - MPI

A

A

AR

A

A

OrdensA - AtacarR - Recuar

Page 12: Generais bizantinos - MPI

TODAS AS TROPAS ATACAM

Page 13: Generais bizantinos - MPI

Message Passing Interface (MPI)

● Um padrão para comunicação de dados em computação paralela;

● Processos que se comunicam, acionando-se funções para o envio e recebimento de mensagens;

● Possui um conjunto de comandos que quando acionados executam a troca de mensagens;

Page 14: Generais bizantinos - MPI

Como Surgiu

O MPI surgiu a partir da idéia de se padronizar as diversas bibliotecas de troca de mensagens existentes criando um sistema estável, eficiente e portável.

Essa padronização surgiu a partir da criação do Message Passing Interface, Forum criado no Workshop "On Standards for Message Passing in a Distribuited Memory Environment" em 1992.

Page 15: Generais bizantinos - MPI

MPI - Vantagens

● Facilidade para localizar material para ajuda na internet;● Possibilidade de uso de uma linguagem tradicional; ● Portabilidade;● Funcionalidade;

Page 16: Generais bizantinos - MPI

MPI - Dificuldade

● Sincronização dos processos;● Comandos bloqueantes;● Visualização das ações que cada processo executa;● Ausência de um mecanismo para “Debug”, dificultando a

solução de problemas.● Exige cuidado porque uma mensagem perdida ocasiona o

travamento do programa

Page 17: Generais bizantinos - MPI

Estrutura/Comandos básicos

MPI_Init (&argc,&argv) - Inicializa o ambiente de execução de MPI

MPI_Comm_size (comm,&size) - Determina o número de processos em um grupo associado a um comunicador.

MPI_Comm_rank (comm,&rank) - Identifica o ID dos processadores

MPI_Finalize () - Encerra o MPI

Page 18: Generais bizantinos - MPI

Exemplo - Hello World!

Page 19: Generais bizantinos - MPI

Estrutura básica

MPI_Send(mensagem, tamanho, tipo, destino, int tag, MPI_Comm communicator)

MPI_Recv(receptor da mensagem, tamanho, tipo, origem, tag, MPI_COMM_WORLD, &status);

TAG: Identifica o “Assunto” da mensagem

Page 20: Generais bizantinos - MPI

.

.

.

MPI_Send (...)

.

.

.

MPI_Recv (...)

.

.

.

MPI_Recv (...)

.

.

.

MPI_Recv (...)

Page 21: Generais bizantinos - MPI

Função MPI para Broadcast

MPI_Bcast( mensagem, tamanho, tipo, rank envio, MPI_Comm comm )

● Utilizado para realização de um conjunto de SEND e RECV quando a mesma mensagem é propagada para todos os processos

Page 22: Generais bizantinos - MPI

Implementação

Page 23: Generais bizantinos - MPI

Realizamos a inclusão da biblioteca do MPI e stdio.

Page 24: Generais bizantinos - MPI

Funções Auxiliares

Page 25: Generais bizantinos - MPI

Função para exibir uma apresentação inicial.

criaLogo()

Page 26: Generais bizantinos - MPI

Função que irá inverter a mensagem de Atacar ou Recuar.

inverteMensagem()

Page 27: Generais bizantinos - MPI

Main()Declaração de variaveis do programa.

Funções MPI.

Page 28: Generais bizantinos - MPI

Rank 0 (Comandante)

Page 29: Generais bizantinos - MPI

Recebendo os Dados Iniciais

Page 30: Generais bizantinos - MPI

Definindo quem vai ser traidor

Page 31: Generais bizantinos - MPI

Informando quem é traidor

0 --> 1, 2, 3, …,N.

Page 32: Generais bizantinos - MPI

Broadcast: quantidade de generais0 --> 1, 2, 3,..., N.

Page 33: Generais bizantinos - MPI

Rank 1-N (Generais)

Page 34: Generais bizantinos - MPI

Sou traidor?

1, 2, 3, …, N <-- 0

Page 35: Generais bizantinos - MPI

Mensagem do comandante

1, 2, 3, …, N <-- 0

Page 36: Generais bizantinos - MPI

Send/Recv MensagensRank == i significa que o general deve enviar.Rank != i significa que o general deve receber.

Page 37: Generais bizantinos - MPI

Send/Recv Mensagens

Garante que o general não envie para si.

Page 38: Generais bizantinos - MPI

Send/Recv Mensagens

Verifica se o general que enviará é traidor (1 traidor, 0 honesto)

Page 39: Generais bizantinos - MPI

Send/Recv MensagensSe o general é traidor realiza a inversão da mensagem (R vira A, A vira R).A inversão é realizada somente para os generais impares.

Page 40: Generais bizantinos - MPI

Send/Recv Mensagens

Faz o Send da mensagem (invertida ou não).

Page 41: Generais bizantinos - MPI

Send/Recv Mensagens

No caso do general ser o receptor (rank != i), ele irá receber a mensagem do general que enviará.

Page 42: Generais bizantinos - MPI

Send/Recv Mensagens

Ao receber a mensagem, ele armazena e continua o loop.

Page 43: Generais bizantinos - MPI

Contabilização das Mensagens

Page 44: Generais bizantinos - MPI

Escolha da ação

Page 45: Generais bizantinos - MPI

Informando o RANK 0

Page 46: Generais bizantinos - MPI

Final do código

Page 47: Generais bizantinos - MPI

Compilando...

Page 48: Generais bizantinos - MPI
Page 49: Generais bizantinos - MPI

Executando...

Page 50: Generais bizantinos - MPI

Ambiente

Cluster Snail: composto por 5 máquinas monoprocessadas. Além disso, o cluster snail possui uma máquina front-end para gerenciar o cluster.Cada máquina possui 1 processador Intel Pentium-4 2.0 Ghz e 512 MB de memória.

Page 51: Generais bizantinos - MPI
Page 52: Generais bizantinos - MPI
Page 53: Generais bizantinos - MPI
Page 54: Generais bizantinos - MPI
Page 55: Generais bizantinos - MPI
Page 56: Generais bizantinos - MPI
Page 57: Generais bizantinos - MPI
Page 58: Generais bizantinos - MPI
Page 59: Generais bizantinos - MPI
Page 60: Generais bizantinos - MPI
Page 61: Generais bizantinos - MPI
Page 62: Generais bizantinos - MPI
Page 63: Generais bizantinos - MPI
Page 64: Generais bizantinos - MPI
Page 65: Generais bizantinos - MPI

Referêncial TeóricoUsing MPI, Portable Parallel, 2nd edition, Gropp et al, MIT Press, 1999.

LAMPORT,LESLIE. The Byzantine Generals Problem. SRI International. Julho, 1982.

SCHILDT, H. C, Completo e Total. São Paulo. Makron, 1992.

BARNEY, Blaise. Message Passing Interface (MPI). Livermore Computing. 1994.

Open MPI v1.8.1 documentation. Disponível em < http://www.open-mpi.org/doc/v1.8/ >.

MACEDO, Raimundo. Tolerância a Falhas: Consenso em Sistemas Síncronos. LaSiD/UFBA.

http://www.ecs.umass.edu/ece/koren/FaultTolerantSystems/simulator/Byzantine/byz.html