【问题标题】:Same Algorithm works very slow in windows and very fast in Ubuntu相同的算法在 Windows 中运行速度非常慢,在 Ubuntu 中运行速度非常快
【发布时间】:2014-08-28 21:24:33
【问题描述】:

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

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

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

当我检查计算时间时,我发现我的算法中有一个函数在 Windows 中需要 0.4 秒,在 Ubuntu 中需要 0.011 秒。这个函数在这个过程中被调用了“n”次。此函数在其参数中仅使用cv::Mat 和一些浮点数。我不认为数据类型 float 是造成这种大的时间变化的原因。

我检查了文件中的每一行 c++ 代码。在这两种情况下完全相同。但仅计算时间减少了 30 多倍。我不知道发生了什么。谁能帮帮我?

注意: 两台电脑的配置完全相同。 此外,在这两种情况下,该函数都被调用了相同的“n”次

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;
}

【问题讨论】:

  • 任何代码?如果没有代码片段,很难估计。
  • 您是在 Windows 机器上运行发布版本还是调试版本?
  • 我在发布模式下运行..
  • 给我们运行 x40 慢的线。还是每条线都慢 40 倍?
  • @chris_chris 能不能也贴一下优化页面?由于性能问题很复杂。而且,Mat 的副本是必须的吗? Mat&amp;const Mat&amp; 怎么样?

标签: windows algorithm opencv ubuntu-12.04 mat


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    • 2015-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-13
    • 1970-01-01
    相关资源
    最近更新 更多