Computação Paralela - Atividade 05

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

Valor: 1,0 ponto na 1ª Nota.

Data da Entrega Limite: 19/06/2021

Questão 01 (1,0 ponto)

Considere o código a seguir para multiplicação de matrizes:
    double **mtxMul (double **c, double **a, double **b, int n) {
       for (int i = 0; i < n; i++)
           for (int j = 0; j < n; j++) {
                c[i][j] = 0.0;
                for (int k = 0; k < n; k++)
                    c[i][j] = c[i][j] + a[i][k] * b[k][j];
            }
       return c;
    }
            

Suponha que duas matrizes 100 x 100 são multiplicadas usando 8 threads. Quantos produtos escalares, isto é, operações realizadas pelo laço for mais interno, cada thread deve calcular se as seguintes abordagens para paralelizar os dois laços for mais externos forem utilizadas:

  1. Apenas o laço for mais externo é paralelizado.
  2. A diretiva collapse(2) é aplicada ao laço mais externo.
  3. Ativando regiões paralelas aninhadas e OMP_NUM_THREADS=2,4.

Em seguida, complete o trecho de código acima para gerar um programa funcional e execute as três versões possíveis da paralelização do laço para matrizes quadradas de ordem 2000. Anote o tempo de execução através do campi real do comando time. Para ter uma noção mais exata, execute cada versão pelo menos 3 vezes e capture a média. Você acha que há uma grande diferença de desempenho para esse problema específico?