精简版 · 小杯2026-08 冻结,已停止更新(发布前修订了 4 处已知错误)。后续勘误与新增内容只在正式版。看正式版(中杯)→
Skip to content

流水线基本概念与性能指标

大纲定位

五(六)1、2 指令流水线的基本概念、基本实现

要求:理解流水线把指令拆段重叠执行的思想,能画时空图,掌握吞吐率、加速比、效率三个指标的定义与计算。

考情分析

流水线性能指标计算常以大题形式出现。吞吐率、加速比、效率的公式,及其在含相关/冒险等各种情况下的计算,是这一节的核心。

流水线的基本思想

将指令的执行过程分为多个阶段,每个阶段由专用硬件完成,多条指令同时处于不同阶段

类比流水线装配工厂:同一时刻,装配线上有多件产品处于不同工序,整体吞吐量远高于串行处理。

五段流水线

标准的五级流水线(经典 MIPS 流水线):

阶段缩写操作
取指IF从指令存储器取指令,PC+4
译码/读寄存器ID译码操作码,读寄存器堆
执行EXALU 运算或计算存储器地址
访存MEM读/写数据存储器(不访存的指令空操作)
写回WB将结果写回寄存器堆

流水线的逻辑结构

每个流水段之后必须设置流水段寄存器(也叫锁存器、段间寄存器),用于保存该阶段的输出结果,供下一阶段在下个时钟周期使用。

  IF  →  IF/ID  →  ID  →  ID/EX  →  EX  →  EX/MEM  →  MEM  →  MEM/WB  →  WB
         寄存器          寄存器           寄存器             寄存器

段间寄存器的作用:

  • 隔离相邻流水段,使各段在同一时刻可以处理不同指令
  • 锁存中间结果,确保数据在下个时钟上升沿到来时才传递给下一段

段间寄存器本身有一定的延迟。时钟周期 = 最慢流水段的延迟 + 段间寄存器延迟:

Δt=max(Δt1,Δt2,,Δtk)+t寄存器

流水线不能缩短单条指令的执行延迟——单条指令仍需经过全部 k 个段,总延迟为 kΔt,甚至可能比非流水线的情况更长(因为 Δt 按最慢段取值,各段不一定等长)。流水线提升的是吞吐率——当流水线满载运行时,每个时钟周期都有一条指令完成。

图 6.5 5 段流水线数据通路及段寄存器
图 6.5 5 段流水线数据通路及段寄存器
(袁春风《计算机组成与系统结构》第 3 版,见文末教材出处)

流水线相对单周期唯一的结构改动,就是在相邻两段之间插入段寄存器(图中竖直的窄条)。它们负责把上一段的结果连同还没用到的控制信号一起锁存、传给下一段——没有段寄存器,五条指令的信号会在通路上互相覆盖。

流水线时空图

以连续 5 条指令为例(每段耗时 Δt):

        Δt  2Δt  3Δt  4Δt  5Δt  6Δt  7Δt  8Δt  9Δt
I1      IF   ID   EX  MEM   WB
I2           IF   ID   EX  MEM   WB
I3                IF   ID   EX  MEM   WB
I4                     IF   ID   EX  MEM   WB
I5                          IF   ID   EX  MEM   WB

完成 5 条指令共需 (5+51)×Δt=9Δt

一般地,k 段流水线执行 n 条指令,完成时间为:

T=(k+n1)Δt

其中 Δt 为流水线每段的时钟周期(取各段中最长的)。

性能指标

吞吐率(Throughput Rate, TP)

单位时间完成的指令条数:

TP=n(k+n1)Δt

nk 时,TP1Δt(趋近最大吞吐率)。

最大吞吐率:

TPmax=1Δt

加速比(Speedup, S)

与不使用流水线(顺序执行)相比的速度提升倍数:

S=顺序执行时间流水线执行时间=knΔt(k+n1)Δt=knn+k1

nk 时,Sk(趋近流水线段数,即理想加速比)。

效率(Efficiency, E)

各流水段的利用率,反映硬件资源是否被充分利用:

E=Sk=nn+k1

效率 E 表示流水线各级功能部件的平均利用率,0<E1

nk 时,E1(接近100%利用率)。

各指标关系

S=kETP=nT,S=knΔtT,E=Sk

例题

例1:5 段流水线,每段时间均为 2ns,执行 100 条指令,求吞吐率 TP、加速比 S 和效率 E。

解:k=5n=100Δt=2ns

T=(5+1001)×2=104×2=208 nsTP=1002084.81×108 条/sS=5×100100+51=5001044.81E=100100+51=10010496.2%

不使用流水线时:T顺序=100×5×2=1000 ns,验证 S=1000/2084.81,一致。

