Mudanças entre as edições de "Minicluster:Compilando MPI"

De WikiLICC
Ir para: navegação, pesquisa
m (Conectando)
m (Conectando)
 
(10 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 6: Linha 6:
 
  [dago@hunter]$ ssh dago@one
 
  [dago@hunter]$ ssh dago@one
 
Verifique quais máquinas nós estão ativas:
 
Verifique quais máquinas nós estão ativas:
  [dago@one]$ pingcluster
+
  [dago@one]$ pingcluster.sh
  
  
  
 
Verifique os testes da sessão [Minicluster:MPICH], principalmente o último usando '''mpiboot'''. Inicie o daemon
 
Verifique os testes da sessão [Minicluster:MPICH], principalmente o último usando '''mpiboot'''. Inicie o daemon
 +
 
Verifique quais nós estão ativos (para nós ativos aparecem o último número do ip e para nós inativos aparece [ . ]):
 
Verifique quais nós estão ativos (para nós ativos aparecem o último número do ip e para nós inativos aparece [ . ]):
  [dago@one]$ pingcluster
+
  [dago@one]$ pingcluster.sh
 
  ====================
 
  ====================
 
  =      MATRIX      =
 
  =      MATRIX      =
Linha 22: Linha 23:
 
  [120][121][ . ][ . ]
 
  [120][121][ . ][ . ]
 
  ====================
 
  ====================
 +
 +
== Configurando o mpd.conf ==
 +
Cada usuário deve ter um arquivo .mpd.conf no seu diretório /home/usuario/ e deve permitir acesso e leitura somente a este usuário.
 +
 +
[usuario@one]$ cd
 +
[usuario@one]$ vi .mpd.conf
 +
MPD_SECRET_WORD=yours3cr3tw0rd
 +
MPD_USE_ROOT_MPD=yes
 +
[usuario@one]$ chmod 600 .mpd.conf
 +
 +
onde
 +
    MPD_SECRET_WORD pode ser única para cada usuário.
 +
    MPD_USE_ROOT_MPD especifica que usuários não irão iniciar se próprio mpd daemons, mas irão usar um já rodando iniciado pelo root. 
  
  
Linha 38: Linha 52:
  
 
== Digitando ==
 
== Digitando ==
Abra um editor de textos
+
Abra um editor de textos (por exemplo o vi ou emacs):
 
  [dago@one]$ vi hellompi.f90
 
  [dago@one]$ vi hellompi.f90
 
e digite o programa abaixo:
 
e digite o programa abaixo:
Linha 58: Linha 72:
  
 
== Compilando ==
 
== Compilando ==
* Para compilar o programa, digite
+
* Conectado a máquina '''one''', compile o programa (não compile conectados aos nós para não sobrecarregá-los):
  [one]$ mpif90 hellompi.f90 -o hellompi
+
  [dago@one]$ mpif90 hellompi.f90 -o hellompi
  
 
== Rodando em um processador ==
 
== Rodando em um processador ==
* Inicie o mpd daemon:
+
Para rodar existem duas opções:
  [one]$ mpdboot -n 2 -f ~/.mpd.hosts
+
* Conecte a um nó e inicie o comando mpiexec neste nó:
  [one]$ mpdtrace -l
+
  [dago@one]$ ssh dago@cell108
  one.matrix_54419 (192.168.0.99)
+
  [dago@cell108]$ mpdtrace -l
  cell100.matrix_41888 (192.168.0.100)
+
  cell108_41888 (192.168.0.108)
Caso for utilizado rsh, iniciar o cluster com a opção --rsh=rsh
+
  cell109_42454 (192.168.0.109)
 +
 +
[dago@cell108]$ mpiexec ./hellompi
 +
 +
* Utilize o comando ssh para rodar o comando mpiexec no nó:
 +
[dago@one]$ ssh cell108 -T "mpiexec ./hellompi"
  
* Para rodar o programa em um processador, digite
 
[one]$ mpiexec ./hellompi
 
  
 
=== Rodando no cluster ===
 
=== Rodando no cluster ===
 
* Para rodar em 4 processadores (2 máquinas x 2 processadores)
 
* Para rodar em 4 processadores (2 máquinas x 2 processadores)
  [one]$ mpiexec -l -n 4 ./hellompi
+
  [dago@cell108]$ mpiexec -l -n 4 ./hellompi
  2:  Sou o processo 2  de um total de            4  rodando em one.matrix
+
  2:  Sou o processo 2  de um total de            4  rodando em cell109
  0:  Sou o processo 0  de um total de            4  rodando em one.matrix
+
  0:  Sou o processo 0  de um total de            4  rodando em cell108
  1:  Sou o processo 1  de um total de            4  rodando em cell100.matrix
+
  1:  Sou o processo 1  de um total de            4  rodando em cell109
  3:  Sou o processo 3  de um total de            4  rodando em cell100.matrix
+
  3:  Sou o processo 3  de um total de            4  rodando em cell108
  
 
== Usando o MPE ==
 
== Usando o MPE ==
Linha 91: Linha 108:
  
 
* Veja sobre visualizadores em http://www.mcs.anl.gov/research/projects/perfvis/software/viewers/index.htm
 
* Veja sobre visualizadores em http://www.mcs.anl.gov/research/projects/perfvis/software/viewers/index.htm
 +
 +
== Problemas: ==
 +
 +
=== 1) mpdtrace resulta vazio ===
 +
Caso as máquinas não estejam conectadas através do mpd, o usuário pode formar ele mesmo um anel (Comunique ao Prof.Dagoberto por email para que possa iniciar o serviço). No momento, crie um arquivo ~/.mpd.hosts com os nós ativos (2 máquinas nesse exemplo):
 +
