4.11 PC预测
为什么需要PC预测
在流水线处理器中,取指阶段需要在当前时钟周期就确定下一条指令的地址。而对于某些指令,真正的下一地址要等到执行阶段甚至访存阶段才能确定。因此,必须做出预测。
预测策略
Y86-64 流水线采用的预测策略:
| 指令类型 | 预测策略 |
|---|---|
| 无条件跳转(jmp) | 预测 valC(跳转目标) |
| 条件跳转(jXX) | 预测 valC(总是预测跳转) |
| call | 预测 valC(调用目标) |
| ret | 无法预测,需要暂停 |
| 其他指令 | 预测 valP(顺序执行) |
条件跳转预测
Y86-64 的流水线采用了最简单的预测策略:总是预测条件跳转会执行(即预测跳转目标 valC)。
这种策略的优势在于:
- 实现简单,不需要复杂的分支预测器
- 在大多数情况下,循环的末尾条件跳转往往是”跳回”的,预测正确率尚可
预测错误的惩罚
当预测错误时,已经进入流水线的指令需要被取消(转换为气泡):
- 条件跳转预测错误:条件跳转实际未执行(应继续顺序执行),此时已取指的后续指令需要被取消,插入 2 个气泡
- ret 指令:无法预测返回地址,需要等待 M 阶段的 valM,强制暂停 3 个周期
预测错误的代价(惩罚)体现在降低了流水线的有效吞吐量。减少惩罚是分支预测算法和处理器微架构优化的重要目标。
相关笔记
链接到
- 上一个知识点:4.10 流水线硬件结构
- 下一个知识点:4.12 数据相关与冒险