我一直在研究这个问题,经过我自己的尝试,我发现了3个数据危险。然而,其他消息来源却另有说法。在以下说明中查找所有危险(MIPS Pipeline):
add $t3, $t1, $t2 sub $t3, $t2, $t1 and $t4, $t3, $t1 or $t0, $t3, $t4 xor $t1, $t4, $t3 sw $t4, 4($t0)
字符串不仅如此,即使是chatGPT也没有给出任何结论性的解释:
nwlqm0z11#
这是一个人为的和愚蠢的代码序列。
add $t3, $t1, $t2 sub $t3, $t2, $t1
字符串在上面的例子中,$t3被add写入,但随后被sub覆盖,并且没有使用add s $t3。就其本身而言,这不会产生危险,数据危险也称为RAW危险,代表写后读。在上文中,仅存在写入后写入,MIPS管线不会遭受危险。在下一个指令中:
$t3
add
sub
and $t4, $t3, $t1
型在$t3上存在一个数据RAW危险。当我们考虑下一条指令时:
or $t0, $t3, $t4
型我们在一条指令中有两个危险,一个在$t3上,一个在$t4上。由于一个指令中有两个危险,我们必须成为阅读问题陈述的Maven来确定答案。因为它仍然只有一条指令,如果你计算有危险的指令,它算作一条,但如果你计算危险本身,它算作两条。与:
$t4
xor $t1, $t4, $t3
型我们在$t4上有一个危险,但是$t3已经通过管道并返回到寄存器文件,如果您使用寄存器文件可以读取当前周期写入结果的常见实现细节。最后:
sw $t4, 4($t0)
型$t0上存在RAW数据危险。所以,我数了5个RAW危险,和4个至少有一个RAW危险的指令。
$t0
1条答案
按热度按时间nwlqm0z11#
这是一个人为的和愚蠢的代码序列。
字符串
在上面的例子中,
$t3
被add
写入,但随后被sub
覆盖,并且没有使用add
s$t3
。就其本身而言,这不会产生危险,数据危险也称为RAW危险,代表写后读。在上文中,仅存在写入后写入,MIPS管线不会遭受危险。在下一个指令中:
型
在
$t3
上存在一个数据RAW危险。当我们考虑下一条指令时:
型
我们在一条指令中有两个危险,一个在
$t3
上,一个在$t4
上。由于一个指令中有两个危险,我们必须成为阅读问题陈述的Maven来确定答案。因为它仍然只有一条指令,如果你计算有危险的指令,它算作一条,但如果你计算危险本身,它算作两条。与:
型
我们在
$t4
上有一个危险,但是$t3
已经通过管道并返回到寄存器文件,如果您使用寄存器文件可以读取当前周期写入结果的常见实现细节。最后:
型
$t0
上存在RAW数据危险。所以,我数了5个RAW危险,和4个至少有一个RAW危险的指令。