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)了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2022-02-21 bash脚本语法总结
2022-02-21 一些经常看不懂,要反复看才会明白的命令、语法
2022-02-21 常用的在CLI环境下提高生产效率的工具总结
2022-02-21 曾经遇见过的报错命令
2022-02-21 学习The Missing Semester of Your CS Education (第二课 shell脚本和工具(比如broot等文件浏览工具))
2022-02-21 source、sh、bash、./ 的区别
2022-02-21 学习The Missing Semester of Your CS Education (第一课)