课程
计算机体系结构雨课堂期中考试
计算机体系结构雨课堂期中考试
1. 下面说法正确的()
- A. 静态流水线和动态流水线的的区别在于:同一时间内各段是否按照同一种功能还是按照不同的方式同时执行多种功能。
- B. MIPS指令系统属于CISC。
- C. RAW冲突可以通过旁路技术解决。
- D. 延迟槽中的指令只有在分支成功的时候执行。
正确答案:A, C (少选不得分)
解析:
- A 正确:静态流水线同一时间只能按一种功能连接(如全加法),切换功能需排空;动态流水线允许不同功能指令(加法、乘法)同时在流水线不同段执行。
- B 错误:MIPS是典型的RISC(精简指令集)。
- C 正确:旁路(Forwarding)技术可以将流水线后端(EX/MEM段)计算出的结果直接送回前端(ALU输入),从而解决RAW(写后读)数据冲突。
- D 错误:延迟槽中的指令无论分支是否成功都会执行。编译器负责向延迟槽填充合适的指令(如前序无关指令)。
2. 给定三条指令:
ADD.D R1, R2, R3MUL.D R6, R1, R4if(R6>0)
上面三条指令中,说法正确的是()
- A. 存在两个RAW冲突
- B. Tomasulo算法可以解决上述两条指令中的冲突
- C. 旁路技术无法解决前两条指令之间的冲突
- D. 可能存在控制相关冲突
正确答案:A, B, D (少选不得分)
解析:
- A 正确:
MUL用到了ADD的结果R1(RAW)。if用到了MUL的结果R6(RAW)。所以有两个RAW。- B 正确:Tomasulo算法通过CDB广播,可以解决RAW等待问题(虽不能消除依赖,但能正确处理)。
- C 错误:旁路技术当然可以解决ADD到MUL的RAW冲突(如果延迟满足要求)。
- D 正确:
if(R6>0)是分支指令,会引起控制相关。
3. 对于静态分支预测和动态分支预测技术说法正确的是()
- A. 静态分支预测是在编译期间完成的
- B. 2个预测位动态分支预测方法对历史预测有4种状态,但预测结果只有2种
- C. BTB方法是BHT方法的改进,相对BHT,可以尽早获取分支目标地址
- D. 静态分支预测也是尽可能减少流水线的停顿
正确答案:A, B, C, D (少选不得分)
解析:
- A 正确:静态预测(如总是预测失败、从前预测)由编译器静态决定。
- B 正确:2位状态机有00,01,10,11四种状态,但输出只有Taken/Not Taken两种动作。
- C 正确:BHT(Branch History Table)只存历史/预测位,不知道跳到哪;BTB(Branch Target Buffer)存了目标地址,在IF段就能直接获得跳转地址,更早。
- D 正确:所有分支预测的目标都是为了减少控制冲突带来的流水线停顿。
4. 主观题 (12分)

