OpenMPI - Instalação de uma aplicação paralela

Este artigo tem o objetivo de descrever os passos necessários para implementar uma aplicação paralela (OpenMPI) e verificar
como o é o processamento distribuído entre os hosts.

[ Hits: 39.723 ]

Por: Gilberto Pereira dos Anjos Lima em 19/10/2011


Introdução



"O MPI (Message Passing Interface) são conjuntos de processos que possuem acesso à memória local. Essas informações são enviadas para a memória local do processo remoto."

Conceito:

Processo: "Quando o programa é executado, ele é 'quebrado em partes', cada parte deste programa é chamado de PROCESSO. Estes processos podem ser executados em UMA ÚNICA máquina ou em VÁRIAS."

Rank: "Cada processo tem uma identificação única atribuída pelo sistema quando o processo é inicializado. Essa identificação é contínua representada por um número inteiro, começando de zero até N-1, onde N é o número de processos. Cada processo tem um rank, é ele é utilizado para enviar e receber mensagens."

Funcionamento:

"Os processos são divididos em pequenas partes e essas partes são distribuídas para que outras máquinas do (Nó/Cluster) façam o cálculo em cimas dessas partes. Os resultados obtidos das outras máquinas são enviados a uma receptora que fez a chamada."

Fontes (modificadas):

Instalação e configuração de dependências

Os testes foram feitos em máquinas virtuais, utilizei o VmWare Player para executá-las.

O ideal para saber como realmente trabalha uma aplicação distribuída, é criar ao menos 2 máquinas. Eu, particularmente, utilizei a seguinte configuração para ambos os hosts.
  • SO = Linux Debian 5.0.4 Lenny
  • Hard Disk-2 GB
  • Memória RAM = 128 MB

Após ter as 2 máquinas virtuais, na mesma rede. Testar com o comando:

ping ip_da_outra_maq

Seguir com os próximos passos.

Obs.:
  • Os comandos podem variar de distribuição para distribuição.
  • Os comandos abaixo foram feitos em um Debian 5.0.4 GNU/Linux.
  • Sempre tenha atenção com que máquina é utilizado o comando `debianompi1 = Máquina 1, debianopmi2 = Máquina 2`.
  • O MESMO PROCEDIMENTO TEM QUE SER FEITO EM TODAS AS MÁQUINAS!!!

1. Criar os mesmos usuários para todos os hosts (como root):

# adduser ompi2
# adduser ompi1


2. Fazer o download do OpenMPI disponível no próprio site:

# wget http://www.open-mpi.org/software/ompi/v1.4/downloads/openmpi-1.4.3.tar.gz

3. Desempacotando o pacote:

# tar -xvzf openmpi-1.4.3.tar.gz

4. É necessário instalar outras dependências do Open MPI, assim como o ssh (responsável pela comunicação remota com os demais hosts), o gcc e o g++ (responsáveis por compilar os programas em Fortran para linguagem C):

# apt-get install openmpi-bin openmpi-doc libopenmpi-dev gcc g++openssh-server sysstat

Obs.: Sugestão para sources.list pode ser encontrado nesta dica: Repositórios oficiais Debian

5. Configuração SSH

Para o programa distribuir seu processamento, é necessário que a comunicação entre os demais hosts seja de forma automática, ou seja, não pode exigir senha. Para isto foi gerado um par de chaves com uma frase secreta "em branco" e este copiado para os demais hosts. Quando for feito uma conexão ssh, uma senha "vazia" será aceita e haverá comunicação.

ssh-keygen -t rsa
$ ssh-keygen -t rsa


6. Após ter gerado o par de chaves, abaixo estaremos instalando a chave pública no outro host, permitindo que ela seja usada para autenticação:

ssh-copy-id -i ~/.ssh/id_rsa.pub ompi1@IP.DA.MAQ2
$ ssh-copy-id -i ~/.ssh/id_rsa.pub ompi2@IP.DA.MAQ1

