アプリ版:「スタンプのみでお礼する」機能のリリースについて

応用情報の問題で、わからない所があります。

パイプラインの深さを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で命令内全ステージにかかる時間を求めたつもりです。
それに命令数をかけています。

すみません、よろしくお願いいたします。

A 回答 (4件)

「パイプラインの各段が並列に動作しうる」ことを忘れてるだけなんだが....



パイプラインの深さと同じだけの本数を持つプロセッサが思い付かない>#3.
    • good
    • 2

因みに。



パイプラインの個数は、パイプラインの深さと同じ個数がある、と言うのが前提。

パイプラインの深さが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番目の命令の間に隙間が出来てしまう。
    • good
    • 0

図が見づらくなったので、図だけ再投稿。



 深さ4
←──→
□□□□______ 1番目の命令
_□□□□_____ 2番目の命令
__□□□□____ 3番目の命令
___□□□□___ 4番目の命令
____□□□□__ 5番目の命令
_____□□□□_ 6番目の命令
______□□□□ 7番目の命令
1 2 3 4 5 6 7 8 9 10 ←(7+4-1)×1=10
    • good
    • 0

命令の個数を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」である。
    • good
    • 11
この回答へのお礼

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

お礼日時:2014/04/10 23:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!