请按照经典5段流水线的工作原理解析下面两条指令在上图数据通路中的实现过程。
(1) store F6, 6(R6)
(2) IF (a==0){ } //只分析IF分支指令
解析: (1)
store F6, 6(R6)
- IF段:PC取指,将Store指令放入IR,PC+4。
- ID段:译码。读取通用寄存器
R6作为基地址,读取浮点寄存器F6作为要存储的数据。立即数6进行符号扩展。- EX段:ALU计算有效地址
Addr = R6 + sign_ext(6)。- MEM段:将从
F6读出的数据写入内存地址Addr中。- WB段:Store指令不写回寄存器,此段空闲(或无操作)。
- 注:原题解析中说“WB段将寻址到的内容单元的内容写回通用寄存器F6”是严重错误的描述,STORE指令不写回寄存器。Load指令才写回。请以本解析为准。
(2)
IF (a==0) { }(BEQ指令)
- IF段:取指。
- ID段:读取寄存器
a(和0比较),符号扩展偏移量。- EX段:ALU进行比较(
a - 0或a == 0)。计算跳转目标地址Target = PC + 4 + offset。根据比较结果决定是否置位Branch信号。- MEM段:MIPS经典流水线通常在MEM段才最终决定更新PC(或在EX段决定,早期的在MEM)。如果分支成功,PC更新为Target;失败则保持PC+4序列。(若有延迟槽,细节会不同,但基本原理如此)。
- WB段:无操作。
5. 主观题 (12分)
请分析经典流水线、Tomasulo算法、基于硬件的前瞻执行三种技术。 (1) 三种技术在流水线分段上的区别。 (2) Tomasulo算法如何解决数据冲突的。(简述即可) (3) 后两种技术的关系 (简述即可)
Parse: (1) 流水线分段区别
- 经典流水线:标准5段 —— IF (取指)、ID (译码)、EX (执行)、MEM (访存)、WB (写回)。
- Tomasulo算法:3段 —— Issue (流出/发射)、Execute (执行)、Write Result (写结果)。
- 前瞻执行:4段 —— Issue (流出)、Execute (执行)、Write Result (写结果)、Commit (确认/提交)。
(2) Tomasulo解决数据冲突
- WAR/WAW (抗相关):通过寄存器重命名解决。利用保留站(Reservation Station)的Tag代换寄存器名。
- RAW (真相关):通过 CDB (公共数据总线) 广播和监听解决。保留站监听CDB,一旦源数据广播,直接捕获。
(3) 后两种技术关系(Tomasulo vs 前瞻)
- Tomasulo 是基础,实现了乱序执行,但采用乱序写回,无法支持精确异常,且对控制相关(分支预测错误)恢复困难。
- 前瞻执行 在Tomasulo基础上增加了 ROB (重排序缓冲) 和 Commit (确认) 阶段。它保持了Tomasulo的乱序执行特性,但强制指令结果必须按序提交,从而完美解决了精确异常问题和分支预测错误时的回滚问题。
6. 主观题 (20分)
在Tomasulo算法中,如下指令代码,每个指令流出阶段1个时钟周期,其中LOAD执行周期为2个时钟周期,ADD指令执行周期为1个时钟周期,写回结果都是一个时钟周期。
L.D F6, 56(R1)
ADD.D F2, F6, F4
请分析L.D指令执行第三个周期时对应的ADD.D指令的保留站、Qi寄存器的状态。保留站和Qi寄存器的状态请以表格展示(其中保留站按照7个字段设置)。
解析(状态分析): 指令时序分析:
- L.D F6:
- Cycle 1: Issue (流出),占用Load Buffer (比如Load1)。
- Cycle 2: Exec (计算地址)。
- Cycle 3: Exec/Mem (访存1)。(题目说执行2周期,假设包括地址计算和访存)
- Cycle 4: Exec/Mem (访存2,如果共2周期)。
- Cycle 5: Write。
- ADD.D F2:
- Cycle 2: Issue (流出),占用Add RS (比如Add1)。源操作数F6未就绪(依赖Load1),F4就绪。
- Cycle 3: Wait (等待Load1结果)。
L.D执行第3个周期时(即系统总第3个周期):
L.D正在执行访存阶段。ADD.D已经流出(在第2周期流出),此刻正在保留站中等待F6。寄存器状态 (Qi) 表:
寄存器 Qi (Source) F6 Load1 (L.D指令) F2 Add1 (ADD.D指令) F4 (Empty/Value) 保留站状态 (Reservation Stations) 表: (标准7段:Name, Busy, Op, Vj, Vk, Qj, Qk)
Name Busy Op Vj Vk Qj Qk Add1 Yes ADD Regs[F4] (Empty) Empty Load1 Load1 Yes Load … … … … 注:
- ADD.D F2, F6, F4 -> F2 = F6 + F4。
- 第一个源(j)是F6,F6由Load1产生,所以Vj为空,Qj=Load1。
- 第二个源(k)是F4,F4已就绪,所以Vk=Regs[F4],Qk=Empty。
- (具体是Vj还是Vk取决于操作数顺序定义,假设F6是第一个源)。













