分支预测在StackOverflow上已经被讨论了几次。但是,我没有特别找到我正在寻找的答案。
在优化阶段,我需要避免分支错误预测。而且我需要做一些验证。看起来像:
if(!successCondition)
{ throw Something(); }
当然,在正常的预期工作流程中,大多数情况下我们不会抛出异常,因此也不会进入if语句。
我知道在常见的if/else范式中,我们可以通过将最可能的分支放在if中,较不可能的放在else中(可移植的分支预测提示)来提示编译器。但是为了可读性,我不想链接这些if语句。
if(successCondition)
{ whatever(); }
else
{ throw Something(); }
因此,我理解编译器默认会偏向于if语句中的条目,这将导致分支预测错误。
我知道gcc有一个特定的优化代码的函数,在Linux内核中称为unlikely(Branch-aware programming)。但是它不具备可移植性,而我需要我的代码具备可移植性。
在C++中是否有一种方式可以保持正确的分支预测并具备可移植性?
if
-else
块的条件不会影响生成的汇编代码,即使任何观察者都可以轻松地看出在一个版本中if
块的可能性较小,在另一个版本中else
块的可能性较小。编译器对于这些类型的结构进行了积极优化,试图突破这种优化并不能使您的代码更快 - 只会让它更难以阅读。 - Xirema