JP6721911B2 - アフィン従属による単一割当プログラムを実行するための実行エンジン - Google Patents

アフィン従属による単一割当プログラムを実行するための実行エンジン Download PDF

Info

Publication number
JP6721911B2
JP6721911B2 JP2016570762A JP2016570762A JP6721911B2 JP 6721911 B2 JP6721911 B2 JP 6721911B2 JP 2016570762 A JP2016570762 A JP 2016570762A JP 2016570762 A JP2016570762 A JP 2016570762A JP 6721911 B2 JP6721911 B2 JP 6721911B2
Authority
JP
Japan
Prior art keywords
data
memory
program
controller
streamer
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2016570762A
Other languages
English (en)
Other versions
JP2017506406A (ja
Inventor
セオドラス レオナルダス オムジット,アーウィナス
セオドラス レオナルダス オムジット,アーウィナス
Original Assignee
スティルウォーター スーパーコンピューティング,インク.
スティルウォーター スーパーコンピューティング,インク.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US14/185,841 external-priority patent/US9501448B2/en
Application filed by スティルウォーター スーパーコンピューティング,インク., スティルウォーター スーパーコンピューティング,インク. filed Critical スティルウォーター スーパーコンピューティング,インク.
Publication of JP2017506406A publication Critical patent/JP2017506406A/ja
Application granted granted Critical
Publication of JP6721911B2 publication Critical patent/JP6721911B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4494Execution paradigms, e.g. implementations of programming paradigms data driven

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Advance Control (AREA)
  • Multi Processors (AREA)

Description

関連出願
本出願は、2008年5月27日に出願された米国特許仮出願番号第61/130,114号、発明の名称「EXECUTION ENGINE」の優先権を主張して2009年5月18日に出願された同時に係属中の米国特許出願番号第12/467,485号、発明の名称「EXECUTION ENGINE FOR EXECUTING SINGLE ASSIGNMENT PROGRAMS WITH AFFINE DEPENDENCIES」の一部継続出願であり、これらの文献の全体は、全ての目的のために、参照によって本願に援用される。
発明の分野
本発明は、コンピュータシステムの分野に関し、特に、微細並列命令(fine-grained parallel instruction)の効率的な実行に関する。
典型的な汎用コンピュータは、メモリから命令をフェッチし、これらの命令をデコード及び実行する順次命令ストリームプロセッサ(sequential instruction stream processor)として構成されている。順次命令ストリームプロセッサのエネルギ使用は非常に非効率的であり、命令が表す演算の実際の実行に比べて、より多くのエネルギが命令管理に消費される。例えば、インテル又はAMDの最新の汎用x86プロセッサは、プロセッサの動作スループットによる測定では、例えば、疎行列ソルバ(sparse matrix solver)等の重要なアルゴリズムについて、ピークパフォーマンスの10%しか達成していない。
更に、これらの順次命令ストリームプロセッサは、微細並列処理について非常に非効率的である。上述した疎行列ソルバでは、パフォーマンス要求として、通常、数千ものプロセッサを並列して使用することが要求される。プロセッサのグループ間で実行を調整するためには、幾つかのプロセッサが他のプロセッサより前に実行を完了しても、このプロセッサは、他の残りのプロセッサと同期されるまで待機する必要があり、多くの時間及びエネルギが無駄に消費される。
汎用コンピュータの効率を低下させるこのアルゴリズムは、科学、エンジニアリング及びビジネスにおいて、不可欠で重要なものである。更に、データ及び演算要求の指数関数的な増加により、合理的な時間で結果に到達するためにプロセッサのグループが使用されるようになっている。多くの重要なアルゴリズム、例えば、信号処理、ソルバ、統計及びデータマイニングは、微細並列構造(fine-grained parallel structure)を有している。これらのアルゴリズムを汎用プロセッサのネットワーク上にマッピングすることは、サイズ、コスト及び電力消費に関する課題を有している。
本発明は、高度並列微細構造演算を効率的に実行する装置を提供する。この装置はこのような様々な構造化演算を効果的に実行するようにプログラム可能である。コンピュータのエネルギ消費は、実行される命令及び必要なデータ被演算子の数に比例する。コンピュータの電子的インプリメンテーションにおいては、これは、エネルギ消費が、命令及びデータの伝送に必要な時間及び距離と比例することを意味する。本発明は、空間的距離を守る実行の物理モデルを生成し、及び本発明は、命令間の競合が単純なキューイングシステムによって管理されるように演算を組織化する。
本発明に基づく装置は、処理要素のファブリックからデータトークンを受信し、空間タグに基づいて、これらを命令トークンに照合する処理要素を含む。このタグは、エネルギを反映する演算と、アルゴリズムの設計者が意図する時間的最適化との間の空間的関係を確立する。
幾つかの実施形態においては、処理要素ファブリックには、コンピュータメモリに保存されているデータ構造をデータトークンのストリームに変換するデータストリーマのバンクから、データトークンが供給される。
本発明は、以下の図面を参照して説明され、これらの図面において、同様の要素には、同様の符合を付している。これらの図面は、本発明の選択された実施形態を例示するためのものであり、本発明の範囲を制限することを目的とするものではない。
幾つかの実施形態に基づいて動作するデータフローコンピュータシステムの全般的なブロック図である。 幾つかの実施形態に基づくデータストリーマのブロック図である。 幾つかの実施形態に基づくプロセッサファブリックのブロック図である。 幾つかの実施形態に基づく処理要素のブロック図である。 データパケットの1つの特定の実施形態を示す図である。 データトークンの1つの特定の実施形態を示す図である。 命令トークンの1つの特定の実施形態を示す図である。 命令ストアの1つの特定の実施形態のブロック図である。 行列−ベクトル乗算のための単一割当形式プログラムの例である。 単一割当グラフを2次元で表す図である。 実行エンジンを利用する方法のフローチャートである。
以下の説明では、本発明の完全な理解のために、多数の特定の詳細を記述する。本開示によって利益を得る当業者にとって、本発明がこれらの特定の詳細なしで実施できることは明らかである。本発明の特徴に焦点を当てるために、様々な周知の方法、手順、構成要素及び回路は、詳細には記述していない。
実行エンジンは、アフィン従属による単一割当プログラムを実行する。単一割当形式(single assignment form:SAF)のプログラムは、一組の式として演算を表すアルゴリズムであり、ここでは、各割当が一意的識別子を参照する。単一割当プログラムの例示的表現は、左辺が一意的識別子として解釈される再帰式である。多くのアルゴリズムが、単一割当形式の自然な表現を有する。例えば、図7Aは、行列−ベクトル乗算のための単一割当プログラムの例を表している。図7Bは、ノードが演算を表し、エッジがデータ移動を表すデータフローグラフである関連する単一割当グラフを示している。
単一割当プログラム及び用語「従属グラフ(dependence graph)」、「減少従属グラフ(reduced dependence graph)」が交換可能に使用できることは、当業者にとって明らかである。更に、コンパイラ表現(compiler literature)では、制御フローグラフの定義は、確立されている。制御フローグラフは、その実行の間にプログラムを横断する全ての経路を表す。すなわち、プログラムが単一割当プログラムの集合を含む場合、これらの入力及び出力は、直接的又は間接的に通信される。コンパイラは、このようなプログラムを解析して、この知識を制御フローグラフ内に表現する。ここでも、プログラムは、制御フローグラフによって表現でき、これらの用語は、同じ実体を表していることは、当業者にとって明らかである。
エンジンは、潜在的にランダムアクセスメモリを介して通信を行う単一割当プログラムの集合を実行するので、用語「単一割当プログラム」及び「減少従属グラフ」の交換可能な性質によって、並びにプログラムが制御フローグラフによって表現可能であるという演繹的知識によって、論理的に、「ドメインフロープログラム」は、「一組の連結アフィン再帰式の減少従属グラフ及びランダムアクセスメモリから開始され、ランダムアクセスメモリで終了する従属グラフに接続される制御グラフ」と定義することができる。
ここでは、「プログラム」は、従属グラフによる演算及び演算のドメインを表す「ドメインフロープログラム」として記述する。マシンの動作から、このマシンは、内蔵プログラムモデルではなく、データフローに基づいて実行モデルを実行することは明らかである。これは、抽象的な多次元格子内の点と解釈される空間タグを含む「プログラム」表現である点が従来のデータフローマシンとは異なる。従属グラフ及び演算のドメインに関する「微細構造の」演算の表現によって、プログラムが「ドメインフロー」プログラムになる。
更に、ここには、再帰式及びこれと等価である単一割当プログラムは、これらの「演算のドメイン」上でのみ有効であることを記述する。ファブリックは、演算の間にアクティブなこれらのドメインの集合を有し、これらのドメインの入力は、ランダムアクセスメモリから、ファブリックを介して、ランダムアクセスメモリに「流れる」ので、これは、ドメインのフロー、すなわち、ドメインフローを表す。したがって、このドメインフローを表すプログラムは、ドメインフロープログラムとして特定され、これは、一組の連結アフィン再帰式を含み、これは、ランダムアクセスメモリから開始され、ランダムアクセスメモリで終了する入力ドメインを有する減少従属グラフによって表すことができる。このようなフローの記述は、コンパイラにおける重要な要素であり、コンパイラ表現では、これらの記述を指す用語「制御フローグラフ」を使用する。論理的には、これらの記述は、一組の連結アフィン再帰式としてドメインフロープログラムの概念を導入し、これは、意味的に従属グラフ又は減少従属グラフに等しく、制御フローグラフによって表現され、これは、これらの単一割当プログラムの組み合わせ及びランダムアクセスメモリにおいてこれらのドメインフローがどのように開始及び終了されるかを記述する。
プログラムがサブプログラムの集合を含むことができることと同様に、単一割当プログラムは、1つ以上の単一割当サブプログラムを含むことができる。ドメインフロープログラムにこの細分化を再帰的に適用することによって、これは、それぞれが演算のドメインに関して定義されるアフィン再帰式の幾つかの組に等しい制御フローグラフ内のノードで終了する。ここに説明するように、異なる再帰式に属するデータトークンは、これらの識別子、これらの演算のドメイン、シグネチャ更新関数、及びルーティングベクトルによって組織化される。このように、ドメインフロープログラムによって簡潔に記述できるアフィン再帰式の通信に関連するデータトークンの組織化は、これらの識別子及びこれらの演算のドメイン内のインデックスによって明確化された同じ単一割当式に属するデータトークンの概念を含むように記述される。また、ここには、識別子によって一意化され、演算のドメイン上で定義される同じ再帰式に属する一連のデータトークンである出力ストリームを生成する1つ以上の処理要素の処理も記述する。
図7Aは、w再帰を定義する再帰式がv再帰を定義する再帰式に従属又は結合するので、アフィン再帰式の連結セットに等しい再帰式のシステムの例を示している。更に、再帰式のこれらのシステムを表す従属グラフの表現は、再帰式間の結合を捉えている。これらの式が結合されない場合、従属グラフは、単一割当再帰を表すノードのみを含む。
如何なるプログラムも、単一割当形式で表すことができる。単一割当形式アルゴリズムは、予定実行への如何なる明示的な順序付けも有さない最大限の並列公式化(maximally parallel formulations)であるため、微細構造化された並列のプログラムは、単一割当形式で最も自然に表される。これにより、実行環境は、リソース競合を如何に管理するかにフォーカスできる。単一割当形式のプログラムは、演算毎に一意的な割当を含む。これは、各演算に対応するノード及び各データ移動に対応するエッジを含む単一割当グラフ(single assignment graph:SAG)によって表現することができる。演算イベントは、式の右辺に被演算子を有し、式の左辺に対する割当を演算する幾つかの演算として定義される。
信号伝播の速度には、限界があるため、如何なる2つの並列の演算イベントも、時間的又は空間的に分離される。現実のベクトル空間として広がるRNの離散サブグループとして定義される抽象的格子(abstract lattice)に単一割当形式プログラムを埋め込むことによって、アルゴリズム設計者は、従属する演算間の空間距離を特定することができる。幾つかの実施形態においては、抽象的正規直交格子(abstract orthonormal lattice)内への埋め込みが行われる。正規直交格子は、正規直交基底によって定義され、全ての基底ベクトルは、単位長を有し、これらの内積は、ゼロである。単一割当グラフは、同じ格子点に従属演算イベントが存在できないという規則によって、格子に埋め込むことができる。これによって、各演算イベントが格子内の一意的位置に割り当てられ、従属する演算が物理的に分離された格子点によって分離され、これにより、従属する被演算子を通信するための時間的分離が明確になる。格子内のこの一意的位置は、演算イベントのシグネチャと呼ばれ、これは、格子内の格子点を特定するインデックスベクトルとして定義される。適切な格子の他の例は、結晶グループ及び空間のカバーを形成する幾つかのレギュラーセル(regular cell)によって定義される他の空間の離散的サンプリングである。格子グループと呼ばれるこれらのサンプリングを記述する数学的構造は、明確に定義されている。正規直交格子は、これらのより一般化された格子グループのサブセットである。
SAGを幾つかの格子に埋め込むと、全てのプログラム入力及び全ての演算イベントは、従属演算イベントに結果をどのように送達するかを定義する明確なルーティングベクトルを有するようになる。このルーティングベクトルは、演算命令がこれらの入力にどのように従属するかを指定するため、従属ベクトルと呼ばれる。空間格子を埋め込むことにより、アルゴリズム設計者は、例えば、距離及びリソース競合等の制約を組み込むことができる。エネルギ消費及び従属する被演算子を通信する時間は、距離に比例するため、距離は、パワー効率及びパフォーマンスにとって非常に重要である。この距離は、離散的ルーティングネットワーク内のホップを用いて定義され、すなわち、各ホップは、少なくとも1個のレジスタを通過する必要があり、このため、ホップの数に比例してエネルギが消費される。
ここに記述した実行エンジンは、抽象的空間格子に埋め込まれる上述した埋め込み単一割当プログラムのための効率的な実行エンジンである。
図1は、幾つかの実施形態に基づいて動作するデータフローコンピュータシステムの全般的なブロック図である。コンピュータシステム100は、データ及び実行されるプログラムを格納するメモリ110を含む。メモリ110は、適用可能な如何なる種類のメモリであってもよい。実行は、コントローラ120がメモリ110にプログラムを要求することによって開始される。コントローラ120は、バス121を介してメモリコントローラ130に読出要求を行い、メモリコントローラ130は、読出要求をメモリ要求に変換して、コントローラ120にデータを返す。このデータは、単一割当プログラムを実行するプログラム命令を含む。コントローラ120は、これらのプログラム命令をデコードし、これらをストリーマ140のためのプログラミング情報に変換し、これらは、制御バス122を介してストリーマ140に送達される。同時に、コントローラ120は、コマンドバス123を介して、クロスバー150にプロセッサファブリック160のためのプログラミング情報を送信する。クロスバー150は、プロセッサファブリック160の適切な行及び列にコマンドを含むプログラミング情報を送達し、プロセッサファブリック160は、これらのコマンドを読み取り、単一割当プログラムを実行するように自らを構成する。全体的なデータ経路が準備されると、コントローラ120は、イベントをストリーマ140に発行して処理を開始する。メモリコントローラ130は、ストリーマ140から読出及び書込要求を受信し、これらをメモリ要求に変換する。ストリーマ140からの読出要求によって、データは、メモリコントローラ130によってストリーマ140に送達され、クロスバー150に送られる。クロスバー150は、プロセッサファブリック160の適切な行又は列にデータストリームをルーティングする。プロセッサファブリック160は、供給されてくるデータストリームを受信し、これらのストリームに対して命令を実行し、出力データストリームを生成する。これらの出力データストリームは、クロスバー150を介してストリーマ140に渡され、ストリーマ140がメモリアドレスをデータストリームに関連付け、これらをメモリコントローラ130に提供し、メモリコントローラ130がメモリ110にデータストリームを書き込むことによって、メモリ110に書き戻される。ストリーマ140は、演算タスクの完了を確認すると、制御バス122を介して通知イベントをコントローラ120に送り返す。コマンド/イベントバス123、124は、割り込み及び他のイベントをコントローラ120に戻し、エラー、パニック、並びにコントローラが演算を中断又は制御するための動作情報をシグナリングするために使用される。
図2は、データストリーマ140のブロック図である。データストリーマは、データトークンストリームを組立及び/又は分解するストリームプログラムを実行する。このプロセスは、コントローラ120が単一割当プログラムをデコードし、このプログラムをストリーマ140のためのストリームプログラムに変換することによって開始される。コントローラ120は、制御バス122を介してストリームプログラムストア220にこのストリームプログラムを書き込む。ストリームプログラムは、要求アドレス及び他の属性、例えば、サイズ及びタイプをどのように演算するかを詳細に示す。ストリームプログラムは、プロセッサ210によって実行される。プロセッサ210は、ストリームプログラムを実行し、メモリコントローラコマンドを生成し、コマンドデータキュー250に書き込む。プロセッサ210は、同じストリームプログラムの一部として、関連するトークン属性再帰式識別子、シグネチャ及びデータタイプを生成する。これらの属性は、トークン組立ユニット230によって使用され、トークン組立ユニット230は、メモリコントローラ130から供給される読出データ260にこれらの属性を結合し、データトークンストリームを生成し、クロスバー150に書き込む。同様に、クロスバー150から供給され、メモリに書き戻す必要があるデータストリームについて、トークン分解ユニット240は、供給されたデータトークンからトークン属性再帰式識別子、シグネチャ及びデータタイプを分離し、プロセッサ210による更なる処理のために、これらをストリームプログラムストア220に書き込む。トークン分解ユニット240は、書込データキュー270にデータトークンのデータペイロードを書き込む。同時に、プロセッサ210は、書込ストリームプログラムを実行し、適切なメモリ書込コマンドを生成し、これらは、書込データと共に、メモリコントローラ130に供給される。
図3に示すように、クロスバー150は、プロセッサアレイ内でN個のデータストリーマをM個の処理要素(processing element:PE)310に接続する相互接続ネットワークを提供する。ストリーマ140は、メモリ内のフラットなデータ構造を時間的な多次元データストリームに変換する。クロスバー150は、何れかのストリーマの物理的な位置を、プロセッサファブリック160内の処理要素の1つ、複数又は全ての物理的な位置に接続する。プロセッサファブリック160は、これらの多次元データストリームを使用し、コントローラ120がメモリから読み出し、クロスバー150を使用して適切な処理要素310に接続するバス123に書き込まれた命令トークンストリームを介してプロセッサファブリックの処理要素にインストールした単一割当プログラムの制御の下で、ファブリック内で多次元データストリームを共に接続する。多次元データストリームは、処理要素310及び処理要素ルーティングネットワーク320を流れる。処理要素310は、命令及びデータトークンを処理する。命令及びデータトークンは、処理要素310に送信し、ここに保存することができる。単一割当プログラムは、多次元空間内でデータトークンをどのように結合するかを記述する。処理要素310は、演算イベントのシグネチャと呼ばれる空間タグを認識し、コントローラ120によってこれらのプログラムストアにインストールされた単一割当プログラムの制御に基づいて動作する。この動作では、供給されたデータトークンのシグネチャを、実行の間に処理要素310に蓄積されている命令トークンのシグネチャと比較し、一致があった場合、内部ネットワーク320からデータトークンを抽出する。単一割当プログラムによって表される全体的な演算は、処理要素310内で多次元データストリームが照合され、中間的結果を表す潜在的な新しい多次元データストリームが生成されるにつれて進化し、新しい多次元データストリームは、ルーティングネットワーク320を介して、プロセッサファブリック内のこれらの演算イベントの宛先に伝達される。最終結果データストリームは、処理要素310に保存されている単一割当プログラムの制御の下で、ルーティングネットワーク320及び処理要素310を介して、クロスバー150にストリーミングによって戻される。クロスバー150は、これらのデータストリームを適切なストリーマ140に供給し、ストリーマ140は、これらのデータストリームを、メモリ110に書き込むことができるフラットなデータ構造に変換する。単一割当プログラムの実行の間、エラー状況が発生することがあり、処理イベントを観察することに関心が持たれる場合があるので、コントローラ120は、演算を管理するためのより優れた能力を有する。プログラムエラーの例は、アンダーフロー又はオーバーフローのような浮動小数点例外、ゼロによる除算のような命令例外、リソース枯渇又は時間切れのようなパニックイベント等である。ルーティングネットワーク320は、このような状況によって悪影響を受けることがあり、重要なイベントの送達及び取扱いをより良好に保証するために、このようなイベントのために、双方向バス124によって個別の通信ネットワーク330をコントローラ120に接続している。プロセッサファブリック160及びコントローラ120は、双方向イベントバス124を用いて、プロセッサファブリック160において進化する演算を集め、まとめ、制御する。
図4は、処理要素310の構造を示している。プロセッサファブリック160内の演算の開始の前に、コントローラ120は、単一割当プログラムに関する制御情報を処理要素のプログラムストア440に書き込む。プログラムストア440に書き込まれる情報は、再帰式を明確化する識別子、再帰式がアクティブになる演算のドメイン、シグネチャ更新プログラム及びルーティングベクトルを含む。演算のドメインは、仕様であり、通常、不等式のシステムによって定義された制約集合である。このような制約集合の例は、{(i,j)|1≦i,j≦N}である。これは、図7に示される再帰式の演算のドメインである。この制約集合は、以下の4つの不等式のシステムである。
1. i≧1
2. j≧1
3. i≦N
4. j≦N
この不等式のシステムは、以下の行列によって記述できる。
Figure 0006721911
幾つかの実施形態においては、この制約行列及び右辺ベクトルは、制約集合を指定するための正規化された形式として使用できる。このプログラム情報は、コントローラ120によってプロセッサファブリック160に注入(inject)される制御パケットを介して処理要素310に送達される。各処理要素310のポートアービタ(port arbiter)410は、ルーティングネットワーク320からパケットを受信する。ポートアービタ410は、処理要素310のネットワークポートから1つ以上のパケットを選択し、これらのパケットをパケットデコーダ420に送る。パケットデコーダ420は、パケットを検査し、パケットがプログラムを含んでいるか又は他のタイプの制御情報を含んでいるかを判定する。パケットが制御パケットである場合、パケットデコーダ420は、コントローラ430にパケットを送信し、コントローラ430は、制御情報を抽出し、データ経路の異なる要素、特に、プログラムストア440及び命令ストア450をプログラムする。制御及び状態情報は、制御バス431を介して書き込まれる。プログラムストア440は、単一割当プログラムの一部である再帰式毎に、識別子、演算のドメインの仕様、シグネチャ更新仕様、及びルーティングベクトルを受信する。この情報は、処理要素310が実行を補助する幾つかのアフィン再帰式を定義する。包括的には、再帰式は、複数の処理要素310上で実行され、したがって、より自然に述べれば、再帰式は、プロセッサファブリック160上で実行される。コントローラ120がプロセッサファブリック160をプログラムした後、実行を開始することができる。実行は、データストリーマ140が(クロスバー150を介して)プロセッサファブリック160に最初のデータパケットを注入することによって開始される。データパケットが処理要素310のネットワークポートに到達すると、パケットアービタ410は、1つ以上のパケットを選択し、これらをパケットデコーダ420に送る。パケットデコーダ420は、パケットを検査し、これがこの特定の処理要素310上で実行される演算に属するデータパケットであるかを判定する。これに該当する場合、パケットデコーダ420は、パケットのルーティングベクトルを抽出する。ルーティングベクトルが無効(null)でない場合、パケットデコーダ420は、パケットルータ425にパケットを送る。パケットルータ425は、ルート内の次のレッグを算出し、パケットのルーティングベクトルを更新し、ルーティングネットワーク320に注入し戻される更新されたパケットをポートアービタ410に供給する。ルーティングベクトルが無効である場合、パケットデコーダ420は、命令ストア450にデータトークンを送信する。命令ストア450は、データトークンから命令タグを抽出し、命令ストア450に保存され、係留中の関連する命令内の適切な被演算子スロットにデータペイロードを割り当て、又はこのデータトークンがこの特定の演算イベントのために受信された最初のデータトークンである場合、新しい命令を割り当てる。係留中の命令がその全ての被演算子を受信すると、命令ストア450は、係留中命令リストから命令の割当を取り消し、命令トークンを、トークン分解ユニット460に送信することによって、実行のためのキューに入れる。命令トークンは、命令演算コード、再帰式の可変識別子、この命令が表す演算イベントのシグネチャ及び構成被演算子を含む。トークン分解ユニット460は、命令トークンからシグネチャを抽出し、シグネチャを可変識別子と共にシグネチャパイプライン470に送信する。シグネチャパイプライン470は、プログラムストア440内で可変識別子を調べ、シグネチャ更新プログラムを読み出してシグネチャに適用する。シグネチャ更新プログラムは、包括的な説明のセクションで述べたように、幾つかの抽象的格子内の空間インデックスベクトルと解釈できる供給されたシグネチャに対する単純なアフィン変換である。シグネチャパイプライン470は、供給されたシグネチャにこのアフィン変換を適用し、新しいシグネチャを生成する。この新しいシグネチャは、トークン組立ユニット490に送られる。シグネチャパイプラインの実行と同時に、値パイプライン(value pipeline)480は、命令を実行して、新しい左辺値を生成する。トークン分解ユニット460は、命令トークンから命令演算コード及び被演算子を抽出し、これらを値パイプライン480に送る。値パイプライン480は、命令を実行し、結果をトークン組立ユニット490に送る。トークン組立ユニット490は、シグネチャパイプライン470の出力及び値パイプライン480の出力を受け取り、新しいデータトークンを構築する。トークン組立ユニット490は、この再帰式のための演算のドメインに対して、この新しいデータトークンのシグネチャをチェックし、ドメイン内である場合、データトークンをパケットルータ425に送信する。ルーティングベクトルが無効ベクトルでない場合、パケットルータ425は、パケットにデータトークンを埋め込み、これをポートアービタ410に送信し、幾つかのアービトレーションポリシの制御の下でルーティングネットワーク320に注入し戻す。このアービトレーションポリシの例は、先着順(first-come-first-served)又はサービス品質保証を実現するプライオリティベースのスキームである。データトークンのルーティングベクトルが無効である場合、これは、データトークンが現在の処理要素310内で再循環することを意味し、パケットルータ425は、命令ストア450にデータトークンを送信し、ここで、命令と照合する。
図5Aは、ルーティングネットワーク320を流れるデータパケット510の構造の1つの可能な実施形態を示している。データパケット510は、ルーティングネットワークを流れ、データ値を処理要素310に送達する。この実施形態では、データパケット510は、パケット識別子511、キュー識別子519、ストリーム識別子512、再帰式識別子513、データタイプ514、シグネチャ515、データ値516及びルーティングベクトル517を含む。パケット識別子511は、何らかの演算エラーの特定を補助するデバッグ機能を有する。ファブリック上での単一割当プログラムの実行の間、任意の時点に数千ものパケットがシステム内に存在できる。この集合内で特定のパケットを特定するためには、一意的識別子が搬送されている必要がある。この情報は、そのコンパイラによって命令ストリームプロセッサの命令ストリーム内に注入され、コード内の機能的問題のデバッグを補助するデバッグ情報及び命令に類似する。リリースコードの実行の間、この一意的パケット識別子は、データパケットの一部ではない。
更に図5Aを参照して説明すると、この例示的なデータパケット510は、4次元単一割当プログラムを実行する2次元プロセッサファブリックにおいて使用できる。2次元プロセッサファブリックは、ルーティングベクトル517が2次元であり、宛先処理要素310までのマンハッタンルート(Manhattan route)を表すと判定する。処理要素310の動作について説明したように、無効ではないルーティングベクトルは、パケットデコーダ420によって検出され、パケットルータ425に送られ、ルート内の次の処理要素310にルーティングされる。4次元単一割当プログラムは、シグネチャ515内で4次元空間内の4つのインデックスを表す4−ベクトルとして表される。再帰式識別子513に結合されるシグネチャ515は、本発明に基づくプログラム実行において非常に重要である。再帰式識別子513及びシグネチャ515は、単一割当プログラム内で1つの演算イベントを一意的に特定する。この演算イベントの結果は、データ値スロット516に格納され、そのタイプは、データタイプ514によって識別される。参加する次の演算イベントに結果を送達するために、ネットワークは、ルーティングベクトル517を介してデータパケットをルーティングし、キュー識別子519を使用して、処理要素310内のパケットルータ425を補助する。各再帰式には、コンパイラによって、一意的キューIDが割り当てられ、これにより、パケットルータは、最小限のデコードハードウェアを用いて、供給されたデータパケットを速やかにキューに入れることができる。完全にアクティブな2Dメッシュ内に4つの並列のパケットが供給されるという事実のために、処理要素310のフロントエンドへのプレッシャが重要である。データパケット内でキュー情報の一部を搬送することによって、処理要素310内のパケットルータのハードウェアの複雑性が低減される。最後に、ストリーム識別子512を用いて、データパケットをフラットなメモリデータ構造に関連付ける。データストリーマ140がフラットなメモリデータ構造から多次元データストリームを生成する場合、シグネチャがデータ構造内の位置を特定するが、ストリーム識別子512は、データ構造を特定するために必要である。これは、メモリデータ構造に対して実行されるプログラムがベースアドレスに関連して特定される、命令ストリームプロセッサ内で使用されるベースアドレスと同様である。ストリーム識別子512により、データストリーマは、メモリ内でデータパケットがどこから供給され、及びどこに供給されるかを正しく特定することができる。
図5Bは、図5Aに示すデータパケットと共に使用されるデータトークン520の構造の1つの可能な実施形態を示している。データトークン520は、このデータ要素が属する命令を命令ストア450が特定するために必要な最小限の情報を搬送する。図5A及び図5Bを比較することによってわかるように、データトークン520は、データパケット510内に完全に含まれる。データトークンの個々のフィールドは、データパケットについて上述したものと同じフィールドである。これは、データパケットがプロセッサファブリック160を介してデータトークンを送達するための現実のルーティングメカニズムであるので、異なる実施形態間の共通の構造である。データパケット及びデータトークン間の同じ構造を使用することにより、データトークンを速やかに組立及び分解することができ、これによって、ハードウェアの複雑性が低減され、パワー、並びにスループット及び待ち時間の全てについて、パフォーマンスが向上する。データトークンの構造は、命令ストア450の詳細な演算を決定し、これは、多くの点で、アフィン再帰式のシステムから生じる任意の単一割当プログラムの実行を可能にする中心的な制御メカニズムとみなすことができる。命令ストア450は、データトークンを組織化し、実行が係留中の命令トークンを組み立て、組織化する。図5Bに示すデータトークン構造520に属する命令ストア450の実施形態を図6に示す。
図6に示すように、データトークンは、データトークン分解ユニット610に到達する。データトークン分解ユニット610は、データトークンの異なるフィールドを抽出する。このデータトークンが送達されるべき命令を特定するために、データトークン分解ユニット610は、データトークンから再帰式識別子513及びシグネチャ515を抽出し、これらをルックアップユニット620に送信する。ルックアップユニット620は、図4に示すプログラムストア440にクエリを発し、命令情報を読み出す。ルックアップユニット620は、単に再帰式識別子513とシグネチャ515とを結合することによって命令タグ625を構築する。これは、このデータトークンが参加する演算イベントのための一意的識別子である。更に、ルックアップユニット620は、命令内でデータトークンが占めるスロット位置に関する情報をプログラムストア440から受信する。この情報は、スロット割当ユニット630を制御し、スロット割当ユニット630は、データトークン分解ユニットからデータタイプ514及び生データ値516を受信し、係留中の命令内の適切なスロットにこれらをルーティングする。ルックアップユニット620が実行する最後の機能は、係留中命令トークンストア650内で係留中の命令をどのように管理するかに関する情報を含む命令ヘッダ651の構築である。図5Cは、係留中命令トークンストア650内で管理される命令トークンの実施形態を示している。命令ヘッダ651は、命令演算コード531、スロットカバー532及びスロット占有フィールド533を含む。命令演算コード531は、値パイプライン480内の機能ユニットを制御するフィールドである。これは、被演算子に適用する必要がある演算のタイプをエンコードする。この例としては、典型的な機能ユニット演算子、例えば、ADD、MULTIPLY又はDIVIDE、又は何らかの論理演算、例えば、MASK、BIT_TEST又はSHIFT等がある。スロットカバーフィールド532は、命令が幾つの被演算子を必要とするかを特定する。例えば、単純な命令では、1個の入力被演算子を使用でき、より複雑な命令では、通常、3個の被演算子構造が使用される。スロットカバーフィールド532及びスロット占有フィールド533は、命令が全ての被演算子を受け取っているかを判定するために、係留中命令トークンストア内で連携して機能する。使用されるプロセスは、ルックアップユニット620が命令タグ625を構成し、これをタグCAM640に送信することによって開始される。タグCAM640は、これらの命令タグによって参照可能な内容参照可能メモリ(content addressable memory)である。タグCAM640がミスを示す場合、これは、命令がタグCAM640に割り当てられていないことを意味し、このミスに対し、タグCAM640は、係留中の命令を割り当てる。タグCAM640がヒットを示す場合、これは、データトークンを送達することができる係留中の命令があることを意味する。タグCAM640は、この係留中の命令に関連するストレージに係留中命令トークンストア650へのポインタを提供する。ルックアップユニット620は、上述したように、命令ヘッダ651を提供し、及びスロット割当ユニットは、係留中の命令の適切なスロットにデータトークン値を書き込む。更に、ルックアップユニット620は、スロット占有フィールド533を更新し、これを要求されたスロットカバー532と比較する。2つが等しい場合、全ての被演算子が受信されており、命令は実行の準備が完了している。命令タグ625及びフィールド651、534、535、536を含む係留中の命令645は、命令トークン組立ユニット660に送信され、命令トークン組立ユニット660は、図5Cに示すように、命令トークン530を構築する。命令トークン組立ユニット660は、完成した命令トークンを、図4に示すように、トークン分解ユニット460から始まる実行ユニットに送る。
図8は、実行エンジンを使用する方法のフローチャートを示している。ステップ800では、コントローラがメモリにプログラムを要求し、これは、メモリコントローラに読出要求を提出することを含み、メモリコントローラは、読出要求をメモリ要求に変換して、コントローラにデータを戻す。このデータは、単一割当プログラムを実行するためのプログラム命令を含む。ステップ802では、プログラム命令をプログラミング情報にデコードし、変換し、データストリーマに送達する。ステップ804では、プログラミング情報をクロスバーに送信する。ステップ806では、プログラミング情報をクロスバーからプロセッサファブリックに送達する。ステップ808では、プログラミング情報を読み出し、単一割当プログラムを実行するようにプロセッサファブリックを構成する。ステップ810では、コントローラからストリーマにイベントを発行し、全体的なデータ経路が準備された後、データストリームの送信を開始する。ステップ812では、読出及び書込要求をストリーマから受信し、メモリコントローラにおいて、読出及び書込要求をメモリ要求に変換する。ステップ814では、ストリームに対する命令を実行し、出力データストリームを生成するために、クロスバーによって、プロセッサファブリックの行又は列にデータストリームをルーティングし、ここで、出力データストリームは、クロスバーを経てストリーマに供給されることによってメモリに書き込まれ、すなわち、ストリーマは、メモリアドレスをデータストリームに関連付け、データストリームをメモリコントローラに供給し、メモリコントローラは、データストリームをメモリに書き込む。ステップ816では、ストリーマが演算タスクの完了を確認すると、通知イベントをコントローラに送信する。
ユーザは、実行エンジンを使用するために、例えば、実行エンジンがコンピュータ内で実現されている場合、実行エンジンにプログラムを入力及び/又は開始する。そして、実行エンジンは、上述したようにプログラムを実行する。プログラムに従い、プログラムは、所望の結果を出力する。例えば、ユーザが演算的に複雑な数学的な式を実行することを望む場合、実行エンジンが実行した後の出力は、式の結果である。
実際の動作においては、ここに説明する形式で単一割当プログラムの実行を組織化することによって、実行エンジンは、命令シーケンスプロセッサを使用する際に生じる多くの問題を解決する。実行を案内する命令ポインタは用いられない。実行エンジンは、完全にデータ駆動型(data driven)である。データ要素が利用可能になると、これらは、従属演算をトリガする。これにより、実行エンジン機能は、データフローマシンと同様に機能する。しかしながら、データフローマシンでは、フラットなメモリアドレスに基づいて検索が行われるため、利用できる空間構造がない。従来のデータフローマシンに関する第2の問題は、係留中の命令をホールドするCAMが大規模プログラムを実行できるようにするために、CAMを非常に大きくする必要がある点である。内容参照可能メモリは、大きくなるほど効率が低下し、動作が遅くなる。CAMは、パフォーマンスに関して、ノイマン型アーキテクチャを使用する命令シーケンスプロセッサほど優れていないため、従来からデータフローマシン内のボトルネックであった。実行エンジンは、アーキテクチャが守るべき演算の仕様に追加された空間的制約を含み、したがって、エネルギ制約をプログラム内に捕捉することができる。更に、空間的制約によって、全ての処理要素全体に亘ってCAMを分散させることができ、これにより、アーキテクチャは、同時並行性(concurrency)に関して、再びスケーリングされる。例えば、実行エンジンの小さなインスタンスは、単一チップ上に4096個の処理要素を集積することができる。処理要素の各命令ストアは、64個の係留中の命令を格納でき、単一のチップ内に262,144個の命令の総合的な同時並行性が実現する。4コアチップマルチプロセッサの典型的な同時並行性尺度は、数百の桁であり、高度並列256プロセッサグラフィックス処理ユニットでも、同時並列性尺度は、数万の桁である。膨大な量の同時並行性を管理できる実行エンジンの能力は、比類するものがない程に優れている。
コアエンジン
アフィン再帰式のシステムとして表されるドメインフロープログラムのための基本的な実行方法について説明する。再帰は、複雑な演算の進化(evolution)を表すメカニズムである。更に、抽象的インデックス空間内に個々の演算イベントを配置することにより、アルゴリズム設計者は、アルゴリズム表現に空間及び時間制約を組み込むことができる。知識処理ユニット(Knowledge Processing Unit:KPU)のコアエンジンの特徴は、リソース競合の状況下においても、これらの微細な空間及び時間制約を忠実に実行できる点である。ノイマン型マシンのリソース競合の解消は、演算シーケンスが演算リソースを共有することができるように、ランダムアクセスメモリを使用して、中間的結果を直列化するものである。一方、ここに説明するKPUコアエンジンは、物理的に有界であるが、論理的に無限の演算ファブリックを提供し、ファブリック内の演算リソースの経路に再帰をマッピングする。すなわち、コアエンジンは、再帰インデックスを時空の位置として解釈し、及びアフィン従属をファブリック内の機能ユニットにマッピングされた演算イベント間の物理的な通信として解釈することによって、時空制約を守り、アフィン再帰式のこれらのシステムを実行することができる装置を表す。微細並列アルゴリズムにこの新しい実行方法を適用することにより、より広範な又はより専門的なアプリケーションのための方法及び装置を微細化及び最適化する新しい機会が提供される。
命令セットアーキテクチャ(Instruction Set Architecture:ISA)
再帰式の典型的システムは、演算子の非常に小さな集合を使用し、これは、アルゴリズム間で根本的に異なっていてもよい。例えば、有限差分法(Finite Difference Method:FDM)のためのアルゴリズムは、場合によっては異なる正確さで、浮動小数点ADD及びMULTのみを必要とすることがあり、一方、ゲノム読出シーケンスの繰り込み又は組み立てのためのブルームフィルタ(Bloom filter)のためのアルゴリズムは、2ビットのアルファベットの文字列に亘るハッシュ関数を含む命令セットを必要とする。これらの2つの命令セット間のエネルギ散逸は、大きく異なり、したがって、アルゴリズムのクラスに応じてKPUのISAを特殊化することによって、値生成の機会が提供される。特に、ハッシングを中心とするISAは、ゲノム科学/タンパク質科学(genomics/proteomics)の分野に適するが、ハッシングは、更に、セキュリティアプリケーション及びデータベースアプリケーションの鍵でもある。FDM、FEM及びFVMについては、補間及び再サンプリングのために最適化された命令セットがワットあたりのパフォーマンスを最適化する。信号処理、画像処理及びセンサ処理の全ては、カスタム化されたISAによる利益を享受できる。
入力/出力経路
KPUは、マルチコア及びメニーコアの内蔵プログラムマシン又はSPMと比較して、ワットあたりのパフォーマンスが良好であるため、信号処理経路のリアルタイム処理のため使用されることが多い。これらのアプリケーションでは、処理時間をデータ入力速度に一致させる能力と同様に、パワー効率が重要である。これは、センサ又はネットワーク又はデバイス間でデータ経路を最適化し、KPUのストリーマに直接的な供給を行う機会があることを意味する。第2に、ストリーマは、ランダムアクセスメモリ(Random Access Memory:RAM)への/からの入力データ、中間データ及び出力データの直列化を行う。このRAMがダイナミック型、すなわち、DRAMである場合、このDRAMのアクセスパターンは、ページ位置を優先する。これは、ストリーマにページ認識の能力を与える機会を提供し、これにより、DRAMへのより効率的なライトバック(writeback)のために、又はよりDRAMからファブリックストリームへのより効率的な入力ストリーム生成のために、キャッシングを用いてページコヒーレントデータを蓄積することができる。第3に、特定のデータ構造のために、特に、ベクトル及び行列、密及び疎、並びにツリー及びリストのデータ構造のために、これらのデータ構造は、マイクロアーキテクチャ最適化のための好適な基礎を提供する。例えば、ストリーマは、行列記述子を用いて、メモリへ/からデータストリームを導出する。疎行列の場合、特別なインデックス構造を用いて、メモリ帯域幅を最小化し、これにより、所与のDRAM技術のパフォーマンスを最大化できる。第4に、例えば、命令毎に4つの浮動小数点演算を実行できるSIMDユニット等、特定の機能ユニットのマイクロアーキテクチャを有する場合、データストリームは、この能力に一致する必要がある。これは、ストリーマが機能ユニットのマイクロアーキテクチャと連携して動作することを意味する。SIMD浮動小数点ユニットは、一例であり、テキスト又はゲノム/プロテオームアルゴリズムのストリング及びハッシュ演算子も、最適化のための新たな機会を提供する。
アルゴリズム
各アルゴリズムは、アフィン再帰式のシステムに変換する必要があり、良好なパフォーマンスのためには、ドメインのクレバーな空間配置及び整列が重要であるため、新しいドメインフローアルゴリズムは、この問題を解決する方法及び装置となる可能性を有する。ドメインフロープログラムは、実際には、物理的な埋め込みであるため、これは、装置を表す。複雑な空間及び時間制約では、ある再帰のシステムが良好に動作し、機能的に同様な他のシステムのパフォーマンスが低くなることがある。第2に、非常にユニークな最適化されたマシンの場合、アルゴリズムは、ISA及びI/O最適化と組み合わされる。
コンパイル及びスケジューリング最適化
アフィン再帰式のシステムが与えられると、コンパイラは、アルゴリズムに固有の同時並行性の量及び構造を解析する。これは、良好なタイムスケジュール及びファブリックへの低競合空間割当を選択するために使用される。単純なアルゴリズムは、空間及び時間予測を選択するために使用することができる。コアアルゴリズムは、高度に並列であることができ、従属ベクトルの単純な線形結合の選択を可能にする。完全に自動化されたコンパイルのために、これらの単純な方法が不十分である場合は、より複雑な、段階的実行パターンを使用することができる。
処理要素(processing element:PE)
KPUの処理要素は、CAM、命令スケジューリング/ディスパッチキュー、1つ以上の機能ユニット及びアフィンルーティングベクトルを生成することができるルータを含む小型プロセッサである。処理要素マイクロアーキテクチャは、継続的な革新の多くの機会を有している。例えば、浮動小数点、整数及びストリング演算のためのクレバーなSIMD機能ユニット、並びにCAM又はルータを経由する必要なく結果が他の機能ユニットに送られる命令チェイニング等がある。これは、特に複合命令、例えば、ハッシング関数、一次補間又は線形補間、及びFVM、FEM、FDM及びBEMに役立つ他のより高次の関数にとって注目される点である。離散イベント計算、例えば、格子ボルツマン法、又はFMMで使用される複雑な近似技術も注目される方法及びマシンである。
処理ファブリック
処理ファブリックは、包括的関数演算子、例えば、ブロードキャスト、並びに縮小、例えば、フェッチアンドアッド(Fetch-and-Add)及びこれに類する手法を示すことができる。これらの包括的演算子は、個々の処理要素ではなく、ファブリックによって管理及び維持される命令セットによって駆動される。第2に、潜在的に数万もの処理要素を有するより大きなファブリックを集積する能力が高まると、処理要素及びファブリックの耐故障性についての要求が高まる。コアKPUエンジンの重要な側面として、入力データセットのリソース競合要求へのローカルの微細従属性が不変であり、処理要素障害を処理することが困難になりつつあるため、耐故障性問題の解決は、重要な革新である。不完全処理又はストレージ要素を特定し、分離するBISTテスト及び再構成可能性技術は、KPUチップに適用できる。幾つかのインプリメンテーションでは、1つの大きいKPUファブリックに代えて、互いに効率的にデータストリームを通信できる多くのより小さなファブリックからチップを構成する。これは、ファブリック及び処理要素のために各カーネルが空間、時間及びISAを最適化する、複数の通信カーネルを最適化するマイクロアーキテクチャ組織化でもある。
プログラムストレージ及び管理
ドメインフロープログラムの密度は、非常に高い。すなわち、非常に大規模で複雑な並列処理を100バイト以下で表すことができる。より複雑なアプリケーションは、複数のこのような並列カーネルをチェーン化するので、マイクロアーキテクチャは、これらのプログラム記述をチェーン化及びキャッシングして最適化する。キャッシングは、前のカーネルを効率的に呼び出すために使用され、チェーン化は、メモリへ/から中間データを直列化する必要を回避するために使用され、これにより、パフォーマンスが向上する。
回路
アイドル状態にあるファブリックのサブセットを特定するパワーマネジメント技術は、これらのリソースをシャットダウンして動作電力消費を低減することができる。第2に、コアKPUエンジンは、データ駆動型エンジンであり、したがって、純粋な非同期実行パイプラインとして実現することができる。信号を整定するミュラーC要素パイプライン又はマイクロパイプラインを巡るマイクロ構造インプリメンテーションは、埋め込みアプリケーション内でKPUの低電力インプリメンテーションを提供することができる。
フィールドプログラマブルゲートアレイ
ドメインフロープログラム概念は、処理要素及びファブリックのISAを最適化する機会を提供するので、KPUのFPGAインプリメンテーションによって、アプリケーションの実行の間にファブリック及び命令セットを切り換えることができる。これにより、作業負荷が最適化されたサーバ及び埋込み型プロセッサが実現する。
本発明の構造及び動作の原理を明瞭にするために詳細を組み込んだ特定の実施形態に関連して本発明を説明した。このような特定の実施形態及びその詳細への言及は、特許請求の範囲を限定する意図はない。特許請求の範囲によって定義されている本発明の精神及び範囲から逸脱することなく、例示のために選択された実施形態に他の様々な修正を加えてもよいことは、当業者にとって明らかである。
121 バス
122 制御バス
123 コマンドバス
124 イベントバス、双方向バス
320 処理要素ルーティングネットワーク、内部ネットワーク
330 個別の通信ネットワーク
510 データパケット
520 データトークン
530 命令トークン

Claims (26)

  1. (a)データ及びドメインフロープログラムを格納するメモリと、
    (b)前記メモリにドメインフロープログラムを要求し、前記ドメインフロープログラムをドメインフロープログラミング情報に変換するコントローラと、
    (c)前記ドメインフロープログラムにおいて特定された同じ単一割当式に属する複数のデータトークンの命令タグに関する一致を検出する1つ以上の処理要素によって、前記ドメインフロープログラミング情報を処理するプロセッサファブリックであって、微細並列アルゴリズムを実行するように構成されているプロセッサファブリックと、
    (d)前記データトークン及び前記ドメインフロープログラミング情報を前記プロセッサファブリックに送信するクロスバーと、
    (e)クロスバーにデータストリームを送信するように構成されたデータストリーマであって、ページ認識を実装し、DRAMへの効率的なライトバックのために、又はDRAMからプロセッサファブリックへの効果的な入力ストリーム生成のために、キャッシングを用いて、ページコヒーレントデータを蓄積するデータストリーマと、
    を備える演算デバイス。
  2. 前記プロセッサファブリックは、特定のクラスのアルゴリズムのために構成された命令セットアーキテクチャを処理する請求項1記載のデバイス。
  3. 前記特定のクラスのアルゴリズムは、ハッシングアルゴリズムを含む請求項2記載のデバイス。
  4. 前記特定のクラスのアルゴリズムは、補間及び再サンプリングのための最適化を含む請求項2記載のデバイス。
  5. 前記データストリーマによって行列記述子を用いて、メモリへ/からデータストリームを導出する請求項1記載のデバイス。
  6. 疎行列について、インデックス構造を用いて、メモリ帯域幅を最小化し、及びDRAMのパフォーマンスを最大化する請求項5記載のデバイス。
  7. 前記コントローラは、更に、メモリコントローラに読出要求を提出することを含むドメインフロープログラムの要求を行うように構成されており、前記メモリコントローラは、前記読出要求をメモリ要求に変換して、前記コントローラにデータを戻す請求項1記載のデバイス。
  8. 前記メモリコントローラから前記コントローラに戻される前記データは、単一割当プログラムを構成するためのプログラム命令を含む請求項7記載のデバイス。
  9. 前記コントローラは、更に、前記データストリーマに前記ドメインフロープログラミング情報を送達するように構成されている請求項1記載のデバイス。
  10. 前記コントローラは、更に、全体的なデータ経路が準備されると、開始のために前記データストリーマにイベントを発行するように構成されている請求項1記載のデバイス。
  11. 前記クロスバーは、更に、プロセッサファブリックの行又は列にデータストリームをルーティングするように構成されている請求項1記載のデバイス。
  12. 前記プロセッサファブリックは、更に、出力データストリームを生成するように構成されている請求項11記載のデバイス。
  13. 前記出力データストリームは、前記クロスバーを経て、前記データストリーマに供給され、前記データストリーマは、メモリアドレスを前記出力データストリームに関連付け、前記データストリーマは、前記出力データストリームをメモリコントローラに供給し、前記メモリコントローラは、前記メモリに前記出力データストリームを書き込む請求項12記載のデバイス。
  14. 前記データストリーマは、更に、前記データストリーマが演算タスクの完了を確認すると、前記コントローラに通知イベントを送信するように構成されている請求項13記載のデバイス。
  15. (a)データ及びドメインフロープログラムを格納するメモリと、
    (b)前記メモリと通信し、読出及び書込要求を受信し、前記読出及び書込要求をメモリ要求に変換するメモリコントローラと、
    (c)前記メモリにドメインフロープログラム及びデータを要求し、前記ドメインフロープログラムをプログラミング情報に変換するコントローラと、
    (d)複数のデータトークンの命令タグに関する一致を検出する1つ以上の処理要素によって、前記プログラミング情報を処理し、出力データストリームを生成するプロセッサファブリックであって、微細並列アルゴリズムを実行するように構成されているプロセッサファブリックと、
    (e)前記データトークンを前記プロセッサファブリックに送信するクロスバーと、
    (f)前記クロスバーにデータストリームを送信するデータストリーマであって、ページ認識を実装し、DRAMへの効率的なライトバックのために、又はDRAMからプロセッサファブリックへの効果的な入力ストリーム生成のために、キャッシングを用いて、ページコヒーレントデータを蓄積するデータストリーマと、
    を備える演算デバイス。
  16. 前記プロセッサファブリックは、特定のクラスのアルゴリズムのために構成された命令セットアーキテクチャを処理する請求項15記載のデバイス。
  17. 前記特定のクラスのアルゴリズムは、ハッシングアルゴリズムを含む請求項16記載のデバイス。
  18. 前記特定のクラスのアルゴリズムは、補間及び再サンプリングのための最適化を含む請求項16記載のデバイス。
  19. 前記データストリーマによって行列記述子を用いて、メモリへ/からデータストリームを導出する請求項15記載のデバイス。
  20. 疎行列について、インデックス構造を用いて、メモリ帯域幅を最小化し、及びDRAMのパフォーマンスを最大化する請求項19記載のデバイス。
  21. (a)コントローラによって、ドメインフロープログラムを構成するためのプログラム命令を含むデータをメモリに要求すること、
    (b)前記コントローラにおいて、前記プログラム命令をプログラミング情報にデコード及び変換し、データストリーマに前記プログラミング情報を送達すること
    (b’)データストリーマにおいて、ページ認識を実装し、DRAMへの効率的なライトバックのために、又はDRAMからプロセッサファブリックへの効果的な入力ストリーム生成のために、キャッシングを用いて、ページコヒーレントデータを蓄積すること、
    (c)前記プログラミング情報を、複数の処理要素を含むプロセッサファブリックに転送すること、
    (d)前記プログラミング情報に基づくアフィン再帰式の連結セットによって定義される単一割当プログラムを実行するように前記プロセッサファブリックを構成することであって、前記プロセッサファブリックは、更に、微細並列アルゴリズムを実行するように構成されること、
    (e)前記プロセッサファブリックに、前記プロセッサファブリック内で、及び前記プロセッサファブリックからデータストリームをルーティングすること、
    及び
    (f)前記ドメインフロープログラムにおいて指定されている同じ単一割当式に属する、命令タグに関して一致する複数のデータトークンに関する命令を実行すること、
    を含む方法。
  22. 前記プロセッサファブリックは、特定のクラスのアルゴリズムのために構成された命令セットアーキテクチャを処理する請求項21記載の方法。
  23. 前記特定のクラスのアルゴリズムは、ハッシングアルゴリズムを含む請求項22記載の方法。
  24. 前記特定のクラスのアルゴリズムは、補間及び再サンプリングのための最適化を含む請求項22記載の方法。
  25. 前記データストリーマによって行列記述子を用いて、メモリへ/からデータストリームを導出する請求項21記載の方法。
  26. 疎行列について、インデックス構造を用いて、メモリ帯域幅を最小化し、及びDRAMのパフォーマンスを最大化する請求項25記載の方法。
JP2016570762A 2014-02-20 2014-12-01 アフィン従属による単一割当プログラムを実行するための実行エンジン Active JP6721911B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/185,841 US9501448B2 (en) 2008-05-27 2014-02-20 Execution engine for executing single assignment programs with affine dependencies
US14/185,841 2014-02-20
PCT/US2014/067878 WO2015126495A2 (en) 2014-02-20 2014-12-01 Execution engine for executing single assignment programs with affine dependencies

Publications (2)

Publication Number Publication Date
JP2017506406A JP2017506406A (ja) 2017-03-02
JP6721911B2 true JP6721911B2 (ja) 2020-07-15

Family

ID=53879211

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016570762A Active JP6721911B2 (ja) 2014-02-20 2014-12-01 アフィン従属による単一割当プログラムを実行するための実行エンジン

Country Status (3)

Country Link
EP (1) EP3108358B1 (ja)
JP (1) JP6721911B2 (ja)
WO (1) WO2015126495A2 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106055401B (zh) * 2016-06-13 2019-02-26 北京唯智佳辰科技发展有限责任公司 海量计算粗颗粒并行的自动启停及计算任务动态分配方法
US10699189B2 (en) * 2017-02-23 2020-06-30 Cerebras Systems Inc. Accelerated deep learning
US11488004B2 (en) 2017-04-17 2022-11-01 Cerebras Systems Inc. Neuron smearing for accelerated deep learning

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE69701351T2 (de) * 1996-11-04 2000-08-24 Koninkl Philips Electronics Nv Signalverarbeitungsvorrichtung bestehend aus mehr als einem verarbeitungselement
US6560674B1 (en) * 1998-10-14 2003-05-06 Hitachi, Ltd. Data cache system
US7401206B2 (en) * 2004-06-30 2008-07-15 Sun Microsystems, Inc. Apparatus and method for fine-grained multithreading in a multipipelined processor core
JP5083204B2 (ja) * 2006-03-14 2012-11-28 富士通株式会社 並列化プログラム生成プログラム、並列化プログラム生成装置、及び並列化プログラム生成方法
US8341611B2 (en) * 2007-04-11 2012-12-25 Apple Inc. Application interface on multiple processors
JP5684704B2 (ja) * 2008-05-27 2015-03-18 スティルウォーター スーパーコンピューティング インコーポレイテッド 実行エンジン
JP2013512511A (ja) * 2009-11-25 2013-04-11 ハワード ユニバーシティ 複数メモリ特定用途向けデジタル信号プロセッサ
US10198248B2 (en) * 2012-07-11 2019-02-05 Intel Corporation Parallel processing of a single data buffer

Also Published As

Publication number Publication date
WO2015126495A2 (en) 2015-08-27
EP3108358A2 (en) 2016-12-28
EP3108358A4 (en) 2017-10-25
EP3108358B1 (en) 2021-06-23
WO2015126495A3 (en) 2015-11-12
JP2017506406A (ja) 2017-03-02

Similar Documents

Publication Publication Date Title
US11681650B2 (en) Execution engine for executing single assignment programs with affine dependencies
JP5684704B2 (ja) 実行エンジン
Wang et al. Melia: A mapreduce framework on opencl-based fpgas
Besta et al. Substream-centric maximum matchings on fpga
US20200174707A1 (en) Fifo filling logic for tensor calculation
Lu et al. Mrphi: An optimized mapreduce framework on intel xeon phi coprocessors
US20160147516A1 (en) Execution of complex recursive algorithms
Yin et al. Conflict-free loop mapping for coarse-grained reconfigurable architecture with multi-bank memory
JP6721911B2 (ja) アフィン従属による単一割当プログラムを実行するための実行エンジン
Wang et al. {MGG}: Accelerating graph neural networks with {Fine-Grained}{Intra-Kernel}{Communication-Computation} pipelining on {Multi-GPU} platforms
Xia et al. Redundancy-free high-performance dynamic GNN training with hierarchical pipeline parallelism
Yamazaki et al. New scheduling strategies and hybrid programming for a parallel right-looking sparse LU factorization algorithm on multicore cluster systems
KR20230169321A (ko) 데이터 의존적이고 불규칙한 오퍼레이션들을 위한 프로그래밍 가능 가속기
CN117348929A (zh) 指令执行方法、系统控制器及相关产品
KR20230082621A (ko) 얕은 파이프라인을 갖는 고도의 병렬 처리 아키텍처
George et al. A Unified Programmable Edge Matrix Processor for Deep Neural Networks and Matrix Algebra
US20230385125A1 (en) Graph partitioning and implementation of large models on tensor streaming processors
US11977499B2 (en) Streaming transfers and ordering model
Bank Tavakoli Reconfigurable High-Performance Computing of Sparse Linear Algebra
Baumeister et al. Addressing materials science challenges using GPU-accelerated POWER8 nodes
Ming et al. VIDGCN: Embracing input data diversity with a configurable graph convolutional network accelerator
Tavakoli et al. FSpGEMM: A Framework for Accelerating Sparse General Matrix–Matrix Multiplication Using Gustavson’s Algorithm on FPGAs
Costa Penha et al. Gene regulatory accelerators on cloud FPGA
WO2023034221A1 (en) Scale computing in deterministic cloud environments
Wen et al. FT64: Scientific computing with Streams

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20171130

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20181113

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190108

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190403

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190404

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190917

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20191212

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20200512

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200611

R150 Certificate of patent or registration of utility model

Ref document number: 6721911

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250