Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouHugo Paniagua Alterado mais de 9 anos atrás
1
MPI - Message Passing Interface Mestrado em Matemática Computacional 2003
2
MPI - Message Passing Interface http://www-unix.mcs.anl.gov/mpi/ http://www-unix.mcs.anl.gov/mpi/ MPI – The Complete Reference 2nd Edition Volume 1 –, by Marc Snir, Steve Otto, Steven Huss-Lederman, Davis Walker and JackDongarra, The MIT Press. Designing and Building Parallel Programs, I. Foster. Addison-Wesley, 1995 Parallel Programming With MPI, by Peter S. Pacheco, published by Morgan Kaufmann. Morgan Kaufmann
3
MPI - Message Passing Interface MPI surgiu de um Forum realizado em Abril de 1992 Envolveu cerca de 80 pessoas, provenientes de 40 organizações, principalmente americanas e européias, Envolveu a maioria dos principais fabricantes de computadores paralelos para além de universidades e laboratórios ligados ao governo americano
4
MPI - Message Passing Interface O MPI é uma tentativa de padronização, independente da plataforma paralela, para ambientes de programação via troca de mensagens. Surgiu da necessidade de se resolver alguns problemas relacionados às plataformas de portabilidade, como por exemplo: restrições em relação à real portabilidade de programas, devido as grande número de plataformas, o mau aproveitamento de características de algumas arquiteturas paralelas.
5
MPI - Message Passing Interface Os programas em MPI consistem: em statements convencionais de C e directivas entre processos MPI não é uma nova linguagem MPI é uma biblioteca de definições e funções, que podem ser usadas em programas escritos na linguagem C A compreensão do MPI passa pelo conhecimento de um conjunto de definições e funções especiais. MPI é apenas uma especificação sintática e semântica de rotinas constituintes da biblioteca de comunicação
6
MPI - Message Passing Interface O mecanismo de comunicação subjacente é a transmissão de dados entre um par de processos (message passing): um processo envia um outro processo recebe Comunicação point-to-point O mecanismo de comunicação providência um conjunto de funções send e receive que permite a comunicação de tipos de dados associados a uma tag (etiqueta: permite selectividade no receber das mensagens)
7
MPI - Message Passing Interface Os nomes de todas as entidades MPI (rotinas, constantes, tipos, etc.) começam por MPI_. As funções têm uma designação mista: MPI_Xxxxx(parameter,... ) Exemplo: MPI_Init(&argc, &argv). As constantes MPI em C (e em Fortran) são em maiuscúlas Exemplo: MPI_COMM_WORLD ( define o início da comunicação para todo os processos que participam na computação) MPI_REAL,... Em C, os tipos especiais correspondem a entidades MPI. Os nomes dos tipos seguem as funções de C, por exemplo: MPI_Comm é o tipo correspondente de um MPI "communicator".
8
MPI - Message Passing Interface Todos os programas em MPI têm a estrutura seguinte : include MPI header file variable declarations initialize the MPI environment ...do computation and MPI communication calls... close MPI communications em C #include MPI_Init(&argc, &argv). MPI_Finalize(&argc, &argv) mpi.h contém definições e declarações necessárias para compilar programas MPI
9
MPI - Message Passing Interface MPI é muito simples e pequeno! São 6 as funções que permitem escrever muitos dos programas: MPI_Init -- inicia a computação MPI_Finalize -- finaliza a computação MPI_Comm_size -- determina o número de processos MPI_Comm_rank -- identifica o processo MPI_Send -- envia uma mensagem MPI_Recv -- recebe uma mensagem
10
MPI - Message Passing Interface MPI é extenso! MPI contém 128 funções. O sistema de passagem de mensagens é executado pelos seguintes comandos MPI: MPI_Send - envio de uma mensagem por um processador MPI_Send(start, count, datatype, dest, tag, comm) MPI_Recv - recebe uma mensagem de um processador MPI_Recv(start, count, datatype, source, tag, comm, status)
11
MPI - Message Passing Interface MPI_Send(start, count, datatype, dest, tag, comm) start -- void* (conteúdo da mensagem) count -- int (determina o espaço necessário para guardar a mensagem datatype -- MPI_Datatype (indica o tipo de dados da mensagem) dest (source) -- int (indica o nº do processo que recebe (envia) ) tag -- int (uma etiqueta para quem recebe o quê) comm -- MPI_Comm (indica a comunicação MPI_COMM_WORLD) MPI_Recv(start, count, datatype, source, tag, comm, status) status -- MPI_Status (fornece informação sobre os dados enviados e seu tamanho; por exemplo MPI_ANY_SOURCE refere o nº do processo que envia a mensagem )
12
MPI - Message Passing Interface Barrier - Sincroniza todos os processos Broadcast – Envia dados de um processo para todos os outros Gather – Recebe dados de todos os processos para um. Scatter - Distribui dados de um processo para todos os outros. Reduction operations –Combina dados (somas, multiplicações, lógicos, etc.) enviando para um processo. MPI_ BARRIER MPI_ BCAST MPI_GATHER MPI_SCATTER MPI_REDUCE (MPI_MAX ; MPI_SUM ; MPI_PROD ; … MPI_LAND ; …) MPI contém um conjunto de funções de comunicação colectivas que executam operações de comunicação
13
MPI - Message Passing Interface Passagem de mensagens – sincronismo e bloqueio A comunicação diz-se sincrona se os processos esperam uns pelos outros, garantindo qu estão simultaneamente envolvidos na operação. A comunicação diz-se assíncrona se os processos não estão simultaneamente envolvidos na operação. A comunicação diz-se bloqueante se o processo espera que alguma fase da comunicação esteja completa. A comunicação diz-se não bloqueante se o processo não pára à espera que alguma fase da comunicação esteja completa.
14
MPI - Programa MPI C (lab1) #include int main(int argc, char **argv) { MPI_Init(&argc, &argv); printf("Hello world! I am %d of %d\n", rank, size); MPI_Finalize(); return 0; }
15
MPI - Message Passing Interface Duas das primeiras questões em programas paralelos são: Quantos processos existem? Quem sou eu? Quantos é respondido com MPI_COMM_SIZE Quem sou eu? é respondido com MPI_COMM_RANK O número rank varia entre zero e (SIZE-1)
16
MPI – Programa MPI C (lab2) #include int main(int argc, char **argv) { int rank, size; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &size); printf ("Hello world! I am %d of %d\n", rank, size); MPI_Finalize(); return 0; }
17
MPI - Message Passing Interface Operacões de redução MPI_Reduce( void*, void*, int, MPI_Datatype, MPI_Op, int, MPI_Comm ) void* -- operando void* -- resultado Int -- count MPI_Datatype – datatype MPI_Op – operação int -- root MPI_Comm -- comm
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.