CPU性能を引き出す技術として、命令セット、パイプライン、スーパースカラを学びます。
CPUって、もっと高速化する仕組みがあるんでしょ?
代表はパイプラインとスーパースカラよ。
パイプラインは命令を「フェッチ→デコード→実行→ライトバック」と複数段階に分けて、流れ作業のように並列処理するの。
工場の組立ラインをイメージするとわかりやすいわ。
スーパースカラは違うんですかぁ?
スーパースカラは演算装置自体を複数持って、同時に複数命令を実行する。
パイプラインは流れ作業、スーパースカラは並列実行と覚えるとわかりやすいわ。
命令セットにはCISCとRISCがあるのよ。
x86はCISC、ARMやRISC-VはRISC。
スマホのCPUはほとんどARMなの。
なるほど〜!
AppleやGoogleがARMにシフトしてるのも、そういうことなんだね!
あたしも納得!
4段パイプラインをクロックごとに追う
フェッチ(F)・デコード(D)・実行(E)・ライトバック(W)の各段階が1クロックずつかかるCPUで、独立した3命令I1〜I3を実行するとします。パイプラインがなければ、1命令につき4クロックなので合計12クロック必要です。パイプラインでは、前の命令がDへ進んだ時点で次の命令をFへ入れられます。
| クロック | I1 | I2 | I3 |
|---|---|---|---|
| 1 | F | ― | ― |
| 2 | D | F | ― |
| 3 | E | D | F |
| 4 | W | E | D |
| 5 | ― | W | E |
| 6 | ― | ― | W |
したがって、停止がなければ「段数k、命令数n」の所要クロックはk+n-1で、今回は4+3-1=6クロックです。ただし、1命令の処理時間そのものが4クロックから1クロックになるわけではありません。ラインが埋まった後に、原則として1クロックごとに1命令が完了するため、全体のスループットが上がる技術です。
ハザードが入ると理想どおりに進まない
| 種類 | 起こる状況 | 代表的な対策 |
|---|---|---|
| データハザード | 後続命令が、直前の命令の計算結果を必要とする | 待ち時間(ストール)、フォワーディング |
| 制御ハザード | 分岐結果が確定するまで次に読む命令が決まらない | 分岐予測、投機実行、失敗時のやり直し |
| 構造ハザード | 複数命令が同じ演算器やメモリを同時に使おうとする | 資源の複製、命令の待機 |
例えば「R1へ加算結果を書き込む命令」の直後に「R1を使って乗算する命令」が並ぶと、後続命令は新しいR1を待つ必要があります。ここで空き時間を入れるのがストールです。分岐予測を外した場合は、先読みしていた命令を破棄して正しい分岐先からやり直すため、深いパイプラインほど損失が大きくなり得ます。
パイプラインとスーパースカラを見分ける
よくある誤答は、「複数命令が重なって動く」という共通点だけで両者を同じものと判断することです。パイプラインは一つの命令処理を段階に分けて各段を重ねる仕組み、スーパースカラは同じクロックに複数命令を発行できるよう、複数の実行器を用意する仕組みです。実際のCPUは両方を組み合わせますが、問題文の手掛かりを次のように拾います。
- 「フェッチ、デコード、実行などを流れ作業」ならパイプライン
- 「複数の命令を同時に発行」「複数の演算器」ならスーパースカラ
- 「分岐による先読みの失敗」なら制御ハザード
- 「単純で固定長の命令を高速に実行」ならRISCの特徴
4段なら、どんな命令も必ず4倍速になるって選んでいいの?
いいえ。
命令数が少ないとラインを満たす時間の比率が大きいし、依存関係や分岐でストールも起きます。
『段数=速度向上率』と即断するのは典型的な誤りよ。
同じクロックで命令を2個完了できる、と書いてあったらスーパースカラですかぁ?
そう考えるのが基本よ。
試験では、処理段階を重ねる話か、複数の実行器で発行本数を増やす話かを判定しましょう。
計算問題なら、まず理想値k+n-1を出し、その後に示されたストール数を足すと解きやすいわ。
確認クイズ
ARM プロセッサが採用している命令セットアーキテクチャはどれか。
- CISC
- RISC
- VLIW
- MIPS
こたえを見る
正解: 2. RISC
ARMは RISC (Reduced Instruction Set Computer) を採用しています。命令を単純化して高速化と省電力を実現し、スマートフォンやAppleシリコン (M1/M2など) で広く使われています。