Files
final-exam/计算机系统结构/复习文档/流水线技术.md
T

139 lines
4.8 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-15 10:00
---
# 流水线技术
## 概述
本文档系统讲解指令流水线的基本原理、冲突类型(结构/数据/控制)、流水线调度策略(预约表与冲突向量)以及时空图分析。流水线是提升处理器吞吐率的核心技术,也是历年考试的高频难点。
> [!tip] 考试重点
> 流水线调度(预约表→禁止表→冲突向量→状态转移图)是分析题的核心考点,需完整掌握从预约表到最优调度策略的全过程。数据相关的三种类型(RAW/WAR/WAW)也常考。
## 正文
### 一、流水线基本概念
**核心思想**:将指令执行过程分成多个阶段(段),不同指令的不同阶段可以**重叠执行**,从而提高吞吐率。
```mermaid
graph LR
A["IF: Fetch"] --> B["ID: Decode"] --> C["EX: Execute"] --> D["MEM: Memory"] --> E["WB: Write Back"]
```
**性能指标**:
| 指标 | 公式 | 说明 |
|------|------|------|
| 吞吐率 | $TP = n / T_k$ | $n$ 个任务在 $T_k$ 时间内完成 |
| 加速比 | $S = T_{seq} / T_k$ | 串行 vs 流水线 |
| 效率 | $E = S / k$ | 流水线的利用率($k$ 为段数) |
### 二、流水线冲突
#### 2.1 结构冲突(Structural Hazard)
多条指令在同一时钟周期争用**同一硬件资源**。
> [!example] 典型场景
> 指令和数据共用一个存储端口,取指和访存同时发生冲突。**解决方案**:分离指令 Cache 和数据 Cache。
#### 2.2 数据冲突(Data Hazard)
后续指令需要使用前面指令的运算结果,但结果尚未写回。
| 类型 | 全称 | 含义 | 示例 |
|:----:|------|------|------|
| **RAW** | Read After Write | 后读前写(真数据相关) | `ADD R1,... ; MOV R2,R1` |
| **WAR** | Write After Read | 后写前读(反相关) | `MOV R2,R1 ; ADD R1,...` |
| **WAW** | Write After Write | 后写前写(输出相关) | `ADD R1,... ; SUB R1,...` |
**解决方案**:
- **数据前推/旁路**(Forwarding):将结果直接从 EX/MEM 传递到下一条指令的 EX 输入
- **插入气泡**(Stall):暂停流水线等待数据就绪
- **编译器调度**:重排指令顺序避免冲突
> [!question] 定向传送(旁路)为什么不能完全消除数据冲突?
> Load-use 冲突:从内存 Load 的数据在 EX 段结束时才可用,但下一条指令可能需要在 EX 段开始时就使用它,此时必须插入一个气泡。
#### 2.3 控制冲突(Control Hazard)
分支指令的执行结果决定后续取指方向,但在分支确定前已经预取了后续指令。
**解决方案**:
- **暂停**:等待分支结果确定后再取指(最简单但性能差)
- **预测**:静态预测(总预测不跳转/总预测跳转)或动态预测(分支历史表)
- **延迟分支**:在分支指令后填充一条必定执行的指令(延迟槽)
### 三、流水线调度(非线性流水线)
#### 3.1 预约表
记录一个任务在各时钟周期对各段的占用情况,是调度分析的起点。
#### 3.2 禁止表
从预约表中提取同一段被**两次以上占用**的时间间隔,构成禁止表 $F$。
#### 3.3 冲突向量
根据禁止表构建初始冲突向量 $C_0$:
- 冲突向量的第 $i$ 位为 1 表示间隔 $i$ 个周期不能进入新任务
- 位数 = 最大禁止间隔
#### 3.4 状态转移图
对每个状态(冲突向量),计算允许的间隔 $j$ 对应的新状态:
$$C_{new} = SHR^{(j)}(C) \lor C_0$$
其中 $SHR^{(j)}$ 表示右移 $j$ 位,$\lor$ 表示按位或。
> [!example] 调度示例
> 禁止表 $F = \{1, 3, 4, 6\}$,则 $C_0 = 101101$
>
> - $j=2$:$SHR^{(2)}(101101) \lor 101101 = 001011 \lor 101101 = 101111 = C_1$
> - $j=5$:$SHR^{(5)}(101101) \lor 101101 = 000001 \lor 101101 = 101101 = C_0$
>
> 在 $C_1$ 状态:$j=2$ 得 $C_1$,$j=5$ 得 $C_0$
#### 3.5 最优调度策略
在状态转移图中找出所有**闭合回路**,计算每个回路的平均延迟:
$$\text{平均延迟} = \frac{\text{回路中各间隔之和}}{\text{回路长度}}$$
平均延迟最小的回路即为最优调度策略。
| 调度策略 | 平均延迟 |
|:--------:|:--------:|
| (5) | 5 |
| (2, 5) | 3.5 |
| (2, 7) | 4.5 |
最优策略为 **(2, 5)**,平均延迟 3.5 拍。
### 四、时空图分析
时空图是分析流水线性能的直观工具,横轴为时间(时钟周期),纵轴为流水线段或功能部件。
**绘图步骤**:
1. 确定每个任务的各段执行时间
2. 根据调度策略确定任务间的间隔
3. 注意数据相关的约束(无定向传送时需插入气泡)
4. 计算总完成时间和吞吐率
## 关联笔记
- [[计算机系统结构/复习文档/计算机系统结构基础与定量原理]]
- [[计算机系统结构/复习文档/存储系统与Cache]]
- [[计算机系统结构/index|试题册索引]]