パイプライン制御(ハザード検出の仕組み)

このQ&Aのポイント
  • パイプライン制御でのハザード検出について知りたい
  • データハザードの検出タイミングと対処方法について教えてください
  • パイプライン制御でのデータハザードの検出はどのように行われるのか
回答を見る
  • ベストアンサー

パイプライン制御(ハザード検出の仕組み)

最近独学で計算機アーキテクチャーについて勉強しております。 本を読んでいたらパイプラインのところで「データハザードはパイプライン・インターロックというハードウェアで検出される」という記述があったのですが、これについてもう少し詳しく知りたいです。 具体的には、例えば以下のような命令列があった場合、 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)他の仕組みによるのでしょうか? どうぞよろしくお願いいたします。

noname#156238
noname#156238

質問者が選んだベストアンサー

  • ベストアンサー
  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.1

(b)です。 i1自体が、さらに先行する命令の影響で、R1やR2の読み込みでストールする可能性がありますから、R4のビジー状態が何クロック先に終わるかを検出することは困難です。 そういう複雑な回路を設けて「いきなりSTを3つ挿入」するメリットはありません。 先行する命令i1は、命令デコードステージが終わって、R4に書き込むと判明した段階で、R4をビジーにします。 そして、ライトバックステージ(R4への書き込み)が終わったら、R4のビジーを解除します。 後発のi2は、命令デコードステージが終わって、R3とR4を読み込むと判明した段階で、R3とR4のどちらかがビジーの間はストールし続けます。 そして、ビジーでなくなってから、実行ステージに移ります。 (だから、ストールするのはIDの後)

noname#156238
質問者

お礼

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

