学习目标

  • 理解分支预测原理
  • 实现静态预测
  • 评估预测效果

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%

问题:如何做得更好?

下一步

第 5 章:两位饱和计数器

更新时间: