lin*_*llo 7 c c++ for-loop nested openmp
我正在使用OpenMP来并行化标量嵌套for循环:
double P[N][N];
double x=0.0,y=0.0;
for (int i=0; i<N; i++)
{
for (int j=0; j<N; j++)
{
P[i][j]=someLongFunction(x,y);
y+=1;
}
x+=1;
}
Run Code Online (Sandbox Code Playgroud)
在这个循环中,重要的是矩阵P在标量和并行版本中必须相同:
我所有可能的试验都没有成功......
Mys*_*ial 13
这里的问题是你已经添加了迭代到迭代的依赖关系:
x+=1;
y+=1;
Run Code Online (Sandbox Code Playgroud)
因此,正如代码现在所说的那样,它不可并行化.试图这样做会导致错误的结果.(你可能正在看到)
幸运的是,在您的情况下,您可以直接计算它们而不引入此依赖项:
for (int i=0; i<N; i++)
{
for (int j=0; j<N; j++)
{
P[i][j]=someLongFunction((double)i, (double)N*i + j);
}
}
Run Code Online (Sandbox Code Playgroud)
现在你可以尝试在这上面抛出一个OpenMP pragma,看看它是否有效:
#pragma omp parallel for
for (int i=0; i<N; i++)
{
for (int j=0; j<N; j++)
{
P[i][j]=someLongFunction((double)i, (double)N*i + j);
}
}
Run Code Online (Sandbox Code Playgroud)