68

如果有任何优势......在文档中找不到任何结论性的东西。

显然 armv7 适用于较新版本的 iOS ......它更快吗?更小?更擅长 X?

4

5 回答 5

77

较旧的 iOS 设备(iPhone、iPhone 3G、第一代和第二代 iPod touch)的 CPU 仅支持 armv6 指令集。iPhone 3G S(以及 iPad 和第三代 iPod touch)有一个更新的处理器,它也支持 armv7 指令集。一般来说,armv7 在这些较新的处理器上速度更快,建议您至少在您的应用程序中包含 armv7 构建(在仅限 iPad 的应用程序中,您可能只为 armv7 构建)。

正如 Jasarien 所指出的,指令集之间最大的差异在于浮点运算。在 armv6 上,应用程序倾向于使用精简的 Thumb 指令集构建以生成更小的二进制文件,但 Thumb 浮点性能很糟糕。因此,如果您想要更快的浮点计算,您需要禁用 Thumb。在 armv7 上,Thumb-2 指令集不再有这个限制,因此 Apple 建议您几乎一直使用它进行编译。

您可以将 Thumb 构建设置设置为有条件的,以便对旧设备关闭,对新设备打开。为此,请转到您的 Xcode 构建设置并选择 Compile for Thumb 选项。转到屏幕左下角的菜单,然后选择 Add Build Setting Condition 选项。在新的构建设置条件下,架构选择ARMv6,关闭Thumb,再添加一个条件,架构选择ARMv7,开启Thumb。

根据Stephen Canon's answer here,armv6的硬件支持单精度和双精度浮点运算。我发现单精度算术在这个平台上的性能稍好一些,这可能是因为缓存中有更多操作。在 armv7 上,NEON SIMD 浮点单元仅适用于单精度运算,因此单精度和双精度运算之间的性能可能存在巨大差异。

关于这个主题可能感兴趣的其他问题包括:

于 2010-07-22T17:26:41.817 回答
54

较大的区别之一是 armv6 架构对双精度浮点运算具有硬件支持,而 armv7 仅对双精度浮点运算提供传统软件支持。

作为补偿,armv7 架构有一个“NEON”单元,它为单精度浮点运算提供了令人眼花缭乱的快速硬件支持。

如果您正在做任何涉及浮点运算的事情,无论您是以单精度还是双精度进行,这是您需要考虑的事情。如果您以双精度执行此操作,但不一定需要那么高的精度,则可以通过使用单精度来显着提高 armv7 设备的性能。

Apple 在今年的一次 WWDC 会议上介绍了 armv6 和 armv7 之间的许多差异,并介绍了 Accelerate 框架。iTunes 上仍应提供这些视频(截至 10 年 7 月)。

于 2010-07-22T16:17:06.927 回答
4

对我来说,ARMv7 的主要优点是:

  • 拇指 2

NEON 必须明确编码,您不能通过简单地重新编译来利用它,但如果您可以投入时间,它可以将多媒体/游戏操作加速 8 倍。但是,thumb-2 几乎可以免费减少代码大小几乎没有缺点(与 ARMv6 上的 thumb 相反,这使得浮点代码与 ARM 模式相比要慢得多)。当然,在 ARMv7 中添加另一个版本的可执行文件不会减少可执行文件的大小,但会减少内存、缓存等中的代码。

于 2010-07-22T21:11:13.793 回答
3

如果您希望您的应用程序在 iPad 和所有 iPhone/iPod toch 型号上运行,您必须为这两者进行编译。旧的 iOS 设备使用 arm6,新的 iOS 设备使用 arm7。

不编译其中一个或另一个的唯一原因是减小应用程序的大小,因为它只需要一个编译版本的代码。但是除非你有一个非常大的代码库,否则这个文件大小的差异将是非常微小的。

于 2010-07-22T16:09:35.670 回答
3

arm7 针对 iPod Touch(第 3 代)和 iPhone 3GS 及更新机型进行了更多优化。在为旧设备构建时,您需要使用“标准/arm6+arm7”。在实践中,我的应用程序并没有看到太大的性能差异。

于 2010-07-22T16:11:22.980 回答