2
我已經寫了這個代碼讀取矩陣,它基本上總結了矩陣的值...但是我的問題是,因爲我嘗試以不同的方式執行雜注,我發現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;
}
而且,我想問一下,是否會有像,有關編譯還原一個更好的解決方案,因爲我讀的是最有效的方法。
您應該同時放置縮減和'sum + = ..',因爲您希望單個OpenMP線程執行'sum + = ...',並減少每個OpenMP thead的總和變量。 – yakoudbz
如果我理解你的效率是什麼意思,那麼即使需要單獨命名的內部和外部還原變量,也希望在每個線程內減少simd以及外部循環縮減。 – tim18