流水线技术


把一个重复的过程分解为若干个子过程(相当于上面的工序),每个子过程由专门的功能部件来实现。把多个处理过程在时间上错开,依次通过各功能段,这样每个子过程就可以与其他子过程并行进行,这就是流水线技术。

流水线中的每个子过程及其功能部件称为流水线的级或段

流水线的段数称为流水线的深度

流水线的通过时间和排空时间

通过时间和排空时间分别是指第一个任务和最后一个任务进入流水线到流出结果的那个时间段。在这两个时间段中,流水线都不是满载,经过“通过事件”后,流水线进入满载工作状态。

流水线的分类

单功能流水线和多功能流水线

单功能流水线只能完成一种固定功能。

多功能流水线的各段可以通过不同的组合实现不同的功能。

静态流水线与动态流水线

静态流水线,同一时间内,多功能流水线只能实现一种功能,必须等这种功能的任务全部结束,才可以选择其他功能。

动态流水线,同一时间内,多功能流水线中的各段就可以按照不同的方式连接。

部件级流水,处理机级流水,处理机间流水

部件级流水(运算操作流水线)把处理机的运算部件分段,比如分成加法、阶乘、乘法。

处理机级流水,把指令的解释过程按照流水方式处理,如取指令——译码——计算——取结果。

处理机间流水,多个处理机串行连接起来,对同一数据流进行处理,这一般属于异构型多处理机系统。

线性流水线和非线性流水线

线性流水线是线性的,不能跳过也不能返回。

非线性流水线有反馈回路,可以跳过也可以多次通过同一个段。

顺序流水线和乱序流水线

顺序流水线:流水线输入任务顺序和流水线里的一致

乱序流水线:可以先执行后进入的任务,又叫做无序流水线、错序流水线,异步流水线。

流水线的性能指标

吞吐率

吞吐率TP是指在单位时间内流水线所完成的任务数量或输出结果的数量。

kubesphere 流水线命令创建项目 流水线csdn_功能部件

  • 对于各段时间相等的流水线

kubesphere 流水线命令创建项目 流水线csdn_功能部件_02

kubesphere 流水线命令创建项目 流水线csdn_时间段_03

  • 对于各段时间不完全相等的流水线

kubesphere 流水线命令创建项目 流水线csdn_加速比_04

因为时间不相等是,流水线必须等待最长的那一段结束才能继续进行,这个最长的段叫做瓶颈段

解决瓶颈段的方法是:

1.细分瓶颈段,分成时间相等的段。

2.重复设置瓶颈段,并行工作,依次错开任务,需要添加数据分配器和数据收集器。

加速比

完成同样任务,不使用流水线和用流水线的时间之比为加速比。

  • 不使用流水线(顺序执行所用的时间为kubesphere 流水线命令创建项目 流水线csdn_功能部件_05),使用流水线的所用时间为kubesphere 流水线命令创建项目 流水线csdn_功能部件_06,可以得出效率为:

kubesphere 流水线命令创建项目 流水线csdn_加速比_07

效率

流水线的效率是指流水线中的设备实际使用时间与整个运行时间的比值。即流水线设备的利用率。

kubesphere 流水线命令创建项目 流水线csdn_时间段_08

参考61页例子理解效率

流水线的额外开销

建立时间是指在触发写操作的时钟信号到达之前寄存器输入必须保持稳定的时间。

传输延迟是指时钟信号到达后寄存器输出可用的时间。

时钟偏移开销是指流水线中时钟到达各流水寄存器的最大相差时间(时钟到达各流水寄存器的时候不是完全相同)

流水线相关和冲突

经典流水线

IF (取指令PC增加4)->ID(指令译码)->EX(执行/有效地址计算周期)->MEM(存储器完成/分支完成周期,分支会在这个时候修改PC)->WB(写回周期)

  • 为了必见IF访存和MEM访存冲突,必须采用分离的指令存储器和数据存储器,一般采用分离的指令Cache和数据Cache
  • ID需要读寄存器,WB需要写寄存器,所以把写操作安排在时钟周期的前半拍,把读操作安排在时钟周期的后半拍,可以用实线表示进行了相关操作。

相关

数据相关

指令i在前,j在后,有两种情况

真数据相关:写后读冲突

