Message Passing Interface - MPI

Documentos relacionados
Message Passing Interface - MPI. Jorge Barbosa

Computação por Passagem de Mensagens

Sistemas Distribuídos Message-Passing

Aula 5 Computação Distribuída de Alto Desempenho

Básico: estrutura de programa, sintaxe Interface com linha de comando

Carla Osthoff LNCC/MCTI Exemplos:

Parte da Tarefa. Parte da Tarefa. Parte da Tarefa SEND RECEIVE SEND RECEIVE

Introdução. Programação Paralela. Motivação. Conhecimento do Hardware. Análise de Desempenho. Modelagem do Problema

Programação Paralela. Profa Mariana Kolberg e Prof. Luiz Gustavo Fernandes

Computação por Passagem de Mensagens

Introdução a Computação Paralela: Rotinas MPI em Clusters Beowulf

MPI (Message Passing Interface)

O Modelo Síncrono BSP para Computação Paralela

Paralela e Distribuída. com o MPI e o OpenMP

EXERCÍCIO 1 MUDANDO AS CORES

Algoritmos Paralelos usando CGM/MPI. Edson Norberto Cáceres e Siang Wun Song DCT/UFMS e DCC/IME/USP Aula 05

INSTITUTO FEDERAL DE! EDUCAÇÃO, CIÊNCIA E TECNOLOGIA RIO GRANDE DO NORTE

Introdução à programação paralela em Fortran usando OpenMP e MPI

ENGENHARIA DE PRODUÇÃO PROGRAMAÇÃO Algoritmos Conceitos Iniciais. Prof. Luiz Fernando Laguardia Campos FMS

Comunicação orientada a mensagens

ALGORITMOS AULA 01. Baseado nas aulas do Prof. Jorgiano Vidal

Jorge Barbosa, FEUP-DEI 2008

Estruturas de Dados Aula 6: Cadeias de 28/03/2010

Estruturas de Dados Aula 6: Cadeias de Caracteres

Arquitecturas Paralelas I Computação Paralela em Larga Escala. Passagem de Mensagens

QUEBRA DE SENHAS MD5 UTILIZANDO MDCRACK E MPI

Aula 3 Computação Distribuída de Alto Desempenho

Programação Paralela com Troca de Mensagens. Profa Andréa Schwertner Charão DLSC/CT/UFSM

Comunicação entre Processos

Tipos Básicos. Operadores de Incremento e Decremento. Operador Sizeof. Estruturas de Dados Aula 2: Estruturas Estáticas

Estruturas de Dados Aula 2: Estruturas Estáticas. Tipos Básicos. Quantos valores distintos podemos representar com o tipo char?

Estruturas de Dados Aula 2: Estruturas Estáticas 02/03/2011

Programação Estruturada

PROGRAMAÇÃO PARALELA USANDO MPI

Processos. (c) 2005 Volnys B. Bernal Versão de 15/3/2006. Agenda. Processos. Introdução aos Processos. Introdução aos Processos

Aula 5 Oficina de Programação Introdução ao C. Profa. Elaine Faria UFU

ALGORITMOS E ESRUTRA DE DADOS I. Ponteiros Passagem por Valor e Referência Alocação de Memória

TE091 Programação Orientada a Objetos Engenharia Elétrica

Métodos Computacionais

#include <stdio.h> Void main() { printf( Cheguei!\n"); } INTRODUÇÃO A LINGUAGEM C

Ponteiros e Tabelas. K&R: Capítulo 5

Programação Básica. Estrutura de um algoritmo

O que é um apontador em C (type pointer in C)?

Material sobre Funções AEDS 1

Por que dez milhões de cores?

Módulo 7 Cadeias de Caracteres

MPI - Continuação. Qual o output do programa: from mpi4py import MPI comm = MPI.COMM_WORLD nprocs = comm.get_size() rank = comm.

#include <stdio.h> void Swap (int *a,int *b) { int temp; temp=*a; *a=*b; *b=temp; } main () {

Paralela e Distribuída. Memória Distribuída com o MPI

Ponteiros e Tabelas. K&R: Capitulo 5 IAED, 2012/2013

