寄存器重命名
:material-circle-edit-outline: 约 376 个字 :material-clock-time-two-outline: 预计阅读时间 1 分钟
重命名消除假冒险
首先,物理 reg 是一些逻辑寄存器之外的、指令集规定之外的寄存器,设计来实现“无限大”的寄存器堆,逻辑 reg 则例如 riscv 的 x0-x31,被设计用来暂放执行结果
处理器之所以会出现 WAW 、 WAR 冒险,是因为处理器的逻辑寄存器数量不足,在程序执行过程中经常出现指令结果没空闲地方存放的情况,因此需要重用寄存器
我们学习虚拟内存的想法,为处理器设计出一个“无限大”的逻辑寄存器堆,逻辑 reg 之外的 reg 就用多的物理 reg 补充
下图是个简单的例子,重命名映射表记录了逻辑寄存器和物理寄存器的对应关系
处理器首先根据指令的源寄存器编号查询“重命名映射表”,通过映射结果,指令可以找到源寄存器对应的物理寄存器,从而得到需要的数据
接下来,指令从空闲寄存器列表中找到4个空闲的物理寄存器,用来和指令的目的寄存器建立映射关系
基于这个思路,我们有三个不同的办法来实现 renaming