我在理解 OpenMP 如何与嵌套循环一起工作时遇到问题。请帮忙!
我得到以下代码并行运行:
#pragma omp parallel private(i)
{
for(i=0; i<n; i++)
{
#pragma omp for
for(j=0; j<n; j++)
{
if(asubsref(seed,j) > 0)
asubsref(bin,j) = asubsref(bin,j) + 1;
}
#pragma omp for
for(j=0; j<n; j++)
asubsref(seed,j) = asubsref(seed,j) - asubsref(w,i);
}
}
但是,我不太确定这段代码是如何工作的(我只是运气好)。这就是我认为它正在做的事情......
所以for(i=0; i<n; i++)
被分成不同的线程并并行运行。因为i
被声明为private
,所以循环的每个实例都是“沙盒”的;也就是说,任何更改都j
保留在该线程中(至少在所有线程完成之前?)。我很困惑,因为不声明#pragma omp for
会导致代码中断......我不确定为什么会这样。
如果有人可以指导我完成这段代码的工作,我将非常感激!谢谢!