流水线

流水线特点与分类

流水线技术具有下列几个特点

  • 流水过程由多个相关的子过程组成,这些子过程称为流水线的“级”或“段”。段的数目称为流水线的“深度”。
  • 每个子过程由专用的功能段实现
  • 各功能段的时间应基本相等,通常为1个时钟周期(1拍)
  • 流水线需要经过一定的通过时间才能稳定。
  • 流水技术适合于大量重复的时序过程。

流水线可从不同角度分类
1.按流水线所完成的功能分类

  • 单功能流水线,是指只能完成一种固定功能的流水线。
  • 多功能流水线,是指各段可以进行不同的连接,从而完成不同的功能。

2.按同一时间内流水段的连接方式划分

  • 静态流水线,是指在同一时间内,流水线的各段只能按同一种功能的连接方式工作
  • 动态流水线,是指在同一时间内,当某些段正在实现某种运算时,另一些段却在实现另一种运算

3.按流水的级别划分

  • 部件级流水线,又叫运算操作流水线,是把处理机的算术逻辑部件分段,使得各种数据类型的操作能够进行流水
  • 处理机级流水线,又叫指令流水线,是把解释指令的过程按照流水方式处理
  • 处理机间流水线,又叫宏流水线,是由两个以上的处理机串行地对同一数据流进行处理,每个处理机完成一项任务

4.按照数据表示来进行分类

  • 标量流水处理机,是指处理机不具有向量数据表示,仅对标量数据进行流水处理
  • 向量流水处理机,是指处理机具有向量数据表示,并通过向量指令对向量的各元素进行处理

5.按照是否有反馈回路来进行分类

  • 线性流水线是指流水线的各段串行连接,没有反馈回路
  • 非线性流水线是指流水线中除有串行连接的通路外,还有反馈回路

MIPS 基本流水线

非流水实现数据通路

  • 取值周期 PC+4 (MIPS指令长32位)
  • 译码/读寄存器周期 需注意因为MIPS采用了固定字段译码,所以指令译码和读寄存器是并行执行的
  • 执行/有效地址计算周期 这里单独说明分支指令的操作

ALU将临时寄存器NPCImm中的值相加,得到分支的目标地址。同时,对在前一个周期读入寄存器A的值进行检查,决定分支是否成功,即
ALUOutput←NPC+rmm;
Cond←(Aop0)

  • 存储器访问/分支完成周期 这里单独说明分支指令的操作

如果分支条件寄存器中的内容为真,表明分支转移成功,选择临时寄存器 ALUOutput中的值作为分支目标地址,并将其放入PC中。否则,它将临时寄存器NPC中的值送入PC中,作为下一条指令地址,即
if(Cond)PC← ALUOutput
else PC←NPC

  • 写回周期

流水线实现数据通路

一种简单的MIPS流水线时空图

由上图我们可以看到,为使得多条指令能够在流水线中重叠执行,首先必须保证在指令重叠时,不存在任何流水线资源冲突问题,也就是确保流水线的各段不会在同一个时钟周期内使用相同的数据通路资源。在同一个时钟周期内每条指令所使用的功能单元都不同,所以多条指令的重叠执行“基本上”没有资源冲突。

基于以上原则,我们需要考虑几个问题

  1. 将指令存储器IM和数据存储器DM分隔开,避免取指令和访问数据出现方寸冲突
  2. 流水线ID段和WB段都将操作寄存器,如何防止冲突是需要考虑的
  3. 当流水线执行分支指令时,若分支指令改变PC值,则流水线中可能存在两条指令试图修改PC值(分别处于MEM段和IF段)
  4. 流水线寄存器设计,为防止寄存器中的值在为流水线中某条指令所用时被流水线中其它的指令所重写,可在流水线各段之间设置流水线寄存器文件,也称锁存器

一种基本的MIPS数据通路

在MIPS流水线中,每个流水段完成工作如下

四个多路选择器如何控制?

  • IF段MUX由PC值或EX/MEM.NPC值(分支目标地址)确定
  • WB段MUX由指令类型决定(ALU或Load指令)
  • EX段MUX A(执行分支计算的一侧)由当前指令是否分支指令决定
  • EX段MUX B,由当前指令是否ALU指令决定

流水线性能分析

吞吐率

吞吐率指的是单位时间内流水线完成的最大任务数。

各段时间不等的流水线时空图

注:图中标号意思为第几条指令执行到此段

最大吞吐率

这是指流水线在连续流动达到稳定状态后所得到的吞吐率。

$$ \mathrm{TP}_{\max }=\frac{1}{\max \left\{\Delta t_{i}\right\}} $$

可以看出最大吞吐率受最长流水线段制约,在实际中我们可以对这些瓶颈段进行合适的再划分。

实际吞吐率

设流水线由m段组成,完成n个任务的实际吞吐率可计算如下:
如果各段时间相等,完成n个任务所需的时间为

$$ T_{\text {流水 }}=m \Delta t_{0}+(n-1) \Delta t_{0} $$

$$ \mathrm{TP}=\frac{n}{T_{\text {流水 }}}=\frac{n}{m \Delta t_{0}+(n-1) \Delta t_{0}}=\frac{1}{\left(1+\frac{m-1}{n}\right) \Delta t_{0}}=\frac{\mathrm{TP}_{\max }}{1+\frac{m-1}{n}} $$

加速比

流水线的加速比( Speedup Ratio)是指m段流水线的速度与等功能的非流水线的速度之比。对于连续完成n个任务来讲,如果流水线各段时间相等,加速比S为

$$ S=\frac{T_{0}}{T_{\text {流水 }} }=\frac{n m \Delta t_{0}}{m \Delta t_{0}+(n-1) \Delta t_{0}}=\frac{n m}{m+n-1}=\frac{m}{1+\frac{m-1}{n}} $$

效率

效率指流水线的设备利用率。
由于流水线有通过时间和排空时间,所以流水线的各段并非一直满负荷工作,E<1

通过时间:第一个任务进入到第一个任务完成

排空时间:最后一个任务进入到最后一个任务完成

若各段时间相等,则各段效率也相等,即e1 = e2 = e3 =… = n△t0/T流水

从时空图上看,效率即为N个任务占用的时空面积和M个段占用的时空面积之比

例 :在MIPS的非流水实现和基本流水线中,5个功能单元的执行时间:10/8/10/10/7ns。流水线额外开销为1ns,求相对于非流水指令实现而言,基本MIPS流水线的加速比是多少?
解:

T非流水 = 10 + 8 + 10 + 10 + 7 = 45
T流水 = 10 + 1 = 11
加速比S = 45/11 ≈ 4.1
注: 流水线额外开销包括:流水寄存器的延迟(建立时间和传输延迟)以及时钟扭曲

Last modification:April 24th, 2020 at 05:53 pm
如果觉得我的文章对你有用,请随意赞赏