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.
Esta parte do trabalho não precisa ser entregue. Seu objetivo é apenas exercitar a compilação e execução de programas MPI.
mpicc -o hello_mpi hello_mpi.c
mpirun -np 5 hello_mpi
mpirun -np 10 -H linux01,linux02 hello_mpi
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.
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 |
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.