计算带转发的5级MIPS流水线执行指定指令的停顿周期数
MIPS流水线停顿分析与计算
给定MIPS指令集
addi $t0, $zero, 15 mystery: addi $t0, $t0, -5 bne $t0, $zero, mystery boo: addi $t0, $t0, 5 beq $t0, $zero, boo lw $t0, 4($t1)
停顿的核心概念
流水线停顿(又称气泡)是为解决数据冲突或控制冲突插入的无操作周期,避免指令错误执行:
- 数据冲突:后续指令需要使用前序指令未完成写回的结果,带转发机制可大幅减少这类停顿。
- 控制冲突:分支指令决策过晚,导致流水线提前取了错误的后续指令,需冲刷无效指令并插入停顿。
本题场景:带转发、分支决策在ID阶段、默认预测分支不跳转的5级流水线(IF/ID/EX/MEM/WB)。
指令执行与停顿计算
1. 总指令数与理想周期确认
- 初始
addi:1条 mystery循环:$t0从15减至0,需执行3次addi+bne,前2次bne跳转,第3次不跳转,共6条指令boo段:执行1次addi+beq(beq不跳转),再加1条lw,共3条指令
总指令数:1+6+3=10,与你计算的一致。5级流水线理想周期为5 + (10-1) =14,计算正确。
2. 控制冲突导致的停顿分析
分支决策在ID阶段,意味着ID阶段末尾才能确定是否跳转。默认预测“不跳转”时,IF阶段会提前取分支的下一条指令,若实际需要跳转,就需要冲刷已进入ID的错误指令,插入1个停顿周期:
mystery循环中,前2次bne判断$t0≠0,实际需要跳转,每次都会因预测错误产生1个停顿,共2个停顿周期。boo段的beq判断$t0=5≠0,实际不跳转,与预测一致,无停顿。
3. 数据冲突的影响
带转发机制下,所有数据冲突都能解决:
- 循环内的
addi修改$t0后,下一条bne在ID阶段读$t0时,addi的结果可通过转发直接传给ID阶段,无需停顿。 - 其他指令间无数据依赖冲突,无额外停顿。
总停顿周期
最终需要的停顿周期为2,实际执行周期为 14+2=16。
内容的提问来源于stack exchange,提问作者Cate211
相关产品推荐
相关产品推荐

