誰かがこの質問に対する私の答えを確認できるかどうか疑問に思っています!来週は中間期がありますが、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