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.
como o é o processamento distribuído entre os hosts.
Parte 2: Execução OpenMPI
9. Os programas que vem por padrão no OpenMpi são em linguagem Fortran, para isto é necessário compilar para linguagem C.
Exemplo com o hello_c.c:
cd /opt/openmpi-1.4.3/examples
$ mpicc hello_c.c -o hello.c
$ mpirun hello.c
Hello, world, I am 0 of 1 4
* Dentro do diretório /opt/openmpi-1.4.3/examples há mais programas, experimente compilar e rodar outros.
10. Vamos utilizar o programa ring_c.c, que tem por objetivo criar uma quantidade x de processos "determinado pelo valor de parâmetro passado", processar e imprimir em tela qual é o seu número atribuído (value).
Obs.: Será necessário compilar e executar conforme exemplo anterior.
Na máquina 1.
O comando abaixo irá invocar algum programa (mpirun), passando o parâmetro (hostfile my_target), que a grosso modo seria "Distribuir os processamento entre as máquinas citadas neste arquivo", executando 100 instâncias ( -np 100 ) do arquivo ring.c:
time mpirun --hostfile my_target -np 100 ring.c
Serão impressos em tela os processos que foram executados pelo programa ring.c, no final irá aparecer o resposta do comando "TIME", quanto tempo a máquina demorou para executar essas 100 instâncias..
11. Dicas para notar a diferença:
Rode o programa apenas em uma máquina:
time mpirun -np 100 ring.c
Rode o mesmo programa de forma distribuída:
time mpirun --hostfile my_target -np 100 ring.c
O caso com 1 máquina irá terminar em menos tempo do que o caso com 2 máquinas, mas haverá uma diferença notável em consumo de hardware.
Exemplo com o hello_c.c:
cd /opt/openmpi-1.4.3/examples
$ mpicc hello_c.c -o hello.c
$ mpirun hello.c
Hello, world, I am 0 of 1 4
* Dentro do diretório /opt/openmpi-1.4.3/examples há mais programas, experimente compilar e rodar outros.
10. Vamos utilizar o programa ring_c.c, que tem por objetivo criar uma quantidade x de processos "determinado pelo valor de parâmetro passado", processar e imprimir em tela qual é o seu número atribuído (value).
Obs.: Será necessário compilar e executar conforme exemplo anterior.
Na máquina 1.
O comando abaixo irá invocar algum programa (mpirun), passando o parâmetro (hostfile my_target), que a grosso modo seria "Distribuir os processamento entre as máquinas citadas neste arquivo", executando 100 instâncias ( -np 100 ) do arquivo ring.c:
time mpirun --hostfile my_target -np 100 ring.c
Serão impressos em tela os processos que foram executados pelo programa ring.c, no final irá aparecer o resposta do comando "TIME", quanto tempo a máquina demorou para executar essas 100 instâncias..
11. Dicas para notar a diferença:
Rode o programa apenas em uma máquina:
time mpirun -np 100 ring.c
Rode o mesmo programa de forma distribuída:
time mpirun --hostfile my_target -np 100 ring.c
O caso com 1 máquina irá terminar em menos tempo do que o caso com 2 máquinas, mas haverá uma diferença notável em consumo de hardware.
Assunto muito interessante, e de facil entendimento!
Parabeens!