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