基本概念
- 将ARF/PRF进行合并,合同之后的不见,称之为统一的PRF(Physical Register File);
- 存储的是speculative的,以及正确的(retire)寄存器值;
- 使用free list,存储PRF中,哪些寄存器是空闲的;
- 使用中的寄存器,会经历值没有被计算出来,计算出来但还没有retire, retire三个阶段
重命名过程
- 对源寄存器,查找register mapping table(RAT), 找出其对应的PRF的编号;
- 对目的寄存器,从free list中申请一个空闲的PRF,建立映射关系;
- 当外部需要查看指令的结果时,因为此时PRF中,既有推测值,也有准确值,因此不满足要求;
--> 使用另一个RAT, 存储所有退休的指令,和物理寄存器的关系; - 当一个物理寄存器不再被后面的指令使用时,该寄存器就可以被释放了;
怎么判断该寄存器是否还会被后续的指令使用?
- 考虑上面两条指令,当b retire的时候,a对应的寄存器已经没有用了;
- 如果有指令要使用a的目的寄存器作于src_reg,则这条指令必定是处于a,b之间;
- 当b retire的时候,肯定可以保证没有指令使用a的p1作为源寄存器了;
- 因此,当b退休的时候,需要将p1变为空闲状态;
- => 也就是说,ROB中,除了记录当前对应的reg外,还需要存储它之前对应的物理寄存器;
RAT的内容
- 本质上是一个表格,以逻辑寄存器作为地址来索引;
- 对源寄存器,从这个表格中找到对应的物理寄存器编号;
- 对目的寄存器,从free list申请物理寄存器后,将对应关系写入RAT中;
- 实现层面,可以用sram/cam来实现;