応用情報技術者 2017年 秋期 午前2 問08
問題文
パイプライン制御を適切に表しているものはどれか。ここで、図中の記号Dは解読、Eは実行、Fは命令フェッチとする。

選択肢
ア:
イ:
ウ:(正解)
エ:
🔒 解説は解答すると表示されます
命令パイプラインの時系列配置【午前2解説】
正解の理由
パイプラインでは各命令がステージ(ここでは F→D→E)を一段ずつずらしながら、1サイクルに1ステージずつ進むのが正しい動作です。図を時間の列(サイクル)として読み、各命令のステージが次のように配置されている選択肢が正しいことを確認します。
命令1:サイクル1 F、サイクル2 D、サイクル3 E
命令2:サイクル2 F、サイクル3 D、サイクル4 E
命令3:サイクル3 F、サイクル4 D、サイクル5 E
命令2:サイクル2 F、サイクル3 D、サイクル4 E
命令3:サイクル3 F、サイクル4 D、サイクル5 E
この「各命令が1サイクルずつずれる」配置を満たすのが ウ であり、各行(命令)の横方向の箱をサイクル列に対応させると上記の正しいサイクル割当が得られます。したがって、ウ が正解です。
解法ステップ
- 図の横方向の列を「時間(サイクル)」とみなす。左が早いサイクル、右が遅いサイクル。
- 各命令のステージ順が F→D→E になっているか確認する(行内の左→右の順序)。
- 命令間で「次の命令は前の命令よりちょうど1サイクルだけ遅れてFを始める」かを確認する。
- 上記が満たされれば正しいパイプライン配置。満たさない選択肢は誤り。
具体にサイクル番号を振って確認することが最も確実です(例:左端をサイクル1とする)。
選択肢別の誤答解説
ア:
- 一見すると命令が一段ずつずれているように見えますが、図の列(サイクル)対応を厳密に割り当てると不整合が生じます。例えば、命令1を (c1:F, c2:D, c3:E) と置くと、命令2は (c2:F, c3:D, c4:E) となりますが、図の命令3の配置をそのまま読み取ると命令3が命令2と同一列に重複して配置されるように解釈でき、結果として命令間の開始シフトが一定(+1サイクル)になりません。
- 要点:図の列対応を明確にしないと、命令2と命令3で同一ステージ(例:FやD)が同一サイクルに「複数個存在する」ように見え、正しい逐次シフトが保てないため誤りです。
イ:
- 各行のステージ順が「D → F → E」になっており、フェッチ(F)より先にデコード(D)が来ています。これはステージ順序自体が逆転しており、パイプラインの基本動作(F→D→E)を満たさないため誤りです。
エ:
- 全命令がほぼ同じ列に重なって配置されているため、例えば命令1のDと命令2のDが同じサイクルに存在することになり、同一ステージを複数の命令が同一サイクルで占有することになります(構造ハザード)。パイプラインの本来の「1命令1ステージ/サイクルずつ前進」という条件が破られるため誤りです。
(注)上の説明は「図の列を厳密にサイクル番号に対応させる」ことで、どの選択肢が正しいかを判断しています。図がぼんやりしていると誤読しやすい点に注意してください。
よくある誤解
- 図の「横方向=時間」を明確に列番号で数えずに直感だけで判断してしまう。→ サイクル番号を振って確認する習慣をつける。
- 同一サイクルに異なる命令が存在してもよい(=重なっていても問題ない)と考える。→ 異なる命令は同一サイクルで異なるステージにいるのは許されるが、同一サイクルで同一ステージを複数命令が占有するのは基本的に誤り(構造ハザードにつながる)。
- 行内の箱の順(左→右)だけを見て正誤を判断する。→ 命令間の「ずれ(オフセット)」が正しいかどうかも必ず確認する。
補足コラム
- パイプラインの基本形は「nステージを持つ各命令が、1ステージ分ずつ時間をずらして開始する」ことでスループットを向上させます。典型的にはフェッチ(F)→デコード(D)→実行(E)の順に各命令が進みます。
- 実運用ではデータハザード(依存)や制御ハザード(分岐)によりストール(バブル)やフォワーディング、分岐予測などの制御が必要になりますが、本問題は「理想的な1サイクルずつのシフト」を問うています。
FAQ
Q. 同一サイクルに複数命令が描かれていても、それは問題になるのですか?
A. 同一サイクルに複数命令が描かれていても、それぞれ異なるステージ(F・D・E)であれば問題ありません。問題になるのは「同一サイクルに同一ステージを複数命令が占有する」場合です(構造ハザード)。
A. 同一サイクルに複数命令が描かれていても、それぞれ異なるステージ(F・D・E)であれば問題ありません。問題になるのは「同一サイクルに同一ステージを複数命令が占有する」場合です(構造ハザード)。
Q. 図を読むときの速い確認方法は?
A. 各行の左→右が F→D→E であるか、かつ命令i の F が命令(i−1) の D の列にある(=命令が1サイクルずつずれている)かをチェックするだけで十分です。
A. 各行の左→右が F→D→E であるか、かつ命令i の F が命令(i−1) の D の列にある(=命令が1サイクルずつずれている)かをチェックするだけで十分です。
関連キーワード: パイプライン、ステージ、フェッチ、デコード、実行、ハザード、サイクル、スループット

\ せっかくなら /
応用情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

