パイプラインハザード2
パイプラインハザードに関する以下の問いに答えよ。C言語で図1のコードをコンパイルしたところ図2のような機械語に翻訳された。変数のメモリマップは図3を参照せよ。
図1:C言語による演算コード
A=B+C
D=B+E
図2:図1のコードを翻訳した機会コード
LOAD R1 SO(4)
LOAD R2 SO(8)
ADD R3 R1 R2
STORE SO(0) R3
LOAD R2 SO (16)
ADD R3 R1 R2
STORE SO(12) R3
図3:変数のメモリマップ
SO→|AAAA|
|BBBB|
|CCCC|
|DDDD|
|EEEE|
(a)CPUがこの機械語をパイプライン処理している場合に、どのようなパイプラインハザードがありうるか説明せよ。
データハザードがというデータ依存によって起こるパイプラインハザードが起こる。データ依存とは、命令1の結果を後の命令2が使用する場合に生じるものである。命令2が処理されるためには命令1の完了を待たなければならず、待ちが生じる。
図2の機械語コードから
命令に上から順に00,01,02,03,04,05,06という番号をつけると01,02ではR2を共有しているため02は01の完了を待たなければならず待ちが生じる。他も02,03はR3を、04,05はR2を、05,06はR3を共有しているため待ちが生じる。それによってパイプラインに乱れが生じ、命令作業がスムーズに行われなくなる。
という答えになりました、ご確認お願い致します。
(b)上記のパイプラインハザードを回避するために、図2の機械語を一部修正した機械語を記せ。その際、なぜハザードが回避できるのか説明せよ。
命令追越し機能を利用するものかなと思ったのですが...はっきりとした答えがみつかりません。
ご教示お願い致します。