从IOS / iPad / iPhone的最大速度

我使用OpenCV for iOS完成计算密集型应用程序.当然这很慢.但它比我的PC原型慢了200倍.所以我正在优化它.从最初的15秒,我能够获得0.4秒的速度.我想知道我是否找到了所有的东西以及别人想要分享的东西.我做了什么:

>将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位.这会删除一些代码,提供优化器更好的机会,以更多的东西或替换常量.代码更适合缓存.

任何其他的技巧和想法?对我来说,拇指和替换三角学与查找是提升制造者,让我惊喜.也许你知道要做的更多的事情,使应用程序飞?

解决方法

如果您正在进行大量的浮点计算,那么将大大有助于您使用Apple的 Accelerate框架.它被设计为使用浮点硬件对并行的向量进行计算.

我也会一一解释你的观点:

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)是的,这不会像上述方法一样大.

我的建议是检查加速.这样,您可以确保利用浮点处理器的全部功能.

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...