jan
27
2009

Usando Open MPI Em Programação Paralela

No Gravatar

Olá caro leitor, depois de algum tempo de descanso volto novamente a tratar de um assunto que tem tido bastante interesse da comunidade que trabalha com computação de alto desempenho. Pois uma forma de conseguir o tão desejado alto desempenho em um programa é fazendo com que este utilize vários processadores durante sua execução, mas como foi dito no último artigo que escrevi ( Implementando Programas que Usam Vários Processadores ), essa não é uma tarefa tão simples! O escopo desse artigo traz algumas dicas de ferramentas necessárias para criar um programa que ao ser executado use vários processos e que esses processos comuniquem entre si.

Como foi discutido no artigo citado acima, uma forma de implementar a programação paralela é usando as bibliotecas de passagem de mensagens (MPI). Portanto, se o leitor quiser testar os programas exemplos que darei durante os próximos artigos será necessário instalar o MPI, como sou adepto da filosofia Open Source, aconselho que instale o Open MPI,( mas se estiver usando o Windows, instale o MPICH, Por sua conta e risco). Como de praxe, a instalação do Open MPI é simples, basta baixar o código fonte (código fonte), descompactar o arquivo, entrar na pasta criada pela descompactação usando o console ou um aplicativo similar e em seguida dar os comandos usais para compilação e instalação de pacotes (./configure em seguida make, e como superusuário dar o último comando, make install). O Open MPI necessita de que alguns pacotes estejam instalados; por exemplo, se você quiser escrever seus programas em Fortran, será necessário que tenha o fortran previamente instalado em sua máquina, essa mesma regra é válida para as outras linguagens que você queira escrever seus códigos, tais como C e C++. Outro pacote que o MPI usa e, portanto, deve estar instalado é o ssh, pois é a partir do ssh que é feita a comunicação entre os vários processos do programa em execução.

Vamos criar um programa simples para verificar se sua instalação foi bem sucedida, porém primeiramente vou falar de uma premissa básica sobre o MPI que é a Inicialização e a Finalização. Para se fazer referências ou chamadas à qualquer rotinas MPI, é necessário que o MPI seja inicializado e antes do término do programa principal o MPI deve ser finalizado. Para isso são definidas rotinas nas linguagens de programação, aqui vou usar o C como exemplo, porém o procedimento é o mesmo para outras linguagens (o que muda é sintaxe da chamada da rotina).

int MPI_Init( int *argc,  char ***argv); // inicialização do  MPI

//Blocos de códigos  MPI

int MPI_Finalize( ); // finalização do MPI

Esses parâmetros definidos na inicialização do MPI (argc e argv), são aqueles parâmetros recebidos tradicionalmente pela interface da linguagem C, portanto tais parâmetros devem ser passados para inicializar o MPI antes de sua utilização. O valor de retorno dessa chamada é um código de erro, sendo assim, ele indica possíveis erros durante a inicialização do MPI. Se não houve nenhum erro durante a inicialização, o valor de retorno será MPI_SUCCESS; caso haja algum tipo de erro os valores serão diferentes, porém não são especificados pelo MPI.  E assim como a inicialização, a finalização é feita pela rotina MPI_Finalize( ).

Para compreender o processo de  inicialização e finalização das rotinas MPI bem como testar se a sua instalação foi bem sucedida, copie o trecho do código seguinte em um arquivo sem formatação e salve-o com o nome NumProcesso.c em seguida compili-o. Obs. Ao copiar e colar tome cuidado com as aspas!

#include <stdio.h>
#include <mpi.h>

int main(int argc, char **argv){
int quantos, rank;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &quantos);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
printf(“Processo %d de %d rodando \n”, rank, quantos);

MPI_Finalize();

return 0;

}

Para compilar um arquivo usando MPI basta seguir o seguinte procedimento: usando o console, entre na pasta que se encontra o arquivo e em seguida dê o comando mpicc NumProcesso.c -o processos.exe (obs. a extensão *.exe é opcional, na verdade nem é necessário usar nenhum tipo de extensão). Se a compilação ocorreu tudo certo, execute o programa recém compilado assim: mpirun -np 4 processos.exe, aqui “-np 4″ é o numero de processos que será aberto durante a execução do programa, neste caso são quatro processos. Para evitar que a cada processo aberto ele peça a senha, configure o servidor ssh para autenticação sem senha.

P.S. O Próximo artigo será: Os conceitos em que as rotinas MPI são construídas. Nesse artigo será abordado processos,  mensagens,  comunicadores e tipos de dados.


ERRATA:

