arm64 程序集:LDP 与 LD4 执行时间

fcd*_*cdt 6 performance assembly arm simd arm64

假设我想从连续的内存位置加载四个连续的 aarch64 向量寄存器。一种方法是

ldp   q0, q1, [x0]
ldp   q2, q3, [x0, 32]
Run Code Online (Sandbox Code Playgroud)

根据Cortex A72(我的目标处理器)的ARM 优化指南,这两条指令中的每一条在 L-pipeline 上都需要 6 个周期的执行时间,总共 12 个周期。

但我也可以使用交错加载,这允许我一次加载所有 4 个寄存器:

ld4   {v0.2d, v1.2d, v2.2d, v3.2d}, [x0]
Run Code Online (Sandbox Code Playgroud)

根据上述指南,这也节省了我的代码大小,并且总共只需要 8 个执行时间周期。

我知道交错意味着数据在我的寄存器中的存储方式不同,但应该假设我以后的使用可以处理交错和非交错数据。 (例如,对数组求和。)

正如我从理论执行时间中读到的那样,LD4 真的比 LDP 的两倍快吗?对于 STP 和 ST4,当然也可以提出同样的问题。也许这里有人已经对这个主题进行了基准测试。

(我什至正确解释时间吗?)