-1

我列出了 2 种危害类型:

1a. EX/MEM.RegisterRd = ID/EX.RegisterRs
1b. EX/MEM.RegisterRd = ID/EX.RegisterRt

2a. MEM/WB.RegisterRd = ID/EX.RegisterRs
2b. MEM/WB.RegisterRd = ID/EX.RegisterRt

我无法理解这两条规则背后的直觉,这可以帮助我了解技术术语并解释概念?欢迎任何解释:)

4

1 回答 1

0

在大多数 3 操作数 ISA(例如 MIPS 文档,如http://www.mrc.uidaho.edu/mrc/people/jff/digital/MIPSir.html使用此约定)中,rd是目标寄存器,而 Rs、Rt 是源寄存器。例如add rd, rs, rt。(rs 和 rt 可能是第二和第三,或源和第三,IDK)。

如果您正在读取最近写入的寄存器(在 ID 中)(写入它的指令还没有到达回写阶段),那是一个 RAW read-after-write 真正的依赖关系。

乱序 exec 还引入了 write-after-write 和 write-after-read 反依赖危害的可能性。 https://en.wikipedia.org/wiki/Hazard_(computer_architecture)#Data_hazards。但我认为,在标量有序管道中,只有真正的依赖关系才是一个问题。至少如果所有指令都具有固定的 1 周期延迟,那么不包括 MIPS 之类的时髦东西multdiv编写 hi:lo 对的东西。

于 2020-06-25T21:30:16.877 回答