1. 为何分支预测失败的惩罚(misprediction penalty)是 OoO 设计的关键约束?
为何分支预测失败的惩罚(misprediction penalty)是乱序执行(OoO)设计的关键约束?
- 分支误预测惩罚
- 流水线深度
- OoO 设计约束
分支误预测惩罚 = 从预测错误到确认错误、再到冲刷流水线重取正确指令所浪费的周期数,正比于流水线的深度(取指到分支执行的距离)。现代高性能 CPU 流水线很深(十几级),误预测惩罚可达 15-30 个周期,意味着一次误预测白费大量已取指/译码/执行的指令。对 OoO 设计而言,投机执行(speculative execution)会沿预测路径取指并执行大量指令,一旦误预测,这些工作全部作废,轻则浪费吞吐,重则引发安全隐患(如 Spectre)。因此分支预测器的准确率直接决定 OoO 性能上限,误预测惩罚是设计时最关键的权衡——预测器必须达到极高准确率(>95%),否则深流水线的收益被误预测吞掉。
误预测惩罚随流水线加深而增大,是 OoO 和投机执行的核心天敌。预测准确率与惩罚的权衡决定了 OoO 处理器能发挥的性能上限。