Trabalho 3: Troca de mensagens com MPI

Para este trabalho, você deverá usar os servidores linux01 e linux02 do NCC, que possuem OpenMPI instalado. Se desejar usar MPI localmente em seu notebook/desktop (rodando Ubuntu), instale os pacotes libopenmpi-dev e openmpi-bin.

Aquecimento

Esta parte do trabalho não precisa ser entregue. Seu objetivo é apenas exercitar a compilação e execução de programas MPI.

  • Baixe o arquivo hello_mpi.c.

  • Compile o programa:
    mpicc -o hello_mpi hello_mpi.c
    

  • Execute o programa com 5 processos e observe onde são executados:
    mpirun -np 5 hello_mpi
    

  • Execute o programa com 10 processos distribuídos nos 2 servidores:
    mpirun -np 10 -H linux01,linux02 hello_mpi
    

Parte 1

Antes de fazer esta parte do trabalho, baixe o programa dotprod_mpi.c. Estude seu código-fonte, que usa MPI para calcular o produto escalar de 2 vetores.

  1. Considerando o checklist visto na aula sobre o projeto de programas paralelos, explique como se dá o particionamento, a comunicação, a aglomeração e o mapeamento neste programa.

  2. Compile o programa e execute-o nas configurações abaixo, cuidando para que não haja interferência significativa nas medições. Registre o tempo de execução e calcule o speedup obtido nos casos B, C, D e E (para simplificar, considere o caso A como uma execução sequencial).
Caso Tamanho do vetor Repetições Num. de Processos Host
A 30000000 100 1 linux01 OU linux02
B 30000000 100 2 linux01 OU linux02
C 30000000 100 2 linux01 E linux02
D 30000000 100 4 linux01 OU linux02
E 30000000 100 4 linux01 E linux02

Parte 2

Nesta parte do trabalho, o objetivo é usar MPI a fim de paralelizar uma aplicação que realiza experimentos de simulação de incêndios em uma floresta, usando um método de Monte Carlo. Esta aplicação utiliza um modelo simples em que o fogo se propaga de uma árvore para outra com uma dada probabilidade. A cada execução da aplicação, realiza-se vários experimentos com diferentes probabilidades de propagação do fogo. Na saída, tem-se o percentual de árvores queimadas para cada probabilidade de propagação considerada.

O código sequencial desta aplicação, em C++, está disponível aqui. Para usar MPI com código C++, é possível usar a API do OpenMPI para linguagem C e compilar o programa com mpiCC em vez de mpicc.

O programa paralelo deverá reproduzir o mesmo resultado do programa sequencial (atenção ao uso do gerador de números aleatórios). Você pode escolher os parâmetros do programa para regular a quantidade total de trabalho. O desempenho do programa paralelo deverá ser avaliado usando o speedup como métrica.

Entrega

  • Datas de entrega:
    • Parte 1: até quarta-feira, 01/04, 12h
    • Parte 2: até quarta-feira, 08/04, 12h

  • Este trabalho pode ser feito individualmente ou em dupla.

  • Para entregá-lo, crie um documento no Google Docs com:
    • Identificação completa da disciplina e do aluno (ou da dupla);
    • Sumário e seções separadas para a Parte 1 e a Parte 2;
    • Parte 1: entregue respostas detalhadas e fundamentadas (busque referências para isso);
    • Parte 2: coloque o código-fonte em um repositório e indique a URL no documento; explique no documento como foi feita a paralelização (etapas do checklist); apresente e discuta os resultados de desempenho;
    • Referências.

  • Compartilhe o documento usando a opção avançada 'qualquer um com o link pode comentar'.

  • Preencha o link do documento nesta tabela.