PVM Thiago Villela. PVM - Parallel Virtual Machine Pacote (software) de paralelização que permite...

31
PVM Thiago Villela

Transcript of PVM Thiago Villela. PVM - Parallel Virtual Machine Pacote (software) de paralelização que permite...

Page 1: PVM Thiago Villela. PVM - Parallel Virtual Machine Pacote (software) de paralelização que permite a uma coleção heterogênea de computadores interligados.

PVM

Thiago Villela

Page 2: PVM Thiago Villela. PVM - Parallel Virtual Machine Pacote (software) de paralelização que permite a uma coleção heterogênea de computadores interligados.

PVM - Parallel Virtual Machine

• Pacote (software) de paralelização que permite a uma coleção heterogênea de computadores interligados em rede possa ser vista como uma máquina virtual paralela com memória distribuída, ou seja, como um único recurso computacional.

Page 3: PVM Thiago Villela. PVM - Parallel Virtual Machine Pacote (software) de paralelização que permite a uma coleção heterogênea de computadores interligados.

Histórico

Surgiu em 1989 nos laboratórios da Emory University e Oak Ridge National Laboratory, com o objetivo de criar e executar aplicações paralelas em um hardware já existente.

Page 4: PVM Thiago Villela. PVM - Parallel Virtual Machine Pacote (software) de paralelização que permite a uma coleção heterogênea de computadores interligados.

Principais Características

• Pode ser instalado por qualquer usuário• Pode ser partilhado entre usuários • Fácil de configurar através dos seu próprio

arquivo host• Configurações de usuários podem se sobrepor

sem conflitos • Fácil de escrever programas através de uma

interface de troca de mensagens padrão • Suporta C , FORTRAN e Java • Múltiplas aplicações podem rodar em um único

PVM • Pacote pequeno, requer apenas alguns Mbytes.

Page 5: PVM Thiago Villela. PVM - Parallel Virtual Machine Pacote (software) de paralelização que permite a uma coleção heterogênea de computadores interligados.

Heterogeneidade

• Aplicação: Subtarefas podem explorar a arquiterura que melhor se adapte ao seu problema

• Máquina: Computadores com diferentes formatos de dados, arquiteturas e sistemas operacionais

• Redes: Diferentes tipos de redes (Ethernet, Token Ring)

Page 6: PVM Thiago Villela. PVM - Parallel Virtual Machine Pacote (software) de paralelização que permite a uma coleção heterogênea de computadores interligados.

O Sistema PVM

• pvmd - um daemon

• console - interface entre o usuário e o sistema

• libpvm - a biblioteca de funções do pvm

• aplicação - programa do usuário

Page 7: PVM Thiago Villela. PVM - Parallel Virtual Machine Pacote (software) de paralelização que permite a uma coleção heterogênea de computadores interligados.

Conceitos• Hospedeiro:

– O Computador, também chamado nó • Máquina Virtual:

– Uma meta máquina composta de um ou mais hosts • Processo:

– Um programa: dados, pilha, etc • Tarefa:

– Um processo pvm • pvmd:

– O daemon do pvm • Mensagem:

– Uma lista ordenada de dados enviada de uma tarefa para outra • Grupo:

– Uma lista ordenada de tarefas que recebem um nome simbólico

Page 8: PVM Thiago Villela. PVM - Parallel Virtual Machine Pacote (software) de paralelização que permite a uma coleção heterogênea de computadores interligados.

PVMD

Page 9: PVM Thiago Villela. PVM - Parallel Virtual Machine Pacote (software) de paralelização que permite a uma coleção heterogênea de computadores interligados.

PVMD (2)

• Roda em cada hospedeiro da máquina virtual

• Autentica tarefas • Executa processos no hospedeiro • Provê detecção de falhas • Roteia mensagens • Mais robusto que as aplicações • Contato com os hospedeiros

Page 10: PVM Thiago Villela. PVM - Parallel Virtual Machine Pacote (software) de paralelização que permite a uma coleção heterogênea de computadores interligados.

Console

• acrescentar e remover máquinas na MV

• iniciar e encerrar tarefas em máquinas que fazem parte da MV

• listar parte ou todas as tarefas da MV

• eviar sinais para tarefas.