[dago@cell108]$ vi ~/.mpd.hosts       
 +
cell108:2
 +
cell109:2
 +
e inicie um anel
 +
[dago@cell108]$ mpdboot -n 2 -f ~/.mpd.hosts
 +
Verifique se funcionou.
 +
[dago@cell108]$ mpdtrace -l
 +
cell108_41199 (192.168.0.108)
 +
cell109_52092 (192.168.0.109)

Edição atual tal como às 15h56min de 10 de julho de 2014

  • Configure o MPICH conforme [Minicluster:MPICH].

Conectando

Conecte-se a alguma máquina do instituto (Ex. hunter,euler,...).

Conecte-se a máquina one:

[dago@hunter]$ ssh dago@one

Verifique quais máquinas nós estão ativas:

[dago@one]$ pingcluster.sh


Verifique os testes da sessão [Minicluster:MPICH], principalmente o último usando mpiboot. Inicie o daemon

Verifique quais nós estão ativos (para nós ativos aparecem o último número do ip e para nós inativos aparece [ . ]):

[dago@one]$ pingcluster.sh
====================
=      MATRIX      =
====================
[108][109][ . ][ . ]
[112][113][ . ][ . ]
[100]  <- switch
[116][117][ . ][ . ]
[120][121][ . ][ . ]
====================

Configurando o mpd.conf

Cada usuário deve ter um arquivo .mpd.conf no seu diretório /home/usuario/ e deve permitir acesso e leitura somente a este usuário.

[usuario@one]$ cd
[usuario@one]$ vi .mpd.conf
MPD_SECRET_WORD=yours3cr3tw0rd
MPD_USE_ROOT_MPD=yes
[usuario@one]$ chmod 600 .mpd.conf

onde

   MPD_SECRET_WORD pode ser única para cada usuário.
   MPD_USE_ROOT_MPD especifica que usuários não irão iniciar se próprio mpd daemons, mas irão usar um já rodando iniciado pelo root.  


Verifique se os nós ativos estão conectados através do mpd formando um anel (os números após o '_' devem mudar):

[dago@one]$ ssh cell108 -T "mpdtrace -l"
cell108_35232 (192.168.0.108)
cell121_55680 (192.168.0.121)
cell120_58236 (192.168.0.120)
cell117_35568 (192.168.0.117)
cell116_42441 (192.168.0.116)
cell113_39465 (192.168.0.113)
cell112_50931 (192.168.0.112)
cell109_45891 (192.168.0.109)

Ok. Nós ativos e conectados através do daemon mpd. Cluster pronto para ser usado em paralelo.

Digitando

Abra um editor de textos (por exemplo o vi ou emacs):

[dago@one]$ vi hellompi.f90

e digite o programa abaixo:

program hellompi
implicit none
include "mpif.h"
integer       ::  np, myid, ier,length
character*80  ::  nome

call MPI_Init( ier )
call MPI_Comm_size( MPI_COMM_WORLD, np,   ier)
call MPI_Comm_rank( MPI_COMM_WORLD, myid, ier)
call MPI_Get_processor_name(nome,length,ier)

print *,"Sou o processo ", myid," de um total de ", np," rodando em ",nome

call MPI_Finalize( ier )
end program

Compilando

  • Conectado a máquina one, compile o programa (não compile conectados aos nós para não sobrecarregá-los):
[dago@one]$ mpif90 hellompi.f90 -o hellompi

Rodando em um processador

Para rodar existem duas opções:

  • Conecte a um nó e inicie o comando mpiexec neste nó:
[dago@one]$ ssh dago@cell108
[dago@cell108]$ mpdtrace -l
cell108_41888 (192.168.0.108)
cell109_42454 (192.168.0.109)

[dago@cell108]$ mpiexec ./hellompi

  • Utilize o comando ssh para rodar o comando mpiexec no nó:
[dago@one]$ ssh cell108 -T "mpiexec ./hellompi"


Rodando no cluster

  • Para rodar em 4 processadores (2 máquinas x 2 processadores)
[dago@cell108]$ mpiexec -l -n 4 ./hellompi
2:  Sou o processo 2  de um total de            4  rodando em cell109
0:  Sou o processo 0  de um total de            4  rodando em cell108
1:  Sou o processo 1  de um total de            4  rodando em cell109
3:  Sou o processo 3  de um total de            4  rodando em cell108

Usando o MPE

  • Para compilar o programa:
 [one]$ mpif90 hellompi.f90 -o hellompi -mpe=mpilog
  • Para rodar o programa:
 [one]$ mpiexec -l -n 4 ./hellompi 
  • Depois de rodar o programa, um arquivo Unknows.clog2 foi criado. Para visualizar a iteração entre os computadores:
 [one]$ jumpshot Unknown.clog2

Problemas:

1) mpdtrace resulta vazio

Caso as máquinas não estejam conectadas através do mpd, o usuário pode formar ele mesmo um anel (Comunique ao Prof.Dagoberto por email para que possa iniciar o serviço). No momento, crie um arquivo ~/.mpd.hosts com os nós ativos (2 máquinas nesse exemplo):

[dago@cell108]$ vi ~/.mpd.hosts        
cell108:2
cell109:2

e inicie um anel

[dago@cell108]$ mpdboot -n 2 -f ~/.mpd.hosts

Verifique se funcionou.

[dago@cell108]$ mpdtrace -l
cell108_41199 (192.168.0.108)
cell109_52092 (192.168.0.109)