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

このQ&Aのポイント
  • パイプライン方式での処理時間を求める式がわかりません。
  • パイプラインの深さをD、ピッチをP秒とすると、I個の命令をパイプラインで実行する時間を表す式はどれか。
  • 私の理解では、所要時間はI × (D × P)で求められると考えていますが、なぜ違うのでしょうか。
回答を見る
  • ベストアンサー

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

応用情報の問題で、わからない所があります。 パイプラインの深さを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で命令内全ステージにかかる時間を求めたつもりです。 それに命令数をかけています。 すみません、よろしくお願いいたします。

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

  • ベストアンサー
  • chie65535
  • ベストアンサー率43% (8524/19375)
回答No.1

命令の個数を7、パイプラインの深さを4、パイプラインのピッチを1秒とする。 この場合、1つの命令がパイプラインを通り抜けるには4秒かかる。 そして、それぞれの命令は、1秒づつズレながら順にパイプラインに入っていく。 図にすると、以下のようになる。  深さ4 ←──→ □□□□______ 1番目のパイプに入った命令は抜けるまで4秒かかる _□□□□_____ 2番目の命令が入るのは1ピッチ経過後。つまり1秒後 __□□□□____ 3番目の命令が入るのは2ピッチ経過後。つまり2秒後 ___□□□□___ 4番目の命令が入るのは3ピッチ経過後。つまり3秒後 ____□□□□__ 5番目の命令が入るのは4ピッチ経過後。つまり4秒後 _____□□□□_ 6番目の命令が入るのは5ピッチ経過後。つまり5秒後 ______□□□□ 7番目の命令が入るのは6ピッチ経過後。つまり6秒後 1 2 3 4 5 67 89 10 ←(7+4-1)×1=10 最後の命令がパイプラインに入るのは「命令の個数-1ピッチ後」であり、その命令がパイプラインを通過し終わるのは、パイプラインの深さだけかかる。 つまり、最後の命令がパイプラインを通り抜け終わるのは「命令の個数-1+パイプラインの深さ」に、1ピッチの秒数を掛けた秒数が経過した時である。 「最後の命令がパイプラインを通り抜け終わる秒数」と言うのは「全部の命令を実行するのに要する時間」そのものである。 「(命令の個数-1+パイプラインの深さ)×1ピッチの秒数」を意味する式は「イ  (I +D -1)×P」である。

monque
質問者

お礼

詳しいご解説ありがとうございます。 まだ理解できてません。。。 もう少しそしゃくのための時間が必要なのですが、取り急ぎお礼まで。 ありがとうございます!

その他の回答 (3)

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

「パイプラインの各段が並列に動作しうる」ことを忘れてるだけなんだが.... パイプラインの深さと同じだけの本数を持つプロセッサが思い付かない>#3.

  • chie65535
  • ベストアンサー率43% (8524/19375)
回答No.3

因みに。 パイプラインの個数は、パイプラインの深さと同じ個数がある、と言うのが前提。 パイプラインの深さが7であれば、通常、パイプラインは7つあって、パイプラインの個数と同じだけの個数の命令を並行して同時に処理できる。 先ほどの例では、パイプラインは4つあれば良い。 1~4番目の命令は、順に1~4番のパイプラインに入る。 5番目の命令は、1番目の命令を処理し終わって空になった、1番のパイプラインに入る。 6番目の命令は、2番目の命令を処理し終わって空になった、2番のパイプラインに入る。 7番目の命令は、3番目の命令を処理し終わって空になった、3番のパイプラインに入る。 なので、図を正確に書くと、以下のようになる。  深さ4 ←──→ □□□□■■■■__ 1と5番目の命令 _□□□□■■■■_ 2と6番目の命令 __□□□□■■■■ 3と7番目の命令 ___□□□□___ 4番目の命令 1 2 3 4 5 6 7 8 9 10 ←(7+4-1)×1=10 判りやすいように、1~4番目の命令は□で、5~7番目の命令は■で表記。 因みに、パイプラインの個数が足りないと、途中で「すべてのパイプラインが埋まってしまう」ので、無駄な空き時間が出来てしまう。 例えば、パイプラインの深さが4なのに、パイプラインが3個しか無いと、以下のようになる。  深さ4 ←──→ □□□□■■■■◇◇◇◇ 1と4と7番目の命令 _□□□□■■■■___ 2と5番目の命令 __□□□□■■■■__ 3と6番目の命令 1 2 3 4 5 6 7 8 9 101112 上記の場合「4ピッチ目」には、すべてのパイプが埋まっているので、パイプに空きが出来る「5ピッチ目」まで、何も出来ずに待たされてしまう。 同様に、8ピッチ目にも、すべてのパイプが埋まってしまうので、9ピッチ目まで待たされてしまう。 また逆に、パイプラインの深さよりも多い個数のパイプラインがあると、以下のように、パイプラインに無駄が出来てしまう。  深さ4 ←──→ □□□□_■■■■_ 1と6番目の命令 _□□□□_■■■■ 2と7番目の命令 __□□□□____ 3番目の命令 ___□□□□___ 4番目の命令 ____□□□□__ 5番目の命令 上記の場合、1番のパイプが空いても、次の命令がすぐには入って来ないので、1番目の命令と6番目の命令の間に隙間が出来て「何もしてない無駄なサイクル」が出来てしまう。 2番のパイプも、同様に、2番目の命令と7番目の命令の間に隙間が出来てしまう。

  • chie65535
  • ベストアンサー率43% (8524/19375)
