Algoritmos Propriedades Desejveis 1 Graus de simetria simetria
- Slides: 20
Algoritmos - Propriedades Desejáveis (1) • Graus de simetria: – simetria total: todos os processos têm exatamente o mesmo comportamento. – Simetria textual: o código de todos os processos é igual. • forte: comportamento pode diferir apenas pelas diferentes mensagem recebidas • fraca: comportamento é determinado por informação global
Algoritmos - Propriedades Desejáveis (2) • Robustez a falhas de grau máximo de severidade. • Menor número de suposições sobre o ambiente (número total de processos, topologia). • Menor número de mensagens usadas. • Decisões de processos baseadas apenas em informações locais. • Fairness; ausência de deadlocks; ausência de starvation.
Ambientes e Linguagens • Ambientes (CORBA, Java) • Bibliotecas para linguagens (PVM, MPI, Linda).
MPI • Message Passing Interface • É um sistema de troca de mensagens padronizado e portável. • Baseado em uma biblioteca de funções que podem ser chamadas por programas C ou Fortran. • Responsável pela comunicação e sincronização de processos
MPI (2) • Pode ser usado em diversos tipos de máquinas de memória distribuída. • Pode ser usado em redes locais heterogêneas.
MPI - Funcionamento • São iniciados daemons em máquinas que farão parte da "máquina paralela". • Esses daemons permanecem "adormecidos" nas máquinas remotas até que recebam um sinal para carregar um arquivo executável MPI para executar.
MPI - Preparação (1) • No home do usuário, em cada computador remoto, deve haver um arquivo chamado. rhosts. • Esse arquivo informa as máquinas que terão acesso à essa via rsh (remote shell). • Exemplo: work 120. dct. ufms. br mongelli 200. 129. 197. 121 mongelli work 122. dct. ufms. br mongelli work 123. dct. ufms. br mongelli
MPI - Preparação (2) • Em cada computador, é necessário criar um diretório no home do usuário, onde será colocado pelo menos o programa executável. • Exemplo: mkdir mpi
MPI - Preparação (3) • Na máquina que vai iniciar o MPI, criar um arquivo chamado lamhosts no diretório mpi. • Esse arquivo informa quais computadores da rede local farão parte da "máquina paralela". • Exemplo: work 120. dct. ufms. br work 121. dct. ufms. br work 122. dct. ufms. br work 123. dct. ufms. br
Hello World #include <stdio. h> #include <string. h> #include "mpi. h" int main(int argc, char* argv[]){ int my_rank; int p; int source; int dest; char message[100]; MPI_Status status;
MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &my_rank); MPI_Comm_size(MPI_COMM_WORLD, &p); if(my_rank != 0){ sprintf(message, "Greetings from process %d", my_rank); dest = 0; MPI_Send(message, strlen(message)+1, MPI_CHAR, dest, 0, MPI_COMM_WORLD); }
else{ for(source=1; source<p; source++){ MPI_Recv(message, 100, MPI_CHAR, source, 0, MPI_COMM_WORLD, &status); printf("%sn", message); } } MPI_Finalize(); return 0; }
Envio de Mensagem • A função MPI_Send é usada para o envio de mensagens individualmente entre processos. Sua sintaxe é: int MPI_Send( void* buffer /* in */, int count /* in */, MPI_Datatype datatype /* in */, int destination /* in */, int tag /* in */, MPI_Communicator /* in */)
Exemplo - Envio • A função MPI_Send é bloqueante. • MPI_Send(&x, 1, MPI_FLOAT, 1, 0, MPI_COMM_WORLD); • O processo 0 envio um float para o processo 1.
Buffer de Envio • O buffer de envio de MPI_Send consiste de count sucessivas entradas do tipo indicado por datatype, começando pelo endereço buffer. • O comprimento da mensagem é especificado pelo número de entradas.
Recebimento de Mensagem • A função MPI_Recv é usada para o recebimento de mensagens individualmente entre processos. Sua sintaxe é: int MPI_Recv( void* buffer /* in */, int count /* in */, MPI_Datatype datatype /* in */, int source /* in */, int tag /* in */, MPI_Communicator /* in */, MPI_Status /* out */)
Buffer de Recebimento • O buffer de recebimento consiste de espaço suficiente para conter count entradas consecutivas do tipo dado por datatype, iniciando-se no endereço buffer. • O tamanho da mensagem recebida deve ser menor ou igual ao buffer de recebimento.
Exemplo - Recebimento • A função MPI_Recv também é bloqueante. • MPI_Recv(&x, 1, MPI_FLOAT, 0, 0, MPI_COMM_WORLD, &status); • O processador 1 recebe um float do processador 0, que é armazenado em x.
• Para que o dado seja recebido é necessário que os argumentos em tag e communicator coincidam, e que exista memória suficiente para receber os dados.
Seleção de Mensagens • MPI_ANY_SOURCE • MPI_ANY_TAG
- Determine em graus o menor angulo formado pelos ponteiros
- Genero e numero de nomes
- Horizontal e vertical
- Graus de liberdade
- Alguns arcos tem a mesma extremidade
- Qual é a medida do ângulo obtuso do paralelogramo
- 180 graus
- Linguagem cuidada exemplos
- Saco de pulgas
- Para cada exemplo de propriedade da matéria acrescente
- Produtos de vetores
- Propriedades de logaritmo
- Classificação de fluidos
- Tecido propriamente dito
- O que é uma matriz quadrada
- Propriedades específicas da matéria
- X e y
- Mudança de base
- Propriedades de ln
- Produto vetorial propriedades
- Tonoscopia