Computação Paralela - Atividade 02

Formato da Entrega:

Valor: 2,5 Pontos.

Data de Entrega: 04/08/2020.

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:

Questão 02 (1,5 pontos)

Considere o programa abaixo:

#include 
#include 
#include 
            
int main (int argc , char *argv[]) {
    int max; 
    sscanf (argv[1], "%d", &max);
    long int sum = 0;
    #pragma omp parallel for reduction(+:sum) schedule(runtime)
    for (int i = 1; i <= max; i++) {
        printf ("%2d @ %d\n", i, omp_get_thread_num());
        sleep (i < 4 ? i + 1 : 1);
        sum = sum + i;
    }
    printf ("%ld\n", sum);
    return 0;
}
        

Suponha que o programa está em execução com 4 threads e o valor fornecido para max foi 20. Determine qual iteração será executada por qual thread se as seguintes diretivas forem utilizadas como estratégias de escalonamento.