问题标签 [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.
linux - Linux 内核中可能/不太可能的宏是如何工作的,它们有什么好处?
我一直在研究 Linux 内核的某些部分,发现了这样的调用:
或者
我找到了它们的定义:
我知道它们是为了优化,但它们是如何工作的?使用它们可以减少多少性能/尺寸?至少在瓶颈代码中(当然是在用户空间中)是否值得麻烦(并且可能失去可移植性)。
visual-studio - MSVC 可能/不太可能等效
GCC 编译器支持 __builtin_expect 语句,用于定义可能和不太可能的宏。
例如。
是否有 Microsoft Visual C 编译器的等效语句或等效语句?
c - 可以在用户空间代码中使用可能/不太可能的宏吗?
我在 Linux 内核代码中遇到了这两个宏。我知道它们是编译器(gcc)的指令,用于在分支的情况下进行优化。我的问题是,我们可以在用户空间代码中使用这些宏吗?它会进行任何优化吗?任何示例都会非常有帮助。
c - 学习可能()和不太可能()编译器提示的示例
如何向学生展示编译器提示 ( ) 的可用性likely
和可用性?unlikely
__builtin_expect
你能写一个示例代码吗,与没有提示的代码相比,有这些提示会快几倍。
optimization - 在 Linux 内核中使用可能/不太可能作为返回参数
只是在linux内核中看到这个结构,我不明白这是什么意思。
我知道likely
/unlikely
是用__builtin_expect
这里描述的功能制成的:http:
//gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html
您可以使用 __builtin_expect 为编译器提供分支预测信息。
但是无条件分支可能有什么样的分支预测提示?
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
?
performance - gcc 可能不太可能使用宏
我正在用大致以下逻辑编写一段关键代码
我正在考虑likely()
在表达式周围使用宏,所以当它到达重要分支时,我得到最小的延迟。
我的问题是,用法与宏名称建议相反,因为我选择了不太可能的分支进行预取,即重要的分支不太可能发生,但它发生时是最关键的事情。
在性能方面这样做有明显的缺点吗?
c - “不太可能()”有什么意义?
可能重复:
Linux 内核中可能/不太可能的宏
在 Linux 内核中,我遇到了./linux/include/shed.h中的一行:
不太可能的确切意义是什么?我在.arch/x86/tools/insn_sanity.c中找到了它的定义,但它只是:
对我来说,似乎根本没有使用的意义unlikely()
。的预期目的是unlikely
什么?
c - Linux 内核:可能()与不太可能()
这两种方法似乎在 linux 内核代码中被广泛使用。我知道分支预测的基础,但我想知道这两个函数如何影响 if() 语句的操作。它们是否也在 CPU 指令流水线级别工作?还是在内核代码级别处于更高的抽象级别?
作为 linux 内核的初学者,我会对了解这两种方法的内部工作原理非常感兴趣。谢谢!
c - Linux 内核中的可能()/不太可能()宏存在分段错误
我了解可能()/不太可能()宏的工作原理,并且我也了解分支预测。不幸的是,我没有在高级编程的上下文中学习分支预测。
我想知道的是,可能/不太可能宏中的评估是否导致分段错误,这对分支预测历史甚至当前结果/管道有何影响。
我不明白如果预测的验证没有完成,我们怎么知道它是成功还是失败?