Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouArthur Ramires Miranda Alterado mais de 8 anos atrás
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
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.