assembly - Aarch64 什么是延迟转发?

标签 assembly cpu-architecture arm64

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


教学组
指示
执行延迟
执行吞吐量
笔记


乘法累加(32 位)
MADD, MSUB
3 (2)
1
2

乘法累加(64 位)
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).


“延迟转发”一词是什么意思?哪些指令序列会受到延迟转发(反例也有帮助)?

最佳答案

乘加运算的延迟转发意味着加数可以在乘法完成后可用,而不必在乘加运算开始执行时可用。由于乘法本身不是依赖于加数的数据,因此它可以继续进行。由于加法的一些工作可以与乘法并行完成(乘积的指数将提前可用,并且可以与加数的指数一起使用以确定加法之前所需的移位量),人们可能希望加数为在整个产品可用之前可用,但即使在这种情况下,也不需要加数,直到比被乘数晚得多。
通过延迟加数的转发(可用性),减少了相关累积的有效延迟。这减少了覆盖延迟所需的累积寄存器(和并行性)的数量。

关于assembly - Aarch64 什么是延迟转发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66212284/

相关文章:

assembly - x86 汇编添加不同大小的操作数

c++ - 如何使用内联汇编在 C/C++ 程序中调用 DOS 中断?

algorithm - 现代处理器如何进行整数算术运算?

java - 在 aarch64 Odroid C2 的 Java 1.8.0_73 上运行 WebStorm-143.382.36 在 libjnidispatch.so 上失败

ios - asm 中未知的寄存器名称 "q0"(arm64)

assembly - 在Assembly中使用/dev/urandom生成256个数字;

linux - 等待按键 组装 NASM,Linux

assembly - 使用汇编中的 .reloc

performance - Haswell AVX/FMA 延迟测试比英特尔指南慢 1 个周期

linux - 如果两个核心试图同时写入主存中的同一个地方会发生什么?