分支预测器BPU
分支预测器BPU
- 0 Intro
- 0.1 CPU执行过程
- 0.2 分支预测
- 0.2.1 TAGE预测器
- 0.2.2 跳转地址
分支预测器BPU是深入研究一个高性能处理器的一个很好的开始项目;
0 Intro
条件分支是指后续具有两路可执行的分支。可以分为跳转分支(taken branch)和不跳转分支(not-taken branch)。不跳转分支,指接下来会顺序执行紧挨着JMP的指令。跳转分支,通过JMP跳转到另外一块内存去执行那里的指令。
分支预测器的主要功能是:预测执行过程中的分支指令(Eg: if-else、循环语句等)的跳转方向,进行提前取指并执行正确的指令流;
常见的分支预测器:
1.静态预测器:不依赖于程序执行历史,总是预测跳转或者不跳转;
2.动态预测器:一般使用一个计数器来记录分支跳转和不跳转的次数,如果跳转次数多于不跳转次数,则预测分支会跳转;
3.两级自适应预测器:使用一个全局历史寄存器来记录最近的分支执行情况,并依据这些信息来预测分支的跳转方向;
4.局部历史表:该预测器策略为每个分支维护一个局部历史表,记录该分支最近的执行情况,并依据这些信息来预测分支的跳转方向;
5.相关预测器:该预测器不仅考虑分支的历史执行情况,还考虑其他相关分支的执行情况,以提高预测的准确性;
依据上面的预测器原理可以设计成不同的预测器组件;
0.1 CPU执行过程
典型CPU执行五级流水线:取指、译码、执行、访存和写回;
取指:根据程序计数器(pc)的记录,依次取出指令传递给译码单元并更新pc;
译码:根据不同的指令集架构进行指令行为区分,识别出指令的操作及操作数等;
执行:得到指令的对应的操作类型及操作数后,进行执行操作;
访存:从memory中读取或写入memory中;
写回:将指令执行的结果写回到寄存器中,用于后续指令;

为了提高CPU的性能,减少时钟浪费,一般措施是引入:引入分支预测及乱序执行技术;
乱序执行:可以提高指令执行的效率,当前条指令处于等待状态而后续的指令不依赖于前条指令时,可以优先执行后续指令,通过引入乱序执行,有效缩短指令执行时间。
分支预测:可以避免流水线的空闲等待,在指令流水型执行时,不必等待执行结果,提前进行指令预测并取指令进行后续动作,可以大大减少指令等待时间,接下来对分支预测技术进行详细介绍。
0.2 分支预测
分支预测主要用来预测下一条指令,当没有分支预测机制时,需要等待指令操作数计算出跳转地址后才能确定下一条执行指令,并由取指令单元取指令,这个过程会导致流水线处于等待状态。对于现代处理器来说,若预测结果错误,需要冲刷流水线。
预测任务主要分为两个部分:1.预测是否跳转;2.预测跳转的地址;
静态与动态预测器的区别:就是会不会参考程序的执行历史;
最典型的动态预测器:2-bit饱和计数器;----状态机表示的逻辑还是很清楚的;

最最理想的情况:可以为每一个分支都分配一个2bit饱和计数器,但是这样的做法会带来巨大的开销,因此一般情况下使用pc的一部分去寻址pattern history table(PHT),查询表中饱和计数器的数值,做出预测,但会导致不同分支寻址到相同的表项而做出错误的预测(aliasing),我们会在下面提到一些解决方法:
0.2.1 TAGE预测器
利用饱和计数器作为预测表项–TAGE预测器;

TAGE预测器核心思想:使用多个不同长度的历史寄存器来捕捉分支指令的历史行为。
TAGE的预测机制:Base Predicitor使用PC部分位来索引,3bit饱和计数器用于计算预测结果,2bit的userful counter及partial tage作为表项,构成标记预测器;
四个标记预测器采用不同长度的全局历史寄存器(GHR),四个标记预测表大小一致,因此需要先将GHR压缩为相同位宽后与PC部分位进行哈希作为索引查询表项(利用哈希解决aliasing问题),查询到tag命中(tag的哈希计算方法不同于索引的哈希计算方法),则取出该标记预测器的预测结果,预测结果由3bit的饱和计数器计算得出。
Tage最终的预测结果取GHR最长的标记预测器的预测结果。
上述表格:predictor(3bit饱和计数器)+ tag(1bit 是否命中) + u(userful counter用来记录是否需要更新)。
0.2.2 跳转地址
上面是解决的分支指令跳不跳的问题–即taken or not taken的问题;
当做出对跳转的预测时,需要查询跳转的地址,这一部分一般由BTB实现。BTB是类似于cache的结构,主要用来记录目标的跳转地址。BTB表用(partial)pc作为索引,当一个分支指令第一次执行时,记录该分支指令的目标地址并分配一个表项,当前面提到的预测器得到taken/not taken的预测结果后,在BTB中查询跳转地址。

