如何知道在两条指令之间需要多少NOP来修复数据风险?我目前的理解是,如果第二条指令的操作数依赖于第一条指令的目的地,我们需要等到第一条指令到达数据可用的特定阶段。
例如:
添加$t1 $t2 $t3
sub $t5 $t1 $t4
我知道我必须等到第一个指令到达WB阶段,所以我需要至少3个NOPs或指令。
但是,如果第一条指令被更改为存储、加载或立即执行,情况会怎样呢?如果第二条指令被更改了呢?我用的是Patterson和Hennessy这本书,而我的教授的讲课并不能让它更容易理解。任何帮助理解这一点的人都将不胜感激。
发布于 2021-11-30 00:17:44
NOP是字面上的处理器指令,当构建程序时,编译器或汇编语言程序员必须将其插入到指令序列中。
只有在移除转发和停止硬件时才需要插入NOP,所以这个问题并不真正适用于真实的硬件,而可能适用于一些假想的硬件。
另一方面,停顿对于处理器实现来说是一种有效的方法,可以减轻诸如写后读(RAW)之类的风险-有时是严格必要的,有时是转发的糟糕替代方案。
通常,在以寄存器为目标的指令(如add )和使用该结果的指令之间,需要两个或三个停顿周期而不进行转发,以便第二条指令读取正确的数据。
大多数MIPS实现将描述WB阶段是简单的并且可以在周期的前半部分完成,并且ID阶段是简单的并且可以在同一周期的后半部分完成。这意味着对于在同一周期中发生的WB写入和ID读取,ID读取将能够看到由WB写入所写入的值。由于重叠朝着期望的效果工作,因此只需要2个停顿周期。
https://stackoverflow.com/questions/70162629
复制相似问题