(57)【特許請求の範囲】
【請求項１】
（ａ）データ及びドメインフロープログラムを格納するメモリと、
（ｂ）前記メモリにドメインフロープログラムを要求し、前記ドメインフロープログラムをドメインフロープログラミング情報に変換するコントローラと、
（ｃ）前記ドメインフロープログラムにおいて特定された同じ単一割当式に属する複数のデータトークンの命令タグに関する一致を検出する１つ以上の処理要素によって、前記ドメインフロープログラミング情報を処理するプロセッサファブリックであって、微細並列アルゴリズムを実行するように構成されているプロセッサファブリックと、
（ｄ）前記データトークン及び前記ドメインフロープログラミング情報を前記プロセッサファブリックに送信するクロスバーと、
（ｅ）クロスバーにデータストリームを送信するように構成されたデータストリーマであって、ページ認識を実装し、ＤＲＡＭへの効率的なライトバックのために、又はＤＲＡＭからプロセッサファブリックへの効果的な入力ストリーム生成のために、キャッシングを用いて、ページコヒーレントデータを蓄積するデータストリーマと、
を備える演算デバイス。
【請求項２】
前記プロセッサファブリックは、特定のクラスのアルゴリズムのために構成された命令セットアーキテクチャを処理する請求項１記載のデバイス。
【請求項３】
前記特定のクラスのアルゴリズムは、ハッシングアルゴリズムを含む請求項２記載のデバイス。
【請求項４】
前記特定のクラスのアルゴリズムは、補間及び再サンプリングのための最適化を含む請求項２記載のデバイス。
【請求項５】
前記データストリーマによって行列記述子を用いて、メモリへ／からデータストリームを導出する請求項１記載のデバイス。
【請求項６】
疎行列について、インデックス構造を用いて、メモリ帯域幅を最小化し、及びＤＲＡＭのパフォーマンスを最大化する請求項５記載のデバイス。
【請求項７】
前記コントローラは、更に、メモリコントローラに読出要求を提出することを含むドメインフロープログラムの要求を行うように構成されており、前記メモリコントローラは、前記読出要求をメモリ要求に変換して、前記コントローラにデータを戻す請求項１記載のデバイス。
【請求項８】
前記メモリコントローラから前記コントローラに戻される前記データは、単一割当プログラムを構成するためのプログラム命令を含む請求項７記載のデバイス。
【請求項９】
前記コントローラは、更に、前記データストリーマに前記ドメインフロープログラミング情報を送達するように構成されている請求項１記載のデバイス。
【請求項１０】
前記コントローラは、更に、全体的なデータ経路が準備されると、開始のために前記データストリーマにイベントを発行するように構成されている請求項１記載のデバイス。
【請求項１１】
前記クロスバーは、更に、プロセッサファブリックの行又は列にデータストリームをルーティングするように構成されている請求項１記載のデバイス。
【請求項１２】
前記プロセッサファブリックは、更に、出力データストリームを生成するように構成されている請求項１１記載のデバイス。
【請求項１３】
前記出力データストリームは、前記クロスバーを経て、前記データストリーマに供給され、前記データストリーマは、メモリアドレスを前記出力データストリームに関連付け、前記データストリーマは、前記出力データストリームをメモリコントローラに供給し、前記メモリコントローラは、前記メモリに前記出力データストリームを書き込む請求項１２記載のデバイス。
【請求項１４】
前記データストリーマは、更に、前記データストリーマが演算タスクの完了を確認すると、前記コントローラに通知イベントを送信するように構成されている請求項１３記載のデバイス。
【請求項１５】
（ａ）データ及びドメインフロープログラムを格納するメモリと、
（ｂ）前記メモリと通信し、読出及び書込要求を受信し、前記読出及び書込要求をメモリ要求に変換するメモリコントローラと、
（ｃ）前記メモリにドメインフロープログラム及びデータを要求し、前記ドメインフロープログラムをプログラミング情報に変換するコントローラと、
（ｄ）複数のデータトークンの命令タグに関する一致を検出する１つ以上の処理要素によって、前記プログラミング情報を処理し、出力データストリームを生成するプロセッサファブリックであって、微細並列アルゴリズムを実行するように構成されているプロセッサファブリックと、
（ｅ）前記データトークンを前記プロセッサファブリックに送信するクロスバーと、
（ｆ）前記クロスバーにデータストリームを送信するデータストリーマであって、ページ認識を実装し、ＤＲＡＭへの効率的なライトバックのために、又はＤＲＡＭからプロセッサファブリックへの効果的な入力ストリーム生成のために、キャッシングを用いて、ページコヒーレントデータを蓄積するデータストリーマと、
を備える演算デバイス。
【請求項１６】
前記プロセッサファブリックは、特定のクラスのアルゴリズムのために構成された命令セットアーキテクチャを処理する請求項１５記載のデバイス。
【請求項１７】
前記特定のクラスのアルゴリズムは、ハッシングアルゴリズムを含む請求項１６記載のデバイス。
【請求項１８】
前記特定のクラスのアルゴリズムは、補間及び再サンプリングのための最適化を含む請求項１６記載のデバイス。
【請求項１９】
前記データストリーマによって行列記述子を用いて、メモリへ／からデータストリームを導出する請求項１５記載のデバイス。
【請求項２０】
疎行列について、インデックス構造を用いて、メモリ帯域幅を最小化し、及びＤＲＡＭのパフォーマンスを最大化する請求項１９記載のデバイス。
【請求項２１】
（ａ）コントローラによって、ドメインフロープログラムを構成するためのプログラム命令を含むデータをメモリに要求すること、
（ｂ）前記コントローラにおいて、前記プログラム命令をプログラミング情報にデコード及び変換し、データストリーマに前記プログラミング情報を送達すること、
（ｂ’）データストリーマにおいて、ページ認識を実装し、ＤＲＡＭへの効率的なライトバックのために、又はＤＲＡＭからプロセッサファブリックへの効果的な入力ストリーム生成のために、キャッシングを用いて、ページコヒーレントデータを蓄積すること、
（ｃ）前記プログラミング情報を、複数の処理要素を含むプロセッサファブリックに転送すること、
（ｄ）前記プログラミング情報に基づくアフィン再帰式の連結セットによって定義される単一割当プログラムを実行するように前記プロセッサファブリックを構成することであって、前記プロセッサファブリックは、更に、微細並列アルゴリズムを実行するように構成されること、
（ｅ）前記プロセッサファブリックに、前記プロセッサファブリック内で、及び前記プロセッサファブリックからデータストリームをルーティングすること、
及び  
（ｆ）前記ドメインフロープログラムにおいて指定されている同じ単一割当式に属する、命令タグに関して一致する複数のデータトークンに関する命令を実行すること、
を含む方法。
【請求項２２】
前記プロセッサファブリックは、特定のクラスのアルゴリズムのために構成された命令セットアーキテクチャを処理する請求項２１記載の方法。
【請求項２３】
前記特定のクラスのアルゴリズムは、ハッシングアルゴリズムを含む請求項２２記載の方法。
【請求項２４】
前記特定のクラスのアルゴリズムは、補間及び再サンプリングのための最適化を含む請求項２２記載の方法。
【請求項２５】
前記データストリーマによって行列記述子を用いて、メモリへ／からデータストリームを導出する請求項２１記載の方法。
【請求項２６】
疎行列について、インデックス構造を用いて、メモリ帯域幅を最小化し、及びＤＲＡＭのパフォーマンスを最大化する請求項２５記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願
本出願は、２００８年５月２７日に出願された米国特許仮出願番号第６１／１３０，１１４号、発明の名称「EXECUTION ENGINE」の優先権を主張して２００９年５月１８日に出願された同時に係属中の米国特許出願番号第１２／４６７，４８５号、発明の名称「EXECUTION ENGINE FOR EXECUTING SINGLE ASSIGNMENT PROGRAMS WITH AFFINE DEPENDENCIES」の一部継続出願であり、これらの文献の全体は、全ての目的のために、参照によって本願に援用される。
【０００２】
発明の分野
本発明は、コンピュータシステムの分野に関し、特に、微細並列命令（fine-grained parallel instruction）の効率的な実行に関する。
【背景技術】
【０００３】
典型的な汎用コンピュータは、メモリから命令をフェッチし、これらの命令をデコード及び実行する順次命令ストリームプロセッサ（sequential instruction stream processor）として構成されている。順次命令ストリームプロセッサのエネルギ使用は非常に非効率的であり、命令が表す演算の実際の実行に比べて、より多くのエネルギが命令管理に消費される。例えば、インテル又はＡＭＤの最新の汎用ｘ８６プロセッサは、プロセッサの動作スループットによる測定では、例えば、疎行列ソルバ（sparse matrix solver）等の重要なアルゴリズムについて、ピークパフォーマンスの１０％しか達成していない。
【０００４】
更に、これらの順次命令ストリームプロセッサは、微細並列処理について非常に非効率的である。上述した疎行列ソルバでは、パフォーマンス要求として、通常、数千ものプロセッサを並列して使用することが要求される。プロセッサのグループ間で実行を調整するためには、幾つかのプロセッサが他のプロセッサより前に実行を完了しても、このプロセッサは、他の残りのプロセッサと同期されるまで待機する必要があり、多くの時間及びエネルギが無駄に消費される。
【０００５】
汎用コンピュータの効率を低下させるこのアルゴリズムは、科学、エンジニアリング及びビジネスにおいて、不可欠で重要なものである。更に、データ及び演算要求の指数関数的な増加により、合理的な時間で結果に到達するためにプロセッサのグループが使用されるようになっている。多くの重要なアルゴリズム、例えば、信号処理、ソルバ、統計及びデータマイニングは、微細並列構造（fine-grained parallel structure）を有している。これらのアルゴリズムを汎用プロセッサのネットワーク上にマッピングすることは、サイズ、コスト及び電力消費に関する課題を有している。
【発明の概要】
【課題を解決するための手段】
【０００６】
本発明は、高度並列微細構造演算を効率的に実行する装置を提供する。この装置はこのような様々な構造化演算を効果的に実行するようにプログラム可能である。コンピュータのエネルギ消費は、実行される命令及び必要なデータ被演算子の数に比例する。コンピュータの電子的インプリメンテーションにおいては、これは、エネルギ消費が、命令及びデータの伝送に必要な時間及び距離と比例することを意味する。本発明は、空間的距離を守る実行の物理モデルを生成し、及び本発明は、命令間の競合が単純なキューイングシステムによって管理されるように演算を組織化する。
【０００７】
本発明に基づく装置は、処理要素のファブリックからデータトークンを受信し、空間タグに基づいて、これらを命令トークンに照合する処理要素を含む。このタグは、エネルギを反映する演算と、アルゴリズムの設計者が意図する時間的最適化との間の空間的関係を確立する。
【０００８】
幾つかの実施形態においては、処理要素ファブリックには、コンピュータメモリに保存されているデータ構造をデータトークンのストリームに変換するデータストリーマのバンクから、データトークンが供給される。
【０００９】
本発明は、以下の図面を参照して説明され、これらの図面において、同様の要素には、同様の符合を付している。これらの図面は、本発明の選択された実施形態を例示するためのものであり、本発明の範囲を制限することを目的とするものではない。
【図面の簡単な説明】
【００１０】
【図１】幾つかの実施形態に基づいて動作するデータフローコンピュータシステムの全般的なブロック図である。
【図２】幾つかの実施形態に基づくデータストリーマのブロック図である。
【図３】幾つかの実施形態に基づくプロセッサファブリックのブロック図である。
【図４】幾つかの実施形態に基づく処理要素のブロック図である。
【図５Ａ】データパケットの１つの特定の実施形態を示す図である。
【図５Ｂ】データトークンの１つの特定の実施形態を示す図である。
【図５Ｃ】命令トークンの１つの特定の実施形態を示す図である。
【図６】命令ストアの１つの特定の実施形態のブロック図である。
【図７Ａ】行列−ベクトル乗算のための単一割当形式プログラムの例である。
【図７Ｂ】単一割当グラフを２次元で表す図である。
【図８】実行エンジンを利用する方法のフローチャートである。
【発明を実施するための形態】
【００１１】
以下の説明では、本発明の完全な理解のために、多数の特定の詳細を記述する。本開示によって利益を得る当業者にとって、本発明がこれらの特定の詳細なしで実施できることは明らかである。本発明の特徴に焦点を当てるために、様々な周知の方法、手順、構成要素及び回路は、詳細には記述していない。
【００１２】
実行エンジンは、アフィン従属による単一割当プログラムを実行する。単一割当形式（single assignment form：ＳＡＦ）のプログラムは、一組の式として演算を表すアルゴリズムであり、ここでは、各割当が一意的識別子を参照する。単一割当プログラムの例示的表現は、左辺が一意的識別子として解釈される再帰式である。多くのアルゴリズムが、単一割当形式の自然な表現を有する。例えば、図７Ａは、行列−ベクトル乗算のための単一割当プログラムの例を表している。図７Ｂは、ノードが演算を表し、エッジがデータ移動を表すデータフローグラフである関連する単一割当グラフを示している。
【００１３】
単一割当プログラム及び用語「従属グラフ（dependence graph）」、「減少従属グラフ（reduced dependence graph）」が交換可能に使用できることは、当業者にとって明らかである。更に、コンパイラ表現（compiler literature）では、制御フローグラフの定義は、確立されている。制御フローグラフは、その実行の間にプログラムを横断する全ての経路を表す。すなわち、プログラムが単一割当プログラムの集合を含む場合、これらの入力及び出力は、直接的又は間接的に通信される。コンパイラは、このようなプログラムを解析して、この知識を制御フローグラフ内に表現する。ここでも、プログラムは、制御フローグラフによって表現でき、これらの用語は、同じ実体を表していることは、当業者にとって明らかである。
【００１４】
エンジンは、潜在的にランダムアクセスメモリを介して通信を行う単一割当プログラムの集合を実行するので、用語「単一割当プログラム」及び「減少従属グラフ」の交換可能な性質によって、並びにプログラムが制御フローグラフによって表現可能であるという演繹的知識によって、論理的に、「ドメインフロープログラム」は、「一組の連結アフィン再帰式の減少従属グラフ及びランダムアクセスメモリから開始され、ランダムアクセスメモリで終了する従属グラフに接続される制御グラフ」と定義することができる。
【００１５】
ここでは、「プログラム」は、従属グラフによる演算及び演算のドメインを表す「ドメインフロープログラム」として記述する。マシンの動作から、このマシンは、内蔵プログラムモデルではなく、データフローに基づいて実行モデルを実行することは明らかである。これは、抽象的な多次元格子内の点と解釈される空間タグを含む「プログラム」表現である点が従来のデータフローマシンとは異なる。従属グラフ及び演算のドメインに関する「微細構造の」演算の表現によって、プログラムが「ドメインフロー」プログラムになる。
【００１６】
更に、ここには、再帰式及びこれと等価である単一割当プログラムは、これらの「演算のドメイン」上でのみ有効であることを記述する。ファブリックは、演算の間にアクティブなこれらのドメインの集合を有し、これらのドメインの入力は、ランダムアクセスメモリから、ファブリックを介して、ランダムアクセスメモリに「流れる」ので、これは、ドメインのフロー、すなわち、ドメインフローを表す。したがって、このドメインフローを表すプログラムは、ドメインフロープログラムとして特定され、これは、一組の連結アフィン再帰式を含み、これは、ランダムアクセスメモリから開始され、ランダムアクセスメモリで終了する入力ドメインを有する減少従属グラフによって表すことができる。このようなフローの記述は、コンパイラにおける重要な要素であり、コンパイラ表現では、これらの記述を指す用語「制御フローグラフ」を使用する。論理的には、これらの記述は、一組の連結アフィン再帰式としてドメインフロープログラムの概念を導入し、これは、意味的に従属グラフ又は減少従属グラフに等しく、制御フローグラフによって表現され、これは、これらの単一割当プログラムの組み合わせ及びランダムアクセスメモリにおいてこれらのドメインフローがどのように開始及び終了されるかを記述する。
【００１７】
プログラムがサブプログラムの集合を含むことができることと同様に、単一割当プログラムは、１つ以上の単一割当サブプログラムを含むことができる。ドメインフロープログラムにこの細分化を再帰的に適用することによって、これは、それぞれが演算のドメインに関して定義されるアフィン再帰式の幾つかの組に等しい制御フローグラフ内のノードで終了する。ここに説明するように、異なる再帰式に属するデータトークンは、これらの識別子、これらの演算のドメイン、シグネチャ更新関数、及びルーティングベクトルによって組織化される。このように、ドメインフロープログラムによって簡潔に記述できるアフィン再帰式の通信に関連するデータトークンの組織化は、これらの識別子及びこれらの演算のドメイン内のインデックスによって明確化された同じ単一割当式に属するデータトークンの概念を含むように記述される。また、ここには、識別子によって一意化され、演算のドメイン上で定義される同じ再帰式に属する一連のデータトークンである出力ストリームを生成する１つ以上の処理要素の処理も記述する。
【００１８】
図７Ａは、ｗ再帰を定義する再帰式がｖ再帰を定義する再帰式に従属又は結合するので、アフィン再帰式の連結セットに等しい再帰式のシステムの例を示している。更に、再帰式のこれらのシステムを表す従属グラフの表現は、再帰式間の結合を捉えている。これらの式が結合されない場合、従属グラフは、単一割当再帰を表すノードのみを含む。
【００１９】
如何なるプログラムも、単一割当形式で表すことができる。単一割当形式アルゴリズムは、予定実行への如何なる明示的な順序付けも有さない最大限の並列公式化（maximally parallel formulations）であるため、微細構造化された並列のプログラムは、単一割当形式で最も自然に表される。これにより、実行環境は、リソース競合を如何に管理するかにフォーカスできる。単一割当形式のプログラムは、演算毎に一意的な割当を含む。これは、各演算に対応するノード及び各データ移動に対応するエッジを含む単一割当グラフ（single assignment graph：ＳＡＧ）によって表現することができる。演算イベントは、式の右辺に被演算子を有し、式の左辺に対する割当を演算する幾つかの演算として定義される。
【００２０】
信号伝播の速度には、限界があるため、如何なる２つの並列の演算イベントも、時間的又は空間的に分離される。現実のベクトル空間として広がるＲＮの離散サブグループとして定義される抽象的格子（abstract lattice）に単一割当形式プログラムを埋め込むことによって、アルゴリズム設計者は、従属する演算間の空間距離を特定することができる。幾つかの実施形態においては、抽象的正規直交格子（abstract orthonormal lattice）内への埋め込みが行われる。正規直交格子は、正規直交基底によって定義され、全ての基底ベクトルは、単位長を有し、これらの内積は、ゼロである。単一割当グラフは、同じ格子点に従属演算イベントが存在できないという規則によって、格子に埋め込むことができる。これによって、各演算イベントが格子内の一意的位置に割り当てられ、従属する演算が物理的に分離された格子点によって分離され、これにより、従属する被演算子を通信するための時間的分離が明確になる。格子内のこの一意的位置は、演算イベントのシグネチャと呼ばれ、これは、格子内の格子点を特定するインデックスベクトルとして定義される。適切な格子の他の例は、結晶グループ及び空間のカバーを形成する幾つかのレギュラーセル（regular cell）によって定義される他の空間の離散的サンプリングである。格子グループと呼ばれるこれらのサンプリングを記述する数学的構造は、明確に定義されている。正規直交格子は、これらのより一般化された格子グループのサブセットである。
【００２１】
ＳＡＧを幾つかの格子に埋め込むと、全てのプログラム入力及び全ての演算イベントは、従属演算イベントに結果をどのように送達するかを定義する明確なルーティングベクトルを有するようになる。このルーティングベクトルは、演算命令がこれらの入力にどのように従属するかを指定するため、従属ベクトルと呼ばれる。空間格子を埋め込むことにより、アルゴリズム設計者は、例えば、距離及びリソース競合等の制約を組み込むことができる。エネルギ消費及び従属する被演算子を通信する時間は、距離に比例するため、距離は、パワー効率及びパフォーマンスにとって非常に重要である。この距離は、離散的ルーティングネットワーク内のホップを用いて定義され、すなわち、各ホップは、少なくとも１個のレジスタを通過する必要があり、このため、ホップの数に比例してエネルギが消費される。
【００２２】
ここに記述した実行エンジンは、抽象的空間格子に埋め込まれる上述した埋め込み単一割当プログラムのための効率的な実行エンジンである。
【００２３】
図１は、幾つかの実施形態に基づいて動作するデータフローコンピュータシステムの全般的なブロック図である。コンピュータシステム１００は、データ及び実行されるプログラムを格納するメモリ１１０を含む。メモリ１１０は、適用可能な如何なる種類のメモリであってもよい。実行は、コントローラ１２０がメモリ１１０にプログラムを要求することによって開始される。コントローラ１２０は、バス１２１を介してメモリコントローラ１３０に読出要求を行い、メモリコントローラ１３０は、読出要求をメモリ要求に変換して、コントローラ１２０にデータを返す。このデータは、単一割当プログラムを実行するプログラム命令を含む。コントローラ１２０は、これらのプログラム命令をデコードし、これらをストリーマ１４０のためのプログラミング情報に変換し、これらは、制御バス１２２を介してストリーマ１４０に送達される。同時に、コントローラ１２０は、コマンドバス１２３を介して、クロスバー１５０にプロセッサファブリック１６０のためのプログラミング情報を送信する。クロスバー１５０は、プロセッサファブリック１６０の適切な行及び列にコマンドを含むプログラミング情報を送達し、プロセッサファブリック１６０は、これらのコマンドを読み取り、単一割当プログラムを実行するように自らを構成する。全体的なデータ経路が準備されると、コントローラ１２０は、イベントをストリーマ１４０に発行して処理を開始する。メモリコントローラ１３０は、ストリーマ１４０から読出及び書込要求を受信し、これらをメモリ要求に変換する。ストリーマ１４０からの読出要求によって、データは、メモリコントローラ１３０によってストリーマ１４０に送達され、クロスバー１５０に送られる。クロスバー１５０は、プロセッサファブリック１６０の適切な行又は列にデータストリームをルーティングする。プロセッサファブリック１６０は、供給されてくるデータストリームを受信し、これらのストリームに対して命令を実行し、出力データストリームを生成する。これらの出力データストリームは、クロスバー１５０を介してストリーマ１４０に渡され、ストリーマ１４０がメモリアドレスをデータストリームに関連付け、これらをメモリコントローラ１３０に提供し、メモリコントローラ１３０がメモリ１１０にデータストリームを書き込むことによって、メモリ１１０に書き戻される。ストリーマ１４０は、演算タスクの完了を確認すると、制御バス１２２を介して通知イベントをコントローラ１２０に送り返す。コマンド／イベントバス１２３、１２４は、割り込み及び他のイベントをコントローラ１２０に戻し、エラー、パニック、並びにコントローラが演算を中断又は制御するための動作情報をシグナリングするために使用される。
【００２４】
図２は、データストリーマ１４０のブロック図である。データストリーマは、データトークンストリームを組立及び／又は分解するストリームプログラムを実行する。このプロセスは、コントローラ１２０が単一割当プログラムをデコードし、このプログラムをストリーマ１４０のためのストリームプログラムに変換することによって開始される。コントローラ１２０は、制御バス１２２を介してストリームプログラムストア２２０にこのストリームプログラムを書き込む。ストリームプログラムは、要求アドレス及び他の属性、例えば、サイズ及びタイプをどのように演算するかを詳細に示す。ストリームプログラムは、プロセッサ２１０によって実行される。プロセッサ２１０は、ストリームプログラムを実行し、メモリコントローラコマンドを生成し、コマンドデータキュー２５０に書き込む。プロセッサ２１０は、同じストリームプログラムの一部として、関連するトークン属性再帰式識別子、シグネチャ及びデータタイプを生成する。これらの属性は、トークン組立ユニット２３０によって使用され、トークン組立ユニット２３０は、メモリコントローラ１３０から供給される読出データ２６０にこれらの属性を結合し、データトークンストリームを生成し、クロスバー１５０に書き込む。同様に、クロスバー１５０から供給され、メモリに書き戻す必要があるデータストリームについて、トークン分解ユニット２４０は、供給されたデータトークンからトークン属性再帰式識別子、シグネチャ及びデータタイプを分離し、プロセッサ２１０による更なる処理のために、これらをストリームプログラムストア２２０に書き込む。トークン分解ユニット２４０は、書込データキュー２７０にデータトークンのデータペイロードを書き込む。同時に、プロセッサ２１０は、書込ストリームプログラムを実行し、適切なメモリ書込コマンドを生成し、これらは、書込データと共に、メモリコントローラ１３０に供給される。
【００２５】
図３に示すように、クロスバー１５０は、プロセッサアレイ内でＮ個のデータストリーマをＭ個の処理要素（processing element：ＰＥ）３１０に接続する相互接続ネットワークを提供する。ストリーマ１４０は、メモリ内のフラットなデータ構造を時間的な多次元データストリームに変換する。クロスバー１５０は、何れかのストリーマの物理的な位置を、プロセッサファブリック１６０内の処理要素の１つ、複数又は全ての物理的な位置に接続する。プロセッサファブリック１６０は、これらの多次元データストリームを使用し、コントローラ１２０がメモリから読み出し、クロスバー１５０を使用して適切な処理要素３１０に接続するバス１２３に書き込まれた命令トークンストリームを介してプロセッサファブリックの処理要素にインストールした単一割当プログラムの制御の下で、ファブリック内で多次元データストリームを共に接続する。多次元データストリームは、処理要素３１０及び処理要素ルーティングネットワーク３２０を流れる。処理要素３１０は、命令及びデータトークンを処理する。命令及びデータトークンは、処理要素３１０に送信し、ここに保存することができる。単一割当プログラムは、多次元空間内でデータトークンをどのように結合するかを記述する。処理要素３１０は、演算イベントのシグネチャと呼ばれる空間タグを認識し、コントローラ１２０によってこれらのプログラムストアにインストールされた単一割当プログラムの制御に基づいて動作する。この動作では、供給されたデータトークンのシグネチャを、実行の間に処理要素３１０に蓄積されている命令トークンのシグネチャと比較し、一致があった場合、内部ネットワーク３２０からデータトークンを抽出する。単一割当プログラムによって表される全体的な演算は、処理要素３１０内で多次元データストリームが照合され、中間的結果を表す潜在的な新しい多次元データストリームが生成されるにつれて進化し、新しい多次元データストリームは、ルーティングネットワーク３２０を介して、プロセッサファブリック内のこれらの演算イベントの宛先に伝達される。最終結果データストリームは、処理要素３１０に保存されている単一割当プログラムの制御の下で、ルーティングネットワーク３２０及び処理要素３１０を介して、クロスバー１５０にストリーミングによって戻される。クロスバー１５０は、これらのデータストリームを適切なストリーマ１４０に供給し、ストリーマ１４０は、これらのデータストリームを、メモリ１１０に書き込むことができるフラットなデータ構造に変換する。単一割当プログラムの実行の間、エラー状況が発生することがあり、処理イベントを観察することに関心が持たれる場合があるので、コントローラ１２０は、演算を管理するためのより優れた能力を有する。プログラムエラーの例は、アンダーフロー又はオーバーフローのような浮動小数点例外、ゼロによる除算のような命令例外、リソース枯渇又は時間切れのようなパニックイベント等である。ルーティングネットワーク３２０は、このような状況によって悪影響を受けることがあり、重要なイベントの送達及び取扱いをより良好に保証するために、このようなイベントのために、双方向バス１２４によって個別の通信ネットワーク３３０をコントローラ１２０に接続している。プロセッサファブリック１６０及びコントローラ１２０は、双方向イベントバス１２４を用いて、プロセッサファブリック１６０において進化する演算を集め、まとめ、制御する。
【００２６】
図４は、処理要素３１０の構造を示している。プロセッサファブリック１６０内の演算の開始の前に、コントローラ１２０は、単一割当プログラムに関する制御情報を処理要素のプログラムストア４４０に書き込む。プログラムストア４４０に書き込まれる情報は、再帰式を明確化する識別子、再帰式がアクティブになる演算のドメイン、シグネチャ更新プログラム及びルーティングベクトルを含む。演算のドメインは、仕様であり、通常、不等式のシステムによって定義された制約集合である。このような制約集合の例は、｛（ｉ，ｊ）｜１≦ｉ，ｊ≦Ｎ｝である。これは、図７に示される再帰式の演算のドメインである。この制約集合は、以下の４つの不等式のシステムである。
１．  ｉ≧１
２．  ｊ≧１
３．  ｉ≦Ｎ
４．  ｊ≦Ｎ
【００２７】
この不等式のシステムは、以下の行列によって記述できる。
【００２８】
【数１】
0006721911.tif 000002
【００２９】
幾つかの実施形態においては、この制約行列及び右辺ベクトルは、制約集合を指定するための正規化された形式として使用できる。このプログラム情報は、コントローラ１２０によってプロセッサファブリック１６０に注入（inject）される制御パケットを介して処理要素３１０に送達される。各処理要素３１０のポートアービタ（port arbiter）４１０は、ルーティングネットワーク３２０からパケットを受信する。ポートアービタ４１０は、処理要素３１０のネットワークポートから１つ以上のパケットを選択し、これらのパケットをパケットデコーダ４２０に送る。パケットデコーダ４２０は、パケットを検査し、パケットがプログラムを含んでいるか又は他のタイプの制御情報を含んでいるかを判定する。パケットが制御パケットである場合、パケットデコーダ４２０は、コントローラ４３０にパケットを送信し、コントローラ４３０は、制御情報を抽出し、データ経路の異なる要素、特に、プログラムストア４４０及び命令ストア４５０をプログラムする。制御及び状態情報は、制御バス４３１を介して書き込まれる。プログラムストア４４０は、単一割当プログラムの一部である再帰式毎に、識別子、演算のドメインの仕様、シグネチャ更新仕様、及びルーティングベクトルを受信する。この情報は、処理要素３１０が実行を補助する幾つかのアフィン再帰式を定義する。包括的には、再帰式は、複数の処理要素３１０上で実行され、したがって、より自然に述べれば、再帰式は、プロセッサファブリック１６０上で実行される。コントローラ１２０がプロセッサファブリック１６０をプログラムした後、実行を開始することができる。実行は、データストリーマ１４０が（クロスバー１５０を介して）プロセッサファブリック１６０に最初のデータパケットを注入することによって開始される。データパケットが処理要素３１０のネットワークポートに到達すると、パケットアービタ４１０は、１つ以上のパケットを選択し、これらをパケットデコーダ４２０に送る。パケットデコーダ４２０は、パケットを検査し、これがこの特定の処理要素３１０上で実行される演算に属するデータパケットであるかを判定する。これに該当する場合、パケットデコーダ４２０は、パケットのルーティングベクトルを抽出する。ルーティングベクトルが無効（null）でない場合、パケットデコーダ４２０は、パケットルータ４２５にパケットを送る。パケットルータ４２５は、ルート内の次のレッグを算出し、パケットのルーティングベクトルを更新し、ルーティングネットワーク３２０に注入し戻される更新されたパケットをポートアービタ４１０に供給する。ルーティングベクトルが無効である場合、パケットデコーダ４２０は、命令ストア４５０にデータトークンを送信する。命令ストア４５０は、データトークンから命令タグを抽出し、命令ストア４５０に保存され、係留中の関連する命令内の適切な被演算子スロットにデータペイロードを割り当て、又はこのデータトークンがこの特定の演算イベントのために受信された最初のデータトークンである場合、新しい命令を割り当てる。係留中の命令がその全ての被演算子を受信すると、命令ストア４５０は、係留中命令リストから命令の割当を取り消し、命令トークンを、トーク��分解ユニット４６０に送信することによって、実行のためのキューに入れる。命令トークンは、命令演算コード、再帰式の可変識別子、この命令が表す演算イベントのシグネチャ及び構成被演算子を含む。トークン分解ユニット４６０は、命令トークンからシグネチャを抽出し、シグネチャを可変識別子と共にシグネチャパイプライン４７０に送信する。シグネチャパイプライン４７０は、プログラムストア４４０内で可変識別子を調べ、シグネチャ更新プログラムを読み出してシグネチャに適用する。シグネチャ更新プログラムは、包括的な説明のセクションで述べたように、幾つかの抽象的格子内の空間インデックスベクトルと解釈できる供給されたシグネチャに対する単純なアフィン変換である。シグネチャパイプライン４７０は、供給されたシグネチャにこのアフィン変換を適用し、新しいシグネチャを生成する。この新しいシグネチャは、トークン組立ユニット４９０に送られる。シグネチャパイプラインの実行と同時に、値パイプライン（value pipeline）４８０は、命令を実行して、新しい左辺値を生成する。トークン分解ユニット４６０は、命令トークンから命令演算コード及び被演算子を抽出し、これらを値パイプライン４８０に送る。値パイプライン４８０は、命令を実行し、結果をトークン組立ユニット４９０に送る。トークン組立ユニット４９０は、シグネチャパイプライン４７０の出力及び値パイプライン４８０の出力を受け取り、新しいデータトークンを構築する。トークン組立ユニット４９０は、この再帰式のための演算のドメインに対して、この新しいデータトークンのシグネチャをチェックし、ドメイン内である場合、データトークンをパケットルータ４２５に送信する。ルーティングベクトルが無効ベクトルでない場合、パケットルータ４２５は、パケットにデータトークンを埋め込み、これをポートアービタ４１０に送信し、幾つかのアービトレーションポリシの制御の下でルーティングネットワーク３２０に注入し戻す。このアービトレーションポリシの例は、先着順（first-come-first-served）又はサービス品質保証を実現するプライオリティベースのスキームである。データトークンのルーティングベクトルが無効である場合、これは、データトークンが現在の処理要素３１０内で再循環することを意味し、パケットルータ４２５は、命令ストア４５０にデータトークンを送信し、ここで、命令と照合する。
【００３０】
図５Ａは、ルーティングネットワーク３２０を流れるデータパケット５１０の構造の１つの可能な実施形態を示している。データパケット５１０は、ルーティングネットワークを流れ、データ値を処理要素３１０に送達する。この実施形態では、データパケット５１０は、パケット識別子５１１、キュー識別子５１９、ストリーム識別子５１２、再帰式識別子５１３、データタイプ５１４、シグネチャ５１５、データ値５１６及びルーティングベクトル５１７を含む。パケット識別子５１１は、何らかの演算エラーの特定を補助するデバッグ機能を有する。ファブリック上での単一割当プログラムの実行の間、任意の時点に数千ものパケットがシステム内に存在できる。この集合内で特定のパケットを特定するためには、一意的識別子が搬送されている必要がある。この情報は、そのコンパイラによって命令ストリームプロセッサの命令ストリーム内に注入され、コード内の機能的問題のデバッグを補助するデバッグ情報及び命令に類似する。リリースコードの実行の間、この一意的パケット識別子は、データパケットの一部ではない。
【００３１】
更に図５Ａを参照して説明すると、この例示的なデータパケット５１０は、４次元単一割当プログラムを実行する２次元プロセッサファブリックにおいて使用できる。２次元プロセッサファブリックは、ルーティングベクトル５１７が２次元であり、宛先処理要素３１０までのマンハッタンルート（Manhattan route）を表すと判定する。処理要素３１０の動作について説明したように、無効ではないルーティングベクトルは、パケットデコーダ４２０によって検出され、パケットルータ４２５に送られ、ルート内の次の処理要素３１０にルーティングされる。４次元単一割当プログラムは、シグネチャ５１５内で４次元空間内の４つのインデックスを表す４−ベクトルとして表される。再帰式識別子５１３に結合されるシグネチャ５１５は、本発明に基づくプログラム実行において非常に重要である。再帰式識別子５１３及びシグネチャ５１５は、単一割当プログラム内で１つの演算イベントを一意的に特定する。この演算イベントの結果は、データ値スロット５１６に格納され、そのタイプは、データタイプ５１４によって識別される。参加する次の演算イベントに結果を送達するために、ネットワークは、ルーティングベクトル５１７を介してデータパケットをルーティングし、キュー識別子５１９を使用して、処理要素３１０内のパケットルータ４２５を補助する。各再帰式には、コンパイラによって、一意的キューＩＤが割り当てられ、これにより、パケットルータは、最小限のデコードハードウェアを用いて、供給されたデータパケットを速やかにキューに入れることができる。完全にアクティブな２Ｄメッシュ内に４つの並列のパケットが供給されるという事実のために、処理要素３１０のフロントエンドへのプレッシャが重要である。データパケット内でキュー情報の一部を搬送することによって、処理要素３１０内のパケットルータのハードウェアの複雑性が低減される。最後に、ストリーム識別子５１２を用いて、データパケットをフラットなメモリデータ構造に関連付ける。データストリーマ１４０がフラットなメモリデータ構造から多次元データストリームを生成する場合、シグネチャがデータ構造内の位置を特定するが、ストリーム識別子５１２は、データ構造を特定するために必要である。これは、メモリデータ構造に対して実行されるプログラムがベースアドレスに関連して特定される、命令ストリームプロセッサ内で使用されるベースアドレスと同様である。ストリーム識別子５１２により、データストリーマは、メモリ内でデータパケットがどこから供給され、及びどこに供給されるかを正しく特定することができる。
【００３２】
図５Ｂは、図５Ａに示すデータパケットと共に使用されるデータトークン５２０の構造の１つの可能な実施形態を示している。データトークン５２０は、このデータ要素が属する命令を命令ストア４５０が特定するために必要な最小限の情報を搬送する。図５Ａ及び図５Ｂを比較することによってわかるように、データトークン５２０は、データパケット５１０内に完全に含まれる。データトークンの個々のフィールドは、データパケットについて上述したものと同じフィールドである。これは、データパケットがプロセッサファブリック１６０を介してデータトークンを送達するための現実のルーティングメカニズムであるので、異なる実施形態間の共通の構造である。データパケット及びデータトークン間の同じ構造を使用することにより、データトークンを速やかに組立及び分解することができ、これによって、ハードウェアの複雑性が低減され、パワー、並びにスループット及び待ち時間の全てについて、パフォーマンスが向上する。データトークンの構造は、命令ストア４５０の詳細な演算を決定し、これは、多くの点で、アフィン再帰式のシステムから生じる任意の単一割当プログラムの実行を可能にする中心的な制御メカニズムとみなすことができる。命令ストア４５０は、データトークンを組織化し、実行が係留中の命令トークンを組み立て、組織化する。図５Ｂに示すデータトークン構造５２０に属する命令ストア４５０の実施形態を図６に示す。
【００３３】
図６に示すように、データトークンは、データトークン分解ユニット６１０に到達する。データトークン分解ユニット６１０は、データトークンの異なるフィールドを抽出する。このデータトークンが送達されるべき命令を特定するために、データトークン分解ユニット６１０は、データトークンから再帰式識別子５１３及びシグネチャ５１５を抽出し、これらをルックアップユニット６２０に送信する。ルックアップユニット６２０は、図４に示すプログラムストア４４０にクエリを発し、命令情報を読み出す。ルックアップユニット６２０は、単に再帰式識別子５１３とシグネチャ５１５とを結合することによって命令タグ６２５を構築する。これは、このデータトークンが参加する演算イベントのための一意的識別子である。更に、ルックアップユニット６２０は、命令内でデータトークンが占めるスロット位置に関する情報をプログラムストア４４０から受信する。この情報は、スロット割当ユニット６３０を制御し、スロット割当ユニット６３０は、データトークン分解ユニットからデータタイプ５１４及び生データ値５１６を受信し、係留中の命令内の適切なスロットにこれらをルーティングする。ルックアップユニット６２０が実行する最後の機能は、係留中命令トークンストア６５０内で係留中の命令をどのように管理するかに関する情報を含む命令ヘッダ６５１の構築である。図５Ｃは、係留中命令トークンストア６５０内で管理される命令トークンの実施形態を示している。命令ヘッダ６５１は、命令演算コード５３１、スロットカバー５３２及びスロット占有フィールド５３３を含む。命令演算コード５３１は、値パイプライン４８０内の機能ユニットを制御するフィールドである。これは、被演算子に適用する必要がある演算のタイプをエンコードする。この例としては、典型的な機能ユニット演算子、例えば、ＡＤＤ、ＭＵＬＴＩＰＬＹ又はＤＩＶＩＤＥ、又は何らかの論理演算、例えば、ＭＡＳＫ、ＢＩＴ＿ＴＥＳＴ又はＳＨＩＦＴ等がある。スロットカバーフィールド５３２は、命令が幾つの被演算子を必要とするかを特定する。例えば、単純な命令では、１個の入力被演算子を使用でき、より複雑な命令では、通常、３個の被演算子構造が使用される。スロットカバーフィールド５３２及びスロット占有フィールド５３３は、命令が全ての被演算子を受け取っているかを判定するために、係留中命令トークンストア内で連携して機能する。使用されるプロセスは、ルックアップユニット６２０が命令タグ６２５を構成し、これをタグＣＡＭ６４０に送信することによって開始される。タグＣＡＭ６４０は、これらの命令タグによって参照可能な内容参照可能メモリ（content addressable memory）である。タグＣＡＭ６４０がミスを示す場合、これは、命令がタグＣＡＭ６４０に割り当てられていないことを意味し、このミスに対し、タグＣＡＭ６４０は、係留中の命令を割り当てる。タグＣＡＭ６４０がヒットを示す場合、これは、データトークンを送達することができる係留中の命令があることを意味する。タグＣＡＭ６４０は、この係留中の命令に関連するストレージに係留中命令トークンストア６５０へのポインタを提供する。ルックアップユニット６２０は、上述したように、命令ヘッダ６５１を���供し、及びスロット割当ユニットは、係留中の命令の適切なスロットにデータトークン値を書き込む。更に、ルックアップユニット６２０は、スロット占有フィールド５３３を更新し、これを要求されたスロットカバー５３２と比較する。２つが等しい場合、全ての被演算子が受信されており、命令は実行の準備が完了している。命令タグ６２５及びフィールド６５１、５３４、５３５、５３６を含む係留中の命令６４５は、命令トークン組立ユニット６６０に送信され、命令トークン組立ユニット６６０は、図５Ｃに示すように、命令トークン５３０を構築する。命令トークン組立ユニット６６０は、完成した命令トークンを、図４に示すように、トークン分解ユニット４６０から始まる実行ユニットに送る。
【００３４】
図８は、実行エンジンを使用する方法のフローチャートを示している。ステップ８００では、コントローラがメモリにプログラムを要求し、これは、メモリコントローラに読出要求を提出することを含み、メモリコントローラは、読出要求をメモリ要求に変換して、コントローラにデータを戻す。このデータは、単一割当プログラムを実行するためのプログラム命令を含む。ステップ８０２では、プログラム命令をプログラミング情報にデコードし、変換し、データストリーマに送達する。ステップ８０４では、プログラミング情報をクロスバーに送信する。ステップ８０６では、プログラミング情報をクロスバーからプロセッサファブリックに送達する。ステップ８０８では、プログラミング情報を読み出し、単一割当プログラムを実行するようにプロセッサファブリックを構成する。ステップ８１０では、コントローラからストリーマにイベントを発行し、全体的なデータ経路が準備された後、データストリームの送信を開始する。ステップ８１２では、読出及び書込要求をストリーマから受信し、メモリコントローラにおいて、読出及び書込要求をメモリ要求に変換する。ステップ８１４では、ストリームに対する命令を実行し、出力データストリームを生成するために、クロスバーによって、プロセッサファブリックの行又は列にデータストリームをルーティングし、ここで、出力データストリームは、クロスバーを経てストリーマに供給されることによってメモリに書き込まれ、すなわち、ストリーマは、メモリアドレスをデータストリームに関連付け、データストリームをメモリコントローラに供給し、メモリコントローラは、データストリームをメモリに書き込む。ステップ８１６では、ストリーマが演算タスクの完了を確認すると、通知イベントをコントローラに送信する。
【００３５】
ユーザは、実行エンジンを使用するために、例えば、実行エンジンがコンピュータ内で実現されている場合、実行エンジンにプログラムを入力及び／又は開始する。そして、実行エンジンは、上述したようにプログラムを実行する。プログラムに従い、プログラムは、所望の結果を出力する。例えば、ユーザが演算的に複雑な数学的な式を実行することを望む場合、実行エンジンが実行した後の出力は、式の結果である。
【００３６】
実際の動作においては、ここに説明する形式で単一割当プログラムの実行を組織化することによって、実行エンジンは、命令シーケンスプロセッサを使用する際に生じる多くの問題を解決する。実行を案内する命令ポインタは用いられない。実行エンジンは、完全にデータ駆動型（data driven）である。データ要素が利用可能になると、これらは、従属演算をトリガする。これにより、実行エンジン機能は、データフローマシンと同様に機能する。しかしながら、データフローマシンでは、フラットなメモリアドレスに基づいて検索が行われるため、利用できる空間構造がない。従来のデータフローマシンに関する第２の問題は、係留中の命令をホールドするＣＡＭが大規模プログラムを実行できるようにするために、ＣＡＭを非常に大きくする必要がある点である。内容参照可能メモリは、大きくなるほど効率が低下し、動作が遅くなる。ＣＡＭは、パフォーマンスに関して、ノイマン型アーキテクチャを使用する命令シーケンスプロセッサほど優れていないため、従来からデータフローマシン内のボトルネックであった。実行エンジンは、アーキテクチャが守るべき演算の仕様に追加された空間的制約を含み、したがって、エネルギ制約をプログラム内に捕捉することができる。更に、空間的制約によって、全ての処理要素全体に亘ってＣＡＭを分散させることができ、これにより、アーキテクチャは、同時並行性（concurrency）に関して、再びスケーリングされる。例えば、実行エンジンの小さなインスタンスは、単一チップ上に４０９６個の処理要素を集積することができる。処理要素の各命令ストアは、６４個の係留中の命令を格納でき、単一のチップ内に２６２，１４４個の命令の総合的な同時並行性が実現する。４コアチップマルチプロセッサの典型的な同時並行性尺度は、数百の桁であり、高度並列２５６プロセッサグラフィックス処理ユニットでも、同時並列性尺度は、数万の桁である。膨大な量の同時並行性を管理できる実行エンジンの能力は、比類するものがない程に優れている。
【００３７】
コアエンジン
アフィン再帰式のシステムとして表されるドメインフロープログラムのための基本的な実行方法について説明する。再帰は、複雑な演算の進化（evolution）を表すメカニズムである。更に、抽象的インデックス空間内に個々の演算イベントを配置することにより、アルゴリズム設計者は、アルゴリズム表現に空間及び時間制約を組み込むことができる。知識処理ユニット（Knowledge Processing Unit：ＫＰＵ）のコアエンジンの特徴は、リソース競合の状況下においても、これらの微細な空間及び時間制約を忠実に実行できる点である。ノイマン型マシンのリソース競合の解消は、演算シーケンスが演算リソースを共有することができるように、ランダムアクセスメモリを使用して、中間的結果を直列化するものである。一方、ここに説明するＫＰＵコアエンジンは、物理的に有界であるが、論理的に無限の演算ファブリックを提供し、ファブリック内の演算リソースの経路に再帰をマッピングする。すなわち、コアエンジンは、再帰インデックスを時空の位置として解釈し、及びアフィン従属をファブリック内の機能ユニットにマッピングされた演算イベント間の物理的な通信として解釈することによって、時空制約を守り、アフィン再帰式のこれらのシステムを実行することができる装置を表す。微細並列アルゴリズムにこの新しい実行方法を適用することにより、より広範な又はより専門的なアプリケーションのための方法及び装置を微細化及び最適化する新しい機会が提供される。
【００３８】
命令セットアーキテクチャ（Instruction Set Architecture：ＩＳＡ）
再帰式の典型的システムは、演算子の非常に小さな集合を使用し、これは、アルゴリズム間で根本的に異なっていてもよい。例えば、有限差分法（Finite Difference Method：ＦＤＭ）のためのアルゴリズムは、場合によっては異なる正確さで、浮動小数点ＡＤＤ及びＭＵＬＴのみを必要とすることがあり、一方、ゲノム読出シーケンスの繰り込み又は組み立てのためのブルームフィルタ（Bloom filter）のためのアルゴリズムは、２ビットのアルファベットの文字列に亘るハッシュ関数を含む命令セットを必要とする。これらの２つの命令セット間のエネルギ散逸は、大きく異なり、したがって、アルゴリズムのクラスに応じてＫＰＵのＩＳＡを特殊化することによって、値生成の機会が提供される。特に、ハッシングを中心とするＩＳＡは、ゲノム科学／タンパク質科学(genomics/proteomics)の分野に適するが、ハッシングは、更に、セキュリティアプリケーション及びデータベースアプリケーションの鍵でもある。ＦＤＭ、ＦＥＭ及びＦＶＭについては、補間及び再サンプリングのために最適化された命令セットがワットあたりのパフォーマンスを最適化する。信号処理、画像処理及びセンサ処理の全ては、カスタム化されたＩＳＡによる利益を享受できる。
【００３９】
入力／出力経路
ＫＰＵは、マルチコア及びメニーコアの内蔵プログラムマシン又はＳＰＭと比較して、ワットあたりのパフォーマンスが良好であるため、信号処理経路のリアルタイム処理のため使用されることが多い。これらのアプリケーションでは、処理時間をデータ入力速度に一致させる能力と同様に、パワー効率が重要である。これは、センサ又はネットワーク又はデバイス間でデータ経路を最適化し、ＫＰＵのストリーマに直接的な供給を行う機会があることを意味する。第２に、ストリーマは、ランダムアクセスメモリ（Random Access Memory：ＲＡＭ）への／からの入力データ、中間データ及び出力データの直列化を行う。このＲＡＭがダイナミック型、すなわち、ＤＲＡＭである場合、このＤＲＡＭのアクセスパターンは、ページ位置を優先する。これは、ストリーマにページ認識の能力を与える機会を提供し、これにより、ＤＲＡＭへのより効率的なライトバック（writeback）のために、又はよりＤＲＡＭからファブリックストリームへのより効率的な入力ストリーム生成のために、キャッシングを用いてページコヒーレントデータを蓄積することができる。第３に、特定のデータ構造のために、特に、ベクトル及び行列、密及び疎、並びにツリー及びリストのデータ構造のために、これらのデータ構造は、マイクロアーキテクチャ最適化のための好適な基礎を提供する。例えば、ストリーマは、行列記述子を用いて、メモリへ／からデータストリームを導出する。疎行列の場合、特別なインデックス構造を用いて、メモリ帯域幅を最小化し、これにより、所与のＤＲＡＭ技術のパフォーマンスを最大化できる。第４に、例えば、命令毎に４つの浮動小数点演算を実行できるＳＩＭＤユニット等、特定の機能ユニットのマイクロアーキテクチャを有する場合、データストリームは、この能力に一致する必要がある。これは、ストリーマが機能ユニットのマイクロアーキテクチャと連携して動作することを意味する。ＳＩＭＤ浮動小数点ユニットは、一例であり、テキスト又はゲノム／プロテオームアルゴリズムのストリング及びハッシュ演算子も、最適化のための新たな機会を提供する。
【００４０】
アルゴリズム
各アルゴリズムは、アフィン再帰式のシステムに変換する必要があり、良好なパフォーマンスのためには、ドメインのクレバーな空間配置及び整列が重要であるため、新しいドメインフローアルゴリズムは、この問題を解決する方法及び装置となる可能性を有する。ドメインフロープログラムは、実際には、物理的な埋め込みであるため、これは、装置を表す。複雑な空間及び時間制約では、ある再帰のシステムが良好に動作し、機能的に同様な他のシステムのパフォーマンスが低くなることがある。第２に、非常にユニークな最適化されたマシンの場合、アルゴリズムは、ＩＳＡ及びＩ／Ｏ最適化と組み合わされる。
【００４１】
コンパイル及びスケジューリング最適化
アフィン再帰式のシステムが与えられると、コンパイラは、アルゴリズムに固有の同時並行性の量及び構造を解析する。これは、良好なタイムスケジュール及びファブリックへの低競合空間割当を選択するために使用される。単純なアルゴリズムは、空間及び時間予測を選択するために使用することができる。コアアルゴリズムは、高度に並列であることができ、従属ベクトルの単純な線形結合の選択を可能にする。完全に自動化されたコンパイルのために、これらの単純な方法が不十分である場合は、より複雑な、段階的実行パターンを使用することができる。
【００４２】
処理要素（processing element：ＰＥ）
ＫＰＵの処理要素は、ＣＡＭ、命令スケジューリング／ディスパッチキュー、１つ以上の機能ユニット及びアフィンルーティングベクトルを生成することができるルータを含む小型プロセッサである。処理要素マイクロアーキテクチャは、継続的な革新の多くの機会を有している。例えば、浮動小数点、整数及びストリング演算のためのクレバーなＳＩＭＤ機能ユニット、並びにＣＡＭ又はルータを経由する必要なく結果が他の機能ユニットに送られる命令チェイニング等がある。これは、特に複合命令、例えば、ハッシング関数、一次補間又は線形補間、及びＦＶＭ、ＦＥＭ、ＦＤＭ及びＢＥＭに役立つ他のより高次の関数にとって注目される点である。離散イベント計算、例えば、格子ボルツマン法、又はＦＭＭで使用される複雑な近似技術も注目される方法及びマシンである。
【００４３】
処理ファブリック
処理ファブリックは、包括的関数演算子、例えば、ブロードキャスト、並びに縮小、例えば、フェッチアンドアッド（Fetch-and-Add）及びこれに類する手法を示すことができる。これらの包括的演算子は、個々の処理要素ではなく、ファブリックによって管理及び維持される命令セットによって駆動される。第２に、潜在的に数万もの処理要素を有するより大きなファブリックを集積する能力が高まると、処理要素及びファブリックの耐故障性についての要求が高まる。コアＫＰＵエンジンの重要な側面として、入力データセットのリソース競合要求へのローカルの微細従属性が不変であり、処理要素障害を処理することが困難になりつつあるため、耐故障性問題の解決は、重要な革新である。不完全処理又はストレージ要素を特定し、分離するＢＩＳＴテスト及び再構成可能性技術は、ＫＰＵチップに適用できる。幾つかのインプリメンテーションでは、１つの大きいＫＰＵファブリックに代えて、互いに効率的にデータストリームを通信できる多くのより小さなファブリックからチップを構成する。これは、ファブリック及び処理要素のために各カーネルが空間、時間及びＩＳＡを最適化する、複数の通信カーネルを最適化するマイクロアーキテクチャ組織化でもある。
【００４４】
プログラムストレージ及び管理
ドメインフロープログラムの密度は、非常に高い。すなわち、非常に大規模で複雑な並列処理を１００バイト以下で表すことができる。より複雑なアプリケーションは、複数のこのような並列カーネルをチェーン化するので、マイクロアーキテクチャは、これらのプログラム記述をチェーン化及びキャッシングして最適化する。キャッシングは、前のカーネルを効率的に呼び出すために使用され、チェーン化は、メモリへ／から中間データを直列化する必要を回避するために使用され、これにより、パフォーマンスが向上する。
【００４５】
回路
アイドル状態にあるファブリックのサブセットを特定するパワーマネジメント技術は、これらのリソースをシャットダウンして動作電力消費を低減することができる。第２に、コアＫＰＵエンジンは、データ駆動型エンジンであり、したがって、純粋な非同期実行パイプラインとして実現することができる。信号を整定するミュラーＣ要素パイプライン又はマイクロパイプラインを巡るマイクロ構造インプリメンテーションは、埋め込みアプリケーション内でＫＰＵの低電力インプリメンテーションを提供することができる。
【００４６】
フィールドプログラマブルゲートアレイ
ドメインフロープログラム概念は、処理要素及びファブリックのＩＳＡを最適化する機会を提供するので、ＫＰＵのＦＰＧＡインプリメンテーションによって、アプリケーションの実行の間にファブリック及び命令セットを切り換えることができる。これにより、作業負荷が最適化されたサーバ及び埋込み型プロセッサが実現する。
【００４７】
本発明の構造及び動作の原理を明瞭にするために詳細を組み込んだ特定の実施形態に関連して本発明を説明した。このような特定の実施形態及びその詳細への言及は、特許請求の範囲を限定する意図はない。特許請求の範囲によって定義されている本発明の精神及び範囲から逸脱することなく、例示のために選択された実施形態に他の様々な修正を加えてもよいことは、当業者にとって明らかである。
【符号の説明】
【００４８】
１２１  バス
１２２  制御バス
１２３  コマンドバス
１２４  イベントバス、双方向バス
３２０  処理要素ルーティングネットワーク、内部ネットワーク
３３０  個別の通信ネットワーク
５１０  データパケット
５２０  データトークン
５３０  命令トークン
【図１】
0006721911.tif 000003
【図２】
0006721911.tif 000004
【図３】
0006721911.tif 000005
【図４】
0006721911.tif 000006
【図５Ａ】
0006721911.tif 000007
【図５Ｂ】
0006721911.tif 000008
【図５Ｃ】
0006721911.tif 000009
【図６】
0006721911.tif 000010
【図７Ａ】
0006721911.tif 000011
【図７Ｂ】
0006721911.tif 000012
【図８】
0006721911.tif 000013