如何通过代码优化提升CPU分支预测准确度?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1253个文字,预计阅读时间需要6分钟。
朋友们可以关注我的公众号,获取最新更新:或关注我的知乎账号: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分钟。
朋友们可以关注我的公众号,获取最新更新:或关注我的知乎账号: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%左右。

