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

このQ&Aのポイント
  • データハザードとは、命令パイプラインにおいて以前の計算結果が次の処理に必要な場合に起きる問題です。
  • 例えば、データ移動命令でも同様にデータハザードが起きます。
  • データハザードを回避するためには、命令の依存関係を避けるように設計すればよいです。
回答を見る
  • ベストアンサー

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

こんにちは。コンピューターアーキテクチャのデータハザードに関する質問です。 勉強を始めたばかりなので変な質問かもしれませんが、よろしくお願いします。 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 のような時も同じようにハザードは起きるのでしょうか。 よろしくお願いします。

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

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

データハザードは「計算」の結果に限定して起きるものじゃないよ. 「レジスタからデータを読み出す」ときには, 当該レジスタの値は命令シーケンスに照らして適切なものでなければならない. だから, 必要なレジスタがそれまでの命令のデスティネーションになっている場合には, 書き込みが終了するまで命令の実行を保留しなきゃならない. これが「データハザード」の本質.

thjki6624
質問者

お礼

じゃあ、この場合も同様にハザードが起こるってことですね。 ありがとうございました。

関連するQ&A

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

    こんにちは。コンピューターアーキテクチャのパイプラインの項目の勉強をしていて、データハザードについて分からない問題があったので、質問させていただきます。 以下の二つのパイプラインの動作がよくわかりません。 基本的にはフォワーディングによって解決するデータハザードですが、メモリアドレス生成のときはフォワーディングは間に合わないので、結果の格納(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のデータを更新するだけなのでフォワーディングによって改善ができるという解釈でよろしいのでしょうか? 上は本に書いてあったものなのですが、下のはインターネットから調べたものなのであっていない可能性があるので質問しました。 ちなみに両者ともロード命令の場合なのですが、ストア命令でも同じような振る舞いになるのでしょうか? よろしくお願いいたします。

  • パイプラインハザード

    (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| データ依存、資源依存、制御依存のどれかによるものだと思うのですが、全く検討がつきません。ご教示お願い致します。

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

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

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

  • Z80アセンブルで16ビット*8ビットの乗算ルーチンを作りたいのですが・・

    16ビット*8ビットの掛け算ルーチンを作っています。 HLとAレジスタの掛け算で答えは3バイトで AHLの順に入れようとしているのですが、 困ったことに符号ありで考えるともうだめです。 HLに入れる値が小さいときはまだいいのですが、 大きくなるとどうしようって感じです。 解決策も浮かばないし・・とほほ ソースを書いてみますので、お気づきの点があれば アドバイスをよろしくお願いします。 見づらいプログラムで申し訳ないです(泣) 僕は裏レジ、一切使い(え?)ません(爆) ;IN :HL かけられる数 ; :A  かける数 ;OUT :AHLの順で入る ;----------------------------------------- muls16_8: ld B,A call mul16_8 bit 8,B jr z,muls16_8_end neg muls16_8_end: ret ;----------------------------------------- mul16_8: push BC ld B,8 ld IX,0 ld C,0 ld DE,0 mul16_8_loop: rrca jr nc,mul16_8_skip push DE push HL pop DE add IX,DE pop DE push AF ld A,E add A,C ld E,A pop AF mul16_8_skip: add HL,HL rl C djnz mul16_8_loop push IX pop HL ld A,E pop BC ret なんでタブやスペースを消すんだぁ・・・みづらい・・・

  • PLC 命令について

    PLCでの制御技術者の皆様へ 現在、PLCの技術者として走り出しましたが、命令用語がどうしても 判りません。マニュアルを見ても判らない。。。 申し訳ありませんが、以下の命令用語の意味を教えていただけませんでしょうか。宜しくお願いいたしします。 [WAND W219B HOF D500] [FLT D130 D141] [E* D141 E1.4 D145] [INT D145 D140] [E/ E23 E8.36 D125] [BIN K3X448 D502] [BCD D316 D332 ] [DIS D332 D330 K2 ] [PLS M868] [FMOV K0 K4F0 K100] [CJ P0] [DMOV K0 K4L2217] [DMOVP D344 D346] [DSFR R304 K2] [< K0 K2X804] [* R900 K9466 D902] [TO H18 H1E4 H102 K1] [FROM H18 H2E4 D122 K1] [BMOV SW80 D2000 K4] [K0 K1F721] [FIFR D184 R350] [FIFW D184 R340] [BCD D150 K2Y580] [FINSP D260 R320 D210] [FDELP D270 R300 D200] [D> K7M1420 K0] [D/ R16 D912 D920] [ENCO M1320 D250 K7] [SUM K3M2351 R350] [DECO R1 M250 K3]

  • 双極子での計算について

    双極子の問題の計算のなかでよく分からなかった計算があるので、投稿させてもらいました。双極子が電場Eから力を受ける時の計算です。 双極子モーメントp=2qd   F(+)は電荷+qが受ける力 F(-)は電荷-qが受ける力 ベクトルで計算しています。 双極子が受ける力は   F=F(+)+F(-) =q{E(r+d)-E(r-d)} =2q(d・∇)E(r)   ←ここの変形が解りません。 =(p・∇)E(r)    もうひとつ モーメントNの計算 N=d×(F(+)-F(-)) =qd×{E(r+d)-E(r-d)} =2qd×E(r)    ←E(r)の変形が解りません。 よろしくお願いします

  • Excel ある条件で大量のデータを計算するには

    Excelで、縦は500行からそれ以上あるデータを下記の条件で計算を行いたいのですが、どのようにしたら宜しいでしょうか。 大量のデータであっても、簡単に計算が可能な方法をご教授頂けると有難いです。 1)A+Bでマイナス200で計算されたセル(Bが-200のセル)は、ここで完了するので、C'とD'とFでは計算しません。 2)Bが0で尚且つCが-200以下のセルのみ、A+Cで計算し、ここで完了するので、D'とFでは計算しません。 3)上記1)2)でマイナスされず、Dに-200の数値が入っているもののみ、A+Dで計算し、ここで完了するので、Fでは計算しません。 4)上記1) 2) 3)でマイナスされなかったセルのみ、FでE-Aの値を計算します(B’, C’, D’の数値は特に残す必要がなくFの結果だけ分かれば良いです)。Fでは、上記 1) 3)でマイナスされた場合-200の数値、また上記 2)でマイナスされた場合その数値(例えば-300、-500など)をセルに表示させる必要があります。 ※ BとDは、0か-200の値が入っています ※ Cは全て0かマイナスの値ですが、様々な数字が入っています ※ Eにも様々な値が入っています ※ B,C,Dには既に計算式が入っています 分かりづらく申し訳ありません。 具体的には、このように計算を行いたいです。  A    B   B’   C   C’    D   D’   E    F 15750 ー200 15550 ー450 15550  ー200 15550 15600 ー200 15680    0 15680 ー200 15480  ー200 15480 15550 ー200 15550 ー200 15350  ー30 15350    0 15350 15480 ー200 15460   0 15460  ー300 15160 ー200 15160 15260 ー300 15380 ー200 15180 ー130 15180 ー200 15180 15300 ー200 15550   0 15550 ー500 15050 ー200 15050 15000 ー500 15540   0 15540  ー20 15540 ー200 15340 15550 ー200 15530   0 15530  ー10 15530   0  15530 15630 100 15620   0 15620  ー80 15620   0  15620 15600 ー20 B’(上記1)の条件) C’(上記2)の条件) D’(上記3)の条件) F (上記4)の条件) Windows 8.1でして、Excelのバージョンは2013です。 大変申し訳ございませんが、解り易いご回答をお待ちしております。 どうぞ宜しくお願い申し上げます。

  • データの最後尾より連続入力するマクロについて

    VBA初心者です。宜しくお願いします。 やりたい処理は、データ最後尾に連続データを順に入力していく作業です。 下記ですとA5:F5のデータをA6:F6にオートフィルで入力し、 A6= 6 B6= 空白 C6= 空白  D6= 空白 E6= を F6= ん という計算結果にしたいのです。 ___|A__B__C__D__E__F 1 | 1 あ い う え お 2 | 2 か き く け こ 3 | 3 さ し す せ そ 4 | 4 た ち つ て と 5 | 5      を ん 6 | Range("A1").End(xlDown).Select Range(ActiveCell, ActiveCell.Offset(0, 5)).Select A5:F5を選択した後のオートフィルのマクロはどう記述すればよいでしょうか? 宜しくお願いいたします。

  • アセンブラ言語

    以下の言語が何を計算しているかを知りたいです。 宜しくお願い致します LD A, m (A<=m) LD E, n (E<=n) LD D, 0 (D<=0) LD HL, 0 (HL<=0) LD B, 8 (B<=8) loop; SRL A (Aを右シフト、最下位はキャリーへ) JR NC,Shift (桁上がりが無ければShiftへ) ADD HL,DE (HL<=HL+DE) shift; SLA E (Eを左シフト、最上位はキャリーへ) RL D (Dを左シフト、キャリーが最下位へ) DJNZ Loop (B<=B-1して、ゼロでなければLoopへ)