You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

计算带转发的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 14:50:57