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

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

1 Middleware Marcellus Tavares. 2 Roteiro Sistemas distribuídos Motivação Middleware  MPI  RMI Referências.

Apresentações semelhantes


Apresentação em tema: "1 Middleware Marcellus Tavares. 2 Roteiro Sistemas distribuídos Motivação Middleware  MPI  RMI Referências."— Transcrição da apresentação:

1 1 Middleware Marcellus Tavares

2 2 Roteiro Sistemas distribuídos Motivação Middleware  MPI  RMI Referências

3 3 Sistemas distribuídos “Coleção de computadores autônomos interligados através de uma rede de computadores e equipados com software que permita o compartilhamento dos recursos do sistema: hardware, software e dados" George Coulouris “Coleção de computadores independentes que se apresenta ao usuário como um sistema único e consistente” Andrew Tanenbaum

4 4 Motivação para Arquiteturas paralelas Performance Custo Disponibilidade e confiabilidade

5 5 Middleware [1/2] Camada que fornece um link entre aplicações distintas. Conjunto reusável e expansível de serviços e funções comumente necessários por parte de várias aplicações para funcionarem bem em um ambiente de rede. (NGI workshop, ’97)

6 6 Middleware [2/2] Facilita o desenvolvimento de aplicações distribuídas. ClienteServidor Middleware

7 7 Middleware - modelos Message-Oriented Middleware (MOM)  MPI Object-Oriented Middleware  RMI

8 8 O modelo de passagem de mensagens Um processo é (tradicionalmente) um PC + espaço de endereçamento Programas podem ter múltiplas threads compartilhando um único espaço de endereçamento. MPI é para a comunicação entre processos com espaços de endereçamento separados Comunicação inter-processos consistem de:  Sincronização  Movimentação de dados

9 9 Passagem de mensagens [Cooperative Operations] Os processos coordenam suas atividades através de trocas explícitas de mensagens (envio e recebimento) Comunicação e sincronização são combinadas Process 0 Process 1 Send(data) Receive(data)

10 10 Passagem de mensagens [One-Sided Operations] Acesso remoto a memória para escrita e leitura Só um processo precisa participar Comunicação e sincronização estão separados Parte do MPI-2 Process 0 Process 1 Put(data) (memory) Get(data)

11 11 O que é MPI ? Message-Passing Interface Especificação de uma biblioteca para a passagem de mensagens  Não é uma linguagem  Não é um produto ou uma implementação específica Desenhada para computadores paralelos

12 12 Por que usar MPI? MPI provê uma maneira poderosa, eficiente e portável de expressar programas paralelos. Possibilidade de desenvolvedores escreverem bibliotecas paralelas. MPI foi explicitamente desenhada para esse propósito

13 13 Exemplo Simples programa utilizando MPI_Send e MPI_Recv Na maioria dos sistemas paralelos os processos envolvidos na execução de um programa paralelo são identificados por inteiros não negativos.

14 14 MPI_Send Envia dados referenciados pelo buffer para o processo especificado pelo destination Int MPI_Send (void* buffer, int count, MPI_Datatype datatype, int destination, int tag, MPI_Comm communicator)

15 15 MPI_Recv Recebe os dados enviados pelo processo especificado pelo source e os armazena no buffer. Int MPI_Recv (void* buffer, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm communicator, MPI_Status* status)

16 16 Exemplo [Greetings 1/2] #include #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 */ /* receive */ /* 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);

17 17 Exemplo [Greetings 2/2] 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 */

18 18 Considerações [Greetings] Saída se o programa fosse rodado com 4 processos Greetings from process 1 Greetings from process 2 Greetings from process 3 De uma forma mais geral na programação MIMD teríamos um programa para cada processo Na prática isso não é necessário  if/else em um único programa  SPMD (Single-program multiple-data)

19 19 Informações sobre o ambiente Duas questões logo são levantadas na programação paralela  Quantos processos estão participando dessa computação?  Que processo sou eu? MPI provê funções que respondem a essas perguntas  MPI_Comm_size: retorna o número de processos  MPI_Comm_rank: retorna o rank, número entre 0 e size-1 que identifica o processo

20 20 Conceitos Básicos Processos são postos em grupos Cada mensagem é enviada em um contexto e deve ser recebida nesse mesmo contexto O grupo e o contexto forma o que se chama de communicator Existe um communicator default cujo grupo contém todos os processos iniciais: MPI_COMM_WORLD

