(57)【特許請求の範囲】
【請求項１】
それぞれ単一代入プログラムについてのプログラム情報を読み込ませて、設定させた、プロセッサアレイにおける複数のプロセッシングエレメントと、
メモリからデータを読み出し、上記メモリからデータストリーマに読み出されたデータに、少なくとも、ストリーム識別子・漸化式識別子・シグニチャ・経路選択ベクトルを添付することにより、データパケットを生成するデータストリーマと、
上記データストリーマから各プロセッシングエレメントに、上記データパケットを配信するクロスバーとを備え、
各プロセッシングエレメントが、受信した上記データパケット内の経路選択ベクトルの値に基づき、そのデータパケットに関する計算を行うことなく上記データパケットを他のプロセッシングエレメント等に送出するか、又は、自プロセッシングエレメント内でそのデータパケットに対する計算を行うかを決定し、上記自プロセッシングエレメント内で計算する対象の上記データパケットについて、上記自プロセッシングエレメント内の命令格納部にて、命令を識別する情報と、当該データパケットに含まれていたオペランドを保持するようにし、上記命令に対する必要なオペランドの全てが揃ったときに、少なくとも、命令オペコード・ストリーム識別子・漸化式識別子・シグニチャ・全ての必要なオペランドを有する当該命令に関する命令トークンを、上記自プロセッシングエレメント内のトークン逆アセンブリユニット・値パイプライン・シグニチャパイプラインの組み合わせに送出し、上記自プロセッシングエレメント内のトークンアセンブリユニットにて、計算結果や新たなシグニチャを反映した新たなデータトークンを生成し、新たなデータパケットに対応する経路選択ベクトルの値に基づき、上記新たなデータトークンに対応する上記新たなデータパケットを他のプロセッシングエレメント等又は上記メモリ宛てに送出するか、又は、上記自プロセッシングエレメント内で上記新たなデータトークンに対する計算を行うかを決定し、各プロセッシングエレメントから上記メモリ宛てに送出された上記データパケットについて、上記データストリーマが、メモリアドレスを上記データパケットに関連付け、上記データパケットに含まれている上記データを当該メモリアドレスに書き込むように上記メモリ宛てに書き込みコマンドを送出するコンピュータ装置。
【請求項２】
上記メモリとやりとりするメモリコントローラを更に備える請求項１記載のコンピュータ装置。
【請求項３】
コントローラが、読出要求を上記メモリコントローラに出し、上記メモリコントローラが、上記読出要求をメモリ要求に変換し、上記単一代入プログラムを実行するためのプログラム命令を上記コントローラに返すことを特徴とする請求項２記載のコンピュータ装置。
【請求項４】
コントローラは、データパス全体が一旦設定されると、上記データストリーマに、該データストリーマを開始させるイベントを発行することを特徴とする請求項２記載のコンピュータ装置。
【請求項５】
上記クロスバーは、データストリームを上記プロセッサアレイの行又は列にルーティングすることを特徴とする請求項３記載のコンピュータ装置。
【請求項６】
上記プロセッサアレイは、出力データストリームを生成することを特徴とする請求項５記載のコンピュータ装置。
【請求項７】
上記出力データストリームを、上記クロスバーを横切って上記データストリーマに送り、該データストリーマは、メモリアドレスを該データストリームに関連付けて、該データストリームをメモリコントローラに供給し、該メモリコントローラは、該データストリームを上記メモリに書き込むことを特徴とする請求項６記載のコンピュータ装置。
【請求項８】
上記データストリーマは、計算タスクの終了を一旦確認すると、通知イベントを上記コントローラに送ることを特徴とする請求項７記載のコンピュータ装置。
【請求項９】
各プロセッシングエレメントに、連立アフィン漸化式で定義された単一代入プログラムについてのプログラム情報を読み込ませて、設定させ、
メモリからデータストリーマにデータを読み出し、
メモリからデータストリーマに読み出されたデータに、少なくとも、ストリーム識別子・漸化式識別子・シグニチャ・経路選択ベクトルを添付することにより、データパケットを生成し、
データストリーマからクロスバーを介して各プロセッシングエレメントに、上記データパケットを配信し、
データパケットを受信したプロセッシングエレメントは、当該データパケット内の経路選択ベクトルの値に基づき、そのデータパケットに関する計算を行うことなく上記データパケットを他のプロセッシングエレメント等に送出するか、又は、自プロセッシングエレメント内でそのデータパケットに対する計算を行うかを決定し、
上記自プロセッシングエレメント内で計算する対象の上記データパケットについて、上記自プロセッシングエレメント内の命令格納部にて、命令を識別する情報と、当該データパケットに含まれていたオペランドを保持するようにし、
上記自プロセッシングエレメント内の命令格納部にて、ある命令に対する必要なオペランドの全てが揃うときまで待ち合わせ、
上記命令に対する必要なオペランドの全てが揃ったときに、当該命令に関する命令トークンであって、少なくとも、命令オペコード・ストリーム識別子・漸化式識別子・シグニチャ・全ての必要なオペランドを有する当該命令に関する命令トークンを、上記自プロセッシングエレメント内のトークン逆アセンブリユニット・値パイプライン・シグニチャパイプラインの組み合わせに送出し、
上記自プロセッシングエレメント内のトークンアセンブリユニットにて、計算結果や新たなシグニチャを反映した新たなデータトークンを生成し、新たなデータパケットに対応する経路選択ベクトルの値に基づき、新たなデータトークンに対応する新たなデータパケットを他のプロセッシングエレメント等又はメモリ宛てに送出するか、又は、上記自プロセッシングエレメント内で新たなデータトークンに対する計算を行うかを決定し、
各プロセッシングエレメントから上記メモリ宛てに送出された上記データパケットについて、上記データストリーマが、メモリアドレスを上記データパケットに関連付け、上記データパケットに含まれている上記データを当該メモリアドレスに書き込むように上記メモリ宛てに書き込みコマンドを送出する
という一連の処理を行うプログラム実行方法。
【請求項１０】
データパス全体が一旦設定されると、コントローラから上記データストリーマに、該データストリーマを開始させるイベントを発行する請求項９記載のプログラム実行方法。
【請求項１１】
データストリームは、上記クロスバーによって、プロセッサアレイにおいて、プロセッシングエレメントの行又は列にルーティングされることを特徴とする請求項９記載のプログラム実行方法。
【請求項１２】
上記プロセッサアレイにおいて、出力データストリームを生成することを特徴とする請求項１１記載のプログラム実行方法。
【請求項１３】
上記出力データストリームを、上記クロスバーを横切ってデータストリーマに送り、該データストリーマは、メモリアドレスを該データストリームに関連付けて、該データストリームをメモリコントローラに供給し、該メモリコントローラは、該データストリームを上記メモリに書き込むことを特徴とする請求項１２記載のプログラム実行方法。
【請求項１４】
上記データストリーマは、計算タスクの終了を一旦確認すると、通知イベントをコントローラに送ることを特徴とする請求項１３記載のプログラム実行方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータ装置の分野に関し、特に、ファイングレイン並列命令（fine-grained  parallel  instructions）の効率的な実行に関する。
【関連出願】
【０００２】
この出願は、２００８年５月２７日に出願された米国の仮特許出願番号第６１／１３０，１１４号、発明の名称「実行エンジン（EXECUTION ENGINE）」の優先権の利益を主張する。
【背景技術】
【０００３】
代表的な汎用コンピュータは、逐次命令ストリームプロセッサ（sequential instruction stream processor）として構成され、メモリから命令をフェッチし、デコードし、これらの命令を実行する。逐次命令ストリームプロセッサは、命令が表す演算を実際に実行するときよりも多くのエネルギを、命令を管理するときに消費するので、非常に非効率的にエネルギを使用する。例えば、インテル（商標）又はＡＭＤ（商標）からの最新の汎用ｘ８６プロセッサは、重要なアルゴリズム、例えば疎行列ソルバ（sparse matrix solvers）上でのプロセッサの演算処理能力（operational throughput）によって測定されるピーク性能の１０％を達成しているにすぎない。
【０００４】
また、これらの逐次命令ストリームプロセッサは、ファイングレイン並列計算では非常に効率が悪い。上述の疎行列ソルバにおける性能は、通常、何千個ものプロセッサが同時に用いられることを必要とする。幾つかのプロセッサは、他のプロセッサよりも前に終了したとき、残りのプロセッサと同期するためには待機する必要があり、プロセッサのグループ間で実行を同調させるためには、多くの時間と電力が浪費される。
【０００５】
汎用コンピュータの効率を益々悪くするようなアルゴリズムが、科学、工学及びビジネスに対して非常に重要になっている。また、データ及び必要な計算量が指数関数的に増加すると、妥当な時間内で結果を得るためには、プロセッサのグループを用いることが強いられる。重要なアルゴリズム、例えば信号処理、ソルバ、統計及びデータマイニングの多くは、ファイングレイン並列の構造を示す。これらのアルゴリズムを汎用プロセッサのネットワーク上に論理的に割り当てるには、サイズ、コスト及び消費電力の観点から問題が生じている。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明は、超並列ファイングレイン構造計算（highly  parallel  fine-grain  structured  computations）を効率的に実行するコンピュータ装置である。このコンピュータ装置は、このような多種多様な構造計算を効率的に実行できるようにプログラム可能である。コンピュータの電力消費量は、実行する命令の数及び必要なデータオペランドに比例する。これは、コンピュータで実行する場合、電力消費使量が、命令及びデータが移動するのに必要な時間及び距離に比例することを意味している。本発明は、空間的距離に優れた（honors）実行の物理モデルを生成し、この発明は、命令間の競合を簡単な待ち行列方式によって管理するような方法で、計算を編成する（organizes）。
【発明を解決するための手段】
【０００７】
本発明に基づくコンピュータ装置は、演算処理要素のアレイ（fabric）からデータトークンを受け取って、これらのデータトークンを、空間タグ（spatial  tag）に基づいて、命令トークンと比較する演算処理要素を備える。この空間タグは、電力を反映する計算と、アルゴリズム設計者が意図した時間的最適化との間で空間関係を形成する。
【０００８】
幾つかの実施の形態において、演算処理素子アレイは、一連のデータストリーマ（bank of data streamers）からデータトークンが供給され、コンピュータメモリに格納されているデータ構造を、データトークンのストリームに変換する。
【図面の簡単な説明】
【０００９】
本発明は、以下の図面において、同じ構成要素には、同じ番号を付している。これらの図面は、本発明の選択された実施の形態を示すためのものであり、発明の範囲を制限するものではない。
【図１】幾つかの実施の形態に基づいて動作する汎用データフローコンピュータシステムのブロック図である。
【図２】幾つかの実施の形態に基づくデータストリーマのブロック図である。
【図３】幾つかの実施の形態に基づくプロセッサアレイ（processor fabric）のブロック図である。
【図４】幾つかの実施の形態に基づく演算処理要素（processing element）のブロック図である。
【図５】Ａは、データパケットの特定の実施の形態を示す図であり、Ｂは、データトークンの特定の実施の形態を示す図であり、Ｃは、命令トークンの特定の実施の形態を示す図である。
【図６】命令格納部の特定の実施の形態のブロック図である。
【図７】Ａは、行列−ベクトル乗算のための単一代入形式プログラム（single assignment form program）の実施例であり、Ｂは、関連した単一代入グラフ（single assignment graph）を２次元で示す図である。
【図８】実行エンジンを用いる方法を示すフローチャートである。
【発明を実施するための形態】
【００１０】
以下では、発明を完全に理解できるように、多くの特定の詳細事項を説明する。これらの特定の詳細事項がなくとも、発明を実施できることは、当業者に明らかである。本発明の特徴に注意を集めるために、様々な周知の方法、手順、部品及び回路については、余り詳細に説明しない。
【００１１】
実行エンジンは、アフィン変換に依存して、単一代入形式プログラムを実行する。単一代入形式（single assignment form、以下、ＳＡＦともいう。）のプログラムは、計算を、各代入（assignment）が固有の識別子（unique identifier）に表す一連の方程式として表現するアルゴリズムである。単一代入形式プログラムの代表的な表現は、左辺が固有の識別子として解釈される漸化式（recurrence equations）である。多くのアルゴリズムは、単一代入形式の自然な表現（natural expression）を有する。例えば、図７Ａは、行列−ベクトル乗算のための単一代入形式プログラムの具体例を示す。図７Ｂは、関連した単一代入グラフ（single assignment graph、以下ＳＡＧともいう。）を示し、単一代入グラフは、ノードが計算を表し、辺がデータ移動を表すデータ流れ図（data flow graph）である。
【００１２】
あらゆるプログラムは、単一代入形式で表現することができる。単一代入形式アルゴリズムが、スケジュールの実行に対してあらゆる明示的な順序付け（explicit  sequencing）を有しない最大限の並列設計（parallel  formulation）であるので、ファイングレイン構造並列性（fine-grain  structured  parallelism）を有するプログラムは、単一代入形式で最も自然に表現される。これにより、実行環境は、どのようにリソース競合を管理するべきかに重点を置くことができる
【００１３】
単一代入形式のプログラムは、演算毎に固有の代入（unique assignment）を含んでいる。これは、演算毎のノードと、データ移動毎の辺とを含む単一代入グラフ（ＳＡＧ）によって表すことができる。計算イベント（computational event）は、方程式の右辺にオペランドを有し、左辺で代入を計算するある演算として定義される。
【００１４】
信号伝搬の速度は制限されているので、あらゆる２つの並列計算イベント（concurrent  computational  events）は、時間的に又は空間的に分割される。単一代入形式プログラムを、それを実ベクトル空間として広げるＲＮ個の離散的サブグループ（discrete  subgroup）として定義される理論的な格子（abstract  lattice）に埋め込むことによって、アルゴリズム設計者は、依存計算（dependent  computations）間の空間的距離を指定することができる。幾つかの実施の形態において、埋込みは、理論的な正規直交格子（abstract  orthonormal  lattice）によって達成される。正規直交格子は、全ての基底ベクトル（basis  vectors）が単位長を有し、それらの内積がゼロである正規直交基底（orthonormal  basis）によって定義される。単一代入グラフは、依存計算イベントが同じ格子点に存在することができないという規則に従って、正規直交格子に埋め込むことができる。これにより、各計算イベントに、正規直交格子における固有の位置（unique  location）を割り当てて、物理的に分離された格子点によって、依存計算を分離し、これにより、依存オペランド（dependent  operands）を交換する時間的分離を明らかにする。正規直交格子におけるこの固有の位置は、計算イベントのシグニチャ（signature）と呼ばれ、シグニチャは、正規直交格子の格子点を識別するインデックスベクトル（index  vector）として定義される。適切な格子の他の実施の形態としては、水晶群（crystal  groups）、及び空間のカバー（cover  of  space）を生成するある通常セル（regular  cell）によって定義される空間の他の離散サンプリング（discrete  sampling）である。格子群（lattice  groups）と呼ばれるこれらのサンプリングを記述した明確に定義された数学的構造（well  defined  mathematical  structures）がある。正規直交格子は、これらのより一般的な格子群の部分集合である。
【００１５】
ＳＡＧをある格子に埋め込んだ後、全てのプログラム入力と全ての計算イベントは、結果をどのように依存計算イベントに送るか定義する明示的な経路選択ベクトル（explicit  routing  vector）を有する。計算命令がどのようにそれらの入力に依存するかを指定するので、この経路選択ベクトルは、依存ベクトル（dependency  vector）と呼ばれる。空間格子への埋込みにより、アルゴリズム設計者は、条件（constraints）、例えば距離及びリソース競合を組み込むことができる。依存オペランドをやりとりするための電力消費量及び時間の両方は、距離に正比例するので、距離は、電力効率と性能の両方にとって非常に重要である。ここで、距離は、離散的経路選択網（routing  network）のホップに対
して定義され、各ホップは、少なくとも１つのレジスタを介して進む必要があり、したがって、ホップの数に比例して電力を消費する。
【００１６】
ここに説明する実行エンジンは、理論的な空間格子に埋め込まれた上述の埋込単一代入プログラム（embedded single assignment programs）用の効率的な実行エンジンである。
【００１７】
図１は、幾つかの実施の形態に基づいて動作する汎用データフローコンピュータシステムのブロック図である。コンピュータシステム１００は、実行するデータ及びプログラムを格納するメモリ１１０を備える。メモリｌｌ０は、適切なあらゆる種類のメモリで構成することができる。コントローラ１２０がメモリ１１０からプログラムを要求することによって、実行が開始する。コントローラ１２０は、読出要求を、バス１２１を介してメモリコントローラ１３０に出し、メモリコントローラ１３０は、読出要求をメモリ要求に変換し、データをコントローラ１２０に返す。このデータは、単一代入プログラムを実行するためのプログラム命令を含んでいる。コントローラ１２０は、これらのプログラム命令をデコードして、データストリーマ１４０用のプログラミング情報（programing  information）に変換し、これらのプログラミング情報は、制御バス１２２を介してデータストリーマ１４０に送られる。同時に、コントローラ１２０は、プロセッサアレイ１６０用のプログラミング情報を、コマンドバス１２３を介してクロスバー１５０に送る。クロスバー１５０は、コマンドを含むプログラミング情報を、プロセッサアレイ１６０の適切な行及び列に送り、プロセッサアレイ１６０は、これらのコマンドを読み込み、単一代入プログラムを実行するために、それ自体を設定する。データ経路の全体が一旦設定されると、コントローラ１２０は、データストリーマ１４０を開始させるイベントを発行する。メモリコントローラ１３０は、データストリーマ１４０から読出要求及び書込要求を受け取って、それらをメモリ要求に変換する。データストリーマ１４０からの読出要求に応じて、メモリコントローラ１３０は、データをデータストリーマ１４０に送り、データストリーマ１４０は、データをクロスバー１５０に転送する。クロスバー１５０は、データストリームをプロセッサアレイ１６０で適切な行又は列にルーティングする。プロセッサアレイ１６０は、入力データストリームを受け取り、これらのデータストリームに対して命令を実行して、出力データストリームを生成する。これらの出力データストリームは、メモリ１１０に書き込まれ、すなわち、出力データストリームを、クロスバー１５０を横切ってデータストリーマ１４０に送り、データストリーマ１４０は、メモリアドレスを出力データストリームに関連付け、そして、出力データストリームをメモリコントローラ１３０に供給し、メモリコントローラ１３０は、出力データストリームをメモリ１１０に書き込む。データストリーマ１４０が、計算タスクの終了を一旦確認すると、通知イベント（notifier  events）が、制御バス１２２を介してコントローラ１２０に返される。コマンドバス１２３及びイベントバス１２４を用いて、割込と、エラー及びパニックを知らせる他のイベントと、運用情報とがコントローラ１２０に送られ、コントローラ１２０は、これらを用いて、割り込み、又は計算を進めることができる。
【００１８】
次に、図２は、データストリーマ１４０の構成を示すブロック図である。データストリーマ１４０は、データトークンストリーム（data  token  stream）をアセンブル及び／又は逆アセンブルするストリームプログラム（stream  program）を実行する。コントローラ１２０が、単一代入プログラムをデコードし、この単一代入プログラムをデータストリーマ１４０用のストリームプログラムに変換することによって、処理は開始する。コントローラ１２０は、このストリームプログラムを、制御バス１２２を介してストリームプログラム格納部（stream  program  store）２２０に書き込む。ストリームプログラムは、要求アドレス（request  addresses）及び他の属性、例えばサイズ及び種類をどのように計算するべきかを詳述するものである。ストリームプログラムは、プロセッサ２１０によって実行される。プロセッサ２１０は、ストリームプログラムを実行して、メモリコントローラコマンド（memory  controller  commands）を生成し、メモリコントローラコマンドは、コマンドデータ待ち行列（command  data  queue）２５０に書き込まれる。同じストリームプログラムの一部として、プロセッサ２１０は、また、関連したトークン属性再帰識別子（associated  token  attributes  recurrence  identifier）、シグニチャ（signature）及びデータタイプ（data  type）を生成する。これらの属性は、トークンアセンブリユニット２３０によって利用され、すなわち、トークンアセンブリユニット２３０は、これらの属性を、メモリコントローラ１３０から入力された読出データと組み合わせて、データトークンストリーム（data  token  stream）を生成し、データトークンストリームをクロスバー１５０に書き込む。同様に、クロスバー１５０から入力され、メモリ１１０に書き込む必要があるデータストリームに対して、トークン逆アセンブリユニット２４０は、入力データトークンからトークン属性再帰識別子、シグニチャ及びデータタイプを分離して、プロセッサ２１０によって更に処理するために、ストリームプログラム格納部２２０に書き込む。トークン逆アセンブリユニット２４０は、データトークンのデータペイロードを書込データ待ち行列（write  data  queue）２７０に書き込む。同時に、プロセッサ２１０は、書込ストリームプログラム（write  stream  program）を実行して、適切なメモリ書込コマンドを生成し、メモリ書込コマンドを、書込データと共に、メモリコントローラ１３０に供給する。
【００１９】
次に、図３は、Ｎ個のデータストリーマ１４０を、プロセッサアレイ（processor array）１６０内のＭ個の演算処理要素（processing elements、以下、ＰＥともいう。）３１０に接続する相互結合網（interconnection network）を提供するクロスバー１５０を示す図である。データストリーマ１４０は、メモリ１１０内のフラットデータ構造（flat data structures）を、時間内に多次元データストリームに変換する。クロスバー１５０は、任意のデータストリーマ１４０の物理位置を、プロセッサアレイ１６０内の演算処理要素３１０の１つ、複数又は全ての物理位置に結び付ける。プロセッサアレイ１６０は、単一代入プログラムの制御の下に、これらの多次元データストリームを消費して、プロセッサアレイ１６０内に互いに結び付け、すなわち、コントローラ１２０は、メモリ１１０から多次元データストリームを読み出し、クロスバー１５０を適切な演算処理要素３１０に接続するために用いられるコマンドバス１２３に書き込まれた命令トークンストリーム（instruction token stream）によって、多次元データストリームをプロセッサアレイ１６０の演算処理要素３１０にインストールする。多次元データストリームは、演算処理要素３１０及び演算処理要素経路選択網（processing element routing network）３２０を介して流れる。ＰＥ３１０は、命令及びデータトークンを処理する。ＰＥ３１０には、命令及びデータトークンをルーティング及び格納することができる。単一代入プログラムは、データトークンをどのようにある多次元空間に結び付けるかを記述するものである。ＰＥ３１０は、計算イベントのシグニチャ（signature）と呼ばれる空間タグ（spatial tag）を認識して、コントローラ１２０によってそれらのプログラム格納部（program store）にインストールされた単一代入プログラムの制御の下に動作をする。動作は、実行中に、入力データトークンのシグニチャを、ＰＥ３１０に溜まった命令トークンのシグニチャと比較して、一致している場合、内部の演算処理要素経路選択網３２０からデータトークンを抽出することである。単一代入プログラムによって表される全体的な計算は、演算処理要素３１０内に組み合わされて、新たな多次元データストリームを生成する可能性があり、中間結果（intermediate results）を表す多次元データストリームとして展開されて、演算処理要素経路選択網３２０を介して、プロセッサアレイ１６０内の計算イベントの宛先に伝達される。最終結果のデータストリームは、ＰＥ３１０に格納された単一代入プログラムの制御の下に、演算処理要素経路選択網３２０及びＰＥ３１０を介して、クロスバー１５０に流れ出す。クロスバー１５０は、これらのデータストリームを適切なデータストリーマ１４０に供給し、データストリーマ１４０は、これらのデータストリームを再びフラットデータ構造に変換して、メモリ１１０に書き込むことができる。単一代入プログラムの実行中に、エラー状態が起こる可能性があり、すなわち、コントローラ１２０がより良く計算を管理できるように、処理イベント（processing events）を監視することが重要である。プログラムエラーの具体例としては、アンダフロー又はオーバフローのような浮動小数点例外、ゼロによる除算のような命令例外、リソース枯渇又はタイムアウトのよ��なパニックイベントがある。演算処理要素経路選択網３２０は、そのような条件によって負の影響を受け、クリティカルイベント（critical events）の配信（delivery）及び処理に対するより良い保証を提供する可能性があるので、双方向のイベントバス１２４によってコントローラ１２０に接続された、そのようなイベント用の別の通信網（communication network）３３０が設けられている。双方向性のイベントバス１２４は、プロセッサアレイ１６０内に展開された計算を集め（collect）、集約し（aggregate）、進める（steer）ために、プロセッサアレイ１６０及びコントローラ１２０によって用いられる。
【００２０】
図４に、演算処理要素３１０の構造を示す。コントローラ１２０は、プロセッサアレイ１６０で計算を開始する前に、単一代入プログラムに関する制御情報を、ＰＥ３１０のプログラム格納部４４０に書き込む。プログラム格納部４４０に書き込まれる制御情報には、漸化式（recurrence  equations）を明確にするための識別子、漸化式が有効である計算の範囲、シグニチャ更新プログラム（signature  update  program）及び経路選択ベクトル（routing  vector）が含まれる。計算の範囲は、仕様（specification）、通常は連立不等式（system  of  inequalities）によって定義される拘束集合（constraint  set）である。このような拘束集合の具体例は、｛（ｉ，ｊ）｜１≦ｉ、ｊ≦Ｎ｝である。これは、図７に示す漸化式の計算の範囲である。この拘束集合は、以下の４つの連立不等式である。
１．ｉ≧１
２．ｊ≧１
３．ｉ≦Ｎ
４．ｊ≦Ｎ
この連立不等式は、以下の行列で記述することができる。
【００２１】
【数１】
0005684704.tif 000002
【００２２】
この制限行列及び右辺のベクトルは、幾つかの実施の形態用の制限集合を指定する標準形0（normalized  form）として用いることができる。このプログラミング情報（program  information）は、コントローラ１２０によってプロセッサアレイ１６０に導入される制御パケットによって、ＰＥ３１０に配信される。各ＰＥ３１０のポートアービタ（port  arbiter）４１０は、演算処理要素経路選択網３２０からパケットを受け取る。ポートアービタ４１０は、ＰＥ３１０のネットワークポート（network  ports）から１つ以上のパケットを選択して、これらのパケットをパケットデコーダ４２０に転送する。パケットデコーダ４２０は、パケットを調べ、プログラミング情報、すなわち他の種類の制御情報を含んでいるかを判定する。パケットが制御パケットの場合、パケットデコーダ４２０は、制御パケットを、制御情報及びプログラムを抽出するコントローラ４３０と、データ経路の異なる構成要素、特にプログラム格納部４４０及び命令格納部（instruction  store）４５０に送る。制御及び状態情報（control  and  status  information）は、制御バス４３１を介して書き込まれる。プログラム格納部４４０は、漸化式毎に、すなわち単一代入プログラムの一部毎に、識別子、計算の範囲の仕様、シグニチャ更新仕様及び経路選択ベクトル
を受け取る。この情報は、ＰＥ３１０が実行するのを助けるあるアフィン漸化式（affine  recurrence  equation）を定義する。通常、漸化式は、複数のＰＥ３１０上で実行されるので、漸化式がプロセッサアレイ１６０上で実行されるというのがより自然な言い方である。コントローラ１２０がプロセッサアレイ１６０をプログラムした後、実行を開始することができる。実行は、データストリーマ１４０が、最初のデータパケット（first  data  packets）を（クロスバー１５０を介して）プロセッサアレイ１６０に導入することによって、開始される。データパケットがＰＥ３１０のネットワークポートに到着したとき、ポートアービタ４１０は、１つ以上のパケットを選択し、それらをパケットデコーダ４２０に転送する。パケットデコーダ４２０は、パケットを調べ、それが、その特定のＰＥ３１０上で実行する計算に属するデータパケットであるかを判定する。該当する場合、パケットデコーダ４２０は、パケットの経路選択ベクトルを抽出する。経路選択がゼロでない場合、パケットデコーダ４２０は、パケットをパケットルータ４２５に転送する。パケットルータ４２５は、経路の次のレッグを計算して、パケットの経路選択ベクトルを更新し、更新パケット（updated  packet）を、ポートアービタ４１０に供給して、演算処理要素経路選択網３２０に再び導入する。経路選択ベクトルがゼロの場合、パケットデコーダ４２０は、データトークンを命令格納部４５０に送る。命令格納部４５０は、データトークンから命令タグ（instruction  tag）を抽出して、データペイロードを、命令格納部４５０に格納されている関連した命令の適切なオペランドスロット（operand  slot）に割り当て保留し、あるいは、この特定の計算イベント用に受け取った最初のデータトークンである場合、命令格納部４５０は、新たな命令を割り当てる。保留命令（pending  instruction）が全てのそのオペランドを受け取ったとき、命令格納部４５０は、保留命令リスト（pending  instruction  list）から命令の割り当てを解除し、命令トークンを、トークン逆アセンブリユニット（token  disassembly  unit）４６０に送ることによって、実行のために待ち行列に入れる。命令トークンは、命令オペコード（instruction  opcode）、漸化式の変数名（variable  identifier）、この命令が表す計算イベントのシグニチャ及び構成オペランド（constituent  operands）を含んでいる。トークン逆アセンブリユニット４６０は、命令トークンからシグニチャを抽出して、シグニチャを、変数名によってシグニチャパイプライン（signature  pipeline）４７０に送る。シグニチャパイプライン４７０は、変数名をプログラム格納部４４０で調べ、シグニチャに適用するシグニチャ更新プログラムを検索する。シグニチャ更新プログラムは、入力シグニチャに対する簡単なアフィン変換であり、汎用記述セクション（general  description  section）に示されるように、ある理論的な格子の空間インデックスベクトル（spatial  index  vector）として解釈することができる。シグニチャパイプライン４７０は、入力シグニチャにこのアフィン変換を適用して、新たなシグニチャを生成する。この新たなシグニチャは、トークンアセンブリユニット４９０に転送される。シグニチャパイプライン４７０の実行と同時に、値パイプライン（value  pipeline）４８０は、命令を実行して、新たな左辺値を生成する。トークン逆アセンブリユニット４６０は、命令トークンから命令オペコード及びオペランドを抽出して、値パイプライン４８０に転送する。値パイプライン４８０は、命令を実行して、結果をトークンアセンブリユニット４９０に転送する。トークンアセンブリユニット４９０は、シグニチャパイプライン４７０の出力と値パイプライン４８０の出力から、新たなデータトークンを構成する。トークンアセンブリユニット４９０は、この新たなデータトークンのシグニチャを、この漸化式用の計算の範囲と照合し（checks）、範囲中にある場合、データトークンをパケットルータ４２５に送る。経路選択ベクトルがゼロベクトル（null  vector）でない場合、パケットルータ４２５は、データトークンをパケットに埋め込み、このパケットをポートアービタ４１０に転送し、ポートアービタ４１０は、パケットを、ある調停方針（arbitration  policy）の制御の下に、演算処理要素経路選択網３２０に再び導入する。実施の形態は、先着順サービス（first-come-first-served）、又はサービス品質保証（quality-of-service  guarantees）を実現する優先度ベースの方式（priority  based  schemes）である。データトークンの経路選択ベクトルがゼロの場合、それは、データトークンが現ＰＥ３１０中を再循環することを意味し、パケットルータ４２５は、データトークンを命令格納部４５０に送り、命令格納部４５０は、データトークンを命令と比較する（matched  up  with）。
【００２３】
図５Ａは、演算処理要素経路選択網３２０を介して流れるデータパケット５１０の構造の考えられる実施の形態を示す図である。データパケット５１０が演算処理要素経路選択網３２０を介して流れることにより、データ値がＰＥ３１０に配信される。この実施の形態では、データパケット５１０は、パケット識別子５１１と、待ち行列識別子５１９と、ストリーム識別子５１２と、漸化式識別子（recurrence equation identifier）５１３と、データタイプ５１４と、シグニチャ５１５と、データ値５１６と、経路選択ベクトル５１７とを含んでいる。パケット識別子５１１は、あらゆる計算誤差（any computational errors）を識別するのを助けるデバッグ機能（debug feature）である。プロセッサアレイ１６０上で単一代入プログラムを実行している間、ある時点で、何千というパケットがコンピュータシステム１００内に存在することができる。このパケットの集合の中で、特定のパケットを識別できるようにするためには、固有のパケット識別子が搬送されることが必要である。この情報は、コードにおける関数問題（functional problems）をデバッグするのを助けるそのコンパイラによって、命令ストリームプロセッサ（instruction stream processor）の命令ストリーム内に導入されるデバッグ情報及び命令に類似している。リリースコード（release code）の実行中には、この固有のパケット識別子は、データパケットの一部でない。
【００２４】
さらに、図５Ａに示すように、この例示的なデータパケット５１０は、４次元単一代入プログラム（4-dimensional single assignment programs）を実行する二次元プロセッサアレイで用いることができる。二次元プロセッサアレイは、経路選択ベクトル５１７が二次元であり、宛先ＰＥ３１０へのマンハッタン経路（Manhattan route）を表しているかを判定する。ＰＥ３１０の動作で説明したように、非ゼロ経路選択ベクトル（non-null routing vector）は、パケットデコーダ４２０によって検出され、パケットルータ４２５に転送され、パケットルータ４２５によって、次のＰＥ３１０にルーティングされる。４次元単一代入プログラムは、４次元空間の４つの指標を表す４ベクトル（4-vector）であるシグニチャ５１５によって、それ自体を表している。漸化式識別子５１３と組み合わせられるシグニチャ５１５は、本発明に基づくプログラムの実行において非常に重要である。漸化式識別子５１３及びシグニチャ５１５は、単一代入プログラム内で１つの計算イベントを独自に識別する。その計算イベントの結果は、データ値５１６のスロットに格納され、その種類は、データタイプ５１４によって識別される。結果を、それが参加する次の計算イベントに配信するために、演算処理要素経路選択網３２０は、経路選択ベクトル５１７によってデータパケットをルーティングし、待ち行列識別子５１９を用いて、ＰＥ３１０のパケットルータ４２５を助ける。各漸化式には、コンパイラによって固有の待ち行列識別子が割り当てられており、この固有の待ち行列識別子により、パケットルータ４２５は、入力データパケットを、最小限のデコードハードウェアによって素早く待ち行列に入れることができる。完全に有効な二次元経路選択網（fully active 2D routing mesh）においては、４つの並列の入力パケットがあるという事実を考えると、ＰＥ３１０のフロントエンドに対する圧力は重要である。データパケットで待ち行列情報の一部を搬送することによって、ＰＥ３１０のパケットルータ４２５のハードウェアの複雑さは、軽減される。最終的に、ストリーム識別子５１２を用いて、データパケットは、フラットメモリデータ構造（flat memory data structure）に関連付けられる。データストリーマ１４０がフラットメモリデータ構造から多次元データストリームを生成するとき、シグニチャ５１５により、データ構造内の位置が識別されるが、ストリーム識別子５１２は、データ構造を識別するために必要である。このストリーム識別子５１２は、命令ストリームプロセッサで用いられる基準アドレスに類似しており、命令ストリームプロセッサでは、メモリデータ構造上で実行されるプログラムは、基準アドレス（base addresses）に対して相対的に指定される。データストリーマ１４０は、ストリーム識別子５１２により、データパケットがどこから入力されたか、そして、データパケットをメモリ１１０のどこに書き込むかを適切に識別することができる。
【００２５】
次に、図５Ｂは、図５Ａに示すデータパケット５１０に用いられるデータトークン５２０の構造の考えられる一実施の形態を示す図である。データトークン５２０は、このデータ要素がどの命令に属しているかを、命令格納部４５０が識別するために必要な最低限の情報を搬送する。図５Ａと図５Ｂを比較することによって分かるように、データトークン５２０は、データパケット５１０内に完全に含まれる。データトークン５２０の個々のフィールドは、上述したデータパケット５１０のフィールドと同じである。データパケット５１０が、実際には、データトークン５２０をプロセッサアレイ１６０の全体を通じて配信するルーチング機構（routing mechanisms）であるので、これは、異なる実施の形態間の共通構造である。データパケット５１０とデータトークン５２０間で同じ構造を用いることによって、データトークン５２０は、素早くアセンブル及び逆アセンブリすることができ、それによって、ハードウェアの複雑さを軽減し、処理能力及び待ち時間だけでなく、電力に関する性能も向上させることができる。データトークン５２０の構造により、命令格納部４５０の詳細な動作を決定し、それは、様々な方法で、連立アフィン漸化式（systems of affine recurrence equations）から生じる任意の単一代入プログラムの実行を可能にするコア制御機構（core control mechanism）とみなすことができる。命令格納部４５０は、データトークン５２０を構成し（organizes）、実行を保留している命令トークンをアセンブル及び構成する。図５Ｂに示すデータトークン５２０の構造に属する命令格納部４５０の実施の形態を図６に示す。
【００２６】
図６に示すように、データトークンは、データトークン逆アセンブリユニット（data  token  disassembly  unit）６１０に到着する。データトークン逆アセンブリユニット６１０は、データトークンの異なるフィールドを抽出する。このデータトークンが配信されなければならない命令トークンを識別するために、データトークン逆アセンブリユニット６１０は、データトークンから漸化式識別子５１３及びシグニチャ５１５を抽出して、ルックアップユニット６２０に送る。ルックアップユニット６２０は、図４に示すプログラム格納部４４０に問い合わせて、命令情報（instruction  information）を検索する。ルックアップユニット６２０は、単に漸化式識別子５１３とシグニチャ５１５を組み合わせることによって、命令タグ６２５を構成する。命令タグ６２５は、このデータトークンが参加する計算イベント用の固有の識別子である。また、ルックアップユニット６２０は、プログラム格納部４４０から、データトークンが使用する命令トークン内のスロット位置に関する情報を受け取る。この情報は、スロット割当ユニット６３０を制御するものであり、スロット割当ユニット６３０は、データトークン逆アセンブリユニット６１０から、データタイプ５１４及び生のデータ値（raw  data  value）５１６を受け取って、保留命令の適切なスロットにルーティングする。ルックアップユニット６２０が実行する最後の機能は、命令ヘッダ６５１を構成することであり、命令ヘッダ６５１は、保留命令を、保留命令トークン格納部（pending  instruction  token  store）６５０内でどのように管理するべきかという情報を含んでいる。これで、図５Ｃは、保留命令トークン格納部６５０内で管理される命令トークン５３０の実施の形態を示す図である。命令ヘッダ６５１は、命令オペコード５３１と、スロット範囲フィールド（slot  cover）５３２と、スロット占有フィールド（slot  occupancy  field）５３３とを含んでいる。命令オペコード５３１は、値パイプライン４８０の機能単位（functional  units）を制御するフィールドである。命令オペコード５３１は、オペランドに適用する必要がある種類の演算をエンコードする。具体的な演算の種類としては、例えば加算、乗算、除算のような代表的な機能単位演算子（functional  unit  operators）、例えばマスクビットテスト、シフトのようなあらゆる論理演算（logic  operations）がある。スロット範囲フィールド（slot  cover  field）５３２は、命令がどれくらいのオペランドを必要とするかについて指定するものである。例えば、簡単な命令に対しては、１つの入力オペランドが用いられるが、より複雑な命令に対しては、代表的な３つのオペランド構造が用いられる。スロット範囲フィールド５３２及びスロット占有フィールド５３３は、保留命令トークン格納部６５０内において一緒に働き、命令が全てのそのオペランドを受け取ったかを判定する。命令タグ６２５を組み立てて、タグＣＡＭ６４０に送るルックアップユニット６２０によって用いられるプロセスは、開始する。タグＣＡＭ６４０は、これらの命令タグ６２５によってアドレッシングされる連想メモリ（content  addressable  memory、以下、ＣＡＭという。）である。タグＣＡＭ６４０がミス（miss）を示すとき、このミスは、命令がタグＣＡＭ６４０にまだ割り���てられていないことを意味し、ミスのときは、タグＣＡＭ６４０は、保留命令（pending  instruction）を割り当てる。タグＣＡＭ６４０がヒット（hit）を示す場合、このヒットは、データトークンを配信できる保留命令があることを意味する。タグＣＡＭ６４０は、この保留命令に関連した記憶領域（storage）へのポインタ（pointer）を、保留命令トークン格納部６５０に供給する。ルックアップユニット６２０は、上述したように、命令ヘッダ６５１を供給し、スロット割当ユニット６３０は、データトークン値（data  token  value）を保留命令の適切なスロットに書き込む。また、スロット割当ユニット６３０は、スロット占有フィールド５３３を更新して、それを、必要とされるスロット範囲フィールド５３２と比較する。２つのフィールドが等しい場合、全てのオペランドが受け取っており、命令は、実行する準備ができている。命令タグ６４５と、フィールド６５１、５３４、５３５、５３６を含み、図５Ｃに示す命令トークン５３０を構成する保留命令とは、命令トークンアセンブリユニット６６０に送られる。命令トークンアセンブリユニット６６０は、完成した命令トークンを、図４に示すように、トークン逆アセンブリユニット４６０によって開始する実行ユニット（execute  units）に転送する。
【００２７】
図８は、実行エンジンを用いる方法を示すフローチャートである。ステップ８００において、コントローラは、プログラムをメモリから要求し、このプログラムを実行することにより、読出要求をメモリコントローラに出し、メモリコントローラは、読出要求をメモリ要求に変換して、データをコントローラに返す。このデータには、単一代入プログラムを実行するためのプログラム命令が含まれている。ステップ８０２において、プログラム命令はプログラミング情報にデコードされて、データストリーマに転送及び配信される。ステップ８０４において、プログラミング情報は、クロスバーに送られる。ステップ８０６において、プログラミング情報は、クロスバーからプロセッサアレイに配信される。ステップ８０８において、プログラミング情報は読み込まれて、プロセッサアレイは、単一代入プログラムを実行するように構成される（configured）。ステップ８１０において、データ経路全体が一旦設定される（set  up）と、データストリームを送ることを開始させるイベントが、コントローラからストリーマに発行される。ステップ８１２において、ストリーマから読出要求及び書込要求を受け取り、読出要求及び書込要求は、メモリコントローラによってメモリ要求に変換される。ステップ８１４において、データストリームがクロスバーによって、データストリームに対して命令を実行するプロセッサアレイの行又は列にルーティングされ、出力データストリームが生成され、この出力データストリームは、クロスバーを横切ってストリーマに供給されることによって、メモリに書き込まれ、すなわち、ストリーマは、メモリアドレスをデータストリームに関連付け、そして、データストリームをメモリコントローラに供給し、メモリコントローラは、データストリームをメモリに書き込む。ステップ８１６において、ストリーマが計算タスクの終了を一旦確認すると、通知イベントがコントローラに送られる。
【００２８】
例えば、実行エンジンがコンピュータで実現されている場合、実行エンジンを利用するために、ユーザは、実行エンジンに、プログラムを入力及び／又は開始する。そして、実行エンジンは、上述したように、プログラムを実行する。プログラムに従い、プログラムは、所望の結果を出力する。例えば、ユーザがコンピュータ的に複雑な数学方程式を実行したい場合、実行エンジンが実行した後の出力は、この方程式の結果である。
【００２９】
動作において、ここに説明する形式の単一代入プログラムの実行を編成する（organizing）ことにより、実行エンジンは、命令シーケンスプロセッサ（instruction  sequence  processor）を用いたときに遭遇する多くの問題を、解決している。実行を案内する命令ポインタ（instruction  pointer）は存在しない。実行エンジンは、完全にデータ駆動型である。データ要素が利用できるようになったとき、それらのデータ要素は、依存計算（dependent  computations）を起動させる。したがって、実行エンジンの機能は、データフローマシン（data  flow  machine）に適している。しかしながら、データフローマシンにお
いて、ルックアップは、フラットメモリアドレスに基づいて行われるので、利用する空間構成が存在しない。従来のデータフローマシンにおける第２の問題は、大規模なプログラム（large  scale  program）を実行できるようにするためには、保留命令を維持する連想メモリ（Content  addressable  memories、以下、ＣＡＭという。）を、非常に大きくする必要があるということである。ＣＡＭを大きくすると、ＣＡＭは、電力効率が悪くなり、遅くなる。データフローマシンが、フォンノイマン型アーキテクチャ（von  Neumann  architecture）を用いた命令シーケンスプロセッサに匹敵した性能を出せないので、ＣＡＭは、データフローマシンにおいて伝統的なボトルネックであった。実行エンジンは、フォンノイマン型アーキテクチャが誇る（honors）計算の仕様に追加できる空間条件（spatial  constraints）を有し、したがって、電力条件（energy  constraints）は、プログラムによって決まる可能性がある。
【００３０】
また、空間条件により、ＣＡＭを全ての演算処理要素に亘って分散させることができ、したがって、本発明のアーキテクチャは、並列化を更に増大（scales）させる。具体例として、小さな実行エンジンでは、４０９６個の演算処理要素をシングルチップ上に集積化することができる。演算処理要素の各命令格納部（instruction store）は、６４個の保留命令を含むことができ、全体として、２６２１４４個の命令を並列化する。４コアチップの多重プロセッサにおける典型的な並列化尺度（concurrency measures）は、１００のオーダであり、２５６個のプロセッサからなる超並列グラフィック処理装置（highly parallel 256 processor graphics processing units）でさえ、その並列化尺度は、１００００のオーダに制限されている。本発明の実行エンジンの膨大な数の並列化を管理する能力は、前例がない。
【００３１】
以上、発明の構成及び動作の原理を容易に理解できるように、本発明を、詳細事項を含む特定の実施の形態について説明した。特許請求の範囲は、このような特定の実施の形態及びその詳細事項に限定されるものではない。説明した実施の形態請求は、発明の精神及び範囲から逸脱することなく、様々に変更できることは、当業者には明らかである。
【図１】
0005684704.tif 000003
【図２】
0005684704.tif 000004
【図３】
0005684704.tif 000005
【図４】
0005684704.tif 000006
【図５】
0005684704.tif 000007
【図６】
0005684704.tif 000008
【図７】
0005684704.tif 000009
【図７Ｂ】
0005684704.tif 000010
【図８】
0005684704.tif 000011