Kunminghu MicroTAGE 设计说明
1. 定位
MicroTAGE 是放在 S1 的轻量方向预测器。
它的作用很直接:
- 接收
uBTB/AheadBTB给出的 branch 候选 - 在
BTBTAGE之前先做一轮更早的方向判断
所以它的价值不在于“单独预测得更强”,而在于“更早可用”。
2. 和 BTBTAGE 的关系
MicroTAGE 基本是从 BTBTAGE 复制出来的轻量版本。
它保留了同样的基本问题设定:
- 仍然面向一个 fetch block 内多条 branch
- 仍然使用
startPC + folded history做 index - 仍然用
position进入 tag 来区分 block 内不同 branch
但它做得更轻:
- 表更小
- 结构更简单
- 延迟更早
所以更适合把它理解成“前级版 TAGE”,而不是“小号但完整等价的 BTBTAGE”。
3. 核心设计点:ahead index pipeline
MicroTAGE 最关键的设计点,是 ahead index pipeline。
如果完全照 BTBTAGE 的方式做,那么:
- 当前拍更新出来的 index folded history
- 当前拍就要立刻参与查表
这对一个要放在 S1 的 predictor 来说,时序仍然偏重。
因此当前实现做了一个专门的折中:
tagFoldedHist/altTagFoldedHist立即更新indexFoldedHist延后一拍可见
从代码上看:
doUpdateHist()会先生成新的 index folded history- 但不立即让它成为当前拍的
indexFoldedHist - 而是先写入
aheadindexFoldedHist - 下一拍再接管
所以它本质上是在做:
- tag 用“当前可见”的 folded history
- index 用“前一拍准备好”的 folded history
这就是 MicroTAGE 能放到更前面工作的关键。
4. 为什么不展开更多细节
MicroTAGE 和 BTBTAGE 在实现上还有不少差异,例如:
- fallback 更简单
- provider 逻辑更轻
useful/ allocation 也有不同
但这些不是当前文档的重点。
当前更重要的结论只有一个:
MicroTAGE存在的核心意义,是以前级轻量 predictor 的形式,尽早给出一版比 base ctr 更好的方向预测
5. 总结
MicroTAGE 可以概括成三句话:
- 它是
S1的轻量方向预测器。 - 它沿用
BTBTAGE的基本思路,但做得更轻、更早。 - 它最关键的工程点是 ahead index pipeline。
6. 实现锚点
src/cpu/pred/btb/microtage.hhsrc/cpu/pred/btb/microtage.ccsrc/cpu/pred/BranchPredictor.py
7. 参考资料
docs/design-docs/frontend/bpu_top_level.mddocs/design-docs/frontend/btb_tage_design.mddocs/design-docs/frontend/abtb_design.md