分支预测机制

news2024/11/17 0:48:23

在Linux中,__predict_false__predict_true是用于优化分支预测的宏。这些宏通过向编译器提供关于条件分支可能结果的提示,来帮助生成更有效的机器代码。

__predict_false宏扩展为一个属性,该属性指示编译器预测给定分支可能为假。这意味着,如果你有一个条件语句,你认为在大多数情况下该条件都不会满足,那么你可以使用__predict_false宏。这样,编译器就会生成一些优化的指令,使得在该条件为假时的执行路径更加高效。

这种优化主要是针对现代处理器的分支预测机制。处理器会尝试预测条件分支的结果,以便提前获取和执行指令。如果预测正确,那么这个跳转指令基本上是免费的,不需要任何额外的处理周期。然而,如果预测错误,那么处理器就需要清空其指令流水线,并重新获取和执行指令,这可能会花费几个处理周期。

因此,使用__predict_false__predict_true这样的宏可以帮助编译器生成更有效的代码,但前提是你对代码的行为有足够的理解,并且能够准确地预测哪些条件更可能为真或假。在大多数情况下,除非你正在优化一个性能瓶颈,否则可能没有必要使用这些宏。


编译器和处理器通过一种称为分支预测的技术来处理条件分支。这种技术的目标是改进指令流水线中的流动。

编译器在编译时可以进行一些优化,以提高分支预测的准确性。例如,它可以确定最高概率路径,并在整个路径上进行优化,而不仅仅是在基本块内。有时,编译器会生成利用硬件分支预测能力的间接分支代码。

处理器在运行时进行动态分支预测。它会尝试预测条件跳转是否会被采取。如果预测正确,那么这个跳转指令基本上是免费的,不需要任何额外的处理周期。然而,如果预测错误,那么处理器就需要清空其指令流水线,并重新获取和执行指令,这可能会花费几个处理周期。

现代微处理器通常有很长的流水线,这使得错误预测的延迟在10到20个时钟周期之间。因此,使流水线更长会增加对更先进的分支预测器的需求。

值得注意的是,分支预测并不等同于分支目标预测。分支预测试图猜测一个条件跳转是否会被采取。而分支目标预测试图在通过解码和执行指令本身之前猜测一个已采取的条件或无条件跳转的目标。这两种预测通常会合并到同一电路中。

参考nuttx源码,源码路径在:https://github.com/apache/nuttx/blob/master/include/nuttx/compiler.h#L202-L203

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1142697.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

jdk20 升级, gson 的坑

项目部署在服务器中请求报下面这个错 java.lang.reflect.InaccessibleObjectException: Unable to make private java.util.Collections$EmptyList() accessible: module java.base does not "opens java.util" to unnamed module 2c35e847at java.base/java.lang.r…

制作一个简单的C语言词法分析程序

1.分析组成 C语言的程序中,有很单词多符号和保留字。一些单词符号还有对应的左线性文法。所以我们需要先做出一个单词字符表,给出对应的识别码,然后跟据对应的表格来写出程序 2.程序设计 程序主要有循环判断构成。不需推理即可产生的符号我…

【需水预测】区域需水量预测方法-定额法

区域需水量预测方法-定额法 1 生活用水需水量预测1.1 人口指标预测1.2 居民生活综合用水定额分析 2 农业需水量预测2.1 农田灌溉需水量2.2 林牧渔业需水量另:灌溉面积定义 3 工业需水量预测3.1 工业增加值发展指标预测 4 生态需水量预测4.1 生态环境面积发展指标预测…

APP自动化测试 ---- Appium介绍及运行原理

在面试APP自动化时,有的面试官可能会问Appium的运行原理,以下介绍Appium运行原理。 一、Appium介绍 1.Appium概念 Appium是一个开源测试自动化框架,可用于原生,混合和移动Web应用程序测试。它使用WebDriver协议驱动IOS&#xf…

工具分享:腾讯云价格计算器使用方法_服务器报价不求人

腾讯云服务器价格计算器可以一键计算出云服务器的精准报价,包括CVM实例规格价格、CPU内存费用、公网带宽收费、存储系统盘和数据盘详细费用,腾讯云百科txybk.com分享腾讯云价格计算器链接入口、使用方法说明: 腾讯云服务器价格计算器 打开腾…

项目经验分享|openGauss 陈贤文:受益于开源,回馈于开源

开源之夏 项目经验分享 2023 #08 # 关于 openGauss 社区 openGauss是一款开源关系型数据库管理系统,采用木兰宽松许可证v2发行。openGauss内核深度融合华为在数据库领域多年的经验,结合企业级场景需求,持续构建竞争力特性。同时openGauss也是…