# /etc/init.d/ssh restart


7. Configuração OpenMPI

Para os comandos OMPI serem reconhecidos pelo SO, é necessário adicionar o caminho dos binários dos comandos do OpenMPI à variável de ambiente $PATH.

echo 'export PATH=$PATH:/opt/openmpi/bin' >> /home/ompi1/.bashrc
$ echo $PATH

/usr/local/bin:/usr/bin:/bin:/usr/games:/opt/openmpi/bin

* Fazer logout e logon

Verificar se o comando é reconhecido:

mpirun

Caso contrário verificar novamente a variável de ambiente path:

echo $PATH

8. Para distribuir o processamento da execução de um programa, é necessário criar um arquivo que chamei de "my_target" com o endereço IP dos hosts que irá receber este processamento.

echo IP.DA.MAQ1 > my_target;echo IP.DA.MAQ2 >> my_target

    Próxima página

Páginas do artigo
   1. Introdução
   2. Execução OpenMPI
   3. Analisando os resultados
Outros artigos deste autor

Minix - Instalação e configuração básica

Leitura recomendada

Como configurar o Minicom para roteadores cisco no Fedora

DD-WRT no D-Link Dir-300 Rev A

Experimentos com remasterização de Sabayon

Experiência no desenvolvimento de software para automação comercial

Qual distribuição Linux devo escolher?

  
Comentários
[1] Comentário enviado por dennis.leandro em 20/10/2011 - 10:47h

Muito bom artigo!
Assunto muito interessante, e de facil entendimento!
Parabeens!

[2] Comentário enviado por removido em 30/10/2011 - 18:00h

e dpois, pra que eu posso usar isso?? eu sempre fiz isso mas nunca fiz algo alem disso está no artigo

quero diser, como eu executo um programa?? gimp, interface grafica, sql e outras coisas??

[3] Comentário enviado por gilbertoalima em 01/11/2011 - 00:11h

$DouglasFim


MPI é o conceito sobre computação paralela.

O OMPI é um dos softwares mais comuns e free que interage com este conceito, o artigo visa apenas um conhecimento simples para mostrar como é funcionamento.

Ele pode rodar programas em C, interface gráfica etc, entretanto isso seria complexo, mas existe diversos de outros programas além de um 'hello world' disponiveis para download no próprio site:

¹(http://www.open-mpi.org/hg/hgwebdir.cgi/ompi-svn-mirror/summary)

Para rodar os programas citados acima sobre o paralelismo, será necessário a utilização de outros softwares, do GIMP sinceramente eu desconheço, mas do SQL poderia utilizar o BizTalk Server :

²(http://www.microsoft.com/biztalk/en/us/overview.aspx)

att,

[4] Comentário enviado por jeansg em 17/08/2012 - 03:37h

Muito bom o Artigo !

[5] Comentário enviado por cristian-redes em 28/11/2013 - 02:18h

Amigo, voce consegue a senha das maquinas virtuais suas? Gostaria de testar, mais estou tendo dificuldades de instalação..
Se puder conseguir agradeço.

[6] Comentário enviado por gilbertoalima em 29/11/2013 - 13:52h

Fala cristian, beleza ?

Users: ompi1, ompi2, root
Senha: ompi

Att

[7] Comentário enviado por cicerocarlos em 13/11/2014 - 01:29h

Prezado
Tenho um cluster com suse server para processamento compartilhado, entretanto, para análise que precisa de memória ram não ocorre compartilhamento de mémoria ram, sendo usanda somente a memória do nó de execução do programa (velvet). Existe como configurar para compartilhar memória?

Att,
Cícero

[8] Comentário enviado por gilbertoalima em 13/11/2014 - 11:38h

Cicero,
Se a aplicação suportar, sim.

Pra ter certeza teria que conhecer o que é este "velvet", como funciona, no que roda etc.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts