Parallel Virtual Machine (PVM)
O que é PVM? <ul><li>Máquina virtual dinamicamente configurável </li></ul><ul><li>Protocolo de transmissão de mensagens de...
Características <ul><li>Tolerância a falhas </li></ul><ul><li>Escalabilidade </li></ul><ul><li>Heterogeneidade </li></ul><...
O TID (Task Identifier)
Modelo de mensagens <ul><li>O remetente não espera confirmação do destinatário. (Sua execução continua assim que a mensage...
Notificações <ul><li>Tarefa termina ou trava </li></ul><ul><li>Host é removido ou trava </li></ul><ul><li>Host é adicionad...
O daemon PVM (pvmd) <ul><li>Cada host da máquina virtual executa uma instância do pvmd </li></ul><ul><li>Não é permitido q...
A biblioteca PVM (libpvm) <ul><li>É tão simples quanto possível, aumentando a eficiência </li></ul><ul><li>A segurança ofe...
Libpvm: Buffers de dados <ul><li>A passagem de mensagens é feita por meio de ponteiros, para agilizar sua transmissão </li...
Libpvm: Mensagens <ul><li>O remetente cria buffers de dados com primitivas específicas que anexam o tipo ao cabeçalho </li...
Libpvm: Linguagens Disponíveis <ul><li>A biblioteca é diretamente escrita em C e C++ </li></ul><ul><li>Existe uma bibliote...
Comunicação pvmd-pvmd <ul><li>Protocolo UDP </li></ul><ul><li>Vantagens sobre o TCP: </li></ul><ul><li>Escalabilidade </li...
Comunicação pvmd-tarefa e tarefa-tarefa  <ul><li>Protocolo TCP </li></ul><ul><li>Porquê do protocolo TCP </li></ul><ul><li...
Roteamento de mensagens <ul><li>As mensagens são fragmentadas de modo que o tamanho dos pacotes seja igual ao MTU da rede ...
Ambiente das tarefas <ul><li>Variáveis de ambiente são suportadas pelo PVM, para exportar uma variável: PVM_EXPORT=nomes <...
Ambiente das tarefas: Tracing e Debugging <ul><li>PVM pode armazenar todas as chamadas com parâmetros e resultados, mandan...
Console PVM <ul><li>programado em PVM </li></ul><ul><li>Configuração da virtual machine,  </li></ul><ul><li>Inicialização ...
Limitação de recursos <ul><li>Inerente ao Sistema Operacional </li></ul><ul><li>PVM não impõe limitações. Quando alguma li...
Limitação de Recursos: daemon <ul><li>quantos processos o usuário pode rodar? </li></ul><ul><li>quantos file-descriptors o...
Limitação de recursos: Tarefas <ul><li>Com quantas outras tarefas pode se conectar, TCP, conexão tarefa-tarefa </li></ul><...
Sistemas multiprocessados <ul><li>PVM possui suporte a sistemas multiprocessados. Message Passing & Shared Memory. </li></...
Ambiente De Programação <ul><li>Consiste de um  pool  de hosts, configurado pelo programador, onde máquinas podem ser adic...
Níveis de programação <ul><li>Transparent mode: a tarefa é executada automaticamente no computador mais apropriado </li></...
Esquema de programação <ul><li>Para cada tarefa a ser executada, o programador gera um novo programa. </li></ul><ul><li>Es...
Programando com PVM <ul><li>Incluir o header pvm3.h </li></ul><ul><li>Inicialização do programa:  info=pvm_mytid() </li></...
Comunicação entre tarefas <ul><li>Inicialização de transmissão: buf_id=pvm_initsend(mEmpacotamento). </li></ul><ul><li>Emp...
Recebendo Mensagens <ul><li>bufid=pvm_recv(tid, msgtag)   </li></ul><ul><li>Tid ou msgtag = -1 aceita qualquer valor </li>...
Grupos Dinâmicos De Processos <ul><li>Quando um conjunto de tarefas executam operações parecidas, pode-se criar um grupo d...
<ul><li>Pvm_barrier() </li></ul><ul><li>Pvm_gather() </li></ul><ul><li>Pvm_scatter() </li></ul><ul><li>Pvm_reduce() </li><...
Exemplos de programas //hello.c main() {  int cc, tid, msgtag;  char buf[100];  printf(&quot;i'm t%xn&quot;, pvm_mytid());...
//Hello_other.c #include &quot;pvm3.h“ main() {  int ptid, msgtag;  char buf[100];  ptid = pvm_parent();  strcpy(buf, &quo...
Links <ul><li>http://www.epm.ornl.gov/pvm/ </li></ul><ul><li>http://www.netlib.org/pvm3/ </li></ul><ul><li>http://www.math...
Próximos SlideShares
Carregando em…5
×

Pvm

394 visualizações

Publicada em

Publicada em: Educação, Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
394
No SlideShare
0
A partir de incorporações
0
Número de incorporações
3
Ações
Compartilhamentos
0
Downloads
10
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Pvm

  1. 1. Parallel Virtual Machine (PVM)
  2. 2. O que é PVM? <ul><li>Máquina virtual dinamicamente configurável </li></ul><ul><li>Protocolo de transmissão de mensagens de alta-performance </li></ul><ul><li>Interface extremamente simples </li></ul><ul><li>Contém primitivas de alto-nível como broadcast e sincronização com barreiras </li></ul>
  3. 3. Características <ul><li>Tolerância a falhas </li></ul><ul><li>Escalabilidade </li></ul><ul><li>Heterogeneidade </li></ul><ul><li>Portabilidade </li></ul>
  4. 4. O TID (Task Identifier)
  5. 5. Modelo de mensagens <ul><li>O remetente não espera confirmação do destinatário. (Sua execução continua assim que a mensagem chega na camada de rede) </li></ul><ul><li>O destinatário pode usar o método bloqueante e não-bloqueante (com e sem time-out) para receber mensagens </li></ul>
  6. 6. Notificações <ul><li>Tarefa termina ou trava </li></ul><ul><li>Host é removido ou trava </li></ul><ul><li>Host é adicionado </li></ul>
  7. 7. O daemon PVM (pvmd) <ul><li>Cada host da máquina virtual executa uma instância do pvmd </li></ul><ul><li>Não é permitido que deamons rodando como usuários diferentes se comuniquem </li></ul>
  8. 8. A biblioteca PVM (libpvm) <ul><li>É tão simples quanto possível, aumentando a eficiência </li></ul><ul><li>A segurança oferecida (como teste de parâmetros) é mínima </li></ul><ul><li>Apenas a interface é comum às diferentes arquiteturas de máquina. O núcleo é otimizado especificamente para cada uma </li></ul>
  9. 9. Libpvm: Buffers de dados <ul><li>A passagem de mensagens é feita por meio de ponteiros, para agilizar sua transmissão </li></ul><ul><li>O gerenciamento de memória é feito por uma espécie de coletor de lixo </li></ul>
  10. 10. Libpvm: Mensagens <ul><li>O remetente cria buffers de dados com primitivas específicas que anexam o tipo ao cabeçalho </li></ul><ul><li>O destinatário recebe a mensagem com tipo determinado </li></ul>
  11. 11. Libpvm: Linguagens Disponíveis <ul><li>A biblioteca é diretamente escrita em C e C++ </li></ul><ul><li>Existe uma biblioteca em Fortran que, na verdade, é um wrapper para a biblioteca em C </li></ul>
  12. 12. Comunicação pvmd-pvmd <ul><li>Protocolo UDP </li></ul><ul><li>Vantagens sobre o TCP: </li></ul><ul><li>Escalabilidade </li></ul><ul><li>Baixo overhead de inicialização </li></ul><ul><li>Flexibilidade para implementação de métodos de tolerância a falhas </li></ul>
  13. 13. Comunicação pvmd-tarefa e tarefa-tarefa <ul><li>Protocolo TCP </li></ul><ul><li>Porquê do protocolo TCP </li></ul><ul><li>Inexistência de confiabilidade do UDP requer que os clientes interrompam suas tarefas para gerenciar problemas com pacotes </li></ul>
  14. 14. Roteamento de mensagens <ul><li>As mensagens são fragmentadas de modo que o tamanho dos pacotes seja igual ao MTU da rede </li></ul><ul><li>Eventualmente uma comunicação pvmd-pvmd requer que os pacotes sejam refragmentados </li></ul><ul><li>O pvmd nunca se comunica com tarefas de outros hosts </li></ul><ul><li>É possível estabeler uma comunicação direta entre duas tarefas do mesmo host </li></ul>
  15. 15. Ambiente das tarefas <ul><li>Variáveis de ambiente são suportadas pelo PVM, para exportar uma variável: PVM_EXPORT=nomes </li></ul><ul><li>Cada tarefa tem /dev/null aberto como stdin </li></ul><ul><li>Stdout do parent </li></ul>
  16. 16. Ambiente das tarefas: Tracing e Debugging <ul><li>PVM pode armazenar todas as chamadas com parâmetros e resultados, mandando para o stdout, se o TID for 0 trace desligado </li></ul><ul><li>spawn com flag de depuração ligado faz com que as tarefas sejam inicializadas com o script de debug </li></ul>
  17. 17. Console PVM <ul><li>programado em PVM </li></ul><ul><li>Configuração da virtual machine, </li></ul><ul><li>Inicialização de processos </li></ul><ul><li>coleta saída e maneja traces </li></ul><ul><li>maneja mensagens de notificação </li></ul>
  18. 18. Limitação de recursos <ul><li>Inerente ao Sistema Operacional </li></ul><ul><li>PVM não impõe limitações. Quando alguma limitação é imposta pelo S.O. o daemon lança uma mensagem de erro </li></ul>
  19. 19. Limitação de Recursos: daemon <ul><li>quantos processos o usuário pode rodar? </li></ul><ul><li>quantos file-descriptors o pvmd pode ter? TCP streams para comunicação com tarefas </li></ul><ul><li>mensagens são armazenadas em memória, sem controle por parte do daemon. </li></ul>
  20. 20. Limitação de recursos: Tarefas <ul><li>Com quantas outras tarefas pode se conectar, TCP, conexão tarefa-tarefa </li></ul><ul><li>maior mensagem que uma tarefa pode enviar está limitada ao espaço de endereçamento da tarefa </li></ul><ul><li>overhead em um receptor único </li></ul>
  21. 21. Sistemas multiprocessados <ul><li>PVM possui suporte a sistemas multiprocessados. Message Passing & Shared Memory. </li></ul><ul><li>Transparência para o usuário </li></ul><ul><li>Tarefa pode ser destinada a algum computador específico. </li></ul><ul><ul><ul><li>Ganho de eficiência. </li></ul></ul></ul><ul><ul><ul><li>Perda de portabilidade. </li></ul></ul></ul>
  22. 22. Ambiente De Programação <ul><li>Consiste de um pool de hosts, configurado pelo programador, onde máquinas podem ser adicionadas ou excluídas deste pool. </li></ul><ul><li>Pode ser uma máquina, mono ou multi-processada, várias máquinas em cluster ou distribuídas por uma rede, podem inclusive estar geograficamente distantes (i.e. Internet) </li></ul>
  23. 23. Níveis de programação <ul><li>Transparent mode: a tarefa é executada automaticamente no computador mais apropriado </li></ul><ul><li>Architecture-dependent: o programador especifica o tipo de computador em que a tarefa deverá rodar </li></ul><ul><li>Low-level: o programador especifica uma máquina específica em que determinada tarefa deverá ser executada </li></ul>
  24. 24. Esquema de programação <ul><li>Para cada tarefa a ser executada, o programador gera um novo programa. </li></ul><ul><li>Este programa será compilado para a arquitetura do host pool. </li></ul><ul><li>O usuário inicia o processo mestre de uma tarefa. Este, por sua vez, inicializa os processos escravos (como será visto no Hello World remoto mais adiante). </li></ul>
  25. 25. Programando com PVM <ul><li>Incluir o header pvm3.h </li></ul><ul><li>Inicialização do programa: info=pvm_mytid() </li></ul><ul><li>Finalização do programa: pvm_exit() </li></ul><ul><li>Para lançar uma tarefa a vários processadores, deve-se usar a função pvm_spawn: numt=pvm_spawn(&quot;my_task&quot;, argv, mode, where, n_task, tids) </li></ul>
  26. 26. Comunicação entre tarefas <ul><li>Inicialização de transmissão: buf_id=pvm_initsend(mEmpacotamento). </li></ul><ul><li>Empacotamento dos dados: pvm_packM(), onde M é o modo de empacotamento </li></ul><ul><li>Enviar os dados: info=pvm_send(tid, msgtag) , onde o tag indica como os dados foram empacotados. pvm_mcast é parecido com o pvm_send, mas recebe um array de tids. </li></ul>
  27. 27. Recebendo Mensagens <ul><li>bufid=pvm_recv(tid, msgtag) </li></ul><ul><li>Tid ou msgtag = -1 aceita qualquer valor </li></ul><ul><li>Pvm_trecv: igual ao recv, porém, com timeout </li></ul><ul><li>Pvm_nrecv: igual ao recv, porém, não bloqueante </li></ul><ul><li>Pvm_probe: simplesmente avisa se uma mensagem chegou ou não </li></ul><ul><li>pvm_unpack() </li></ul>
  28. 28. Grupos Dinâmicos De Processos <ul><li>Quando um conjunto de tarefas executam operações parecidas, pode-se criar um grupo de processos </li></ul><ul><li>Para entrar em um grupo, uma tarefa deve chamar: inum=pvm_joingroup(&quot;group_name&quot;) , caso o grupo não exista, ele é criado. Inum será a ordem da tarefa no grupo </li></ul><ul><li>Para sair de um grupo: pvm_lvgroup() . </li></ul><ul><li>Pvm_bcast: envia a todas as tarefas do grupo </li></ul>
  29. 29. <ul><li>Pvm_barrier() </li></ul><ul><li>Pvm_gather() </li></ul><ul><li>Pvm_scatter() </li></ul><ul><li>Pvm_reduce() </li></ul>
  30. 30. Exemplos de programas //hello.c main() { int cc, tid, msgtag; char buf[100]; printf(&quot;i'm t%xn&quot;, pvm_mytid()); cc = pvm_spawn(&quot;hello_other&quot;, (char**)0, 0, &quot;&quot;, 1, &tid); if (cc == 1) { msgtag = 1; pvm_recv(tid, msgtag); pvm_upkstr(buf); printf(&quot;from t%x: %sn&quot;, tid, buf); } else printf(&quot;can't start hello_othern&quot;); pvm_exit(); }
  31. 31. //Hello_other.c #include &quot;pvm3.h“ main() { int ptid, msgtag; char buf[100]; ptid = pvm_parent(); strcpy(buf, &quot;hello, world from &quot;); msgtag = 1; pvm_initsend(PvmDataDefault); pvm_pkstr(buf); pvm_send(ptid, msgtag); pvm_exit(); }
  32. 32. Links <ul><li>http://www.epm.ornl.gov/pvm/ </li></ul><ul><li>http://www.netlib.org/pvm3/ </li></ul><ul><li>http://www.math.cmu.edu/Parallel_Cluster/pvm.html </li></ul>

×