Valor: 2,5 Pontos.
Data de Entrega: 04/08/2020.
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:
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.