ARM64是否具有性能优势

时间:2014-11-10 09:44:29

标签: performance arm 64-bit arm64

最近,64位ARM手机开始出现。但是构建64位应用程序有什么实际优势吗?特别考虑对增加的虚拟地址空间¹没有多大用处的应用程序,但由于指针大小的增加会浪费一些空间。

ARM64还有其他优势,而不是实际上需要构建64bit应用程序的更大地址吗?

注意:我见过64-bit Performance Advantages,但它只提到了x86-64,除了扩展虚拟地址空间之外还有其他改进。我还记得这种情况确实特定于x86,而在64位像Sparc一样的其他平台上,通常的方法是只编译内核和实际使用大量内存的应用程序作为64位而其他所有内容都是32位。


¹该应用程序是多平台的,它仍然需要在只有48MiB内存的设备上构建并运行。它是否有一些从外部存储中读取的大数据,但它一次不需要超过几兆字节。

1 个答案:

答案 0 :(得分:8)

我不确定是否可以给出一般性回应,但我可以提供一些差异的例子。当然,在ARM体系结构的第8版中添加了其他差异,无论目标指令集如何都适用。

AArch64

中的性能正面添加
  • 32通用寄存器为编译器提供了更多的摆动空间。
  • 可从用户模式访问的I / D缓存同步机制(无需系统调用)。
  • 加载/存储对指令可以用一条指令加载128位数据,并且仍然像RISC一样。
  • 删除近乎通用的条件执行会使更多的无序排序成为可能。
  • NEON寄存器的布局变化(D0仍然是Q0的下半部分,但D1现在是Q1的下半部分而不是Q0的上半部分)使得更多的无序订单成为可能。
  • 64位指针使指针标记成为可能。
  • CSEL可以进行各种疯狂的优化。

AArch64中的性能负面变化

  • 更多寄存器可能也意味着堆叠压力更大。
  • 更大的指针意味着更大的内存占用。
  • 删除近乎通用的条件执行可能会对分支预测器造成更大的压力。
  • 删除加载/存储多个意味着函数进入/退出所需的更多指令。

ARMv8-A中与性能相关的更改

  • Load-Aquire / Store-Release语义消除了对基本同步操作的显式内存障碍的需求。

我可能忘了很多东西,但这些是一些更明显的变化。