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

 超長命令語アーキテクチャー。一つの命令語長を長くし、一括実行することで効率化する設計のプロセッサーをいう。
目次

概要
 非常に長い命令語列(64〜512ビット程度)に複数の命令を配置し、命令語列を一度に解釈して複数の命令実行ユニットで並列実行するアーキテクチャー。
 ハードウェア的に可能な並列性は、命令語に格納されていると言うことができる。
 つまり機械語生成(コンパイル)時にコンパイラーが並列化し、機械語命令を生成する。したがってプロセッサーは命令を単純に実行するだけで済み、プロセッサー側の命令解読回路は大幅に簡略化できる。
 比較的シンプルな回路構成で高い並列性を持ったプロセッサーを設計することが可能で、回路がシンプルになる分だけ動作クロックも向上させやすい。
 このためVLIWは、プロセッサーのハードウェアの複雑さを軽減することが可能だが、その代わり、コンパイラーに複雑さを要求する。命令の並列化はどこかで実施せねばならないが、それをハードウェアで実施するのがスーパースケーラー方式、コンパイラーで実施するのがVLIWということができる。

特徴

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

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

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

VLIW離れの進行
 AMDのGPUであるRadeonシリーズなども、VLIWのプロセッサーだったが、のちにVLIWをやめてSIMDコアとスカラ演算ユニット構成に変更された。
 これは、VLIWは非常に賢いコンパイラーの存在が大前提だったが、コンパイラーの性能は思ったほど向上せず、VLIWプロセッサーの性能の足かせとなったからである。しかしそもそも、コンパイラーが、プログラム実行中のCPUよりも賢い判断をすることは出来ない。CPUは実際のデータを元に動作を予測することができるが、コンパイラーは実際の値を持たないので推論するしかなく、当然推論に失敗することもあるため必ずしも効率的なコードを吐き出さないからである。
 VLIWの要求する「非常に賢いコンパイラー」とはすなわち、「入力データ無しにプログラムの結果を予測出来るコンパイラー」であり、そんなものが作れる訳が無いことを考えると、VLIWは最初から方向性を誤ったアーキテクチャーだったということができる。

再検索