计算机指令的流水线执行与流水线冒险

目录

计算机指令流水线 

流水线冒险

结构冒险

数据冒险

前推/旁路(forwarding/bypassing)

前推+阻塞 

控制冒险 

BTB(Branch Target Buffer)


计算机指令流水线 

流水线方式的洗衣房可以以并行的方式提高性能

计算机指令的流水线执行与流水线冒险_第1张图片

 计算机执行指令,同样可以以流水线的方式并行

计算机指令的流水线执行与流水线冒险_第2张图片

计算机指令的流水线执行与流水线冒险_第3张图片

MIPS 流水化的数据通路 

计算机指令的流水线执行与流水线冒险_第4张图片

计算机指令的流水线执行与流水线冒险_第5张图片

流水线冒险

下一周期不能按时执行下一条指令

计算机指令的流水线执行与流水线冒险_第6张图片

结构冒险

计算机指令的流水线执行与流水线冒险_第7张图片

数据冒险

 一条指令依赖于前面某条执行的计算结果

add  $s0, $t0, $t1
sub  $t2,
$s0, $t3

下一条指令需要气泡停顿等待前面计算出结果 

计算机指令的流水线执行与流水线冒险_第8张图片

前推/旁路(forwarding/bypassing)

不要等待计算结果保存到目的寄存器,增加一条额外数据通路,将计算的结果直接传给下一条指令计算的输入

计算机指令的流水线执行与流水线冒险_第9张图片

前推+阻塞 

 但是并非所有冒险都能通过前推来避免气泡停顿

lw  $s0, 20($t1)
sub  $t2,
$s0, $t3

在需要使用前一个指令的结果时,前一个指令还没有拿到结果,此时需要停顿一下 

计算机指令的流水线执行与流水线冒险_第10张图片

还可以通过调整指令的顺序来避免阻塞等待

计算机指令的流水线执行与流水线冒险_第11张图片

控制冒险 

计算机指令的流水线执行与流水线冒险_第12张图片

计算机指令的流水线执行与流水线冒险_第13张图片

分支预测

计算机指令的流水线执行与流水线冒险_第14张图片

计算机指令的流水线执行与流水线冒险_第15张图片

更有效的分析预测

在遇到跳转语句的时候,我们往往需要等到MEM阶段才能确定这条指令是否跳转(通过硬件的优化,可以极大的缩短分支的延迟,将分支执行提前到ID阶段,这样就能够将分支预测错误代价减小到只有一条指令),这种为了确保预取正确指令而导致的延迟叫控制冒险(分支冒险)。

为了降低控制冒险所带来的性能损失,一般采用分支预测技术。分支预测技术包含编译时进行的静态分支预测,和执行时进行的动态分支预测。

计算机指令的流水线执行与流水线冒险_第16张图片

BTB(Branch Target Buffer)

动态分支预测中的BTB(Branch Target Buffer)技术。

BTB即为分支目标缓冲器,它将分支指令(对应的指令地址)放到一个缓冲区中保存起来,当下次再遇到相同的指令(跳转判定)时,它将执行和上次一样的跳转(分支或不分支)预测。

一种可行的BTB结构示意图如下:

计算机指令的流水线执行与流水线冒险_第17张图片

在采用了BTB之后,在流水线各个阶段所进行的相关操作如下:

计算机指令的流水线执行与流水线冒险_第18张图片

注意,为了填写BTB,需要额外一个周期。

你可能感兴趣的:(计算机系统3,linux,运维,服务器)