回答No.2

図が見づらくなったので、図だけ再投稿。  深さ4 ←──→ □□□□______ 1番目の命令 _□□□□_____ 2番目の命令 __□□□□____ 3番目の命令 ___□□□□___ 4番目の命令 ____□□□□__ 5番目の命令 _____□□□□_ 6番目の命令 ______□□□□ 7番目の命令 1 2 3 4 5 6 7 8 9 10 ←(7+4-1)×1=10

関連するQ&A

  • 応用情報の問題です。

    応用情報の問題です。 パイプラインの深さをD 、パイプラインのピッチをP 秒とすると、I 個の命令をパイプサインで実行するのに要する時間を表す式はどれか。 ここで、パイプラインの各ステージは1ピッチで処理されるものとし、パイプラインハザードについては、考慮しなくてよい。  ア  (I +D )×P  イ  (I +D -1)×P  ウ  (I ×D )+P  エ  (I ×D -1)+P 正解は「イ」なのですが、「パイプラインの深さD」と「命令数I」の違いを教えて いただきたいです。 よろしくお願いします。

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

    現在、ソフトウェア開発技術者試験の勉強をしているものです。 お忙しいところ、誠に申し訳ございませんが、 以下の問題の考え方について、アドバイス頂けないでしょうか? 頭を悩ましているのは、以下の問題です。 一つの命令を構成する各処理を 表に示す時間で行うプロセッサがある。 各処理を、それぞれパイプラインの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個の命令をパイプラインで実行するのに要する時間を表す式は(I+D-1)×Pであることは分かりましたが、パイプラインフラッシュを考慮しなければならない、となると分かりません。 また、パイプラインフラッシュが発生すると、パイプライン中の実行途中の命令が無効化されるということは、段数に比例して再実行しなければならない命令が増えるということでしょうか?

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

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

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

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

  • パイプラインハザード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ナノ秒となってます。

  • 命令の実行時間について

    「命令の実行時間=クロックサイクル時間×CPI」とあります。 で、クロックサイクル時間が「10ナノ」秒で、 「CPI」が「5」の機械語命令は、1つの命令を実行する為に、 「=10ナノ秒/クロックサイクル数×5クロックサイクル数/命令」とあります。 上記の計算式を使えば、 クロックサイクル数が「10ナノ」秒で「CPI」が「5」なので、 1つの命令を実行するのに「50ナノ」秒が必要なのは分かりますが、 上記の式の中にある、「/クロックサイクル数」・「/命令」とは 何を意味しているのでしょうか。 単位分数方式として、下記が記載されていました。 「10(ナノ秒/クロックサイクル数)×5(クロックサイクル数/命令)=50(ナノ秒/命令)」 お手数ですが、分かる方おられましたら、ご教授お願いします。 出来ましたら、詳しく解説して頂けると幸いです。 以上、よろしくお願い致します。

  • 情報処理の問題ですが

    情報処理の問題ですがどなたか解き方を教えて頂けますでしょうか? 宜しくお願い致します。 問題 8000万個の命令を実行するプログラムを60MIPSで実行した場合に 予想される処理時間は何秒か(小数点第3位を四捨五入する) ここで プロセッサの使用率は75%としてオペレーティングシステムのオーバーヘッドは考えないものとする。なお、次の計算式を参考にするとよい (1)1秒間に実行できる命令数=MIPS値×使用率 (2)プログラム処理時間=プログラム命令数/1秒間に実行できる命令数 (3)MIPS値=1秒間に実行できる命令数を百万の単位で示したもの

  • Xeonの処理時間について

    宜しくお願いします。 サーバで使っているXeon2.8GHzの処理時間について教えて頂きたいのですが、 例えば、ページ容量30,000KBのページをサーバにHTTPリクエストし、クライアントに吐き出すまでの時間は何秒くらいかかるんでしょうか。 CPUのクロック数とマザボのベースクロックから計算する式等もあれば一緒にご教授して頂けると大変助かります。