跳到主要内容

重命名与分派

重命名解决 WAR/WAW 假相关,分派则为微操作预订 ROB、调度器、Load/Store Queue 等资源。

映射关系​

架构寄存器表示 ISA 可见名字,物理寄存器表示硬件中的版本。写同一个架构寄存器的两条指令会获得不同物理目的寄存器,消费者读取当时最新映射。

源码入口:backend/rename/Rename.scala 与 RenameTable.scala。

为什么需要旧映射​

新指令提交后,旧物理寄存器才能归还 free list;发生 redirect 时,则需恢复到正确的旧映射。因此 rename 既要产生新映射,也要保存恢复信息。

分派的全有或全无问题​

一组微操作可能同时需要:

  • ROB 空间;
  • 对应类型的 issue queue 空间;
  • Load Queue 或 Store Queue 空间;
  • 物理寄存器;
  • 特殊序列化条件。

任一资源不足都会形成背压。观察性能时,不要只看 dispatch valid,还要找出是哪一种资源阻止 ready。

redirect 恢复​

年轻映射必须被撤销,free list 与 rename table 回到正确状态。实现可能使用快照、提交映射表或按 ROB 信息回滚;阅读时把“正常提交释放”和“错误路径恢复”分开。

实验​

构造大量独立写寄存器的指令,观察物理寄存器消耗与回收;再加入长延迟头部指令,比较 ROB/物理寄存器压力如何传播到 rename/dispatch。