Files
final-exam/计算机系统结构/重点复习/小题2-流水线的分类.md
T

138 lines
6.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
tags:
- 计算机系统结构
- 重点复习
- 流水线
- 分类
create time: 2026-06-16 21:21
---
# 小题 2 — 流水线的分类
## 概述
本题考查流水线的多种分类维度:**单功能/多功能**、**静态/动态**、**线性/非线性** 的含义及区别。这是理解流水线技术的基础,常以选择题形式出现。
> [!tip] 考试重点
> 需理解每种分类的**定义**和**区别**,尤其是静态多功能与动态多功能的对比,以及线性与非线性流水线的本质差异(是否允许反馈连接)。
## 正文
### 一、按功能分类:单功能 vs 多功能
| 分类 | 含义 | 特点 | 示例 |
|------|------|------|------|
| **单功能流水线** | 只能完成**一种**固定功能 | 设计简单、专用性强 | 浮点加法流水线、浮点乘法流水线 |
| **多功能流水线** | 同一流水线可以完成**多种**不同功能 | 灵活性高、但控制复杂 | 可重构的 ALU 流水线 |
> [!question] 思考:为什么需要多功能流水线?
> 现代处理器需要执行加法、乘法、逻辑运算等多种操作。如果每种操作都设计一条专用流水线,硬件开销太大。多功能流水线通过**动态重构**段间连接,用同一条流水线支持多种功能,提高了硬件利用率。
### 二、按工作方式分类:静态 vs 动态
这是**针对多功能流水线**的进一步细分,描述的是流水线在同一时刻能否同时执行多种功能。
| 分类 | 含义 | 同时执行多种功能? | 控制复杂度 | 性能 |
|------|------|:------------------:|:----------:|:----:|
| **静态流水线** | 同一时刻只能按**一种**功能方式工作 | **否**——切换功能需要排空流水线 | 低 | 较低 |
| **动态流水线** | 同一时刻可以有**多种**功能在不同段中同时工作 | **是**——不同段可以执行不同功能的子任务 | 高 | 较高 |
```mermaid
graph LR
subgraph Static["Static Pipeline"]
S1["Phase 1: All ADD"] --> S2["Phase 2: All MUL"]
S2 --> S3["Phase 3: All ADD"]
end
subgraph Dynamic["Dynamic Pipeline"]
D1["Segment 1: ADD task"] --> D2["Segment 2: MUL task"]
D2 --> D3["Segment 3: ADD task"]
end
```
> [!note] 静态 vs 动态的关键区别
>
> **静态流水线**的工作过程:
> 1. 当前阶段全部执行功能 A 的任务
> 2. 功能 A 的最后一个任务**完全流出**后(排空)
> 3. 才能开始执行功能 B 的任务
> 4. 不允许 A 和 B 的任务在流水线中同时存在
>
> **动态流水线**的工作过程:
> 1. 功能 A 的某个任务在段 3 执行
> 2. 同一时刻,功能 B 的另一个任务可以在段 1 开始
> 3. 各段独立工作,无需排空
>
> 代价:动态流水线需要更复杂的**段间互连**和**冲突检测**逻辑,因为不同功能可能需要不同的段间数据通路。
> [!question] 思考:静态流水线一定是单功能的吗?
> 不一定。静态流水线可以是多功能的,只是在某一时刻只执行一种功能。例如一条既能做加法又能做乘法的流水线,在某段时间全部做加法,排空后全部做乘法——这是**静态多功能流水线**。
### 三、按结构分类:线性 vs 非线性
| 分类 | 含义 | 特点 | 调度难度 |
|------|------|------|:--------:|
| **线性流水线** | 各段**串行连接**,无反馈、无前馈 | 每拍可送入一个新任务 | 简单 |
| **非线性流水线** | 各段之间存在**反馈**或**前馈**连接 | 不能每拍送入新任务,需要预约表调度 | 复杂 |
```mermaid
graph LR
subgraph Linear["Linear Pipeline"]
L1["S1"] --> L2["S2"] --> L3["S3"] --> L4["S4"]
end
subgraph NonLinear["Non-Linear Pipeline"]
NL1["S1"] --> NL2["S2"]
NL2 --> NL3["S3"]
NL3 --> NL4["S4"]
NL3 -.->|"Feedback"| NL1
end
```
> [!note] 线性 vs 非线性的本质区别
>
> **线性流水线**:数据单向流动,各段只使用一次。任务完成后立即释放所有段,下一拍可送入新任务。吞吐率恒定为 $1/\Delta t$($\Delta t$ 为最长段时间)。
>
> **非线性流水线**:由于存在反馈连接,同一个任务可能**多次使用某一段**。如果新任务进入的间隔太小,就会产生**段冲突**——两个任务在同一时刻争用同一段。因此需要通过**预约表分析**来确定安全的进入间隔。
>
> 非线性流水线的调度是本课程的**核心难点**,详见 [[大题3-非线性流水线调度]]。
### 四、分类体系总览
```mermaid
graph TD
ROOT["Pipeline Classification"] --> F["By Function"]
ROOT --> W["By Working Mode"]
ROOT --> S["By Structure"]
F --> F1["Single-Function"]
F --> F2["Multi-Function"]
W --> W1["Static"]
W --> W2["Dynamic"]
S --> S1["Linear"]
S --> S2["Non-Linear"]
F2 --> W
```
完整的分类组合关系:
| 组合类型 | 含义 | 实例 |
|----------|------|------|
| 单功能线性 | 只做一种功能,段间串行 | 浮点加法流水线 |
| 单功能非线性 | 只做一种功能,有反馈连接 | 某些迭代计算流水线 |
| 多功能静态线性 | 多种功能但需排空后切换,无反馈 | 早期向量处理器 |
| 多功能静态非线性 | 多种功能需排空切换,有反馈 | 复杂运算单元 |
| 多功能动态线性 | 同时执行多种功能,无反馈 | 高端处理器的执行单元 |
| 多功能动态非线性 | 同时执行多种功能,有反馈 | 最复杂的情况 |
> [!warning] 考试常见陷阱
> - "静态"和"线性"是两个**独立的维度**,不要混淆。静态/动态描述的是多功能流水线的工作方式;线性/非线性描述的是段间连接结构。
> - 单功能流水线**无所谓**静态/动态(因为它只有一种功能,不存在"切换"的问题)。
> - 线性流水线的调度是确定性的(每 $\Delta t$ 送入一个任务),非线性流水线需要专门的调度算法。
## 关联笔记
- [[计算机系统结构/复习文档/流水线技术]]
- [[大题3-非线性流水线调度]]
- [[小题3-控制冲突的解决措施]]