【发布时间】:2012-06-10 23:08:24
【问题描述】:
我正在编写一段关键的代码,其逻辑大致如下
if(expression is true){
//do something with extremely low latency before the nuke blows up. This branch is entered rarely, but it is the most important case
}else{
//do unimportant thing that doesnt really matter
}
我正在考虑在表达式周围使用likely() 宏,因此当它到达重要分支时,我会得到最小的延迟。
我的问题是,它的用法与建议的宏名称完全相反,因为我选择 unlikely 分支进行预取,也就是说,重要的分支不太可能发生,但它是发生时最关键的事情。
在性能方面这样做有明显的缺点吗?
【问题讨论】:
-
您没有选择任何分支来进行 prefetch,您只是标记代码以便编译器优化 可能 的情况,这可能包括为该分支生成具有更好局部性的代码,但没有明确的 prefetch.
-
#define likely(x) __builtin_expect((x),1)似乎是你想要的,你的意思是它的用法与它的名字相反? -
@nos 重要的分支不太可能发生,但发生时才是最关键的。
-
我希望我不会住在顺风。相信编译器优化器能够提出足够好的优化以赶上最后期限是非常值得信任的。
-
您确定它可以产生可衡量的差异吗?
标签: performance gcc memory likely-unlikely