【问题标题】:What are the advantages of armv7 over armv6 when compiling iPhone apps?在编译 iPhone 应用程序时,armv7 相对于 armv6 的优势是什么?
【发布时间】:2011-03-19 15:53:54
【问题描述】:

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

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

【问题讨论】:

  • 小修正:是armv6和armv7,不是arm6和arm7。注意v

标签: iphone objective-c ios xcode armv7


【解决方案1】:

较旧的 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 的回答 here,armv6 中的硬件支持单精度和双精度浮点运算。我发现单精度算术在这个平台上的性能稍好一些,这可能是因为缓存中有更多操作。在 armv7 上,NEON SIMD 浮点 unit 仅适用于单精度运算,因此单精度和双精度运算的性能可能存在巨大差异。

可能对此主题感兴趣的其他问题包括:

【讨论】:

  • 从 Xcode 4.3 开始,作为项目迁移的一部分,Apple 无条件设置 GCC_THUMB_SUPPORT = NO。任何意见?对我来说似乎与直觉相反,(当然/不幸的是)Apple对此一无所知。他们的文档仍然说将拇指用于 armv7。
  • @smparkes - 这可能是项目迁移中的一个小故障,因为指令集不应该改变。为 ARMv7 生成 Thumb-2 指令仍然应该是有利的。在最坏的情况下,在这两种情况下分析您的应用程序(内存和性能)以查看设置如何改变事物。每次我都尝试过这个,为 Thumb 构建有助于 ARMv7。
  • 谢谢,布拉德。我想我会保留我当前的覆盖并拒绝 Xcode。现在要修复 4.3 损坏的其他东西...
  • FWIW,当 Xcode 想要进行此更改时显示的文本是它想要在 armv6 上使用 ARM for THUMB。但它添加的设置似乎并不以架构为条件......
【解决方案2】:

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

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

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

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

【讨论】:

  • 实际上,根据 Stephen Canon 的说法,在 armv6 中,单精度和双精度浮点运算都是在硬件中执行的:stackoverflow.com/questions/1622729/…
  • 确实如此。我错过了。
【解决方案3】:

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

  • thumb-2
  • 霓虹灯

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

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

    • 那么在构建下拉菜单中主动架构的意义是什么?
    • 我相信他们在最新的 SDK 中解决了这个问题。无论如何,它通常会被您的构建设置覆盖。
    【解决方案5】:

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

    【讨论】:

      猜你喜欢
      • 2012-03-24
      • 2019-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-17
      • 2013-12-20
      相关资源
      最近更新 更多