Quem sou eu

Nome: Lizzi Villalba

Disciplina: ELC139 - Programação Paralela

Professora: Andrea Schwertner Charão

Semestre: 01/2011

terça-feira, 21 de junho de 2011

Comunicação Coletiva vs. Ponto a Ponto


A forma de comunicação em MPI é através de mensagens que contêm dados. Embora a maneira mais simples seja a comunicação ponto a ponto, onde uma mensagem é enviada de um processo para outro usando as primitivas MPI_Send e MPI_Recv, há também um outro tipo de comunicação,  a comunicação coletiva. Recomenda-se o seu uso quando for necessário transmitir informações entre um grupo de processadores. Outra característica deste tipo de comunicação é a redução dos resultados usando operações aritméticas.


SERGEI GORLATCH em seu artigo Send-Receive Considered Harmful: Myths and Realities of Message Passing afirma que se devem evitar as primitivas send-recive, substituindo por primitivas de comunicação coletiva.


Este trabalho tem como objetivo desenvolver dois programas equivalentes, utilizando comunicação ponto a ponto e utilizando comunicação coletiva. A finalidade e de comparar o desempenho dos programas. No final deste trabalho se terá argumentos suficientes para poder ratificar o refutar esta afirmação.


O primeiro passo foi a escolha da primitiva que foi utilizada para desenvolver a versão de comunicação coletiva do programa. A primitiva escolhida foi MPI_Scatter. MPI_Scatter usa um array de dados no processo root e o distribuí aos outros processos.


O seguinte passo foi a escolha do processamento a ser realizado pelos programas. O calculo do fatorial de um numero se bem é um calculo simples, pode ser feito em paralelo, tem a particularidade de que se pode dividir o calculo em vários processos.


Após a escolha do problema, se desenvolveu um programa usando comunicação ponto a ponto.



O processo mestre faz a distribuição das tarefas para cada processo trabalhador. Divide o número do qual será calculado o fatorial pela quantidade de processos (numero/numtasks) e distribui um intervalo para calcular a cada um dos processos. O mestre também faz uma parte do cálculo, e além disso recebe o cálculo feito por cada processo trabalhador e faz a redução do resultado. Antes de dar saída ao resultado, verifica se foi feito o total do cálculo. Caso a divisão numero/numtasks não dé como resultado um número inteiro, o mestre completa o restante do cálculo.   


E a continuação foi desenvolvido o programa usando comunicação coletiva.



A seqüência de comandos para o cálculo da distribuição do trabalho é a mesma do programa anterior numero/numtasks; com a diferença de que é criado um buffer send_ray com todos os números predecessores do número do qual será calculado o fatorial, incluindo ele mesmo. Com a diretiva MPI_Scatter o processo root envia aos outros processos sua parte do send_ray. E na seqüência também foi utilizada a primitiva MPI_Reduce, que realiza uma operação matemática, neste caso o produto, de redução sobre um grupo de dados dispersos nos processos. Dessa forma se obtem o fatorial do numero.


Os testes de execução foram realizadas nas máquinas linux01 e linux02. Adiccionando os comandos -llmpe -lmpe  na compliação dos programas foram gerados automaticamente os arquivoc .clog2 e uma que é vez feita a conversão dos mesmos a .slog2 com a ferramenta Jumpshot pode-se visualizar o comportamento dos programas desenvolvidos como se mostra a seguir:




Calculando o fatorial de 10 com 8 processos:


Usando comunicação ponto a ponto


Usando comunicação colletiva




Calculando o fatorial de 10 com 32 processos:


Usando comunicação ponto a ponto


Usando comunicação colletiva





Calculando o fatorial de 20 com 8 processos:

Usando comunicação ponto a ponto


Usando comunicação colletiva



Calculando o fatorial de 20 com 32 processos:

Usando comunicação ponto a ponto


Usando comunicação colletiva



Legendas:


Comunicação Coletiva                                Comunicação Ponto a Ponto
  

Análise de desempenho

Na versão ponto a ponto como a distribuição do trabalho é feita num laço, o master envia e recebe o trabalho um após do outro enquanto os outros processos ficam esperando ociosos a sua parte do trabalho, o mestre fica sobrecarregado fazendo send-recive e ainda tem que fazer sua parte do cálculo e a redução do resultado. A diferença do programa que usa comunicação coletiva, o tempo de comunicação e reduzida em proporções consideráveis e, portanto, o desempenho, em termos de medição de tempo, e melhor usando a comunicação coletiva.



Esta análise foi feita em base dos testes de execução de ambos os programas desenvolvidos. Usando como tamanho de calculo o fatorial do numero 20, com 2, 4, 6,..., 20 processos. Pode-se apreciar que o speedup do programa que utiliza comunicação coletiva é bem mais proximo a o speddup linear. Embora o programa desenvolvido com comunicação ponto a ponto nao esteja muito longe do speedup ideal.


Conclusão: 

O uso de comunicação ponto a ponto e menos eficiente para este cálculo, pois usando o MPI_Scatter e MPI_Reduce,  não só é reduzida a quantidade de linhas de código senão também a comunicação coletiva sai ganhando em termos de tempo de execução. Embora a diferença seja muito pequena como pode-se visualisar na fiugra do analise do speedup. Se bem presentaram-se certas dificuldades na hora da programação utilizando as diretivas de comunicação coletiva seriam propias de quem esta se introducindo com o uso de estas diretivas. 


Referências:

Para o desenvolvimento do programa com diretivas de comunicação  ponto a ponto usou-se como modelo e base os programas mpi_errado1.c e mpi_errado2.c dos exercicios realizados nas aulas. E no desenvolvimento do programa usando diretivas de comunicação colletiva o modelo usado foi  o programa c_ex05.c, um exemplo do uso de MPI_Scatter e MPI_Reduce, disponibilizado pelo workshop  of The Golden Energy Computing Organization - Colorado School of Mines (CSM).


Nenhum comentário:

Postar um comentário