Tutorial: Hello, world em MPI (exemplo da Intel)

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.

Configuração do MPI

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.

Compilação com MPI

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

Execução com MPI

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:

mpiexec

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)

mpirun

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.

Referências

Intel® Cluster Toolkit Compiler Edition 4.0 for Linux* OS

/apps/intel/ictce/4.0.0.020/doc/Doc_Index.htm

http://www.astro.iag.usp.br/~gina/docs/ictc/doc/Doc_Index.htm

Intel® MPI Library for Linux* OS

/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

Intel® Cluster Toolkit Compiler Edition Getting Started Guide

 
exemplo_mpi_intel.txt · Última modificação: 2010/10/21 16:45 por penteado
 
Exceto onde for informado ao contrário, o conteúdo neste wiki está sob a seguinte licença:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki