一、重叠执行和先行控制
二、流水线的基本概念
1、通过时间和排空时间
(1)通过时间:第一个任务进入到流出的时间
(2)排空时间:最后一个任务进入到流出的时间
2、流水线的分类
(1)单功能和多功能流水线
--单功能流水线只能完成一种固定功能的流水线。
--多功能流水线的各段可以进行不同的连接,实现不同的功能。
(其中多功能流水线又可以分成静态和动态。静态流水线是指同一时间段内只能完成一种功能)
(而动态流水线在同一时间内可以执行多种功能)
(2)部件级、处理机级、处理机间流水线
(3)线性流水线和非线性流水线(按照是否存在反馈回路来分类)
--线性流水线:流水线的各段串行连接,没有反馈回路。
--非线性流水线:流水线中除了有串行的连接之外,还有反馈回路。
(4)顺序流水线和乱序流水线(按照任务的流入流出顺序)
三、流水线的性能指标
1、吞吐率:单位时间内流水线完成的任务数量或者输出结果的数量。
TP=n/Tk (其中n是任务数量,Tk是完成n个任务所需要的时间)
实际吞吐率Tk=n/((k+n-1)t)
2、各段时间不等的流水线
实际吞吐率:
最大吞吐率:
(1)解决流水线瓶颈的两种常用方法:
--重复设置瓶颈段
--细分瓶颈段
以上两种改进方法最后得到的吞吐率都是一样的,跟各段时间相等情况下一样
3、加速比:完成同样一批任务,不使用流水线和使用流水线的时间之比。
(1)流水线各段时间相等的情况下:
(2)各段时间不相等的情况下:
4、效率:设备的实际使用时间和运行时间之比
四、流水线的相关与冲突
1、数据相关的三种类型
(1)数据相关(真数据相关)
后面的指令用到了前面的指令产生的结果。
L.D F0,0(R2) //F0是数组元素
ADD.D F4,F0,F2 //用到了上一条指令产生的结果F0
(2)名相关
两条指令即使使用了相同的寄存器名,但是他们之间没有数据流动。就是后面的指令没有用到前面指令的结果。因此,可以使用换名技术来消除反相关。
--反相关:指令J写的名与指令I读的名是一样的。
DIV.D F2,F8,F4
ADD.D F8,F0,F12
--输出相关:指令J和指令I写的名是一样的。
(3)控制相关:与分支指令相关。
2、流水线冲突
流水线冲突一般有三种类型:
(1)结构冲突:硬件资源满足不了指令重叠执行的要求而发生的冲突。
举一个简单的例子来说,就是有些计算机只有一个存储器(不是哈弗结构),假设前面有一条指令正在访存,比如load指令,而后面的指令开始执行需要从存储器里面取出,这时候就不得不暂停流水线了。这个停顿的周期就称之为“流水线气泡”。
注意:结构冲突不必完全消除,主要原因就是设置过多的硬件就会带来成本问题。
(2)数据冲突:后面的指令需要用到前面指令的执行结果而发生的冲突。
一般有定向和指令调度两种方法来解决数据冲突。定向就是把产生数据的部件再直接把数据送到需要数据的地方。
(3)控制冲突:流水线遇到分支指令或者其他会改变PC值的指令所引起的冲突。