学习指南

流水线技术

计算机科学· Unit 4: Processor Fundamentals· 15 分钟阅读

1. 流水线基础★★☆☆☆⏱ 4 min

📘 定义

指令流水线

一种性能优化技术,在执行过程中重叠多条指令,将指令周期划分为多个可并行运行的独立阶段。

例:

5级流水线在初始填充延迟后,每个时钟周期完成一条指令。

标准RISC流水线将指令周期划分为5个连续的常用阶段,每个阶段在一个时钟周期内完成:

  • IF (Instruction Fetch): 从主存取出指令到CPU寄存器

  • ID (Instruction Decode): 对操作码译码,从寄存器堆读取源操作数

  • EX (Execute): 执行ALU运算或计算内存地址

  • MEM (Memory Access): 为加载/存储指令访问数据存储器

  • WB (Write Back): 将指令结果写回寄存器堆

📐 例题

绘制3条指令在5级流水线上执行的时序图,展示每个时钟周期各指令占用的流水线阶段。

  1. 1

    流水线按顺序填充:每个周期有一条新指令进入第一阶段。

  2. 2

    填充完成后,每个阶段同时处理不同指令,最终时序如下:

  3. 3
    CycleI1I2I31IF2IDIF3EXIDIF4MEMEXID5WBMEMEX6WBMEM7WB\begin{array}{c|ccc} \text{Cycle} & I_1 & I_2 & I_3 \\ \hline 1 & IF & - & - \\ 2 & ID & IF & - \\ 3 & EX & ID & IF \\ 4 & MEM & EX & ID \\ 5 & WB & MEM & EX \\ 6 & - & WB & MEM \\ 7 & - & - & WB \\ \end{array}
  4. 4

    流水线执行3条指令需要7个周期,而非流水线执行需要15个周期,获得了2倍的早期加速比。

2. 理想流水线加速比计算★★☆☆☆⏱ 3 min

📘 定义

理想流水线加速比

流水线可获得的最大性能提升,计算时假设不存在冒险、停顿和开销。当指令数量很大时,理想加速比接近流水线阶段数。

对于执行条指令的级流水线: 非流水线总周期 = (每条指令需要个完整周期) 流水线总周期 = (初始填充,之后每条指令占用1个周期) 加速比 =

📐 例题

计算忽略所有冒险时,4级流水线执行100条指令的加速比。

  1. 1

    确定输入值:阶段数,指令数

  2. 2

    计算非流水线总周期:

  3. 3
    n×k=4×100=400n \times k = 4 \times 100 = 400
  4. 4

    计算流水线总周期:

  5. 5
    n+(k1)=4+99=103n + (k - 1) = 4 + 99 = 103
  6. 6

    计算加速比:

  7. 7
    Speedup=4001033.88\text{Speedup} = \frac{400}{103} \approx 3.88
  8. 8

    对于大量指令,该结果非常接近理想加速比4,符合预期。

3. 流水线冒险的类型★★★☆☆⏱ 4 min

📘 定义

流水线冒险

一种会阻止下一条预定指令在分配的周期内执行的冲突,会导致一个或多个流水线停顿,降低整体吞吐量。

CIE 9618考试中考察的流水线冒险分为三大核心类:

  • 结构冒险: 资源冲突:两条指令同时需要同一个硬件组件。

  • 数据冒险: 依赖冲突:某条指令需要依赖前一条未完成指令的结果。

  • 控制冒险: 流程冲突:分支或跳转指令改变了程序计数器,导致预取的指令无效。

📐 例题

识别以下指令序列中的冒险类型:ADD R1, R2, R3 之后执行 SUB R4, R1, R5

  1. 1

    SUB指令需要R1的值,而ADD指令要在第5个(WB写回)流水线阶段才会写入R1。

  2. 2

    SUB进入第3个(EX执行)阶段时,ADD还未将R1写入寄存器堆,因此SUB无法获得正确的操作数。

  3. 3

    这种冲突来自两条指令之间的数据依赖,因此这是数据冒险

