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: 33.531 ]

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

Zabbix Network Monitoring

Compilando o MSN-Proxy no CentOS/Red Hat 5

iTALC 2.0 - Instalação e Configuração no Ubuntu

O programa INIT

Windows Vista vs Linux vs Mac

  
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 douglas.giorgio 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
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts