Airam J. Preto , Celso L. Mendes

Slides:



Advertisements
Apresentações semelhantes
MPI – Comunicações Com. Colectiva esquecida Barrier não há troca de dados, apenas sincroniza os processos int MPI_Barrier( MPI_Comm, comm) T com = T lat.
Advertisements

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.
Padrão MPI – Message Passing Interface
Message Passing Interface (MPI)
INPE / CAP-315 Airam J. Preto, Celso L. Mendes Aula 30 (1) Empacotamento de Dados em MPI Tópicos: Buffer de Mensagem Empacotamento/Desempacotamento.
INPE / CAP-315 Airam J. Preto, Celso L. Mendes Aula 27 (1) Programação com MPI Tópicos: Modelo de Programação Funções de Ambiente Funções Básicas.
INPE / CAP-315 Airam J. Preto, Celso L. Mendes Aula 29 (1) Comunicação Coletiva em MPI Tópicos: Operação de Broadcast Operações de Redução Exemplo:
INPE / CAP-315 Airam J. Preto, Celso L. Mendes Aula 32 (1) Entrada/Saída em MPI Tópicos: Operações de E/S Sincronização de Processadores Referência:
Tópicos em redes e sistemas distribuídos Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
INPE / CAP-315 Airam J. Preto, Celso L. Mendes Aula 35 (1) Comunicação Avançada em MPI Tópicos: Exemplo: Difusão de Dados em Anel Armazenamento.
MPI - Message Passing Interface Mestrado em Matemática Computacional 2003.
MPI – Message Passing Interface Algumas Funções. Funções básicas As 6 funções que permitem escrever muitos dos programas: MPI_Init -- inicia a computação.
1 Middleware Marcellus Tavares. 2 Roteiro Sistemas distribuídos Motivação Middleware  MPI  RMI Referências.
HARDWARE (Parte II). 2 Hardware – Memória  Componente de um sistema de computação cuja função é armazenar informações que são (ou serão) manipuladas.
Disciplina:PROA3V José Henrique Verhalem e Renan Tenório Professor: Alexandre Cassimiro Novembro 2015.
Tecnologias para Internet Thyago Maia Tavares de Farias Aula 19.
Diego Armando Gusava Mobile Command Orientador: Mauro Marcelo Mattos.
Princípios de Desenvolvimento de Algoritmos MAC122 Prof. Dr. Paulo Miranda IME-USP Variáveis e Atribuições.
Introdução à Computação para Engenharia MAC2166
“Modelo de Camadas OSI e TCP/IP ” Nataniel Vieira
I9 – CRM | DIS | FIN – SEPTEMBER / 2016
UNIVERSIDADE FEDERAL DE GOIÁS INSTITUTO DE INFORMÁTICA
AKKA.
Diagrama de Sequencia Prof. Thales Castro.
Introdução ao OpenMP Open MultiProcessing.
Eduardo Mazza Max José Lins Timóteo
Márcio Soussa Estrutura de Dados Márcio Soussa
Computação de Alto Desempenho Utilizando Placas Gráficas
Programação em C Aula 8.
Sistemas Distribuídos Aula 7
Fundamentos de Programação 1
Comandos da Linguagem C
Aula 05 Pilha TCP/IP.
Linguagem C Para programadores Python
Capítulo VIII – Técnicas de Ordenação
Capítulo 8 - Caracteres e Strings
Introdução à Programação BCC 201 Aula
DESENVOLVIMENTO DE PROGRAMAS
Prof. Wellington Franco Manipulação de Arquivos em C
SISTEMAS OPERACIONAIS
Arquitetura de Computadores
FUNDAMENTO DE PROGRAMAÇÃO
Endereçamento IP.
Redes e Comunicação de Dados Topologia de Redes
INTRODUÇÃO À COMPUTAÇÃO PARALELA
Diógenes Pereira Jr. Igor Thiago Marques Mendonça
INE 5201 – INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO
Programação Orientada a Objetos
Diagramas de Sequência
Algoritmos e Programação MC102
Tópicos Especiais em Redes I 4º Semestre Aula 04 Prof
BANCO DE DADOS Araújo Lima Outubro / 2017 Araújo.
Daniel Paulo SQL Server 2016 Módulo II Daniel Paulo
ESCOLA ESTADUAL TÉCNICO INDUSTRIAL PROFESSOR FONTES
Quem sou eu? /iurykrieger Fullstack Developer na Chaordic
Profa. Maria Augusta Constante Puget
Sistemas Operacionais
Complexidade de Algoritmos
Linguagem PASCAL Tipos Estruturados
Sistemas Distribuídos
Redes de computadores I
Arquitetura de Sistemas Operacionais
MEMORIAS RAUL DIAZ ROSAS.
Mestrado Profissional em Física Médica
Filas.
Arrays de caracteres: strings
RISC vs. CISC Introdução
Prática - BD Distribuído
O mundo além do processamento de jogos.
RESULUÇÃO DOS EXERCÍCIOS E
Transcrição da apresentação:

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 http://www.mcs.anl.gov/mpi 09-08-1999 INPE / CAP-315 Airam J. Preto , Celso L. Mendes

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 09-08-1999 INPE / CAP-315 Airam J. Preto , Celso L. Mendes

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) 09-08-1999 INPE / CAP-315 Airam J. Preto , Celso L. Mendes

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... 09-08-1999 INPE / CAP-315 Airam J. Preto , Celso L. Mendes

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; } 09-08-1999 INPE / CAP-315 Airam J. Preto , Celso L. Mendes

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. 09-08-1999 INPE / CAP-315 Airam J. Preto , Celso L. Mendes

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. 09-08-1999 INPE / CAP-315 Airam J. Preto , Celso L. Mendes

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. 09-08-1999 INPE / CAP-315 Airam J. Preto , Celso L. Mendes

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 ) 09-08-1999 INPE / CAP-315 Airam J. Preto , Celso L. Mendes

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 09-08-1999 INPE / CAP-315 Airam J. Preto , Celso L. Mendes

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 09-08-1999 INPE / CAP-315 Airam J. Preto , Celso L. Mendes

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 09-08-1999 INPE / CAP-315 Airam J. Preto , Celso L. Mendes

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) 09-08-1999 INPE / CAP-315 Airam J. Preto , Celso L. Mendes

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). 09-08-1999 INPE / CAP-315 Airam J. Preto , Celso L. Mendes

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. 09-08-1999 INPE / CAP-315 Airam J. Preto , Celso L. Mendes

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. 09-08-1999 INPE / CAP-315 Airam J. Preto , Celso L. Mendes

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); 09-08-1999 INPE / CAP-315 Airam J. Preto , Celso L. Mendes

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); 09-08-1999 INPE / CAP-315 Airam J. Preto , Celso L. Mendes

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 */ 09-08-1999 INPE / CAP-315 Airam J. Preto , Celso L. Mendes

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! > 09-08-1999 INPE / CAP-315 Airam J. Preto , Celso L. Mendes

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(); } 09-08-1999 INPE / CAP-315 Airam J. Preto , Celso L. Mendes

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. 09-08-1999 INPE / CAP-315 Airam J. Preto , Celso L. Mendes

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. 09-08-1999 INPE / CAP-315 Airam J. Preto , Celso L. Mendes

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, 09-08-1999 INPE / CAP-315 Airam J. Preto , Celso L. Mendes

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 09-08-1999 INPE / CAP-315 Airam J. Preto , Celso L. Mendes