Page 11: PVM Thiago Villela. PVM - Parallel Virtual Machine Pacote (software) de paralelização que permite a uma coleção heterogênea de computadores interligados.

Console(2)

• Para iniciar a execução do console do PVM, basta digitar pvm na linha de comando do seu shell:

[user@quark user]$ pvm pvm>

Page 12: PVM Thiago Villela. PVM - Parallel Virtual Machine Pacote (software) de paralelização que permite a uma coleção heterogênea de computadores interligados.

Console(3)

• Para acrescentar novas máquinas em sua MV (ao ser iniciado o console acrescenta a máquina atual na MV caso ela já não esteja presente), use o comando add:

pvm> add quark 1 successful HOST DTID quark 40000 pvm>

Page 13: PVM Thiago Villela. PVM - Parallel Virtual Machine Pacote (software) de paralelização que permite a uma coleção heterogênea de computadores interligados.

Console(4)

• Para verificar a configuração atual da MV use o comando conf:

pvm> conf 1 host, 0 data format

HOST DTID ARCH SPEED DSIG

quark 40000 LINUX 1000 0x00408841

pvm>

Page 14: PVM Thiago Villela. PVM - Parallel Virtual Machine Pacote (software) de paralelização que permite a uma coleção heterogênea de computadores interligados.

Console(5)

• Para encerrar a execução do console sem desativar a MV, use o comando quit:

pvm> quit

Console: exit handler called

pvmd still running.

Page 15: PVM Thiago Villela. PVM - Parallel Virtual Machine Pacote (software) de paralelização que permite a uma coleção heterogênea de computadores interligados.

Console(6)• Antes de finalizar o programa, o console avisa o usuário que o

daemon do PVM (pvmd) ainda está rodando, portanto a MV continua ativa. Para encerrar tanto o console quanto a MV o comando a ser usado é halt:

[user@quark user]$ pvm pvmd already running. pvm> conf 1 host, 0 data format HOST DTID ARCH SPEED DSIG quark 40000 LINUX 1000 0x00408841 pvm> halt Terminated [user@quark user]$

Page 16: PVM Thiago Villela. PVM - Parallel Virtual Machine Pacote (software) de paralelização que permite a uma coleção heterogênea de computadores interligados.

Console(7)• add

– followed by one or more host names, adds these hosts to the virtual machine.

• alias – defines or lists command aliases.

• conf – lists the configuration of the virtual machine including hostname, pvmd

task ID, architecture type, and a relative speed rating. • delete

– followed by one or more host names, deletes these hosts from the virtual machine. PVM processes still running on these hosts are lost.

• echo – echo arguments.

• halt – kills all PVM processes including console, and then shuts down PVM.

All daemons exit.

Page 17: PVM Thiago Villela. PVM - Parallel Virtual Machine Pacote (software) de paralelização que permite a uma coleção heterogênea de computadores interligados.

Console(8)• help

– can be used to get information about any of the interactive commands. Help may be followed by a command name that lists options and flags available for this command.

• id – prints the console task id.

• jobs – lists running jobs.

• kill – can be used to terminate any PVM process.

• mstat – shows the status of specified hosts.

• ps -a – lists all processes currently on the virtual machine, their locations, their

task id's, and their parents' task id's.

Page 18: PVM Thiago Villela. PVM - Parallel Virtual Machine Pacote (software) de paralelização que permite a uma coleção heterogênea de computadores interligados.

Biblioteca – Controle de Processos

• Toda aplicação paralela pressupõe a existência de diversos processos que rodam concorrentemente. O gerenciamento de processos, ou tarefas como os processos são comumente referenciados na documentação do PVM, é feito através de um conjunto de funções de controle de processos.

Page 19: PVM Thiago Villela. PVM - Parallel Virtual Machine Pacote (software) de paralelização que permite a uma coleção heterogênea de computadores interligados.

Controle de Processos• pvm_mytid() – Devolve o identificador (um valor inteiro) pelo qual o

processo chamador é conhecido na MV. Este número é usado pelos demais processos PVM para comunicar-se com o processo chamador. Esta função normalmente é a primeira função PVM chamada no programa e tem a função dupla registrar o processo na MV e informar ao processo o seu identificador na MV.

• pvm_exit() – É a última função a ser chamada por um programa PVM. Ele informa ao pvmd local que o processo está se desligando da máquina virtual. A boa praxe de programação PVM exige que um programa comece com pvm_mytid() e termine em pvm_exit().

