Você está na página 1de 32

Parallel Virtual Machine

(PVM)
O que PVM?
Mquina virtual dinamicamente
configurvel
Protocolo de transmisso de mensagens de
alta-performance
Interface extremamente simples
Contm primitivas de alto-nvel como
broadcast e sincronizao com barreiras
Caractersticas
Tolerncia a falhas
Escalabilidade
Heterogeneidade
Portabilidade
O TID (Task Identifier)
Modelo de mensagens
O remetente no espera confirmao do
destinatrio. (Sua execuo continua assim
que a mensagem chega na camada de rede)
O destinatrio pode usar o mtodo
bloqueante e no-bloqueante (com e sem
time-out) para receber mensagens
Notificaes
Tarefa termina ou trava
Host removido ou trava
Host adicionado
O daemon PVM (pvmd)
Cada host da mquina virtual executa uma
instncia do pvmd
No permitido que deamons rodando
como usurios diferentes se comuniquem
A biblioteca PVM (libpvm)
to simples quanto possvel, aumentando
a eficincia
A segurana oferecida (como teste de
parmetros) mnima
Apenas a interface comum s diferentes
arquiteturas de mquina. O ncleo
otimizado especificamente para cada uma
Libpvm: Buffers de dados
A passagem de mensagens feita por meio
de ponteiros, para agilizar sua transmisso
O gerenciamento de memria feito por
uma espcie de coletor de lixo
Libpvm: Mensagens
O remetente cria buffers de dados com
primitivas especficas que anexam o tipo ao
cabealho
O destinatrio recebe a mensagem com tipo
determinado
Libpvm: Linguagens Disponveis
A biblioteca diretamente escrita em C e
C++
Existe uma biblioteca em Fortran que, na
verdade, um wrapper para a biblioteca em
C
Comunicao pvmd-pvmd
Protocolo UDP
Vantagens sobre o TCP:
Escalabilidade
Baixo overhead de inicializao
Flexibilidade para implementao de
mtodos de tolerncia a falhas
Comunicao pvmd-tarefa e
tarefa-tarefa
Protocolo TCP
Porqu do protocolo TCP
Inexistncia de confiabilidade do UDP
requer que os clientes interrompam
suas tarefas para gerenciar
problemas com pacotes
Roteamento de mensagens
As mensagens so fragmentadas de modo que o
tamanho dos pacotes seja igual ao MTU da rede
Eventualmente uma comunicao pvmd-pvmd
requer que os pacotes sejam refragmentados
O pvmd nunca se comunica com tarefas de outros
hosts
possvel estabeler uma comunicao direta entre
duas tarefas do mesmo host
Ambiente das tarefas
Variveis de ambiente so suportadas pelo
PVM, para exportar uma varivel:
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 parmetros e resultados, mandando
para o stdout, se o TID for 0 trace desligado
spawn com flag de depurao ligado faz
com que as tarefas sejam inicializadas com
o script de debug
Console PVM
programado em PVM
Configurao da virtual machine,
Inicializao de processos
coleta sada e maneja traces
maneja mensagens de notificao
Limitao de recursos
Inerente ao Sistema Operacional
PVM no impe limitaes. Quando
alguma limitao imposta pelo S.O. o
daemon lana uma mensagem de erro
Limitao de Recursos: daemon
quantos processos o usurio pode rodar?
quantos file-descriptors o pvmd pode ter?
TCP streams para comunicao com tarefas
mensagens so armazenadas em memria,
sem controle por parte do daemon.
Limitao de recursos: Tarefas
Com quantas outras tarefas pode se
conectar, TCP, conexo tarefa-tarefa
maior mensagem que uma tarefa pode
enviar est limitada ao espao de
endereamento da tarefa
overhead em um receptor nico
Sistemas multiprocessados
PVM possui suporte a sistemas
multiprocessados. Message Passing &
Shared Memory.
Transparncia para o usurio
Tarefa pode ser destinada a algum
computador especfico.
Ganho de eficincia.
Perda de portabilidade.
Ambiente De Programao
Consiste de um pool de hosts, configurado
pelo programador, onde mquinas podem
ser adicionadas ou excludas deste pool.
Pode ser uma mquina, mono ou multi-
processada, vrias mquinas em cluster ou
distribudas por uma rede, podem inclusive
estar geograficamente distantes (i.e.
Internet)
Nveis de programao
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
mquina especfica em que determinada tarefa
dever ser executada
Esquema de programao
Para cada tarefa a ser executada, o
programador gera um novo programa.
Este programa ser compilado para a
arquitetura do host pool.
O usurio 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
Inicializao do programa:
info=pvm_mytid()
Finalizao do programa: pvm_exit()
Para lanar uma tarefa a vrios
processadores, deve-se usar a funo
pvm_spawn:
numt=pvm_spawn("my_task", argv,
mode, where, n_task, tids)
Comunicao entre tarefas
Inicializao de transmisso:
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, porm, com timeout
Pvm_nrecv: igual ao recv, porm, no bloqueante
Pvm_probe: simplesmente avisa se uma
mensagem chegou ou no
pvm_unpack()
Grupos Dinmicos De Processos
Quando um conjunto de tarefas executam
operaes 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 no 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

Você também pode gostar