OpenMP与非const值折叠

时间:2017-04-17 09:11:28

标签: c++ performance parallel-processing openmp

免责声明,因为您会看到(在我看来)此问题与thisthis无关。

我有这段代码:

std::vector<Wrapper> localWrappers;
std::vector<float> pixelDistancesNew;
std::vector<float> curSigmas;
//fill the 3 vectors
#pragma omp parallel for collapse(2) schedule(dynamic, 1)
for(int i=0; i<localWrappers.size(); i++)
  for (int r = par.border; r < (localWrappers[i].cur.rows - par.border); r++)
    for (int c = par.border; c < (localWrappers[i].cur.cols - par.border); c++) {
      const float val = localWrappers[i].cur.at<float>(r,c);
      if ( (val > positiveThreshold && (isMax(val, localWrappers[i].cur, r, c) && isMax(val, localWrappers[i].low, r, c) && isMax(val, localWrappers[i].high, r, c))) ||
        (val < negativeThreshold && (isMin(val, localWrappers[i].cur, r, c) && isMin(val, localWrappers[i].low, r, c) && isMin(val, localWrappers[i].high, r, c))) )
        // either positive -> local max. or negative -> local min.
        localizeKeypoint(r, c, curSigmas[i], pixelDistancesNew[i], localWrappers[i]);
    }

我收到了这个错误:

error: parallel loops with collapse must be perfectly nested
    for(int i=0; i<localWrappers.size(); i++)
            ^

Error: the OpenMP "single" pragma must not be enclosed by the "for" pragma

阅读this,我认为错误是由于我们正在使用size()这一事实。但是,我不知道如何为此获得const或为此问题实施任何类型的解决方案。

有人可以帮我这个吗?

0 个答案:

没有答案