文章目录

  • 第3章 流水线技术
  • 3.1 流水线的基本概念
  • 3.1.1 流水线的基本概念
  • 3.1.2 流水线的分类
  • 3.2 流水线的性能指标
  • 3.2.1 吞吐率
  • 各段时间均相等的流水线
  • 各段时间不完全相等的流水线
  • 解决流水线瓶颈问题的常用方法
  • 3.2.2 流水线的加速比
  • 流水线各段时间相等(都是△t)
  • 流水线的各段时间不完全相等时
  • 3.2.3 流水线的效率
  • 各段时间相等
  • 3.2.4 流水线的性能分析举例
  • 3.2.5 流水线设计中的若干问题
  • 1. 瓶颈问题
  • 2. 流水线的额外开销
  • 冲突问题


第3章 流水线技术

3.1 流水线的基本概念

3.1.1 流水线的基本概念

流水线技术

  • 把一个重复的过程分解为若干个子过程,每个子过程由专门的功能部件来实现。
  • 把多个处理过程在时间上错开,依次通过各功能段,这样,每个子过程就可以与其它的子过程并行进行。

流水线的段

  • 流水线中的每个子过程及其功能部件称为流水线的级或段,段与段相互连接形成流水线。
  • 流水线的段数称为流水线的深度。

指令流水线

  • 把指令的解释过程分解为分析和执行两个子过程,并让这两个子过程分别用独立的分析部件和执行部件来实现。
  • 理想情况:速度提高一倍
  • 浮点加法流水线(4段指令流水线 )
  • 把流水线技术应用于运算的执行过程,就形成了运算操作流水线,也称为部件级流水线。
  • 把浮点加法的全过程分解为求阶差、对阶、尾数相加、规格化四个子过程。
  • 理想情况:速度提高3倍

时-空图

  • 时-空图从时间和空间两个方面描述了流水线的工作过程。时-空图中,横坐标代表时间,纵坐标代表流水线的各个段。

流水线部署docker 流水线forward_执行过程

流水技术的特点

  • 流水线把一个处理过程分解为若干个子过程(段),每个子过程由一个专门的功能部件来实现。
  • 流水线中各段的时间应尽可能相等,否则将引起流水线堵塞、断流。
  • 时间最长的段将成为流水线的瓶颈。
  • 流水线每一个段的后面都要有一个缓冲寄存器(锁存器),称为流水寄存器。
  • 作用:在相邻的两段之间传送数据,以保证提供后面要用到的信息,并把各段的处理工作相互隔离。
  • 流水技术适合于大量重复的时序过程,只有在输入端不断地提供任务,才能充分发挥流水线的效率。
  • 流水线需要有通过时间和排空时间。
  • 通过时间:第一个任务从进入流水线到流出结果所需的时间。
  • 排空时间:最后一个任务从进入流水线到流出结果所需的时间。

3.1.2 流水线的分类

部件级、处理机级及处理机间流水线

  • 按照流水技术用于计算机系统的等级不同进行分类
  • 部件级流水线(运算操作流水线):把处理机中的部件分段,再把这些分段相互连接起来,使得各种类型的运算操作能够按流水方式进行。
  • 处理机级流水线(指令流水线):把指令的执行过程按照流水方式处理。把一条指令的执行过程分解为若干个子过程,每个子过程在独立的功能 部件中执行。
  • 系统级流水线(宏流水线):把多台处理机串行连接起来,对同一数据流进行处理,每个处理机完成整个任务中的一部分。

单功能流水线与多功能流水线

  • 按照流水线所完成的功能来分类
  • 单功能流水线:只能完成一种固定功能的流水线。
  • 多功能流水线:流水线的各段可以进行不同的连接,以实现不同的功能。
  • 例: ASC的多功能流水线(⚠️常用来分析)

流水线部署docker 流水线forward_执行过程_02

