流水线技术¶
概述¶
流水线技术是提高CPU性能的重要技术,它通过将指令执行过程划分为多个阶段,使多条指令的不同阶段可以并行执行,从而提高CPU的吞吐率。
流水线的基本原理¶
流水线的核心思想
将一个重复的时序过程分解为若干个子过程,每个子过程可以有效地与其他子过程并行执行。
时空图¶
流水线时空图示例
时间: 1 2 3 4 5 6 7 8
指令1: IF ID EX MEM WB
指令2: IF ID EX MEM WB
指令3: IF ID EX MEM WB
指令4: IF ID EX MEM WB
指令5: IF ID EX MEM WB
说明:
- IF: 取指 (Instruction Fetch)
- ID: 译码 (Instruction Decode)
- EX: 执行 (Execute)
- MEM: 访存 (Memory Access)
- WB: 写回 (Write Back)
经典的五级流水线¶
graph LR
A[IF<br/>取指] --> B[ID<br/>译码]
B --> C[EX<br/>执行]
C --> D[MEM<br/>访存]
D --> E[WB<br/>写回]
style A fill:#e1f5ff
style B fill:#fff4e1
style C fill:#ffe1f5
style D fill:#e1ffe1
style E fill:#f5e1ff
各阶段的功能¶
1. 取指阶段 (IF)¶
功能:
- 从指令Cache取指令
- PC + 4 → PC (假设指令长度为4字节)
操作:
2. 译码阶段 (ID)¶
功能:
- 指令译码
- 读寄存器操作数
操作:
3. 执行阶段 (EX)¶
功能:
- ALU运算
- 计算有效地址
操作:
4. 访存阶段 (MEM)¶
功能:
- 访问数据Cache
- 读或写存储器
操作:
5. 写回阶段 (WB)¶
功能:
- 将结果写回寄存器
操作:
流水线的性能指标¶
1. 吞吐率 (Throughput)¶
吞吐率
单位时间内流水线完成的指令数。
公式:
| Text Only | |
|---|---|
其中: - n: 完成的指令数 - T: 完成n条指令所需的时间
最大吞吐率:
| Text Only | |
|---|---|
其中 Δt 为流水线时钟周期。
2. 加速比 (Speedup)¶
加速比
流水线方式与串行方式的速度比。
公式:
| Text Only | |
|---|---|
理想加速比:
| Text Only | |
|---|---|
3. 效率 (Efficiency)¶
效率
流水线各段的利用率。
公式:
流水线冲突¶
流水线冲突
流水线冲突会降低流水线的性能,需要妥善处理。
1. 结构冲突 (Structural Hazard)¶
原因: 硬件资源冲突
示例: 多条指令同时访问存储器
解决方法:
- 指令Cache和数据Cache分离
- 增加硬件资源
- 指令暂停等待
2. 数据冲突 (Data Hazard)¶
原因: 数据依赖关系
类型:
RAW (Read After Write)¶
WAR (Write After Read)¶
WAW (Write After Write)¶
解决方法:
- 暂停: 插入气泡周期
- 转发(旁路): 直接传送结果
- 乱序执行: 调整执行顺序
3. 控制冲突 (Control Hazard)¶
原因: 转移指令引起
示例:
解决方法:
- 分支预测: 预测转移方向
- 延迟槽: 在转移指令后插入有用指令
- 预取: 预取两个分支的指令
流水线的实现¶
简单流水线的数据通路¶
graph TB
subgraph IF阶段
PC[PC] --> IM[指令存储器]
IM --> IR[IR]
end
subgraph ID阶段
IR --> ID[译码器]
ID --> RF[寄存器堆]
end
subgraph EX阶段
RF --> ALU[ALU]
end
subgraph MEM阶段
ALU --> DM[数据存储器]
end
subgraph WB阶段
DM --> RF
end
流水线寄存器¶
流水线寄存器
流水线各阶段之间需要寄存器保存中间结果。
主要流水线寄存器:
- IF/ID: 保存取指阶段的结果
- ID/EX: 保存译码阶段的结果
- EX/MEM: 保存执行阶段的结果
- MEM/WB: 保存访存阶段的结果
超标量流水线¶
超标量技术
在一个时钟周期内发射多条指令。
特点:
- 多个执行单元
- 每周期发射多条指令
- 动态调度
- 乱序执行
示例: