Compiladores - Atividade 14

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

Coloque os arquivos da atividade na pasta atividades/atividade14 no seu repositório.

Valor: 2,0 pontos

Data da Entrega Limite: 21/08/2021

Questão 01 - 2,0 Pontos

Voltando ao mundo paralelo. Faça uma versão em MPI mtxMult_mpi.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 e 8 processos utilizando uma máquina com 8 núcleos na nuvem AWS. Instrumente o código com o uso da rotina MPI_Wtime(). Trace os gráficos, com o número de processadores no eixo x, para as seguintes grandezas: tempo de execução e  speedup. Nomeie o gráfico de questao02_01node_08cores.png. Refaça os experimentos para um cluster de duas máquinas com 4 núcleos cada e nomeie o arquivo como questao02_02nodes_04cores.png.