# VLIW (Very Long Instruction Word) 命令セット自体に並列実行するサブ命令群を**明示的に**埋め込む設計方式。ディスパッチロジックの複雑さをコンパイラへ移し、プロセッサを小型・低消費電力化する。 ## 基本概念 スーパースカラーでは実行時にハードウェアが依存チェックと命令スケジューリングを行う。VLIW ではこの責務を**コンパイル時**に移す。 - 1 命令 = 複数の並列サブ命令のグループ(しばしば 128-bit 以上)。 - プロセッサのディスパッチ段はサブ命令グループ単位で動作し、依存チェックロジックが不要。 - 代わりにコンパイラが依存間隔に **nop(ノーオペレーション)**を挿入し、必要な実行ラティチュードを保証する。 ## 特徴と制約 - **インターロックなし**: 多くの VLIW 設計はデータ依存ハザードをハードウェアでチェックしない。コンパイラが正しく nop を入れないと誤動作する。 - **キャッシュミスへの対応が難**: インターロックがないため、キャッシュミス時にパイプライン全体をストールさせるしかない。 - **静的スケジューリングの限界**: コンパイラはキャッシュミスをコンパイル時に予測できない。 ## 事例 | 分野 | 事例 | |---|---| | 汎用 CPU (失敗) | Intel IA-64 / Itanium(EPIC = Explicitly Parallel Instruction Computer) | | GPU シェーダ | 一部 GPU のプログラマブルシェーダ | | DSP | 多くのデジタル信号処理プロセッサ | | ソフトウェア変換 | Transmeta Crusoe(x86 → VLIW をソフトウェアで変換) | ### Itanium/EPIC の失敗経緯 [[@2019__CACM__A New Golden Age for Computer Architecture]] は、Intel と Hewlett Packard が RISC・CISC の両方を継承する次世代 ISA として、VLIW の発展形である EPIC(Explicitly Parallel Instruction Computer)を採用した Itanium プロセッサの開発経緯を詳述する。単一命令で6つの独立した演算(2データ転送・2整数演算・2浮動小数点演算)を指定でき、コンパイラがそれらを命令スロットへ効率的に割り当てられれば、ハードウェアを単純化できるという期待があった。しかし実際の性能は開発者の当初の主張に及ばず、コンパイラがキャッシュミスや分岐を静的にスケジューリングしきれないという VLIW 共通の弱点が露呈し、遅延と性能不足から「Itanic」(豪華客船 Titanic になぞらえた皮肉な呼称)と揶揄された。Donald Knuth は「Itanium のアプローチは...素晴らしいはずだったが、望まれていたコンパイラが基本的に不可能なものを書くことを要求していたことが判明した」と評した。最終的に市場は Itanium ではなく、32ビット x86 を拡張した64ビット版 x86 を後継として選んだ。EPIC は浮動小数点主体の高度に構造化されたプログラムには有効だったが、キャッシュミスや分岐予測が不確実な整数プログラムでは高性能を達成できなかった。VLIW/EPIC は狭いアプリケーション領域(単純な分岐・小規模プログラムのデジタル信号処理等)には今も有効とされる。 **Transmeta Crusoe** は特に興味深い: x86 命令をランタイムでソフトウェア変換(JIT 的)し、シンプルな VLIW コアで実行。600 MHz Crusoe が 300 MHz Pentium III(低電力モード)と同等の性能を、わずかな電力で実現。同様の手法は NVIDIA Denver ARM プロセッサにも採用された。 ## スーパースカラーとの比較 | 側面 | VLIW | スーパースカラー OOO | |---|---|---| | 依存チェック | コンパイラ(静的) | ハードウェア(動的) | | ランタイム適応 | なし | キャッシュミス等に柔軟 | | 消費電力 | 低 | 高 | | バイナリ互換性 | 低(命令形式変更でリコンパイル必要) | 高 | | 汎用 CPU での採用 | ほぼなし | 主流 | ## 横断的知見 - Modern Microprocessors ガイドは VLIW を「汎用 CPU での採用ほぼなし」と一般論で片付けるが、[[@2019__CACM__A New Golden Age for Computer Architecture]] は Itanium/EPIC という具体的な失敗事例を、市場が最終的にアーキテクチャ論争を決着させるという同論文の中心テーゼの反例として詳述しており、両ソースを合わせることで「なぜ VLIW が汎用 CPU で採用されなかったか」の因果(静的スケジューリングがキャッシュミス・分岐に対応できない)が具体的に裏付けられる(Source: [[Modern-Microprocessors-A-90-Minute-Guide|Modern Microprocessors: A 90-Minute Guide]], [[@2019__CACM__A New Golden Age for Computer Architecture]])。 - VLIW/EPIC は狭いドメイン(DSP・GPU シェーダ)では今も有効とされる点で、[[ドメイン固有アーキテクチャ]](DSA)の設計思想の先行例と位置づけられる。DSA が採用する4つの効率化要因のうち「より効率的な並列性の活用」は VLIW 的な発想の延長線上にある。 ## 未解決の問い - VLIW が汎用プロセッサで失敗した具体的な技術的理由(静的スケジューリングとキャッシュミスの非親和性)は、DSA が同種の ILP 活用(VLIW的アプローチ)を採用する際にどう回避されているか。 ## 関連 - OOO との比較 → [[アウトオブオーダー実行]] - 並列発行の基礎 → [[スーパースカラー実行]] - 狭いドメインでの有効性という共通点 → [[ドメイン固有アーキテクチャ]]