Explicit Data Graph Execution
すなわち、機能ユニットとレジスタとの相対的な距離はどんどん長くなっている。かつてメインメモリとの通信による遅延を抑えるために生まれたレジスタが避けるべき遅延となってきている。
かつてメモリが安価になり通信による遅延が問題になったことがCISCからRISCへの急激な変化を引き起こしたように、 CPUの設計者は、並列化による性能向上の問題とレジスタの遅延の問題が、基本的に命令セットを切り替えることになるかどうかについて検討している。
新しい命令セットを導入しようという試みの一つがItaniumに代表されるVery Long Instruction Word (VLIW) アーキテクチャである。VLIWはスケジューラのロジックをCPUから移動し、命令列を検査するのに十分な時間とメモリを使用することが可能なコンパイラで実行する。この「静的配置、静的発行」という実行モデルは遅延が全て事前に既知である場合にはうまく動作するが、実際にはコンパイラが命令語を命令で満たすことは困難な挑戦であることがわかってきた。たとえば、キャッシュにデータがあれば5サイクルかかる命令も、なければ数百サイクルかかる可能性があるが、コンパイラには実行中にどのデータがキャッシュに入っているかを知る術はない。こうした遅延は、コンパイルするプログラムとは何の関係もないシステムの全体的な負荷やその他の要素によって定まるものである。
この情報は高級言語がより単純なプロセッサの命令セットに変換される際に失われる。しかし、この情報は非常に役立つもので、現代的なコンパイラはこれを "基本ブロック (basic block)" として一般化し、レジスタを介したメモリアクセスを最適化する際に基本ブロックの特定を行う。命令のブロックは制御命令を含んでおらず、述語命令を含むことができる。命令ブロック間や記憶領域とのデータの流れを示すことで、これらのブロックを用いてデータフローグラフが生成される。
EDGEの基本的な考え方は、こうしたブロックの操作を命令セットレベルでサポートすることである。基本ブロックはメモリへのアクセスを詳細に定義された方法で行うので、プロセッサは関連したブロックをロードし、スケジュールし、あるブロックの出力をそれを用いるブロックに直接与えることができる。これによって汎用の大域的なレジスタファイルが必要なくなり、コンパイラがレジスタへのアクセスをスケジュールする作業が全体として簡略化される。その代わり、各基本ブロックは専用のローカルレジスタを持ち、コンパイラはより単純なブロック内部での最適化を行う。
EDGEシステムは、1960 / 70年代、また1990年代のデータフロー言語によく似ている。