5级流水线CPU具有以下阶段序列:
请考虑以下指令序列:
I1: L R0, loc 1 ; R0 <=M[loc1]
I2: A R0, R0 1 ; R0 <= R0 + R0
I3: S R2, R0 1 ; R2 <= R2 - R0
让每个阶段花费一个时钟周期。从获取I1开始,完成上述指令序列所需的时钟周期数是多少?
所以这是我的解决方案。
1 2 3 4 5 6 7 8 9 10 11 12 13
I1: IF RD EX MA WB
I2: IF - - - RD EX MA WB
I3: IF - - - - - - RD EX MA WB
通过这种方式,我总共得到13个周期。我假设因为在问题中没有明确提到操作数转发。所以注册只能在WB阶段之后才能使用。但选项如下:
由于下面的线,给出的问题是基于结构危险
“MA - 数据存储器访问 - 用于写访问,使用在RD状态读取的寄存器”
而不是数据依赖,尽管它似乎有数据依赖性。因此,在问题中没有提到有关数据转发的内容。
结构危险适用于加载指令。因此,直到执行第一条指令才能开始执行下一条指令,因为M [loc1]引用的存储单元的有效地址将仅在流水线的执行阶段计算。因此,在此之前总线将不会被释放,因此无法获取第二条指令。因此,第二条指令将需要额外2个时钟周期。
并且第三条指令在第一条指令成功将数据加载到寄存器R0之前无法开始执行。这导致第三条指令有3个以上的时钟周期。
Hence, total clock cycles = (CC for I1) + (CC for I2) + (CC for I3)
= 5 + 2 + 3
= 10 clock cycles
对于写访问,使用在RD阶段读取的寄存器 - 这意味着如果我们不能操作数将值转发到MA阶段。因此,我们可以假设操作数转发可以用于其他阶段。
通过数据转发:
T1 T2 T3 T4 T5 T6 T7 T8
如果RD EX MA WB -IF RD - EX MA WB --IF - RD EX MA WB
因此,答案将是8。
http://www.cs.iastate.edu/~prabhu/Tutorial/PIPELINE/forward.html