静态流水线与动态流水线

  • 按照同一时间内各段之间的连接方式对多功能流水线作进一步的分类(对多功能流水线的深入)
  • 静态流水线:在同一时间内,多功能流水线中的各段只能按同一种功能的连接方式工作。
  • 对于静态流水线来说,只有当输入的是一串相同的运算任务时,流水的效率才能得到充分的发挥。
  • 例如:ASC的8段流水线
  • 动态流水线:在同一时间内,多功能流水线中的各段可以按照不同的方式连接,同时执行多种功能。
  • 优点:灵活,能够提高流水线各段的使用率,从而提高处理速度。
  • 缺点:控制复杂。

流水线部署docker 流水线forward_流水线部署docker_03

线性流水线与非线性流水线

  • 按照流水线中是否有反馈回路来进行分类
  • 线性流水线:流水线的各段串行连接,没有反馈回路。数据通过流水线中的各段时,每一个段最多只流过一次。
  • 非线性流水线:流水线中除了有串行的连接外,还有反馈回路。
  • 非线性流水线的调度问题
  • 确定什么时候向流水线引进新的任务,才能使该任务不会与先前进入流水线的任务发生冲突——争用流水段。

顺序流水线与乱序流水线

  • 根据任务流入和流出的顺序是否相同来进行分类
  • 顺序流水线:流水线输出端任务流出的顺序与输入端任务流入的顺序完全相同。每一个任务在流水线的各段中是一个跟着一个顺序流动的。
  • 乱序流水线:流水线输出端任务流出的顺序与输入端任务流入的顺序可以不同,允许后进入流水线的任务先完成(从输出端流出)。也称为无序流水线、错序流水线、异步流水线

标量处理机与向量流水处理机

  • 把指令执行部件中采用了流水线的处理机称为流水线处理机。
  • 标量处理机:处理机不具有向量数据表示和向量指令
  • 仅对标量数据进行流水处理。
  • 向量流水处理机:具有向量数据表示和向量指令的处理机。
  • 向量数据表示和流水技术的结合。

3.2 流水线的性能指标

3.2.1 吞吐率

吞吐率:在单位时间内流水线所完成的任务数量或输出结果的数量。计算公式如下
流水线部署docker 流水线forward_标量_04
其中:

  • 流水线部署docker 流水线forward_计算机体系结构_05:任务数
  • 流水线部署docker 流水线forward_标量_06:处理完成流水线部署docker 流水线forward_计算机体系结构_05个任务所用的时间
各段时间均相等的流水线
  • 各段时间均相等的流水线时空图

流水线部署docker 流水线forward_流水线部署docker_08

  • 流水线完成n个连续任务所需要的总时间为:(假设一条k段线性流水线)
    流水线部署docker 流水线forward_标量_09

  • 流水线的实际吞吐率
    流水线部署docker 流水线forward_标量_10
  • 最大吞吐率
    流水线部署docker 流水线forward_功能部件_11
  • 流水线的实际吞吐率小于最大吞吐率,它除了与每个段的时间有关外,还与流水线的段数k以及输入到流水线中的任务数n等有关。
  • 只有当n>>k时,才有流水线部署docker 流水线forward_流水线部署docker_12
各段时间不完全相等的流水线
  • 各段时间不等的流水线及其时空图

流水线部署docker 流水线forward_计算机体系结构_13

  • 各段时间不等的流水线的实际吞吐率为:( 流水线部署docker 流水线forward_流水线部署docker_14为第i段的时间,共有流水线部署docker 流水线forward_计算机体系结构_15个段 )
    流水线部署docker 流水线forward_标量_16
  • 流水线的最大吞吐率为:
    流水线部署docker 流水线forward_计算机体系结构_17
解决流水线瓶颈问题的常用方法
  • 细分瓶颈段
  • 把流水线中的瓶颈段切分为几个独立的功能段,从而使流水线各段的处理时间都相等
  • 重复设置瓶颈段
  • 将处理时间较长的段重复设置,假设其他段处理时间为 流水线部署docker 流水线forward_标量_18,瓶颈段处理时间为 流水线部署docker 流水线forward_功能部件_19,则设置n个
  • 缺点:控制逻辑比较复杂,所需的硬件增加了。

