我对OpenMP有意见。我必须做一个循环。例如:
for (int i = 1; i < SIZE-2; i++) {
for (int j = 2; j < SIZE-2; j++) {
tab[i][j] = tab[i][j+2] + tab[i+2][j-2];
}
}这里我依赖于j-2,j+2和i+2,我不知道如何解决这个依赖关系。
发布于 2021-05-18 17:18:02
您可以尝试执行以下操作:
#pragma omp parallel for ordered(2)
for (int i = 1; i < SIZE-2; i++) {
for (int j = 2; j < SIZE-2; j++) {
#pragma omp ordered depend(sink:i,j+2) depend(sink:i+2,j-2)
tab[i][j] = tab[i][j+2] + tab[i+2][j-2];
#pragma omp ordered depend(source)
}
}发布于 2021-07-13 18:35:48
我得到了一个基于answer by dreamcrash的工作解决方案
#pragma omp parallel for ordered(2)
for(int i=1; i<N-2; i++){
for(int j=1; j<N-2; j++){
#pragma omp ordered depend(sink:i,j-2) depend(sink:i-2,j+1)
a[i][j] = a[i][j+2] + a[i+2][j-1];
#pragma omp ordered depend(source)
}
}https://stackoverflow.com/questions/67581509
复制相似问题