寄存器重命名

参考:《超标量处理器设计》CHP 7

对于假性数据相关 WAW 和 WAR,其制约了原始程序可以获得的并行性,需要通过寄存器重命名的方法将它们消除掉。

重命名映射表(Register Renaming Table, Intel称之为Register Alias Table, RAT)。(注意Intel文档中的RAT指重命名技术,方便理解文档)。

 

注意:以下内容只是记录,没有花费时间去理清其硬件实现,算是一个程序员的基本素养吧

对于寄存器重命名来说,概括起来,有三种方式都可以实现它:

(1)将逻辑寄存器(Architecture Register File, ARF)扩展来实现寄存器重命名

(2)使用统一的物理寄存器(Physical Register File, PRF)来实现寄存器重命名

(3)使用ROB来实现寄存器重命名

Intel多采用(2)、(3)来实现,而MIPS则采用(2)来实现。这三种方法的本质都是要将指令集中定义的逻辑寄存器,在处理器的执行过程中,动态的映射到处理器内部实际使用的物理寄存器上,使用这些物理寄存器来代替逻辑寄存器,从而可以增加寄存器的个数。要实现寄存器重命名,一般要考虑:

(1)何时占用一个物理寄存器?此寄存器来自哪里?

(2)何时释放一个物理寄存器?此寄存器去往何处?

(3)发生分支预测失败时(mis-prediction),如何处理?

(4)发生异常时(exception),如何处理?

 

使用ROB来实现寄存器重命名:

在超标量处理器中,每条指令都会将自身的信息按照程序中原始的顺序存储到ROB中,当一条指令将结果计算出来之后,会将其写到ROB中,但是由于分支预测失败(mis-prediction)和异常(exception)等原因,这些结果未必就是正确的,它们的状态被成为推测的(speculative)。在一条指令离流水线之前,它都会待在ROB中,只有当指令变为流水线中最旧的指令,并且被验证为正确的时候,才会离开ROB,并使用它的结果对处理器状态进行更新,例如将结果写到ARF中,这种方式相当于将PRF和ROB集成到了一起。

 

流水线中的分发(Dispatch)阶段就是将寄存器重命名之后的指令写到发射队列(Issue Queue)和重排序缓存(ROB)的过程,指令到达发射队列后,就可以按照乱序的方式执行了,通过重排序缓存将这些指令再变回到程序中指定的顺序。分发阶段可以和寄存器重命名阶段放在一个周期内完成。但是当发射队列和重排序缓存的容量比较大时,向它们当中写入东西会变得很慢,这样会严重影响处理器的周期时间,因此很多处理器都会为分发阶段单独使用一个流水段。

 

posted on 2014-11-28 00:03  阿加  阅读(2362)  评论(0)    收藏  举报

导航