VLIW(超長命令語)とは
VLIW(Very Long Instruction Word、超長命令語)は、プロセッサの命令セットアーキテクチャ(ISA)の一種です。VLIWプロセッサは、複数の命令(ロード、ストア、演算、分岐など)を一つの長い命令語にまとめ、それらを並列に実行する点が特徴です。この長い命令語は、
実行ユニットが同時に処理できる命令の集合体であり、各命令は「atom」、まとまった命令語は「molecule」と呼ばれることもあります。
VLIWの仕組み
VLIWの命令語は、複数の命令が同時に実行できるよう、タイミングが調整されています。この調整は
コンパイラの役割であり、
ハードウェア側では命令の依存関係を解決する機構を持ちません。命令語には、実行されないスロットを埋めるためのNOP(No Operation)命令が含まれることもあり、命令語の長さは常に固定です。
VLIWプロセッサの設計は、
RISC(Reduced Instruction Set Computer)のコンセプトをさらに推し進めたものと見なされます。しかし、その長い命令語は、
マイクロプログラム方式における水平型マイクロプログラムを直接的に表現しているとも言えます。VLIWの「超長命令」という名前は、命令語のビット長が非常に長いことに由来します(例: 12
8ビット以上)。
VLIWの利点と欠点
スーパースカラやアウトオブオーダープロセッサとは異なり、VLIWプロセッサでは、命令列をフェッチしたまま
実行ユニットに投入できます。命令の並列性を分析する必要がないため、
ハードウェアコストが削減され、高速な動作が期待できます。しかし、VLIWプロセッサの性能を最大限に引き出すためには、
コンパイラの高度な最適化が不可欠です。そのため、
RISCよりも
ソフトウェアに依存するアーキテクチャと言えます。
また、VLIWという用語は、命令セットアーキテクチャだけでなく、マイクロアーキテクチャを指すこともあります。
VLIWの採用例
サーバ向け
マイクロプロセッサの例としては、IntelとHPが共同開発した
IA-64(Itanium)のEPICアーキテクチャがあります。EPICは修正VLIWアーキテクチャとされることもありますが、
IA-64は当初の目的であったx86の代替としては普及しませんでした。
一方で、組み込み用プロセッサでは、VLIWアーキテクチャが広く採用されており、多くのメーカーから様々な製品が提供されています。
VLIWの歴史
VLIWの概念は、1980年代初頭に
イェール大学のジョシュ・フィッシャーによって考案されました。しかし、同時期には
集積回路の集積度向上や、CGなどの膨大な計算量を必要とするアプリケーションの登場により、同様のアイデアが他の場所でも独立して考案されていました。例えば、日本の富田眞治らが1983年に完成させたQA-2は、VLIWアーキテクチャの先駆けとされています。
トレーススケジューリング
フィッシャーは、
ニューヨーク大学大学院生時代に、トレーススケジューリングというVLIW
コンパイラ技術を開発しました。これは、プログラムの実行頻度が最も高い経路(トレース)を優先的に最適化する技術です。VLIW以前にも、機能ユニットを
ソフトウェアでスケジューリングする考え方は、水平型
マイクロコードの開発過程で確立していましたが、フィッシャーの功績は、一般的なプログラミング言語で記述されたプログラムを水平型
マイクロコードに変換する
コンパイラを開発したことにあります。
フィッシャーの研究により、ワイドイシューマシンで高性能を達成するためには、基本ブロック内だけでなく、それを超えた並列性を追求する必要があることが明らかになりました。彼は、基本ブロックを超えた並列性を見つけるためのリージョンスケジューリングも開発しました。
VLIWアーキテクチャの設計原則
フィッシャーは、ターゲット
CPUのアーキテクチャは
コンパイラ向けに設計されるべきであり、VLIWの
コンパイラとアーキテクチャは協調設計されるべきであると主張しました。この考えは、彼が
イェール大学で浮動小数点システムFPS164のようなアーキテクチャ向けの
コンパイラを作成する際に、複雑な命令体系がコード生成を困難にしたという経験に基づいています。
フィッシャーは、セルフドレインパイプライン、広いマルチポートレジスタファイル、メモリアーキテクチャなど、VLIW設計を特徴づける原則を開発しました。これらの原則により、
コンパイラは高速なコードを容易に生成できます。
VLIWコンパイラとMultiflow
最初のVLIW
コンパイラは、ジョン・エリスの博士論文で発表されました。ジョン・ルッテンバーグも、スケジューリングに関する重要なアルゴリズムを開発しました。
1984年、フィッシャーは
イェール大学を離れ、Multiflowというスタートアップ企業を設立しました。Multiflowは、TRACEシリーズというVLIWミニ
コンピュータを生産し、1988年頃に販売を開始しました。TRACEシステムは、28個の演算を並列に実行できましたが、異なる集積技術(MSI、LSI、VLSI)を混在させていたため、市場での評価は必ずしも高くありませんでした。
Multiflowは少し時代を先取りしすぎていましたが、主要な半導体企業は、その技術の価値を認め、
コンパイラやアーキテクチャのライセンスを取得しました。
VLIWの後方互換性
シリコン技術の進歩により、より多くの
実行ユニットが実装可能になりましたが、初期のVLIWプロセッサ向けにコンパイルされたバイナリプログラムは、より多くの
実行ユニットを持つプロセッサでは実行できません。これは、VLIWの命令セットがプロセッサの
実行ユニット数に依存していたためです。
TransmetaのCrusoe
Transmetaは、x86アーキテクチャのCrusoeという実装で、バイナリ・バイナリ
ソフトウェアレイヤ(コードモーフィング)により後方互換性を維持しようとしました。Crusoeは、内部的にはVLIWプロセッサですが、実行時にx86
オペコードに変換・最適化を行います。
IntelのItanium
IntelのItaniumアーキテクチャでは、より一般的な方法で後方互換性を維持しています。命令は複数の
オペコードを持ち、各
オペコードには、前のVLIW命令との依存関係を示すビットフィールドが割り当てられています。このビットはコンパイル時に設定されるため、
ハードウェアで依存関係を調べる必要がありません。
VLIWの課題
VLIWアーキテクチャのもう一つの課題は、すべての
実行ユニットを常に使用できるわけではなく、NOP命令が実行される場合があることです。これは、コード内に命令の依存関係が多い場合に発生します。
しかし、チップ上に搭載できるトランジスタ数が増えるにつれて、VLIWのこれらの欠点は重要性が薄れてきました。VLIWは、アプリケーションごとにカスタマイズされたプロセッサを使用できる組み込み市場で人気が高まっています。
組み込み向けVLIWプロセッサは、
富士通のFR-V、PixelworksのBSP15/16、STMicroelectronicsのST231、NXPのTriMedia、CEVAのCEVA-X DSP、Improv SystemsのJazz DSP、Silicon Hiveなど、多くのメーカーが開発・販売しています。また、テキサス・インスツルメンツのC6xxxファミリーのTMS320 DSPもVLIWに分類されます。
主なVLIWプロセッサ
Apollo PRISM
Intel i860
Crusoe
Itanium
FR-V
Radeon HDシリーズ (HD 2xxx、HD 3xxx、HD 4xxx、HD 5xxx)
関連項目
CISC
EPICアーキテクチャ
*
IA-64