分支指令的方向预测

对于分支指令来说,它的方向只有两个:发生跳转(taken)和不发生跳转(nottaken),因此可以用1 和0 来表示。

很多分支指令的方向是有规律可循的。

方式一:last-outcom prediction

               

  • 其准确度,无法接受;

方式二:基于两位饱和计数器的分支预测

        基于两位饱和计数器的分支预测方法并不会马上使用分支指令上一次的结果,而是根据一条分支指令前两次执行的结果来预测本次的方向,这种方法可以用一个有着 4 个状态的状态机来表示。

       

  • 特点:状态机处于饱和状态时,只有两次预测失败,才会改变预测的结果;
  • 初始状态,一般建议是strongly not taken, 或者是weakly not taken;
  • 核心理念:
    • 当一条分支指令连续两次执行的方向都一样时,那么该分支指令在第三次执行时也会有同样的方向;
    • 如果一条分支指令只是偶尔发生了一次方向的改变,那么这条分支指令的预测值不会马上跟着改变;
    • 因此这种方式的分支预测就好像是有一定时间的延迟一样,分支方向偶尔的变化将会被过滤掉。
  • 为什么不继续扩大位宽?
    • 2bits的正确率已经很高了;
    • 增加位宽后,会引起复杂度的上升和更多的存储资源,开销要远大于精度的提高;

每个PC都应该有一个饱和计数器

  • 因为每一条pc,都可能是分支指令;
  • 如果是这样,那就需要2^30 * 2 bits的空间来存储;
  • 考虑到肯定不是每条都是分支指令,因此做如下简化: 
    • PHT: 记录每个PC对应的两位饱和计数器的值;其大小为:2^k * 2 bits;
    • k值的大小,对预测准确度的影响:
    • 上面的update, 有三个来源:
      • 预测结果进行更新;
        • 不行,此时的预测结果可能是错误的,不能进行更新;
      • BRU执行结果出来后,进行更新;
        • 不行,因为OOO, 可能处于在错误的分支上;
      • commit阶段,进行更新;
        • 只能在这个阶段进行更新,这个时候是最准确的;
        • 不太会影响预测精度,因为两位饱和计数器,本身是有延迟的;
    • 这种方式的问题:k bits相同的PC, 对应相同的两位饱和计数器,会互相干扰;
      • 称之为:aliasing 问题;
      • 自然有中立性的别名,和破坏性的别名;
      • 虽然有问题,但是实现简单,轻微的预测准确度降低,可以接受;
    • 如何解决aliasing问题?
      • 可以使用hash的方式;
      • hash算法,可以将32位的PC,压缩成固定长度的较小值;

                     

  • 局限性:准确率很难达到98%以上,现在的处理器,已经不会直接使用这种方式了; 

 方式三:基于局部历史的分支预测

  •  上述方式的问题:对于很有规律的分支指令,预测准确率可能会很低;
  • 上述pattern的预测准确率为0!!, 且该准确率和初始状态有关,但是也不是很高;
  • 解决方式:增加分支历史寄存器(Branch History Register, BHR);
    • 将branch inst每次的执行结果,移位到BHR中,记录其历史状态;
    • 也称之为两级分支预测

                 

  • 从上图可以看出,可能某条PC,在真正执行的时候,只会用到PHT中的几个entry;
  • 怎么知道BHR需要几个bits?
    • --找循环周期,即连续相同的数有几个bits, 则循环周期就是几个bits;
    • 11000_11000..., 循环周期为3;
  • 这种方式需要训练时间:
    • 使PHT中的饱和计数器到达饱和状态的这段时间称为训练时间(training time)
    • 在这段时间内,由于计数器没有到达饱和状态,因此分支预测的准确度是比较低的,训练时间的长短取决于BHR寄存器的位宽,一个位宽很大的BHR寄存器需要更多的时间来找出规律。
  • 这种方式的问题:
    • 每条分支指令都有自己的BHR,PHT,n bits的BHR, 需要2^n x 2bits,需要极大的空间;
    • 将每条pc的BHR组合在一起,称之为分支历史寄存器表(BHRT or BHR);
  • 解决方式:
    • 一般只使用PC的一部分来寻址BHT;
    • 使用PC的一部分,来寻址PHT;
    • ​​​​​​​
    • 当然,这种方式,也会遇到aliasing问题;
    • 极限情况下,可以将PHT简化成一个;
      • ​​​​​​​
      • 上述会有两种冲突的情况:
        • PC的k相同,此时两条PC对应同一个BHR, 也就对应同一个PHT的entry,会相互影响;
        • PC对应的BHR不同,但是其BHR的内容是一样的,对应同一个PHT entry, 也会相互影响;
      • 解决方式:对pc值做处理(可以有多种算法,此处仅举例一个);
      • ​​​​​​​
  • 总结
    •  此种方式,仅考虑分支指令,自身在过去的执行情况;
    • 如果分支指令的循环周期太长,可能需要很大的BHR,会导致很长的训练时间;PHT也会占用很多资源;
    • 如果BHR太小,又会导致不能完全体现指令的规律性;
    • 但是与基础的两位饱和计数器比较,已经是很大的进步了;

 方式四:基于全局历史的分支预测 

        这种方式,是考虑到某条分支指令,其taken与否,是与前面的分支指令的执行结果相关联;

              

        上图中,b1,b2发生,则b3一定不会发生;           

  •  因此称之为基于全局历史的分支预测;
    • 新增一个寄存器,全局历史寄存器,GHR;
    • 用有限位宽的GHR, 记录最近执行的所有分支指令的结果;
      • 每遇到一条分支指令,就在commit阶段,将分支指令的结果插入GHR右边,左边值抛弃;

           

  • 预测过程:
    • 只使用一个GHR寄存器,记录最近所有的分支指令的结果;
    • 给每个PC设置一个PHT;
    • 执行时,根据PC,找到PHT, 再根据GHR, 找到该PHT中的entry, 得到预测结果;
    • 在commit时,再根据GHR和PC,找到该entry, 根据实际结果,更新该entry;
    • 实际情况中,无法使用,因为每个PC一个PHT,占用的空间太大了; 
  • 一些解决方式:
    • ​​​​​​​
    • 4.21中的PHTS中的很多entry都没用到,因此使用图4.22的方式处理;
    • 4.22中,不同PC,可能会对应相同的GHR,从而对应相同的PHT的entry,会相互影响,这里给出两种解决方式;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

