A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

PVM Thiago Villela.

Apresentações semelhantes


Apresentação em tema: "PVM Thiago Villela."— Transcrição da apresentação:

1 PVM Thiago Villela

2 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.

3 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.

4 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.

5 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)

6 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

7 Conceitos Hospedeiro: Máquina Virtual: Processo: Tarefa: pvmd:
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

8 PVMD

9 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

10 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.

11 Console(2) Para iniciar a execução do console do PVM, basta digitar pvm na linha de comando do seu shell: user]$ pvm pvm>

12 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>

13 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 LINUX x pvm>

14 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.

15 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]$ pvm pvmd already running. pvm> conf 1 host, 0 data format HOST DTID ARCH SPEED DSIG quark LINUX x pvm> halt Terminated user]$

16 Console(7) add alias conf delete echo halt
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.

17 Console(8) help id jobs kill mstat ps -a
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.

18 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.

19 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.

20 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.

21 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.

22 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.

23 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.

24 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.

25 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.

26 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.

27 Exemplo 1 - Mestre 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();

28 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(); }

29 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); }

30 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.

31 Bibliografia


Carregar ppt "PVM Thiago Villela."

Apresentações semelhantes


Anúncios Google