OpenMP并行外循环但串行内循环

时间:2013-05-31 21:42:06

标签: c for-loop parallel-processing openmp

这可能是一个微不足道的问题,但我遇到了代码的以下部分并行化的一些问题。我希望有人可以帮助解决任何问题(如果有的话)。顺便说一句,代码完美地串行运行。我将首先介绍代码:

#pragma omp parallel for shared(P,Q,WE,CEx,EA,Pn,Wxlim)  private(i,j,ij)
for(j=0;j<m;j++)
{
    P[j] = -EA[j]/(CEx[j]+1.0E-20);
    Q[j] =  Pn[j]/(CEx[j]+1.0E-20);

    for(i=1;i<(int)Wxlim[j];i++)
    {
        ij = (i*m)+j;            

        P[ij] = -EA[ij]/((WE[ij]*P[(ij)-m]) + CEx[ij]+1.0E-20);
        Q[ij] = (Pn[ij]-WE[ij]*Q[(ij)-m])/((WE[ij]*P[(ij)-m]) + CEx[ij]+1.0E-20);
    }
}

代码似乎运行良好一点,然后得到分段错误作为某些点,我不知道为什么。我只希望j循环并行,我希望i循环能够串行运行。换句话说,对于每个j我想要一个线程来计算i循环。正如您所看到的,i循环中存在依赖关系,但每个i循环作为一个整体对于给定的j是独立的。这就是为什么我想并行化外部循环并在给定j的独立线程上运行内部循环。

对于初学者,我是否正确地按照我的意愿进行此设置?我应该注意m远大于线程数。再一次,代码运行良好,所以我知道它与变量无关。

0 个答案:

没有答案