使用迭代器通过std :: set打开OpenMP

时间:2015-08-13 08:29:40

标签: c++ multithreading parallel-processing openmp stdset

我有一个包含大量细分的网格,我想应用过滤器并填充std::set set_,它是类A的私有成员。有一个名为fill_vec()的函数,它将使用for循环填充向量:

fill_set()
{
  for(mesh::SegIterator it = A.beginSeg(); it != A.endSeg(); ++it )
  {
    mesh::Segment Seg_ = *it;
    int SignP = 0;
    int SignN = 0;


    for(mesh::PointIterator itp = Seg_.beginPoint(); itp != Seg_.endPoint(); ++itp )
    {
      double old_, new_;
      ... 
      ...

      if( old_ > 0.0 && new_ > 0.0 )
        SignP++;
      if( old_ < 0.0 && new_ < 0.0 )
        SignN++;
    }
    if( (SignP == 1 && SignN == 1) || (SignP == 1 && SignN == 2) )
    {
      set_.insert(Seg_);
    }
}

我正在尝试使用OpenMP和C ++ 03并行执行代码。我看到了像this这样的解决方案。还有其他安全可靠的解决方案吗?

1 个答案:

答案 0 :(得分:3)

尝试从it != A.endSeg()更改为it < A.endSeg()!=的问题是循环不是 countable 。编译器无法确定循环是否会结束。将其切换为<应该可以计算。