C++ 使用OpenMP时非常奇怪的行为

C++ 使用OpenMP时非常奇怪的行为,c++,opencv,openmp,C++,Opencv,Openmp,现在,我经常在OpenMP上得到不好的结果,所以这一定是我不理解的。目前,我在没有OpenMP的情况下运行的for循环上有非常奇怪的行为。以下是计划大纲: void computea和b(Xi,XiDX,XiDY,XiDZ,depthImg){ double tstart=omp_get_wtime(); cv::Mat Error=光线投射(Xi,深度); cv::Mat ErrorDX=光线投射(XiDX,深度); cv::Mat ErrorDY=光线投射(XiDY,深度); cv::Mat

现在,我经常在OpenMP上得到不好的结果,所以这一定是我不理解的。目前,我在没有OpenMP的情况下运行的for循环上有非常奇怪的行为。以下是计划大纲:

void computea和b(Xi,XiDX,XiDY,XiDZ,depthImg){
double tstart=omp_get_wtime();
cv::Mat Error=光线投射(Xi,深度);
cv::Mat ErrorDX=光线投射(XiDX,深度);
cv::Mat ErrorDY=光线投射(XiDY,深度);
cv::Mat ErrorDZ=光线投射(XiDZ,深度);
浮点数A1=0;
浮点数b1=0;
对于(i=0;i我们可以看看您在哪里/如何使用OpenMP吗?以及您是如何计时的?您必须将所有循环迭代器定义为
private
。因此它应该是
private(i,j)shared(R,t,tmp)
。根据一篇教程,只需将内部变量声明为私有:我认为这不是问题所在。只需以C99的方式声明循环索引,以确保它们是私有的。而且,显式表示也不会有什么坏处,因为如果你错了,结果会很糟糕。你使用的是什么编译选项(
e.g.-O3-fopenmp
with GCC)。您是在启用优化的情况下编译的吗?这是什么编译器?操作系统是什么?硬件是什么(如果Linux
cat/proc/cpuinfo
显示了什么)?有多少处理器和内核?