3.2.2 流水线的加速比

加速比:完成同样一批任务,不使用流水线所用的时间与使用流水线所用的时间之比。

假设:不使用流水线(即顺序执行)所用的时间为流水线部署docker 流水线forward_执行过程_20,使用流水线后所用的时间为流水线部署docker 流水线forward_标量_21,则该流水线的加速比为:
流水线部署docker 流水线forward_功能部件_22

流水线各段时间相等(都是△t)
  • 一条k段流水线完成n个连续任务所需要的时间为:
    流水线部署docker 流水线forward_执行过程_23
  • 顺序执行n个任务所需要的时间:
    流水线部署docker 流水线forward_计算机体系结构_24
  • 流水线的实际加速比为:
    流水线部署docker 流水线forward_流水线部署docker_25
  • 最大加速比
    流水线部署docker 流水线forward_流水线部署docker_26
流水线的各段时间不完全相等时
  • 一条k段流水线完成n个连续任务的实际加速比为:
    流水线部署docker 流水线forward_标量_27

3.2.3 流水线的效率

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

由于流水线有通过时间和排空时间,所以在连续完成n个任务的时间内,各段并不是满负荷地工作。

各段时间相等
  • 各段的效率流水线部署docker 流水线forward_功能部件_28相同,
    流水线部署docker 流水线forward_功能部件_29
  • 整条流水线的效率为:
    流水线部署docker 流水线forward_计算机体系结构_30
  • 可以写成:
    流水线部署docker 流水线forward_流水线部署docker_31
  • 最高效率为:
    流水线部署docker 流水线forward_流水线部署docker_32

流水线的效率与吞吐率以及加速比的关系

  • 当流水线各段时间相等时,流水线的效率与吞吐率成正比。
    流水线部署docker 流水线forward_功能部件_33
  • 流水线的效率是流水线的实际加速比S与它的最大加速比k的比值。
    流水线部署docker 流水线forward_流水线部署docker_34
  • 当E=1时,S=k,实际加速比达到最大。

从时空图求流水线的效率

  • 效率就是n个任务占用的时空面积和k个段总的时空面积之比。
    流水线部署docker 流水线forward_功能部件_35
  • 当各段时间不相等时:
    流水线部署docker 流水线forward_执行过程_36

3.2.4 流水线的性能分析举例

参见《计算机系统结构教程》(第二版)清华大学 张晨曦 王志英 等 P62-P64

3.2.5 流水线设计中的若干问题

1. 瓶颈问题
  • 理想情况下,流水线在工作时,其中的任务是同步地每一个时钟周期往前流动一段。
  • 当流水线各段不均匀时,机器的时钟周期取决于瓶颈段的延迟时间。
  • 在设计流水线时,要尽可能使各段时间相等。
2. 流水线的额外开销
  • 流水寄存器延迟
  • 需要建立时间和传输延迟
  • 建立时间:在触发写操作的时钟信号到达之前,寄存器输入必须保持稳定的时间。
  • 传输延迟:时钟信号到达后到寄存器输出可用的时间。
  • 时钟偏移开销
  • 流水线中,时钟到达各流水寄存器的最大差值时间。(时钟到达各流水寄存器的时间不是完全相同)
  • ⚠️几个关键问题
  • 流水线并不能减少(而且一般是增加)单条指令的执行时间,但却能提高吞吐率。
  • 增加流水线的深度(段数)可以提高流水线的性能。
  • 流水线的深度受限于流水线的额外开销
  • 时钟周期小到与额外开销相同时,流水已没意义。因为这时在每一个时钟周期中已没有时间来做有用的工作
冲突问题
  • 流水线设计中要解决的重要问题之一。