gcc – BOOST_LIKELY和__builtin_expect仍然相关吗?

栏目: C++ · 发布时间: 7年前

内容简介:翻译自:https://stackoverflow.com/questions/30266738/are-boost-likely-and-builtin-expect-still-relevant
我理解 here

所解释的内容以及这些内容包括CPU对静态分支预测的提示.

我想知道这些在英特尔CPU上的相关性现在英特尔CPU已经不再支持静态预测提示,如 here 所述.另外如果我理解它现在是如何工作的,那么路径中的分支指令数量将是编译器的唯一内容.可以控制以及在运行时决定预测,获取和解码的分支路径.

鉴于此,是否存在代码中的分支提示对于针对最近的英特尔处理器的软件仍然有用的情况,可能使用条件返回或者在嵌套的if / else语句的情况下避免关键路径中的分支指令数量?

此外,如果这些仍然相关,那么gcc和其他流行编译器的任何细节都会受到赞赏.

附:我不是为了过早优化或者使用这些宏来编写代码,但是我对这个主题感兴趣,因为我正在使用一些时间关键代码,并且仍然希望尽可能减少代码混乱.

谢谢

如在您的问题的评论部分中,您正确地指出:

>在Intel x86 CPU上,操作码映射中没有静态分支预测提示;

>“冷”条件跳跃的动态分支预测倾向于预测穿透路径;

>编译器可以使用__builtin_expect重新排序if-then-else结构的路径,作为生成的程序集中的一个初始案例.

现在,考虑为多个目标架构编译的代码库,而不仅仅是Intel x86.他们中的很多人都有静态分支提示,不同复杂度的动态分支预测器,或两者兼而有之.

例如,英特尔安腾架构确实为所有类型的指令提供了广泛的预测提示系统:控制流,加载/存储等.安腾的设计目的是通过编译器对所有这些静态分配的指令插槽进行广泛优化.捆绑和提示.

因此,当(1)正确的分支预测信息难以由编译器自动推断时,__ builtin_expect仍然与(罕见)情况相关,并且2)至少一个目标体系结构上的底层硬件也已知无法可靠地预测他们动态地.鉴于某些低功耗处理器包括原始分支预测器,它们不跟踪分支历史但总是选择通过路径,它开始看起来是有益的.对于现代的英特尔x86硬件,没有那么多.

翻译自:https://stackoverflow.com/questions/30266738/are-boost-likely-and-builtin-expect-still-relevant


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

计算理论导引

计算理论导引

[美]Michael Sipser / 张立昂、王捍贫、黄雄 / 机械工业出版社 / 2000-2 / 30.00元

本书由计算理论领域的知名权威Michael Sipser撰写。他以独特的视角,综合地描述了计算机科学理论,并以清新的笔触、生动的语言给出了宽泛的数学理论,而并非拘泥于某些低层次的技术细节。在证明之前,均有“证明思路”,帮助读者理解数学形式下蕴涵的概念。同样,对于算法描述,均以直观的文字,而非伪代码给出,从而将注意力集中于算法本身,而不是某些模型。本书的内容包括三个部分:自动机与语言、可计算性理论和一起来看看 《计算理论导引》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具