您的位置:首页 > 运维架构 > 网站架构

《大话处理器》连载——微架构(15) 寄存器重命名

2011-08-21 21:56 399 查看
寄存器不能随便改名字,否则原来的数据依赖关系被打乱,会导致错误的执行结果,那么怎样才能既保留原先的数据依赖关系,又能将没有数据依赖性的指令的寄存器改名字呢?

这里介绍一种在处理器中经常实现的策略:

1. 将每条指令的目的寄存器映射到新的物理寄存器;

2. 指令的源寄存器映射为ISA寄存器最近映射到的那个物理寄存器;

3. 当本条指令完成后,该目的寄存器映射的更早的物理寄存器就可以释放了;

文字还是太抽象,看图有真相:



寄存器重名示例

在这个例子中,指令的第一个寄存器是目的寄存器,后2个是源寄存器,R1,R2,R3,R4是ISA寄存器,F1….F16是物理寄存器。

R1,R2,R3,R4一开始被映射到F1,F2,F3,F4,第1条指令的目的寄存器是R3,因此将R3重新映射到F5,图中的粗体表示对目的寄存器重新映射。第2条指令的源操作数需要访问R3,就使用R3的最新映射值——F5,这样就保证了指令2和指令1的数据相关性。

指令3和指令2有反相关,将指令3的R2映射为F7,这样指令3和指令2就没有相关性了,即使指令3在指令2前面执行,也不会影响指令2的结果。

指令4和指令3有输出相关,经过寄存器重命名后,指令4和指令3的R2分别对应不同的物理寄存器,它们之间的相关性就去除了。

同样的原理,指令4和指令5的相关性被保留。

如果按照这种方式映射下去,物理寄存器自然会被使用完。因此,需要实时的释放,已备重新分配。R4一开始映射到F4,当第2条指令执行完成后,R4的值就在F6中了,以后访问R4时,都会使用最新的F6,而不会使用F4,这样F4就可以被释放了。

在这种策略中,指令完全不需要访问ISA寄存器,只需要访问物理寄存器。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