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

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

Airam J. Preto , Celso L. Mendes

Apresentações semelhantes


Apresentação em tema: "Airam J. Preto , Celso L. Mendes"— Transcrição da apresentação:

1 Airam J. Preto , Celso L. Mendes
Programação com MPI Tópicos: Modelo de Programação Funções de Ambiente Funções Básicas com Mensagens Exemplo de Programa com MPI Sumário Referências: Pacheco,P.S. Parallel Programming with MPI, Morgan Kaufmann, San Francisco, 1997 INPE / CAP-315 Airam J. Preto , Celso L. Mendes

2 Airam J. Preto , Celso L. Mendes
Modelo de Programação Número de CPU’s (size): P (definido na hora da execução) Identificação de cada CPU (rank): 0, 1, ..., P-1 Pode haver o mesmo código objeto executado por todas as CPU’s. Todas as variáveis dos nodos são locais. Código Objeto CPU 0 CPU 1 CPU 2 . . . CPU P-1 INPE / CAP-315 Airam J. Preto , Celso L. Mendes

3 Modelo de Programação (cont.)
Observações: Cada CPU pode executar ou não alguns trechos: blocos com if ( rank == ... ) { ... } Modelo de Execução: API adequada para programas de propósito geral desenhados para: SIMD ( Single-Instruction / Multiple-Data ) MIMD (Multiple Instruction / Multiple Data) INPE / CAP-315 Airam J. Preto , Celso L. Mendes

4 Airam J. Preto , Celso L. Mendes
Funções e Cosntantes MPI: biblioteca de funções e definições NÃO é uma nova linguagem ! Funções de MPI: MPI_Func(...) Constantes em MPI: MPI_CONST... INPE / CAP-315 Airam J. Preto , Celso L. Mendes

5 Modelo de Programação (cont.)
Estrutura geral de um programa em linguagem MPI : #include <std.io> #include <mpi.h> . . . main(int argc, char *argv[] ) { região paralela do código =========================================== MPI_Init(&argc, &argv);  trecho com possíveis chamadas a funções de MPI MPI_Finalize(); =========================================== return 0; } INPE / CAP-315 Airam J. Preto , Celso L. Mendes

6 Airam J. Preto , Celso L. Mendes
MPI_Init Este método inicializa o ambiente de execução do MPI, sincronizando os processos entre os computadores participantes e deve ser invocado uma única vez durante toda a execução do seu aplicativo. argc = Ponteiro indicando o número de argumentos. argv = Ponteiro do vetor com os argumentos. INPE / CAP-315 Airam J. Preto , Celso L. Mendes

7 Airam J. Preto , Celso L. Mendes
MPI_Finalize Finaliza o ambiente de execução do MPI, liberando os recursos utilizados durante o processamento. Deve ser invocado sob a mesma Thread que executou o MPI_Init. Este método não possui argumentos. INPE / CAP-315 Airam J. Preto , Celso L. Mendes

8 Airam J. Preto , Celso L. Mendes
Comunicação Síncrono Envio e recebimento de dados síncrono: MPI_Send (...) e MPI_Recv(...) Aguarda a confirmação de recebimento da mensagem para passar para a próxima instrução. INPE / CAP-315 Airam J. Preto , Celso L. Mendes

9 Funções Básicas com Mensagens
int MPI_Send( void* buffer, int count, MPI_Datatype datatype, int destination, int tag, MPI_Comm communicator ) int MPI_Recv( void* buffer, int source, MPI_Comm communicator, MPI_Status* status ) INPE / CAP-315 Airam J. Preto , Celso L. Mendes

10 Funções Básicas com Mensagens (cont.)
Parâmetros: buffer: Endereço em memória da mensagem count: Número de ítens na mensagem datatype: tipo de cada ítem destination: identificação da CPU de destino source: identificação da CPU de destino de envio possível “coringa”: MPI_ANY_SOURCE tag: identificação do tipo possível “coringa” para recv: MPI_ANY_TAG communicator: grupo de CPU’s status: Estrutura com valores sobre a msg recebida: status -> MPI_SOURCE status -> MPI_TAG status -> MPI_ERROR INPE / CAP-315 Airam J. Preto , Celso L. Mendes

11 Funções Básicas com Mensagens (cont.)
Semântica de MPI_Send() e MPI_Recv(): Ambas funcionam com bloqueio  retorno ao prog. principal somente quando buffer pode ser utilizado MPI_Send(buffer,...) : ao retornar, já se pode reutilizar buffer MPI_Recv(buffer...) : ao retornar, buffer já tem msg recebida Há outras funções para troca de mensagens, síncronas ou sem bloqueio INPE / CAP-315 Airam J. Preto , Celso L. Mendes

12 Comunicação Assíncrona
Envio e recebimento de dados assíncrono: MPI_Isend(...) e MPI_Irecv(...) O MPI_Isend(...) e o MPI_Irecv(...) fornecem a funcionalidade de envio e recebimento assíncrono, respectivamente. Ambas são assíncronas  podem ser executadas pelas respectivas CPU’s em instantes distintos INPE / CAP-315 Airam J. Preto , Celso L. Mendes

13 Funções de Ambiente em MPI
Verificação do número de CPU’s: MPI_Comm_size( MPI_Comm communicator, int* size ) Verificação da identificação de cada CPU: MPI_Comm_rank( MPI_Comm communicator, int* rank ) Conceito de Communicator: Grupo de CPU’s que podem trocar mensagens entre si Communicator especial: MPI_COMM_WORLD (todas as CPU’s que estão executando o programa) INPE / CAP-315 Airam J. Preto , Celso L. Mendes

