• ベストアンサー

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

パイプライン制御について、その問題点を教えて下さい。最初の命令の処理結果によって、次の命令の処理結果にも連鎖して影響がある・・というようなことだったと思いますが・・・。詳しい方、よく知っている方、どうぞよろしくお願いします。

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

  • ベストアンサー
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か何かなのでしょうか?マシンに詳しそうで、尊敬いたします。

その他の回答 (1)

  • kazuya-i
  • ベストアンサー率21% (7/32)
回答No.1

パイプライン制御ってMUの処理のことですよね。 前の処理が終る前に次の命令のフェッチをはじめるってことだと思ったので 例えば連続して同じレジスタ(やメモリ)に処理を行うもの、条件分岐前後の処理は 実行してしまうとまずいので性能低下する場合があると思います。 前者に関しては、コンパイラで最適化を行い、条件分岐については キャッシュを行うことによって性能を維持できるのではなかったでしょうか・・・ 詳しくは書籍等で学習されてはいかがでしょうか・・・ http://www.ohmsha.co.jp/data/books/contents/4-274-07659-8.htm などがぱっと見つかりましたが

rokomoko
質問者

お礼

早速のご回答、ありがとうございました。 とても参考になりました!!

関連するQ&A