例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:其次,五段流水线各自的功能,要十分地清楚:
拿第一条指令
| 拿第三条指令
| 拿第四条指令
|
由此可以先解决第四小问:
- load指令需要经过IF、ID、EX、MEM、WB,
- sub指令需要经过IF、ID、EX、WB,
- store 指令需要经过 FF、ID、EX、MEM。
- 因此指令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个时钟周期。
- 吞吐率=任务数 / 完成所用任务所用的时间=4/(10T);
- 加速比=不使用流水线情况下执行完所有任务的时间,即:(4x5T)÷10T=2