Linux内核:可能()与不太可能()

时间:2014-01-26 21:46:09

标签: c if-statement linux-kernel branch-prediction likely-unlikely

这两种方法似乎在linux内核代码中广泛使用。我知道分支预测的基础,但我想知道这两个函数如何影响if()语句的操作。它们也在CPU指令管道级别工作吗?或者它在内核代码级别处于更高的抽象级别?

作为linux内核的入门者,我非常有兴趣了解这两种方法的内部工作原理。谢谢!

1 个答案:

答案 0 :(得分:0)

在某些(微)架构上,存在分支提示,编译器可以将其编码到指令中,以告知CPU分支预测单元是否可能采用该分支。

在其他体系结构中,分支预测单元的静态部分已经足够好地记录,可以使用它来生成更快的代码。 例如,在大多数现代x86上,前向分支被静态预测为未被采用,而后向分支被预测为采用(以实现更快的循环)。

最后,预测缓存提取可能对速度更重要。这主要取决于程序员,但是对于指令缓存,如果编译器知道程序的哪个部分可能会被执行,并且保持该部分足够小以适应缓存,则可以提供帮助。