将此嵌套循环与携带依赖并行化的最佳方法是什么? Konwing它在一个函数中,我从main调用n次。OpenMP - 如何将循环与携带依赖并行化
[编辑]
funct(unsigned char*** grid, int n) {
# pragma omp parallel for num_threads(thread_count) default(none) \
shared(grid, n, cur) private(i, j)
for(i = 1; i <= n+1; i++) {
for(j = 1; j <= n; j++) {
if(grid[cur][i-1][j] == 2 && grid[cur][i][j] == 0) {
grid[1-cur][i-1][j] = 0;
grid[1-cur][i][j] = 2;
}
else {
grid[1-cur][i][j] = grid[cur][i][j];
}
}
}
}
主营:
cur = 0;
for(s = 0; s < steps; s++) {
funct(grid, N);
cur = 1-cur;
funct_2(grid, N)
cur = 1-cur
}
此代码运行没有错误,但返回不正确的结果(.ppm格式文件)。
@HighPerformanceMark如果我明白这是我已经在'cur'和'1-cur'之间切换。但是如果我在外循环之前使用'pragma omp parallel for',那么它不起作用。那么让我们假设它不会产生与串行代码相同的结果(ppm文件)。 – Caramelleamare
您最好展示导致问题的真实代码,您发布的内容中没有任何OpenMP杂注,因此很难做出更多有关错误的猜测。或者,如果不是真正的代码a [mcve],它恰当地说明问题。 –
@HighPerformanceMark实际代码太长且详细。不过,我已经编辑过问题,现在我希望它更好。 – Caramelleamare