PVM Thiago Villela.

Slides:



Advertisements
Apresentações semelhantes
Programação de jogos MMO com DALua
Advertisements

Criando aplicações WEB
Sistemas Operacionais
IC - UFF Sistemas Operacionais Threads. IC - UFF Processos e threads Vimos o conceito de processo englobando duas características básicas: propriedade.
SISTEMAS OPERACIONAIS (SO) Aula 5 Luciana A. F. Martimiano 2002
C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva /msn: Página:
Programação em Java Prof. Maurício Braga
Administração de sistemas operacionais
Eventos, Variáveis de Sessão e Aplicação
Sistemas Operacionais
Noções de Sistemas Operacionais
OpenMP.
MPI - Introdução Message-Passing Model Task: código + memória (uma ou várias tasks no mesmo processador) Mensagem: as tasks comunicação entre si trocando.
Configuração de um servidor FTP
Processos no Unix e Linux
Sistema para Gerenciamento de Redes Baseado em Agentes Móveis
Introdução a daemons Daemons devem executar silenciosamente em background. Eles não devem ser interrompidos: por sinais vindos de um “terminal controlador”,
Chapter 4: Threads.
SISTEMAS DISTRIBUÍDOS
Banco de Dados Oracle AESO.
Sincronização de Processos (5)
Processos Conceitos Básicos.
SVCs para Controle de Processos no Unix
SVCs para Controle de Processos no Unix
UNIX.
Tutorial Condor Juliano Freitas da Silva
Linguagem C Strings.
Comutação Comutação ou chaveamento em uma rede de comunicação refere-se a alocação de recursos da rede (meios de transmissão e equipamentos) para a envio.
Mobilidade Cláudia Ribeiro.
1 Felipe L. SeverinoPOD XtremWeb Felipe L. Severino Programação com Objetos Distribuídos paralela e.
Funcionalidades e Protocolos da Camada de Aplicação
NETBIOS Disciplina: Redes de Computadores
Professor Reverton de Paula Faculdade Anhanguera de Indaiatuba
Administração de Sistema Operacional de Rede WindowsServer-2003 WindowsServer-2003 Ricardo de Oliveira Joaquim TECNOLÓGICOS.
Introdução à Informática
Introdução ao Desenvolvimento Web
PROGRAMAÇÃO ESTRUTURADA II
INPE / CAP-315 Airam J. Preto, Celso L. Mendes Aula 27 (1) Programação com MPI Tópicos: Modelo de Programação Funções de Ambiente Funções Básicas.
Ordenação e Pesquisa de Dados Marco Antonio Montebello Júnior
Tópicos em redes e sistemas distribuídos Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Chamada Remota de Procedimentos
MapReduce Conceitos e Aplicações
How to Break Software Capítulo 2 Taíse Dias Testing from the User Interface.
IC - UFF Sistemas Operacionais 4. Threads Texto base: capítulo 4 Operating Systems: Internals and Design Principles W. Stallings.
Introdução à Programação Orientada a Objetos com Java Paulo Borba Centro de Informática Universidade Federal de Pernambuco Programação Imperativa (e Ponteiros.
Algoritmos - Propriedades Desejáveis (1)
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
INPE / CAP-315 Airam J. Preto, Celso L. Mendes Aula 26 (1) Troca de Mensagens Troca de Mensagens Tópicos: Características de Mensagens Implementação.
Universidade de Mogi das Cruzes Tec
Paradigmas da Programação – Semestre 1 – Aula 9 Professor: Eduardo Mantovani )
09/04/2017 Linux Comandos básicos.
SISTEMAS OPERACIONAIS I
Introdução à Computação em Grade Porto Alegre, Maio/2006 Centro Nacional de Supercomputação CESUP/RS Realização: Projeto GradeUFRGS Material pertencente.
FTIN Formação Técnica em Informática Módulo Sistema Proprietário Windows AULA 04 Prof. André Lucio.
MPI - Message Passing Interface Mestrado em Matemática Computacional 2003.
Estruturas de Dados Aula 6: Cadeias de Caracteres
Wellington Felix.  Criada por Brian Kernighan e Denis Ritchie, na década de 1970, para uso em um computador DEC PDP-11 em Unix  C++ é uma extensão da.
STRINGS Dilvan Moreira (baseado no livro Big Java e Z. Liang)
Desenvolvimento de Aplicações TCP/IP com Sockets Márcio de Sousa Dias
Laboratório Módulo :00hs às 12:00hs – Sala O15
PVM – Parallel Virtual Machine. Foco em Computadores.
Parallel Virtual Machine (PVM). O que é PVM? Máquina virtual dinamicamente configurável Protocolo de transmissão de mensagens de alta-performance Interface.
Programação Computacional Aula 8: Entrada e Saída pelo Console Prof a. Madeleine Medrano
Estrutura de Interconexão
Shell Script Parte 2.
Jorge Zavaleta PVM vs MPI. Introdução Objetivos do MPI Implementações e definições processos dinâmicos Contextos Operações não bloqueantes Portabilidade,heterogeneidade.
Estruturas de Sistemas Operacionais. Componentes Comuns do Sistema Administração de Processos Administração da Memória Principal Administração do Armazenamento.
UNIVERSIDADE CATÓLICA DE PELOTAS CENTRO POLITÉCNICO CURSO DE CIÊNCIA DA COMPUTAÇÃO Redes de Computadores Ferramenta NTop (Network Traffic Probe) Explorador.
Sistemas Operacionais de Redes DNS
Curso: Redes de Computadores Turno: Noturno Disciplina: Introdução a Sistemas Abertos Professor: Jean Galdino Componentes: Andresa Maria Camilla Priscilla.
Transcrição da apresentação:

PVM Thiago Villela

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.

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.

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.

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)

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

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

PVMD

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

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.

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>

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>

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>

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.

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]$

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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

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

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

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.

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