Comunicação Interprocessos
|
|
|
- Camila Neiva Neves
- 9 Há anos
- Visualizações:
Transcrição
1 Comunicação Interprocessos Programação Paralela e Distribuída Conceito de Programa e Execução Graduação em Ciência da Computação Universidade do Vale do Rio dos Sinos Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 1
2 Objetivos Explorar a concorrência entre-nós Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 2
3 Objetivos Explorar a concorrência intra-nó Criação de uma máquina virtual Estudo de caso: MPI LAM Local Area Machine Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 3
4 MPI IBM MPI implementação IBM para SP e cluster MPICH Argonne National Laboratory/Mississipi State Universaty UNIFY Mississipi State Universaty CHIMP Edinburgh Parallel Computing Center LAM Ohio Supercomputer Center PMPIO NASA Principais versões MPIX Mississipi State University NSF Engineerin Research Center Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 4
5 MPI Por quê MPI? 1. Possui diversas implementações de qualidade livres. 2. Permite programar eficientemente MPP e aglomerados. 3. Especificação feita com cuidado. 4. Manipula de forma eficiente buffers de mensagens. 5. Propõe comunicação assíncrona. 6. Comunicação em grupo é eficiente e determinista. 7. Define como deve ser realizado o mecanismo de profiling externo. 8. A sincronização provida protege software externo. 9. É portável. 10. É um padrão. Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 5
6 MPI Message Passing Interface Comunicação ponto a ponto Comunicação em grupo Tipos de dados derivados 125 rotinas Padrão de fato Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 6
7 MPI Message Passing Interface Antes de 1980: Bibliotecas proprietárias 1989: Parallel Virtual Machine (PVM) (Oak Ridge National Lab) 1992: MPI Primeiros passos MPIForum (40 organizações) 1994: MPI v : MPI v. 2.0 Criação dinâmica de processos / E/S paralelo Today: Mais utilizado Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 7
8 MPI Uma especificação de biblioteca de comunicação: Implementa um modelo de troca de mensagens Não propõe uma especificação para compiladores Não é focada a um determinado produto Projetada para: Computadores paralelos, aglomerados e redes de heterogeneas de computadores Auxiliar projetistas a implementar bibliotecas de comunicação portáveis Desenvolvida para auxiliar: Usuários finais (programadores de aplicações) Desenvolvedores de bibliotecas de comunicação Programadores de ferramentas Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 8
9 MPI Termos Máquina virtual: a execução de uma aplicação MPI se dá em uma máquina virtual, especialmente contruída para executar uma determinada aplicação. Processo: um processo é um nó virtual de uma arquitetura MPI. Consiste em uma instância do programa MPI lançado. Um processo Unix torna-se um processo MPI no momento em que executa MPI_Init. Task: muitas vezes empregado como sinônimo de processo. Síncrono/Assíncrono: serviços podem ser síncronos ou assíncronos, cabe verificar a propriedade oferecida pela primitiva de interesse. Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 9
10 MPI Termos Bloqueante: um serviço é dito bloqueante quando o retorno de sua chamada ocorrer somente quando o serviço associado tiver sido completado. Não bloquante: um serviço é dito não bloqueante quando o retorno de sua chamada ocorrer somente quando o procedimento associado a chamada tiver sido completado, não necessáriamente o serviço associado encontra-se completado. O procedimento da chamada tem a função de iniciar a execução do serviço associado. Requisição: representada por um objeto, uma requisição encontra-se associada a um serviço iniciado através de uma chamada não bloqueante. Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 10
11 MPI Termos Local: um procedimento é dito local quando sua operação não depender de interação com outros serviços em nós remotos. Não local: um procedimento é dito não local quando sua operação depender de interação com outros serviços em nós remotos. Coletiva: um procedimento coletivo implica na interação de todos os processos participantes de um grupo. Pré-definido: tipo de dado primitivo que o MPI pode manipular. Derivado: tipo de dado construído a partir de tipos pré-definidos. Portável: um tipo de dado é dito portável se ele é um tipo pré-definido ou se ele deriva de um tipo pré-definido utilizando construtores de enumeração (vetor, bloco, array,...) Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 11
12 MPI LAM Programação SPMD Máquina virtual LAM básico Mensagens Comunicação de grupo Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 12
13 Programação SPMD Vários processos são criados para executar um mesmo programa. Cada processo possui seu próprio conjunto de dados, o que pode implicar em execuções totalmente diferentes Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 13
14 Programação SPMD main() { int id; código comum id = fork(); if( id!= 0 ) O fork no Unix { código pai } pai else { código filho } } código comum filho Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 14
15 main() { } int id; código comum id = fork(); if( id!= 0 ) { código pai } else { código filho } Programação SPMD O fork no Unix Diferença fundamental: Em MPI os processos criado não possuem cópias idênticas da área de dados e diversas cópias podem ser criadas simultaneamente Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 15
16 Máquina virtual Memória Memória Memória Memória Arquitetura real: 4 nós Arquitetura virtual: 6 nós Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 16
17 Máquina virtual Memória Memória Memória Memória Criada no lançamento da execução Arquitetura real: 4 nós Arquitetura virtual: 6 nós Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 17
18 LAM básico Não é encontrado em todas as distribuições Linux Processo de make Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 18
19 LAM básico prog.o Geração de um executável mpicc mpicc prog.c -o prog prog Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 19
20 LAM básico Manipulação da máquina virtual lamboot wipe mpirun Inicialização do suporte à máquina virtual lamboot maqs Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 20
21 LAM básico Manipulação da máquina virtual lamboot wipe mpirun $ more maqs clu0 clu1 clu2 clu3 $ Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 21
22 LAM básico Manipulação da máquina virtual lamboot wipe mpirun Shutdown do suporte à máquina virtual wipe maqs Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 22
23 LAM básico Manipulação da máquina virtual lamboot wipe mpirun Cria a máquina virtual e inicia a execução mpirun -c 6 prog Nós virtuais Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 23
24 #include <mpi.h> LAM básico Primeiro programa MPI_init( &argc, &argv ); MPI_Comm_rank( MPI_COMM_WORLD, &myrank ); MPI_Comm_size( MPI_COMM_WORLD, &size ); MPI_Finalize(); Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 24
25 LAM básico Rank e Communicator Communicator MPI_COMM_WORLD Processos Ranks Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 25
26 #include <mpi.h> LAM básico Primeiro programa int main( int argc, char** argv ) { int myrank, size; MPI_init( &argc, &argv ); MPI_Comm_rank( MPI_COMM_WORLD, &myrank ); MPI_Comm_size( MPI_COMM_WORLD, &size ); if( myrank == 0 ) { código nó 0 } else { código dos outros nós } MPI_Finalize(); } Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 26
27 LAM básico Uma sessão típica $ mpicc prog.c -o prog $ lamboot maqs $ mpirun -c 6 proc $ wipe maqs Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 27
28 Mensagens Mecanismo de interação entre os nós (virtuais) Memória Memória Memória Memória Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 28
29 Mensagens Formato Origem Destino Tag Identificação dos nós virtuais Dados Permite a filtragem de mensagens no destino Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 29
30 Mensagens Formato Origem Destino Tag Fila de mensagens Dados As mensagens aguardam tratamento em uma fila. Os tags permitem escolher uma para ser tratada. Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 30
31 Mensagens Serviços básicos Envio e recebimento bloqueante: MPI_Send Retorna quando o envio foi completado localmente. Não quer dizer que tenha sido recebida!! MPI_Recv Retorna quando uma mensagem for recebida. Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 31
32 Mensagens Serviços básicos Envio: int MPI_Send( void *buf, int cont, MPI_Datatype tipo, int dest, int tag, MPI_Comm grupo ); Recepção: int MPI_Recv( void *buf, int cont, MPI_Datatype tipo, int origem, int tag, MPI_Comm grupo, MPI_Status *st ); Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 32
33 Mensagens Serviços básicos Envio: int MPI_Send( void *buf, int cont, MPI_Datatype tipo, int dest, int tag, MPI_Comm grupo ); Recepção: int MPI_Recv( void *buf, int cont, MPI_Datatype tipo, int origem, int tag, MPI_Comm grupo, MPI_Status *st ); Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 33
34 Envio e Recepção: Não ocorre Mensagens A ordem entre mensagens enviadas entre dois processos é respeitada. Ordem causal Send(1) Recv(0) Send(1) Recv(0) Send(1) Recv(0) Send(1) Recv(0) Rank 0 Rank 1 Rank 0 Rank 1 Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 34
35 Mensagens MPI_Datatype MPI_CHAR MPI_DOUBLE MPI_FLOAT MPI_INT MPI_LONG MPI_LONG_DOUBLE MPI_SHORT MPI_UNSIGNED_CHAR MPI_UNSIGNED MPI_UNSIGNED_LONG MPI_UNSIGNED_SHORT Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 35
36 Envio: int vet[10]; Mensagens Exemplo MPI_Send( vet, 10, MPI_INT, 4, MPI_ANY_TAG, MPI_COMM_WORLD ); Recepção: MPI_Status st; int vet[10]; MPI_Recv( vet, 10, MPI_INT, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &st ); Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 36
37 Mensagens Exemplo Envio: int vet[10]; MPI_Send( vet, 10, MPI_INT, 4, MPI_ANY_TAG, MPI_COMM_WORLD ); Recepção: MPI_Status st; int vet[10]; MPI_Recv( vet, 10, MPI_INT, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &st ); Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 37
38 Mensagens Existem igualmente serviços não-bloqueantes MPI_Isend MPI_Irecv Isend : retorna mesmo que o dado não tenha sido enviado. Irecv : retorna mesmo se não há mensagem. Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 38
39 Mensagens Exemplo Envio: MPI_Request req; MPI_Status st; int vet[10]; MPI_Isend( vet, 10, MPI_INT, 4, MPI_ANY_TAG, MPI_COMM_WORLD, &req );... // faz outra coisa MPI_Wait( &req, &st ); Recepção: MPI_Request req; MPI_Status st; int vet[10]; MPI_Irecv( vet, 10, MPI_INT, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &st );... // faz outra coisa MPI_Wait( &req, &st ); Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 39
40 Mensagens Pack/Unpack MPI_CHAR MPI_DOUBLE MPI_FLOAT MPI_INT MPI_LONG MPI_LONG_DOUBLE MPI_SHORT MPI_UNSIGNED_CHAR MPI_UNSIGNED MPI_UNSIGNED_LONG MPI_UNSIGNED_SHORT MPI_PACKED Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 40
41 Mensagens Pack/Unpack Empacotamento: int MPI_Pack( void *dta, int cont, MPI_Datatype tipo, void *buff, int bsize, int *posic, MPI_Comm grupo ); Desempacotamento: int MPI_Unpack( void *buff, int bsize, int *posic, void *dta, MPI_Datatype tipo, int bsize, MPI_Comm grupo ); Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 41
42 Mensagens Pack/Unpack (Exemplo) // envio int i, posic = 0; char c[100], buffer[110]; MPI_Pack( &i, 1, MPI_INT, buffer, 110, &posic, MPI_COMM_WORLD ); MPI_Pack( c, 100, MPI_CHAR, buffer, 110, &posic, MPI_COMM_WORLD ); MPI_Send( buffer, posic, MPI_PACKED, 1, 0, MPI_COMM_WORLD ); // Recepção int i, posic = 0; char c[100], buffer[110]; MPI_Status st; MPI_Recv( buffer, 110, MPI_PACKED, 1, 0, MPI_COMM_WORLD ); MPI_Unpack( buffer, 110, &posic, &i, 1, MPI_INT, MPI_COMM_WORLD ); MPI_Unpack( buffer, 110, &posic, c, 100, MPI_INT, MPI_COMM_WORLD ); Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 42
43 Exercício Faça um programa MPI que construa um anel entre os nós virtuais, de forma que um o nó 0 envia uma mensagem para o nó 1, o nó 1 para o nó 2, até que o nó Comm_size-1 receba a mensagem e envie a mensagem para o nó 0. O corpo da mensagem é um valor inteiro, cujo valor na primeira mensagem (nó 0 para nó 1) é igual a 0. A cada nó, ao receber o valor, adiciona seu proprio Comm_rank ao valor antes de reenvia-lo. Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 43
44 Standard Send/Receive Isend/Irecv Bufferizado Bsend Síncrono Ssend Ready Rrecv Modos de Comunicação Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 44
45 Modo standard Modos de Comunicação MPI_Send/MPI_Recv e MPI_Isend/MPI_Irecv. O MPI é responsável por bufferizar as mensagens. A operação de send pode ser iniciada e terminada mesmo se a operação receive não tiver sido postada. A operação send é não-local: é concluída com sucesso somente na ocorrência de um receive. Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 45
46 Modo bufferizado MPI_Bsend Modos de Comunicação A operação de send pode ser iniciada mesmo se a operação receive não tiver sido postada. A operação send é local: conclui com sucesso independente da ocorrência de um receive. As mensagens devem ser bufferizadas no processo que executou o send. Bufferização responsabilidade da aplicação: MPI_Buffer_attach/dettach Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 46
47 Modo síncrono MPI_Ssend Rendezvous Modos de Comunicação A operação de send pode ser iniciada mesmo se a operação receive não tiver sido postada. A operação send é não-local: conclui com sucesso apenas com a ocorrência de um receive. Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 47
48 Modo ready MPI_Rsend Modos de Comunicação A operação de send pode ser iniciada apenas se a operação receive já tiver sido postada. Aumento de desempenho. Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 48
49 Outras rotinas MPI_Ibsend MPI_Issend MPI_Irsend Discussão Modos de Comunicação O melhor desempenho é obtido com o modo ready, no entanto a programação é complexa. Um desempenho bastante interessante é obtido com o modo síncrono, que permite evitar a bufferização desnecessária de mensagens. O modo standard é o mais flexível, ao custo de legar à implementação do MPI a gestão dos buffers. O modo bufferizado permite otimizar o uso da bufferização, também com custo de programação. Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 49
50 Mensagens Comunicação de grupo Barreira Broadcast: um envia, todos recebem Reduce: todos enviam, um recebe aplicando uma operação Gather: recebe em um array dados distribuídos Scatter: distribui dados de um array All-to-all: troca de dados entre todos Scan: uma redução pré-fixada Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 50
51 Mensagens Comunicação de grupo Envio e recepção: MPI_Bcast( void *buf, int cont, MPI_Datatype t, int raiz, MPI_Comm grupo); Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 51
52 Mensagens Comunicação de grupo MPI_Bcast( dta, 1, MPI_INT, 2, MPI_COMM_WORLD ); Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 52
53 Mensagens Comunicação de grupo Envio e recepção: MPI_Reduce(void *sendbuf, void *recvbuf, int count, MPI_Datatype t, MPI_Op op, int raiz, MPI_Comm grupo); Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 53
54 Mensagens MPI_Op MPI_BAND MPI_BOR MPI_BXOR MPI_LAND MPI_LOR MPI_LXOR MPI_MAX MPI_MAXLOC MPI_MIN MPI_MINLOC MPI_PROD MPI_SUM Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 54
55 Mensagens Comunicação de grupo MPI_Reduce(src, dst, 1, MPI_INT, MPI_SUM, 2, MPI_COMM_WORLD); 2 Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 55
56 Mensagens Comunicação de grupo Envio e recepção: MPI_Scan(void *sendbuf, void *recvbuf, int count, MPI_Datatype t, MPI_Op op, MPI_Comm grupo); Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 56
57 Mensagens Comunicação de grupo MPI_Scan Rank MPI_Scan() MPI_SUM Rank Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 57
58 Padrões de Comunicação de grupo IBM Redbook Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 58
59 Tipos de dados derivados No envio de mensagens, pode ser necessário enviar tipos de dados definidos pelo programador. Duas casos podem ser observados: Uma seqüencia de dados do mesmo tipo Contiguous derived data types Dados são compostos por diferentes tipos Structured derived data types Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 59
60 Primitivas principais: MPI_Type_contiguous() - Constroi um tipo continuo MPI_Type_struct() - Constroi um tipo estruturado MPI_Type_vector() MPI_Type_indexed() Tipos de dados derivados Primitivas auxiliares: MPI_Type_extent() - Retorna o tamanho de um tipo MPI_Type_commit() - autoriza o uso Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 60
61 Tipos de dados derivados Exemplo: Contiguous devired data type #define SIZE 9 int numbers[size] = {2,5,6,8,9,7,1,3,10}; int numbers_slave[size]; MPI_Datatype mytype; MPI_Init(&argc, &argv); MPI_Type_contiguous(SIZE/numproc, MPI_INT, &mytype); MPI_Type_commit(&mytype): if (myid == 0) for (i=1; i<numproc; ++i) MPI_Send(&numbers[(SIZE/numproc)*i],1,mytype, MPI_COMM_WORLD); else MPI_Recv(&numbers_slave, 1, mytype, 0, 0, MPI_COMM_WORLD, &Stat); MPI_Type_contiguous( int count, MPI_Datatype orig, MPI_Datatype *novo ); Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 61
62 Tipos de dados derivados Exemplo: Contiguous devired data type #define SIZE 9 int numbers[size] = {2,5,6,8,9,7,1,3,10}; int numbers_slave[size]; MPI_Datatype mytype; MPI_Init(&argc, &argv); MPI_Type_contiguous(SIZE/numproc, MPI_INT, &mytype); MPI_Type_commit(&mytype): if (myid == 0) for (i=1; i<numproc; ++i) MPI_Send(&numbers[(SIZE/numproc)*i],1,mytype, MPI_COMM_WORLD); else MPI_Recv(&numbers_slave, 1, mytype, 0, 0, MPI_COMM_WORLD, &Stat); numbers[size] MPI_Type_contiguous( int count, MPI_Datatype orig, MPI_Datatype *novo ); numbers_slave[size] MPI_Send MPI_Recv Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 62
63 Tipos de dados derivados Exemplo: Contiguous devired data type int MPI_Type_struct( int count, int blocklens[], MPI_Aint indices[], MPI_Datatype old_types[], MPI_Datatype *newtype ) Entrada: count blocklens indices old_types número de blocos (integer) número de elementos em cada bloco (array) deslocamento para cada bloco no dado (array) MPI_Datatype associado a cada bloco (array) Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 63
64 Tipos de dados derivados Exemplo: Contiguous derived data type typedef struct {int x, y; float z;} message; message slave_buf[size], master_buf[size]; MPI_Datatype mytype; MPI_Datatype oldtypes[2] = {MPI_INT, MPI_FLOAT}; int blocklens[2] = {2,1}; MPI_Aint indicies[2], length; MPI_Type_extent(MPI_INT, &length); indicies[0]=0; indicies[1]=2*length; MPI_Type_struct(2, blocklens, indicies, oldtypes, &mytype); MPI_Type_commit(&mytype); Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 64
65 Criação dinâmica de processos Criação e término dinâmico de processos Operações em grupo Comunicação entre aplicações MPI Cliente / Servidor Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 65
66 Criação dinâmica de processos Criação e término dinâmico de processos. MPI_Comm_spawn int MPI_Comm_spawn(char *command, char *argv[], int maxprocs, MPI_Info info, int root, MPI_Comm comm, MPI_Comm *intercomm, int array_of_errcd[]); MPI_Comm_spawn_multiple int MPI_Comm_spawn_multiple(int count, char array_of_commands[], char **array_of_argv[], int array_of_maxprs[], MPI_Info array_of_info[], int root, MPI_Comm comm, MPI_Comm *intercomm, int array_of_errcodes[]); Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 66
67 int MPI_Comm_spawn(char *command, char *argv[], int maxprocs, command argv maxprocs info root comm intercomm Criação dinâmica de processos MPI_Info info, int root, MPI_Comm comm, MPI_Comm *intercomm, int array_of_errcd[]) comando para executar o programa (válido no root) argumentos para o comando (um para cada instância, válido no root) número de cópias para serem inicializadas (válido no root) informações adicionais para criação do processo (dependente de implementação, válido no root)) identificação do processo root intercomunicador para os novos processos intercommunicator entre o grupo original e o novo grupo array_of_errcds código de erro, um por processo Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 67
68 Comunicação entre processos que não compartilham comunicador Uso: Estabelecimento de comunicação Aplicação iniciada através de módulos independentes Integração com uma ferrametna de visualização/profiling Um servidor pode aceitar conexões de múltiplos clientes Tanto servidor como cliente podem ser programas paralelos É possivel criar um intercomunicador entre dois grupos de processos. Operação coletiva, mas assimétrica: um grupo (servidor) indica que aceita conexões de outros grupos (clientes). Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 68
69 Funções do Servidor Estabelecimento de comunicação int MPI_Open_port(MPI_Info info, char *port_name); Estabelece um endereço de rede, codificado em port_name string, pelo qual o servidor pode aceitar conecções de clientes. port_name é fornecido pelo sistema, possivelmente utilizando informações de info. int MPI_Close_port(char *port_name); Fecha uma conexão representada por port_name int MPI_Comm_accept(char *port_name, MPI_Info info, int root, MPI_Comm comm, MPI_Comm *newcomm); Estabelece uma comunicação com um cliente. É uma operação coletiva sobre o comunicador. Retorna um intercomunicador que permite a comunicação com o cliente. Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 69
70 Função do Cliente Estabelecimento de comunicação int MPI_Comm_connect(char *port_name, MPI_Info info, int root, MPI_Comm comm, MPI_Comm *newcomm); Estabelece uma comunicação com o servidor especificado em port_name. É uma operação coletiva e retorna um intercommunicador com o grupo que participou do MPI_COMM_ACCEPT Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 70
71 Publicando um serviço Estabelecimento de comunicação int MPI_Publish_name(char *service_name, MPI_Info info, char *port_name); Esta rotina publica o par( port_name, service_name) de forma que uma aplicação pode encontrar uma deterninada porta (port_name) utilizando o nome de um serviço conhecido (service_name). int MPI_Lookup_name(char *service_name, MPI_Info info, char *port_name); Permite procurar a porta associada a um serviço. int MPI_Unpublish_name(char *service_name, MPI_Info info, char *port_name); Retira a publicação de um serviço. Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 71
72 Exemplo de estabelecimento de conexão Sem serviço de nomes: o servidor imprime o port name e o usuário precisa informar no cliente. Servidor: char myport[mpi_max_port_name]; MPI_Comm intercomm; /*... */ MPI_Open_port(MPI_INFO_NULL, myport); printf("port name is: %s\n", myport); MPI_Comm_accept(myport, MPI_INFO_NULL, 0, MPI_COMM_SELF, &intercomm); /* do something with intercomm */ Cliente: MPI_Comm intercomm; char name[mpi_max_port_name]; printf("enter port name: "); gets(name); MPI_Comm_connect(name, MPI_INFO_NULL, 0, MPI_COMM_SELF, &intercomm); Outros exemplos em: Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 72
73 E/S Paralela Múltiplas instâncias de um programa paralelo acessando um mesmo arquivo. Alternativas não paralelas: Todos os processos mandam os dados para um processo servidor (como o processo rank 0) e este processo se encarrega de escrever Cada processo opera sua saída de dados em um arquivo próprio e após é feita a união dos resultados Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 73
74 E/S Paralela Alternativas não paralelas são simples, mas: Oferecem baixo desempenho (um único processo escreve o arquivo) Baixo índice de interoperabilidade (cada processo escrevendo em próprio arquivo) E/S Paralela Melhor desempenho Um único arquivo de saída pode ser melhor operado por outras aplicações colaboradores (ex.: visualização) Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 74
75 E/S Paralela Escrita/Leitura E/S Paralela em MPI Similares ao Envio/Recebimento de mensagems Em essência, operações de E/S paralela reflete a estrutura de MPI: Define operações coletivas (MPI communicators) Define layout de dados não contíguos em memória e em arquivo (MPI datatypes) Necessita de teste de término de operações não bloqueantes (MPI request objects) Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 75
76 E/S Paralela E/S Paralela em MPI Arquivo P0 P1 P2 P(n-1) Cada processo necessita ler um bloco de dados a partir de um arquivo compartilhado Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 76
77 E/S Paralela Operações: MPI_File_open MPI_MODE_CREATE MPI_MODE_WRONLY MPI_MODE_RDWR MPI_File_seek MPI_File_close MPI_File_write MPI_File_write_at E/S Paralela em MPI Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 77
78 E/S Paralela E/S Paralela em MPI MPI_File fh; MPI_Status status; MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); bufsize = FILESIZE/nprocs; nints = bufsize/sizeof(int); MPI_File_open(MPI_COMM_WORLD, "/pfs/datafile", MPI_MODE_RDONLY, MPI_INFO_NULL, &fh); MPI_File_seek(fh, rank * bufsize, MPI_SEEK_SET); MPI_File_read(fh, buf, nints, MPI_INT, &status); MPI_File_close(&fh); Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 78
79 E/S Paralela File Views em MPI Processos File views Arquivo MPI_File_set_view define regiões visíveis a processos MPI Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 79
80 E/S Paralela File Views em MPI int MPI_File_set_view(MPI_File fh, MPI_Offset disp, MPI_Datatype etype, MPI_Datatype filetype, char *datarep, MPI_Info info); File views são especificados por uma tupla contendo três informações: displacement: número de bytes a serem disconsiderados no início do arquivo etype: unidade básica de acesso (tipo primitivo ou derivado) filetype: especifica qual porção do arquivo é visível ao processo datarep: native, internal ou external32 Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 80
81 E/S Paralela MPI_File thefile; E/S Paralela em MPI for (i=0; i<bufsize; i++) buf[i] = myrank * BUFSIZE + i; MPI_File_open(MPI_COMM_WORLD, "testfile", MPI_MODE_CREATE MPI_MODE_WRONLY, MPI_INFO_NULL, &thefile); MPI_File_set_view(thefile,myrank*BUFSIZE*sizeof(int), MPI_INT, MPI_INT, "native", MPI_INFO_NULL); MPI_File_write(thefile, buf, BUFSIZE, MPI_INT, MPI_STATUS_IGNORE); MPI_File_close(&thefile); Prof. Gerson Cavalheiro Programação Paralela e Distribuída 2006 CC/ UNISINOS 81
Introdução a Computação Paralela: Rotinas MPI em Clusters Beowulf
Introdução a Computação Paralela: Rotinas MPI em Clusters Beowulf Miguel Dias Costa João Viana Lopes Centro de Física do Porto Estrutura do Curso Motivação Estrutura do Curso Motivação Conceitos de Computação
Programação Paralela com Troca de Mensagens. Profa Andréa Schwertner Charão DLSC/CT/UFSM
Programação Paralela com Troca de Mensagens Profa Andréa Schwertner Charão DLSC/CT/UFSM Sumário Modelo de programa MPI Comunicação em MPI Comunicadores Mensagens Comunicação ponto-a-ponto Comunicação coletiva
Message Passing Interface - MPI
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
Computação por Passagem de Mensagens
Computação por Passagem de Mensagens Programação por passagem de mensagens Programação de multiprocessadores conectados por rede pode ser realizada: criando-se uma linguagem de programação paralela especial
EXERCÍCIO 1 MUDANDO AS CORES
EXERCÍCIO 1 MUDANDO AS CORES O código abaixo ilustra o uso da comunicação ponto-a-ponto e a comunicação coletiva. Nesse código, uma matriz de três cores (verde, branco, vermelho e) é distribuída para todos
Arquitecturas Paralelas I Computação Paralela em Larga Escala. Passagem de Mensagens
Arquitecturas Paralelas I Computação Paralela em Larga Escala LESI/LMCC - 4º/5º Ano Passagem de Mensagens João Luís Ferreira Sobral Departamento do Informática Universidade do Minho Novembro 2004 Passagem
Algoritmos Paralelos usando CGM/MPI. Edson Norberto Cáceres e Siang Wun Song DCT/UFMS e DCC/IME/USP Aula 05
Algoritmos Paralelos usando CGM/MPI Edson Norberto Cáceres e Siang Wun Song DCT/UFMS e DCC/IME/USP Aula 05 Algoritmos Paralelos BSP/CGM Objetivos Descrever algumas das principais técnicas para o desenvolvimento
Parte da Tarefa. Parte da Tarefa. Parte da Tarefa SEND RECEIVE SEND RECEIVE
Produto Escalar com MPI-2 (C++) Aula Sistemas Distribuídos Prof. Dr. Marcelo Facio Palin [email protected] 1 1 O que é Paralelismo? Conceitos Paralelismo é uma técnica usada em tarefas grandes e complexas
Curso de Informática DCC-IM / UFRJ. Gabriel P. Silva MPI
Curso de Informática DCC-IM / UFRJ MPI Um curso prático Gabriel P. Silva MPI É um padrão de troca de mensagens portátil que facilita o desenvolvimento de aplicações paralelas. Usa o paradigma de programação
Programação Paralela em Memória Compartilhada e Distribuída
Programação Paralela em Memória Compartilhada e Distribuída Prof. Claudio Schepke [email protected] Prof. João V. F. Lima [email protected] (baseado em material elaborado por professores
QUEBRA DE SENHAS MD5 UTILIZANDO MDCRACK E MPI
UNIVERSIDADE FEDERAL DE SANTA MARIA CENTRO DE TÉCNOLOGIA CURSO DE CIÊNCIA DA COMPUTAÇÃO QUEBRA DE SENHAS MD5 UTILIZANDO MDCRACK E MPI Cicero Augusto de Lara Pahins, Cristiano Reis dos Santos. Professora:
Programação Paralela Avançada. N. Maillard - M. Cera
Programação Paralela Avançada N. Maillard - M. Cera Programação Paralela Avançada Introdução Geral 2 Programação Paralela é crítica 3 Programação Paralela é difícil Em nível conceitual + em nível técnico.
MPI (Message Passing Interface)
MPI (Message Passing Interface) Standard desenvolvido por académicos e indústria. Define rotinas, não a implementação. Não define como se criam os processos (depende da implementação) Existem várias implementações
Message Passing Interface
Message Passing Interface Gonzalo Travieso 2011 Sumário 1 Conceitos Básicos 2 Inicialização e Finalização........................................... 3 Processos....................................................
Introdução. Programação Paralela. Motivação. Conhecimento do Hardware. Análise de Desempenho. Modelagem do Problema
Introdução Programação Paralela Profa Mariana Kolberg e Prof. Luiz Gustavo Fernandes Programação paralela é a divisão de um problema em partes, de maneira que essas partes possam ser executadas paralelamente
Programação Paralela. Profa Mariana Kolberg e Prof. Luiz Gustavo Fernandes
Programação Paralela Profa Mariana Kolberg e Prof. Luiz Gustavo Fernandes Introdução Programação paralela é a divisão de um problema em partes, de maneira que essas partes possam ser executadas paralelamente
Clusters de Alto Desempenho e programação distribuída
Roteiro da apresentação Clusters de Alto Desempenho e programação distribuída Nicolas Maillard Instituto de Informática UFRGS 2008 O contexto: do Processamento de Alto Desempenho à programação paralela...
Instruções para uso do MPI - Relatório Técnico -
Universidade de Passo Fundo Instituto de Ciências Exatas e Geociências Curso de Ciência da Computação Instruções para uso do MPI - Relatório Técnico - ComPaDi Grupo de Pesquisa em Computação Paralela e
1 - CONCEITOS BÁSICOS
1 ÍNDICE Capítulo 1 - CONCEITOS BÁSICOS 1.1 - O QUE É PARALELISMO?... 1.2 - PRA QUE PARALELIZAR?... 1.3 - TIPOS DE PARALELISMO... 1.4 - AMBIENTE PARALELO... 1.5 PROGRAMAÇÃO PARALELA... 1.6 - COMO PROGRAMAR
ALGORÍTMOS PARALELOS (Aula 5)
ALGORÍTMOS PARALELOS (Aula 5) Neyval C. Reis Jr. OUTUBRO/2004 LCAD Laboratório de Computação de Alto Desempenho DI/UFES Programa do Curso LCAD 1. Introdução 2. Arquitetura de Computadores 3. Arquiteturas
Programação de Alto Desempenho - 2. Prof: Carla Osthoff
Programação de Alto Desempenho - 2 Prof: Carla Osthoff E-mail: [email protected] 3- Modelos de programação paralela Shared Memory/Threads Posix Win32 treads OpenMP Message Passing MPI Data Parallel OpenCL/Cuda
PROGRAMAÇÃO PARALELA USANDO MPI
PROGRAMAÇÃO PARALELA USANDO MPI Maurílio Boaventura DCCE/IBILCE/UNESP São José do Rio Preto - SP Nos computadores convencionais, um programa é um conjunto de instruções que são transmitidas à unidade de
2 Arquitetura Paralela
1 Resumo Esta monografia tem como objetivo o desenvolvimento de uma ferramenta para auxiliar no desenvolvimento de programa que utilizam a biblioteca MPI Esta ferramenta mostra ao usuário qual a carga
Relatório Trabalho 1 Programação Paralela
Relatório Trabalho 1 Programação Paralela Gustavo Rissetti 1 Rodrigo Exterckötter Tjäder 1 1 Acadêmicos do Curso de Ciência da Computação Universidade Federal de Santa Maria (UFSM) {rissetti,[email protected]
Linguagem Chapel. Walter Perez Urcia. Universidade de São Paulo Instituto de Matemática e Estadística Departamento de Ciências da Computação
Linguagem Chapel Walter Perez Urcia Universidade de São Paulo Instituto de Matemática e Estadística Departamento de Ciências da Computação 17 de junho de 2015 Walter Perez (IME - USP) Linguagem Chapel
Universidade de Coimbra - Faculdade de Ciências e Tecnologia Departamento de Matemática
Universidade de Coimbra - Faculdade de Ciências e Tecnologia Departamento de Matemática COMPUTAÇÃO PARALELA - 2005/2006 4ºANO PROBLEMA 1 DETERMINAÇÃO DOS NÚMEROS PRIMOS *** RELATÓRIO *** Sara Catarina
AULA 06: PROGRAMAÇÃO EM MÁQUINAS PARALELAS
ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES II AULA 06: PROGRAMAÇÃO EM MÁQUINAS PARALELAS Prof. Max Santana Rolemberg Farias [email protected] Colegiado de Engenharia de Computação PROGRAMAÇÃO PARALELA
Sistemas de Troca de Mensagens
Universidade Federal do Rio de Janeiro Programa de Pós-Graduação em Informática DCC/IM - NCE/UFRJ Arquitetura de Sistemas Paralelos Sistemas de Troca de Mensagens Sistemas de Comunicação O Sistema de Comunicação
TÍTULO: PROGRAMAÇÃO PARALELA - UMA INTRODUÇÃO AO PARALELISMO COM A OPENMPI
Anais do Conic-Semesp. Volume 1, 2013 - Faculdade Anhanguera de Campinas - Unidade 3. ISSN 2357-8904 TÍTULO: PROGRAMAÇÃO PARALELA - UMA INTRODUÇÃO AO PARALELISMO COM A OPENMPI CATEGORIA: CONCLUÍDO ÁREA:
Paralela e Distribuída. com o MPI e o OpenMP
Programação Paralela e Distribuída Programação Híbrida com o e o OpenMP e OpenMP Uma forma de executar um programa em paralelo num cluster multiprocessor é criar um processo por cada processador. Nesse
Programação I A Linguagem C. Prof. Carlos Alberto
Programação I A Linguagem C Prof. Carlos Alberto [email protected] [email protected] 2 Origem A linguagem C foi desenvolvida em 1972, nos Laboratórios Bell, por Dennis Ritchie. Implementada
Programação Paralela. Simone de Lima Martins Agosto/2002
Programação Paralela Simone de Lima Martins Agosto/2002 Computação por Passagem de Mensagens Arquitetura de computadores que utilizam passagem de mensagens Computadores conectados por uma rede estática
Introdução OpenMP. Nielsen Castelo Damasceno
Introdução OpenMP Nielsen Castelo Damasceno Computação de auto desempenho Processamento Paralelo Memória Distribuída e Compartilhada Modelo de programação OpenMP Métricas de Desempenho Computação de auto
Sockets - Conceitos Básicos. COMUNICAÇÃO ENTRE PROCESSOS Sockets. Conceitos Básicos. Tipos de Sockets
Sockets - Conceitos Básicos COMUNICAÇÃO ENTRE PROCESSOS Sockets! Sockets são uma forma de IPC (InterProcess Communication ) fornecida pela 4.3 BSD que fornecem comunicação entre processos residentes em
Estruturas de Sistemas Operacionais
Estruturas de Sistemas Operacionais Sistemas Operacionais - Tópicos Componentes do Sistema Serviços de Sistemas Operacionais Chamadas ao Sistema Estrutura do Sistema Máquinas Virtuais Chamadas ao Sistema
Processos ca 3 pítulo
Processos capítulo 3 Introdução: Threads Para executar um programa, o sistema operacional cria um determinado números de processos virtuais. O sistema operacional mantém uma tabela de processos que contém
Comunicação orientada a mensagens
Comunicação orientada a mensagens críticas a RPC sincronismo modelo um a um dificuldades de tratamento de falhas dificuldades com arquiteturas não clienteservidor volta ao modelo de troca de mensagens
Ambientes de troca de mensagens - MPI. Aleardo Manacero Jr.
Ambientes de troca de mensagens - MPI Aleardo Manacero Jr. Ambientes de troca de mensagens Como já mencionado, os chamados ambientes de troca de mensagens aparecem para facilitar a programação paralela
Programação: Vetores
Programação de Computadores I Aula 09 Programação: Vetores José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011-1 1/62 Motivação Problema Faça um programa que leia
Linguagem C Princípios Básicos (parte 1)
Linguagem C Princípios Básicos (parte 1) Objetivos O principal objetivo deste artigo é explicar alguns conceitos fundamentais de programação em C. No final será implementado um programa envolvendo todos
Sistemas Distribuídos e Paralelos
Sistemas Distribuídos e Paralelos Aula #6: Programação paralela em sistemas de memória compartilhada. ISUTIC - 2016 Eng. Alexander Rodríguez Bonet Aula de hoje Regiões paralelas. Cláusulas de âmbito. Partilha
Fundamentos de Sistemas Operacionais
Fundamentos de Sistemas Operacionais Aula 6: Monitores, Troca de Mensagens e Deadlock Diego Passos Última Aulas Mecanismos de Exclusão Mútua Operações atômicas. Protocolos de controle de acesso. Spin-locks.
UFG - Instituto de Informática
UFG - Instituto de Informática Especialização em Desenvolvimento de Aplicações Web com Interfaces Ricas EJB 3.0 Prof.: Fabrízzio A A M N Soares [email protected] Aula 12 Beans Orientados a
Vamos fazer um pequeno experimento
1 Vamos fazer um pequeno experimento Dividam-se em dois grupos: Mestre Escravo Projeto de Sistemas Distribuídos Comunicação entre Processos Prof. Msc. Marcelo Iury de Sousa Oliveira [email protected]
Introdução à Computação: Máquinas Multiníveis
Introdução à Computação: Máquinas Multiníveis Beatriz F. M. Souza ([email protected]) http://inf.ufes.br/~bfmartins/ Computer Science Department Federal University of Espírito Santo (Ufes), Vitória,
Revisão C++ - Parte 1
Revisão C++ - Parte 1 Prof. Gustavo Leitão Campus Natal Central Disciplina Programação para Ambiente de Redes 5/3/2010 Objetivo da Aula 5/3/2010 5/3/2010 OBJETIVO DA AULA Revisar os principais comandos
Conhecendo a Linguagem de Programação C
Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação Conhecendo a Linguagem de Programação C DCA0800 - Algoritmos e Lógica de Programação Heitor Medeiros 1 Como
