编译iPhone应用程序时,armv7优于armv6的优点是什么?


67

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

显然armv7适用于新版本的iOS ...速度更快吗?较小?X更好?


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

Answers:


53

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

作为补偿,armv7体系结构具有一个“ NEON”单元,该单元为单精度浮点算术提供了惊人的快速硬件支持。

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

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


5
:其实,依泉佳能,单,双精度浮点运算在硬件ARMv6中进行stackoverflow.com/questions/1622729/...
布拉德·拉尔森

确实如此。我错过了。
Jasarien

77

较旧的iOS设备(iPhone,iPhone 3G,第一代和第二代iPod touch)具有仅支持armv6指令集的CPU。iPhone 3GS(以及iPad和第三代iPod touch)具有更新的处理器,该处理器还支持armv7指令集。通常,在这些较新的处理器上,armv7速度更快,建议您至少在以后的应用程序中包括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开始,作为项目迁移的一部分,Apple会无条件设置GCC_THUMB_SUPPORT = NO。任何意见?似乎与我的直觉相反,(当然/不幸的是)苹果对此一无所获。他们的文档仍然说将thumb用于armv7。
smparkes 2012年

@smparkes-这可能是项目迁移中的一个小故障,因为指令集不应该更改。为ARMv7生成Thumb-2指令仍然应该是有利的。最坏的情况是,在这两种情况下都对应用程序(内存和性能)进行概要分析,以查看设置如何更改内容。每次我尝试过此操作时,为Thumb进行构建都会对ARMv7有所帮助。
布拉德·拉尔森

谢谢,布拉德 我想我会保留当前的覆盖并拒绝Xcode。现在要解决其他问题4.3

FWIW,Xcode想要进行此更改时显示的文本是,它希望对ARMv6上的THUMB使用ARM。但是它添加的设置似乎并不取决于体系结构...
smparkes 2012年

4

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

  • 拇指2

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


3

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

不编译的唯一原因是减小应用程序的大小,因为它仅需要代码的一个编译版本。但是,除非您有一个非常大的代码库,否则该文件大小的差异将很小。


那么,活动菜单在下拉菜单中对建筑的意义是什么?
M. Ryan

我相信他们在最新的SDK中将其删除了。无论如何,通常都会用您的构建设置来覆盖它。
Alex Wayne'7

3

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.