实现重命名缓冲区的不同方法有哪些?
有四种不同的方法可以实现重命名缓冲区,例如使用合并的体系结构和重命名寄存器文件,使用单独的名称寄存器文件,或者将重命名的值保存在 ROB 或 DRIS 中。
在第一种方法中,重命名缓冲区与体系结构寄存器一起在一个类似的物理寄存器文件中执行,称为**合并的体系结构和重命名寄存器文件**。合并的寄存器文件必须提供足够数量的物理寄存器来实现体系结构寄存器和重命名寄存器。例如,Power1 为重命名 32 个 FP 体系结构寄存器提供了 40 个物理寄存器,而 R10000 提供了 64 个物理寄存器。
该方案的工作方式如下。让我们假设在给定时刻,体系结构寄存器与特定的一组物理寄存器相关联。现在,对于指令中指定的每个目标寄存器,如果可用,则分配一个空闲的物理寄存器。
这样,体系结构寄存器由一组动态变化的物理寄存器表示。例如,让我们假设重命名过程为指令的目标寄存器
ad r2,………….
也就是 r2,分配物理寄存器 p3。然后在映射表中设置一个条目。条目的第一部分是条目有效位。如果此位指示有效条目,则第二部分被解释为重命名缓冲区索引(RB 索引),它指向用作重命名寄存器的物理寄存器。在本例中是 p3。
重命名后,我们得到:
ad p3,………….
源操作数的重命名只需将体系结构寄存器编号替换为在相应的 RB 索引字段中找到的物理寄存器编号。
ad……r0, r1
这样,指令 ad r2, r0, r1 的重命名结果为:
ad r2, r0, r1
需要一个额外的方案来回收不再使用的物理寄存器。在合并寄存器文件的方法中,回收是一个复杂的任务。
当重命名寄存器值保存在单独的寄存器文件中时,此文件称为**重命名寄存器文件**。下一个可能性是使用**重排序缓冲区**(ROB)来实现重命名缓冲区。使用 ROB 时,每个发出的指令都将分配一个单独的 ROB 条目。因此,将该指令生成的(中间)结果也存储在同一个条目中是很自然的。
在最后一种实现方法中,**DRIS** 以与 ROB 相同的方式使用。Lightening 使用了这种替代方法。在这三种情况下,中间结果都保存在相应的重命名缓冲区中,直到它们被退休。
在退休期间,重命名缓冲区(重命名寄存器条目、ROB 条目或 DRIS 条目)的内容被写回体系结构寄存器文件。这样,体系结构寄存器文件被更新,并且重命名缓冲区被回收以供进一步使用。