• ベストアンサー

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

現在、ソフトウェア開発技術者試験の勉強をしているものです。 お忙しいところ、誠に申し訳ございませんが、 以下の問題の考え方について、アドバイス頂けないでしょうか? 頭を悩ましているのは、以下の問題です。 一つの命令を構成する各処理を 表に示す時間で行うプロセッサがある。 各処理を、それぞれパイプラインの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命令実行可能だと解釈しています。 □□□□□ ■□□□□ ■■□□□ ■■■□□ ■■■■□ ※■:前の命令のステージを表す。 たぶん、納得できないのはここの解釈だと思うのですが…。

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

  • ベストアンサー
  • kusa_mochi
  • ベストアンサー率76% (1597/2087)
回答No.2

NO.1さんの回答で納得できない場合の為に補足しておくと、 □□□□□ ■□□□□ ■■□□□ ■■■□□ ■■■■□ が ■□□□□ ■■□□□ ■■■□□ ■■■■□ ■■■■■ になる為には「何ナノ秒」必要か考えてみましょう。 あと、上記のようにパイプラインのステージが一歩進むたびに命令の実行が1個ずつ完了する事が理解(というか納得)出来るでしょうか? (5個あるうちのどれか1つが必ず命令実行完了となる) パイプラインを生産ラインと考えれば、xxナノ秒毎に生産(実行)完了した命令が一個ずつアウトプットされているという風に理解しやすくなるかな。

その他の回答 (1)

  • jo-zen
  • ベストアンサー率42% (848/1995)
回答No.1

パイプライン処理の場合は、命令処理の各工程を流れ作業のように行うことで、複数の命令処理を効率よく実行できます。 非パイプライン処理では命令処理ごとに各工程を順番に実行します。前の命令処理が全ての工程を完了しないと、次の命令処理を開始することができません。 パイプライン処理では、まず、命令処理1の「読込」を行います。命令処理1の「読込」が終わり「解読」が始まると、命令処理2の「読込」を行います。命令処理1の「解読」、命令処理2の「読込」が終わると、それぞれ次の工程にすすみます。命令処理1は「実行」を行い、命令処理2は「解読」を行います。一方、新しい命令処理3の「読込」をはじめます。同様に、命令処理の各工程を次から次へと絶え間なく行います。 つまり、非パイプライン処理では100+50+100+80+100=430かかるところを、パイプライン処理では各処理のなかで一番長い処理時間の100で済むことになりますので、430÷100=4.3 となるのです。

関連するQ&A

専門家に質問してみよう