C++ 具有非常量值的的的OpenMP已崩溃
Disclamer:正如您将看到的(在我看来),这个问题与或无关 我有以下代码:C++ 具有非常量值的的的OpenMP已崩溃,c++,performance,parallel-processing,openmp,C++,Performance,Parallel Processing,Openmp,Disclamer:正如您将看到的(在我看来),这个问题与或无关 我有以下代码: 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
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]);
}
std::vector localWrappers;
std::矢量像素距离new;
std::矢量游标;
//填充3个向量
#pragma omp平行折叠(2)计划(动态,1)
对于(int i=0;i positiveThreshold&&(isMax(val,localWrappers[i].cur,r,c)&&isMax(val,localWrappers[i].low,r,c)&&isMax(val,localWrappers[i].high,r,c)))||
(val局部最大值或负->局部最小值。
localizeKeypoint(r、c、curSigmas[i]、PixelDistanceNew[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
错误:带折叠的并行循环必须完全嵌套
对于(int i=0;i请确保问题出在localWrappers[i].cur.rows
和它对外部循环变量的依赖关系。如果这对所有i
都是常量,那么使用一个不依赖于i
的表达式。如果不是,您可能需要手动折叠循环。@Zulan问题是,这对所有的i
都不是常量i@Zulan你有什么建议来解决这个问题?@Zulan你们能看一下这个问题吗?