【问题标题】:Linux Kernel: likely() vs unlikely() [duplicate]Linux内核:可能()与不太可能()[重复]
【发布时间】:2014-02-17 15:09:41
【问题描述】:

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

作为 linux 内核的初学者,我对了解这两种方法的内部工作原理非常感兴趣。谢谢!

【问题讨论】:

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


    【解决方案1】:

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

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

    最后,预测性缓存获取可能对速度更重要。这主要取决于程序员,但对于指令缓存来说,如果编译器知道程序的哪一部分可能会被执行,并保持该部分足够小以放入缓存中,它会有所帮助。

    【讨论】:

    • AFAIK,英特尔自 P4 以来就没有使用静态分支预测提示...
    • @OliCharlesworth 我想我很小心地说明确的分支提示并不常见。但是,当 CPU 第一次遇到分支时,它必须进行猜测。通常,前向分支在第一次遇到时不会被预测为采用,而后向分支是。现代微架构仍然如此。
    猜你喜欢
    • 2016-11-16
    • 2011-07-13
    • 1970-01-01
    • 2021-12-19
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-10
    相关资源
    最近更新 更多