C++ 使用openmp和4 for循环进行并行化

C++ 使用openmp和4 for循环进行并行化,c++,multithreading,openmp,C++,Multithreading,Openmp,我正在尝试使用openmp并行化我的代码。除了一部分代码外,我已经成功地将大部分代码并行化。据我所知,下面的部分是无法比拟的,但我想有一个不同的观点。如有任何建议,将不胜感激。如果可能的话,内部2个for循环可以并行化,这将是非常棒的 (o=0;o

我正在尝试使用openmp并行化我的代码。除了一部分代码外,我已经成功地将大部分代码并行化。据我所知,下面的部分是无法比拟的,但我想有一个不同的观点。如有任何建议,将不胜感激。如果可能的话,内部2个for循环可以并行化,这将是非常棒的

(o=0;o 对于(i=0;i高度;++r) { 对于(c=0;cwidth;++c) { if(isExtremum(r,c,t,m,b)) { 插值极值(r,c,t,m,b); } } } }
让我们看看这里:
r
c
是循环中的局部变量
t
m
b
似乎是内部循环的只读共享状态。如果
isExtremum
interpolateExtremum
是纯函数(它们不会产生副作用),那么您可以安全地在内环上为打一个
平行线:

  #pragma omp parallel for private(r, c)
  for ( r = 0; r < t->height; ++r)
    {
      for (c = 0; c < t->width; ++c)
        {
          if (isExtremum(r, c, t, m, b))
            {
              interpolateExtremum(r, c, t, m, b);
            }
        }
    }
#pragma omp parallel for private(r,c)
对于(r=0;rheight;++r)
{
对于(c=0;cwidth;++c)
{
if(isExtremum(r,c,t,m,b))
{
插值极值(r,c,t,m,b);
}
}
}

算法的输出是什么
o
i
r
c
是循环的局部变量,
b
m
t
似乎也是临时变量。肯定有什么副作用,否则我看不出这样的算法是如何产生任何有用的东西的……”“据我所知,以下部分无法并行化”:为什么?InterpolateExtreum()的作用是什么?它会影响下一个循环迭代吗?