(ROB,Reorder Buffer):重排序缓存。基于硬件的推测:
必须把指令乱序执行与实际结束分离开来,成为两步实现;
1、乱序执行是动态调度的需要,必须把指令的执行结果,通过旁路方法,随时提供给其它指令使用;
2、按序结束是为了确保实现精确中断的需要(能确保恢复中断前的状态)。
为此,在Tomasulo算法把指令分为Issue, Execute, 和Write result三步的基础上,增加一步,称为Commit(交付,后提交)。Commit的功能(将在下面作进一步介绍)是指令将其结果交付给(写入)目的寄存器或存储单元。
必须增加一硬件缓冲存储器(buffer),供Write Result这一步存放已获得的结果,并可以提供给其它指令应用这些结果。当指令进入Commit这一步时,将结果从buffer中拷贝到目的寄存器或存储单元。这一硬件缓冲存储器称为重排序缓存 (ROB,Reorder Buffer)。
[编辑本段]ROB的作用
相当于一个额外虚拟寄存器,相当于Tomasulo算法中的保存站、Load buffer和store buffer等的功能。(注意,在基于Tomasulo的硬件中,取消了Store buffer和Load buffer部件。
1、ROB在指令完成操作之后直到交付之前这段时间里保存该指令的结果,作为其它指令操作数的源,类似于Tomasulo算法中保留站作用。
2、不同之处在于:Tomasulo算法中在Write Result这一拍中就可以更新register file,而这里只能等到进入Commit节拍才能更新register file。
[编辑本段]重排序缓存 ROB
再定序缓冲ROB的每个项包含三个域:
(1)指令类型域:用来说明指令类型
转移指令——无目标结果
Store——以存储器地址作为目标结果
Reg操作(ALU或Load):以Reg.作为目标结果
(2)目标域:
寄存器号(针对ALU和Load操作指令)
存储器地址(针对Store指令)
(3)值域:用来存放指令的结果,直到指令进入交付节拍。
[编辑本段]与Tomasulo算法硬件结构的不同之处
1、增加了ROB;
2、撤销了load buffer 和store buffer;
3、寄存器改名功能由ROB(重排序缓存号)来实现,而不再由保留站来完成;
4、保留站的功能仅为在指令发射到开始执行这段时间内保存指令的操作码和操作数;
5、用重排序缓存单元号来标识指令的结果,而不再用保留站号来标识,因为每一指令在其交付前均在重排序缓存中有一单元。