Computação Paralela - Atividade 01

Valor: 2,5 Pontos.

Data de Entrega: 04/08/2020.

Nesta atividade vamos exercitar os fundamentos do OpenMP e paralelização de laços. Mas antes precisamos definir algumas regras.

Preparação do Repositório.

Crie um repositório no GitHub. Se seu nome for José Carlos Silva, o repositório deve ter o nome josecarlosparalela20201. Primeiro e segundo nome, sufixo paralela20201.

Preparação do Diretório.

No repositório criado, crie um diretório chamado atividades e dentro dele um subdiretório chamado atividade01. É nele que você irá colocar os arquivos desta atividade. Na futura Atividade 02, criaremos o subdiretório atividade02. Obedeça o formato, usando minúsculas e evitando espaços ou outros separadores.

Descrição do Problema.

Você irá criar o arquivo mtxMul.c na pasta atividades/atividade01. Ele deve conter, inicialmente, a função:

double **mtxMul(double **c, double **a, double **b, int n) {
   for (int i = 0; i < n; i++)
       for (int j = 0; j < n; j++) {
            for (int k = 0; k < n; k++)
                 c[i][j] = c[i][j] + a[i][k] * b[k][j];
       }
   return c;
}

Esta é a versão serial da multiplicação de matrizes. Antes deste código funcionar, você deve:

Experimentos.

Desabilite a impressão da matriz (para eliminar o tempo de E/S) e execute as três versões com uma matriz de tamanho 2000. Recupere o tempo de execução com o comando time (campo real):
time ./maxMultSerial 2000
time ./maxMultParallelNoCollapse 2000
time ./maxMultParallel2Collapse 2000
    

Anote os resultados dos tempos de execução na sua máquina no arquivo results.txt, um valor por linha, e coloque na mesma pasta atividades/atividade01. No começo do arquivo, coloque em uma linha iniciada por # (como se fosse um comentário em Python), o modelo do seu processador e a quantidade de memória RAM instalada. Exemplo para o results.txt:

# Core i5 7200U 16 GB 
 0m0.000s
 0m0.000s
 0m0.000s