我想使用openmp设置矩阵的对角线。
这是计划的一部分:
for(int i=0; i<II; i++)
{
//calculate JJ
#pragma omp parallel for private(j)
for(j=0; j<JJ; j++)
{
for(k=0; k<JJ; k++)
{
for(l=0; l<JJ; l++)
{
//calculate A
for(m=0; m<JJ; m++)
{
if(j==l && k==m)
{
//calculate B
// calculate c=A-B
add C to matrix(diagonal, diagonal);
}
}
}
diagonal++;
}
}
}
你怎么能把它和openmp相提并论?有可能只使内环平行吗?当我运行这个时,它给了我错误的结果。
感谢
您有一个循环携带的依赖项,由:给出
diagonal++;
声明。因此,您无法将其与OpenMP并行化。您需要找到一种方法来打破这种依赖关系(可能在#pragma omp ordered
指令中运行该语句)