• ベストアンサー

パイプライン制御について

noname#30871の回答

  • ベストアンサー
noname#30871
noname#30871
回答No.2

 パイプライン制御の問題点は、分岐命令との相性が悪いという点です。  パイプライン制御は、命令列が途切れなくパイプラインに送り込まれ続ける場合に効力を発揮します。しかし、実際のプログラムの中には命令の分岐があります。すなわち、次にどの命令を処理すべきなのかが事前には分からないことがあります。  分岐、すなわち命令のジャンプが生じるとパイプラインの中で実行中の命令はキャンセルしなければなりません。たとえば10段のパイプラインの中で9段まで処理が終わっていても「今のはなかったこと」にします。これをパイプラインのflushと呼びます。結果的に無駄な処理が生じます。パイプラインの段数が深くなるほどflushの被害(ペナルティ)は大きくなります。  下のURLに図がありますのでごらんください。 http://www.watch.impress.co.jp/pc/docs/article/toku0101/plan7.htm  その対策としては「分岐予測」があります。すなわち分岐結果を予めCPUが自分で予測して、分岐先の命令列をパイプラインに詰めてしまいます。分岐予測が当たればflushは不要です。  Pentium4などパイプライン段数が深いCPUになるほど、ペナルティを避けるために分岐予測の精度を上げる工夫がなされています。

参考URL:
http://www.atmarkit.co.jp/fpc/rensai/zunouhoudan007/pipline.html
rokomoko
質問者

お礼

とてもわかりやすい回答、どうもありがとうございました。勉強になりました!!! やはりamajunさんは、SEか何かなのでしょうか?マシンに詳しそうで、尊敬いたします。

関連するQ&A

  • パイプライン処理の処理能力について

    現在、ソフトウェア開発技術者試験の勉強をしているものです。 お忙しいところ、誠に申し訳ございませんが、 以下の問題の考え方について、アドバイス頂けないでしょうか? 頭を悩ましているのは、以下の問題です。 一つの命令を構成する各処理を 表に示す時間で行うプロセッサがある。 各処理を、それぞれパイプラインの1ステージに 割り当てる5段パイプライン構成のプロセッサの 命令処理速度は、パイプライン化していない プロセッサに比べて何倍になるか? <処理名>:<最大処理時間(単位:ナノ秒)> 命令フェッチ:100 命令デコード:50 オペランド読出し:100 演算処理:80 演算結果書込み:100 答えは、4.3倍だったのですが、どうも解答に納得できません。 例えば、2命令を実行した場合を考えた時、 <通常> □□□□□□□□□□□□□□□ 430(100+50+100+80+100)×2=860ナノ秒 <パイプライン> □□□□□  □□□□□ 1処理あたり最大100ナノ秒なので、 2命令実行するのに600ナノ秒かかる。 つまり、860÷600≒1.4倍だと思いました。 解答の考え方は、 パイプラインでの処理能力を500ナノ秒の間に、 5命令実行可能だと解釈しています。 □□□□□ ■□□□□ ■■□□□ ■■■□□ ■■■■□ ※■:前の命令のステージを表す。 たぶん、納得できないのはここの解釈だと思うのですが…。

  • パイプライン方式での処理時間の求め方

    応用情報の問題で、わからない所があります。 パイプラインの深さをD 、パイプラインのピッチをP 秒とすると、I 個の命令をパイプラインで実行するのに要する時間を表す式はどれか。 ここで、パイプラインの各ステージは1ピッチで処理されるものとし、パイプラインハザードについては、考慮しなくてよい。  ア  (I +D )×P  イ  (I +D -1)×P  ウ  (I ×D )+P  エ  (I ×D -1)+P 正解は「イ」なのですが、お恥ずかしながら全く腑に落ちません。 私の理解とそれによって導き出される式は以下のようになっています。 どこでまちがっているのか、教えていただけませんでしょうか。 ◆私の理解  パイプラインの深さをD:命令の中のステージ数はD個  パイプラインのピッチをP 秒:1ピッチP秒かかる  パイプラインの各ステージは1ピッチで処理:各ステージの処理はP秒かかる  I 個の命令:命令がI個ある ◆式  所用時間= I × (D × P) D×Pで命令内全ステージにかかる時間を求めたつもりです。 それに命令数をかけています。 すみません、よろしくお願いいたします。

  • 命令パイプラインをつかった問題です。

    命令パイプラインをつかった問題です。 あるプロセッサの命令パイプラインは、命令読み出し、命令解読(デコード)、 オペランド読み出し、演算、オペランド書き込みの5つのステージからなり、 各ステージの処理は1クロックで完了する。 このプロセッサにおける平均CPI(Clock Per Instruction)が5であるとすると、 クロック周波数が 1GHzのとき、このプロセッサの 1秒間辺りの平均命令実行数を MIPSあるいはGIPSを単位として答えなさい。 検索してもcpiについてのことが書いてないので(私が理解できずに見過ごしてるかも・・)、cpiについても軽く説明があると嬉しいです!

  • パイプライン処理について

    はじめまして。 パイプライン処理について質問させて頂きます。1、目的(何のためにパイプライン処理を行うのか)2、処理方法(どのように処理するのか)3、課題と対策(どのような問題が発生するか、またその解決方法は何か)を教えて下さい。 宜しくお願い致します。

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

  • パイプラインについて

    最近、中東問題などからよく登場する「パイプライン」ですが、ちょっと実物について調べています。 ●パイプラインの大きさ(直径・長さ) ●管理などのメンテナンス方法 ●安全性・耐久性 ●運送量 ●通過料 ●どうやってパイプラインを通るのか ●敷設に関しては、国際入札を行っているのか ●敷設時の出資比率 などなど、なんでもいいのでご存じの方、教えて下さい。よろしくお願いいたします。

  • CPUの高速化技法

    CPUの高速化技法のパイプライン制御の動作中に分岐命令があった場合の計算問題です パイプライン制御を行うと高速に命令を実行できる反面、分岐命令を行うと、前もって取り出しておいた命令を破棄して再度命令の取り出しからやり直さなければならない。 もし、分岐命令がないとき1つのステージを処理するのに5ナノ秒かかるとすると、6個の命令を実行するのに( )ナノ秒かかる。 この問題が分かりません。 答えは55ナノ秒となってます。

  • ゴルビーのパイプライン大作戦

    ゴルビーのパイプライン大作戦のゲーム中で初めに100000点取るとロケットが発射されます。次に気球が打ちあがります。そしてその次にうなぎが登っていきますが、さてここからが質問で、その次には何が上がるんですか、そしてその次には???回答お待ちしております。追伸ですがゴルビーのパイプライン大作戦のCDを探しております。

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

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

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

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