OpenCV
我使用for完成了计算密集型应用程序iOS
。当然,它很慢。但它比我的 PC 原型慢 200 倍。所以我正在优化它。从最初的 15 秒开始,我就可以达到 0.4 秒的速度。我想知道我是否找到了所有东西以及其他人可能想要分享的东西。我做了什么:
double
将OpenCV 中的“”数据类型替换为“float
”。Double 是 64 位,而 32 位 CPU 无法轻松处理它们,所以 float 给了我一些速度。OpenCV 经常使用 double。-mpfu=neon
在编译器选项中添加了“ ”。副作用是模拟器编译器不再工作的新问题,任何东西都只能在本机硬件上进行测试。用 90 个值查找表替换
sin()
和实现。cos()
加速是巨大的!这与 PC 有点相反,PC 的这种优化不会带来任何加速。有代码以度为单位工作,这个值被转换为sin()
和的弧度cos()
。这段代码也被删除了。但是查找表完成了这项工作。启用
"thumb optimizations"
。一些博客文章建议完全相反,但这是因为拇指通常会使事情变慢armv6
。armv7
没有任何问题,让事情变得更快更小。为了确保拇指优化和
-mfpu=neon
最好的工作并且不引入崩溃,我完全删除了 armv6 目标。我所有的代码都被编译成armv7
,这也被列为应用商店的要求。这意味着最小值iPhone
将是3GS
. 我认为放弃旧的是可以的。无论如何,较旧的 CPU 速度较慢,如果安装在旧设备上,CPU 密集型应用程序会提供糟糕的用户体验。我当然用
-O3 flag
"dead code"
我从 OpenCV 中删除。通常在优化 OpenCV 时,我会看到我的项目显然不需要的代码。例如,通常有一个额外"if()"
的检查像素大小是 8 位还是 32 位,我知道我只需要 8 位。这会删除一些代码,为优化器提供更好的机会来删除更多内容或替换为常量。代码也更适合缓存。
还有其他技巧和想法吗?对我来说,启用拇指并用查找替换三角函数是助推器,让我感到惊讶。也许您知道更多可以让应用程序飞起来的事情?