# VLIW (Very Long Instruction Word)
命令セット自体に並列実行するサブ命令群を**明示的に**埋め込む設計方式。ディスパッチロジックの複雑さをコンパイラへ移し、プロセッサを小型・低消費電力化する。
## 基本概念
スーパースカラーでは実行時にハードウェアが依存チェックと命令スケジューリングを行う。VLIW ではこの責務を**コンパイル時**に移す。
- 1 命令 = 複数の並列サブ命令のグループ(しばしば 128-bit 以上)。
- プロセッサのディスパッチ段はサブ命令グループ単位で動作し、依存チェックロジックが不要。
- 代わりにコンパイラが依存間隔に **nop(ノーオペレーション)**を挿入し、必要な実行ラティチュードを保証する。
## 特徴と制約
- **インターロックなし**: 多くの VLIW 設計はデータ依存ハザードをハードウェアでチェックしない。コンパイラが正しく nop を入れないと誤動作する。
- **キャッシュミスへの対応が難**: インターロックがないため、キャッシュミス時にパイプライン全体をストールさせるしかない。
- **静的スケジューリングの限界**: コンパイラはキャッシュミスをコンパイル時に予測できない。
## 事例
| 分野 | 事例 |
|---|---|
| 汎用 CPU (失敗) | Intel IA-64 / Itanium(EPIC = Enhanced VLIW) |
| GPU シェーダ | 一部 GPU のプログラマブルシェーダ |
| DSP | 多くのデジタル信号処理プロセッサ |
| ソフトウェア変換 | Transmeta Crusoe(x86 → VLIW をソフトウェアで変換) |
**Transmeta Crusoe** は特に興味深い: x86 命令をランタイムでソフトウェア変換(JIT 的)し、シンプルな VLIW コアで実行。600 MHz Crusoe が 300 MHz Pentium III(低電力モード)と同等の性能を、わずかな電力で実現。同様の手法は NVIDIA Denver ARM プロセッサにも採用された。
## スーパースカラーとの比較
| 側面 | VLIW | スーパースカラー OOO |
|---|---|---|
| 依存チェック | コンパイラ(静的) | ハードウェア(動的) |
| ランタイム適応 | なし | キャッシュミス等に柔軟 |
| 消費電力 | 低 | 高 |
| バイナリ互換性 | 低(命令形式変更でリコンパイル必要) | 高 |
| 汎用 CPU での採用 | ほぼなし | 主流 |
## 横断的知見
- 今後の取り込みで、複数ソース間の関係を追記する。
## 未解決の問い
- この概念をどのソース群で継続的に検証するか。
## 関連
- OOO との比較 → [[アウトオブオーダー実行]]
- 並列発行の基礎 → [[スーパースカラー実行]]