题目重点:模块接口要区分预测时刻、分支解析、提交与squash。
题意与假设
这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。
- 训练条件分支的二位饱和计数器表,PC哈希取index;BTB目标和返回栈为独立扩展。
- 更新在resolve还是commit、历史是否推测更新均是模型合同,不借用某真实CPU私有策略。
解题路线
- 预测读表状态0/1预测not-taken,2/3预测taken,返回prediction和记录index/history的token。resolve拿真实结果,计数器向正确方向饱和;不要用已变化历史重新计算旧index。
- 若加global history,预测路径会推测更新history,mispredict要恢复该分支快照并应用真实结果;年轻分支token作废。不同线程应隔离或明确共享污染,统计区分方向错与目标错。
- 先用总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训练提交延迟对准确率与错误路径污染有什么影响?
技术参考
- gem5前端与预测集成:技术语义参考,具体题目按本文约定。
