【发布时间】:2015-12-02 08:23:06
【问题描述】:
Cortex-A57 优化指南指出,大多数在 128 位矢量数据上运行的整数指令都可以双发出(第 24 页,整数基本 F0/F1,逻辑 F0/F1,执行吞吐量 2)。
但是,在我们的内部(综合)基准测试中,吞吐量似乎仅限于 1 128 位霓虹整数指令,即使有大量可用的指令并行性(编写基准测试的目的是测试 128 位霓虹灯指令可以双重发布,所以这是我们注意的)。当混合 50% 的 128 位指令和 50% 的 64 位指令时,我们能够实现每个时钟 1.25 条指令(仅使用 neon 整数,没有加载/存储)。
在使用 128 位 ASIMD/Neon 指令时,是否需要采取特殊措施才能获得双发吞吐量?
谢谢,克莱门斯
【问题讨论】:
-
有相当多的指令只能发出一个管道,还有相当多的指令,Q 形式的周期比 D 形式的延迟更多/吞吐量更少 - 实际情况是什么 有问题的代码(反汇编)?
-
有问题的代码看起来例如比如:.loop: vand q2, q3, q2 vand q3, q4, q3 vand q4, q3, q4 vand q5, q6, q5 vand q6, q7, q6 vand q7, q8, q7 vand q8, q9, q8 vand q9, q10, q9 vand q10, q11, q10 vand q11, q12, q11 vand q12, q13, q12 vand q13, q14, q13 vand q14, q15, q14 vand q15, q1, q15 subs r0, r0, #1 bne .loop
-
不要在评论中粘贴代码。您可以为此编辑您的问题。
-
您的代码中有
vand q4, q3, q4而不是vand q4, q5, q4。这将添加对上一条指令的依赖。 -
感谢您的提示,这是一个错字。我再次进行了基准测试,使用pastebin.com/AQCN5uuM 的代码,我得到了大约 1.5 的 IPC。我真的很想知道这里出了什么问题...