Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
同样的算法在windows中运行非常慢,在Ubuntu中运行非常快_Windows_Algorithm_Opencv_Ubuntu 12.04_Mat - Fatal编程技术网

同样的算法在windows中运行非常慢,在Ubuntu中运行非常快

同样的算法在windows中运行非常慢,在Ubuntu中运行非常快,windows,algorithm,opencv,ubuntu-12.04,mat,Windows,Algorithm,Opencv,Ubuntu 12.04,Mat,我有一个相同的算法在两台计算机上工作。一个是Ubuntu,另一个是windows 在Ubuntu中,该算法通过名为ADTF的框架获取输入图像。在这里,该算法在70fps下工作。一切都很完美 在windows中,该算法从视频流中获取输入图像,而不使用任何框架(visual studio 2012作为IDE)。这里的算法在2fps中工作 当我检查计算时间时,我在我的算法中看到一个函数,在windows中需要0.4秒,在Ubuntu中需要0.011秒。这个函数在这个过程中被调用了n次。此函数在其参

我有一个相同的算法在两台计算机上工作。一个是Ubuntu,另一个是windows

  • 在Ubuntu中,该算法通过名为ADTF的框架获取输入图像。在这里,该算法在70fps下工作。一切都很完美

  • 在windows中,该算法从视频流中获取输入图像,而不使用任何框架(visual studio 2012作为IDE)。这里的算法在2fps中工作

当我检查计算时间时,我在我的算法中看到一个函数,在windows中需要0.4秒,在Ubuntu中需要0.011秒。这个函数在这个过程中被调用了n次。此函数在其参数中仅使用
cv::Mat
,并使用一些浮点值。我不这么认为,数据类型float应该对这种大的时间变化负责

我检查了我的文件中的C++代码的每一行。这两种情况完全相同。但只有计算时间减少了30多倍。我不知道发生了什么事。有人能帮我吗

注: 这两台计算机的配置完全相同。 此外,在这两种情况下,函数被调用的次数相同

Intensity getIntensity(网格和inputGrids,Mat inputImage)//二维网格组
{
类型和强度;
for()//采用单个网格
{
类型和强度;
for()//取单点
{
双强度=输入图像at(yPose,xPose);
单网格强度。向后推(强度);
}
allGridIntensity。推回(singleGridIntensity);
}
返回所有网格强度;
}

没有代码很难帮助您,但如果您在性能上存在如此大的差距,我会检查编译器的优化设置。当您有
for
循环并且您的实现适合该编译器时,编译器将并行化您的代码,您将运行得更快。但这只是猜测,没有适当的代码示例

任何代码?很难估计是否没有代码片段。您是在Windows计算机上运行发布版本还是调试版本?我是在发布模式下运行。请给出运行x40较慢的代码行。或者每行运行速度慢40倍?@chris\u chris你能粘贴优化页面吗?因为性能问题很复杂。而且,必须要有一份
Mat
Mat吗?
Mat&
const-Mat&
怎么样?
Intensity getIntensity (Grids &inputGrids, Mat inputImage)// groups of 2d grids
{
    type allGridIntensity;
    for()//takes single grid
    {
        type singleGridIntensity;
        for()//takes single point
        {
            double intensity = inputImage.at<uchar>(yPose, xPose);
            singleGridIntensity.push_back(intensity);
        }
        allGridIntensity.push_back(singleGridIntensity);
    }
    return allGridIntensity;
}