分支预测与条件传送

分支预测

现代处理器使用分支预测猜测条件分支的跳转方向:

  • 正确预测:流水线无停顿
  • 错误预测:需要清空流水线(14-24个周期的惩罚)

条件传送指令(cmov)

cmov 指令根据条件选择性地将数据从一个源传送到目标,不产生分支

// 分支版本
if (x > y) result = x;
 
// 条件传送版本
int t = x > y ? x : result;

适用场景

场景分支预测效果推荐方式
高度可预测(如循环边界)预测率 > 99%分支
随机输入(如二分查找、排序)预测率 ~50%条件传送
复杂计算的条件选择视数据而定权衡评估

条件传送的优势

  • 完全消除分支预测错误惩罚
  • 执行时间与数据无关(恒定)
  • 适合

限制

  • 条件传送需要计算两个分支的值(可能浪费计算)
  • 有副作用的分支不适合转换为条件传送

相关笔记:

链接到