Computação Paralela - Atividade 15

Leia com atenção as instruções abaixo.

Valor: 2,0 pontos na 3ª Nota.

Data da Entrega Limite: 16/07/2022

Formato de Entrega:

  1. Arquivos atv15_questao01.c e atv5_resultados.txt.
A entrega deve ser feita via chat privado no Slack.

A atividade é individual.

Questão 01 - 2,0 Pontos

Faça uma versão em MPI da multiplicação de matrizes chamada atv15_questao01.c. Você deve partir da versão com a matriz linear na memória, atendendo aos seguintes requisitos:

  1. O programa deve receber como parâmetro a ordem da matriz.
  2. Em seguida, o processo 0 deve gerar duas matrizes double quadradas (A e B) e preênche-las com o valor 1.0.
  3. O processo 0 deve usar comunicação coletiva para distribuir as linhas da matriz A entre outros processos.
  4. O processo 0 deve usar comunicação coletiva para copiar a matriz B entre outros processos.
  5. Cada processo deve multiplicar as linhas de A com a matriz B e gerar sua contribuição da matriz final.
  6. O processo 0 deve usar comunicação coletiva para coletar a contribuição de cada outro processo e guardá-las na matriz C.
  7. Medir o tempo de execução com MPI_Wtime, considerando desde MPI_Init até o MPI_Finalize.

Considere N = 100. Com p = 4 processos, o processo 0 ficaria com as linhas 0 a 24 de A, o processo 1 com as linhas 25 a 49, o processo 2 com as linhas 50 a 74, e o processo 3 com as linhas 75 a 99. Cada um calcularia suas partições de C e o processo 0 consolidaria o resultado final.

Execute o programa anterior com N = 2048 e com 2, 4, 8 e 16 processos utilizando a máquina paralela. Instrumente o código com o uso da rotina MPI_Wtime() e anote o tempo de execução para cada número de processos. Em seguida, paralelize o laço com OpenMP com a solução que deu melhor tempo de execução na Atividade 14 e execute com 4 processos MPI, sendo que cada processo deve usar 4 threads. O número de processos MPI você defina na invocação do programa e o número de threads OpenMP você pode fixar no código ou exportar a variável de ambiente.

Anote o resultado dos tempos de execução em um arquivo de texto atv5_resultados.txt mostrando o tempo de execução para cada uma das cinco configurações pedidas acima.