【发布时间】:2012-11-27 05:31:30
【问题描述】:
我在理解 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 会导致代码中断...我不确定这是为什么。
如果有人能指导我了解这段代码的作用,我将不胜感激!谢谢!
【问题讨论】:
标签: c loops parallel-processing openmp nested-loops