第 4 章:分支预测基础
学习目标
- 理解分支预测原理
- 实现静态预测
- 评估预测效果
4.1 思考:分支为什么慢?
beq x1, x2, target
add x3, x4, x5 # 要等分支结果才知道执行不执行
在五级流水线中,分支在 EX 阶段才知道结果,需要冲刷 2 条指令!
问题:能否提前预测分支方向?
4.2 静态预测
策略 1:总是不跳转
wire predict_taken = 1'b0;
简单,但循环会预测错误!
策略 2:向后跳转预测跳转
wire predict_taken = (imm < 0); // 负偏移 = 向后跳
思考:为什么向后跳转通常是循环?
4.3 预测准确率
准确率 = 预测正确次数 / 总分支次数
典型程序:
- 总是不跳转:~60%
- BTFNT:~65%
问题:如何做得更好?