Computação Paralela - Atividade 12

Esta atividade deve ser colocada no repositório, na pasta atividades/atividade12.

Valor: 2,0 Pontos.

Data de Entrega: 07/08/2021.

Questão 01 - 1,0 Ponto.

Escreva uma programa questao01.c para calcular o produto escalar entre dois vetores de tipo ponto flutuante, utilizando rotinas de comunicação coletiva do MPI para envio dos vetores iniciais e recepção dos resultados parciais pelo processo raiz. Considere que os dois vetores iniciais são inicializados na raiz, ambos com todos os elementos iguais a valores fornecidos como parâmetro. O tamanho dos vetores também é um parâmetro. Por exemplo:

$ mpirun -np 4 ./prodEscalarVetor 1.0 2.0 100
                

Executa o produto escalar de dois vetores, o primeiro com 100 elementos iguais a 1.0, o segundo com 100 elementos iguais a 2.0. Para facilitar, assuma que a divisão de N (tamanho do vetor) por  P (quantidade de processos) não tem resto. Assuma que o valor de N não é conhecido e deve ser enviado pelo processo raiz para os demais processos com o uso de uma rotina de comunicação coletiva.

Questão 02 - 1,0 Ponto.

Execute o programa anterior com N = 1.000.000 e com 1, 2, 4, 6 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 questao04_01node_08cores.png. Refaça os experimentos para um cluster de duas máquinas com 4 núcleos cada nomeie o arquivo como questao04_02nodes_04cores.png.

Você pode usar qualquer ferramenta que quiser para criar os gráficos (gnuplot, Excel, LibreOffice, etc);