树莓派基金会近日发布了新版基于 Debian 的树莓派操作系统

导读树莓派基金会(Raspberry Pi Foundation)近日发布了新版基于 Debian 的树莓派操作系统(Raspberry Pi OS),为树莓派单板电脑带来了新的书虫基础和一些重大变化。 新版 Raspberry Pi OS 的最大变化是它现在基于最新的…

为了让女儿学打字,开发了个免费的打字网站

以后计算机也算是门手艺活了,想要增加沟通效率还是从入门打字开始。 之前小时候也玩过各种各样的打字游戏,警察抓小偷、打蜜蜂之类的,小的时候也没有各种教程不方便,一指禅玩这种游戏真的是累死,也没有任何提示。急得直…

如何分离一个要素的shp矢量文件:利用ArcGIS分割工具

下面介绍如何用ArcGIS对含有多个分离区域的一整个面要素进行分割 如下图,现在想要将下方的长形shp提取出来,首先打开shp文件: 右击空白处查看该矢量文件的投影信息: 在文件夹中新建shp文件,设置一样的投影&#xff1a…

docker - win10 家庭版 开始虚拟化

文章目录 前言docker - win10 家庭版 开始虚拟化 前言 如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊…

ETCD备份与恢复

文章目录 主要内容一.备份1.先安装etcd客户端代码如下(示例): 2.备份成文件并查看代码如下(示例): 3.解释 二.恢复1.先停止服务代码如下(示例): 2.删除现有ETCD,并恢复数据代码如下(…

SpringBoot拉取高德天气预报数据

SpringBoot拉取高德天气预报数据 一、账号申请 1.整体流程 天气文档:https://lbs.amap.com/api/webservice/guide/api/weatherinfo 整体流程可参考:https://lbs.amap.com/api/webservice/guide/create-project/get-key 2.注册账号 注册地址&#x…

cmake 使用include 分层加载

include命令 说到cmake,可能最先想到的就是CmakeLists.txt文件,但是在很多情况下,也会看到.cmake文件。 cmake文件是干什么的,甚至会想.cmake文件是不是cmake的正统文件,而CmakeLists.txt并不是。但其实,Cm…

IP 地址查询,快速查询自己的 IP 地址

文章目录 在线结果 在线 http://myip.top/ 结果

c++ queue 的使用

目录 1. 默认构造函数 2. void push(const T& x) 3. void pop() 4. T& front() 5. T& back() 6. bool empty() 7. size_t size() 下面是 queue 的简介,来自 queue - C Reference (cplusplus.com) 的中文翻译,看看就行了&#xff…

使用Node.js软件包管理器(npm)安装TypeScript

安装node.js node.js的安装很简单,这里不再赘述,如果大家有需要,可以看一下这个:https://blog.csdn.net/David_house/article/details/123218488 检验电脑上node.js是否安装成功,或者是否已经安装node.js&#xff0c…

22款奔驰GLE450升级香氛负离子 清新淡雅

香氛负离子系统是由香氛系统和负离子发生器组成的一套配置,也可以单独加装香氛系统或者是负离子发生器,香氛的主要作用就是通过香氛外壳吸收原厂的香水再通过空调管输送到内饰中,而负离子的作用就是安装在空气管中通过释放电离子来打击空气中…

11月14号|Move生态Meetup相约浪漫土耳其

Move是基于Rust编程语言,由Mysten Labs联合创始人兼CTO Sam Blackshear在Meta的Libra项目中开发而来,旨在为开发者提供比现有区块链语言更通用的开发语言。Sam的目标是创建Web3的JavaScript,即一种跨平台语言,使开发人员能够在多个…

Java NIO 开发

Java NIO 新篇介绍加示例代码 Java NIO(New IO)是 JDK 1.4 引入的一组新的 I/O API,用于支持非阻塞式 I/O 操作。相比传统的 Java IO API,NIO 提供了更快、更灵活的 I/O 操作方式,可以用于构建高性能网络应用程序。 Ja…

电机控制方案汇总

以IR2104/IR2184为例(第1讲) NXP智能车永磁直流有刷电动机驱动器 (1)BTN7971B BTN7970 BTN7960 半桥 两片芯片即可驱动一个电机。好用 有个队有KEA128例程 (2)HIP4082 全桥 一片芯片4个MOS驱动一个电机。 好用 (3)IR2184 半桥 两片芯片4个MOS驱动一个电机…