Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
MPI (Message Passing Interface) O que é MPI? É um padrão para programação de aplicações paralelas de alto desempenho, suportando plataformas de execução com centenas de milhares de cores. Basea-se no paradigma de troca de mensagens. A infraestrutura MPI pode ser utilizada em programas C ou Fortran. Fornece rotinas para que os processos se comuniquem. O paralelismo é explícito (o programador é responsável pela distribuição). Histórico: A maioria dos fabricantes de computadores paralelos participou, de alguma forma, da elaboração do MPI, juntamente com pesquisadores de universidades, laboratórios e autoridades governamentais dos Estados Unidos e Europa. O início do processo de padronização aconteceu em 1992. MPI (Message Passing Interface) Histórico: O projeto do MPI padrão foi apresentado na conferência Supercomputing 93, do qual se originou a versão oficial do MPI (5 de maio de 1994). A sessão do Forum-MPIF de Supercomputing 94 possibilitou a criação do MPI-2, que teve inicio em abril de 1995. No SuperComputing'96 foi apresentada a versão preliminar do MPI-2. Em abril de 1997 o documento MPI-2 foi unanimemente votado e aceito. MPI (Message Passing Interface) Principais Implementações: LAM: https://www.lam-mpi.org MPICH: https://www.mcs.anl.gov/mpi/mpich CHIMP: https://www.epcc.ed.ac.uk/chimp Como funciona? Os problemas são divididos em partes; As partes são distribuídas entre as máquinas, para processamento; Os resultados são enviados à uma máquina receptora; A máquina receptora coleta, agrupa e fornece o resultado desejado. MPI (Message Passing Interface) Paralelismo: MPI (Message Passing Interface) SPMD - Single Program Multiple Data Cada processo roda exatamente o mesmo programa; Os dados são divididos e distribuídos aos processos participantes; Através de condições de teste sobre o rank dos processos, diferentes processos executam diferentes partes do programa: ... if(rank ==0){ //código tarefa 0 }... else if(rank == N){ //código tarefa N }... MPI (Message Passing Interface) Outros Modelos: SPSD - Single Program, Single Data MPMD - Multiple Program, Multiple Data MPI não impõe qualquer restrição ao modelo de programação! MPI (Message Passing Interface) Estrutura de código com MPI: #include<stdio.h> #include ”mpi.h” int main(int argc, char *argv[ ]) { MPI_Init(&argc, &argv); // Inicializa MPI . . Código usando rotinas do MPI . . . MPI_Finalize(); //Encerra MPI return 0; } MPI (Message Passing Interface) Conceitos Básicos: Processo: cada parte dividida da aplicação. Podem ser executados em uma única máquina ou em várias. Rank: identificação única atribuída pelo sistema a cada processo quando inicializado. Vai de 0 à N-1, onde N é o número total demprocessos. O rank é utilizado para enviar e receber mensagens. Mensagem: conteúdo de uma comunicação. Formada por duas partes: Endereço: Destino e origem da mensagem; Dados: a informação a ser transmitida. Grupo: conjunto de processos que podem se comunicar entre si. Sempre está associado a um comunicador. MPI (Message Passing Interface) MPI (Message Passing Interface) Conceitos Básicos Comunicador: um objeto local que representa o domínio de uma comunicação. Por default, já predefinido como MPI_COMM_WORLD MPI_COMM_WORLD é o comunicador predefinido que inclui todos os processos definidos pelo usuário numa aplicação MPI. Comunicação entre Processos: Buffering: A mensagem a ser enviada é copiada para um buffer local do programa. O processo emissor não fica dependente da sincronização com o processo receptor. Deve-se definir explicitamente o buffer associado. Síncrona: O envio da mensagem só ocorre quando houver a confirmação de que o receptor está pronto para receber. Até o recebimento da confirmação o processo emissor fica na espera. MPI (Message Passing Interface) Comunicação entre Processos: Assíncrona: A mensagem é enviada sem nenhuma confirmação do receptor. A mensagem pode ficar pendente no ambiente de execução durante algum tempo. Bloqueante: A execução do programa é interrompida enquanto a comunicação não acontece. Não Bloqueante: A execução do programa é independente do sucesso da comunicação. MPI (Message Passing Interface) Principais Rotinas: Rotinas de Inicialização e Encerramento: MPI_Init – Inicializa o ambiente MPI. MPI_Finalize – Finaliza o ambiente MPI. Rotinas de Grupo: MPI_Comm_rank – Identifica um processo MPI dentro de um determinado grupo. Retorna um valor inteiro entre 0 e N-1 MPI_Comm_size – Retorna o número de processos dentro do grupo. Rotinas de Envio/Recebimento de Mensagens: MPI_Send – Rotina básica para envio de mensagens. MPI_Recv – Rotina básica para recebimento de mensagens. MPI (Message Passing Interface) Exemplo – Código: #include "mpi.h" #include <stdio.h> #include <stdlib.h> #define MASTER 0 int main (int argc, char *argv[]){ int numtasks, taskid, len; char hostname[MPI_MAX_PROCESSOR_NAME]; MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &numtasks); MPI_Comm_rank(MPI_COMM_WORLD,&taskid); MPI_Get_processor_name(hostname, &len); printf ("Hello from task %d on %s!\n", taskid, hostname); if (taskid == MASTER) printf("MASTER: Number of MPI tasks is: %d\n",numtasks); MPI_Finalize(); } MPI (Message Passing Interface) REFERÊNCIAS Especificação e Verificação de Protocolos para Programas MPI https://www.di.fc.ul.pt/~vv/papers/martins.santos.etal_especificacao-verificacao-MPI.pdf MPI – The Complete Reference http://www.netlib.org/utk/papers/mpi-book/mpi-book.html Computação Paralela http://www.dcc.fc.up.pt/~ricroc/aulas/0607/cp/apontamentos/parteIV.pdf MPI – Message Passing Interface http://www.ufjf.br/ciro_barbosa/files/2012/03/MPI.pdf MPI (Message Passing Interface)
Compartilhar