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


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

查看所有标签

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

移动Web手册

移动Web手册

Peter-Paul Koch(彼得-保罗 科赫) / 奇舞团 / 电子工业出版社 / 2015-4 / 65.00元

《移动Web手册(双色)》主要讲解了移动Web开发和传统PC网站开发的不同之处。作者首先对移动互联网相关的运营商、设备、操作系统和软件进行了简单的介绍,让读者理解移动开发的复杂之处。接下来对移动设备上的各种浏览器进行了详细介绍,以及这些浏览器的市场占有率、特性支持等。《移动Web手册(双色)》为那些想进入移动Web开发领域的人提供了一些指导性的建议并对移动Web开发的未来进行了展望。 《移动......一起来看看 《移动Web手册》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具