performance - ARM64 有性能优势吗

标签 performance arm 64-bit arm64

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

那么 ARM64 是否有任何其他优势,而不是实际保证构建此类 64 位应用程序的更大地址?

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

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

最佳答案

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

AArch64 中的性能提升

  • 32 个通用寄存器为编译器提供了更多的回旋余地。
  • 可从用户模式访问的 I/D 缓存同步机制(不需要系统调用)。
  • 加载/存储对指令可以用一条指令加载 128 位数据,并且仍然保持类似 RISC 的状态。
  • 去除近乎通用的条件执行使更多的无序成为可能。
  • NEON 寄存器布局的变化(D0 仍然是 Q0 的下半部分,但 D1 现在是 Q1 的下半部分而不是 Q0 的上半部分)使得更多的乱序成为可能。
  • 64 位指针使指针标记成为可能。
  • CSEL 支持各种疯狂的优化。

  • AArch64 中的性能负面变化
  • 更多的寄存器也可能意味着更高的堆栈压力。
  • 更大的指针意味着更大的内存占用。
  • 移除近乎通用的条件执行可能会对分支预测器造成更大的压力。
  • 移除 load/store-multiple 意味着函数进入/退出需要更多指令。

  • ARMv8-A 中与性能相关的更改
  • Load-Aquire/Store-Release 语义消除了基本同步操作对显式内存屏障的需要。

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

    关于performance - ARM64 有性能优势吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26840776/

    相关文章:

    c - 如何在 arm v7 中导致数据中止和预取中止

    c++ - 如何让 crosstool-ng C++ 编译器工作

    c - Cortex M3 的引导加载程序

    Python:如何在 Windows 7 x64 上安装 mysqldb?

    c++ - GET GET GET GET GET DO - 过度设计?效率与一致性

    c++ - 您最喜欢 C/C++ 性能分析器/分析器的哪些功能?

    c# - ToList 性能较慢 vs foreach 性能较慢

    ios - 在 64 位应用程序中使用 32 位库

    xcode - iOS8,Xcode6如何以编程方式获取内存使用情况,如Xcode所示

    performance - 内置追加与 bytes.Buffer 写入