如何通过代码优化提升CPU分支预测准确度?

2026-05-19 15:390阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1253个文字,预计阅读时间需要6分钟。

如何通过代码优化提升CPU分支预测准确度?

朋友们可以关注我的公众号,获取最新更新:或关注我的知乎账号:https://www.zhihu.com/people/zhangyachen。关于分支预测的基本概念和详细算法,可以参考我之前写的知乎回答。

朋友们可以关注下我的公众号,获得最及时的更新:

或者关注我的知乎账号 : www.zhihu.com/people/zhangyachen

关于分支预测的基本概念和详细算法可以参考我之前写的知乎回答,基本概念不再阐述了~~

www.zhihu.com/question/486239354/answer/2410692045

说几个常见的能够提升CPU分支预测效率的方法。

将最常见的条件比较单独从switch中移出

分支预测除了需要预测方向,还需要预测分支的目标地址。目标地址BTA(Branch Target Address)分为两种:

  • 直接跳转(PC-relative, direct) : offset以立即数形式固定在指令中,所以目标地址也是固定的。
  • 间接跳转(absolute, indirect):目标地址来自通用寄存器,而寄存器的值不固定。

对于直接跳转,使用BTB可以很好的进行预测。但是对于间接跳转,目标地址不固定,更难预测。switch-case的指令实现(类似jmpq *$rax,$rax是case对应label地址)、C++虚函数调用就属于间接跳转。间接跳转如果还用直接跳转的BTB预测,准确率只有50%左右。

阅读全文

本文共计1253个文字,预计阅读时间需要6分钟。

如何通过代码优化提升CPU分支预测准确度?

朋友们可以关注我的公众号,获取最新更新:或关注我的知乎账号:https://www.zhihu.com/people/zhangyachen。关于分支预测的基本概念和详细算法,可以参考我之前写的知乎回答。

朋友们可以关注下我的公众号,获得最及时的更新:

或者关注我的知乎账号 : www.zhihu.com/people/zhangyachen

关于分支预测的基本概念和详细算法可以参考我之前写的知乎回答,基本概念不再阐述了~~

www.zhihu.com/question/486239354/answer/2410692045

说几个常见的能够提升CPU分支预测效率的方法。

将最常见的条件比较单独从switch中移出

分支预测除了需要预测方向,还需要预测分支的目标地址。目标地址BTA(Branch Target Address)分为两种:

  • 直接跳转(PC-relative, direct) : offset以立即数形式固定在指令中,所以目标地址也是固定的。
  • 间接跳转(absolute, indirect):目标地址来自通用寄存器,而寄存器的值不固定。

对于直接跳转,使用BTB可以很好的进行预测。但是对于间接跳转,目标地址不固定,更难预测。switch-case的指令实现(类似jmpq *$rax,$rax是case对应label地址)、C++虚函数调用就属于间接跳转。间接跳转如果还用直接跳转的BTB预测,准确率只有50%左右。

阅读全文