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

Pvm

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