gpt4 book ai didi

c++ - GCC 是否有编译器提示强制分支预测始终以某种方式进行?

转载 作者:IT老高 更新时间:2023-10-28 11:52:40 25 4
gpt4 key购买 nike

对于英特尔架构,是否有办法指示 GCC 编译器生成始终强制在我的代码中以特定方式进行分支预测的代码?英特尔硬件甚至支持这个吗?其他编译器或硬件呢?

我会在 C++ 代码中使用它,我知道我希望快速运行的情况,并且不关心当另一个分支需要被采用时的减速,即使它最近已经采用了该分支。

for (;;) {
if (normal) { // How to tell compiler to always branch predict true value?
doSomethingNormal();
} else {
exceptionalCase();
}
}

作为 Evdzhan Mustafa 的后续问题,提示是否可以仅指定处理器第一次遇到指令时的提示,所有后续分支预测,正常运行?

最佳答案

GCC 支持函数 __builtin_expect(long exp, long c) 来提供这种特性。您可以查看文档 here .

其中 exp 是使用的条件,c 是预期值。例如,在您想要的情况下

if (__builtin_expect(normal, 1))

由于语法笨拙,通常通过定义两个自定义宏来使用,例如

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

只是为了减轻任务。

请注意:

  1. 这是非标准的
  2. 编译器/cpu 分支预测器在决定此类事情方面可能比您更熟练,因此这可能是过早的微优化

关于c++ - GCC 是否有编译器提示强制分支预测始终以某种方式进行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30130930/

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