gpt4 book ai didi

mips - MIPS 中是否存在执行存储数据危害?

转载 作者:行者123 更新时间:2023-12-02 04:48:47 33 4
gpt4 key购买 nike

关于带有流水线和转发的 MIPS 架构:

add $s0, $t1, $t2
sw $s0, 0($sp)

add 指令将在第 3 步(执行操作)准备好结果,但我假设 sw 指令需要第 2 步(指令解码和寄存器读取)的结果。

在 David A. Patterson 的计算机组织与设计一书中有一个已解决的练习:在以下代码段中找到危险并对指令重新排序以避免任何管道停顿:

lw  $t1, 0($t0)
lw $t2, 4($t0)
add $t3, $t1,$t2
sw $t3, 12($t0)
lw $t4, 8($01)
add $t5, $t1,$t4
sw $t5, 16($t0)

解决方法:

lw  $t1, 0($t0)
lw $t2, 4($t1)
lw $t4, 8($01)
add $t3, $t1,$t2
sw $t3, 12($t0)
add $t5, $t1,$t4
sw $t5, 16($t0)

在解决方案中,它正确识别了加载使用风险并相应地重新排列代码,但是否也存在执行存储风险?

最佳答案

让我们考虑一个激活转发的 MIPS。我认为在那种情况下不会发生危险:事实上 ADD 指令是一个整数操作,在 MIPS 架构中只需要一个时钟周期。看这张图:

ADD $t3,$t1,$t2    IF   ID   EX   MEM   WB
SW $t3,12($t0) IF ID EX MEM WB

如您所见,没有危险发生,因为 SW 指令在两个时钟周期后存储数据,因为结果通过 ADD 放入 $t3。

实际上在类似的情况下可能会发生危险,但前提是该单元是多周期单元(如果它需要多个时钟周期来计算数据)。看这个例子,其中 ADD.D 指令使用浮点加法器,需要 4 个时钟周期来执行计算:

ADD.D F2,F4,F5      IF   ID   A0   A1   A2   A3   MEM   WB
S.D F2,somewhere IF ID EX X0 X1 X2 MEM WB

X0 和 X1 是 RAW stall,而 X2 是 structural stall:在前一种情况下,S.D 必须等待 ADD.D 完成;在后者中,您的 MIPS 无法在同一时钟周期内两次访问内存,因此会发生结构性停顿。

关于mips - MIPS 中是否存在执行存储数据危害?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30633283/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com