同样的算法在windows中运行非常慢,在Ubuntu中运行非常快
我有一个相同的算法在两台计算机上工作。一个是Ubuntu,另一个是windows同样的算法在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中,该算法通过名为ADTF的框架获取输入图像。在这里,该算法在70fps下工作。一切都很完美
- 在windows中,该算法从视频流中获取输入图像,而不使用任何框架(visual studio 2012作为IDE)。这里的算法在2fps中工作
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;
}