C ++中的可移植分支预测提示

Emi*_* D. 5 c++ branch-prediction

在StackOverflow上已经解决了两次分支预测的问题。但是,我没有找到想要的答案。
在优化阶段,我需要避免分支预测错误。我需要做一些验证。看起来像:

if(!successCondition)
    { throw Something(); }
Run Code Online (Sandbox Code Playgroud)

当然,在大多数情况下会发生的正常预期工作流中,我们不会抛出异常,因此也不会输入if。

我知道,在常见的if / else范例中,我们可以通过将最可能的分支放在if中,而将不太可能的分支放在else中来提示编译器(Portable分支预测提示)。但是我不想(由于可读性)链接ifs:

if(successCondition)
    { whatever(); }
else
    { throw Something(); }
Run Code Online (Sandbox Code Playgroud)

因此,我了解到,默认情况下,编译器将支持if中的条目,并且我会得到分支预测错误。

我知道gcc具有优化代码的特定功能,这在Linux内核中不太可能被调用(支持分支的编程)。但这不是可移植的,我需要编写代码。

有没有办法在C ++中具有可移植的正确分支预测?

Dav*_*ing 6

C ++ 20 可能具有为此目的的属性。(委员会草案仍在审查中。)

  • 现在就在这里!https://en.cppreference.com/w/cpp/language/attributes/likely :) (2认同)