1.指令j使用了指令i产生的结果

2.指令j和指令k数据相关,而指令k和指令i数据相关

名相关

名指的是寄存器的名字或者存储器的名字,可以通过换名解决。

指令i在前,j在后,有两种情况

1.反相关:如果指令j的名和指令i的名相同的情况。

2.输出相关:指令j和指令i写相同的名

控制相关

分支指令引起的相关。

带来两个控制

1.与分支指令控制相关的指令不能被移动到该分支之前。

2.如果一条指令与某分支指令不存在控制相关,就不能把该指令移动到该分支后。

流水线冲突

1.结构冲突

硬件资源不足满足不了指令重叠执行的要求,比如当指令和数据公用一个寄存器可能产生冲突。

2.数据冲突

指令在流水线重叠执行,需要用到前面指令的执行结果

指令i在前,j在后,有如下冲突

写后读冲突(RAW):指令j用到指令i得计算结果。

写后写冲突(WAW):指令j在指令i之前就进行了写入操作,适用于不止一个段可以进行写的流水线和单条指令会停顿的流水线。

读后写冲突(WAR):与反相关有关,这种时候是在指令并行的情况可能发生。

可以使用旁路(定向/短路)和停顿(气泡),还可以通过编译器解决数据冲突

  • 对于一个经典的五段MIPS流水线而言,所有的数据冲突均可以在ID段检测到,如果存在数据冲突,就在相应的指令流出ID段之前将其暂停,完成该工作的硬件称为流水线的互锁机制。
  • 检测冲突是通过比较寄存器地址是否相等来实现。具体看83页
3.控制冲突

流水线遇到分支指令和其他会改变PC值得指令

解决分支延迟的方法

1.预测分支失败

2.预测分支成功

3.延迟分支:在分支指令后面加上几条指令,分支指令后面这m条指令的位置被称为延迟槽,大多数计算机延迟槽个数是一个。

延迟槽上的指令可以选择:

1.从前调度

2.从目标处调度(需要复制指令而不是改变指令位置)

3.从失败处调度(需要复制指令而不是改变指令位置)

复制指令是因为其他路径上可能也需要这条指令,注意延迟分支需要改变目标地址,具体看81页。

为了提高编译器在延迟槽中放入有用指令的能力,可以采用分支取消机制,当分支的实际执行方向和事先所预测的一样时执行分支延迟槽中的指令,否则就将分支延迟槽中的指令转化成一个空操作。

简单MIPS流水线实现

一般不会采用单周期实现方案,主要原因是:

1.对于大多数CPU来说单周期实现效率很低,因为不同的指令所需完成的操作差别相当大,因而所需要的时钟周期时间也大不一样。

2.单周期实现时需要重复设置某些功能部件(例如实现PC加4的加法器),而在多周期实现方案中这些部件是可以共享的。

load互锁

由于使用load的结果而引起的流水线互锁称为load互锁。

习题

1

【单选题】

关于流水线的下列说法,错误的是( )。

  • A、
    流水线能够提高吞吐率;
  • B、
    流水线提高了器件的利用率;
  • C、
    流水线提高了单个任务的处理速度;
  • D、
    消除流水线瓶颈的方法有“瓶颈段细分方法”和“瓶颈段重复设置方法”

正确答案: C

流水方式是指——多部件同时解释多条指令

有一个流水线由4段组成,S1,S2,S4各段的时间都是Δt,S3段的时间是3Δt。 如下图:

kubesphere 流水线命令创建项目 流水线csdn_加速比_09

问:

(1)当在流水线的输入端连续地每Δt 时间输入一个任务时,该流水线会发生( )现象,原因是( )。

(2)此流水线的最大吞吐率TPmax为( );如果每3Δt输入一个任务,连续处理9个任务时的实际吞吐率TP为( ),其效率E为( )。

(3)当每段时间不变时,采用重复设置瓶颈段方法解决流水线瓶颈问题,仍连续处理9个任务时,与(2)相比,其吞吐率提高的倍数N为( );此时的加速比SP为( )。

第一空: 流水线阻塞,出现了S3功能段的结构冲突;第二空: TPmax=1/3Δt;TP=9/30Δt;E=9/20;
第三空: N=2.14 ;SP=3.86