Ponteiros e Tabelas. K&R: Capitulo 5 IAED, 2012/2013

Algoritmos e Estruturas de Dados I (DCC/003) Funções

Algoritmos e Estruturas de Dados I (DCC/003) Introdução à Programação de Computadores. Aula - Tópico 1

Introdução à Programação

Programação de Computadores II. Cap. 5 Vetores

Programação de Computadores II

Instruções para uso do MPI - Relatório Técnico -

Processos Volnys B. Bernal Versão de 20/03/2015. Agenda. Processos. Programa x Processo. Programa x Processo. Programa.

Classificação das linguagens de programação

Programação Paralela em Memória Compartilhada e Distribuída

Programação de Computadores I Funções Básicas da Linguagem C PROFESSORA CINTIA CAETANO

Introdução Arquiteturas Paralelas Programação Paralela Geração de Malhas Particionamento de Malhas (Grafos) Balanceamento de Carga

EPs 1 e 2. EP2: veja. EP1: veja

Ponteiros. Introdução

Programação de Computadores II

INTRODUÇÃO À LINGUAGEM C. Prof. Msc. Luis Filipe Alves Pereira 2015

Linguagem de Programação I Vetores e Strings. Thiago Leite Francisco Barretto

Linguagem C. André Tavares da Silva.

Introdução à Programação. Introdução a Linguagem C. Prof. José Honorato F. Nunes

Escopo das Variáveis. Funções. Funções. Funções. Funções. Algoritmos e Lógica de Programação. Programação Estruturada Funções Recursividade

prim = A ; prim = &A[0];

Arquitetura de Computadores Sistemas Operacionais II

Leandro Soares de Sousa (DSc.) Página: Aula 04 - desenvolvimento multithread

Linguagem C Princípios Básicos (parte 1)

Anhanguera Educacional S.A. Centro Universitário Ibero-Americano

Disciplina de Algoritmos e Programação

Introdução à Programação Aula 07. Prof. Max Santana Rolemberg Farias Colegiado de Engenharia de Computação

Modulo 12: alocação dinâmica de memória

Programação: Vetores

Laboratório de Introdução à Ciência da Computação I

Funções em C. Lucas Ferrari de Oliveira Professor Adjunto. Linguagem de Programação Estruturada I. Universidade Federal do Paraná

Curso de C. Introdução by Arnaldo V. Moura e Daniel F. Ferber 3/10/ :43 AM

Curso de Introdução à Liguagem de. Grupo PET-Tele. Universidade Federal Fluminense. July 16, 2012

Ambiente de desenvolvimento

Introdução OpenMP. Nielsen Castelo Damasceno

TÉCNICAS DE LINGUAGEM DE PROGRAMAÇÃO

Centro Nacional de Processamento de Alto Desempenho - SP TREINAMENTO: INTRODUÇÃO AO MPI CENAPAD-SP

MCTA028 Programação Estruturada Aula 01: - Introdução à linguagem C - Teste de avaliação

Introdução a Programação. Ponteiros e Vetores, Alocação Dinâmica

Computação 2. Aula 7. Profª. Fabiany Ponteiros

1 Exercícios com ponteiros

EXERCÍCIO DE SONDAGEM TURMA 02 SEMESTRE DATA: 01/11/2016. Matrícula Nome Nota

Introdução à Lógica de Programação

Estruturas de Dados. Introdução Definição de Ponteiros Declaração de Ponteiros em C Manipulação de Ponteiros em C

Alocação Dinâmica em C

Programação de Alto Desempenho - 2. Prof: Carla Osthoff

Programação 1. Atribuição, operadores aritméticos, entrada de dados. Técnico em Eletrônica Semestre 5 02

Transcrição:

Message Passing Interface - Pedro de Botelho Marcos Maio/2008 1

Sumário Introdução; Conceitos básicos; Comunicação; Principais rotinas; Compilando e executando códigos ; Exemplos; Referências; 2

Introdução = Message Passing Interface; É uma biblioteca que define rotinas para comunicação entre processos paralelos; É portável para qualquer arquitetura; É compatível com as linguagens C/C++ e Fortran; O paralelismo é explicito, ou seja, o programador é responsável pela distribuição; 3