14 Comunicações Coletivas
MPI provê suporte a operações que devem ser realizadas simultaneamente em mais de dois processos de um grupo de trabalho, especificados através do contexto - para arquiteturas SIMD (MPI_COMM_WORLD). Já em MIMD (o comunicador criado pela função MPI_Comm_create). INPE / CAP-315 Airam J. Preto , Celso L. Mendes

15 Comunicações Coletivas
As operações mais comuns nas comunicações coletivas são as que realizam sincronização, distribuição de dados (Broadcast) e finalmente, as reduções (Reduction) para operações de consolidação de dados, como operações de soma por exemplo. INPE / CAP-315 Airam J. Preto , Celso L. Mendes

16 Airam J. Preto , Celso L. Mendes
MPI_Barrier O MPI_Barrier define um ponto de sincronização entre todos os processos participantes da comunicação coletiva, isto é, o código não pode prosseguir enquanto todos não estiverem no sincronizados no mesmo ponto. int MPI_Barrier(MPI_Comm comm); comm = Comunicator. INPE / CAP-315 Airam J. Preto , Celso L. Mendes

17 Airam J. Preto , Celso L. Mendes
MPI_Bcast A distribuição de uma mensagem para todos os processos do grupo é realizado pela função MPI_Bcast. int MPI_Bcast(void *buffer, int count, MPI_Datatype datatype, int root, MPI_Comm comm); INPE / CAP-315 Airam J. Preto , Celso L. Mendes

18 Exemplo de Programa com MPI
#include <stdio.h> #include <string.h> #include "mpi.h" main(int argc, char* argv[]) { int my_rank; /* rank of process */ int p; /* number of processes */ int source; /* rank of sender */ int dest; /* rank of receiver */ int tag = 0; /* tag for messages */ char message[100]; /* storage for message */ MPI_Status status; /* return status for recv */ /* Start up MPI */ MPI_Init(&argc, &argv); /* Find out process rank */ MPI_Comm_rank(MPI_COMM_WORLD, &my_rank); /* Find out number of processes */ MPI_Comm_size(MPI_COMM_WORLD, &p); INPE / CAP-315 Airam J. Preto , Celso L. Mendes

19 Exemplo de Programa (cont.)
if (my_rank != 0) { /* Create message */ sprintf(message, "Greetings from process %d!", my_rank); dest = 0; /* Use strlen+1 so that '\0' gets transmitted */ MPI_Send(message, strlen(message)+1, MPI_CHAR, dest, tag, MPI_COMM_WORLD); } else { /* my_rank == 0 */ for (source = 1; source < p; source++) { MPI_Recv(message, 100, MPI_CHAR, source, tag, MPI_COMM_WORLD, &status); printf("%s\n", message); } /* Shut down MPI */ MPI_Finalize(); } /* main */ INPE / CAP-315 Airam J. Preto , Celso L. Mendes

20 Exemplo de Programa (cont.)
Compilação e Execução (usando MPICH): Compilação: > mpicc -o greetings greetings.c Execução com 4 CPU’s: > mpiexec -n 4 greetings Greetings from process 1! Greetings from process 2! Greetings from process 3! > INPE / CAP-315 Airam J. Preto , Celso L. Mendes

21 Programas com MPI: Sumário
Estrutura da maioria dos programas com MPI: #include <mpi.h> . . . main(int argc, char *argv[] ) { MPI_Init(&argc,&argv); MPI_Comm_size (MPI_COMM_WORLD, &size) MPI_Comm_rank (MPI_COMM_WORLD, &rank) { MPI_Send(...) , MPI_Recv(...) } MPI_Finalize(); } INPE / CAP-315 Airam J. Preto , Celso L. Mendes

22 Airam J. Preto , Celso L. Mendes
Uso em Clusters Os clusters são aglomerados de computadores, interconectados através de uma mesma rede, que utilizam sistemas e componentes de hardwares especializados, fornecendo ao usuário final uma “imagem” unificada do sistema/aplicação. Neste arranjo, cada componente do aglomerado é chamado de nodo e geralmente existe um deles responsável por controlar e gerenciar os demais, denominado mestre. INPE / CAP-315 Airam J. Preto , Celso L. Mendes

23 Airam J. Preto , Celso L. Mendes
Conclusão MPI é uma especificação. O modelo da API do MPI, entrega ao programador uma camada de abstração, altamente portável, entre o sistema operacional/tecnologias de comunicação e a aplicação, permitindo escalar a execução do programa entre os computadores da rede, com o uso de suas memórias e poder de processamento, baseado no padrão de divisão e conquista. INPE / CAP-315 Airam J. Preto , Celso L. Mendes

24 Airam J. Preto , Celso L. Mendes
Conclusão Por ser uma camada de alto nível, é possível utilizar o mesmo programa em uma grande variedade de computadores que estejam interconectados. O padrão tem como foco auxiliar a todos que precisem ou desejem criar aplicativos portáveis e paralelos em Fortran e C, INPE / CAP-315 Airam J. Preto , Celso L. Mendes

25 Airam J. Preto , Celso L. Mendes
Conclusão MPI é “De facto” um padrão para arquiteturas de memória distribuída, escrito e ratificado pelo MPI Forum. A idéia central do MPI consiste em prover rotinas de sincronização e controle processos, além da distribuição e consolidação dos dados entre os computadores interconectados, utilizando para isto o paradigma de troca de mensagens INPE / CAP-315 Airam J. Preto , Celso L. Mendes


Carregar ppt "Airam J. Preto , Celso L. Mendes"

Apresentações semelhantes


Anúncios Google