https://web.archive.org/web/20170227190422/http://hilbert-space.de/?p=22
在这个过时的网站上,它表明手写的asm会比内在的更好.我想知道这是不是现在的真相,即使是现在2012年.
那么使用gnu交叉编译器为内在函数改进了编译优化?
我正在开展一个项目,我可以在移动环境中"实时"检测场景中的已知图片(这意味着我正在使用智能手机相机捕捉帧并将帧大小调整为150x225).图片本身可能相当复杂.现在,我正在平均1.2s处理每个帧(使用OpenCV).我正在寻找改善处理时间和全球准确性的方法.我目前的实施工作如下:
我的方法可能不是正确的方法,但即使有很大的改进空间,结果仍然可以.我已经注意到SURF提取太慢而且我无法使用单应性(它可能与ORB有关).欢迎所有建议!
我使用OpenCVfor 计算密集型应用程序iOS.当然很慢.但它比我的PC原型慢了200倍.所以我正在优化它.从最初的15秒开始,我的速度达到了0.4秒.我想知道我是否找到了所有的东西以及其他人想要分享的内容.我做了什么:
将doubleOpenCV中的" "数据类型替换为" float".Double是64bit和32bit CPU无法轻松处理它们,所以float给了我一些速度.OpenCV经常使用double.
-mpfu=neon在编译器选项中添加了" ".副作用是模拟器编译器不再工作的新问题,任何东西都只能在本机硬件上进行测试.
用90个值查找表替换sin()和cos()实现.加速是巨大的!这与PC有些相反,而这种优化并没有给出任何加速.有代码工作在度,这个值转换为弧度为sin()和cos().此代码也已删除.但查找表完成了这项工作.
启用"thumb optimizations".一些博客文章建议完全相反,但这是因为拇指使事情通常较慢armv6.armv7没有任何问题,使事情变得更快更小.
为了确保拇指优化并充分-mfpu=neon发挥作用并且不引入崩溃,我完全删除了armv6目标.我的所有代码都编译到了armv7,这也在app store中列为需求.这意味着最低iPhone会3GS.我认为放弃旧款可以.无论如何,较旧的CPU具有较慢的CPU,如果安装在旧设备上,CPU密集型应用程序会提供糟糕的用户体验
我当然用 -O3 flag
我"dead code"从OpenCV中删除了.通常在优化OpenCV时,我会看到我的项目显然不需要的代码.例如,通常有一个额外"if()"的检查像素大小为8位或32位,我知道我只需要8位.这将删除一些代码,为优化器提供更好的机会来删除更多内容或替换为常量.代码也更适合缓存.
还有其他任何技巧和想法吗?对于我来说,启用拇指和用查找替换三角函数是提升制造商,让我感到惊讶.也许你知道一些让应用程序飞起来的事情吗?
我真的不知道下一个项目会用什么:IplImage?还是Cv :: Mat?
知道我想要:
如果是这样,我应该将以前的所有IplImages更改为cv :: Mat吗?