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,当然也可以提出同样的问题。也许这里有人已经对这个主题进行了基准测试。
(我什至正确解释时间吗?)
| 归档时间: |
|
| 查看次数: |
976 次 |
| 最近记录: |