Parallel Virtual Machine (PVM)

Post on 31-Jan-2016

83 views 2 download

description

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. - PowerPoint PPT Presentation

Transcript of Parallel Virtual Machine (PVM)

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