【发布时间】:2014-05-09 12:25:03
【问题描述】:
有很多用 C 语言编写的库,其中包含一些函数的汇编(用于 ARMv7)优化版本,这些函数显着提高了性能(其中一些使用了 NEON)。在这种情况下,我知道我应该更好地使用它们的优化版本。
现在我有一个用 C 编写的库,其中有一些用 C 和 ARMv4、ARMv5E 程序集编写的函数。使用默认编译配置,它不会尝试在 iOS 设备上使用此汇编代码。我想知道我是否应该费心尝试启用它。
是否可以在带有 ARMv7 和 ARMv8-A (arm64) 指令集的 iOS 设备上使用 ARMv4、ARMv5E、ARMv6 指令集的汇编源代码?
如果是,与用 C 编写并为 ARMv7 和 ARMv8-A (arm64) 编译的类似代码相比,它是否能提高性能?
还有一个问题:是否需要 ARMv8-A (arm64) 优化的 NEON 汇编代码?这种兼容性一般是如何工作的?这里我的意思是只有 AArch64 而不是 AArch32。对于这个问题,假设我必须为 AArch64 构建二进制文件,它应该是真正的 64 位并且不包含任何 32 位代码。
如果有人能提供兼容性表或指向该表的链接,我将不胜感激。
编辑:我根据 Notlikethat 的建议稍微编辑了我的问题。
EDIT2:我想在 Notlikethat 回答之后提供一些细节。也许对阅读此问题的人有用。
-
现在我有一个用 C 编写的库,其中有一些用 C 和 ARMv4、ARMv5E 程序集编写的函数。 [...] 我想知道我是否应该费心尝试启用它。 - 用汇编编写的函数纯粹是为了性能,不会做任何用 C 语言做不到的事情。
是否需要 ARMv8-A (arm64) 优化的 NEON 汇编代码? - 如果一个人有针对 ARMv7 的 NEON 优化代码,他/她是否需要为 ARMv8-A 采用/更改它?
【问题讨论】:
-
我的回答大致是“这取决于;这取决于;在什么意义上?”这表明问题需要更加具体。当您说“ARMv8-A (arm64)”时,您是只考虑 AArch64 状态(这是一个全新的架构)还是 AArch32 状态(几乎完全向后兼容 v7) ?
-
@Notlikethat - 您能否在单独的答案中描述“这取决于;这取决于;在什么意义上?”。我非常感谢您提供如此详细的答案,而且我认为不仅是我。
-
@dwelch - 我曾尝试在 infocenter.arm.com 上搜索兼容性表,但找不到。您能否提供直接链接或告诉我应该在哪里看?
-
获取每个处理器的文档并将它们并排比较。必须自己做一些工作,不能指望它交给你。如果您已经了解 armv8 之前的架构,那么您所要做的就是查看 armv8 文档以了解发生了什么变化。或者至少将你拥有的 asm 代码与你想要运行它的架构进行比较,或者更简单的是尝试组装它,让工具告诉你哪里出了问题。到目前为止,您本可以多次这样做,到目前为止您尝试过什么?
-
好的,我期待有该领域经验的人提供快速的小答案或详细的答案(这对阅读此问题的任何人都非常有用)或根本没有答案(如果您不知道或不想分享)。像“自己做”这样的答案帮助不大。如果我现在有专业知识可以自己做(在合理的时间内),我不会发布这个问题。