3

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

2 に答える 2

0
Data hazards:
(a) Line 3 needs to wait for line 2 to evaluate the value of $4 (in the
first iteration)
(b) Line 4 needs to wait for line 2 to evaluate the value of $4 (every
iteration)
(c) Line 5 needs to wait for line 4 to evaluate the value of $5 (every
iteration)
(d) Line 8 needs to wait for line 7 to evaluate the value of $2

Control hazard
(a) Line 8 will stall while determining if $2 is equal to $0

Moving lines 6 and 7 to between lines 4 and 5 (alternatively moving
line 5 to between line 7 and 8) and swapping the order, i.e. line 7
before line 6, would provide the most savings with stalls, because that
stall occurs on each iteration of the loop. The swap is necessary to
avoid the data hazard with line 8.
于 2012-10-22T22:00:59.403 に答える
0
  1. 3行目は2行目に依存しています(4ドル)
  2. 4行目は3行目に依存しています(4ドル)
  3. 5行目は3行目($ 4の場合)と4行目(追加のWBでは:値はレジスタファイルに書き込まれます-クロックサイクルの前半で。同時にswのMEMが実行されます。値が必要になります-クロックサイクルの前半。したがって、これら2つの間に危険状態が存在します)
  4. 8行目は7行目に依存しています
于 2014-10-07T17:41:27.093 に答える