问题标签 [likely-unlikely]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
10 回答
175419 浏览

linux - Linux 内核中可能/不太可能的宏是如何工作的,它们有什么好处?

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

或者

我找到了它们的定义:

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

0 投票
8 回答
22277 浏览

visual-studio - MSVC 可能/不太可能等效

GCC 编译器支持 __builtin_expect 语句,用于定义可能和不太可能的宏。

例如。

是否有 Microsoft Visual C 编译器的等效语句或等效语句?

0 投票
3 回答
13530 浏览

c - 可以在用户空间代码中使用可能/不太可能的宏吗?

我在 Linux 内核代码中遇到了这两个宏。我知道它们是编译器(gcc)的指令,用于在分支的情况下进行优化。我的问题是,我们可以在用户空间代码中使用这些宏吗?它会进行任何优化吗?任何示例都会非常有帮助。

0 投票
2 回答
7072 浏览

c - 学习可能()和不太可能()编译器提示的示例

如何向学生展示编译器提示 ( ) 的可用性likely和可用性?unlikely__builtin_expect

你能写一个示例代码吗,与没有提示的代码相比,有这些提示会快几倍。

0 投票
2 回答
415 浏览

optimization - 在 Linux 内核中使用可能/不太可能作为返回参数

只是在linux内核中看到这个结构,我不明白这是什么意思。

我知道likely/unlikely是用__builtin_expect这里描述的功能制成的:http: //gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html

您可以使用 __builtin_expect 为编译器提供分支预测信息。

但是无条件分支可能有什么样的分支预测提示?

0 投票
7 回答
72979 浏览

c - GCC 的 __builtin_expect 在 if else 语句中的优势是什么?

我遇到了一个#define他们使用的__builtin_expect.

文档说:

内置功能:long __builtin_expect (long exp, long c)

您可以使用__builtin_expect为编译器提供分支预测信息。一般来说,您应该更喜欢为此使用实际的配置文件反馈 ( -fprofile-arcs),因为众所周知,程序员不善于预测他们的程序实际执行情况。但是,有些应用程序很难收集这些数据。

返回值是 的值exp,它应该是一个整数表达式。内置的语义是期望 exp == c. 例如:

将表明我们不希望调用foo,因为我们希望x为零。

那么为什么不直接使用:

而不是复杂的语法__builtin_expect

0 投票
2 回答
4801 浏览

performance - gcc 可能不太可能使用宏

我正在用大致以下逻辑编写一段关键代码

我正在考虑likely()在表达式周围使用宏,所以当它到达重要分支时,我得到最小的延迟。

我的问题是,用法与宏名称建议相反,因为我选择了不太可能的分支进行预取,即重要的分支不太可能发生,但它发生时是最关键的事情。

在性能方面这样做有明显的缺点吗?

0 投票
0 回答
200 浏览

c - “不太可能()”有什么意义?

可能重复:
Linux 内核中可能/不太可能的宏

在 Linux 内核中,我遇到了./linux/include/shed.h中的一行:

不太可能的确切意义是什么?我在.arch/x86/tools/insn_sanity.c中找到了它的定义,但它只是:

对我来说,似乎根本没有使用的意义unlikely()。的预期目的是unlikely什么?

0 投票
1 回答
2342 浏览

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

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

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

0 投票
1 回答
740 浏览

c - Linux 内核中的可能()/不太可能()宏存在分段错误

我了解可能()/不太可能()宏的工作原理,并且我也了解分支预测。不幸的是,我没有在高级编程的上下文中学习分支预测。

我想知道的是,可能/不太可能宏中的评估是否导致分段错误,这对分支预测历史甚至当前结果/管道有何影响。

我不明白如果预测的验证没有完成,我们怎么知道它是成功还是失败?