# 第三章 指令级并行 - 考试考点精细化梳理 --- ## 考点分级 ### 【必考核心考点】 #### 1. Tomasulo算法(计算题/分析题必考) **核心考法**:计算题、分析题、画表题(★★★★★) **核心概念**: - Reservation Station(保留站):存放指令和操作数 - Register Scoreboard(寄存器记分牌):跟踪寄存器状态 - Reorder Buffer(ROB):支持前瞻执行 **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. 前瞻执行(概念题高频) **核心考法**:简答题、分析题(★★★★☆) **核心概念**: - 前瞻执行:允许指令乱序执行,但顺序确认 - ROB(Reorder Buffer):维护指令执行顺序 - 确认阶段:指令结果真正写入寄存器堆 **三个阶段**: 1. 发射:从ISSU队列取出指令,分配ROB 2. 执行:等待操作数,就绪后执行 3. 确认:按顺序将结果写入寄存器/内存 **解决的问题**: - 精确异常处理 - 跨分支前瞻 - WAR/WAW冲突消除 **常见陷阱**: - 混淆"执行"和"确认"的顺序 - 不理解ROB在其中的作用 **答题话术**: ``` 前瞻执行是一种动态调度技术,允许: 1. 指令乱序执行(Out-of-Order Execution) 2. 但必须顺序确认(In-Order Commit) 关键机制是Reorder Buffer(ROB): - 发射时分配ROB条目 - 执行后将结果写入ROB - 按程序顺序确认ROB中的指令 - 确认时才真正更新寄存器堆 这样当分支预测错误时,可以flush ROB中所有后续指令, 实现精确异常和跨分支前瞻。 ``` --- ### 【高频考点】 #### 4. 循环展开与指令调度(综合分析题) **核心考法**:分析题、计算题(★★★★☆) **循环展开的作用**: - 减少循环开销(分支判断) - 增加可调度指令数量 - 消除WAR/WAW冲突 **指令调度约束**: - 不能有WAR/WAW冲突 - 不能改变程序语义 - 受功能单元延迟影响 **常见考题**: 给出循环代码和功能单元延迟表,要求进行循环展开和指令调度。 --- #### 5. 记分牌算法 vs Tomasulo算法 **核心考法**:选择题、简答题(★★★☆☆) **对比**: | 特性 | 记分牌 | Tomasulo | |------|--------|----------| | 控制方式 | 集中式 | 分布式 | | 寄存器换名 | 无 | 有(通过保留站) | | 消除WAR/WAW | 不能 | 能 | | 结构冲突检测 | 记分牌 | 保留站 | **考试重点**: - 理解Tomasulo算法如何消除WAR/WAW - 理解集中式控制和分布式控制的区别 --- ### 【了解考点】 #### 6. 指令级并行的概念 **考法**:选择题、填空题 **概念**: - ILP(Instruction-Level Parallelism):指令级并行 - 流水线冲突:结构冲突、数据冲突、控制冲突 - 动态调度 vs 静态调度 --- ## 典型计算题解题示范 **例题**(类似记分牌/Tomasulo状态表题目): > 假设以下指令序列在 Tomasulo 算法中执行: > LD F0, 0(R1) > MULTD F2, F0, F4 > SD 0(R1), F2 **标准解题框架**: ``` 解:跟踪每条指令的执行过程: 指令1:LD F0, 0(R1) - 发射周期:检查保留站 Load1 有空,发布地址计算 - 执行周期:计算地址,访问内存 - 写回周期:将数据通过CDB写入F0和所有等待的保留站 指令2:MULTD F2, F0, F4 - 发射周期:检查乘法保留站有空,源操作数F0等待中(Qj=Load1) - 执行周期:等待F0就绪后执行乘法 - 写回周期:通过CDB输出结果 指令3:SD 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分布式,是否有寄存器换名 ```