模式识别与机器学习-SVM(线性支持向量机)

线性支持向量机 线性支持向量机间隔距离学习的对偶算法算法:线性可分支持向量机学习算法线性可分支持向量机例子 谨以此博客作为复习期间的记录 线性支持向量机 在以上四条线中,都可以作为分割平面,误差率也都为0。但是那个分割平面效果更好呢&#xff1…

2022年全球软件质量效能大会(QECon上海站)-核心PPT资料下载

一、峰会简介 近年来,以云计算、移动互联网、物联网、工业互联网、人工智能、大数据及区块链等新一代信息技术构建的智能化应用和产品出现爆发式增长,突破了对于软件形态的传统认知,正以各种展现方式诠释着对新型智能软件的定义。这也使得对…

open_vins 安装(ubuntu18.04 opencv3.2.0)

openvins官网 Getting Started Installation Guide (ROS1 and ROS2) | OpenVINS Ubuntu 18.04 ROS 1 Melodic (uses OpenCV 3.2) 这里他指的是ros1 melodic,他们用的opencv3.2测试过。 open_vins 官方给的组合Ubuntu 18.04 ROS 1 Melodic (uses OpenCV 3.2) Ub…

IDEA 开发中常用的快捷键

目录 Ctrl 的快捷键 Alt 的快捷键 Shift 的快捷键 Ctrl Alt 的快捷键 Ctrl Shift 的快捷键 其他的快捷键 Ctrl 的快捷键 Ctrl F 在当前文件进行文本查找 (必备) Ctrl R 在当前文件进行文本替换 (必备) Ctrl Z 撤…

奇富科技跻身国际AI学术顶级会议ICASSP 2024,AI智能感知能力迈入新纪元

近日,2024年IEEE声学、语音与信号处理国际会议ICASSP 2024(2024 IEEE International Conference on Acoustics, Speech, and Signal Processing)宣布录用奇富科技关于语音情感计算的最新研究成果论文“MS-SENet: Enhancing Speech Emotion Re…

PHP的Laravel加一个小页面出现问题(whereRaw的用法)

1.权限更新问题 因为是已经有样例了所以html和php页面很快写出来了 然后就是页面写完了路由不知道在哪写,后来想起来之前有要开权限来着,试了一下,还是不行,不过方向是对了 这是加的路由,不过需要在更新一下权限 这…

知识库问答LangChain+LLM的二次开发:商用时的典型问题及其改进方案

