gpt4 book ai didi

linux - Linux 内核中的 likely/unlikely 宏是如何工作的,它们有什么好处?

转载 作者:行者123 更新时间:2023-12-04 10:07:17 25 4
gpt4 key购买 nike

我一直在深入研究 Linux 内核的某些部分,发现了这样的调用:

if (unlikely(fd < 0))
{
/* Do something */
}

if (likely(!err))
{
/* Do something */
}

我找到了它们的定义:

#define likely(x)       __builtin_expect((x),1)
#define unlikely(x) __builtin_expect((x),0)

我知道它们是为了优化,但它们是如何工作的?使用它们可以预期降低多少性能/尺寸?至少在瓶颈代码中(当然在用户空间中)是否值得麻烦(并且可能失去可移植性)。

最佳答案

它们提示编译器发出指令,这些指令将导致分支预测有利于跳转指令的“可能”一侧。这可能是一个巨大的胜利,如果预测是正确的,这意味着跳转指令基本上是免费的,并且将占用零个周期。另一方面,如果预测错误,则意味着需要刷新处理器流水线,这可能会花费几个周期。只要预测在大多数情况下都是正确的,这往往有利于性能。

像所有此类性能优化一样,您应该只在广泛分析后执行此操作,以确保代码确实处于瓶颈中,并且可能考虑到微观性质,它正在紧密循环中运行。一般来说,Linux 开发人员都非常有经验,所以我想他们会那样做。他们并不太关心可移植性,因为他们只针对 gcc,而且他们非常了解他们希望它生成的程序集。

关于linux - Linux 内核中的 likely/unlikely 宏是如何工作的,它们有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59695542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com