c++ - 嵌套的 C++ for 循环与 openmp 并行化

标签 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 并行化?是否可以仅并行化内部循环?当我运行它时,它给了我错误的结果。

谢谢

最佳答案

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

diagonal++;

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

关于c++ - 嵌套的 C++ for 循环与 openmp 并行化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34102821/

相关文章:

c++ - 带逆向工程的简单 C++ UML

php - 另一个嵌套循环 php + mysql 查询

c++ - 我不断收到此错误,与 'operator==' 中的 'temp2 == temp3' 不匹配

c++ - c++20 模板 lambda 的用例是什么?

c++ - OpenMP减少子句不适用于循环计数很大的int

C++如何对齐文件的每一行?

python-3.x - 当Python中的嵌套列表内满足值时,如何结束While循环?

javascript - 嵌套for循环显示重复的输出

c++ - SDL MinGW Netbeans。 <SDL/SDL.h> 没有那个文件或目录

c++ - 在OpenMP C++中并行化许多嵌套的for循环