• Nenhum resultado encontrado

Message Passing Interface - MPI

N/A
N/A
Protected

Academic year: 2021

Share "Message Passing Interface - MPI"

Copied!
40
0
0

Texto

(1)

1

Núcleo de Computação Científica Tópicos Avançados em Computação II

Message Passing Interface - MPI

Pedro de Botelho Marcos Maio/2008

(2)

2

Núcleo de Computação Científica Tópicos Avançados em Computação II

MPI

Sumário

 Introdução;  Conceitos básicos;  Comunicação;  Principais rotinas;

 Compilando e executando códigos MPI;  Exemplos;

(3)

3

Núcleo de Computação Científica Tópicos Avançados em Computação II

Introdução

 MPI = 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

(4)

4

Núcleo de Computação Científica Tópicos Avançados em Computação II

MPI

Estrutura do 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;

(5)

5

Núcleo de Computação Científica Tópicos Avançados em Computação II

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

(6)

6

Núcleo de Computação Científica Tópicos Avançados em Computação II

MPI

Conceitos Básicos

 Grupo: É um conjunto de processos que

podem se comunicar. Sempre está associado a um comunicador;

 Comunicador: É um objeto local que representa

(7)

7

Núcleo de Computação Científica Tópicos Avançados em Computação II

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.

(8)

8

Núcleo de Computação Científica Tópicos Avançados em Computação II

MPI

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.

(9)

9

Núcleo de Computação Científica Tópicos Avançados em Computação II

(10)

10

Núcleo de Computação Científica Tópicos Avançados em Computação II

MPI

Técnicas de Comunicação entre

Processos

 Buffering;  Blocking;  Non-Blocking;  Assíncrona;  Síncrona;

(11)

11

Núcleo de Computação Científica Tópicos Avançados em Computação II

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,

(12)

12

Núcleo de Computação Científica Tópicos Avançados em Computação II

MPI

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.

(13)

13

Núcleo de Computação Científica Tópicos Avançados em Computação II

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.

(14)

14

Núcleo de Computação Científica Tópicos Avançados em Computação II

MPI

Assíncrona

 O processo que envia a mensagem não espera

uma confirmação de recebimento para prosseguir.

(15)

15

Núcleo de Computação Científica Tópicos Avançados em Computação II

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.

(16)

16

Núcleo de Computação Científica Tópicos Avançados em Computação II

MPI

Tipos de Comunicação

 Ponto a ponto: Executa a transferência de

dados entre dois processos;

 Coletiva: Envolve comunicação entre dois ou

(17)

17

Núcleo de Computação Científica Tópicos Avançados em Computação II

Ponto a Ponto

 Síncrona (Synchronus);  Imediata (Ready);

(18)

18

Núcleo de Computação Científica Tópicos Avançados em Computação II

MPI

Síncrona

 O processo não retorna sua execução

enquanto não houver uma confirmação de recebimento da mensagem

(19)

19

Núcleo de Computação Científica Tópicos Avançados em Computação II

Imediata

 Sabe-se, a priori, que o recebimento de uma

mensagem já foi realizado pelo processo destino.

(20)

20

Núcleo de Computação Científica Tópicos Avançados em Computação II

MPI

Bufferizada

 A operação de envio utiliza uma quantidade

específica para buffer alocada pelo usuário.

 Exemplo: Se o tamanho da mensagem

(21)

21

Núcleo de Computação Científica Tópicos Avançados em Computação II

Coletiva

 Difusão (Broadcast);  Redução (Reduction);  Coleta (Gather);

(22)

22

Núcleo de Computação Científica Tópicos Avançados em Computação II

MPI

Difusão

 Um único processo envia os mesmos dados

para todos os processos com o mesmo comunicador.

(23)

23

Núcleo de Computação Científica Tópicos Avançados em Computação II

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.

(24)

24

Núcleo de Computação Científica Tópicos Avançados em Computação II

MPI

Coleta

 A estrutura dos dados distribuída é coletada

(25)

25

Núcleo de Computação Científica Tópicos Avançados em Computação II

Espalhamento

 A estrutura dos dados que está armazenada

em um único processo é distribuída para todos os processos do comunicador.

(26)

26

Núcleo de Computação Científica Tópicos Avançados em Computação II

MPI

Principais Rotinas

 Rotinas de Inicialização/Encerramento;  Rotinas de Grupo;

(27)

27

Núcleo de Computação Científica Tópicos Avançados em Computação II

Inicialização e Encerramento

 MPI_Init – Inicializa o ambiente MPI;

(28)

28

Núcleo de Computação Científica Tópicos Avançados em Computação II

MPI

MPI_Init

Sintaxe:            Em C: int MPI_Init (int *argc, char *argv[])            Em Fortran: call MPI_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; 

(29)

29

Núcleo de Computação Científica Tópicos Avançados em Computação II

MPI_Finalize

Sintaxe:       

          

  Em C: int MPI_Finalize (void)          Em Fortran: call MPI_FINALIZE (mpierr)

