【发布时间】:2011-12-03 02:02:24
【问题描述】:
在 ARM NEON 文档中,它说:
[...] 某些指令对可能必须等到值被写回寄存器文件。
我还没有找到一个列表来定义可以使用转发结果的指令对和必须等待写回的指令对。
有人知道列出这些对的表格或文档吗?
【问题讨论】:
在 ARM NEON 文档中,它说:
[...] 某些指令对可能必须等到值被写回寄存器文件。
我还没有找到一个列表来定义可以使用转发结果的指令对和必须等待写回的指令对。
有人知道列出这些对的表格或文档吗?
【问题讨论】:
从广义上讲,您合理期望转发的内容,转发。 vmul.f32 转发到 vadd.f32 等。
我不相信确切的转发路径会以您正在寻找的方式精确记录在任何地方。反正我还没有找到。如果您确实找到了它们,请务必告诉我们在哪里。当然,对于任何给定的指令,确定是否发生转发并不难,但这不是一个通用的解决方案。对不起。
【讨论】:
有人知道列出这些对的表格或文档吗?
这些对超过 9000,它们都无法列出。
例如:
VADD.F32 q0,q0,q1
VMUL.F32 q3,q0,q2
第一条指令在第 4 个周期写回结果,而第二条指令需要它 (q0) 作为第 2 个周期的源,因此源尚未准备好,但之间存在停顿(或管道“漏洞”)这两条指令。
要计算这个摊位,您可以使用以下在线工具:
http://pulsar.webshaker.net/ccc/result.php?lng=us
【讨论】:
整数乘法累加。
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0344k/ch16s06s03.html 末尾的部分很有帮助:
如果乘法累加跟随乘法或其他 乘累加,并取决于第一个的结果 指令,那么如果两条指令之间的依赖关系是 相同的类型和大小,处理器使用特殊的乘法器 累加器转发。这种特殊的转发意味着乘 指令可以背靠背发出,因为第一个的结果 N5 中的指令被转发到第二个的累加器 N4 中的指令。如果说明书的大小和类型不 匹配,则 N3 中需要 Dd 或 Qd。这适用于组合 乘累加指令 VMLA、VMLS、VQDMLA 和 VQDMLS,以及乘法指令VMUL和VQDMUL
不要假设浮点乘法以相同的方式累加工作。我没有使用浮点 NEON 指令来处理任何性能关键问题,因此我无法在此提供任何经验,但请确保您阅读并理解 http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0344k/BCGDCECC.html 末尾的注释
【讨论】: