当编译iPhone应用程序时,使用armv7相对于armv6有什么优势?

69
如果有任何优势的话...我在文档中找不到任何确凿的证据。
显然,armv7适用于较新版本的iOS...它是否更快?更小?在X方面表现更好?

2
小修正:应该是 armv6 和 armv7,而不是 arm6 和 arm7。请注意其中的 v - lucius
5个回答

77

老款 iOS 设备(iPhone、iPhone 3G、第一、二代 iPod touch)只支持 armv6 指令集。而 iPhone 3G S(以及 iPad 和第三代 iPod touch)则拥有更新的处理器,同时支持 armv7 指令集。通常情况下,在这些新型处理器上,armv7 比 armv6 更快,建议您至少在应用程序中包含一个 armv7 构建版本(对于仅面向 iPad 的应用程序,您可能只需构建为 armv7)。

正如 Jasarien 指出的那样,指令集之间最大的区别在于浮点运算。在 armv6 上,应用程序往往使用缩小的 Thumb 指令集来生成较小的二进制文件,但是 Thumb 浮点性能非常差。因此,如果您想要更快的浮点计算,就需要禁用 Thumb。在 armv7 上,Thumb-2 指令集不再有这个限制,因此 Apple 建议您几乎始终使用它编译。

您可以将 Thumb 构建设置作成条件性的,以便在旧设备上关闭,而在新设备上打开。要做到这一点,请转到 Xcode 构建设置并选择“针对 Thumb 进行编译”选项。转到屏幕左下角的菜单并选择“添加构建设置条件”选项。在新的构建设置条件中,选择架构为 ARMv6,关闭 Thumb,再添加另一个条件,选择架构为 ARMv7,启用 Thumb。

根据 Stephen Canon 的答案(链接地址),armv6 硬件支持单精度和双精度浮点运算。我发现,在这个平台上,单精度算术表现略好,可能是因为更多操作适合缓存。在 armv7 上,NEON SIMD 浮点单元仅适用于单精度运算,因此单精度和双精度运算之间的性能差异可能会很大。

其他可能与此主题相关的问题包括:


从Xcode 4.3开始,作为项目迁移的一部分,苹果公司无条件地设置GCC_THUMB_SUPPORT = NO。有什么评论吗?对我来说似乎是违反直觉的,而且(当然/不幸的是)苹果方面没有任何说明。他们的文档仍然建议在armv7上使用thumb。 - smparkes
@smparkes - 这可能是项目迁移中的故障,因为指令集不应该改变。生成Thumb-2指令对于ARMv7仍然是有利的。最坏的情况下,您可以在两种条件下对应用程序进行配置文件(内存和性能)以查看设置如何改变事物。每次我尝试这样做时,在ARMv7上构建Thumb都有所帮助。 - Brad Larson
谢谢Brad。我想我会保留当前的覆盖并拒绝Xcode的覆盖。现在开始解决其他4.3版本破坏的问题…… - smparkes
就此而言,当Xcode想要进行此更改时显示的文本是它想要在armv6上使用ARM来进行THUMB。但它添加的设置似乎并不受架构的限制... - smparkes

55

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

为了补偿,armv7架构拥有一个“NEON”单元,提供了惊人的快速单精度浮点运算的硬件支持。

如果您正在进行任何涉及浮点运算的工作,无论是使用单精度还是双精度,都需要考虑这一点。如果您正在使用双精度,但并不一定需要那么高的精度,那么在armv7设备上使用单精度,可能会获得显着的性能提升。

苹果公司在今年的WWDC会议上涵盖了armv6和armv7之间的许多差异以及Accelerate框架的介绍。这些视频应该仍然可以在iTunes上找到(截至2010年7月)。


5
根据Stephen Canon的说法,armv6中单精度浮点和双精度浮点操作都是在硬件上执行的:https://dev59.com/RXI-5IYBdhLWcg3w487k#1622786 - Brad Larson
没错,我漏掉了那个。 - Jasarien

4
对我来说,ARMv7的主要优点是:
  • Thumb-2
  • NEON
NEON必须进行显式编码,仅重新编译无法发挥其优势,但如果你能投入时间,它可以将多媒体/游戏操作加速8倍。然而,Thumb-2基本上是一个减小代码大小的免费选项,几乎没有缺点(与ARMv6上的Thumb相反,后者使浮点代码比ARM模式慢得多)。当然,在ARMv7中添加另一个可执行文件版本不会减少可执行文件大小,但会减少内存、缓存等中的代码量。

3

如果您希望您的应用程序在iPad和所有iPhone / iPod toch模型上运行,则必须同时进行编译。旧的iOS设备使用arm6,而新的设备使用arm7。

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


那么,在构建下拉菜单时,活动架构的意义是什么? - M. Ryan
我相信他们在最新的SDK中已经移除了它。不过通常情况下,它会被你的构建设置所覆盖。 - Alex Wayne

3

ARM7更适用于iPod Touch(第三代)和iPhone 3GS及更新的设备。在为较旧的设备构建时,您需要使用“Standard/arm6+arm7”。实际上,在我的应用中,我没有看到太大的性能差异。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接