我编写了一段读取矩阵并对其值进行求和的代码......但我的问题是,由于我尝试以不同的方式进行Pragma,我发现
reduction(+:sum)
可能是不必要的,但是,我只是不知道为什么,可能我错过了在此情况下减少系统的实际含义。这是另一种选择:#pragma omp parallel for private(i, j) reduction(+:sum)
以下是代码:#include <stdio.h>
#include <math.h>
#include <omp.h>
#include <unistd.h>
int main ()
{
printf("===MATRIX SUM===\n");
printf("N ROWS: ");
int i1; scanf("%d",&i1);
printf("M COLUMNS: ");
int j1; scanf("%d",&j1);
int matrixA[i1][j1];
int i, j;
for(i = 0; i < i1; i++){
for (j = 0; j < j1; j++){
scanf("%d",&matriuA[i][j]);
}
}
printf("\nMATRIX A: \n");
for (i = 0; i < i1; i++){
for (j = 0; j < j1; j++){
printf("%d ", matrixA[i][j]);
}
printf("\n");
}
int sum = 0;
#pragma omp parallel for private(i, j)
for (i = 0; i < i1; i++)
for (j = 0; j < j1; j++){
sum += matrixA[i][j];
}
printf("\nTHE RESULT IS: %d", sum);
return 0;
}
我有一个问题想请教,是否有更好的方法来减少pragma,因为我读到这是最有效的方法。
sum+=..
,因为你希望单个OpenMP线程执行sum+=...
并对每个OpenMP线程的sum变量进行归约。 - yakoudbz