- 指令 A 和指令 B之间存在先写后读(RAW)的相关性
- 指令 B 的源寄存器 r0 来自于指令 A 产生的结果
- 因此在进行寄存器重命名的时候,指令 B 的 r0 对应的物理寄存器应该直接来自于指令A所对应的P30,而不应该来自于从RAT读取的值。
- 指令A,B,D之间存在先写后写(WAW)的相关性
- 虽然从字面上看,通过寄存器重命名可以消除这种相关性
- 但是在实际当中,仍然无法忽视它的存在,这是为什么呢?原因有如下两个。
- 因为在写入 RAT 时,只需要将一个逻辑寄存器最新的映射关系写入到 RAT 中就可以了,如果在一个周期内进行重命名的多条指令之间都有着同一个目的寄存器(即存在WAW相关性),那么只需要将最新的那条指令的映射关系写到RAT中即可。
- 在将每条指令的旧映射关系写到ROB的时候,如果发现在一个周期内有多条指令都使用同一个目的寄存器,则此时写入到ROB中的旧映射关系不再是来自于 RAT读取的值,而是直接来自于和它存在 WAW 相关性的指令。
- 指令 B 的目的寄存器 r0 经过重命名之后对应的物理寄存器是 P31,而 r0 在上一次对应的物理寄存器是指令 A 当中的 P30,而不是来自于 RAT读出的结果;
- 同理,指令 D 的目的寄存器 r0 对应的旧的映射关系是来自于指令 B 的 P31,也不是来自于RAT读出的结果。
- 指令B和指令D之间存在先读后写(WAR)的相关性,指令B读取寄存器r0,而指令D写入到寄存器ro,通过寄存器重命名可以消除这种关系,并且对于实际的重命名过程来说,这种相关性也是没有影响的。