VLIW

読み:ヴィーエルアイダブリュー
外語:VLIW: Very Long Instruction Word
品詞:名詞

超長命令語アーキテクチャ

複数の命令実行ユニットを持たせ、並列実行するプロセッサの実現方式のひとつ。非常に長い命令語列(64〜512ビット)に複数の命令を配置し、一括して実行することで処理を高速化するという、あらかじめ並列性をプログラムコード上に取り込む方式。比較的シンプルな回路構成で高い並列性を持ったプロセッサを設計することができる。回路がシンプルになる分だけ動作クロックも向上させやすくなる。

スーパースケーラ方式と違い、複雑な命令スケジューリングをコンパイラなど最適化ツール側で行なうので、チップ側でスケジューリング/リソース管理回路を持つ必要がなくなる。最適化時には同時に実行する命令間に依存関係が無い様にし、同時に実行可能な命令が無い時はNOP(無効命令:何もしない)を埋めこむ。このように依存関係を最初から排除することで動的な実行順制御機構を不要としている。逆に、あらかじめ最適化されていることを前提とするため最適化ツールの性能やバグなどにより十分な性能を発揮できない場合も多い(理論値の最大性能を発揮させることは現状の殆どのコンパイラでは不可能で、ハンドコーディング(手作業)が必要となることも少なくない)。

単純なVLIW方式では無効命令が多数含まれるためプログラムサイズが大きくなりやすいという欠点があるが、実際の実装では命令のパッキングなどによりコードのサイズ削減などの対策が取られることが多い。また、命令長が長くなるため命令フェッチに要する時間が長くなる可能性が高く、コンパイラの最適化性能によっては無駄にNOPが多くなるために命令キャッシュの使用効率が低下する恐れがあるなどの実装上の問題点も多く、様々な対策が取られている。

命令セットそのものに並列機能が含まれるため、プロセッサが改良され構成が変化してしまうと命令セットも変更する必要があり、将来的に渡ってバイナリの互換を保つことが難しい。このためVLIWアーキテクチャは主にマルチメディア向けDSPグラフィックなど特定用途向けのチップで採用され、汎用チップで使われることは少ない。但し、バイナリコードの変換機構をハードウェアまたはソフトウェアとして搭載することで、従来のプロセッサとの互換性を持たせることは可能である。汎用プロセッサのVLIW採用例としてIntelHewlett-Packardが開発したIA-64やTransmetaのx86互換プロセッサCrusoeなどがあり、いずれもバイナリコードの互換性を実現するためコード変換機構をハードウェアやソフトウェア部分に搭載している。またVLIWをそのまま使う汎用プロセッサとしてはPlayStation2で使われている64ビットVLIWのEmotion Engineなどがある。