Este texto é uma adaptação, para a configuração da gina, do tutorial da Intel, no capítulo 4 de
/apps/mpi/ICTCE_Linux_Tutorial.pdf
http://www.astro.iag.usp.br/~gina/tut/ICTCE_Linux_Tutorial.pdf
http://www.astro.iag.usp.br/~gina/docs/ictc/doc/Linux_Getting_Started.htm
Para testar a sua configuração MPI, este exemplo inicia múltiplos processos (nos dois nós, inclusive), apenas imprimindo um Hello, world identificando de que nó cada linha vem.
Primeiramente, é necessário criar os arquivos que definem em que hosts o MPI vai iniciar os processos, e criar os arquivos de chaves públicas SSH para que as conexões sejam feitas pelo MPI sem precisar de senhas:
Copie o arquivo machines.LINUX
, que especifica os hosts, de /apps/mpi/machines.LINUX
. Este contém apenas
gina gina-n2
Que especifica cada nó em uma linha (o master é sempre a primeira linha).
A forma mais simples de criar e compartilhar as chaves públicas para SSH para a conexão entre os nós é usar este arquivo com o script sshconnectivity.exp
, fornecido pela Intel (e incluído no PATH). Supondo que o machines.LINUX
foi colocado no $HOME
do usuário:
sshconnectivity.exp ~/machines.LINUX
Ele vai pedir a senha do usuário, e conectar a cada host para compartilhar a chave pública, de forma que conexões SSH entre estes hosts não vão precisar da senha.
O daemon mpd, que executa os processos, precisa de dois arquivos de configuração, que podem ser copiados de /apps/mpi/
.
mpd.hosts
:
gina gina-n2 ifhn=gina-n2-ib
Que especifica os hosts a usar e (opcionalmente) a interface para conexão. E .mpd.conf
, que especifica uma senha para uso do mpd (é uma senha apenas para o mpd, e que fica visível neste arquivo de texto: não use uma senha em comum com qualquer outra, em particular a sua senha de login):
secretword=<some password for mpd only: do not use any real (especially login) password>
Com isso, há tudo que é necessário para rodar um programa com o MPI da Intel.
O programa a ser compilado e executado aqui é um dos exemplos Hello, world de /apps/intel/impi/4.0.0.028/test/
. Copie algum deles, e o compile com o compilador MPI da Intel. Para o exemplo em C++:
mpiicpc test.cpp -o testcpp
Os processos em MPI são executados pelo daemon mpd. Este pode ser iniciado diretamente, para uso pelo mpiexec
, ou pode ser iniciado pelo próprio mpirun
, que também executa o programa em MPI:
Primeiro, o daemon deve ser iniciado, especificando-se que hosts vão ser usados:
mpdboot -n 2 -r ssh -f ~/mpd.hosts
Inicia o mpd em 2 nós (-n
), para comunicação por ssh (-r
) e usando os nós listados no mpd.hosts
dado (-f
).
Pode se verificar que o daemon está rodando com o comando mpdtrace
, que mostra a lista de hosts que o daemon está usando:
penteado@gina:~> mpdtrace gina gina-n2
Agora o programa pode ser iniciado com o mpiexec, especificando quantos processos vão ser lançados (-n
), e o executável:
penteado@gina:~>mpiexec -n 30 /home/penteado/test_intel_mpi/testcpp Hello world: rank 0 of 30 running on gina Hello world: rank 1 of 30 running on gina Hello world: rank 2 of 30 running on gina Hello world: rank 3 of 30 running on gina Hello world: rank 4 of 30 running on gina Hello world: rank 5 of 30 running on gina Hello world: rank 6 of 30 running on gina Hello world: rank 7 of 30 running on gina Hello world: rank 8 of 30 running on gina Hello world: rank 9 of 30 running on gina Hello world: rank 10 of 30 running on gina Hello world: rank 11 of 30 running on gina Hello world: rank 12 of 30 running on gina-n2 Hello world: rank 13 of 30 running on gina-n2 Hello world: rank 14 of 30 running on gina-n2 Hello world: rank 15 of 30 running on gina-n2 Hello world: rank 16 of 30 running on gina-n2 Hello world: rank 17 of 30 running on gina-n2 Hello world: rank 18 of 30 running on gina-n2 Hello world: rank 19 of 30 running on gina-n2 Hello world: rank 20 of 30 running on gina-n2 Hello world: rank 21 of 30 running on gina-n2 Hello world: rank 22 of 30 running on gina-n2 Hello world: rank 23 of 30 running on gina-n2 Hello world: rank 24 of 30 running on gina Hello world: rank 25 of 30 running on gina Hello world: rank 26 of 30 running on gina Hello world: rank 27 of 30 running on gina Hello world: rank 28 of 30 running on gina Hello world: rank 29 of 30 running on gina
Note que cada nó tem 2 processadores de 6 núcleos cada, que podem ou não estar com Hyperthreading habilitado. Portanto cada nó tem 12 núcleos físicos, mas com HT pode executar 24 processos simultâneos (o sistema o vê como 24 núcleos). Atualmente estão sendo feitos testes para determinar se é melhor deixar o HT habilitado ou não. Pode-se verificar a situação atual com o comando cpuinfo
, que mostra quantos núcleos o sistema parece ter.
O daemon continua rodando, e pode ser encerrado com mpdallexit
:
penteado@gina:~> mpdtrace gina gina-n2 penteado@gina:~> mpdallexit penteado@gina:~> mpdtrace mpdtrace: cannot connect to local mpd (/tmp/mpd2.console_penteado); possible causes: 1. no mpd is running on this host 2. an mpd is running but was started without a "console" (-n option)
No lugar do mpiexec, pode ser usado o mpirun, que inicia o mpd, executa o programa em MPI, e termina o mpd ao final, com uma única linha de comando:
penteado@gina:~> mpirun -r ssh -f ~/mpd.hosts -n 30 -env I_MPI_FABRICS shm:tcp /home/penteado/test_intel_mpi/testcpp Hello world: rank 0 of 30 running on gina Hello world: rank 1 of 30 running on gina Hello world: rank 2 of 30 running on gina Hello world: rank 3 of 30 running on gina Hello world: rank 4 of 30 running on gina Hello world: rank 5 of 30 running on gina Hello world: rank 6 of 30 running on gina Hello world: rank 7 of 30 running on gina Hello world: rank 8 of 30 running on gina Hello world: rank 9 of 30 running on gina Hello world: rank 10 of 30 running on gina Hello world: rank 11 of 30 running on gina Hello world: rank 12 of 30 running on gina-n2 Hello world: rank 13 of 30 running on gina-n2 Hello world: rank 14 of 30 running on gina-n2 Hello world: rank 15 of 30 running on gina-n2 Hello world: rank 16 of 30 running on gina-n2 Hello world: rank 17 of 30 running on gina-n2 Hello world: rank 18 of 30 running on gina-n2 Hello world: rank 19 of 30 running on gina-n2 Hello world: rank 20 of 30 running on gina-n2 Hello world: rank 21 of 30 running on gina-n2 Hello world: rank 22 of 30 running on gina-n2 Hello world: rank 23 of 30 running on gina-n2 Hello world: rank 24 of 30 running on gina Hello world: rank 25 of 30 running on gina Hello world: rank 26 of 30 running on gina Hello world: rank 27 of 30 running on gina Hello world: rank 28 of 30 running on gina Hello world: rank 29 of 30 running on gina
Onde as opções -r
e -f
são encaminhadas ao mpdboot
, e as outras vão para o mpiexec
. A opção -env
está especificando uma variável de ambiente determinando o uso de memória compartilhada para comunição intra-nó, e tcp para comunicação entre-nós.
/apps/intel/ictce/4.0.0.020/doc/Doc_Index.htm
http://www.astro.iag.usp.br/~gina/docs/ictc/doc/Doc_Index.htm
/apps/intel/ictce/4.0.0.020/mpi/doc/Reference_Manual.pdf
http://www.astro.iag.usp.br/~gina/docs/ictc/mpi/doc/Reference_Manual.pdf
/apps/mpi/ICTCE_Linux_Tutorial.pdf
http://www.astro.iag.usp.br/~gina/tut/ICTCE_Linux_Tutorial.pdf
http://www.astro.iag.usp.br/~gina/docs/ictc/doc/Linux_Getting_Started.htm