CPU Architect · Technical / Simulator Design

Branch Predictor模块:预测、训练与错误路径恢复

模块接口要区分预测时刻、分支解析、提交与squash。

题目重点:模块接口要区分预测时刻、分支解析、提交与squash。

题意与假设

这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。

  • 训练条件分支的二位饱和计数器表,PC哈希取index;BTB目标和返回栈为独立扩展。
  • 更新在resolve还是commit、历史是否推测更新均是模型合同,不借用某真实CPU私有策略。

解题路线

  1. 预测读表状态0/1预测not-taken,2/3预测taken,返回prediction和记录index/history的token。resolve拿真实结果,计数器向正确方向饱和;不要用已变化历史重新计算旧index。
  2. 若加global history,预测路径会推测更新history,mispredict要恢复该分支快照并应用真实结果;年轻分支token作废。不同线程应隔离或明确共享污染,统计区分方向错与目标错。
  3. 先用总taken、always-taken等基线,再测accuracy、MPKI、IPC影响与存储位数。离线trace只含已提交分支时无法完整表示错误路径/前端反馈,必须限制所声称指标。

手动走一遍

初始counter1,连续真实T/T/N:第一次预测N错→2,第二次T对→3,第三次T错→2,共2错。A预测T使history变化,年轻B随后预测;A实际N,恢复A前history并写N,B旧token不得再训练被取消分支。

规模与取舍

T表项二位方向状态2T bits,查询/更新O(1)模型操作;history/token按未解析分支数存储。host hash成本与模拟预测延迟分开。

易错点与追问

容易失分的边界

  • 把方向预测正确当目标地址必正确。
  • 更新时按当前global history查表会训练错误槽位。

继续深挖

  • aliasing导致两个PC相反行为,如何评估增表容量与新索引?
  • predictor训练提交延迟对准确率与错误路径污染有什么影响?

技术参考

✓已复制微信号!