gcc – BOOST_LIKELY和__builtin_expect仍然相关吗?

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

内容简介:翻译自: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


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

查看所有标签

猜你喜欢:

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

GWT in Action

GWT in Action

Robert Hanson、Adam Tacy / Manning Publications / 2007-06-05 / USD 49.99

This book will show Java developers how to use the Google Web Toolkit (GWT) to rapidly create rich web-based applications using their existing skills. It will cover the full development cycle, from ......一起来看看 《GWT in Action》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

在线进制转换器
在线进制转换器

各进制数互转换器

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

在线 XML 格式化压缩工具