• pvm_spawn() – É usado para iniciar novas tarefas na MV. No modelo de programação mestre/escravo, esta função é usada no programa mestre para lançar processos escravos para as máquinas constituintes da MV.

• pvm_kill() – Tem por objetivo forçar o término da execução de algum processo PVM rodando na MV. Pode ser usada por um programa mestre para encerrar a execução de escravos trabalhando em soluções numéricas que não estão convergindo.

• pvm_addhosts()/pvm_delhosts() – Estas funções acrescentam e removem máquinas físicas da MV do PVM.

Page 20: PVM Thiago Villela. PVM - Parallel Virtual Machine Pacote (software) de paralelização que permite a uma coleção heterogênea de computadores interligados.

Biblioteca – Gerenciamento de Tarefas

• O gerenciamento de tarefas concorrentes em uma aplicação muitas vezes necessita da aquisição de informações adicionais sobre o estado da MV incluindo identificadores de outros processos, nome da máquina no qual uma tarefa está executando e outras informações.

Page 21: PVM Thiago Villela. PVM - Parallel Virtual Machine Pacote (software) de paralelização que permite a uma coleção heterogênea de computadores interligados.

Gerenciamento de Tarefas

• pvm_parent() – Função útil em processos escravos. Esta função retorna o identificador do processo que iniciou o processo atual. Este identificador será necessário se o escravo desejar trocar mensagens com o programa mestre.

• pvm_perror() – Esta função imprime para a saída padrão uma mensagem indicando o tipo de erro retornado por uma função PVM. Valores de retorno menores que 0 indicam um erro na função.

• pvm_config() – As informações retornadas por esta função são úteis para detectar falhas em máquinas e tarefas da MV. Por exemplo, para saber se alguma máquina da MV foi desligada ou desconectada da rede.

Page 22: PVM Thiago Villela. PVM - Parallel Virtual Machine Pacote (software) de paralelização que permite a uma coleção heterogênea de computadores interligados.

Biblioteca – Gerenciamento de Buffers

• Os chamados buffers são regiões de memória destinados a armazenar mensagens que serão enviados para outras tarefas ou recebidas delas. Toda comunicação entre tarefas envolve o uso de buffers. A memória ocupada por um buffer de envio ou recebimento deve ser inicializada antes de ser usada.

Page 23: PVM Thiago Villela. PVM - Parallel Virtual Machine Pacote (software) de paralelização que permite a uma coleção heterogênea de computadores interligados.

Gerenciamento de Buffers

• pvm_initsend() – Deve ser invocada ao menos uma vez no programa, define a codificação a ser usada na transmissão de dados. Uma discussão sobre codificação de dados se encontra na seção Funções de Envio de Dados a seguir, mas as opções são: codificação XDR e sem codificação.

• pvm_mkbuf() – Cria um novo buffer de dados. • pvm_freebuf() – Libera a memória alocada para

o buffer.

Page 24: PVM Thiago Villela. PVM - Parallel Virtual Machine Pacote (software) de paralelização que permite a uma coleção heterogênea de computadores interligados.

Biblioteca – Envio de Dados

• A funcionalidade do PVM é construída sobre um conjunto de diretivas de troca de mensagens. As aplicações PVM funcionam trocando informações que são empacotadas em mensagens. Cada mensagem possui um identificador de tipo, uma codificação e os dados propriamente ditos.

Page 25: PVM Thiago Villela. PVM - Parallel Virtual Machine Pacote (software) de paralelização que permite a uma coleção heterogênea de computadores interligados.

Funções de Envio de Dados

• pvm_send() – Envia os dados armazenados em um buffer de envio para uma dada tarefa.

• pvm_mcast() – Envia os dados armazenados em um buffer de envio para um conjunto de tarefas (multicast).

• pvm_pk??() – Este na verdade é um conjunto de funções de empacotamento (codificação + armazenamento) de dados em um buffer de envio. A função para empacotar um inteiro para transmissão se chama pvm_pkint() e assim por diante.

Page 26: PVM Thiago Villela. PVM - Parallel Virtual Machine Pacote (software) de paralelização que permite a uma coleção heterogênea de computadores interligados.

Funções de Recepção de Dados

