通过题目来讲一讲指令流水线相关知识 1 | 计算机组成与系统结构专题

1,292 阅读1分钟

题目1

下面是一段指令序列:

add $t1, $s1, $s0

sub $t2, $s0, $s3

add $t1, $t1, $t2

以上指令序列中,哪一条指令发生数据相关?

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

如果采用"转发"是否可以完全解决数据冒险?不行的话,需要在发生数据相关的指令前加入几条nop指令才能使这段程序不发生数据冒险?

题目1 解答

sub $t2, $s0, $s3取指译码/取数执行访存写回
nop取指译码/取数执行访存写回
nop取指译码/取数执行访存写回
nop取指译码/取数执行访存写回
add $t1, $t1, $t2取指译码/取数执行访存写回

所以需要加入3条nop指令。

如果采用“转发”,可以完全解决数据冒险。