parallel virtual machine (pvm)
Post on 31-Jan-2016
83 Views
Preview:
DESCRIPTION
TRANSCRIPT
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
top related