gpt4 book ai didi

iphone - IOS/iPad/iPhone 的最大速度

转载 作者:技术小花猫 更新时间:2023-10-29 11:01:59 24 4
gpt4 key购买 nike

我使用 OpenCViOS 开发了计算密集型应用程序。当然很慢。但它比我的 PC 原型(prototype)慢了大约 200 倍。所以我正在优化它。从最初的 15 秒开始,我就能获得 0.4 秒的速度。我想知道我是否找到了所有东西以及其他人可能想要分享的东西。我做了什么:

  1. 将 OpenCV 中的“double”数据类型替换为“float”。 Double 是 64 位的,32 位的 CPU 不能轻易处理它们,所以 float 给了我一些速度。 OpenCV 经常使用 double。

  2. 将“-mpfu=neon”添加到编译器选项。副作用是模拟器编译器不再工作的新问题,任何东西都只能在 native 硬件上测试。

  3. 用 90 个值查找表替换了 sin()cos() 实现。加速是巨大的!这与 PC 有点相反,在 PC 中,此类优化不会带来任何加速。有以度为单位的代码,此值已转换为 sin()cos() 的弧度。此代码也已删除。但是查找表完成了这项工作。

  4. 启用“缩略图优化”。一些博客文章的建议恰恰相反,但这是因为拇指通常会使 armv6 上的速度变慢。 armv7 没有任何问题,而且速度更快,体积更小。

  5. 为了确保 thumb 优化和 -mfpu=neon 最好地工作并且不会引入崩溃,我完全删除了 armv6 目标。我所有的代码都编译为 armv7,这也在应用商店中列为要求。这意味着最低 iPhone 将是 3GS。我认为放弃旧的是可以的。无论如何,较旧的 CPU 速度较慢,如果安装在旧设备上,CPU 密集型应用会提供糟糕的用户体验。

  6. 我当然用-O3标志

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

还有其他技巧和想法吗?对我来说,启用 thumb 并用查找替换三角函数是插入因素,让我感到惊讶。也许您还知道可以做些什么来让应用飞速发展?

最佳答案

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

我也会一一解决你的问题:

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

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

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

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

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

6) 当您在 Release模式下构建时,这会自动发生。

7) 是的,虽然这不会像上述方法那样产生很大的影响。

我的建议是查看 Accelerate。这样您就可以确保充分利用浮点处理器的全部功能。

关于iphone - IOS/iPad/iPhone 的最大速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11219240/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com