• pvm_recv() – Recebe uma mensagem enviada por outro processo e a coloca no buffer de recebimento. Caso não existam mensagens a ser recebidas, o processo fica bloqueado até que uma mensagem se faça disponível para recepção.

• pvm_nrecv() – Análoga à função anterior com a diferença que a função retorna um erro ao invés de bloquear o processo se não existirem mensagens para serem recebidas.

• pvm_upk??() – Estas funções são análogas às funções pvm_pk??(). Servem para desempacotar (decodificar + retirar do buffer) os dados armazenados no buffer de recebimento. Para desempacotar um inteiro use a função pvm_upkint() e assim por diante. Uma descrição de todas as opções de desempacotamento está na man page pvm_upk.

Page 27: PVM Thiago Villela. PVM - Parallel Virtual Machine Pacote (software) de paralelização que permite a uma coleção heterogênea de computadores interligados.

Exemplo 1 - Mestremain() { 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(); }

Page 28: PVM Thiago Villela. PVM - Parallel Virtual Machine Pacote (software) de paralelização que permite a uma coleção heterogênea de computadores interligados.

Exemplo 1 - Escravo

main(){ int ptid, msgtag; char buf[100]; ptid = pvm_parent(); strcpy(buf, "hello, world from ");gethostname(buf + strlen(buf), 64); msgtag = 1; pvm_initsend(PvmDataDefault);pvm_pkstr(buf); pvm_send(ptid, msgtag);pvm_exit(); }

Page 29: PVM Thiago Villela. PVM - Parallel Virtual Machine Pacote (software) de paralelização que permite a uma coleção heterogênea de computadores interligados.

Exemplo 2• #include <stdlib.h>

#include <stdio.h>#include <pvm3.h>

void main() { int mytid, parent; mytid = pvm_mytid(); parent = pvm_parent();; if (parent == PvmNoParent)

master(); else

slave();}

void master(){ int tids[3], numt; pvm_catchout(stdout); numt = pvm_spawn("bobao", NULL, PvmTaskDefault,"", 3, tids); printf("Abriu %d processos\n", numt); if (numt < 0)

printf("Nao abriu os processos\n"); else

printf("Eu sou o mestre.\n"); pvm_exit();}void slave(){ int mytid; mytid = pvm_mytid(); printf("Eu sou o escravo %d\n", mytid);}

Page 30: PVM Thiago Villela. PVM - Parallel Virtual Machine Pacote (software) de paralelização que permite a uma coleção heterogênea de computadores interligados.

Conclusão

• O PVM é uma importante ferramenta de paralelização para problemas que exijam um grande volume de processamento.

• A simplicidade do modelo de programação permite que mesmo programadores inexperiente com aplicações paralelas consigam desenvolver programas.

• O PVM é gratuito e está disponível online, possui uma grande base instalada de usuários e está muito bem documentado inclusive com referências online.

Page 31: PVM Thiago Villela. PVM - Parallel Virtual Machine Pacote (software) de paralelização que permite a uma coleção heterogênea de computadores interligados.

Bibliografia• http://equipe.nce.ufrj.br/adriano/tep/bibliogr/pvm/pvm.html• http://www.linhadecodigo.com.br/artigos.asp?id_ac=1166• http://equipe.nce.ufrj.br/gabriel/progpar/PVM.pdf• http://tcsc.ic.uff.br/node/98• http://www.dct.ufms.br/~edson/jai2001/livro.ps.gz• http://www.cos.ufrj.br/index

.php?option=com_publicacao&task=visualizar&id=693• http://www.inf.puc-rio.br/~noemi/victal/pvm.html• http://www.cisc.usp.br/documentacao/tutoriais/sp/pvm.html• http://www.inf.ufrgs.br/procpar/disc/cmp134/trabs/T2/981/mpi.html• http://black.rc.unesp.br/gpacp/descricao.htm• http://www.inf.puc-rio.br/~noemi/pd-96/aula4.html• http://pop.unicruz.edu.br/ppd/CDJoaoJunior/Projeto%20paralelismo/pvm/

Uma%20Introdu%E7%E3o%20ao%20PVM.htm• http://www.impa.br/~rbs/pdf/pvm.pdf• http://www.unimar.br/ciencias/volume8-3/resumo8-3/resumo8.htm