用openmp并行化的嵌套c ++ for循环

时间:2015-12-05 08:22:52

标签: c++ openmp nested-loops

我想使用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并行化?是否有可能只对内环进行并行化?当我运行它时,它给了我错误的结果。

由于

1 个答案:

答案 0 :(得分:2)

你有一个循环携带的依赖关系:

diagonal++;

语句。因此,您无法将此与OpenMP并行化。您需要找到一种方法来打破这种依赖关系(可能在#pragma omp ordered指令中运行该语句)