4.11 PC预测

为什么需要PC预测

在流水线处理器中,取指阶段需要在当前时钟周期就确定下一条指令的地址。而对于某些指令,真正的下一地址要等到执行阶段甚至访存阶段才能确定。因此,必须做出预测。

预测策略

Y86-64 流水线采用的预测策略:

指令类型预测策略
无条件跳转(jmp)预测 valC(跳转目标)
条件跳转(jXX)预测 valC(总是预测跳转)
call预测 valC(调用目标)
ret无法预测,需要暂停
其他指令预测 valP(顺序执行)

条件跳转预测

Y86-64 的流水线采用了最简单的预测策略:总是预测条件跳转会执行(即预测跳转目标 valC)。

这种策略的优势在于:

  • 实现简单,不需要复杂的分支预测器
  • 在大多数情况下,循环的末尾条件跳转往往是”跳回”的,预测正确率尚可

预测错误的惩罚

当预测错误时,已经进入流水线的指令需要被取消(转换为气泡):

  • 条件跳转预测错误:条件跳转实际未执行(应继续顺序执行),此时已取指的后续指令需要被取消,插入 2 个气泡
  • ret 指令:无法预测返回地址,需要等待 M 阶段的 valM,强制暂停 3 个周期

预测错误的代价(惩罚)体现在降低了流水线的有效吞吐量。减少惩罚是分支预测算法和处理器微架构优化的重要目标。

相关笔记

链接到