【计组大题】指令流水线

例1(25竟成第二套43)

  • 知识点回顾1:拿到题一看,首先,四条指令当中,有两条Load指令要引起注意,可能会造成结构冒险(本质是访存冲突)

  • 细节1: 读写口独立开来的意思,就是寄存器的读和写可以在同一时钟周期内进行(题干条件),例如下图所示:

对于这两条指令之间的数据冒险,在第2条指令的ID段的前半周期,第1条指令已完成对寄存器t的写操作,在第2条指令的 ID 段的后半周期,第2条指令可以从寄存器t中取得正确的值,因此也消除了这两条指令间的数据冒险。

  • 细节2:顺着上一幅图的“nop”指令,需要对硬件阻塞软件插入“nop”指令这两者进行区分,虽然作用都是“阻塞”,但是二者在画图中的体现不一样,拿2014年真题答案为例:

注意到,I6后面莫名其妙空出来3个空段,这其实就是硬件阻塞,不可能是软件插入nop指令,因为插入nop指令是插入一条完整的5段流水线执行流程,下面I1/I7那儿的三条阻塞才是软件插入nop指令。

  • 知识点回顾2:其次,五段流水线各自的功能,要十分地清楚: 

拿第一条指令 R[a1] ← M[R[a0] + 0] 来说,在五段流水线中依次执行的步骤是:

  1. IF:获取 R[a1] ← M[R[a0] + 0] 指令。
  2. ID:解码指令,读取寄存器 R[a0] 的值,准备访问内存地址。
  3. EX:计算内存地址 R[a0] + 0(结果为 R[a0])。
  4. MEM:使用计算出的地址从内存 M 中读取数据。
  5. WB:将读取的数据写回寄存器 R[a1]

拿第三条指令 R[a3] ← R[a1] - R[a2] 来说,在五段流水线中的执行步骤如下:

  1. IF:从内存中获取 R[a3] ← R[a1] - R[a2] 指令。
  2. ID:解码指令,读取寄存器 R[a1]R[a2] 的值。
  3. EX:执行减法运算 R[a1] - R[a2]
  4. MEM:此指令不涉及内存操作,因此此阶段无操作。
  5. WB:将计算结果写回寄存器 R[a3]

拿第四条指令 M[R[a0]+0] ← R[a3] 来说,在五段流水线中的执行步骤如下:

  1. IF:从内存中获取 M[R[a0]+0] ← R[a3] 指令。
  2. ID:解码指令,读取寄存器 R[a0]R[a3] 的值。
  3. EX:计算内存地址 R[a0] + 0(即 R[a0])。
  4. MEM:将寄存器 R[a3] 的值写入内存 M[R[a0]]
  5. WB:此阶段没有操作,因为数据已写入内存。

由此可以先解决第四小问:

  1. load指令需要经过IF、ID、EX、MEM、WB,
  2. sub指令需要经过IF、ID、EX、WB,
  3. store 指令需要经过 FF、ID、EX、MEM。
  4. 因此指令I1、I2的执行时间为 5T,指令 I3、I4 的执行时间为 4T。

综上所述,第一小题的答案就可以归结为:

  • 知识点回顾3:第二小问,考察数据旁路(本质是从暂存寄存器中读取要用到的数据)

而在本题中,因为I4在ID阶段需要读取R[a3]的值,但是I3直到WB阶段才能写回R[a3]寄存器,所以这里的旁路关系就是EX→ID(跟王道书上EX->EX有点不同,但本质相同)【以下是25竟成第二套卷43题参考答案,其未考虑两重load指令的结构冒险,本人已做修正】

知识点回顾4:第三小问考察流水线的性能指标

通过第(2)问的分析,可以得出使用流水线情况下完成所有任务的时间为10个时钟周期。

  1. 吞吐率=任务数 / 完成所用任务所用的时间=4/(10T);
  2. 加速比=不使用流水线情况下执行完所有任务的时间,即:(4x5T)÷10T=2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值