21 21 Tipos de dados MPI O tipo de dado MPI pode ser  Predefinido (MPI_INT, MPI_DOUBLE)  Tipos de dados derivados

22 22 MPI Tags Mensagens são enviadas junto com um inteiro definido pelo usuário chamado de tag As mensagens podem ser selecionadas pelo destinatário através da tag ou não. MPI_ANY_TAG

23 23 Operações coletivas em MPI São chamadas por todos os processos em um communicator MPI_BCAST MPI_REDUCE Em muitos algoritmos, SEND/RECEIVE podem ser substituídos por BCAST/REDUCE como uma alternativa para aumentar a simplicidade e eficiência

24 24 MPI_Bcast e MPI_Reduce

25 25 Exemplo: MPI_BCAST #include “mpi.h” void Get_data(float* a_ptr /*out*/, float* b_ptr/*out*/, int* n_ptr /*out*/, int my_rank /*in*/ ){ if (my_rank == 0){ printf(“Entre com a,b and n\n”); scanf(“%f %f $d”, a_ptr,b_ptr,n_ptr); } MPI_Bcast(a_ptr, 1, MPI_FLOAT, 0, MPI_COMM_WORLD); MPI_Bcast(b_ptr, 1, MPI_FLOAT, 0, MPI_COMM_WORLD); MPI_Bcast(n_ptr, 1, MPI_INT, 0, MPI_COMM_WORLD); }

26 26 Operações de redução Usados para combinar resultados parciais de todos os processos Diversos tipos de operações disponíveis int MPI_Reduce(void * operand /*in*/, void* result /*out*/, int count /*in*/, MPI_Datatype datatype /*in*/, MPI_Op operator /*in*/, int root /*in*/, MPI_Comm communicator /*in*/)

27 27 Operações pré-definidas para MPI_Reduce MPI_MAXMaximum MPI_MINMinimum MPI_PRODProduct MPI_SUMSum MPI_LANDLogical and MPI_LORLogical or MPI_LXORLogical exclusive or MPI_BAND Bitwise and MPI_BORBitwise or MPI_BXORBitwise exclusive or MPI_MAXLOCMaximum value and location MPI_MINLOCMinimum value and location

28 28 Exemplo Soma paralela MPI_Reduce(&resultado_local, &total, 1, MPI_FLOAT, MPI_SUM, 0, MPI_COMM_WORLD);

29 29 Object-Oriented Middleware Object Request Broker STUB OBJ SKEL SERVER

30 30 RMI Remote Method Invocation. Permite objetos Java invocar transparentemente métodos de outros objetos (que podem estar em máquinas diferentes – objetos remotos) Java RMI libera o programador de tratar de detalhes como endereçamento e codificação/ decodificação de mensagens

31 31 RMI

32 32 RMI - Implementação Módulo de comunicação  Protocolo request-reply Módulo de referência remota  realiza a tradução entre referências de objetos remotos e locais, e cria referências de objetos remotos (tabela de objetos remotos) Proxy (localizado no cliente)  marshaling de parâmetros, unmarshaling de resultados

33 33 RMI - Implementação Dispatcher (localizado no servidor) – recebe a requisição do módulo de comunicação e chama o método indicado na mensagem (methodId) Skeleton (localizado no servidor) – unmarshaling dos parâmetros, marshaling dos resultados

34 34 RMI - Implementação Geração das classes para proxies, dispatchers e skeleton  geradas pelo compilador de interfaces Binder  serviço que mantém uma tabela contendo os mapeamentos denomes textuais para referências de objetos remotos. (rmiregistry) Threads do servidor  para cada invocação remota é disparada uma thread no servidor (concorrência)

35 35 Referências http://pt.wikipedia.org/wiki/Computa%C3%A7%C 3%A3o_distribu%C3%ADda http://pt.wikipedia.org/wiki/Computa%C3%A7%C 3%A3o_distribu%C3%ADda http://www-unix.mcs.anl.gov/mpi/ http://www.mpi-forum.org/ Peter S. Pacheco Parallel Programming with MPI http://www.mcs.anl.gov/mpi/tutorials/perf http://www.mpi-forum.org http://java.sun.com/docs/books/tutorial/rmi/index. html http://java.sun.com/docs/books/tutorial/rmi/index. html


Carregar ppt "1 Middleware Marcellus Tavares. 2 Roteiro Sistemas distribuídos Motivação Middleware  MPI  RMI Referências."

Apresentações semelhantes


Anúncios Google