2016-09-17 1 views
2

MIPSに次のコードを考えてみて下さい:I3にI2から$ 2の上すべての書き込み後読み取り(RAW)データ依存

lw $1, 40($2) # I1 
add $2, $3, $3 # I2 
add $1, $1, $2 # I3 
sw $1, 20($2) # I4 

私自身の答えはI1からI3とI4に$ 1上のRAWでの、そしてI4、I3からI4までの$ 1。

しかし、解決策にはI1からI4までの$ 1が含まれていません。どうしてこんなことに?

答えて

1

解決策は、I1からI4までの$ 1を含まない。

I4のストアドデータ($ 1)はI3から、ストアアドレス($ 2)はI2からのものです。入力はどちらもとなり、I1から直接になりません。

I1負荷の$ 1出力は、I3以降のものでは必要ありません。

(レジスタの名前を変更した順序外のCPUでは、I3 addがリタイアするとそれを参照することはありません(これを保持するアーキテクチャ上の$ 1レジスタは上書きされているためです)。解放されます。

ロードから始まり、ストアで終わる依存関係のチェーンがあり、それを見ると便利ですが、ハザード分析とは別物です。

デッドチェーンがループで運ばれているかどうか、または各反復に別個の依存関係チェーンがあるかどうかを調べることは、アウトオブオーダー実行と非常に関係します(OoOEが複数反復)。独立した依存関係チェインは基本的にCPUが発見して利用できる命令レベル並列処理と同じものです。

関連する問題