利用分支预测优化代码
来源:互联网 发布:30周b超数据判别男女 编辑:程序博客网 时间:2024/04/30 16:37
转自:http://blog.chinaunix.net/uid-24774106-id-2183034.html
linux中有likely 和unlikely的宏定义
#define likely(x) __builtin_expect(!!(x),1)
#define unlikely(x) __builtin_expect(!!(x),0)
__builtin_expect 宏的含义是通知编译器,对相应的分支预测进行优化。
我们知道顺序执行的代码CPU比较喜欢,因为不需要跳转。对于存在大量跳转或者说是分支的代码,CPU比较抓狂,因为CPU一般会提前 取指令 译码,甚至提前计算一些结果。如果分支预测错了,就会丢弃之前的指令,这样会影响效率。
如果我们提前知道代码 不同分支的执行概率,我们应该尽量让高概率的分支作为条件转移指令的下一条指令,这样prefetch 和decode 就会选择条件 转移指令的下一条指令,从而预测成功,这正是我们期望的。
__builtin_expect 就是通知编译器哪个分支出现的概率更高的。
__builtin_expect(!!(x),1)表示,告诉编译器,条件x为真的可能性非常高。
__builtin_expect(!!(x),0)表示,告诉编译器,条件x为假的可能性非常高。
............
(详细分析见原文)
0 0
- 利用分支预测优化代码
- iOS性能优化系列之__builtin_expect分支预测优化
- 分支预测
- 分支预测
- 分支预测
- 减少分支预测,让代码并行度更高
- 代码优化:饱和处理的分支优化
- CPU与代码优化(1):用三元操作符替代if-else以降低CPU分支预测惩罚;函数13倍提速(Unity)。
- 分支指令预测技术
- 分支指令预测技术
- 分支指令预测技术
- 分支预测(Branch Prediction)
- 什么是分支预测?
- 什么是分支预测?
- 分支预测(Branch Prediction)
- SimpleScalar动态分支预测
- 有意思的分支预测
- gcc 分支预测
- Android Studio 1.01 + BlueStacks 开发调
- 解决项目莫名奇妙的报错问题
- 国内主流Hybrid app工具平台推荐
- 作为一名非Commiter,如何向开源社区提交自己的代码
- 未来的一个目标------------------------2015年11月1日
- 利用分支预测优化代码
- Android导入项目乱码的解决方法
- C语言中指针与数组的差别
- start oracle linux
- linux下不同服务器间数据传输
- eclipse快捷键
- 拆装箱及文件流
- 关于汇编--0x01内存
- Transform