Explicit Data Graph Execution
ほぼ全てのコンピュータプログラムは、データをある形態から別の形態へと変換する命令列から成り立っている。CPUの目的は、データの変換を可能な限り高速に行って性能を向上させることであり、CPUがサポートする命令セットは変換が高速になるような意図で設計されている。コンピュータの発展に伴って、コンピュータ内部の様々な要素の相対的なコストが大きく変化し、それによって命令セットの設計に大きな転換期が何度か訪れた。
1960年代にはメモリが相対的に高価であり、CPU設計者は貴重なメモリ資源を有効に活用できるよう、内部に命令とデータを密に詰め込んだ命令セットを開発した。たとえば、 A と B を加算し、C に出力 という命令は A と B を主記憶、インデックス、レジスタなど様々な場所から取り出すために異なる種類のものが提供されていた。異なる命令が提供されることで、プログラマは最もメモリ消費量が抑えられる命令を選択することができた。全ての命令に任意のデータアクセス方法を選択できるようにした命令セット(たとえばMotorola 68000)は「直交的」と呼ばれ、設計の模範とされた。こうした命令セットは様々なアクセス方法を提供するため複雑化し、今日ではCISC(複雑な命令セットを備えたコンピュータ)と呼ばれている。
EDGE設計に基づく CPUは、一つ以上(現実的には数百)の小さなブロック実行エンジンと、専用のローカルレジスタを持つ。各ユニットは専用のブロック間コミュニケーションリンクで接続されている。コンパイラによってブロックに付加される情報により、スケジューラはブロック全体を検査して、入力データが利用可能であれば実行エンジンに送る。ブロック内の個別の命令を検査する必要はない。
複雑さをわずかに増やすだけで、スケジューラは複数のブロックを検査してあるブロックの出力が他のブロックの入力となることを判断し、これらのブロックをユニット間の通信による遅延を減らすよう配置することができる。現代的な並列性を抽出するために CPU が数千の命令を検査することができるなら、EDGEでは同等の複雑さで、それぞれ数百の命令からなる数千のハイパーブロックを検査することができる。この操作がEDGEの名前の一部「グラフ」の元になっており、グラフとはブロック間のデータの流れを元にブロック同士を接続したものである。
EDGEの概念におけるもう一つの利点は、大規模に拡大可能な点である。ローエンドの設計では、ブロック実行のエンジンを一つしか持たず、スケジューラもプログラムから呼び出すとおりにブロックをエンジンに送出するだけ、といった構成にすることができる。