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