CPU性能优化:分支预测

news2024/12/24 0:55:32

    条件跳转引起的控制冒险虽然也可以通过在流水线中插入空泡来避免,但是当流水线很深时,需要插入更多的空泡。一个20级的流水线为例,如果一条指令需要上一条指令的执行结束才能执行,则需要在这两条指令之间插入19个空泡,相当于流水线要暂停19个时钟周期,这是CPU无法接受的。

    如图所示,为了避免这种情况发生,现在CPU流水线在取指和译码的时候,需要对跳转指令进行分析,预测可能执行的分支和路径,防止预取错误的分支路径指令给流水线带来停顿。

    

根据工作方式的不同,分支预测分为静态预测和动态预测,静态预测在程序编译时通过编译器进行分支预测,这种预测方式对于循环程序最有效,可以根据循环边界反复取指。而对于跳转分支,静态预测就比较简单粗暴了。一般都是默认不跳转,按照顺序执行,我们在编写有跳转分支的程序时,记得把大概率发生的执行代码放在前面。这样就能明显提高执行效率。

    动态预测指在程序运行时进行预测,不同的软件,不同的程序分支行为,我们可以采取不同的算法去提高预测的准确率,如我们可以根据程序历史执行路径信息来预测本次跳转行为,常见的动态预测方式有1-bit动态预测,n-bit动态预测,下一行预测,双模太预测,局部分支预测。融合分支预测,循环预测等。随着大量新的应用软件出现,为了应对新的程序逻辑行为,分支预测器也越来越复杂,占用芯片体积越来越大。除了Cache,就是分支预测器体积最大了。

   分支预测技术是提高CPU性能的一项关键技术,本质是去除指令之间的相关性,让程序更高效运行,一个CPU性能高不高,不仅取决于流水线多深,主频多高,cache多大,还和分支预测技术息息相关。一个分支预测器好不好,我们可以两个方面衡量,分支判断速度和预测准确率,目前分支预测技术可以达到95%的预测准确率。

    2.5.5 乱序执行

    我们编写的代码指令序列按照顺序依次存储在RAM中,当程序执行时,PC指针会自动到RAM中去取,然后CPU按照顺序一条条一次执行,这种称为顺序执行。当这些指令前后有数据依赖关系时,就会产生数据冒险,我们可以在指令序列之间添加空指令,让流水线暂时停顿来避免流水线中预期的指令被冲刷掉。除此之外,我们还可以通过乱序执行来避免流水线冲突。

    造成流水线冲突的根源在于指令之间存在相关性。前后指令之间要么存在数据冒险,要么产生结构冒险。我们可以通过重排指令的执行顺序,而不是填充空指令来去掉这种依赖。

ADD R2,R1,R0

SUB R4,R3,R2

ADD R7,R6,R5

ADD R10,R9,R8

在上面程序中,第二条sub指令要使用第一条指令的运算结果,要等到第一条ADD指令执行结束,于是就产生了数据冒险,我们可以通过插入空指令来避免。

ADD R2,R1,R0

NOP 被另外的流水线执行

NOP 被另外的流水线执行

SUB R4,R3,R2 

ADD R7,R6,R5

ADD R10,R9,R8

  通过暂停了流水线2个时钟周期,避免了流水线冲突,当指令序列中国呢存在依赖关系时,就需要在流水线中不断插入空指令,造成流水线频繁的停顿,为了避免这种情况,我们对指令重排。

ADD R2,R1,R0

ADD R7,R6,R5 提前执行,把流水线占着

ADD R10,R9,R8 提前执行,把流水线占着

SUB R4,R3,R2 安排到和第一条指令同一个流水线。

等第一个ADD执行完才能开始执行最后一个SUB,就不存在数据冒险。

    支持乱序执行的CPU处理器,内部一般有专门的乱序执行逻辑电路,该控制电路会对当前指令进行分析。看能否提前执行。

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

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

相关文章

STL详解— list类的模拟实现

本文章所需实现三个类及其每个类里的各个函数接口总览&#xff1a; namespace zhc {//模拟实现list当中的结点类template<class T>struct list_node{//成员函数list_node(const T& val T()); //构造函数//成员变量T _val; //数据域list_node<T&g…

推荐系统简介

文章目录 推荐系统的分类基于人口统计学的推荐算法基于内容的推荐算法基于协同过滤的推荐算法协同过滤&#xff08;CF&#xff09;推荐方法基于近邻基于用户的协同过滤基于物品的协同过滤 混合推荐推荐系统实验方法离线实验用户调查在线实验 学习下b站上尚硅谷的推荐系统的课程…

易观千帆 | 2023年4月证券APP月活跃用户规模盘点

易观&#xff1a;2023年4月证券服务应用活跃人数13924.88万人&#xff0c;相较上月&#xff0c;环比下降1.46%&#xff0c;同比增长3.64%&#xff1b;2023年4月自营类证券服务应用Top10 活跃人数6144.02万人&#xff0c;环比下降0.01%&#xff1b;2023年4月第三方证券服务应用T…

「远程开发」VSCode使用SSH远程linux服务器 - 公网远程连接(1)

文章目录 前言视频教程1、安装OpenSSH2、vscode配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网地址远程 转…

chatgpt赋能python:PythonWorkon-使Python多环境管理更加轻松

Python Workon - 使Python多环境管理更加轻松 Python是一种广泛使用的高级编程语言&#xff0c;在众多开发者中应用广泛。在实际工作中&#xff0c;我们有时需要使用不同版本的Python或不同的环境来开发不同的项目。这时候就需要一个Python环境管理器来帮助我们快速地进行环境…

chatgpt赋能python:PythonWSDL:实现更好的Web服务和集成