未完待续…
[Ref]
https://www.birentech.com/Research_nstitute_details/1.html
相关文章:
分支预测器BPU
分支预测器BPU 0 Intro0.1 CPU执行过程0.2 分支预测0.2.1 TAGE预测器0.2.2 跳转地址 分支预测器BPU是深入研究一个高性能处理器的一个很好的开始项目; 0 Intro 条件分支是指后续具有两路可执行的分支。可以分为跳转分支(taken branch)和不跳转分支(not-taken branc…...
Go 系列教程 —— 数组和切片
数组 数组是同一类型元素的集合。例如,整数集合 5,8,9,79,76 形成一个数组。Go 语言中不允许混合不同类型的元素,例如包含字符串和整数的数组。(译者注:当然,如果是 interface{} 类型数组,可以包含任意类型…...
适配器模式【对象适配器模式和类适配器模式,以及具体使用场景】
2.1-适配器模式 类的适配器模式是把适配者类的API转换成为目标类的API,适配器模式使得原来由于接口不兼容而不能一起工作的那些类可以一起工作,其实在具体的开发中,对于自己系统一开始的设计不会优先考虑适配器模式,通常会将接…...
【EXCEL数据处理】保姆级教程 000016案例 EXCEL的vlookup函数。
【EXCEL数据处理】000016案例 vlookup函数。 前言:哈喽,大家好,今天给大家分享一篇文章!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 【EXCEL数据处理】保姆级教…...
【软件推荐】通过Rufus制作信创操作系统U盘安装盘 _ 统信 _ 麒麟 _ 方德
原文链接:【软件推荐】通过Rufus制作信创操作系统U盘安装盘 | 统信 | 麒麟 | 方德 Hello,大家好啊!今天给大家带来一篇关于如何使用Rufus制作信创操作系统(如统信UOS、麒麟KOS、中科方德等)的U盘启动安装盘的文章。Ruf…...
MySql 多表设计
项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本分为:一对多,多对多&a…...
wpf实现新用户页面引导
第一步 第二部 部分代码: private void show(int xh, FrameworkElement fe, string con, Visibility vis Visibility.Visible) {Point point fe.TransformToAncestor(Window.GetWindow(fe)).Transform(new Point(0, 0));//获取控件坐标点RectangleGeometry rg new Rectangl…...
【小白向】机器人入门之ROS系统的学习(Ubuntu24.04+ROS2)
目录 一.复杂的机器人系统 二.ROS机器人系统 1.简介 1.节点 2.话题 2.安装 3.测试 4.可视化 RQT: RVIZ: 显示属性: 显示状态: 一.复杂的机器人系统 依照我们现在的技术来看,机器人系统仍是极其复杂的,往…...
SNAP-MS策略:可溶性水凝胶微珠,高效表征蛋白质复合物
大家好!今天来了解一种高效的蛋白质复合物纯化和表征策略的文章——《Biofunctionalized dissolvable hydrogel microbeads enable efficient characterization of native protein complexes》发表于《Nature Communications》。蛋白质复合物在生命过程中起着关键作…...
java对象序列化Serializable的应用场景
目录 Java对象序列化的应用场景 网络通信: 对象持久化: 分布式计算: 缓存存储: 远程方法调用(RMI): 基于JMS的消息传递: Java集合类中的对象需要被存储: 对象深…...
springboot-网站开发-linux服务器部署jar格式图片存档路径问题
springboot-网站开发-linux服务器部署jar格式图片存档路径问题!近期在部署自己的网站源码,使用的是jar格式的编码格式。发布到远程服务器后,发现客户捐款的证书图片存在异常。 经过排查代码,找到了原因。下面分享给大家。 1&…...
面试--java基础
Java基础 Java 中的几种基本数据类型了解么?基本类型和包装类型的区别?包装类型的缓存机制了解么?成员变量与局部变量的区别?静态变量有什么作用?静态方法为什么不能调用非静态成员?重载和重写有什么区别?…...
NLP自然语言处理
计算机视觉和图像处理 Tensorflow入门深度神经网络图像分类目标检测图像分割OpenCVPytorchNLP自然语言处理 NLP自然语言处理 一、NLP简介二、文本预处理2.1 文本预处理简介2.2 文本处理的基本方法2.3 文本张量表示方法2.3.1 onehot编码2.3.2 word2vec编码 2.4 文本数据分析2.5…...
web自动化测试基础(从配置环境到自动化实现登录测试用例的执行,vscode如何导入自己的python包)
接下来的一段时间里我会和大家分享自动化测试相关的一些知识希望大家可以多多支持,一起进步。 一、环境的配置 前提安装好了python解释器并配好了环境,并安装好了VScode 下载的浏览器和浏览器驱动需要一样的版本号(只看大版本)。 1、安装浏览器 Chro…...
鸿蒙 Next 实战: 电子木鱼
前言 正所谓:Hello Word 是程序员学任何一门语言的第一个程序实践。这其实也是一个不错的正反馈,那如何让学习鸿蒙 Next 更有成就感呢?下面就演示一下从零开发一个鸿蒙 Next 版的电子木鱼,主打就是一个抽象! 实现要点…...
SQLite SQL调优指南及高级SQL技巧
记忆已更新 以下是《SQLite SQL调优指南及高级SQL技巧》文章的完整输出,字数目标为30000字,详细介绍并结合2024年最新技术趋势和优化策略。代码部分不计入字数统计。 SQLite SQL调优指南及高级SQL技巧 SQLite 是广泛使用的嵌入式数据库,因其…...
WordPress 6.7即将发布的新功能(和截图)
我们一直在密切关注 WordPress 6.7 的开发并测试该版本的测试版,它将带来一些令人兴奋的更新和几个新功能。 例如,我们很高兴地发现即将发布的版本将附带全新的默认主题,并对块编辑器和站点编辑体验进行大规模改进。 在本文中,我…...
SpringBoot整合QQ邮箱
SpringBoot可以通过导入依赖的方式集成多种技术,这当然少不了我们常用的邮箱,现在本章演示SpringBoot整合QQ邮箱发送邮件.... 下面按步骤进行: 1.获取QQ邮箱授权码 1.1 登录QQ邮箱 1.2 开启SMTP服务 找到下图中的SMTP服务区域,…...
低质量数据的多模态融合方法
目录 多模态融合 低质量多模态融合的核心挑战 噪声多模态数据学习 缺失模态插补 平衡多模态融合 动态多模态融合 启发式动态融合 基于注意力的动态融合 不确定性感知动态融合 论文 多模态融合 多模态融合侧重于整合多种模态的信息,以实现更准确的预测,在自动驾驶、…...
计算机毕业设计 基于Django的在线考试系统的设计与实现 Python+Django+Vue 前后端分离 附源码 讲解 文档
🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
排序算法总结(C++)
目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅
目录 前言 操作系统与驱动程序 是什么,为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中,我们在使用电子设备时,我们所输入执行的每一条指令最终大多都会作用到硬件上,比如下载一款软件最终会下载到硬盘上&am…...
密码学基础——SM4算法
博客主页:christine-rr-CSDN博客 专栏主页:密码学 📌 【今日更新】📌 对称密码算法——SM4 目录 一、国密SM系列算法概述 二、SM4算法 2.1算法背景 2.2算法特点 2.3 基本部件 2.3.1 S盒 2.3.2 非线性变换 编辑…...
C++--string的模拟实现
一,引言 string的模拟实现是只对string对象中给的主要功能经行模拟实现,其目的是加强对string的底层了解,以便于在以后的学习或者工作中更加熟练的使用string。本文中的代码仅供参考并不唯一。 二,默认成员函数 string主要有三个成员变量,…...
数据分析六部曲?
引言 上一章我们说到了数据分析六部曲,何谓六部曲呢? 其实啊,数据分析没那么难,只要掌握了下面这六个步骤,也就是数据分析六部曲,就算你是个啥都不懂的小白,也能慢慢上手做数据分析啦。 第一…...
