EPICアーキテクチャ
EPICアーキテクチャ(エピック・アーキテクチャ)は、VLIWをベースに改良が施されたコンピュータ・アーキテクチャ。インテルおよびヒューレット・パッカードが、IA-64(Itanium)で開発・採用した。EPICはExplicitly Parallel Instruction Computingの略。
背景
[編集]アウト・オブ・オーダー実行と投機的実行パラダイムが規模とともに複雑さを増してきたため、プロセッサ業界では1990年代中頃から複数の処理を明示的にひとつの命令で行う命令セットの再評価が始まった。 このような研究はVLIWと呼ばれるもので複数の機能ユニットに対する処理が各命令にエンコードされるものである。
目標は複数命令の動的スケジューリングの複雑さをハードウェア実装からコンパイラに移すことであり、これにより(トレースフィードバック情報を使って)命令スケジューリングが静的に行われるようになる。 もうひとつ重要な目標は命令レベルの並列性(ILP、instruction level parallelism)をさらに活用することである。
VLIWの弱点
[編集]VLIWが(少なくとも本来の形式では)主流になれなかったのは、以下のような欠点があったためとした。
- 実装するたびに後方互換がなくなってしまう。よりたくさんの実行ユニットを実装すると、命令の幅も増えてしまうため、従来の少ない実行ユニットのものとは互換性がない。
- VLIWの命令幅を使い切るだけの同時実行可能命令をコンパイラが見つけられない場合、余った命令幅をNOP命令で埋めざるを得ず、命令キャッシュ・メモリ帯域の浪費になる。
- メモリからロードする場合、CPUのキャッシュや主記憶といった階層があるためにどれだけ時間がかかるか予測できない。そのためロード命令の配置をコンパイラで効率的に行うのは非常に困難である。
EPICアーキテクチャ
[編集]EPICはそれらの問題点に対して以下のような機能で対処する。
- 各命令には識別フラグがあり、次の命令がそれ以前の命令の処理結果に依存しているかどうかを示す。識別フラグによって命令幅を変更できるVLIWと言える。これにより、将来複数の命令を同時に実行する拡張を実現することができる。コンパイラが同時実行可能命令を十分には見つけられない場合、NOP命令で命令幅を埋める代わりに識別フラグに依存マークをつけ、命令キャッシュなどを有効利用できる。依存しているかどうかはコンパイラが決定するので、ハードウェアが依存関係をチェックするのは簡単になる。識別フラグに依存マークがない限りは実行ユニットの分だけ命令を発行し、依存マークを見つけたらレイテンシを確保して以前の命令の処理結果を待つ。
例
識別フラグが「-」なら以前の命令に依存しない、「+」なら依存するとする。
+命令A +命令B -命令C -命令D +命令E -命令F
という命令列があったとき、2命令同時実行可能なハードウェアなら
+命令A
+命令B -命令C
-命令D
+命令E -命令F
の様に4クロックで実行できる。将来3命令同時実行可能なようにハードウェアを拡張した場合、
+命令A
+命令B -命令C -命令D
+命令E -命令F
命令セットの互換性を崩さず先の命令列をそのまま、しかも以前のハードウェアより速い3クロックで実行できる。
実際のIA-64の実装では、命令ごとに1ビットの識別フラグ領域を確保するのではなく、一定数の命令を束にした単位(バンドルと呼ぶ)ごとに数ビットのフラグ領域を確保している。バンドル幅を埋めるのにNOPを使う点を除けば、命令ごとの識別フラグと同様の効果を得られる。
- データプリフェッチのためのspeculative(投機的)ロード命令が用意されている。これにより実際のロードの際の一次キャッシュヒット率を向上させることができる。
- チェックロード命令によりロードがそれ以前のストアに依存していないことを確認し、投機的ロードを助ける。
EPICアーキテクチャにはILPを高めるための様々なコンセプトが詰め込まれている。
- "predicated execution"(プレディケーション;断定された実行)により分岐を減らし投機的実行を増加させる。この機能では分岐条件はプレディケーションレジスタの内容に変換される。プレディケーションレジスタを使って、実際には選択されなかった方の処理結果をなかったことにする。
- 遅延例外(汎用レジスタにあるNot-A-Thingビットを使う)により例外についても投機的実行が可能である。
- レジスタ・リネーミングの必要性をなくするために命令セットアーキテクチャレベルの大きなレジスタファイルとレジスタローテーション機能を持つ。
- 二方向以上の分岐命令(訳注:例えば「等しい」「小さい」「大きい」の三方向の分岐)
EPICの実装
[編集]IA-64アーキテクチャ(Itanium)ではレジスタ・ローテーション機能を追加している。これはループ展開やソフトウェア・パイプライニングなどに役立つ。
Wen-mei Hwuが率いたイリノイ大学のIMPACTプロジェクトはこの分野に様々な影響を与えた。HPの研究所のPlayDohアーキテクチャも別の大きな研究プロジェクトとして挙げられる。
2004年、EPICアーキテクチャはデジタル信号処理のような特定の分野で成功している。一般的なコンピューティング分野では、そもそもそれほどの並列性を抽出できるのか議論があり、評価は定まっていない。Itaniumの創始者であるヒューレット・パッカード社は2004年9月にアーキテクチャを強調するのをやめた。