IOS/iPad/iPhone的最高速度

Tõn*_*uel 10 iphone xcode opencv ios

我使用OpenCVfor 计算密集型应用程序iOS.当然很慢.但它比我的PC原型慢了200倍.所以我正在优化它.从最初的15秒开始,我的速度达到了0.4秒.我想知道我是否找到了所有的东西以及其他人想要分享的内容.我做了什么:

  1. doubleOpenCV中的" "数据类型替换为" float".Double是64bit和32bit CPU无法轻松处理它们,所以float给了我一些速度.OpenCV经常使用double.

  2. -mpfu=neon在编译器选项中添加了" ".副作用是模拟器编译器不再工作的新问题,任何东西都只能在本机硬件上进行测试.

  3. 用90个值查找表替换sin()cos()实现.加速是巨大的!这与PC有些相反,而这种优化并没有给出任何加速.有代码工作在度,这个值转换为弧度为sin()cos().此代码也已删除.但查找表完成了这项工作.

  4. 启用"thumb optimizations".一些博客文章建议完全相反,但这是因为拇指使事情通常较慢armv6.armv7没有任何问题,使事情变得更快更小.

  5. 为了确保拇指优化并充分-mfpu=neon发挥作用并且不引入崩溃,我完全删除了armv6目标.我的所有代码都编译到了armv7,这也在app store中列为需求.这意味着最低iPhone3GS.我认为放弃旧款可以.无论如何,较旧的CPU具有较慢的CPU,如果安装在旧设备上,CPU密集型应用程序会提供糟糕的用户体验

  6. 我当然用 -O3 flag

  7. "dead code"从OpenCV中删除了.通常在优化OpenCV时,我会看到我的项目显然不需要的代码.例如,通常有一个额外"if()"的检查像素大小为8位或32位,我知道我只需要8位.这将删除一些代码,为优化器提供更好的机会来删除更多内容或替换为常量.代码也更适合缓存.

还有其他任何技巧和想法吗?对于我来说,启用拇指和用查找替换三角函数是提升制造商,让我感到惊讶.也许你知道一些让应用程序飞起来的事情吗?

bor*_*den 13

如果您正在进行大量的浮点计算,那么使用Apple的Accelerate框架将大大受益.它旨在使用浮点硬件并行地对向量进行计算.

我还将逐一解决你的观点:

1)这不是因为CPU,而是因为在armv7时代只有32位浮点运算将在浮点处理器硬件中计算(因为苹果取代了硬件).64位的将用软件计算.作为交换,32位操作变得更快.

2)NEON是新浮点处理器指令集的名称

3)是的,这是众所周知的方法.另一种方法是使用我上面提到的Apple框架.它提供了sin和cos函数,可以并行计算4个值.这些算法在组装和NEON方面进行了微调,因此它们在使用最少的电池时可以提供最大的性能.

4)新的armv7拇指实现没有armv6的缺点.禁用建议仅适用于v6.

5)是的,考虑到80%的用户现在使用iOS 5.0或更高版本(armv6设备在4.2.1结束支持),这在大多数情况下是完全可以接受的.

6)当您在发布模式下构建时,会自动发生这种情况.

7)是的,但这并没有上述方法那么大的效果.

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