=============== 第一部分: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的更多相关文章

  1. 现代中央处理器(CPU)是怎样进行分支预测的?

    人们一直追求CPU分支预测的准确率,论文Simultaneous Subordinate Microthreading (SSMT)中给了一组数据,如果分支预测的准确率是100%,大多数应用的IPC会 ...

  2. GCC的分支预测优化__builtin_expect

    智能指针笔记 GCC的原子操作函数 将流水线引入cpu,可以提高cpu的效率.更简单的说,让cpu可以预先取出下一条指令,可以提供cpu的效率.如下图所示: 取指令 执行指令 输出结果 取指令 执行 ...

  3. __builtin_expect — 分支预测优化

    1.引言 在很多源码如Linux内核.Glib等,我们都能看到likely()和unlikely()这两个宏,通常这两个宏定义是下面这样的形式. #define likely(x) __builtin ...

  4. 【CPU微架构设计】利用Verilog设计基于饱和计数器和BTB的分支预测器

    在基于流水线(pipeline)的微处理器中,分支预测单元(Branch Predictor Unit)是一个重要的功能部件,它负责收集和分析分支/跳转指令的执行结果,当处理后续分支/跳转指令时,BP ...

  5. CPU 分支预测

    去年在安宁庄的时候, 有个同事阐述了一个观点:php中的if else  在执行时考虑到效率的原因,不会按我们的代码的顺序一条一条去试,而是随机找出一个分支,执行,如果不对,再随机找到一个分支 当时由 ...

  6. 【操作系统之十二】分支预测、CPU亲和性(affinity)

    一.分支预测 当包含流水线技术的处理器处理分支指令时就会遇到一个问题,根据判定条件的真/假的不同,有可能会产生转跳,而这会打断流水线中指令的处理,因为处理器无法确定该指令的下一条指令,直到分支执行完毕 ...

  7. 分支预测(branch prediction)

    记录一个在StackOverflow上看到一个十分有趣的问题:问题. 高票答案的优化方法: 首先找到罪魁祸首: if (data[c] >= 128) sum += data[c]; 优化方案使 ...

  8. 从一段 Dubbo 源码到 CPU 分支预测的一次探险之旅

    每个时代,都不会亏待会学习的人. 大家好,我是 yes. 这次本来是打算写一篇 RocketMQ 相关文章的,但是被插队了,我也是没想到的. 说来也是巧最近在看 Dubbo 源码,然后发现了一处很奇怪 ...

  9. 如何在代码层面提供CPU分支预测效率

    关于分支预测的基本概念和详细算法可以参考我之前写的知乎回答,基本概念不再阐述了~~ https://www.zhihu.com/question/486239354/answer/2410692045 ...

  10. C/C++ 分支预测(likely unlikely)

    看一些代码时,会遇到likely unlikely, 查了查网上的资料,结合自己的理解记录一下. 1. 一些概念 指令周期是指执行一条指令所需要的时间,一般由若干个机器周期组成,是从取指令.分析指令到 ...

随机推荐

  1. 微信内h5调用支付

    在做公众号商城的时候,需要用到调用微信支付,这是微信官方文档教程 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&in ...

  2. CF单机版终极猎手30人版安装教程

    本游戏是CF的单机版本,内含终极猎手30人版,可变身四种终极猎手.这个版本只有这一种模式,没有其他的幽灵模式.生化模式.爆破模式.团队模式等等,如果想玩上述的模式,你可以在其他地方找.值得注意的是这个 ...

  3. antd-vue 框架的日期选择选年份

    <a-date-picker :placeholder="placeholder" mode="year" format="YYYY" ...

  4. 配置隐藏index.php

    .htaccess文件写入类容放到跟目录下就OK <IfModule mod_rewrite.c> Options +FollowSymlinks -Multiviews RewriteE ...

  5. HttpClient线程池&重试机制

    HttpClientUtils package com.example.http_thread.util; import org.apache.http.HttpEntityEnclosingRequ ...

  6. 【转】wamp如何添加多个站点

    1.打开wamp目录下的bin目录下的apache/conf/extra/httpd-vhosts.conf文件(虚拟目录配置文件),修改文件:在num01下创建index.php文件,输出01,:在 ...

  7. du命令_Linux du命令:查看文件夹和文件的磁盘占用情况

    du 命令,全称是 disk usage,用来展示磁盘使用量的统计信息. du 和 df 算是一对同门师兄弟,du 侧重在文件夹和文件的磁盘占用方面,而 df 则侧重在文件系统级别的磁盘占用方面.这两 ...

  8. 初学银河麒麟linux笔记 第四章 windows中开发的QT程序适配linux的修改——error: ‘QT_WARNING_DISABLE_DEPRECATED’ does not name a type

    QT程序本身在windows中进行开发的,移植到linux系统上进行编译后发现了不少问题,需要一一进行修改 1.系统时间修改 首先是系统时间问题 SYSTEMTIME current_date_tim ...

  9. version libcrypto.so.10 not defined in file libcrypto.so.10 with link time reference

    I have installed IC618 latest version. But, after installation when I fire virtuoso I see following ...

  10. errgroup.Group

    在一组 Goroutine 中提供了同步.错误传播以及上下文取消的功能,我们可以使用如下所示的方式并行获取网页的数据: package main import ( "fmt" &q ...