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

De WikiLICC
Ir para: navegação, pesquisa
m (Digitando)
m (Conectando)
 
(21 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 1: Linha 1:
 
* Configure o MPICH conforme [Minicluster:MPICH].
 
* 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 ==
 
== Digitando ==
Conecte-se a máquina '''one'''. Verifique os testes da sessão [Minicluster:MPICH], principalmente o último usando '''mpiboot'''. Inicie o daemon
+
Abra um editor de textos (por exemplo o vi ou emacs):
[hunter]$ ssh usuario@one
+
  [dago@one]$ vi hellompi.f90
[one]$ mpdboot -n 2
 
[one]$ mpdtrace -l
 
one.matrix_54419 (192.168.0.99)
 
cell100.matrix_41888 (192.168.0.100)
 
 
 
Abra um editor de textos
 
  [one]$ vi hellompi.f90
 
 
e digite o programa abaixo:
 
e digite o programa abaixo:
 
  program hellompi
 
  program hellompi
Linha 28: Linha 72:
  
 
== Compilando ==
 
== 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 ==
 
* Para rodar o programa em um processador
 
[one]$ mpiexec ./hellompi
 
  
* Rode novamente usando mais processos (e um processador - talvez 2 se for dual-core ?)
+
=== Rodando no cluster ===
  [one]$ mpiexec -np 4 ./hellompi
+
* Para rodar em 4 processadores (2 máquinas x 2 processadores)
  Sou o processo           0 de um total de            4  rodando em one.matrix
+
  [dago@cell108]$ mpiexec -l -n 4 ./hellompi
  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
  Sou o processo           1  de um total de            4  rodando em one.matrix
+
0: Sou o processo 0 de um total de            4  rodando em cell108
  Sou o processo           3  de um total de            4  rodando em one.matrix
+
1: Sou o processo 1  de um total de            4  rodando em cell109
onde <code>one.matrix</code> é o nome da máquina (todas no mesmo nó ainda). Para rodar em mais máquinas, primeiro desligue o mpd
+
3: Sou o processo 3  de um total de            4  rodando em cell108
[usuario@one]$ mpdallexit
 
  
== Testando o anel de máquinas ==
+
== Usando o MPE ==
Um programa hellompi em paralelo
+
* Para compilar o programa:
[one]$ mpiexec -l -n 4 ./hellompi
+
  [one]$ mpif90 hellompi.f90 -o hellompi -mpe=mpilog
0:  Sou o processo 0  de um total de            4  rodando em one.matrix
 
1:  Sou o processo 1  de um total de            4  rodando em cell100.matrix
 
2:  Sou o processo 2  de um total de            4  rodando em one.matrix
 
3:  Sou o processo 3  de um total de            4  rodando em cell100.matrix
 
  
== Teste final ==
+
* Para rodar o programa:
No mestre
+
  [one]$ mpiexec -l -n 4 ./hellompi
[one]$ mpdboot -n 2
+
 
[one]$ mpdtrace -l
+
* Depois de rodar o programa, um arquivo Unknows.clog2 foi criado. Para visualizar a iteração entre os computadores:
one.matrix_40584 (192.168.0.99)
+
  [one]$ jumpshot Unknown.clog2
cell100.matrix_59410 (192.168.0.100)
+
 
+
* Veja sobre visualizadores em http://www.mcs.anl.gov/research/projects/perfvis/software/viewers/index.htm
[one]$ cd fortran/
+
 
[one]$ mpiexec -l -n 2 ./hellompi
+
== Problemas: ==
1:  Sou o processo            1  de um total de            2  rodando em cell100.matrix
 
0: Sou o processo            0  de um total de            2  rodando em one.matrix
 
  
Em cell100
+
=== 1) mpdtrace resulta vazio ===
  [cell100]$ mpdtrace -l
+
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):
  cell100.matrix_59410 (192.168.0.100)
+
[dago@cell108]$ vi ~/.mpd.hosts       
  one.matrix_40584 (192.168.0.99)
+
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)