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. 一些概念 指令周期是指执行一条指令所需要的时间,一般由若干个机器周期组成,是从取指令.分析指令到 ...
随机推荐
- nginx客户端真实IP配置
https://www.cnblogs.com/kevingrace/p/8269955.html include mime.types; default_type application/octet ...
- C# 调用Web Api通用方法
1.通用方法 public class GetDataByWebApi { /// <summary> /// 通过web api获取数据的方法 /// </summary> ...
- dropbear 2019.78 Installing to target......Running build_buildroot failed!
使能buildroot的环境变量 source envsetup.sh ;rv1126一般选择90make dropbear-dircleanmake dropbear./build.sh rootf ...
- 如果同时存在application.properties 和application.yml 文件的话,springboot会优先使用application.properties吗
如果同时存在application.properties 和application.yml 文件的话,springboot会优先使用application.properties吗 总结:如果appli ...
- [python]tkinter简易的图片浏览器
import os from tkinter import filedialog, Tk from PIL import Image, ImageTk, ImageSequence import tk ...
- WPF学习笔记-数据采集与监控项目02-主界面(页面切换,抽屉侧滑栏效果)
以下是视频学习笔记 https://www.bilibili.com/video/BV1gq4y1D76d?p=28 1,页面切换和命令绑定 效果 实现思路 2,弹出抽屉侧滑窗的效果 [2.1]效果 ...
- docker登录Ubuntu出现error storing credentials - err: exit status 1, out: `Cannot autolaunch D-Bus without X11 $DISPLAY`的解决方法
命令行登录docker时,在Ubuntu 18.04下可能会出现 error storing credentials - err: exit status 1, out: `Cannot autola ...
- 算法学习—————PAM回文自动机
时隔一年,第一次学习新的算法 原理和AC自动机差不多 基本思想: 两棵树分别代表奇偶 在一个回文串两边同时填上相同字符可以得到另一个回文串,以此构建两棵树 树上维护信息: 节点表示的回文串为当前位置的 ...
- ORA-01653:unable to extend table xxxxx by 8192 in tablespace xxxxx
原因:表空间满 解决:扩展表空间 报错截图: 参考摘录:https://blog.csdn.net/qq_35257875/article/details/90295272
- IaaS--区域和可用区(何恺铎《深入浅出云计算》笔记整理)
[关键概念] IaaS(Infrastructure as a Service):即"基础设施即服务",一般指云计算所提供的计算.存储.网络等基本底层能力.是基于软件技术对物理硬件 ...