Olá leitores do TecnoSapiens, em algum ponto do artigo foi afirmado que a comunicação entre os processos era feita pelo ssh, porém o ssh é utilizado para disparar os daemons responsáveis por executar os processos MPI. Normalmente a comunicação propriamente dita das primitivas MPI_ …  é feita sem segurança.

Claudinei Caetano de Souza.

  • Share/Bookmark

11 Comentários »

  • [...] por Simone Souza (simonefis?gmail·com) – referência [...]

  • kayo disse:

    Eu não tenho conhecimento de programação paralela, mas a muito tempo quero formar um cluster caseiro. Gostaria de saber se o Open MPI também trabalha com processos paralelos entre computadores.

    • No CEFET/GO montamos um cluster Beowulf em 2005, e utilizamos MPI para alguns testes, e funcionou perfeitamente.

      Veja os detalhes do PDF:
      http://sinergbrasil.com/files/tcc-cluster-beowulf-2005.pdf

      O projeto é antigo, então você deve encontrar diferenças nas formas de instalação e configuração das ferramentas, mas acredito que estão mais fáceis do que na época que executamos o projeto.

      • Claudinei disse:

        Olá Reginaldo

        Obrigado pelo compartilhamento de informações! Com certeza essa monografia será de grande valia para aqueles que estão se aventuarando no mundo da computação paralela!

        Parabéns pela atitude!

        Até …

        Claudinei Caetano de Souza.

    • Claudinei disse:

      Olá Kayo

      O Open Mpi é desenvolvido de tal forma que a comunicação entre os processos se dá via ssh. Sendo assim, essa biblioteca funciona perfeitamente bem em cluster. Se seu cluster estiver configurado certinho para que você dispare o programa em uma máquina, o sistema do próprio cluster se encarregará de distribuir os processos nas máquina. Essa é uma das grandes vantagens de se usar as bibliotecas de passagens de mensagens.

      Até o próximo!

      Claudinei Caetano de Souza.

      • Ulisses Furquim disse:

        Olá Claudinei, apenas uma observação: o Open MPI não utiliza SSH para a comunicação entre os processos. O SSH é apenas utilizado para iniciar um programa num computador/nó remoto dentro de uma rede/cluster. As comunicações entre os processos são ponto a ponto utilizando conexões TCP. É isso, espero ter contribuído e continue a série de artigos que vai ser legal.

        – Ulisses Furquim

        • Claudinei disse:

          Olá Ulisses

          Muito obrigado pela correção do descuido! É gratificante saber que o artigo foi lido com tamanha cautela. Fique a vontade em corrigir quaisquer erros, sejam eles conceituais ou de qualquer outra natureza.

          Até o Próximo.

          Claudinei Caetano de Souza.

  • Léo disse:

    Olá Claudinei, parabéns pelo artigo.
    Sempre me interessei por programação parelela, mas nunca me empolguei muito a respeito, isso até ler seus dois artigos que tratam a respeito. Estou ansioso pelo próximo. Abraços

  • Igor disse:

    olá Caríssimo Claudinei,

    você Possui outras aplicações em MPI que utilize o processador de dois computadores ligados em rede?? abraços

  • Edson disse:

    Olá claudinei tudo bem?
    gostaria de saber como os processos são enviados e inicializados em outros computadores.
    Estou utilizando o mpi, porém ele só roda em um dos nós (o que foi inicializado).
    Preciso saber se o mpi manda automaticamente os processos para os processadores, se não o que preciso fazer para que isso ocorra.
    Agradecido

  • Claudinei disse:

    Olá Edson

    Que tipo de computdor você está usando? Um cluster?

    Em princípio o responsável pela distribuição dos processos em cada nó é o sistema operacional e não o MPI. Por exemplo, se você estiver usando um computador com dois processadores e fizer um programa, usando mpi, para usar dois processos, o sistema distribui um processo em cada processador. Se você estiver usando um cluster o sistema do cluster se encarrega de distribuir os processos nas máquinas ociosas.

    Qualquer dúvida fique a vontade em questionar!

    Até mais.

RSS feed for comments on this post. TrackBack URL


Leave a Reply

Template: TheBuckmaker.com Website Templates | Kostenloses Konto, PHP Scriptarchive

No TecnoSapiens você encontra artigos sobre:

adeona apple Backup bloomberg brasileiro broffice cabos submarinos calendário computador CUDA eficiência expandir gmail google google chrome guerra dos browsers hacker História home-office instalar laptop Latex Linux localização mecanismos de busca microsoft mpi navegadores obituario openmpi openoffice orkut pdf produtividade programação paralela rastrear redes sociais Semicondutores simulação computacional Software livre steve jobs tecnologia transistor Ubuntu windows