Python WSDL&#xff1a;实现更好的Web服务和集成 在现代的互联网世界中&#xff0c;我们面临着不断增长的需求&#xff0c;需要实现与不同系统之间的交互和数据共享。Web服务是一种解决方案&#xff0c;允许应用程序通过互联网相互通信。其中Web服务描述语言&#xff08;WSDL…

python+django在线音乐分享网站系统vue_6045i.

本系统主要包括管理员和用户&#xff1a;主要包括个人中心、用户管理、通知公告管理、音乐类型管理、音乐分享管理、音乐榜单管理、音乐论坛、系统管理等功能的管理系统。 (1)绪论 系统的开发背景&#xff0c;意义和系统状况等&#xff0c;详细讲述了系统的用处&#xff0c;对本…

iOS App外包开发解决闪退问题

在iOS应用开发中&#xff0c;闪退&#xff08;应用程序意外退出&#xff09;是一个常见的问题。为了查找和解决闪退问题&#xff0c;可以使用以下工具和方法。今天和大家分享这方面的知识&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开…

扬州晶澳-年产3GW高性能太阳能光伏组件项目Acrel-3000WEB电能管理系统的设计及应用

摘要&#xff1a;在信息时代&#xff0c;电力信息系统的应用促迚了电力企业的収展&#xff0c;增强了电力系统运行的安全性与稳定性&#xff0c;对满足用户需求其有重要意义。随着国家电网改革政策的逐步推进和落实&#xff0c;Acrel-3000WEB电能管理系统运用互联网和大数据技术…

数据库索引结构(4)---基于B+树的查询

回顾我们学习的线性和课扩展哈希 他们都只能进行等值操作 但是不能进行区间操作 为了进行区间操作和关系的比较和速度考虑 引入数据结构B树 序言:磁盘存储 1. mysql面试题-深入理解B树原理_哔哩哔哩_bilibili 信息是存取在磁盘块中的每个 磁盘最小的存取单位是512KB 要定位磁…

多态的原理、单继承和多继承的虚函数表、以及虚函数表的打印。

一、多态原理 1、下面这个结果是多少&#xff1f; class A { public:virtual void func(){cout << "func()" << endl;}private:int _a 1; };int main() {printf("%d\n", sizeof(A));return 0; } 是 4&#xff1f;8&#xff1f;还是多少&am…

Python星际生存小游戏开发

项目介绍&#xff1a; 项目名称&#xff1a;python星际生存游戏 编程语言&#xff1a;python 用到关键知识&#xff1a;pygame模块&#xff0c;面向对象思想&#xff0c;python基础等等 实现功能&#xff1a; 1&#xff1a;飞机的运动&#xff0c;发射子弹&#xff0c;飞机…

深入探索Apache Flume:大数据领域的数据采集神器【上进小菜猪大数据系列】

&#x1f4ec;&#x1f4ec;我是上进小菜猪&#xff0c;沈工大软件工程专业&#xff0c;爱好敲代码&#xff0c;持续输出干货&#xff0c;欢迎关注。 引言&#xff1a; 随着大数据技术的快速发展&#xff0c;企业和组织需要从各种来源采集海量数据。数据采集是大数据处理流程中…

DTO、VO、BO、PO、DO理解等相关的转换

1、什么是DTO、VO、BO、PO、DO、POJO pojo(domain/entity)一般定义实体类&#xff0c;实体类又被分为VO、BO、 PO、 DTO、DO&#xff1b;通过各层POJO的使用&#xff0c;有助于提高代码的可读性和可维护性。 2、阿里巴巴Java开发规范 DO(Data Object):此对象与数据库表结构一…

chatgpt赋能python:Python的BeautifulSoup库和find_all()方法

Python的Beautiful Soup库和find_all()方法 在Web爬虫中&#xff0c;我们需要从网页中找到特定的HTML标记或属性&#xff0c;以便提取我们需要的数据。对于Python开发人员而言&#xff0c;Beautiful Soup是最流行的解析HTML和XML的库之一。该库可以让我们轻松地从HTML解析器中…

ECMAScript 6 新特性详解

目录 ECMAScript 6 简介 1、箭头函数 2、类 3、增强对象字面量 4、模板字符串 5、解构赋值 6、默认参数、剩余参数、展开操作符 7、let、const 8、迭代器&#xff08;迭代器&#xff09;、for of 9、Generators&#xff08;生成器&#xff09; 10、Unicode 11、模块…

GPC_APDU_Transport_over_SPI-I2C_v1.0_PublicRelease

GPC_APDU_Transport_over_SPI-I2C_v1.0_PublicRelease.pdf 目录 1 简介 越来越多的设备&#xff0c;如移动设备、可穿戴设备或其他 IoT&#xff08;物联网&#xff09;设备现在正在使用焊接安全元件 (SE)。 这产生了支持 SPI 或 I2C 等物理接口的新需求&#xff0c;以代替以前…

高阶python | 字符串高级功能

不可变的字符串 python中的数据类型分为可变的和不可变的两种&#xff0c;字符串属于不可变的数据类型。 不可变的数据类型可以作为字典的键使用&#xff0c;例如&#xff1a; my_dict {Lily: 68, Harry: 98, Lucy: 79} 不可变类型的另一个优点就是有助于进行内部消化&…

ISO_IEC_7816-3

介绍 ISO/IEC 7816 是一系列标准&#xff0c;规定了集成电路卡和此类卡的使用 互换。 这些卡是用于在外部世界和卡中的集成电路之间协商的信息交换的识别卡。 作为信息交换的结果&#xff0c;卡传递信息&#xff08;计算结果、存储的数据&#xff09;和/或修改其内容&#xff0…