Title: Parallel Virtual Machine (PVM)
1Parallel Virtual Machine (PVM)
2O 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
3CaracterÃsticas
- Tolerância a falhas
- Escalabilidade
- Heterogeneidade
- Portabilidade
4O TID (Task Identifier)
5Modelo 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
6Notificações
- Tarefa termina ou trava
- Host é removido ou trava
- Host é adicionado
7O 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
8A 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
9Libpvm 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
10Libpvm 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
11Libpvm 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
12Comunicaçã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
13Comunicaçã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
14Roteamento 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
15Ambiente das tarefas
- Variáveis de ambiente são suportadas pelo PVM,
para exportar uma variável PVM_EXPORTnomes - Cada tarefa tem /dev/null aberto como stdin
- Stdout do parent
16Ambiente 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
17Console PVM
- programado em PVM
- Configuração da virtual machine,
- Inicialização de processos
- coleta saÃda e maneja traces
- maneja mensagens de notificação
18Limitaçã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
19Limitaçã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.
20Limitaçã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
21Sistemas 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.
22Ambiente 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)
23NÃ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
24Esquema 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).
25Programando com PVM
- Incluir o header pvm3.h
- Inicialização do programa infopvm_mytid()
- Finalização do programa pvm_exit()
- Para lançar uma tarefa a vários processadores,
deve-se usar a função pvm_spawn
numtpvm_spawn("my_task", argv, mode, where,
n_task, tids)
26Comunicação entre tarefas
- Inicialização de transmissão buf_idpvm_initsend(
mEmpacotamento). - Empacotamento dos dados pvm_packM(), onde M é o
modo de empacotamento - Enviar os dados infopvm_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.
27Recebendo Mensagens
- bufidpvm_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()
28Grupos 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
inumpvm_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- Pvm_barrier()
- Pvm_gather()
- Pvm_scatter()
- Pvm_reduce()
30Exemplos de programas
//hello.c main() int cc, tid, msgtag char
buf100 printf("i'm tx\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 tx 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 buf100 ptid
pvm_parent() strcpy(buf, "hello, world from
") msgtag 1 pvm_initsend(PvmDataDefault)
pvm_pkstr(buf) pvm_send(ptid, msgtag)
pvm_exit()
32Links
- http//www.epm.ornl.gov/pvm/
- http//www.netlib.org/pvm3/
- http//www.math.cmu.edu/Parallel_Cluster/pvm.html