(30)

30

Núcleo de Computação Científica Tópicos Avançados em Computação II

MPI

Informações sobre o

comunicador

 MPI_Comm_rank – Identifica um processo MPI

dentro de um determinado grupo;

 MPI_Comm_size – Retorna o número de

(31)

31

Núcleo de Computação Científica Tópicos Avançados em Computação II

MPI_Comm_rank

Sintaxe:        Em C: int MPI_Comm_rank (MPI_Comm comm, int *rank)        Em Fortran: call MPI_COMM_RANK (comm, rank, mpierr)             ● Parâmetros:       comm ­ Comunicador do MPI;       rank  ­  Variável  inteira  com  o  numero  de  identificação  do  processo.

(32)

32

Núcleo de Computação Científica Tópicos Avançados em Computação II

MPI

MPI_Comm_size

Sintaxe:      Sintaxe

Em  C: int  MPI_Comm_size  (MPI_Comm  comm,  int  *size)

Em  Fortran:  call  MPI_COMM_SIZE  (comm,  size,  mpierr)       

Parâmetros:      

comm ­ Comunicador do MPI;        size  ­ Variável interna que retorna o número de 

(33)

33

Núcleo de Computação Científica Tópicos Avançados em Computação II

Troca de Mensagens

 MPI_Send – Rotina básica para envio de

mensagens;

 MPI_Recv – Rotina básica para recebimento

(34)

34

Núcleo de Computação Científica Tópicos Avançados em Computação II

MPI

MPI_Send

Sintaxe: 

Em C: int MPI_Send (void *sndbuf, int count, MPI_Datatype dtype, 

int  dest,  int  tag,  MPI_Comm  comm) 

Em Fortran: call MPI_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 ­ MPI Communicator

(35)

35

Núcleo de Computação Científica Tópicos Avançados em Computação II

MPI_Recv

Sintaxe: 

Em  C:  int  MPI_Recv  (void  *recvbuf,  int  count,  MPI_Datatype  dtype,  int 

source,  int  tag,  MPI_Comm  comm,  MPI_Status  status)  Em Fortran:  call  MPI_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 ­ MPI Communicator       status  ­ Vetor de informações envolvendo os parâmetros source e tag.

(36)

36

Núcleo de Computação Científica Tópicos Avançados em Computação II

MPI

Compilando

 Em C/C++

mpicc [fonte.c] -o [executável] [parâmetros]

 Em Fortran

(37)

37

Núcleo de Computação Científica Tópicos Avançados em Computação II

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;

(38)

38

Núcleo de Computação Científica Tópicos Avançados em Computação II

MPI

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];

MPI_Init(&argc, &argv);

MPI_Comm_size(MPI_COMM_WORLD, &noProcesses); MPI_Comm_rank(MPI_COMM_WORLD, &processId); MPI_Get_processor_name(computerName, &nameSize); fprintf(stderr,"Hello from process %d on %s\n", processId, computerName);

MPI_Finalize( ); return 0;

(39)

39

Núcleo de Computação Científica Tópicos Avançados em Computação II

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; MPI_Status status; MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &size); MPI_Comm_rank(MPI_COMM_WORLD, &rank); if (rank == 0) {

strcpy(message, "Hello, world"); for (i = 1; i < size; i++)

MPI_Send(message, 13, MPI_CHAR, i, type, MPI_COMM_WORLD); }

else

MPI_Recv(message, 20, MPI_CHAR, 0, type, MPI_COMM_WORLD, &status); printf( "Message from process = %d : %.13s\n", rank,message);

MPI_Finalize(); }

(40)

40

Núcleo de Computação Científica Tópicos Avançados em Computação II

MPI

Referências

 http://www.llnl.gov/computing/tutorials/mpi/  http://www.dartmouth.edu/

Referências

Documentos relacionados

No presente trabalho observou-se um aumento significativo da densidade básica da madeira com o aumento da idade (Figura 6), sendo que, somente aos sete anos, foram

Tendo em vista que a comunidade fitoplanctônica tende a variar em função do tempo e do espaço, o presente estudo teve por principal objetivo analisar a estrutura e dinâmica

Já as águas captadas em poços profundos em geral são de boa qualidade via de regra não necessitando qualquer tratamento e podem ser destinados ao consumo humano desde que se façam

Os resultados apontam para a importância da cultura da empresa, dos recursos humanos, das capacidades de marketing da companhia e de sua flexibilidade e capacidade estratégica no

(levanta-se e sai) TOMÁS: - Eu disse que ele quer ser mais que amigo da Júlia.... Débora se aproxima dos dois, que estão prestes a sair

§  Stack: Contém endereço de retorno das chamadas de função, argumentos para funções e variáveis locais. §  Heap: Contém dados dinâmicos e não

­ Erros deste tipo em programas maiores podem levar à bugs desastrosos, 

'admin', modicando seu conteúdo para algo diferente de '0', validando assim o nosso 'if', que verifica se somos admins... Sobrescrever outras variáveis.  Vamos ver como