アプリ版:「スタンプのみでお礼する」機能のリリースについて

最近独学で計算機アーキテクチャーについて勉強しております。
本を読んでいたらパイプラインのところで「データハザードはパイプライン・インターロックというハードウェアで検出される」という記述があったのですが、これについてもう少し詳しく知りたいです。
具体的には、例えば以下のような命令列があった場合、
i1: ADD R4=R1+R2
i2: ADD R5=R4+R3
データハザードの検出により、(バイパスがなければ)以下のようにストール(ST)が挿入されます。
i1: ADD R4=R1+R2 IF ID EX MA WB
i2: ADD R5=R4+R3   IF ST ST ST ID EX MA WB
この「データハザードの検出(テスト)」というのはどのようなタイミングで行われるのでしょうか?
(a)1回テストして検出された場合すぐに上のような対処(STを3つ挿入)が行われるのでしょうか? それとも
(b)1回テストして検出された場合、STが1つ挿入される。再度テストしてまた検出された場合、STがもう1つ挿入される... という具合にして正しい対処にたどりつくのでしょうか? あるいは
(c)他の仕組みによるのでしょうか?

どうぞよろしくお願いいたします。

A 回答 (1件)

(b)です。


i1自体が、さらに先行する命令の影響で、R1やR2の読み込みでストールする可能性がありますから、R4のビジー状態が何クロック先に終わるかを検出することは困難です。
そういう複雑な回路を設けて「いきなりSTを3つ挿入」するメリットはありません。

先行する命令i1は、命令デコードステージが終わって、R4に書き込むと判明した段階で、R4をビジーにします。
そして、ライトバックステージ(R4への書き込み)が終わったら、R4のビジーを解除します。

後発のi2は、命令デコードステージが終わって、R3とR4を読み込むと判明した段階で、R3とR4のどちらかがビジーの間はストールし続けます。
そして、ビジーでなくなってから、実行ステージに移ります。
(だから、ストールするのはIDの後)
    • good
    • 0
この回答へのお礼

mtaka2様、御教示ありがとうございます。

その後ネットでパイプライン・インターロック(ハザード検出ユニット)の具体的な構成(論理回路)を見つけて、御説明の内容をイメージできるようになりました(つもりです)。

どうもありがとうございました。

お礼日時:2010/03/29 06:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!