-PR-
解決
済み

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

  • すぐに回答を!
  • 質問No.62190
  • 閲覧数291
  • ありがとう数3
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 90% (547/602)

パイプライン制御について、その問題点を教えて下さい。最初の命令の処理結果によって、次の命令の処理結果にも連鎖して影響がある・・というようなことだったと思いますが・・・。詳しい方、よく知っている方、どうぞよろしくお願いします。
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.2

 パイプライン制御の問題点は、分岐命令との相性が悪いという点です。

 パイプライン制御は、命令列が途切れなくパイプラインに送り込まれ続ける場合に効力を発揮します。しかし、実際のプログラムの中には命令の分岐があります。すなわち、次にどの命令を処理すべきなのかが事前には分からないことがあります。

 分岐、すなわち命令のジャンプが生じるとパイプラインの中で実行中の命令はキャンセルしなければなりません。たとえば10段のパイプラインの中で9段まで処理が終わっていても「今のはなかったこと」にします。これをパイプラインのflushと呼びます。結果的に無駄な処理が生じます。パイプラインの段数が深くなるほどflushの被害(ペナルティ)は大きくなります。

 下のURLに図がありますのでごらんください。
http://www.watch.impress.co.jp/pc/docs/article/toku0101/plan7.htm

 その対策としては「分岐予測」があります。すなわち分岐結果を予めCPUが自分で予測して、分岐先の命令列をパイプラインに詰めてしまいます。分岐予測が当たればflushは不要です。

 Pentium4などパイプライン段数が深いCPUになるほど、ペナルティを避けるために分岐予測の精度を上げる工夫がなされています。
お礼コメント
rokomoko

お礼率 90% (547/602)

とてもわかりやすい回答、どうもありがとうございました。勉強になりました!!!
やはりamajunさんは、SEか何かなのでしょうか?マシンに詳しそうで、尊敬いたします。
投稿日時 - 2001-04-13 19:46:04
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1
レベル8

ベストアンサー率 21% (7/32)

パイプライン制御ってMUの処理のことですよね。 前の処理が終る前に次の命令のフェッチをはじめるってことだと思ったので 例えば連続して同じレジスタ(やメモリ)に処理を行うもの、条件分岐前後の処理は 実行してしまうとまずいので性能低下する場合があると思います。 前者に関しては、コンパイラで最適化を行い、条件分岐については キャッシュを行うことによって性能を維持できるのではなかったでしょうか・ ...続きを読む
パイプライン制御ってMUの処理のことですよね。
前の処理が終る前に次の命令のフェッチをはじめるってことだと思ったので

例えば連続して同じレジスタ(やメモリ)に処理を行うもの、条件分岐前後の処理は
実行してしまうとまずいので性能低下する場合があると思います。

前者に関しては、コンパイラで最適化を行い、条件分岐については
キャッシュを行うことによって性能を維持できるのではなかったでしょうか・・・

詳しくは書籍等で学習されてはいかがでしょうか・・・
http://www.ohmsha.co.jp/data/books/contents/4-274-07659-8.htm
などがぱっと見つかりましたが
お礼コメント
rokomoko

お礼率 90% (547/602)

早速のご回答、ありがとうございました。
とても参考になりました!!
投稿日時 - 2001-04-13 19:47:52


このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このQ&Aにこう思った!同じようなことあった!感想や体験を書こう
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