Estrutura do código com #include<stdio.h> #include mpi.h int main(int argc, char *argv[ ]) { _Init(&argc, &argv);.. Código usando rotinas do... _Finalize(); // Inicializa //Encerra return 0; } 4

Conceitos Básicos Mensagem: É o conteúdo de uma comunicação. É formado por duas partes: Endereço: Destino e origem da mensagem; Dados: A informação a ser transmitida; Rank: É o identificador único do processo. Varia de 0 a N-1; 5

Conceitos Básicos Grupo: É um conjunto de processos que podem se comunicar. Sempre está associado a um comunicador; Comunicador: É um objeto local que representa o domínio de uma comunicação. 6

Conceitos Básicos Application Buffer: É o endereço de memória que armazena um dado que o processo necessita receber ou enviar. System Buffer: É o endereço de memória reservado pelo sistema para armazenar mensagens. 7

Conceitos Básicos Overhead: É um desperdício de tempo que ocorre durante a execução do processo. Existem dois tipos de overhead: System Overhead: Tempo gasto pelo sistema na transferência de dados para o processso destino. Synchronization Overhead: Tempo gasto para a sincronização dos processos. 8

Tipos de Dados 9

Técnicas de Comunicação entre Processos Buffering; Blocking; Non-Blocking; Assíncrona; Síncrona; 10

Buffering É a cópia temporária de mensagens entre endereços de memória efetuada pelo sistema como parte de seu protocolo de comunicação. A cópia ocorre entre o buffer do usuário (application buffer) definido pelo processo e o buffer do sistema (system buffer) definido pela biblioteca. Exemplo: Processo já começou o envio, porém, o processo que recebe ainda não. 11

Blocking A finalização da execução da rotina é dependente de determinados eventos. O processo só prosseguirá quando tiver certeza de que o application buffer pode ser usado novamente. Exemplo: Quando se deseja obter confirmação do recebimento de dados para continuar o processamento. 12

Non-Blocking A finalização da rotina não é dependente de outros eventos. Exemplo: Quando não existem dependências ou necessidade de controle intensivo sobre o programa. 13

Assíncrona O processo que envia a mensagem não espera uma confirmação de recebimento para prosseguir. Exemplo: Usada em comunicação confiável. 14

Síncrona O processo que enviou uma mensagem aguarda uma confirmação de recebimento para prosseguir a sua execução. Exemplo: Utilizada quando se torna necessária a confirmação de recebimento. Por exemplo, se a rede for instável. 15

Tipos de Comunicação Ponto a ponto: Executa a transferência de dados entre dois processos; Coletiva: Envolve comunicação entre dois ou mais processos; 16

Ponto a Ponto Síncrona (Synchronus); Imediata (Ready); Bufferizada (Buffered); 17

Síncrona O processo não retorna sua execução enquanto não houver uma confirmação de recebimento da mensagem 18

Imediata Sabe-se, a priori, que o recebimento de uma mensagem já foi realizado pelo processo destino. 19

Bufferizada A operação de envio utiliza uma quantidade específica para buffer alocada pelo usuário. Exemplo: Se o tamanho da mensagem ultrapassar 4Kbytes(buffer padrão). 20

Coletiva Difusão (Broadcast); Redução (Reduction); Coleta (Gather); Espalhamento (Scatter); 21

Difusão Um único processo envia os mesmos dados para todos os processos com o mesmo comunicador. 22

Redução Um processo coleta dados nos demais processos e aplica uma determinada operação sobre estes dados. O resultado será armazenada em um processo definido pelo usuário. Exemplo: Maior valor, menor valor. 23

Coleta A estrutura dos dados distribuída é coletada por um único processo. 24

Espalhamento A estrutura dos dados que está armazenada em um único processo é distribuída para todos os processos do comunicador. 25

Principais Rotinas Rotinas de Inicialização/Encerramento; Rotinas de Grupo; Rotinas de Envio/Recebimento de Mensagens; 26

Inicialização e Encerramento _Init Inicializa o ambiente ; _Finalize Finaliza o ambiente ; 27