✓ 快速检测

测试你的理解:当条件分支的结果在取下一条指令之前还未确定时,会发生哪种类型的冒险?

    • 结构冒险

    • 数据冒险

    • 控制冒险

    • 无冒险

    显示答案
    2

    正确:控制冒险由分支和跳转导致的指令流改变产生。

4. 流水线冒险的解决★★★☆☆⏱ 4 min

不同的冒险可以通过不同的硬件和软件技术解决,总结如下表:

冒险类型

常用解决技术

结构冒险

分离指令缓存和数据缓存、复制硬件资源

数据冒险

操作数转发、编译器指令重排序、乱序执行

控制冒险

分支预测、延迟分支、预取分支目标指令

📐 例题

解释操作数转发如何解决上述ADD/SUB例子中的数据冒险。

  1. 1

    ADD指令完成EX(执行)阶段后,结果就已经可以立即获得,不需要等到WB阶段写回寄存器堆。

  2. 2

    操作数转发添加了硬件连接,将结果直接从EX/MEM流水线寄存器的输出传递到下一个EX阶段的输入。

  3. 3

    SUB指令可以直接从ADD已完成的结果中获得正确的R1值,不需要流水线停顿,因此吞吐量得以保持。

5. 常见陷阱

错误做法:

声称流水线技术降低单条指令的延迟

原因:

流水线技术提升的是总吞吐量(每秒指令数),而非单条指令的延迟。每条指令完成所需的周期数仍然不变。

正确做法:

说明流水线技术提升整体指令吞吐量,让单位时间内可以完成更多指令。

错误做法:

颠倒加速比公式,或使用错误的总周期公式

原因:

很多考生错误地将加速比计算为,而非正确的非流水线周期与流水线周期的比值。

正确做法:

使用公式: where = number of stages, = number of instructions.

错误做法:

混淆结构冒险和数据冒险

原因:

结构冒险来自共享硬件的冲突,而非指令结果之间的依赖。

正确做法:

将硬件资源限制导致的冲突分类为结构冒险,指令依赖导致的冲突分类为数据冒险。

错误做法:

声称真实处理器总能达到理想加速比

原因:

几乎所有程序都存在不同组合的冒险,会导致流水线停顿,因此真实加速比总是低于理想最大值。

正确做法:

说明理想加速比是理论最大值,实际加速比因为冒险导致的流水线停顿会更低。

6. 速查表

概念

核心要点

5级流水线顺序

IF → ID → EX → MEM → WB

理想加速比(k很大时)

等于流水线阶段数

总周期数(n级k条指令)

结构冒险成因

共享硬件资源冲突

数据冒险成因

指令依赖未完成的结果

控制冒险成因

分支/跳转改变指令流

数据冒险解决方法

操作数转发

控制冒险解决方法

分支预测、延迟分支

7. 常见问题

流水线技术会降低单条指令的延迟吗?

不会。流水线技术提升的是吞吐量(每秒完成的总指令数),但每条单指令所需的时钟周期数仍然和非流水线处理器相同。单条指令的延迟不会降低。

真题中的出现

AI 根据考纲规律估算的考点位置,请对照官方真题核实准确性。仅作复习重点参考。

  • 2022 · 42

    加速比计算与冒险识别

  • 2021 · 41

    流水线技术性能优势的解释

  • 2023 · 43

    描述解决流水线冒险的方法

下一步

流水线技术是现代处理器设计的核心概念,也是你在CIE 9618中学习更高级性能优化技术的基础。流水线技术相关题目频繁出现在4号试卷中,范围从2分的计算题到6分的解释题,因此你应该练习绘制时序图,记忆冒险类型和解决方法。掌握流水线技术也能帮助你理解现代高性能CPU如何实现比旧的非流水线设计更高的吞吐量。浏览下方相关主题,构建你应对考试的处理器基础知识体系。