利用分支预测优化代码

转自: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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值