Onur Mutlu 18-447 Lecture9 分支预测-1
=============== 第一部分:branch prediction ===========
1. 最简单的分支预测:总是预测下一条指令的地址在 PC+4
如何让这种分支预测更加有效呢?
Idea1: 让程序中的下一条指令更有可能是实际运行中的下一条指令(基于profile的代码放置)
Idea2: 尽可能去除掉程序中的控制流指令
Idea3: 把多个分支条件组合成一个分支条件,从而只需要一个分支指令
Idea4: 把控制依赖转化成数据依赖(比如使用一种条件move指令,CMOV)
以下是一个CMOV(条件执行)的例子:
可以看到一共是三条指令,替换掉了原先的带有分支跳转(修改PC)的三条指令
看起来,指令并没有减少。但这里的好处是,可以保证下一条指令是PC+4,避免了流水线的冲刷
像ADDt 这样的指令目前还不存在于任何ISA中,因为这需要让ADDt 支持三个数据源,这将大幅修改ISA,影响到我们现有的软件、优化技术。
下图(标题是Predicated Execution)是执行预测的优缺点:
====================== 第二部分:branch delay slot ========================
解释一下上面这张PPT:
延迟branch技术指的是,把N个指令移动到分支指令的后面,这N个指令都是不会影响分支结果的,无论分支的结果如何,它们总会被执行
使用延迟branch技术之后,流水线在执行分支指令时,会继续执行后面的N个指令,在后面N个指令执行完毕后,流水线也已经知道了分支指令的结果,此时可以无延迟直接跳到目标地址
解释一下:
delay branch with squashing 的意义是(squash: 去除、制止、碾碎)
执行到BC X这行时,IF阶段提取指令A,过了一个周期后,若上一周期的BC X的结果为TRUE,则这一周期EX阶段正常执行指令A,否则,EX阶段抛弃指令A。接着,IF阶段回去提取指令B。
好处:相比于放置气泡指令,这种方法又获得了性能提升
如图是 delayed branching 的优缺点
(38:00) 开始提到数据独立性(RAW, WAW, WAR)了
Onur Mutlu 18-447 Lecture9 分支预测-1的更多相关文章
- 现代中央处理器(CPU)是怎样进行分支预测的?
人们一直追求CPU分支预测的准确率,论文Simultaneous Subordinate Microthreading (SSMT)中给了一组数据,如果分支预测的准确率是100%,大多数应用的IPC会 ...
- GCC的分支预测优化__builtin_expect
智能指针笔记 GCC的原子操作函数 将流水线引入cpu,可以提高cpu的效率.更简单的说,让cpu可以预先取出下一条指令,可以提供cpu的效率.如下图所示: 取指令 执行指令 输出结果 取指令 执行 ...
- __builtin_expect — 分支预测优化
1.引言 在很多源码如Linux内核.Glib等,我们都能看到likely()和unlikely()这两个宏,通常这两个宏定义是下面这样的形式. #define likely(x) __builtin ...
- 【CPU微架构设计】利用Verilog设计基于饱和计数器和BTB的分支预测器
在基于流水线(pipeline)的微处理器中,分支预测单元(Branch Predictor Unit)是一个重要的功能部件,它负责收集和分析分支/跳转指令的执行结果,当处理后续分支/跳转指令时,BP ...
- CPU 分支预测
去年在安宁庄的时候, 有个同事阐述了一个观点:php中的if else 在执行时考虑到效率的原因,不会按我们的代码的顺序一条一条去试,而是随机找出一个分支,执行,如果不对,再随机找到一个分支 当时由 ...
- 【操作系统之十二】分支预测、CPU亲和性(affinity)
一.分支预测 当包含流水线技术的处理器处理分支指令时就会遇到一个问题,根据判定条件的真/假的不同,有可能会产生转跳,而这会打断流水线中指令的处理,因为处理器无法确定该指令的下一条指令,直到分支执行完毕 ...
- 分支预测(branch prediction)
记录一个在StackOverflow上看到一个十分有趣的问题:问题. 高票答案的优化方法: 首先找到罪魁祸首: if (data[c] >= 128) sum += data[c]; 优化方案使 ...
- 从一段 Dubbo 源码到 CPU 分支预测的一次探险之旅
每个时代,都不会亏待会学习的人. 大家好,我是 yes. 这次本来是打算写一篇 RocketMQ 相关文章的,但是被插队了,我也是没想到的. 说来也是巧最近在看 Dubbo 源码,然后发现了一处很奇怪 ...
- 如何在代码层面提供CPU分支预测效率
关于分支预测的基本概念和详细算法可以参考我之前写的知乎回答,基本概念不再阐述了~~ https://www.zhihu.com/question/486239354/answer/2410692045 ...
- C/C++ 分支预测(likely unlikely)
看一些代码时,会遇到likely unlikely, 查了查网上的资料,结合自己的理解记录一下. 1. 一些概念 指令周期是指执行一条指令所需要的时间,一般由若干个机器周期组成,是从取指令.分析指令到 ...
随机推荐
- maven上传jar包或pom文件到远程仓库
一. 步骤 有时候,项目中打好的jar包或pom文件需要上传到远程仓库,步骤总结如下: 安装好maven,网上有很多教程,默认已安装 工程中的settings.xml增加相应的server账号密码: ...
- ES6的总结的一些数组、字符串方法
1.数组的方法 unshift() 数组头部添加内容 push() 数组尾部添加内容 pop() 数组尾部删除内容 shift() 数组头部删除内容 sort() 数组排序 a-b 升序 b-a 降序 ...
- Linux安装Jemalloc
在安装Jemalloc之前首选安装解压工具,Jemalloc源来自Github一般服务器很少安装bzip2解压 bzip2安装命令 yum -y install bzip2 CnetOS完整安装Jem ...
- Junit单元测试简单使用
第一步:pom文件引入相关文件 <dependency> <groupId>org.springframework.boot</groupId> <artif ...
- dart 学习笔记
1.dart 下载安装,vscode 安装dart ,coderunner等 2.dart语法 1)需要入口函数main,或者void(没有返回值) main 2)定义变量 var str='kkk' ...
- redisTemplate类学习及理解
List<Object> list = masterRedisTemplate.executePipelined((RedisCallback<Long>) connectio ...
- js判断图片链接是否有效
let checkImgExists = function(url) { return new Promise(function(resolve, reject) { let ImgObj = new ...
- IDEA隐藏.idea
- JavaWeb 下载Demo
JavaWeb 继承 Httpservlet 类实现文件下载的功能 package com.gen; import javax.servlet.ServletException; import jav ...
- GET请求数据量大造成的问题
在实际的开发过程中,我们偶尔或者遇到过要导出列表中所有的数据.假设列表中有十万条数据,那么导出所有,意味着要大批量的走查询接口,通常我们的后台的API接口GET请求支持的查询长度不得大于1000,(比 ...