EPICアーキテクチャとは
EPIC(Explicitly Parallel Instruction Computing)アーキテクチャは、
VLIW(Very Long Instruction Word)アーキテクチャをベースに、
インテルと
ヒューレット・パッカードが共同で開発したコンピュータアーキテクチャです。特に
IA-64(
Itanium)プロセッサで採用されました。
背景
1990年代中頃、プロセッサ業界では、
アウト・オブ・オーダー実行や
投機的実行といった技術が複雑化してきたため、複数の処理を明示的に一つの命令で行う命令セットへの関心が高まりました。この流れの中で、複数の機能ユニットに対する処理を各命令にエンコードする
VLIWが再評価されました。
VLIWの目標は、命令の動的なスケジューリングの複雑さをハードウェアからコンパイラに移し、静的な命令スケジューリングを実現することでした。さらに、
命令レベルの並列性(ILP)を最大限に活用することも目指されました。
しかし、
VLIWにはいくつかの課題がありました。
後方互換性の問題: 実行ユニットの数を増やすと命令幅も増えるため、従来の少ない実行ユニットのプロセッサとの互換性が失われる。
命令幅の利用効率: コンパイラが同時実行可能な命令を見つけられない場合、余った命令幅をNOP命令で埋める必要があり、命令キャッシュやメモリ帯域を浪費する。
メモリロードの遅延: メモリからのロードは、キャッシュや主記憶の階層構造により時間が予測しづらく、コンパイラによる効率的な命令配置が困難。
EPICアーキテクチャの解決策
EPICアーキテクチャは、これらの課題に対し、以下のような機能で対処しています。
依存フラグ: 各命令には識別フラグがあり、次の命令が前の命令の結果に依存するかどうかを示します。これにより、
VLIWの命令幅を可変にでき、将来的な拡張に対応できます。コンパイラが同時実行可能な命令を見つけられない場合、NOP命令ではなく、依存マークを付与することで命令キャッシュを有効活用します。ハードウェアは依存関係をチェックする負担が減り、依存関係がない限りは実行ユニットの数だけ命令を発行します。
実行例
例えば、識別フラグが「-」なら依存なし、「+」なら依存ありとします。
+命令A +命令B -命令C -命令D +命令E -命令F
この命令列を2命令同時実行可能なハードウェアで実行する場合、以下のようになります。
+命令A
+命令B -命令C
+命令E -命令F
この例では、4クロックで実行できます。もし3命令同時実行可能なハードウェアに拡張した場合、命令セットの互換性を保ちながら、3クロックで実行できるようになります。
実際の
IA-64の実装では、命令ごとに1ビットのフラグ領域を設けるのではなく、複数の命令をまとめた「バンドル」ごとに数ビットのフラグ領域を設けています。バンドル幅を埋めるためにNOP命令を使う点は、命令ごとの識別フラグと同様の効果が得られます。
その他の特徴
投機的ロード命令: データプリフェッチのための投機的ロード命令により、一次キャッシュのヒット率を向上。
チェックロード命令: ロードが前のストアに依存しないことを確認し、投機的ロードを支援。
プレディケーション: 分岐を減らし、
投機的実行を増加させる。分岐条件をプレディケーションレジスタに変換し、選択されなかった処理結果を無効化。
遅延例外: Not-A-Thingビットを用いて、例外についても
投機的実行を可能にする。
大きなレジスタファイル: レジスタリネーミングの必要性をなくすため、大きな
レジスタファイルとレジスタローテーション機能を持つ。
多方向分岐命令: 二方向以上の分岐命令をサポート。
EPICの実装例
IA-64アーキテクチャ(
Itanium)では、レジスタローテーション機能が追加されており、ループ展開やソフトウェアパイプラインに役立ちます。
イリノイ大学のIMPACTプロジェクトや、HP研究所のPlayDohアーキテクチャもこの分野に大きな影響を与えました。
EPICの現状と課題
2004年、EPICアーキテクチャはデジタル信号処理などの特定の分野で成功を収めています。しかし、一般的なコンピューティング分野では、並列性を十分に引き出せるか議論があり、評価は定まっていません。
Itaniumの開発元である
ヒューレット・パッカード社は、2004年9月にはこのアーキテクチャを強調することをやめました。
関連事項
CISC
RISC
VLIW
並列コンピューティング