关于C#:编译iPhone应用程序时armv7优于armv6有什么优势?

What are the advantages of armv7 over armv6 when compiling iPhone apps?

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

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


较旧的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选项。转到屏幕左下角的菜单,然后选择添加构建设置条件选项。在新的构建设置条件中,为架构选择ARMv6,为其关闭Thumb,添加另一个条件,为其架构选择ARMv7,并为其启用Thumb。

根据Stephen Canon的回答,armv6中的硬件支持单精度和双精度浮点运算。我发现单精度算法在这个平台上表现稍好一些,可能是由于更多的操作适合缓存。在armv7上,NEON SIMD浮点
unit仅适用于单精度操作,因此单精度和双精度操作之间的性能差异很大。

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

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


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

为了补偿,armv7架构具有"NEON"单元,为单精度浮点运算提供了快速的硬件支持。

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

Apple涵盖了armv6和armv7之间的许多差异,以及今年WWDC会议中对Accelerate框架的介绍。这些视频仍应在iTunes上提供(截至2010年7月)。


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

  • 拇指2

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


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


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

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


看看这个链接,它对优势,差异等有很好的描述。

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