超标量处理器设计笔记(10) 寄存器重命名过程的恢复、分发

重命名

  • 寄存器重命名过程的恢复
    • [使用 Checkpoint 对 RAT 进行恢复](#使用 Checkpoint 对 RAT 进行恢复)
    • [使用 WALK 对 RAT 进行恢复](#使用 WALK 对 RAT 进行恢复)
    • [使用 Architecture State 对 RAT 进行恢复](#使用 Architecture State 对 RAT 进行恢复)
    • 总结
  • 分发(Dispatch)

寄存器重命名过程的恢复

当发生异常、分支预测失败时,指令占用 RAT、ROB 和 Issue Queue 等资源恢复

使用 Checkpoint 对 RAT 进行恢复

对一个正在工作的部件来说,两种方式

名字 随机访问的 GC 串行访问 GC
缩写 Random Access GC, RAGC Sequential Access GC,SAGC
区别 将整个内容放到任意 GC 中 逐步地移位才能放到指定的 GC 中
和主存储器连接方式 连接每个 GC 连接单个 GC
要求 驱动负载较大(接缓冲器) 恢复时,可能需要移位多次
选择 更合适
  • MBC(Main Bit Cell)
    • SRAM 最小存储单元
    • 两读一写
  • CBC(Checkpoint Bit Cell)
    • 一读一写

RAT 状态保存时(Allocation):将 MBC 的内容复制到指定的 CBC 中

RAT 状态恢复时( Restore ):将 CBC 的内容复制到指定的 MBC 中

使用 WALK 对 RAT 进行恢复

ROB 存储了这条指令前对应的物理寄存器,可以逐步倒退

当发现一条分支指令预测失败时,使用分支指令的编号,将流水线中所有相关指令都给抹除

同时暂停流水线,从 ROB 的底端开始(最新的指令),逐条将每条指令之前对应的映射关系写到 RAT 中。

  • 分支预测错误时,首先需要抹除流水线,需要逐个指令地进行恢复,需要消耗很多时间(增大分支预测失败的惩罚)
  • 异常时,只需要恢复,不需要抹掉指令(因为异常需要等到该指令变成最旧的指令时才进行)

占用资源少,可用于处理异常发生频率低的处理器

使用 Architecture State 对 RAT 进行恢复

处理器外部访问逻辑寄存器时,RAT 中存储的是未提交状态,所以不一定

例子:

指令 A 提交成功,此时访问 RAT r1 对应的是 P34,但 D 可能出现异常,由此外部不应该读取这个映射关系

因此在提交时,也使用一个 RAT,所有正确的流水线指令都会更新 RAT,称为 aRAT(architecture RAT)

利用 aRAT 也可以完成修复

  • 出现分支预测失败时,并不马上进行 RAT 状态修复,而是继续执行,直到运行到该分支指令变成最旧指令时,此时 aRAT 则是正确状态的指令

缺点

  • 流水线中存在 D-cache 缺失的 load 指令时,该分支指令需要等待很长时间才能顺利离开

总结

复位方式 Checkpoint WALK Architecture State
内容 将 RAT 内容复制出来 根据 ROB 序列完成删掉、恢复指令 等待分支指令成为最老指令 利用 ARAT 复制
占用资源 多 少 直接复制比较简单
处理速度 快 慢 可能由于 D-cache 原因变慢
常用于 异常发生概率低的处理器中 不需要过多处理,降低功耗

分发(Dispatch)

经过重命名后,会进入

  • 队列
    • 发队队列 (out of order)
      • 大部分 FU (function Unit),等待操作数
    • 发射队列 (in order)
      • Store 指令和分支指令
  • 重排序缓存 (ROB)
    • 乱序执行的指令拉回到原始顺序,并且记录指令执行的状态(是否发生异常)
相关推荐
成都蜀味缘餐饮技术培训学校3 小时前
手撕烤兔技术培训实战指南,秘制腌料配方比例与调制手法
大数据·经验分享·笔记·其他·微信公众平台
希和20274 小时前
免费AI视频生成工具汇总(国内优先,适合做漫剧、短视频,Obsidian笔记版)
人工智能·笔记·音视频
蒸蒸yyyyzwd6 小时前
秋招学习笔记 day109
笔记·八股
只愿云淡风清8 小时前
正则表达式学习笔记 02:基础语法
笔记·学习·正则表达式
希和202719 小时前
考研英语阅读词汇笔记|城市野径、抄近道步道(非正式小路)
笔记·考研
一个人旅程~21 小时前
关于imac27inch因改短用户名导致混合硬盘和系统崩溃的问题分析与故障解决
经验分享·笔记·macos·新浪微博
心祭丫丫1 天前
【每天一个 Python 小案例17】Python 实现通讯录
开发语言·人工智能·笔记·python·学习
派大猩猩_1 天前
Obsidian 笔记怎么同步多端:Nutstore Sync 大笔记库同步测评
笔记·obsidian·obsidian插件·obsidian同步
叼烟扛炮1 天前
Linux 学习笔记(五十):网络层——IP 协议、子网划分与 NAT 魔法
linux·笔记·学习
叼烟扛炮1 天前
Linux 学习笔记(六十):单线程的逆袭——epoll 高并发服务器实战
linux·服务器·网络·笔记·学习·算法