_Init Sintaxe: Em C: int _Init (int *argc, char *argv[]) Em Fortran: call _INIT (mpierr) Parâmetros: argc Apontador para a quantidade de parametros da linha de comando; argv Apontador para um vetor de strings com os comandos recebidos; 28

_Finalize Sintaxe: Em C: int _Finalize (void) Em Fortran: call _FINALIZE (mpierr) 29

Informações sobre o comunicador _Comm_rank Identifica um processo dentro de um determinado grupo; _Comm_size Retorna o número de processos dentro do grupo; 30

_Comm_rank Sintaxe: Em C: int _Comm_rank (_Comm comm, int *rank) Em Fortran: call _COMM_RANK (comm, rank, mpierr) Parâmetros: comm Comunicador do ; rank Variável inteira com o numero de identificação do processo. 31

_Comm_size Sintaxe: Em C: int _Comm_size (_Comm comm, int *size) Em Fortran: call _COMM_SIZE (comm, size, mpierr) Parâmetros: comm Comunicador do ; size Variável interna que retorna o número de processos iniciados pelo. 32

Troca de Mensagens _Send Rotina básica para envio de mensagens; _Recv Rotina básica para recebimento de mensegens; 33

_Send Sintaxe: Em C: int _Send (void *sndbuf, int count, _Datatype dtype, int dest, int tag, _Comm comm) Em Fortran: call _SEND (sndbuf, count, dtype, dest, tag, comm, mpierr) Parâmetros: sndbuf Identificação do buffer; count Número de elementos a serem enviados; dtype Tipo de dado dest Identificação do processo destino; tag Rótulo (label) da mensagem; comm Communicator 34

_Recv Sintaxe: Em C: int _Recv (void *recvbuf, int count, _Datatype dtype, int source, int tag, _Comm comm, _Status status) Em Fortran: call _RECV (recvbuf, count, dtype, source, tag, comm, status, mpierr) Parâmetros: recvbuf Identificação do buffer (endereço inicial do "application buffer" de onde os dados estão sendo enviados); count Número de elementos a serem recebidos; dtype Tipo de dado source Identificação do processo emissor; tag Rótulo (label) da mensagem; comm Communicator status Vetor de informações envolvendo os parâmetros source e tag. 35

Compilando Em C/C++ mpicc [fonte.c] -o [executável] [parâmetros] Em Fortran mpif77 [fonte.f] -o [executável] [parâmetros] 36

Executando Em C/C++/Fortran mpirun [argumentos] [executável] Exemplos de argumentos: -np Número de processadores; -nolocal Não executa na máquina local; -h Mostra todas opções disponíveis; -machinefile Especifica arquivo com nomes das máquinas; 37

Exemplo Cada processo escreve um Hello! #include "mpi.h #include <stdio.h> Int main( int argc, char * argv[ ] ) { int processid; /* rank dos processos */ int noprocesses; /* Número de processos */ int namesize; /* Tamanho do nome */ char computername[50]; _Init(&argc, &argv); _Comm_size(_COMM_WORLD, &noprocesses); _Comm_rank(_COMM_WORLD, &processid); _Get_processor_name(computerName, &namesize); fprintf(stderr,"hello from process %d on %s\n", processid, computername); _Finalize( ); return 0; } 38

Exemplo Master envia mensagem para demais processos #include <stddef.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "mpi.h" main(int argc, char *argv[]) { char message[20]; int i, rank, size, type = 99; _Status status; _Init(&argc, &argv); _Comm_size(_COMM_WORLD, &size); _Comm_rank(_COMM_WORLD, &rank); if (rank == 0) { strcpy(message, "Hello, world"); for (i = 1; i < size; i++) _Send(message, 13, _CHAR, i, type, _COMM_WORLD); } else _Recv(message, 20, _CHAR, 0, type, _COMM_WORLD, &status); printf( "Message from process = %d : %.13s\n", rank,message); _Finalize(); } 39

Referências http://www.llnl.gov/computing/tutorials/mpi/ http://www.dartmouth.edu/ %7Erc/classes/intro_mpi/ 40