处理器结构--ReorderBuffer

2018-07-09  本文已影响40人  None_Ling

ReorderBuffer的作用

Reorder Buffer用来保存在乱序执行之前的(OOOE)指令执行顺序,当指令集合在乱序执行后按照原有指令顺序将结果提交。

ROB会将指令按照原有程序的顺序保存,这些指令会在被dispatched后添加到列表的一端,而当他们完成执行后,从列表的另一端移除。通过这种方式,指令会按他们dispatch的顺序完成。

实现方案

ROB的一种实现方案是环形缓冲区(类似于操作系统的IO缓冲区)。

在指令分发(dispatch)阶段在环形链表尾部增加指令集合。在指令完成阶段(complete)在头部增加从链表中移除的指令集。

在ROB中的每个Entry都必须包含足够的信息,使得在完成阶段可以知道该指令是否已经完成:

当指令执行造成了异常时,指令地址必须保存下来。当异常被处理完后,PC寄存器将使用保存下来的指令地址重启。并且分支指令可能需要指令地址去决定PC寄存器去覆盖预测错误的分支。

重命名寄存器编号(Rename register number)对于完全知道重命名寄存器写入逻辑寄存器(Architected Register)也是有必要的。重命名寄存器编号能够用来检查重命名寄存器堆(RRF)中Valid位,判断指令是否完成。这也使得Finished位没有必要了。

ROB会提供一个非常便捷的位置用来存储逻辑寄存器编号(Logical Register Number),Complete阶段也需要逻辑寄存器编号去写入逻辑寄存器中(Architected Register File)

如果在覆盖期间从重新排序缓冲器中移除控制依赖的指令,则不需要Valid位,否则,控制依赖指令必须被标记为无效,这样当它们到达重新排序缓冲器的头部时,它们可以被忽略。

流程

重新排序缓冲器的流程必须完成以下操作

参考资料

环形缓冲区
Reorder Buffer
Reorder Buffer: register renaming and in- order completion
The Reorder Buffer
寄存器堆

上一篇 下一篇

猜你喜欢

热点阅读