Files
2026-05-16 17:16:51 +08:00

250 lines
6.6 KiB
Markdown
Raw Permalink 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.
# 第三章 指令级并行 - 考试考点精细化梳理
---
## 考点分级
### 【必考核心考点】
#### 1. Tomasulo算法计算题/分析题必考)
**核心考法**:计算题、分析题、画表题(★★★★★)
**核心概念**
- Reservation Station保留站存放指令和操作数
- Register Scoreboard寄存器记分牌跟踪寄存器状态
- Reorder BufferROB支持前瞻执行
**Tomasulo算法状态表**
| 字段 | 说明 |
|------|------|
| 名称 | 保留站名称 |
| 忙 | 保留站是否占用 |
| Op | 操作类型 |
| Vj, Vk | 源操作数值 |
| Qj, Qk | 产生源操作数的保留站 |
| 状态 | 指令执行状态 |
**考题类型**
- 给出指令序列要求填写Tomasulo算法状态表
- 计算发射周期、执行周期、写回周期
- 理解寄存器重命名消除WAR/RAW冲突
**解题步骤**
1. 跟踪每条指令:发射 → 执行 → 写回
2. 维护保留站状态
3. 监视CDB公共数据总线上的写回
4. 更新寄存器状态
**常见陷阱**
- 混淆发射和执行阶段的判定
- 忽略CDB广播对其他指令的影响
- 不理解寄存器换名的作用
**易错易混点**
- RAW读后写真数据相关必须等待
- WAR写后读寄存器换名可消除
- WAW写后写寄存器换名可消除
**答题模板**
```
解:跟踪指令执行过程:
指令i发射时刻
- 检查对应保留站是否有空
- 若源操作数就绪Qi=Qj=0读取Vj, Vk
- 否则记录Qj, Qk等待
指令i执行时刻
- 等待所有源操作数就绪
- 在执行单元中执行操作
指令i写回时刻
- 通过CDB广播结果
- 更新所有等待该结果的保留站
- 更新寄存器状态
完成所有指令后,给出最终状态表。
```
**踩分细则**
- 正确追踪发射阶段2分
- 正确追踪执行阶段2分
- 正确追踪写回阶段2分
- 正确填写状态表4分
---
#### 2. 动态分支预测(计算题高频)
**核心考法**:计算题、选择题(★★★★☆)
**BHT分支历史表**
```
2位预测器状态转换
- 11强分支预测分支发生下同
- 10弱分支预测分支发生
- 01弱不分支预测不分支
- 00强不分支预测不分支
预测错误时状态跳转(错误次数+2正确次数-1但不超过0-3范围
```
**BTB分支目标缓冲器**
- 存储分支指令的地址和目标地址
- 预测分支是否发生以及目标地址
**考题类型**
- 给定分支序列,计算预测准确率
- 给定BHT初始状态分析预测结果
- 比较不同分支预测策略的准确率
**解题思路**
1. 初始化BHT状态如00
2. 对于每个分支:查表得预测,与实际比较,更新状态
3. 统计预测正确次数和总次数
**常见陷阱**
- 混淆2位饱和计数器的状态转换规则
- 忽略BHT索引方式
---
#### 3. 前瞻执行(概念题高频)
**核心考法**:简答题、分析题(★★★★☆)
**核心概念**
- 前瞻执行:允许指令乱序执行,但顺序确认
- ROBReorder Buffer维护指令执行顺序
- 确认阶段:指令结果真正写入寄存器堆
**三个阶段**
1. 发射从ISSU队列取出指令分配ROB
2. 执行:等待操作数,就绪后执行
3. 确认:按顺序将结果写入寄存器/内存
**解决的问题**
- 精确异常处理
- 跨分支前瞻
- WAR/WAW冲突消除
**常见陷阱**
- 混淆"执行"和"确认"的顺序
- 不理解ROB在其中的作用
**答题话术**
```
前瞻执行是一种动态调度技术,允许:
1. 指令乱序执行Out-of-Order Execution
2. 但必须顺序确认In-Order Commit
关键机制是Reorder BufferROB
- 发射时分配ROB条目
- 执行后将结果写入ROB
- 按程序顺序确认ROB中的指令
- 确认时才真正更新寄存器堆
这样当分支预测错误时可以flush ROB中所有后续指令
实现精确异常和跨分支前瞻。
```
---
### 【高频考点】
#### 4. 循环展开与指令调度(综合分析题)
**核心考法**:分析题、计算题(★★★★☆)
**循环展开的作用**
- 减少循环开销(分支判断)
- 增加可调度指令数量
- 消除WAR/WAW冲突
**指令调度约束**
- 不能有WAR/WAW冲突
- 不能改变程序语义
- 受功能单元延迟影响
**常见考题**
给出循环代码和功能单元延迟表,要求进行循环展开和指令调度。
---
#### 5. 记分牌算法 vs Tomasulo算法
**核心考法**:选择题、简答题(★★★☆☆)
**对比**
| 特性 | 记分牌 | Tomasulo |
|------|--------|----------|
| 控制方式 | 集中式 | 分布式 |
| 寄存器换名 | 无 | 有(通过保留站) |
| 消除WAR/WAW | 不能 | 能 |
| 结构冲突检测 | 记分牌 | 保留站 |
**考试重点**
- 理解Tomasulo算法如何消除WAR/WAW
- 理解集中式控制和分布式控制的区别
---
### 【了解考点】
#### 6. 指令级并行的概念
**考法**:选择题、填空题
**概念**
- ILPInstruction-Level Parallelism指令级并行
- 流水线冲突:结构冲突、数据冲突、控制冲突
- 动态调度 vs 静态调度
---
## 典型计算题解题示范
**例题**(类似记分牌/Tomasulo状态表题目
> 假设以下指令序列在 Tomasulo 算法中执行:
> LD F0, 0(R1)
> MULTD F2, F0, F4
> SD 0(R1), F2
**标准解题框架**
```
解:跟踪每条指令的执行过程:
指令1LD F0, 0(R1)
- 发射周期:检查保留站 Load1 有空,发布地址计算
- 执行周期:计算地址,访问内存
- 写回周期将数据通过CDB写入F0和所有等待的保留站
指令2MULTD F2, F0, F4
- 发射周期检查乘法保留站有空源操作数F0等待中Qj=Load1
- 执行周期等待F0就绪后执行乘法
- 写回周期通过CDB输出结果
指令3SD 0(R1), F2
- 发射周期:检查存储保留站有空
- 执行周期等待F2就绪计算地址
- 写回周期存储指令无写回通过CDB确认
表(此处应绘制状态表)...
```
---
## 本章核心概念速记
```
1. RAW真数据相关必须等待 ← Tomasulo用RS实现
2. WAR写后读寄存器换名消除
3. WAW写后写寄存器换名消除
4. BHT 2位预测器00→01→11不分支→分支01→10→11错误时+2正确时-1
5. 前瞻执行三阶段:发射→执行→确认
6. ROB作用按序确认实现精确异常
7. 循环展开消除循环分支开销增加ILP
8. 记分牌 vs Tomasulo集中式vs分布式是否有寄存器换名
```