分支预测与条件传送
分支预测
现代处理器使用分支预测猜测条件分支的跳转方向:
- 正确预测:流水线无停顿
- 错误预测:需要清空流水线(14-24个周期的惩罚)
条件传送指令(cmov)
cmov 指令根据条件选择性地将数据从一个源传送到目标,不产生分支:
// 分支版本
if (x > y) result = x;
// 条件传送版本
int t = x > y ? x : result;适用场景
| 场景 | 分支预测效果 | 推荐方式 |
|---|---|---|
| 高度可预测(如循环边界) | 预测率 > 99% | 分支 |
| 随机输入(如二分查找、排序) | 预测率 ~50% | 条件传送 |
| 复杂计算的条件选择 | 视数据而定 | 权衡评估 |
条件传送的优势
- 完全消除分支预测错误惩罚
- 执行时间与数据无关(恒定)
- 适合
限制
- 条件传送需要计算两个分支的值(可能浪费计算)
- 有副作用的分支不适合转换为条件传送