A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

MPI - Introdução Message-Passing Model Task: código + memória (uma ou várias tasks no mesmo processador) Mensagem: as tasks comunicação entre si trocando.

Apresentações semelhantes


Apresentação em tema: "MPI - Introdução Message-Passing Model Task: código + memória (uma ou várias tasks no mesmo processador) Mensagem: as tasks comunicação entre si trocando."— Transcrição da apresentação:

1 MPI - Introdução Message-Passing Model Task: código + memória (uma ou várias tasks no mesmo processador) Mensagem: as tasks comunicação entre si trocando mensagens Universal Flexível Debugging Performante Paralelismo a cargo do programador

2 MPI - Introdução Message Passing Interface = especificação de uma biblioteca, ou seja biblioteca de funções (C, C++, Fortran) MPI -1 (1994) especificação nomes, chamadas, sequências, resultados MPI-2 (1996) parallel I/O, dynamic processes management código portável implementações eficientes para várias arquitecturas grande número de funções suporte para arquitecturas heterogéneas

3 MPI - Introdução Inicialização Código Série Troca de Mensagens Código Série Finalização Programa MPI Inicializar Gerir Terminar P2P Grupos Criar Estruturas de Dados (data types) Comunicações Funções

4 MPI - Introdução Escrever código paralelo independente da plataforma Boa Performance no código paralelo problema em que os dados não são homogéneos ou tenham relações dinâmicas ou no data-parallel Performance e portabilidade suficiente com data-parallel ou shared-memory Não é possível usar uma biblioteca paralela existente Não precisa de paralelismo

5 MPI - Introdução #include void main( int argc, char *argv[] ) {int err; err = MPI_Init( &argc, &argv ); printf( Hello World! \n); err = MPI_Finalize(); } Definições MPI MPI_Xxxx( parâmetros ) Funções inteiras Se err = MPI_SUCCESS rotina bem executada

6 MPI – How To Compile/Execute Processs Management Environment mpd = default process manager mpdboot -f mpd.hosts -n NODES mpdtrace mpdallexit Ssh-keygen -t dsa adicionar as máquinas $HOME.mpd.conf secretword=XXXXx chmod 600.mpd.conf (chmod a-rwxd chmod u+rw) mpd.hosts tatu1.mat.uc.pt tatu2.mat.uc.pt mpicc flags meuprograma mpiexec -n NODES./meuprograma

7 MPI - Introdução P2P & Mensagens Comunicação entre dois processos (um processo envia, outro recebe) Envelope + Body Processo Fonte + Processo Destino BUFFER = endereço de memória inicia os dados a enviar/receber DATATYPE = tipo de dados a transferir COUNT = quantidade de dados

8 MPI - Introdução Rotinas para trocar mensagem + critério para finalizar comunicação SEND/RECEIVE síncronoassíncronoblockingnon-blocking Emissor recebe notificação de que a mensagem foi recebida Emissor apenas sabe que enviou mensagem return apenas quando a comunicação terminou return imediatamente Terminar Buffer liberto para reutilização

9 rank = ordenação do processo dentro do comm rank = 0, 1, 2,... size-1 MPI - Introdução Communicator designa conjunto de processos que podem comunicar entre si MPI_Comm (tipo pré-definido) MPI_COMM_WORLD pré-definido e que engloba todos os processos mpi int MPI_Comm_size( MPI_Comm comm, int *size ) size = Número processos MPI em comm int MPI_Comm_rank( MPI_Comm comm, int *rank )

10 MPI - Introdução Exercício (Hello World) Escreva um programa que imprime o número total de processos, o rank de cada processo e a mensagem Hello Wold! Não se esqueça do mpdboot e do mpdallexit

11 MPI - Introdução Comunicações Colectivas menor probabilidade de erro código mais legível optimização Broadcast, gather, scatter, reduction P0 P1P2P3P4 BROADCAST

12 MPI - Introdução P0 P1P2P3P4 SCATTER GATHER operação inversa do scatter

13 MPI - Introdução REDUCTION um único processo (root) recebe dados de um grupo de processadores e combina esses dados para produzir um único resultado

14 MPI - Introdução int MPI_Bcast( void* buffer, int count, MPI_Datatype datatype, int root, MPI_Comm comm ) int MPI_Reduce(void* sendbuffer, void* recbuffer, int count, MPI_Datatype datatype, MPI_Op, int root, MPI_Comm comm )

15 MPI - Introdução MPI_DatatypeMPI_CHAR, MPI_SHORT, MPI_INT, MPI_LONG, MPI_FLOAT, MPI_DOUBLE, MPI_LONG_DOUBLE, MPI_BYTE, MPI_PACKED, MPI_UNSIGNED_CHAR, MPI_UNSIGNED_SHORT, MPI_UNSIGNED, MPI_UNSIGNED_LONG MPI_opMPI_MAX, MPI_MIN, MPI_SUM, MPI_PROD, MPI_LAND, MPI_LOR, MPI_LXOR, MPI_BAND, MPI_BOR, MPI_BXOR, MPI_MAXLOC, MPI_MINLOC

16 MPI - Introdução Exercício (Cálculo ) Escreva um programa paralelo que fazendo uso das rotinas de broadcast e reduce determine o número por integração da função 1/(1 + x 2 ), em que o integral é aproximado por uma soma de Riemann. Faça a divisão dos dados (data-parallel)

17 MPI - Introdução Comunicações entre processadores Send int MPI_Send(void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm) Receive int MPI_Recv(void *buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Status *status) typedef struct MPI_Status { int count; int cancelled; int MPI_SOURCE; int MPI_TAG; int MPI_ERROR; } MPI_Status; MPI_ANY_SOURCE MPI_ANY_TAG MPI_STATUS_IGNORE

18 MPI - Introdução Exercício (Tempos de comunicação) Escreva para medir os tempo de comunicação entre dois processos em função do tamanho da mensagem trocada. Para a medição do tempo use a rotina MPI_Wtime().


Carregar ppt "MPI - Introdução Message-Passing Model Task: código + memória (uma ou várias tasks no mesmo processador) Mensagem: as tasks comunicação entre si trocando."

Apresentações semelhantes


Anúncios Google