関連するQ&A

  • パイプラインハザード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の機械語を一部修正した機械語を記せ。その際、なぜハザードが回避できるのか説明せよ。 命令追越し機能を利用するものかなと思ったのですが...はっきりとした答えがみつかりません。 ご教示お願い致します。

  • パイプラインハザード

    (2)パイプラインハザードに関する以下の問いに答えよ。C言語で図1のコードをコンパイルしたところ図2のような機械語に翻訳された。変数のメモリマップは図3を参照せよ。 (a)CPUがこの機械語をパイプライン処理している場合に、どのようなパイプラインハザードがありうるか説明せよ。 (b)上記のパイプラインハザードを回避するために、図2の機械語を一部修正した機械語を記せ。その際、なぜハザードが回避できるのか説明せよ。 図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| データ依存、資源依存、制御依存のどれかによるものだと思うのですが、全く検討がつきません。ご教示お願い致します。

  • データハザードについて(パイプライン)

    こんにちは。コンピューターアーキテクチャのパイプラインの項目の勉強をしていて、データハザードについて分からない問題があったので、質問させていただきます。 以下の二つのパイプラインの動作がよくわかりません。 基本的にはフォワーディングによって解決するデータハザードですが、メモリアドレス生成のときはフォワーディングは間に合わないので、結果の格納(W)が終わらないと命令フェッチ(F)ができないそうです。つまり add r1, r2 .r3    F D E W lw r4, dpl(r1)         F X X DEW となるそうです。しかし ld r2, c(r1) subi r1, r1, 4 のように「ロード命令の次に算術命令」という順番ですと、ハザードは生じないそうです。 下の場合は上と違いr1のデータを更新するだけなのでフォワーディングによって改善ができるという解釈でよろしいのでしょうか? 上は本に書いてあったものなのですが、下のはインターネットから調べたものなのであっていない可能性があるので質問しました。 ちなみに両者ともロード命令の場合なのですが、ストア命令でも同じような振る舞いになるのでしょうか? よろしくお願いいたします。

  • 命令パイプライン、データハザードについて

    こんにちは。コンピューターアーキテクチャのデータハザードに関する質問です。 勉強を始めたばかりなので変な質問かもしれませんが、よろしくお願いします。 add r1 r2 r3       F D E  W mul r4 r1 r5          F × × D E W 以前の計算結果が現在の処理(この場合ですとmulの処理)に必要な場合、データハザードが起きるということなのですが、この以前の計算の部分がデータ移動命令でも同じようにデータハザードは起こるのでしょうか つまり、 ld r1 r2 15 mul r4 r1 r5 のような時も同じようにハザードは起きるのでしょうか。 よろしくお願いします。

  • パイプラインの5つのフェーズ

    パイプラインのフェーズの割り方で I・D・R・EX・Wに分かれている図があったのですが、 I:Instruction fetch 命令フェッチ D:decode デコード R:? EX:execution 演算実行 W:write back 結果の格納 Rだけが何を指すのかわかりません。 何を指すのでしょうか?

  • エクセルで行を挿入して小計合計を出したい

    質問ですが,以下の参考としたマクロについて,データが1支店1件しかない場合は行を挿入せずにこのままとしたい場合はどのように修正すれば良いか教えていただけませんでしょうか。 1支店2件以上のデータがある場合は,以下の参考としたマクロのとおり行を挿入して小計を計算表示する。  支店コード1001 20000円 200円  ← 行挿入不要 小計無し       1002 30000円 200円       1002 45000円 300円       小計 75000円 500円 参考にした質問・アドレス A列に支店コード(4桁の数値)、J列に金額、K列に手数料があります。 支店は5箇所でデータは1支店あたり100~500行ほどあります。全支店のデータが連続しています。 1.支店コードの最終行の下に1行挿入し、J列,K列の小計を計算する。 2.最後の支店の小計の下に一行あけてJ列,K列の合計をしたい。 Sub test01() d = Range("a2").CurrentRegion.Rows.Count ' MsgBox d Cells(d + 1, 1) = "END" Dim st1, gt1, st2, gt2 As Long st1 = 0: gt1 = 0: st2 = 0: gt2 = 0 mk = Cells(2, 1) '========== For i = 2 To 10000 If Cells(i, 1) = "END" Then Exit For '最終行判定 If Cells(i, 1) = mk Then '前行とコード同じか '------今回行分加算 st1 = st1 + Cells(i, 2) st2 = st2 + Cells(i, 3) Else mk = Cells(i, 1) '--------小計 Cells(i, 1).EntireRow.Insert Cells(i, 1) = "小計" Cells(i, 2) = st1 gt1 = gt1 + st1 st1 = 0 Cells(i, 3) = st2 gt2 = gt2 + st2 st2 = 0 '-----今回行分加算 i = i + 1 st1 = st1 + Cells(i, 2) st2 = st2 + Cells(i, 3) End If Next i '============終了 '-------小計 Cells(i, 1) = "小計" MsgBox st1 Cells(i, 2) = st1: gt1 = gt1 + st1: st1 = 0 Cells(i, 3) = st2: gt2 = gt2 + st2: st2 = 0 '-------合計 Cells(i + 1, 1) = "合計" Cells(i + 1, 2) = gt1 Cells(i + 1, 3) = gt2 End Sub   アドレス http://okwave.jp/qa/q414647.html

  • フルカラーLEDの制御

    技術、予算的に厳しいのでPICを使用せずに、ダイオードマトリックスでフルカラー制御を行いたいと考えています。 1回路8接点のロータリースイッチで、以下の7パターン(8接点目は省略)を切り替える仕様です。 過去ログのhttp://oshiete1.goo.ne.jp/qa1433600.htmlで、似たような事が書いてあったため、参考にして回路図を書いてみました。 ちなみにフルカラーLEDは並列で8つほど接続する予定です。(各LEDのR,G,Bに抵抗を取り付ける予定) 各抵抗値は、20mAを想定して、R=495Ω、G=430Ω、B=430Ωを考えています。 そこで質問なのですが、 1)以下の回路図でうまく制御できるものなのか、教えていただけないでしょうか。 2)1の赤(R)のみ光らせた場合の回路で例えると、GとBはアノードもカソードも同じ電位に   なり、光らないという仕様になるのですが、この方法は正規なものなのでしょうか。   (負荷や寿命等に影響されない??) 3)各パターンからアノードコモンへの接続に、定電流ダイオード(E-103)を並列に繋ぎ、   20mAとしていますが、LEDを並列に8つ繋げた場合でも問題なく発光しますでしょうか。 以上、長文となりますが、よろしくお願い致します。 ------------------------------------------------------------------- 【フルカラー制御パターン ( )は点灯する色】  1  赤(R)  2  緑(G)  3  青(B)  4  黄(R+G)  5  紫(R+B)  6  水色(G+B)  7  白(R+G+B) 【フルカラーLED規格】  特殊フルカラーLED、アノードコモンタイプ   R ... VF(2.1V) ... IF(50mA)   G ... VF(3.4V) ... IF(30mA)   B ... VF(3.4V) ... IF(30mA) 【回路図】 12Vアダプター  - +  | |  | └──---┐ロータリースイッチ  | ┌-┬-┬-┼-┬-┬-┐  ┷  1 2  3 4  5 6 7         LR  LG  LB    LC         |  |  |    |         |  |  |    |         R   R   R     |         |  |  |    |         |  |  |    |         |  |  |    |         |  |  |    |  1 ───-)-┬-)-┬-)-─┐ |         | ▼| ▼|   ▽ |         | └┤ └┤  └-┤  2 ──┬-)-─-)-┬-)-─┐ |       ▼|   | ▼|   ▽ |       └┤   | └┤  └-┤  3 ──┬-)-┬-)-─-)-─┐ |       ▼| ▼|  |  ▽ |       └┤ └┤  |  └-┤  4 ───-)-─-)-┬-)-─┐ |         |  | ▼|  ▽ |         |  | └┤  └-┤  5 ───-)-┬-)-─-)-─┐ |         | ▼|  |  ▽ |         | └┤  |  └-┤  6 ──┬-)-─-)-─-)-─┐ |       ▼|   |   |  ▽ |       └┤   |   |  └-┤  7 ───-)-─-)-─-)-─┐ |         |   |   |  ▽ |         |   |   |  └-┘         |   |   |              ┷  ┷  ┷  ※各記号の説明   LR ... LEDのR端子   LG ... LEDのG端子   LB ... LEDのB端子   LC ... LEDのアノードコモン   R ... 抵抗   ▼ ... 汎用整流用ダイオード TAIWAN製 1N4007(1Aタイプ)   ▽ ... 定電流ダイオード 石塚電子製 E-103(10mA)並列繋ぎ   -)- ... 立体交差   ┷ ... GND

  • メインクロック

    すみません、V850について質問です。 1.WDT機能でカウンタにメインクロックを使用しているため 信頼性が低いとあるのですが、なぜでしょうか。 2.ADD命令にIF,ID,EX,DF,MEM(T1,T2),WBとありますが   それぞれどのような意味でしょうか. 特にDFが知りたいです。 3.レジスタが16ではなく32ビットが主流なのは   なぜでしょうか。 よろしくお願いします。

  • 外付けDVDドライブの検出ができません

    PCを2台所有しております。OSは両方ともXPですが、片方ではきちんと外付けDVDドライブ(I.O DATA DVR-UM16R)の検出ができるのに、もう一台では検出ができませんでした。 検出で出来ないほうのデバイスマネージャーを確認すると、認識をしている形跡はあるのですが、黄色のビックリマークがついています。 この場合ドライバーをインストールして、正常作動させるのかやりかたがあっているか、お詳しいかたいらっしゃれば、お教えください。 いちおうそれらしい(ドライバーインストール)方法はとってみたのですが、不慣れなものでうまくいきません。 日ごろこのての操作になれていませんので、根本的なやりかたがまちがっていた場合は、お手柔らかに(笑)お教えください。よろしくお願い申し上げます。

  • Forループの制御について

    VB 2005,Framework2.0を使用しています。 For文を使ったループについてお尋ねしたいことがあります。 For i As Integer = 0 To 10     ’処理 Next i とあったとします。 そうするとループ変数iが0から10になるまで連続してループを行うのですが、これをある条件の時に現在のループ変数から一つ飛ばして次のループからまた処理を行いたい場合どのようにすれば良いのでしょうか? 例えば0~10回中に、現在5回目で特定の条件が一致したときその次の6回目のループは飛ばして7回目のループから再開したいです。 ちなみにこの様に書いても0から10回必ずループされてしまいました。 Dim TEST(10) As Integer TEST(5) = 1 For i As Integer = 0 To 10 If TEST(i) = 1 Then i = i + 1 End If Next i