Mpi(um curso pratico)

Disponível somente no TrabalhosFeitos
  • Páginas : 26 (6309 palavras )
  • Download(s) : 0
  • Publicado : 20 de novembro de 2012
Ler documento completo
Amostra do texto
Curso de Informática – DCC-IM / UFRJ

MPI
Um curso prático



MPI
É um padrão de troca de mensagens portátil que facilita o desenvolvimento de aplicações paralelas. Usa o paradigma de programação paralela por troca de mensagens e pode ser usado em clusters ou em redes de estações de trabalho. É uma biblioteca de funções utilizável com programas escritos em C, C++ ou Fortran. A bibliotecaMPI, no entanto, só possui funções para tratamento de mensagens, não oferecendo suporte para criação ou eliminação de processos como o PVM.

MPI
O projeto do MPI procurou utilizar as melhores facilidades de um grande número de sistemas de troca de mensagem existentes, ao invés de selecionar um deles e utiliza-lo como padrão. Logo, o MPI foi fortemente influenciado pelo trabalho no IBM T. J.Watson Research Center, Intel's NX/2, Express, nCUBE's Vertex e PARMACS. Outras contribuições importantes vieram do Zipcode, Chimp, PVM, Chameleon e PICL.

MPI
O esforço de padronização do MPI envolveu cerca de 60 pessoas de diversas organizações dos Estados Unidos e Europa. A maioria dos fabricantes de computadores paralelos estiveram envolvidos no MPI, junto com pesquisadores dasuniversidades, laboratórios do governo e empresas. O processo de padronização começou com o “Workshop on Standards for Message Passing in a Distributed Memory Environment”, patrocinado pelo “Center for Research on Parallel Computing”, que foi realizado em abril de 1992.

Objetivos do MPI
Um dos objetivos do MPI é oferecer possibilidade de uma implementação eficiente da comunicação:
 

Evitando cópiasde memória para memória; Permitindo superposição de comunicação e computação.

Permitir implementações em ambientes heterogêneos. Supõe que a interface de comunicação é confiável:


Falhas de comunicação devem ser tratadas pelo subsistema de comunicação da plataforma.

Objetivos do MPI
Pode ser implementado em plataformas de diferentes fornecedores. Interface familiar para os usuáriosde PVM. Permitir o uso de programas escritos em C e Fortran. O MPI, versão 1.0, não possui uma função semelhante ao pvm_spawn para criação de "tasks" ou processos em outros nós de processamento da máquina virtual. Tal operação só foi implementada na versão 2.0.

Objetivos do MPI
A biblioteca MPI trabalha com o conceito de comunicadores para definir o universo de processos envolvidos em umaoperação de comunicação, através dos atributos de grupo e contexto:


Dois processos que pertencem a um mesmo grupo e usando um mesmo contexto podem se comunicar diretamente.

Funções Básicas
Todo programa em MPI deve conter a seguinte diretiva para o pré-processador:
#include ''mpi.h''

Este arquivo, mpi.h, contém as definições, macros e funções de protótipos de funções necessários para acompilação de um programa MPI. Antes de qualquer outra função MPI ser chamada, a função MPI_Init deve ser chamada pelo menos uma vez. Seus argumentos são os ponteiros para os parâmetros do programa principal, argc e argv.

Funções Básicas
Esta função permite que o sistema realize as operações de preparação necessárias para que a biblioteca MPI seja utilizada. Ao término do programa a funçãoMPI_Finalize deve ser chamada. Esta função limpa qualquer pendência deixada pelo MPI, p. ex, recepções pendentes que nunca foram completadas. Tipicamente, um programa em MPI pode ter o seguinte leiaute:

Funções Básicas
... #include ''mpi.h'' ... main(int argc, char** argv) { ... /* Nenhuma função MPI pode ser chamada antes deste ponto */ MPI_Init(&argc, &argv); ... MPI_Finalize(); /* Nenhumafunção MPI pode ser chamada depois deste ponto*/ ... /* main */ ...

Programa Simples em MPI
#include #include #include ''mpi.h'' main(int argc, char** argv) { int meu_rank, np, origem, destino, tag=0; char msg[100]; MPI_Status status; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &meu_rank); MPI_Comm_size(MPI_COMM_WORLD,&np);

Programa Simples em MPI
if (meu_rank != 0) {...
tracking img