Generais bizantinos - MPI

Preview:

Citation preview

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