这可能是一个微不足道的问题,但我遇到了代码的以下部分并行化的一些问题。我希望有人可以帮助解决任何问题(如果有的话)。顺便说一句,代码完美地串行运行。我将首先介绍代码:
#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
远大于线程数。再一次,代码运行良好,所以我知道它与变量无关。