【问题标题】:Best-case instruction throughput on ARM NEONARM NEON 上的最佳指令吞吐量
【发布时间】:2014-02-24 17:08:49
【问题描述】:

对于用 ARM-NEON 编码的计算密集型算法,最佳情况下的指令吞吐量是多少?

例如,如果我有一个基于大量 8 位->8 位操作的简单算法,那么在以下情况下可以维持的最快执行速度(以每个周期 8 位操作衡量)是多少?我们假设所有内存 I/O 都完全隐藏延迟。

我最初对 Cortex-A8 感兴趣,但如果您也有不同处理器的数据,请注意差异。

【问题讨论】:

  • ARM Cortex -A 系列程序员指南:“NEON 架构也没有指定指令时序,并且可能需要不同数量的周期才能在不同的处理器上执行相同的指令。”
  • Cortex-A8 TRM --Dual issue for Advanced SIMD instructions:“NEON 引擎的双重问题能力有限”。

标签: neon


【解决方案1】:

正如 nobar 所提到的,这将取决于微架构(三星/苹果/高通)等。但是基本上(股票 A8 实现)NEON 是一个 64 位架构,有两个(或一个) 64 位操作数给出 64 位结果。因此,在没有任何流水线(数据相关性)停顿或 I/O 停顿的情况下,整数流水线可以以 SIMD 方式在每个周期执行 8、8 位操作。因此,对于 ALU/Mult 操作来说单一问题的库存 arm 处理器的最佳情况可能是“8”。

您可以查看ARM architecture reference,了解各种指令在现有 ARM A8 处理器上需要多长时间。如果您不熟悉命名法,“D”寄存器是 64 位,“Q”是双宽 128 位寄存器,指令可以将寄存器中的数据视为 8,16 或 32 位格式。

通过TI's A8 NEON Architecture 页面可以很好地了解库存 A8 架构。

特别是关于处理器之间的差异,许多 ARM 实施者并没有公开他们的架构细节,除了非常强大的客户,因此注意到差异相当困难,但正如斯蒂芬佳能在下面指出的那样,更新的高端 A15-ish对于某些类型的指令,一些可能会使性能翻倍,而对于某些类型的指令,功耗较低的可能会减半。

【讨论】:

  • "...NEON 是具有 64 位操作数的 64 位架构...",但您也注意到:NEON 具有 128 位寄存器。我错过了什么?
  • 指令可以寻址双宽寄存器,拆分它们,然后将它们连续填充到管道中。因此,在库存 ARM 上,您会看到对“D”寄存器的操作通常需要 1 个周期,而“Q”寄存器需要 2 个周期。我从 processors.wiki.ti.com/index.php/Cortex-A8_Neon_Architecture 学到了大部分这些东西
  • 更高端的处理器(Cortex-A15、Qualcomm Krait、Apple A6)具有 128b 宽的 NEON 实现;相反,非常低功耗的设计(例如 Cortex-A5)以 32b 块处理一些 NEON 指令。说“NEON 是 64b 架构”是没有意义的。 NEON 只是一个指令集,可以通过多种不同的方式实现。
  • 是的,斯蒂芬说的是真的。我写的所有内容仅适用于库存 A8,这几乎是您在网上可以找到的所有周期计数和基本实施信息。
  • 如果我解释正确,您链接的 Cortex-A8 Instruction Cycle Timing 参考中列出的一些操作显示在单个周期中执行 128 位操作。这不会转化为每个周期 16 8 位操作的吞吐量吗?
【解决方案2】:

Cortex-A8 的 NEON 单元上的大多数整数运算一次执行 128 位,而不是 64 位。您可以在 TRM 中查看吞吐量,可在此处找到:http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0344k/index.html 一些值得注意的例外包括乘法、按寄存器值移位和位选择。但仔细想想,如果没有 128 位整数运算,那么使用这些指令的理由就会少很多,因为 Cortex-A8 已经可以并行执行两个 32 位标量整数运算。

遗憾的是,Cortex-A8 和 A9 是最后一个包含执行性能公开文档的 ARM 内核。我没有做过大量的测试,但我认为 A15 可以并行执行 128 位和 64 位 NEON 操作(不确定有什么限制)。从我听到的消息来看——这完全未经测试——Cortex-A5 和 A7 都有 64 位 NEON 执行。 A5 进一步受限于仅具有 32 位 NEON 加载/存储吞吐量(而 A8 实际上具有 128 位,而 A9 和 A7 具有 64 位)

【讨论】:

    猜你喜欢
    • 2019-08-27
    • 2015-11-22
    • 1970-01-01
    • 2017-03-20
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    • 2012-04-25
    • 2016-02-19
    相关资源
    最近更新 更多