ARM NEON上的最佳指令吞吐量

时间:2014-02-24 17:08:49

标签: neon

在ARM-NEON中编码的计算绑定算法的最佳情况指令吞吐量是什么?

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

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

2 个答案:

答案 0 :(得分:1)

正如nobar所说,这将取决于微架构(三星/ Apple / Qualcomm)等。但基本(库存A8实施)NEON是64位架构,有两个(或一个) 64位操作数给出64位结果。因此,如果没有任何流水线(数据依赖性)停顿或I / O停顿,整数流水线可以以SIMD方式每个周期执行8位,8位操作。因此,对于ALU / Mult操作单一问题的库存臂处理器的最佳情况可能是“8”。

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

A8架构的精彩概述是通过TI's A8 NEON Architecture页面。

特别是关于处理器之间的差异,许多ARM实施者除了极其强大的客户之外不会知道他们的架构细节,因此注意到差异是相当困难的,但正如Stephen Canon在下面所述,更新的高端A15-ish对于某些类型的指令,它们可能会使性能提高一倍,而对于某些类型的指令,低功耗指令可能会减半。

答案 1 :(得分:1)

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位)