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)了

 

posted @ 2023-02-21 09:44  yinhuachen  阅读(3)  评论(0编辑  收藏  举报