前言 如之前的文章所述,我司下半年成立大模型项目团队之后,我虽兼管整个项目团队,但为让项目的推进效率更高,故分成了三大项目组 第一项目组由霍哥带头负责类似AIGC模特生成系统第二项目组由阿荀带头负责论文审稿GPT以及AI agen…

在 Windows 中安装 SQLite 数据库

在 Windows 上安装 SQLite 步骤1 请访问 SQLite 下载页面,从 Windows 区下载预编译的二进制文件 ​ 步骤2 您需要下载 sqlite-dll-win-x64-3440200.zip 和 sqlite-tools-win-x64-3440200.zip 压缩文件 步骤3 创建文件夹 C:\Program Files\SQLite,并在…

PHP的Laravel的数据库迁移

1.默认迁移文件 2.数据库迁移 在终端输入以下代码 php artisan migrate 我的报错啦!!!!! 数据库里面只有两张表,实际上应该有四张的!!! 解决方法: 反正表已…

Modbus RTU转Modbus TCP模块,RS232/485转以太网模块,YL102 多功能串口服务器模块

特点: ● Modbus RTU协议自动转换成Mobus TCP协议 ● 100M高速网卡,10/100M 自适应以太网接口 ● 支持 AUTO MDI/MDIX,可使用交叉网线或平行网线连接 ● RS232波特率从300到256000可设置 ● 工作方式可选择TCP Server, TCP Client, U…

【Leetcode】重排链表、旋转链表、反转链表||

目录 💡重排链表 题目描述 方法一: 方法二: 💡旋转链表 题目描述 方法: 💡反转链表|| 题目描述 方法: 💡总结 💡重排链表 题目描述 给定一个单链表 L 的头节…

位移贴图、凹凸贴图和法线贴图之间的差异

在线工具推荐: 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 这三种类型的贴图中的每一种都会在几何体表面上创建看起来像其他分辨…

uniApp中uView组件库的丰富布局方法

目录 基本使用 #分栏间隔 #混合布局 #分栏偏移 #对齐方式 API #Row Props #Col Props #Row Events #Col Events UniApp的uView组件库是一个丰富的UI组件库,提供了各种常用的UI组件和布局方法,帮助开发者快速构建美观、灵活的界面。下面给你写一…

(windows2012共享文件夹和防火墙设置

windows2012共享文件夹和防火墙设置 1.windows2012文件夹共享1.共享和高级共享的区别![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/0d815cc6862a4c7a99be11442fb5d950.png#pic_center) 2.windows的防火墙设置1.防火墙设置8080端口让tomot可以在主机可以访问1.新建…

Switch语句与链接—计算机系统基础

实验内容:修改二进制可重定位目标文件“phase1.o”中相关节的内容(注意不允许修改.text节和重定位节的内容),使其与main.o模块如下链接后运行时输出目标字符串“123456789” gcc -no-pie -o linkbomb main.o phase1.o ./linkbomb…

Pandas的datetime数据类型

Python的datetime对象 Python内置了datetime对象,可以在datetime库中找到 from datetime import datetime now datetime.now() now 还可以手动创建datetime t2 datetime(2023,4,21) now-t2 # datetime.timedelta(days251, seconds31427, microseconds546921)将…

C# WPF上位机开发(MVVM模式开发)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 学习过vue的同学都知道mvvm这个名词。从字面上理解,可能有点拗口,但是我们可以去理解一下它的优点是什么。mvc相信大家都明…

生产系统稳定上线600天!中国联通CUDB for OceanBase的开源共建和规模化应用

中国联通软件研究院架构部平台承载了上千应用的数据库需求,并且现存大量数据库使用过程缺少规范、缺少监控,同时还存在着数据库核心技术相关风险。为了实现核心技术自主可控,及时为用户解决线上问题、满足用户的功能需求,提供物美…

GIT提交、回滚等基本操作记录

1、add文件时warning: LF will be replaced by CRLF in .idea/workspace.xml. 原因:windows中的换行符为 CRLF, 而在Linux下的换行符为LF,所以在执行add . 时会出现以下提示 解决:git config core.autocrlf false 2、GIT命令&…

【数据库系统概论】第4章-数据库安全性

复习用,别看了 文章目录 4.1 计算机安全性概述4.2 数据库安全性控制4.2.1 用户标识和鉴定4.2.2 存取控制4.2.3 自主存取控制方法4.2.4 数据库角色4.2.5 强制存取控制 4.3 视图机制4.4 审计4.5 数据加密4.6 其他安全性保护 4.1 计算机安全性概述 不安全因素 4.2 …