# スーパースカラー実行
フェッチ・デコード・ディスパッチ段で**複数の命令を同時に処理**し、複数の機能ユニットへ並列発行する実行方式。**IPC > 1**(1 サイクルあたり 1 命令超)を実現する。
## 基本構造
実行ステージは実際には複数の**機能ユニット**(整数 ALU、浮動小数点ユニット、ロード/ストアユニットなど)で構成される。スーパースカラーはこれを活用し、1 サイクルに複数の命令を各ユニットへ振り分ける。
- **発行幅(Width)**: 1 サイクルに発行できる命令数の上限。プロセッサの「横幅」を表す。
- 機能ユニット数は発行幅より多い——命令ミックスが変わるため、すべてのユニットを使い切ることは稀。
## 主要プロセッサの発行幅
| 発行幅 | プロセッサ例 |
|---|---|
| 2 | UltraSPARC T2/T3、Cortex-A73 |
| 4 | Apple M1(E コア) |
| 6 | Athlon 64、Core 2、Zen 1〜4 |
| 8 | Haswell/Broadwell、Skylake、Apple A13-A16 & M1〜M2(P)、Zen 5 |
| 10 | Sunny Cove、Apple M4(P) |
| 12 | Golden Cove |
> [!key-insight] 発行幅のスケーリング問題
> ディスパッチロジックの複雑さは発行幅 n の**2 乗**でスケールする。4-issue の 2 倍幅の 8-issue はディスパッチが 4 倍以上大きくなる。このため超広幅コアは現実的でなく、代わりに SMT + マルチコアが採用されている。
## 超パイプライン×スーパースカラー
現代のプロセッサはほぼすべて超パイプライン化とスーパースカラー発行を組み合わせる。単に「スーパースカラー」と呼ぶ場合、両方を含む。
## x86 における発行幅
x86 はμops(マイクロオペレーション)への変換を挟むため、「発行幅」の定義が複数存在する:
- x86 命令単位: 最大 5 命令/サイクル(Haswell)
- フューズド μop 単位: 最大 4 μops/サイクル
- アンフューズド μop 単位: 最大 8 μops/サイクル
詳細 → [[アウトオブオーダー実行]]
## 実際の IPC
理論的な発行幅が 8 でも、実アプリの平均 IPC は **SPECint で 2 未満**。依存関係・分岐誤予測・キャッシュミスが足を引っ張る。ILP の限界は→ [[Brainiac設計]]、[[メモリウォール]]。
## 歴史
- IBM POWER1: 最初のメインストリーム スーパースカラー
- SuperSPARC、Alpha 21064: RISC の早期スーパースカラー化
- オリジナル Pentium: 複雑な x86 でスーパースカラーを実現した工学的快挙
## 関連概念
- コンパイラ主導の並列化 → [[VLIW]]
- 複数スレッドで機能ユニットを充填 → [[同時マルチスレッディング]]
- OOO 発行の詳細 → [[アウトオブオーダー実行]]
## 横断的知見
- 今後の取り込みで、複数ソース間の関係を追記する。
## 未解決の問い
- この概念をどのソース群で継続的に検証するか。