在编译iPhone应用程序时,armv7比armv6有什么优势?

如果有任何优势…在文档中找不到任何确凿的结果。

显然armv7是iOS的新版本…是否更快? 小吗? 在X更好?

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

为了弥补,armv7架构有一个“NEON”单元,为单精度浮点运算提供了非常快的硬件支持。

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

苹果在今年的WWDC会议上介绍了armv6和armv7之间的许多差异,并介绍了Accelerate框架。 video仍然可以在iTunes上使用(截至10月7日)。

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

正如Jasarien所指出的那样,指令集之间的最大区别在于浮点运算。 在armv6上,应用程序倾向于使用缩小的Thumb指令集来生成较小的二进制文件,但是Thumb浮点性能非常糟糕。 因此,你需要禁用Thumb,你想要更快的浮点计算。 在armv7上,Thumb-2指令集不再有这个限制,所以Applebuild议几乎所有的时候都使用它进行编译。

您可以使Thumb构build设置有条件,以便旧设备和新设备closures。 为此,请转到您的Xcode构build设置,然后select“编译为Thumb”选项。 转到屏幕左下angular的菜单,然后select添加生成设置条件选项。 在新的版本设置条件中,为架构selectARMv6,closuresThumb,添加另一个条件,为其架构selectARMv7,并为其启用Thumb。

根据Stephen Canon的回答,armv6中的硬件支持单精度浮点运算和双精度浮点运算。 我发现在这个平台上,单精度算术性能稍微好一点,这可能是由于更多的操作符合caching。 在armv7上,NEON SIMD浮点单元只能用于单精度运算,所以单精度运算和双精度运算在性能上会有很大差异。

其他可能对这个问题感兴趣的问题包括:

  • “编译一个armv7唯一的架构有什么好处/后果?”
  • “如何将armv6 / armv7架构更改为armv6会影响我的iPad应用程序?是否会出现性能/稳定性损失?
  • “iPhone检测处理器型号/ NEON支持”
  • “ARMv7 + NEON的快速正弦/余弦:寻找testing人员…”

如果您希望您的应用在iPad和所有iPhone / iPod教鞭机型上运行,则必须进行编译。 较老的iOS设备使用arm6,新的使用arm7。

不编译一个或另一个的唯一原因是减less应用程序的大小,因为它只需要一个编译版本的代码。 但是,除非你有一个严重的代码库,这个文件大小的差异将是相当勉强的。

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

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

  • 拇指2

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

看看这个Link,它对于优点,差异等有很好的说明。

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dht0001a/CHDEFAGB.html