重命名与分派
重命名解决 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。