例2:某4级流水线,各段延迟为 60ps, 80ps, 70ps, 90ps,锁存器延迟 10ps。求时钟周期和最大吞吐率。

解:Δt=max(60,80,70,90)+10=100ps

TPmax=1100ps=1010 条/秒 = 10 GIPS

注意不是各段延迟之和(300ps),而是取最慢段加锁存器延迟。

例3:某6级流水线执行 n 条指令的加速比为 4.8,求 n

解:S=6n6+n1=4.8

6n=4.8(n+5)=4.8n+241.2n=24n=20

流水线的分类

分类标准类型说明
按级别部件级流水线ALU 内部流水(如浮点加法器)
处理机级流水线指令执行级别(IF-ID-EX-MEM-WB)
处理机间流水线多台处理机串接,宏流水线
按功能单功能流水线只完成一种功能(如定点加法)
多功能流水线可配置为多种功能
按可否并行静态流水线同一时刻只能按一种功能工作
动态流水线各段可同时按不同功能工作
按有无反馈线性流水线数据从头到尾单向流动,无反馈
非线性流水线存在反馈回路,某些段多次经过

408 讨论的默认对象是处理机级、线性、静态流水线。

流水线的瓶颈

若各段执行时间不等,时钟周期由最慢的一段决定:

Δt=max(Δt1,Δt2,,Δtk)

设计目标:尽量使各段时间均等(均衡化),以充分发挥流水线性能。

什么样的指令系统有利于流水线

流水线要跑得顺,靠的是每一段的工作量都可预测、都能在一个时钟周期内做完。指令系统的三个设计选择直接决定这一点:

指令系统特点有利吗对流水线的具体好处
指令格式规整且长度一致定长 IF 段每周期固定取一条,不必先解析长度再决定取几个字节;格式规整 寄存器号位置固定,ID 段可以边译码边读寄存器
指令和数据按边界对齐存放对齐 每次访存只需一个存储周期。不对齐的数据跨越边界,要访存两次再拼接,MEM 段时间就不固定了,整条流水线被迫按最坏情况留时间
只有 Load/Store 指令能访问存储器只有这两类指令经过 MEM 段,其余指令 MEM 段直接空过;否则运算指令也要访存,MEM 段的工作量随指令而变

三条是同一个诉求的三种说法:让每一段的耗时固定下来。

边界对齐这一条最容易漏

前两条一眼能看出和流水线有关,"数据按边界对齐"却像是存储器章节的事。关键在于把它翻译成时间:

不对齐一次访存变两次MEM 段时长不确定流水线各段不再均衡

流水线最怕的就是"这条指令的某一段特别慢"——时钟周期得按最慢的来,所有指令一起陪绑。

对齐规则本身见 数据对齐与大小端

这三条也正是 RISC 的设计特征,所以说 RISC 天生适合流水线——它不是碰巧适合,是照着流水线的需求设计出来的。详见 CISC 与 RISC

交互可视化

加载可视化中...

易混淆知识点

1. 流水线段数越多越好吗?

不是。段数增多意味着:①段间寄存器引入更多延迟,限制时钟周期进一步缩短;②单条指令经历的周期数增加,延迟变大;③数据/控制冒险的停顿代价更大(错误指令更多);④控制逻辑急剧复杂。实际设计中段数是性能和复杂度的折中。

2. 各段时间不等时,Δt 怎么取?

最慢段的延迟(+ 段间寄存器延迟)。那些比最慢段快的流水段在每个周期内会有空闲,这就是流水线瓶颈带来的效率损失。设计时应尽量让各段时间均衡。

3. 为什么流水线适合 RISC 而非 CISC?

流水线要求指令长度统一、格式规整、采用 LOAD/STORE 架构(只有访存指令访问内存)。RISC 天然满足这些条件。CISC 指令长度不等、寻址方式复杂,难以划分均匀的流水段。

考点清单

  • T=(n+k1)Δt(无冒险时);顺序执行 T=nkΔt
  • 最大吞吐率 TPmax=1/Δt,当 nk 时趋近
  • 加速比最大值为 k(流水线段数),实际加速比小于 k
  • 效率 = 加速比 / 段数,也等于时空图中"阴影面积/总面积"
  • 若各段时间不等,需先确定瓶颈段时间作为统一的 Δt
  • 流水线不缩短单条指令的延迟,只提升吞吐率
  • 段间寄存器延迟需计入时钟周期
  • 有利于流水线的三个指令系统特点:格式规整且定长指令和数据按边界对齐只有 Load/Store 访存——三条都是为了让各段耗时固定

真题练习

教材出处

  • 5 段流水线数据通路及段寄存器(图 6.5):袁春风《计算机组成与系统结构》第 3 版 §6.2 流水线处理器的实现,印刷页 p169