応用情報技術者 2012年 秋期 午前2 問09
問題文
命令を並列実行するためのアーキテクチャであって、複数の命令を同時に実行するとき、命令を実行する演算器をハードウェアによって動的に割り当てる方式はどれか。
選択肢
ア:SMP
イ:VLIW
ウ:スーパスカラ(正解)
エ:スーパパイプライン
🔒 解説は解答すると表示されます
スーパスカラ【午前2解説】
正解の理由
命令を並列実行する方式で「演算器をハードウェアによって動的に割り当てる」特徴を持つのは、ウのスーパスカラ方式です。スーパスカラは、プロセッサが1サイクルに複数の命令を同時に「発行(issue)」し、利用可能な実行ユニット(ALU、浮動小数点ユニットなど)にハードウェアが割り当てて並列に実行します。依存関係チェックや発行制御をCPU側で行うため、コンパイラ任せで並列化するVLIW(イ)とは対照的です。
解法ステップ
- 問題文のキーフレーズを抽出:「複数の命令を同時に実行」「演算器をハードウェアによって動的に割り当てる」。
- 各選択肢の特徴を瞬時に思い出す:
- SMP:複数プロセッサの並列(共有メモリ)→ 並列処理はするが単一命令ストリーム内の動的割当を示さない。
- VLIW:コンパイラが命令束を作る(静的スケジューリング)→ ハードウェアによる動的割当ではない。
- スーパスカラ:ハードウェアによる複数命令同時発行・実行→ 問題文に一致。
- スーパパイプライン:パイプライン段数増加でクロック向上→ 幅方向の同時発行を示さない。
- よって正答はハードウェアで動的に割り当てを行うスーパスカラ(ウ)。
選択肢別の誤答解説
-
ア: SMP(Symmetric Multiprocessing)
複数の独立したプロセッサが同一のメモリ空間を共有して並列にタスクを処理する方式です。スレッドやプロセスレベルでの並列性を扱いますが、単一CPU内での命令発行をハードウェアが動的に割り当てる方式とは異なります。 -
イ: VLIW(Very Long Instruction Word)
長い命令語に複数の操作を詰め込み、コンパイラが命令の並列性を決定して一括して実行させる方式です。並列化の決定が「静的(コンパイラ側)」であり、ハードウェアによる実行ユニットの動的割当は行いません。 -
ウ: スーパスカラ(正解)
ハードウェアが実行ユニットの空き状況や命令間の依存を見て、複数命令を同時に発行・割当する方式です。動的スケジューリング(スコアボード、Tomasulo等)やアウトオブオーダ実行と組み合わされることが多く、問題文の条件に合致します。 -
エ: スーパパイプライン(スーパーパイプライン)
パイプラインを細分化して各ステージの処理時間を短くし、クロック周波数を上げる手法です。レーン幅(同時に発行する命令数)を増やすわけではなく、問題文の「複数の命令を同時に実行し、演算器を動的に割り当てる」方式とは異なります。
よくある誤解
- 「VLIWも複数命令を同時に実行するからスーパスカラと同じ」と考える誤り:どちらも複数命令実行を目指しますが、並列化の主体(コンパイラかハードウェアか)が決定的に違います。設問の「ハードウェアによる動的割当」がキーワードです。
- 「SMPはCPU内部の命令並列を指す」と勘違いする:SMPは複数プロセッサによるプロセス/スレッド並列で、単一命令ストリームの命令同時発行とは異なります。
- 「スーパパイプラインはスーパスカラと同じく性能向上手法」と混同する:どちらも性能向上を目的としますが、スーパパイプラインはパイプライン深度の増加で主に周波数向上を図る手法です。
補足コラム
スーパスカラ性能を引き出すためにCPUはさらに複雑な仕組みを持ちます。代表例:
- 動的スケジューリング(Tomasuloアルゴリズム、スコアボード):命令の依存関係を検出して実行順序を柔軟に変える。
- レジスタリネーミング:名前依存(仮想的な書き換え競合)を解消して並列実行を可能にする。
- アウトオブオーダ実行:プログラム順序とは異なる順序で実行し、完了時に順序を整えることでスループットを向上させる。
一方、VLIWはハードウェアを単純化できる一方で、コンパイラの能力やコード密度、バイナリ互換性の問題などの課題があります。現代の一般目的CPU(x86系、ARM系)はほとんどの場合スーパスカラ+アウトオブオーダの設計を採用しています。
FAQ
Q1. スーパスカラとアウトオブオーダは同じですか?
A1. 別の概念ですが連携して使われることが多いです。スーパスカラは「複数命令を同時に発行する幅(wide-issue)」の考え方、アウトオブオーダは「実行順序を動的に変更して命令レベル並列性を引き出す制御」のことです。
A1. 別の概念ですが連携して使われることが多いです。スーパスカラは「複数命令を同時に発行する幅(wide-issue)」の考え方、アウトオブオーダは「実行順序を動的に変更して命令レベル並列性を引き出す制御」のことです。
Q2. VLIWに利点はありますか?
A2. ハードウェアの実行ユニットの制御を簡素化でき、デコードや発行回路の複雑さを減らせます。しかしコンパイラに高度なスケジューリング能力が要求され、実行時のコード適応性で不利になる場合があります。
A2. ハードウェアの実行ユニットの制御を簡素化でき、デコードや発行回路の複雑さを減らせます。しかしコンパイラに高度なスケジューリング能力が要求され、実行時のコード適応性で不利になる場合があります。
Q3. 実際のCPUはどうやって依存関係を解決しますか?
A3. ハードウェア側で依存性チェック、レジスタリネーミング、完了通知の管理(リオーダーバッファ等)を行い、Tomasuloやスコアボードといったアルゴリズムでスケジューリングします。
A3. ハードウェア側で依存性チェック、レジスタリネーミング、完了通知の管理(リオーダーバッファ等)を行い、Tomasuloやスコアボードといったアルゴリズムでスケジューリングします。
関連キーワード: スーパスカラ, 命令レベル並列性, 動的スケジューリング, VLIW, スーパパイプライン, SMP, Tomasulo, レジスタリネーミング

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

