【CPU微架构】分支预测(二)常用分支预测算法
上一节介绍分支预测的作用和相关指令分类。本节主要介绍常用的分支预测算法
(一)预测算法分类:
当CPU碰到跳转指令时,可以选择以下三种方法:
不预测,将流水线停滞,等到方向确定了再取接下来的指令;
固定往左或者往右,如果走错了,则返回岔路口; 简称静态预测
将岔路口信息记下来,以后就可以预测它大概率往哪儿走;简称动态预测
这三种方法都是CPU常用的一些手段,在流水线和超标量CPU诞生前,通常采用方法1将流水线停滞;在一些微控制器领域,通常为了节省功耗,采用方法2静态预测方式;在高性能CPU领域,通常以动态预测为主,并结合静态预测,以达到较高的准确度,提升cpu性能。接下来部分主要介绍动态预测算法。
(二)动态预测方法
上一节讲述到,预测的核心问题有两个:跳不跳?跳到哪里?下面介绍2-bit饱和计数器和Gshare,tage来解决跳不跳问题,btb来解决跳到哪里的问题。
2- bit 饱和计数器:
所谓2-bit计数器,即每条指令PC,通过一个2-bit的计数器,记录历史跳转情况:
(1)2-bit所能记录的数字包含00/01/10/11。
(2)分支实际跳转一次,计数器+1,不跳转,则-1。
(3)2-bit计数器当前状态为10或者11,则预测本次跳转,如果为00或者01,则预测本次不跳转。
实际研究表明,2-bit计数器相较于1-bit精度较高,如果再提高到3-bit,精度提升不明显。因此业界大多使用2-bit计数器。
Gshare 两级预测器:
何谓两级预测器?两级指的是自己的历史+别人的历史。为什么需要参考别人的历史跳转,可参考如下代码。
以上Gshare两级预测器,使用的是GR(global history register,包含所有分支的历史信息),再异或PC值,作为2-bit饱和计数器的索引值。
TAGE :
tage是一种处理器广泛使用的现代预测器,其解决的本质问题是,采用多个表支持不同长度的历史信息。
h表示的是全局历史信息,该历史信息可以是2bit(T1),也可以是4Bit(T2)…。本质上仍然是通过自己的历史+别人的历史来进行预测。只是别人的历史,长度可选。Tage详细的预测算法后面会再详细介绍。
BTB :
以上2-bit饱和计数器和两级预测器能预测是否进行跳转,但是无法预测跳到哪里?跳转地址通常通过BTB(branch target buffer)进行预测,以下为简单BTB的结构,即通过PC索引历史跳转地址。
Return stack :
上面跳转指令分类中,有一条较为特殊的指令–ret。当公共函数被调用时,ret后下一条指令可能是无法预测到。因此常用returnstack来进行指令保存:1)函数调用时,将函数函数调用的下一条指令入栈 2)当子函数ret时,将栈里的指令弹出。
【CPU微架构】分支预测(二)常用分支预测算法相关推荐
- Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (8) - 流水线前端/分支预测
Branch Prediction 分支预测机制会预先推测分支目标,让处理器在分支指令实际计算出决断结果之前就开始执行分支路径上的指令.所有的分支都会利用分支预测单元BPU做预测.分支预测单元在预测分 ...
- CPU微架构资源及监测
(未完待续,持续更新中) 目录 PMU perf map Cache类 TLB TLB结构与层级 任务切换 Perf监测 Cache 结构和层级 Perf监测 PMU perf map perf ...
- (转)【CPU微架构设计】分布式多端口(4写2读)寄存器堆设计
寄存器堆(Register File)是微处理的关键部件之一.寄存器堆往往具有多个读写端口,其中写端口往往与多个处理单元相对应.传统的方法是使用集中式寄存器堆,即一个集中式寄存器堆匹配N个处理单元.随 ...
- linux系统查看cpu微架构,Intel CPU 历代微架构名称
1 本文由来 前段时间网上买了金士顿的系统指定内存(DDR3 1600 低电压版本1.35V), 8G x 2 = 16GB.顺利安装到了Mac Mini上,运行稳定快速.今天觉得这么大内存用在家用的 ...
- 处理器架构 (三) 架构指令集微架构ISA 等概念
简述 指令集架构标准 RISC与CISC RISC(全称Reduced Instruction Set Computer,精简指令系统计算机)则是一套优化过的指令架构 更像是 指令集架构标准,并不是实 ...
- Intel® Nehalem/Westmere架构/微架构/流水线 (2) - 流水线概述
Microarchitecture Pipeline Intel Nehalem微架构延续了65nm制程的Intel Core微架构上的4宽度流水线.下图是在Intel Core i7处理器上采用的N ...
- 华为(英国)招聘CPU/GPU架构及系统软件工程师
关注公众号,获取更多AI领域发展机会 岗位一 『职位名称』 Graduate CPU Architect(全职:CPU 架构师) 『工作职责』 通过工作负荷和 CPU 性能分析来识别 CPU 瓶颈 建 ...
- 嵌入式_cpu微架构、互连结构与总线
一.cpu微架构 (一).定义 处理器微架构又称为微体系结构/微处理器体系结构,是在计算机工程中,将一种给 定的 指令集架构在处理器中执行的方法和具体硬件实现方案. • 一种给定指令集可以在不同的微架 ...
- 【Java】流程控制 - 顺序结构、 选择(分支)结构(单分支、双分支、多分支、嵌套)、循环结构(for、while、do...while)、跳转语句(break、continue)
流程控制语句结构 文章目录 流程控制语句结构 一. 顺序结构 1. 输出语句 2. 输入语句 3.code 二.复合语句 三. 分支结构 1. 条件判断 1.单分支结构 2.双分支结构 3.多分支结构 ...
- 英特尔发布CPU新架构,突破性采用3D堆栈法
当地时间12月12日,英特尔在"架构日"活动中公布了下一代CPU微架构-Sunny Cove,这个微架构采用10纳米工艺制造,会成为英特尔下一代酷睿和至强处理器的基础.一同发布的还 ...
最新文章
- Jquery 改变样式
- multisim 12.0安装教程
- window 程序报错 自动重启_好程序员web前端教程之详解JavaScript严格模式
- java jtable应用源码_JTable的应用(一)
- dart --- 环境配置
- SQL Server 实现递归获取层级数据
- Java 8 异步 API、循环、日期,用好提高生产力!
- 2022年软考信息安全工程师备考历年真题汇总
- 2.6 数值分析: 追赶法
- 零跑汽车冲刺港股:年营收31亿 去年曾募资88亿
- 通过uc_client接口方式,更新discuz会员头像
- python re正则提取ip地址_Python正则表达式匹配和提取IP地址
- 【Gitee + Hexo】从0开始搭建自己的博客网站
- android开发指纹解锁,Android-指纹解锁技术
- pycharm报错warning: iCCP: known incorrect sRGB profile
- 浮点加减法中什么时候左规什么时候右规
- tomcat同时部署两个项目的问题
- Delphi实现悬浮的卡拉OK字幕
- 使用swiper实现视频和图片混合轮播
- 好用的文件比较软件Beyond Compare 4软件新手入门