jan 09
27
Usando Open MPI Em Programação Paralela
Olá caro leitor, depois de algum tempo de descanso volto novamente a tratar de um assunto que tem tido bastante interesse da comunidade que trabalha com computação de alto desempenho. Pois uma forma de conseguir o tão desejado alto desempenho em um programa é fazendo com que este utilize vários processadores durante sua execução, mas como foi dito no último artigo que escrevi ( Implementando Programas que Usam Vários Processadores ), essa não é uma tarefa tão simples! O escopo desse artigo traz algumas dicas de ferramentas necessárias para criar um programa que ao ser executado use vários processos e que esses processos comuniquem entre si.
Como foi discutido no artigo citado acima, uma forma de implementar a programação paralela é usando as bibliotecas de passagem de mensagens (MPI). Portanto, se o leitor quiser testar os programas exemplos que darei durante os próximos artigos será necessário instalar o MPI, como sou adepto da filosofia Open Source, aconselho que instale o Open MPI,( mas se estiver usando o Windows, instale o MPICH, Por sua conta e risco). Como de praxe, a instalação do Open MPI é simples, basta baixar o código fonte (código fonte), descompactar o arquivo, entrar na pasta criada pela descompactação usando o console ou um aplicativo similar e em seguida dar os comandos usais para compilação e instalação de pacotes (./configure em seguida make, e como superusuário dar o último comando, make install). O Open MPI necessita de que alguns pacotes estejam instalados; por exemplo, se você quiser escrever seus programas em Fortran, será necessário que tenha o fortran previamente instalado em sua máquina, essa mesma regra é válida para as outras linguagens que você queira escrever seus códigos, tais como C e C++. Outro pacote que o MPI usa e, portanto, deve estar instalado é o ssh, pois é a partir do ssh que é feita a comunicação entre os vários processos do programa em execução.
Vamos criar um programa simples para verificar se sua instalação foi bem sucedida, porém primeiramente vou falar de uma premissa básica sobre o MPI que é a Inicialização e a Finalização. Para se fazer referências ou chamadas à qualquer rotinas MPI, é necessário que o MPI seja inicializado e antes do término do programa principal o MPI deve ser finalizado. Para isso são definidas rotinas nas linguagens de programação, aqui vou usar o C como exemplo, porém o procedimento é o mesmo para outras linguagens (o que muda é sintaxe da chamada da rotina).
int MPI_Init( int *argc, char ***argv); // inicialização do MPI
//Blocos de códigos MPI
int MPI_Finalize( ); // finalização do MPI
Esses parâmetros definidos na inicialização do MPI (argc e argv), são aqueles parâmetros recebidos tradicionalmente pela interface da linguagem C, portanto tais parâmetros devem ser passados para inicializar o MPI antes de sua utilização. O valor de retorno dessa chamada é um código de erro, sendo assim, ele indica possíveis erros durante a inicialização do MPI. Se não houve nenhum erro durante a inicialização, o valor de retorno será MPI_SUCCESS; caso haja algum tipo de erro os valores serão diferentes, porém não são especificados pelo MPI. E assim como a inicialização, a finalização é feita pela rotina MPI_Finalize( ).
Para compreender o processo de inicialização e finalização das rotinas MPI bem como testar se a sua instalação foi bem sucedida, copie o trecho do código seguinte em um arquivo sem formatação e salve-o com o nome NumProcesso.c em seguida compili-o. Obs. Ao copiar e colar tome cuidado com as aspas!
#include <stdio.h>
#include <mpi.h>int main(int argc, char **argv){
int quantos, rank;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &quantos);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
printf(“Processo %d de %d rodando \n”, rank, quantos);MPI_Finalize();
return 0;
}
Para compilar um arquivo usando MPI basta seguir o seguinte procedimento: usando o console, entre na pasta que se encontra o arquivo e em seguida dê o comando mpicc NumProcesso.c -o processos.exe (obs. a extensão *.exe é opcional, na verdade nem é necessário usar nenhum tipo de extensão). Se a compilação ocorreu tudo certo, execute o programa recém compilado assim: mpirun -np 4 processos.exe, aqui “-np 4″ é o numero de processos que será aberto durante a execução do programa, neste caso são quatro processos. Para evitar que a cada processo aberto ele peça a senha, configure o servidor ssh para autenticação sem senha.
P.S. O Próximo artigo será: Os conceitos em que as rotinas MPI são construídas. Nesse artigo será abordado processos, mensagens, comunicadores e tipos de dados.
ERRATA:
Olá leitores do TecnoSapiens, em algum ponto do artigo foi afirmado que a comunicação entre os processos era feita pelo ssh, porém o ssh é utilizado para disparar os daemons responsáveis por executar os processos MPI. Normalmente a comunicação propriamente dita das primitivas MPI_ … é feita sem segurança.
Claudinei Caetano de Souza.