0

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

#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比线程数大得多。再一次,代码串行运行良好,所以我知道这与变量无关。

4

0 回答 0