跳到主要内容

一条指令的生命周期

理解乱序核的关键不是记住所有级名,而是跟踪一条指令拥有的三种身份:程序顺序身份、物理数据依赖、推测状态。

从预测到提交​

程序顺序身份​

FTQ/ROB 指针帮助系统回答“这条指令在程序顺序中的位置”。即使执行顺序改变,提交和异常仍必须恢复精确的程序语义。

物理数据依赖​

重命名把架构寄存器映射到物理寄存器,消除 WAR/WAW 假相关。调度器只需等待真实 RAW 依赖和执行资源。

推测状态​

分支预测、Load 越过 Store、预取和返回栈都带推测。错误发生时,必须知道哪些年轻状态可丢弃、哪些已提交状态必须保留。

三种“完成”不要混淆​

  • 执行完成:功能单元得到了结果。
  • 写回完成:结果进入物理寄存器或旁路网络,依赖者可被唤醒。
  • 提交完成:指令成为不可撤销的架构状态。

典型恢复事件​

事件发现位置主要动作
分支误预测分支执行单元redirect、清除年轻指令、恢复预测历史
Load 顺序违规LSUreplay 或流水线重定向
异常/中断执行单元/ROB精确提交边界、进入 trap
指令 Cache miss前端暂停供给,等待 refill

波形练习​

选择一条最终提交的整数指令,记录它在 FTQ、ROB 和物理寄存器系统中的标识。然后选择一条被 redirect 清掉的年轻指令,比较两者生命周期在哪里分叉。