>将OpenCV中的“double”数据类型替换为“float”.双倍是64位,32位cpu不能轻易处理,所以浮动给了我一些速度. OpenCV经常使用双倍.
>为编译器选项添加了“-mpfu = neon”.副作用是模拟器编译器不再工作的新问题,任何东西只能在本机硬件上进行测试.
>用90个值查找表替换了sin()和cos()实现.加速是巨大的!这与PC有些相反,这种优化没有给出任何加速.有代码以度为单位,该值被转换为sin()和cos()的弧度.此代码也被删除.但是查找表做了这个工作.
>启用“拇指优化”.一些博客帖子推荐的恰恰相反,但这是因为拇指在armv6上通常较慢. armv7没有任何问题,使事情变得越来越小.
>确保拇指优化和-mfpu =霓虹灯最好的工作,不要引入崩溃,我完全删除了armv6目标.我的所有代码都被编译为armv7,这也被列为应用商店中的要求.这意味着最小的iPhone将是3GS.我认为放弃旧的可以.无论如何,较老的cpu具有较慢的cpu,cpu密集型应用程序在旧设备上安装时会提供不良的用户体验.
>当然我用-O3标志
>我从OpenCV中删除了“死码”.通常在优化OpenCV时,我会看到我的项目显然不需要的代码.例如,通常有一个额外的“if()”来检查像素大小是8位或32位,我知道我只需要8位.这会删除一些代码,提供优化器更好的机会,以更多的东西或替换常量.代码更适合缓存.
任何其他的技巧和想法?对我来说,拇指和替换三角学与查找是提升制造者,让我惊喜.也许你知道要做的更多的事情,使应用程序飞?
解决方法
我也会一一解释你的观点:
1)这不是因为cpu,是因为截至armv7时代,只有32位浮点运算才会在浮点处理器硬件中计算(因为苹果取代了硬件). 64位将以软件计算.作为交换,32位操作快得多.
2)NEON是新的浮点处理器指令集的名称
3)是的,这是一个众所周知的方法.另一种选择是使用我上面提到的苹果框架.它提供了并行计算4个值的sin和cos函数.这些算法在组装和NEON中进行了微调,因此在使用最少电池时可提供最佳性能.
4)新的armv7实现的拇指没有armv6的缺点.禁用建议仅适用于v6.
5)是的,考虑到80%的用户现在在iOS 5.0或以上(armv6设备在4.2.1结束支持),这在大多数情况下是完全可以接受的.
6)当您建立发布模式时,会自动发生这种情况.
7)是的,这不会像上述方法一样大.
我的建议是检查加速.这样,您可以确保利用浮点处理器的全部功能.