Aarch64 什么是延迟转发?

Aarch64 what is late-forwarding?

"Arm Neoverse E1 Core Software Optimization Guide"(以及其他一些 CPU 模型的优化指南)中提到了“延迟转发”:

Instruction Group Instructions Exec Latency Exec Throughput Notes
Multiply accumulate (32-bit) MADD, MSUB 3 (2) 1 2
Multiply accumulate (64-bit) MADD, MSUB 5 (4) 1/3 2

(2) Multiply-accumulate pipelines support late-forwarding of accumulate operands from similar μOPs, allowing a typical sequence of multiply-accumulate μOPs to issue one every N cycles (accumulate latency N shown in parentheses).

术语“延迟转发”是什么意思?延迟转发的指令序列是什么(反例也会有帮助)?

乘加运算的延迟转发意味着加数可以在乘法完成后可用,而不是必须在乘加运算开始执行时可用。由于乘法本身不是依赖于加数的数据,因此它可以继续进行。由于加法的一些工作可以与乘法并行完成(乘积的指数将提前可用并且可以与加数的指数一起使用以确定加法之前所需的移位量),因此可能希望加数是在整个产品可用之前可用,但即使在那种情况下,直到比被乘数晚得多时才需要加数。

通过延迟加数的转发(可用性),减少了依赖累加的有效延迟。这减少了覆盖延迟所需的累加寄存器(和并行性)的数量。