generais bizantinos - mpi
TRANSCRIPT
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
Cronograma
➔ Broadcast; ➔ MPI;➔ O Problemas dos Generais bizantinos;➔ Como foi implementado;➔ Execução.
Broadcast
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í;
Broadcast
Emissor
Receptores
Problema dos Generais Bizantinos
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.
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)
A AA
OrdensA - AtacarR - Recuar
A
A
AR
A
A
OrdensA - AtacarR - Recuar
TODAS AS TROPAS ATACAM
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;
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.
MPI - Vantagens
● Facilidade para localizar material para ajuda na internet;● Possibilidade de uso de uma linguagem tradicional; ● Portabilidade;● Funcionalidade;
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
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
Exemplo - Hello World!
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
.
.
.
MPI_Send (...)
.
.
.
MPI_Recv (...)
.
.
.
MPI_Recv (...)
.
.
.
MPI_Recv (...)
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
Implementação
Realizamos a inclusão da biblioteca do MPI e stdio.
Funções Auxiliares
Função para exibir uma apresentação inicial.
criaLogo()
Função que irá inverter a mensagem de Atacar ou Recuar.
inverteMensagem()
Main()Declaração de variaveis do programa.
Funções MPI.
Rank 0 (Comandante)
Recebendo os Dados Iniciais
Definindo quem vai ser traidor
Informando quem é traidor
0 --> 1, 2, 3, …,N.
Broadcast: quantidade de generais0 --> 1, 2, 3,..., N.
Rank 1-N (Generais)
Sou traidor?
1, 2, 3, …, N <-- 0
Mensagem do comandante
1, 2, 3, …, N <-- 0
Send/Recv MensagensRank == i significa que o general deve enviar.Rank != i significa que o general deve receber.
Send/Recv Mensagens
Garante que o general não envie para si.
Send/Recv Mensagens
Verifica se o general que enviará é traidor (1 traidor, 0 honesto)
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.
Send/Recv Mensagens
Faz o Send da mensagem (invertida ou não).
Send/Recv Mensagens
No caso do general ser o receptor (rank != i), ele irá receber a mensagem do general que enviará.
Send/Recv Mensagens
Ao receber a mensagem, ele armazena e continua o loop.
Contabilização das Mensagens
Escolha da ação
Informando o RANK 0
Final do código
Compilando...
Executando...
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.
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