1.假设最复杂的一条指令所用的组合逻辑分成6块,依次为A~F,其延迟分别为80ps、30ps、60ps、50ps、70ps、10ps,最后一个寄存器延迟为20ps。在这些组合逻辑块之间插入必要的流水线寄存器就可实现相应的指令流水线。理想情况下,以下各种方式所得到的时钟周期、指令吞吐率和指令执行时间各是多少?应该在哪里插入流水线寄存器?(假定插入的流水线寄存器的延时为20ps)

A. 插入一个流水线寄存器,得到一个两级流水线

B. 插入两个流水线寄存器,得到一个三级流水线

C. 插入三个流水线寄存器,得到一个四级流水线

D. 吞吐量最大的流水线

   


2.下面有关指令流水线的叙述中,错误的是( )。

A. 流水段个数按同一个流水线中最复杂指令的功能来确定

B. 每个流水段的时间相同,等于一个CPU时钟的宽度

C. 每个时钟都会有一条指令执行完

D. 流水线方式不能使一条指令的执行时间缩短,但能使整个程序的执行时间缩短

   


3.下面是一段指令序列:

add $t1, $s1, $s0

sub $t2, $s0, $s3

add $t1, $t1, $t2

以上指令序列中,哪一条指令发生数据相关?假定采用"取指、译码/取数、执行、访存、写回"这种五段流水线方式,那么不用"转发"技术的话,需要在发生数据相关的指令前加入几条nop指令才能使这段程序避免数据冒险?如果采用"转发"是否可以完全解决数据冒险?不行的话,需要在发生数据相关的指令前加入几条nop指令才能使这段程序不发生数据冒险?

   


4.下面是一段指令序列:

loop: add $t1,$s3,$s3

   add $t1,$t1,$t1

   add $t1, $t1,$s6

   lw $t0,0($t1)

   bne $t0,$s5,Exit

   add $s3,$s3,$s4

   j Loop
  Exit:
分析以上指令序列,要求:
(1)指出哪些指令产生数据相关?哪些指令发生控制相关?
(2)如果不用“转发”或“分支预测”来进行冒险处理,而是简单地通过加入nop指令来避免冒险,那么加入nop指令后的指令序列是怎样的?
(3)假定采用“转发”进行数据冒险处理,并在必要时在相应阶段加入“气泡”来阻塞流水线,使流水线停顿一个周期,那么,在哪条指令的哪个阶段需要加入“气泡”呢?