Performance ARM64有性能优势吗

Performance ARM64有性能优势吗,performance,arm,64-bit,arm64,Performance,Arm,64 Bit,Arm64,最近,64位ARM手机开始出现。但是构建64位应用程序有什么实际优势吗?特别考虑的是对于增加的虚拟地址空间1没有太多用途,但由于指针大小的增加会浪费一些空间的应用程序 那么,除了大地址之外,ARM64还有其他优势吗?大地址实际上可以保证构建这样的64位应用程序 注意:我已经看到了,但它只提到了x86-64,它除了扩展虚拟地址空间之外还有其他改进。我还记得,这种情况确实是针对x86和其他一些64位平台(如Sparc)的,通常的方法是只编译内核和实际使用大量内存的应用程序(64位,其他所有内存都是3

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

那么,除了大地址之外,ARM64还有其他优势吗?大地址实际上可以保证构建这样的64位应用程序

注意:我已经看到了,但它只提到了x86-64,它除了扩展虚拟地址空间之外还有其他改进。我还记得,这种情况确实是针对x86和其他一些64位平台(如Sparc)的,通常的方法是只编译内核和实际使用大量内存的应用程序(64位,其他所有内存都是32位)



该应用程序是多平台的,它仍然需要为只有48MiB内存的设备构建和运行。确实有一些从外部存储器读取的大数据,但一次所需的数据永远不会超过几兆字节。

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

AArch64中的性能正增量
  • 32个通用寄存器为编译器提供了更多的回旋空间
  • I/D缓存同步机制可从用户模式访问(无需系统调用)
  • 加载/存储对指令可以用一条指令加载128位数据,并且仍然保持RISC的样子
  • 删除近乎通用的条件执行使更多的无序成为可能
  • 霓虹灯寄存器布局的变化(D0仍然是Q0的下半部分,但D1现在是Q1的下半部分,而不是Q0的上半部分)使得更多的无序化成为可能
  • 64位指针使指针标记成为可能
  • CSEL支持各种疯狂的优化
AArch64中的性能负变化
  • 更多寄存器也可能意味着堆栈上的压力更高
  • 更大的指针意味着更大的内存占用
  • 移除接近通用的条件执行可能会对分支预测器造成更大的压力
  • 删除load/store multiple意味着函数进入/退出需要更多指令
ARMv8-A中与性能相关的更改
  • Load-Aquire/Store-Release语义消除了对基本同步操作的显式内存障碍的需要

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

有一些真正的AArch64与AArch32性能数字。与x86-64一样,AArch64还附带了其他改进,如将寄存器数量增加一倍,因此,与x86-32和x86-64的比较似乎是合理的。为什么霓虹灯布局的变化使更多的订购成为可能?@Nikolai:因为D寄存器之间的订购要求不再需要与Q寄存器之间的订购要求分开考虑。在AArch32中,Dx和Dx+1上的两个不相关操作可能会被迫按程序顺序进行,如果它们共享相同的基础Q寄存器。我不确定您对CSEL指令的热情。这只是旧的条件指令的一小部分。ARM方面真的觉得只需付出最小的努力,就可以至少给我们一个避免某些分支的小方法。@BitBank:热情是因为与一般用途条件不同,CSEL可以在不混乱无序的情况下进行操作。指针标记也可以在32位中进行,尽管标记的位比64位少