我想知道是否有人可以验证我对这个问题的回答!我下周有期中考试,TA还没有发布这个问题的解决方案:
考虑以下 MIPS 汇编代码并在没有实现管道优化(包括转发)的假设下识别所有管道危险。第一列数字是行号,您可以在解释中参考。
1. addi $3, $0, 100
2. addi $4, $0, 0
3. loop: addi $4, $4, 4
4. add $5, $4, $3
5. sw $5, 100($4)
6. addi $1, $1, -1
7. slt $2, $4, $3
8. bne $2, $0, loop
9. jr $31
重新排序指令以将停顿的数量减少到最低限度
我的答案:
从第 2 行移动到第 3 行(从外部循环到内部),存在危险,因为第 3 行需要的 $4 用于加法取决于第 2 行 $4 中设置的值。
第 4 行有一个危险,因为它依赖于第 3 行中为 $4 设置的值。
第 5 行有一个危险,因为它依赖于第 4 行中为 $4 设置的值。
第 8 行有一个危险,因为它依赖于第 7 行中为 $2 设置的值。
重新排序的说明:
addi $4, $0, 0 2
addi $3, $0, 100 1
loop: addi $4, $4, 4 3
addi $1, $1, -1 6
add $5, $4, $3 4
slt $2, $4, $3 7
sw $5, 100($4) 5
bne $2, $0, loop 8
jr $31 9