跳到主要内容

实验:逐拍追踪一次分支预测

实验目标​

找出一条发生误预测的条件分支,从预测请求一直跟到后端 redirect,并确认预测历史如何恢复。实验不要求先理解所有信号。

最小观察集合​

在 Verdi 中按层次寻找以下语义信号(生成 RTL 的精确名字可能随版本变化):

  • Predictor 的 s0 PC 与各级 fire/ready;
  • s1/s2/s3 的 taken、target 与命中信息;
  • 写入 FTQ 的预测响应;
  • 后端 redirect 的 valid、PC 与原因;
  • predictor update 的 valid、实际 taken/target;
  • redirect 前后的 global history。

操作步骤​

  1. 运行一个包含循环和函数调用的小程序。
  2. 在波形中以 redirect.valid 为触发点向前回看。
  3. 记录产生 redirect 的 FTQ 项与预测 PC。
  4. 回到该 PC 第一次进入 BPU 的周期。
  5. 按 s0 → s1 → s2 → s3 记录每级给出的结果。
  6. 比较预测 target 与后端实际 target。
  7. 继续向后观察 update,确认训练发生且使用了原预测的 meta。

实验记录模板​

项目记录值
分支 PC
分支类型conditional / call / return / indirect
FTB 是否命中
最终预测 taken/target
实际 taken/target
redirect 周期
使用的 FTQ 项
更新了哪些预测组件
常见误区

不要看到某一级结果错误就立刻认定最终预测错误。预测是分阶段修正的;应以送入 FTQ/IFU 的最终有效响应为准。

完成标准​

你能用自己的话解释:为什么发生这次误预测、错误在哪一级被发现、浪费了多少周期、哪些预测结构因此被训练。