← 中文资源

简体中文版本

分支预测

分支预测在分支解析前猜测控制流以填满流水线;误预测要冲刷流水线,每次 15 到 20 个周期,使数据布局与分支顺序影响性能。

阅读英文原文

概念定义

现代 CPU 在流水线里同时执行数十条指令。分支本会让一切停到解析为止;预测器改用猜测让机器投机前进,猜错就丢弃全部投机工作——代价是数十个周期。

工作机制

预测器按分支历史与全局模式学习,结构化代码准确率超过 95%。数据依赖分支(if data[i] > threshold)继承数据分布:排序输入让它近乎单调,随机输入让它变成掷硬币。无分支形式——掩码、条件传送、查表——直接移除分支。

使用场景

带数据依赖条件的热循环、按输入切换的解析器、分发密集的解释器。改写为无分支或按分支结果分区数据,经典演示里能带来数量级摆动。

常见误区

误预测的代价是数十周期、堪比一次 L1 miss——不只是数值紧循环的事,解析器、分发表、校验代码同样中招。无分支代码更难读且不总更快:两条路径都被强制计算。投机执行还是 Spectre 类攻击的泄漏面——分支行为同时是安全面。重构前先剖析,多数结构化代码预测器已处理得很好。