(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2022-10-12
(54)【発明の名称】再構成可能アーキテクチャのコンパイラ・フロー・ロジック
(51)【国際特許分類】
G06F 8/41 20180101AFI20221004BHJP
G06F 15/80 20060101ALI20221004BHJP
【FI】
G06F8/41 130
G06F15/80
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2022507592
(86)(22)【出願日】2020-08-07
(85)【翻訳文提出日】2022-03-29
(86)【国際出願番号】 US2020045478
(87)【国際公開番号】W WO2021026489
(87)【国際公開日】2021-02-11
(32)【優先日】2019-08-08
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
(71)【出願人】
【識別番号】521220493
【氏名又は名称】サンバノヴァ システムズ, インク.
【氏名又は名称原語表記】SAMBANOVA SYSTEMS, INC.
【住所又は居所原語表記】Suite 103 2100 Geng Road Palo Alto, California 94303 United States of America
(74)【代理人】
【識別番号】100114476
【氏名又は名称】政木 良文
(72)【発明者】
【氏名】コープリンガー, デイヴィッド アラン
(72)【発明者】
【氏名】プラバカール, ラグー
(72)【発明者】
【氏名】ジャイラス, サムティ
【テーマコード(参考)】
5B081
【Fターム(参考)】
5B081CC23
(57)【要約】
開示された技術は、高レベル・プログラムのデータフロー・グラフをメモリ・アロケーション及び実行フラグメントに区分化する。メモリ・アロケーションは、データフロー・グラフを実施するために必要なデータのためのオンプロセッサ・メモリ及び/またはオフプロセッサ・メモリ内の論理メモリ空間の作成を表す。実行フラグメントは、データに対するオペレーションを表す。開示された技術は、メモリ・アロケーションを仮想メモリ・ユニットに、実行フラグメントを仮想演算ユニットに指定する。開示された技術は、実行フラグメントをメモリ・フラグメントに区分化し、フラグメントを計算し、メモリ・フラグメントを仮想メモリ・ユニットに割り当て、演算フラグメントを仮想演算ユニットに割り当てる。開示された技術は次に、仮想メモリ・ユニットを物理メモリ・ユニットにアロケーティングし、仮想演算ユニットを物理演算ユニットにアロケーティングする。次に、物理メモリ・ユニット及び物理演算ユニットを構成可能ユニットのアレイ内の位置に設置し、設置された位置の間でデータ及び制御ネットワークをルーティングする。
【選択図】
図2
【特許請求の範囲】
【請求項1】
構成可能ユニットのアレイを有する再構成可能データ・プロセッサにマッピングするための高レベル・プログラムを変換するコンピュータにより実施される方法であって、
前記高レベル・プログラムのデータフロー・グラフをメモリ・アロケーションと実行フラグメントに区分化すること、但し、前記メモリ・アロケーションは、前記データフロー・グラフを実施するために必要なデータのためのオンプロセッサ・メモリ及び/またはオフプロセッサ・メモリ内の論理メモリ空間の作成を表し、前記実行フラグメントは、前記データに対するオペレーションを表し、
前記メモリ・アロケーションを仮想メモリ・ユニットに指定し、前記実行フラグメントを仮想演算ユニットに指定すること、
前記実行フラグメントをメモリ・フラグメントと演算フラグメントに区分化すること、
前記メモリ・フラグメントを前記仮想メモリ・ユニットに割り当て、前記演算フラグメントを前記仮想演算ユニットに割り当てること、
前記仮想メモリ・ユニットを物理メモリ・ユニットにアロケーティングし、前記仮想演算ユニットを物理演算ユニットにアロケーティングすること、
前記構成可能ユニットのアレイ内の位置上に前記物理メモリ・ユニットと前記物理演算ユニットを設置し、設置された前記位置間でデータ及び制御ネットワークをルーティングすること、及び、
設置された前記位置及びルーティングされた前記データ及び制御ネットワークのための構成データを有するビット・ファイルであって、前記構成可能ユニットのアレイのインスタンス上にロードされると、前記構成可能ユニットのアレイに前記データフロー・グラフを実施させるビット・ファイルを生成すること、
を有する方法。
【請求項2】
前記仮想メモリ・ユニットの少なくとも1つを複数の物理メモリ・ユニットにアロケーティングすること、及び/または、前記仮想演算ユニットの少なくとも1つを複数の物理演算ユニットにアロケーティングすること、
前記複数の物理メモリ・ユニットと前記複数の物理演算ユニットを前記構成可能ユニットのアレイ内の位置に設置し、設置された前記位置間でデータ及び制御ネットワークをルーティングすること、及び、
設置された前記位置及びルーティングされた前記データ及び制御ネットワークのための構成データを有するビット・ファイルであって、前記構成可能ユニットのアレイのインスタンス上にロードされると、前記構成可能ユニットのアレイに前記データフロー・グラフを実施させるビット・ファイルを生成すること、
を更に有する請求項1に記載のコンピュータにより実施される方法。
【請求項3】
前記アロケーティングは、前記複数の物理メモリ・ユニットと前記複数の物理演算ユニットのハードウェア制約を満たしている請求項2に記載のコンピュータにより実施される方法。
【請求項4】
前記アロケーティングは、少なくとも部分的に、特定の物理的演算ユニットによって受け入れられる入力の数に依存する請求項2に記載のコンピュータにより実施される方法。
【請求項5】
前記アロケーティングは、少なくとも部分的に、物理メモリ・ユニットで利用可能なオンチップSRAMの容量、算術論理ユニット(ALU)のステージ数、ステージ当たりのレジスタ数、各ALUステージの能力、ALUとレジスタ間で利用可能な接続、及びレジスタ間で利用可能な接続に依存する請求項2に記載のコンピュータにより実施される方法。
【請求項6】
前記物理メモリ・ユニットの少なくとも2つを単一の物理メモリ・ユニットに融合すること、及び/または、前記物理演算ユニットの少なくとも2つを単一の物理演算ユニットに融合すること、
前記単一の物理記憶ユニットと前記単一の物理演算ユニットを前記構成可能ユニットのアレイ内の位置上に設置し、設置された前記位置間でデータ及び制御ネットワークをルーティングすること、及び、
設置された前記位置及びルーティングされた前記データ及び制御ネットワークのための構成データを有するビット・ファイルであって、前記構成可能ユニットのアレイのインスタンス上にロードされると、前記構成可能ユニットのアレイに前記データフロー・グラフを実施させるビット・ファイルを生成すること、
を更に有する請求項1に記載のコンピュータにより実施される方法。
【請求項7】
前記融合は、前記単一の物理メモリ・ユニットと前記単一の物理演算ユニットのリソースの利用を増加させる請求項6に記載のコンピュータにより実施される方法。
【請求項8】
前記融合は、少なくとも部分的に、物理メモリ・ユニットで利用可能なオンチップSRAMの容量と、前記単一の物理演算ユニット内のALUステージの数とに依存する請求項6に記載のコンピュータにより実施される方法。
【請求項9】
空間的な前記融合は、別のやり方では異なるクロック・サイクルで別々の物理演算ユニット上で実行される複数のオペレーションを、前記単一の物理演算ユニット上で実行することを含む請求項6に記載のコンピュータにより実施される方法。
【請求項10】
時間的な前記融合は、前記複数のオペレーションを別々の実行コンテキストとして前記単一の物理演算ユニット上で順次実行することを含む請求項9に記載のコンピュータにより実施される方法。
【請求項11】
前記実行フラグメントが非同期に実行可能である請求項1に記載のコンピュータにより実施される方法。
【請求項12】
前記実行フラグメントの前記メモリ・フラグメントを、データ構造にインデックスを付けるように構成することを更に含む請求項11に記載のコンピュータにより実施される方法。
【請求項13】
前記メモリ・フラグメントの少なくとも1つは、1つの前記メモリ・アロケーションの前記論理メモリ空間内のデータ構造にインデックスを付ける請求項12に記載のコンピュータにより実施される方法。
【請求項14】
前記実行フラグメントの少なくとも1つは、少なくとも1つの前記演算フラグメントに対するオペレーションを、前記メモリ・フラグメントによってインデックス付けされた値に対して繰り返し動作させるループまたはパターン・イテレータを含む請求項12に記載のコンピュータにより実施される方法。
【請求項15】
特定の実行フラグメントの前記演算フラグメントと前記メモリ・フラグメントは、前記オペレーションをインデックス付けされた値を保持するデータ構造の少なくとも2つの次元にわたって動作させる請求項14に記載のコンピュータにより実施される方法。
【請求項16】
特定の実行フラグメントは、複数のデータ構造にインデックス付けする複数のメモリ・フラグメントを含む請求項12に記載のコンピュータにより実施される方法。
【請求項17】
前記実行フラグメントへの前記区分化は、前記データフロー・グラフのネストされたループの少なくとも1つの最も内側のループ内の計算を別個の実行フラグメントとして処理することを含む請求項1に記載のコンピュータにより実施される方法。
【請求項18】
前記実行フラグメントへの前記区分化は、前記データフロー・グラフの前記最も内側のループの周りの外側ループの計算を別個の実行フラグメントとして処理することを更に含む請求項17に記載のコンピュータにより実施される方法。
【請求項19】
特定の物理演算ユニット上にグループ化された前記データフロー・グラフからの複数のオペレーションを、前記特定の物理演算ユニット内のリソース上にマッピングすることを、更に有する請求項1に記載のコンピュータにより実施される方法。
【請求項20】
構成可能ユニットのアレイを有する再構成可能データ・プロセッサにマッピングするための高レベル・プログラムを変換するコンピュータにより実施される方法であって、
前記高レベル・プログラムのデータフロー・グラフをメモリ・アロケーションと実行フラグメントに区分化すること、但し、前記メモリ・アロケーションは、前記データフロー・グラフを実施するために必要なデータのためのオンプロセッサ・メモリ及び/またはオフプロセッサ・メモリ内の論理メモリ空間の作成を表し、前記実行フラグメントは、前記データに対するオペレーションを表し、
前記メモリ・アロケーションと前記実行フラグメントを仮想構成可能ユニットに指定すること、
前記実行フラグメントをメモリ・フラグメントと演算フラグメントに区分化すること、
前記メモリ・フラグメントと前記演算フラグメントを前記仮想構成可能ユニットに割り当てること、
前記仮想構成可能ユニットを物理構成可能ユニットにアロケーティングすること、
前記構成可能ユニットのアレイ内の位置上に前記物理構成可能ユニットを設置し、設置された前記位置間でデータ及び制御ネットワークをルーティングすること、及び、
設置された前記位置及びルーティングされた前記データ及び制御ネットワークのための構成データを有するビット・ファイルであって、前記構成可能ユニットのアレイのインスタンス上にロードされると、前記構成可能ユニットのアレイに前記データフロー・グラフを実施させるビット・ファイルを生成すること、
を有する方法。
【請求項21】
前記仮想構成可能ユニットの少なくとも1つを複数の物理構成可能ユニットにアロケーティングすること、
前記複数の物理構成可能ユニットを前記構成可能ユニットのアレイ内の位置に設置し、設置された前記位置間でデータ及び制御ネットワークをルーティングすること、及び、
設置された前記位置及びルーティングされた前記データ及び制御ネットワークのための構成データを有するビット・ファイルであって、前記構成可能ユニットのアレイのインスタンス上にロードされると、前記構成可能ユニットのアレイに前記データフロー・グラフを実施させるビット・ファイルを生成すること、
を更に有する請求項20に記載のコンピュータにより実施される方法。
【請求項22】
前記物理構成可能ユニットの少なくとも2つを単一の物理構成可能ユニットに融合すること、
前記単一の物理構成可能ユニットを前記構成可能ユニットのアレイ内の位置に設置し、設置された前記位置間でデータ及び制御ネットワークをルーティングすること、及び、
設置された前記位置及びルーティングされた前記データ及び制御ネットワークのための構成データを有するビット・ファイルであって、前記構成可能ユニットのアレイのインスタンス上にロードされると、前記構成可能ユニットのアレイに前記データフロー・グラフを実施させるビット・ファイルを生成すること、
を更に有する請求項21に記載のコンピュータにより実施される方法。
【請求項23】
構成可能ユニットのアレイを有する再構成可能データ・プロセッサにマッピングするための高レベル・プログラムを変換するコンピュータ・プログラム命令を備えた非一時的コンピュータ可読記憶媒体であって、
前記命令がプロセッサで実行されると実施される方法が、
前記高レベル・プログラムのデータフロー・グラフをメモリ・アロケーションと実行フラグメントに区分化すること、但し、前記メモリ・アロケーションは、前記データフロー・グラフを実施するために必要なデータのためのオンプロセッサ・メモリ及び/またはオフプロセッサ・メモリ内の論理メモリ空間の作成を表し、前記実行フラグメントは、前記データに対するオペレーションを表し、
前記メモリ・アロケーションを仮想メモリ・ユニットに指定し、前記実行フラグメントを仮想演算ユニットに指定すること、
前記実行フラグメントをメモリ・フラグメントと演算フラグメントに区分化すること、
前記メモリ・フラグメントを前記仮想メモリ・ユニットに割り当て、前記演算フラグメントを前記仮想演算ユニットに割り当てること、
前記仮想メモリ・ユニットを物理メモリ・ユニットにアロケーティングし、前記仮想演算ユニットを物理演算ユニットにアロケーティングすること、
前記構成可能ユニットのアレイ内の位置上に前記物理メモリ・ユニットと前記物理演算ユニットを設置し、設置された前記位置間でデータ及び制御ネットワークをルーティングすること、及び、
設置された前記位置及びルーティングされた前記データ及び制御ネットワークのための構成データを有するビット・ファイルであって、前記構成可能ユニットのアレイのインスタンス上にロードされると、前記構成可能ユニットのアレイに前記データフロー・グラフを実施させるビット・ファイルを生成すること、
を有する非一時的コンピュータ可読記憶媒体。
【請求項24】
構成可能ユニットのアレイを有する再構成可能データ・プロセッサにマッピングするための高レベル・プログラムを変換するコンピュータ・プログラム命令がロードされているメモリに接続された1または複数のプロセッサを含むシステムであって、
前記命令がプロセッサで実行されると実施される方法が、
前記高レベル・プログラムのデータフロー・グラフをメモリ・アロケーションと実行フラグメントに区分化すること、但し、前記メモリ・アロケーションは、前記データフロー・グラフを実施するために必要なデータのためのオンプロセッサ・メモリ及び/またはオフプロセッサ・メモリ内の論理メモリ空間の作成を表し、前記実行フラグメントは、前記データに対するオペレーションを表し、
前記メモリ・アロケーションを仮想メモリ・ユニットに指定し、前記実行フラグメントを仮想演算ユニットに指定すること、
前記実行フラグメントをメモリ・フラグメントと演算フラグメントに区分化すること、
前記メモリ・フラグメントを前記仮想メモリ・ユニットに割り当て、前記演算フラグメントを前記仮想演算ユニットに割り当てること、
前記仮想メモリ・ユニットを物理メモリ・ユニットにアロケーティングし、前記仮想演算ユニットを物理演算ユニットにアロケーティングすること、
前記構成可能ユニットのアレイ内の位置上に前記物理メモリ・ユニットと前記物理演算ユニットを設置し、設置された前記位置間でデータ及び制御ネットワークをルーティングすること、及び、
設置された前記位置及びルーティングされた前記データ及び制御ネットワークのための構成データを有するビット・ファイルであって、前記構成可能ユニットのアレイのインスタンス上にロードされると、前記構成可能ユニットのアレイに前記データフロー・グラフを実施させるビット・ファイルを生成すること、
を有するシステム。
【発明の詳細な説明】
【優先出願】
【0001】
本出願は、米国特許出願第16/536,192号(発明の名称「再構成可能なアーキテクチャのためのコンパイラ・フロー・ロジック」、2019年8月08日出願(代理人整理番号SBNV 1006-2))の優先権及び利益を主張する。
【技術分野】
【0002】
本技術は、再構成可能アーキテクチャのコンパイラ・フローに関するものであり、粗粒度再構成可能アーキテクチャ及び他の分散実行システムのためのコンパイラ・フロー・ロジックに特に適用することができる。
【合体資料】
【0003】
以下は、ここに完全に記載されているかの如く、全ての目的のために参照により本出願に組み込まれる。
【0004】
2019年01月03日出願の米国特許出願番号16/239,252、発明の名称「再構成可能データ・プロセッサの仮想化」(代理人整理番号 SBNV 1000-1);
【0005】
2018年11月21日出願の米国特許出願番号16/197,826、発明の名称「再構成可能データ・プロセッサの構成ロード」, (代理人整理番号 SBNV 1001-1A);
【0006】
2018年11月21日出願の米国特許出願番号16/198,086、発明の名称「再構成可能データ・プロセッサの構成アンロード」、(代理人整理番号 SBNV 1001-1B);
【0007】
2019年1月29日出願の米国特許出願番号16/260,548、発明の名称「正規行列/転置読込とその再構成可能データ・プロセッサ」(代理人整理番号 SBNV 1005-1); 及び
【0008】
2019年5月9日出願の米国特許出願番号16/407,675、発明の名称「制御フローバリア及び再構成可能データ・プロセッサ」 (代理人整理番号 SBNV 1007-1)。
【背景技術】
【0009】
このセクションで議論される主題は、単にこのセクションで言及された結果として、先行技術であると仮定されるべきではない。同様に、このセクションで言及された、または背景として提供される主題に関連する問題は、先行技術において以前に認識されたと仮定されるべきではない。このセクションの主題は単に、請求項に記載された技術の実施態様に対応することができる、様々な手法を表しているに過ぎない。
【0010】
フィールド・プログラマブル・ゲートアレイFPGAを含む再構成可能プロセッサは、コンピュータ・プログラムを実行する汎用プロセッサを使用して達成され得るものよりも効率的または高速に様々な機能を実装するように構成され得る。いわゆる粗粒度再構成可能アーキテクチャ(CGRA)が開発されており、このアーキテクチャでは、アレイ内の構成可能ユニットが、典型的なより細粒度のFPGAで使用されるよりも複雑であり、様々なクラスの機能のより高速またはより効率的な実行を可能にすることができる。例えば、機械学習及び人工知能作業負荷のためのエネルギー効率のよいアクセラレータの実施態様を可能にすることができるCGRAが提案されている。Prabhakar, et al., "Plasticine: A Reconfigurable Architecture for Parallel Patterns"、ISCA '17, June 24-28, 2017, Toronto, ON, Canadaを参照されたい。
【0011】
CGRAは、性能、電力、またはエネルギー効率が最優先の場合、極めて魅力的なプラットフォームである。CGRAは、再構成可能な相互接続ファブリックを使用して、あるトポロジ内で相互接続される粗粒度の再構成可能な演算要素及びメモリ要素の構成である。これは、アーキテクチャ内の再構成可能コンポーネントがFPGAなどのアーキテクチャで一般に見られる細粒度のビットレベル粒度とは対照的に、命令、ワード、及びワードのベクトルなどのより粗い粒度で動作するため、粗粒度再構成可能と呼ばれる。CGRAにおけるプログラマブル・データ及び制御パスは、再構成可能な演算及びメモリ・コンポーネントをカスタマイズされ、深くネストされた、階層的なパイプラインに接続することによって、アプリケーションにおけるネストされた並列性を利用するために、それらを自然に適合させる。
【0012】
最新のアプリケーションはしばしば、幾つかのレベルのネストされたループレベルを有し、複数のレベルのネスティングにおける並列性を含む。このような深くネストされたループの場合、最も内側のループの本体のみに焦点を当てる従来のループ・パイプライン化方法では、しばしば、不十分な並列性を利用し、その結果、不十分なハードウェア利用となって、性能、電力、またはエネルギー効率が悪くなる。
【0013】
効率的なコンパイラ技術により、プログラマはアプリケーションを高レベル言語で記述することができるが、最適化のほとんどは自動的に行われる。高レベル言語をFPGA上のパイプライン及びステートマシンの階層に自動的に翻訳することのできるコンパイラが提案されている。Koeplinger et al、"Spatial: A Language And Compiler For Application Accelerators"、Proceedings Of The 39th ACM SIGPLAN Conference On Programming Language Design And Implementation (PLDI), 2018を参照されたい。
【0014】
約束された性能、電力、及びエネルギー効率の達成は、コンパイラ技術に決定的に依存する。CGRAコンパイラは、(i)複数レベルのネスティングでタスク、データ、及びパイプライン化された並列性を抽出するためにコード分析を実行し、(ii)再構成可能要素上で空間及び時間の両方でオペレーションを区分化及びスケジュール化し、(iii)オペレーションを再構成可能要素上に設置し、(iv)再構成可能要素間でデータ及び制御依存性をルーティングしなければならないので、通常のコンパイラよりもはるかに複雑である。
【0015】
したがって、ネストされたループをCGRAの再構成可能要素上に効率的にマッピングする機会が生じる。並列化とハードウェア使用率が改善される可能性がある。
【図面の簡単な説明】
【0016】
図面において、同様の参照符号は一般に、様々な表示を通して同様の部分を指す。また、図面は必ずしも縮尺通りではなく、その代わりに、開示される技術の原理を示すことに概して重点が置かれる。以下の記載において、開示される技術の様々な実施態様が、以下の図面に関連して説明される。
【0017】
【
図1】コンパイラ、ホスト、メモリ、及び、構成可能ユニットのアレイを備える再構成可能データ・プロセッサを含むシステムを示すシステム図である。
【0018】
【
図2】再構成可能データ・プロセッサにマップするための高レベル・プログラムを変換する一実施態様のブロック図である。
【0019】
【
図3】仮想メモリ・ユニットを複数の物理メモリ・ユニットにアロケーティングし、仮想演算ユニットを複数の物理演算ユニットにアロケーティングする一実施態様の構成図である。
【0020】
【
図4】複数の物理メモリ・ユニットを単一の物理メモリ・ユニットに融合し、複数の物理演算ユニットを単一の物理演算ユニットに融合する一実施態様のブロック図である。
【0021】
【
図5】単一レイヤResNetブロックのための高レベル・プログラムの例を示す。
【0022】
【
図6】ResNetブロックのデータフロー・グラフの一例を示す。
【0023】
【
図7A】データフロー・グラフをメモリ・アロケーション及び実行フラグメントに区分化する一例を示す。
【
図7B】データフロー・グラフをメモリ・アロケーション及び実行フラグメントに区分化する一例を示す。
【
図7C】データフロー・グラフをメモリ・アロケーション及び実行フラグメントに区分化する一例を示す。
【0024】
【
図8】メモリ・アロケーションを仮想メモリ・ユニットに指定し、実行フラグメントを仮想演算ユニットに指定する一実施態様。
【0025】
【
図9A】実行フラグメントをメモリ・フラグメント及び演算フラグメントに区分化する一実施態様を示す。
【
図9B】実行フラグメントをメモリ・フラグメント及び演算フラグメントに区分化する一実施態様を示す。
【0026】
【
図10】メモリ・フラグメントを仮想メモリ・ユニットにそれぞれ割り当て、演算フラグメントを仮想演算ユニットにそれぞれ割り当てる一実施態様を示す。
【0027】
【
図11】仮想メモリ・ユニットを1または複数の物理メモリ・ユニットにマッピングし、仮想演算ユニットを1または複数の物理演算ユニットにマッピングする一実施態様を示す。
【0028】
【
図12A】実行フラグメントを仮想演算ユニットにマッピングする一例を示す。
【
図12B】実行フラグメントを仮想演算ユニットにマッピングする一例を示す。
【0029】
【
図12C】単一の物理演算ユニットが仮想演算ユニット及び/またはメモリ・ユニットにマップされた実行フラグメントを実行するのに十分でない場合、スプリッティングを使用して、仮想演算ユニット及び/またはメモリ・ユニットを複数の物理演算ユニット及び/またはメモリ・ユニットにマップできることを示す。
【0030】
【
図13A】物理演算ユニット及び物理メモリ・ユニットを融合する一例である。
【0031】
【
図13B】別のやり方では異なるクロック・サイクルで別々の物理演算ユニット上で実行される複数のオペレーションを単一の物理演算ユニット上で実行することによる空間的融合の一例を示す。
【0032】
【
図13C】別々の実行コンテキストとして単一の物理演算ユニット上で複数のオペレーションを順次実行することによる時間的融合の一例を示す。
【0033】
【
図14A】
図1の再構成可能データ・プロセッサにおいて使用可能なタイル及びアレイ・レベル・ネットワークの簡略図である。
【
図14B】アレイ・レベル・ネットワーク内の素子を接続する例示的なスイッチ・ユニットを示す。
【0034】
【
図15】例示的な構成ユニットを示すブロック図である。
【発明を実施するための形態】
【0035】
以下の議論は、当業者が開示された技術を作成し、使用することを可能にするために提示され、特定の用途及びその要件との関連で提供される。開示された実施態様に対する種々の変形は、当業者には容易に明らかであり、本明細書で規定された全般的な原理は、開示された技術の趣旨及び範囲から逸脱することなく、他の実施態様及びアプリケーションに適用され得る。したがって、開示された技術は、示された実施態様に限定されることを意図するものではなく、本明細書で開示された原理及び特徴と一致する最も広い範囲が与えられるべきである。
[再構成可能データ・プロセッサ及びコンパイラ]
【0036】
図1は、コンパイラ196、ホスト120、メモリ140、及び再構成可能データ・プロセッサ110を含むシステムを示すシステム図である。
図1の例に示すように、再構成可能データ・プロセッサ110は、構成可能ユニットのアレイ190と、構成ロード/アンロード・コントローラ195とを含む。本明細書で使用される「構成ロード/アンロード・コントローラ」という語句は、構成ロード・コントローラと構成アンロード・コントローラとの組合せを指す。構成ロード・コントローラ及び構成アンロード・コントローラは別個のロジック及びデータ・パス・リソースを使用して実装されてもよく、または特定の実施形態に適合するように、共用ロジック及びデータ・パス・リソースを使用して実装されてもよい。幾つかの実施形態では、システムが本明細書で説明するタイプの構成ロード・コントローラのみを含むことができる。幾つかの実施形態では、システムが本明細書で説明するタイプの構成アンロード・コントローラのみを含むことができる。
【0037】
構成可能ユニットのアレイ190の構成は、ビットストリームまたはビット・ファイルとも呼ばれる構成ファイル198を作成するための、コンパイラ196による構成記述のコンパイル、構成ファイル198をアレイ190上の構成可能ユニットに分配することを伴う。一実施形態では、コンパイラ196がアプリケーション・プログラムからビット・ファイルへの変換を提供する。
【0038】
プロセッサ110は、ホスト120に接続された外部I/Oインタフェース130と、メモリ140に接続された外部I/Oインタフェース150とを含む。I/Oインタフェース130,150は、バス・システム115を介して、構成可能ユニットのアレイ190と構成ロード/アンロード・コントローラ195に接続する。バス・システム115は、データの1つのチャンクを搬送するバス幅を有してもよく、本例ではバス幅は128ビットとすることができる(全体を通した128ビットへの言及は、より一般的にはチャンク・サイズの一例と見なすことができる)。一般に、構成ファイルのチャンクはビット数Nのデータを有することができ、バス・システムはNビットのデータを1つのバスサイクルで転送するように構成することができ、ここで、Nは、任意の実用的なバス幅である。分散シーケンスで分配されるサブファイルは、1つのチャンク、または特定の実施形態に適した他の量のデータを含むことができる。手順は、本明細書では、各々が1つのデータのチャンクから成るサブファイルを使用して説明される。もちろん、この技術は、例えば、2つのバスサイクルに分配された2つのチャンクを含むサブファイルを含む、異なるサイズのサブファイルを分配するように構成することができる。
【0039】
構成ファイルを用いて構成可能ユニットのアレイ190内の構成可能ユニットを構成するために、ホスト120は、再構成可能データ・プロセッサ110内のインタフェース130、バス・システム115、及びインタフェース150を介して、構成ファイルをメモリ140に送信することができる。ホスト120はバス・システム125を介してインタフェース130に接続する。メモリ140はバス・システム125を介してインタフェース150に接続する。構成ファイルは、構成可能プロセッサ110外のデータパス内を含む特定のアーキテクチャに適するように、多くの方法でロードされ得る。構成ファイルは、メモリ・インタフェース150を介してメモリ140から検索することができる。次いで、構成ファイルのチャンクは、本明細書で説明するように分配シーケンスで、再構成可能データ・プロセッサ110における構成可能ユニットのアレイ190内の構成可能ユニットに送信することができる。
【0040】
外部クロック発生器170または他のクロック信号源は、構成可能ユニットのアレイ190、バス・システム115、及び外部データI/Oインタフェースを含む、再構成可能データ・プロセッサ110内の素子にクロック信号175またはクロック信号を供給することができる。
【0041】
図2は、再構成可能データ・プロセッサ100にマップするための高レベル・プログラムを変換する一実施態様のブロック
図200である。再構成可能データ・プロセッサ100へのアプリケーションのマッピングは、算術及び論理オペレーションの再構成可能データ・プロセッサ100の再構成可能ユニットへのマッピングを含む。設計は、PyTorch、ONNX、及びTensorflowなどの機械学習フレームワーク、またはC、C++、Java、Python、またはSpatialなどの高レベル言語を使用して、高レベルの抽象化で指定される。Koeplinger et al., "Spatial: A Language And Compiler For Application Accelerators," Proceedings Of The 39th ACM SIGPLAN Conference On Programming Language Design And Implementation (PLDI), Proceedings of the 43rd International Symposium on Computer Architecture, 2018.を参照されたい。提案した技術を用いて、高レベルの抽象化で記述した行動を実現する構成ビット構造を自動的に生成する。
[コンパイラ・フロー]
【0042】
高レベル・プログラム202は、C、C++、Java、Python、またはSpatial等のプログラミング言語で書かれたアプリケーション・プログラムまたはソース・コードである。例えば、高レベル・プログラム202は各レイヤが異なるプロパティを有する幾つかのネストされたループを含むように、様々なサイズ及びデータタイプの幾つかのレイヤを用いて畳み込みニューラルネットワーク(CNN)処理を実施することができる。例えば、高レベル・プログラム202は、入力及び重み付けにアクセスするためのメモリ・オペレーションと、行列乗算を実行するための浮動小数点演算とを含むことができる。別の例として、高レベル・プログラム202は、次のレイヤの出力を生成するために、前のレイヤからの入力値に次のレイヤの重みをロードして乗算する、高い反復カウントを有するネストされたループ、及びループ本体を含むことができる。高レベル・プログラム202は、粗粒度パイプライン化を使用して利用することのできる最も外側のループ本体のループレベルの並列性を有する。これは、ループ展開、SIMDベクトル化、及びパイプライン化を使用して同様に利用できる、最も内側のループ本体の命令レベルの並列性を有する。
【0043】
ループに関して、ループ本体に直接ネストされたループは、外側親ループの子ループと呼ばれる。ループは、子を持たない場合、すなわち、その本体内にネストされたループがない場合、最も内側のループと呼ばれる。ループは、親を有さない場合、すなわち、別のループの本体内にネストされていない場合、最も外側のループである。不完全にネストされたループは、非ループ文(例えば、基本演算、論理演算、関係演算のオペレーション)と1または複数の子ループが混在した本文を持つ。不完全にネストされたループにおける並列性は、任意のまたはすべてのループレベルにおいて、及びループ本体を含むオペレーションにおいて利用することができる。並列性は、細粒度及び粗粒度パイプラインの並列性、データの並列性、及びタスクの並列性などの複数の形式で発生する。
【0044】
アクション1において、データフロー・グラフ・ジェネレータ204は、高レベル・プログラム202のデータフロー・グラフ206を生成する。コンパイルは、入力動作記述を中間表現に変換する。この第1ステップは、偽データ依存性除去、デッドコード除去、及び定数畳み込みなどの様々なコード最適化を含むことができる。コンパイルによって生成された中間表現は、オペレーション間のデータ依存性及び制御依存性を示す。
【0045】
データフロー・グラフ206内のノードは、制御構造、データ・オペレーション、及びメモリ・アロケーションを表し、エッジは、データ及び効果の依存性を表す。プログラム内の各ループは、中間表現内において「コントローラ」として表される。データフロー・グラフ206は、分岐、ループ、関数呼び出し、及び制御依存性の他の変形をサポートする。データフロー・グラフ206が構築されると、ループ展開、ループ・パイプライン化、ループ分裂/融合、及びループ・タイリングを含むループ変換に焦点を当てて、追加の分析または最適化を実行することができる。
【0046】
アクション2において、パーティショナ214は、データフロー・グラフ206をメモリ・アロケーション224及び実行フラグメント222に区分化する。実行フラグメント222に関しては、それらはデータに対するオペレーションを表す。実行フラグメントは、作業量を表すプログラムの部分を含むことができる。実行フラグメントは、ループのセット、グラフ・ノードのセット、または同期を必要とする何らかの他の作業単位によって包含される計算を備えることができる。実行フラグメントは、プログラムによって必要とされるように、固定または可変量の作業を含むことができる。同様に、実行フラグメント222の異なるものは、異なる量の計算を含むことができる。実行フラグメント222は、並列パターンまたは並列パターンの一部を表すことができる。また、実行フラグメント222は、非同期に実行可能である。
【0047】
一実施形態では、パーティショナ214は、メモリ・アロケーション224を生成するメモリアロケータ216と、実行フラグメント222を生成する実行フラグメント・ジェネレータ212とを備える。一実施形態では、データフロー・グラフ206の実行フラグメント222への区分化は、データフロー・グラフ206のネストされたループの少なくとも1つの最も内側のループ内の計算を別個の実行フラグメントとして処理することを更に含む。別の実施形態では、データフロー・グラフ206の実行フラグメント222への区分化は、データフロー・グラフ206の最も内側のループの周りの外側ループの計算を別個の実行フラグメントとして処理することを更に含む。不完全にネストされたループの場合、ループ本体内のネストされたループの開始までのループ本体内のオペレーションは、別個の実行フラグメントとして一緒にグループ化される。
【0048】
メモリ・アロケーション224に関して、これらは、データフロー・グラフ206を実装するために必要なデータのためのオンチップ及び/またはオフチップ・メモリ内の論理メモリ空間の作成を表す。メモリ・アロケーション224は、ハードウェア・リソース(機能ユニット、ストレージ、または接続コンポーネント)のタイプと数を規定する。メインメモリは、DRAMと略され、メモリ・アロケーション224が行われるオフチップ・メモリの一例である。スクラッチパッド・メモリ、すなわちSRAMは、メモリ・アロケーション224が行われるオンチップメモリの一例である。メモリ・アロケーション224が、アプリケーションに見られる様々な一般的に発生するアクセス・パターン及びレイアウトに対してなされ得る他のメモリタイプ。このようなメモリタイプの例には、読み出し専用のルックアップ・テーブル(LUT)、固定サイズキュー(FIFO)、及びレジスタ・ファイルが含まれる。
【0049】
アクション3において、ディジグネータ232は、メモリ・アロケーション224を仮想メモリ・ユニット244に指定し、実行フラグメント222を仮想演算ユニット242に指定する。
【0050】
アクション4において、実行フラグメント・パーティショナ252は、実行フラグメント222をメモリ・フラグメント264と演算フラグメント262に区分化する。各メモリ・フラグメントには、メモリ・アクセスに至るアドレス計算が含まれる。演算フラグメントは、親実行フラグメント内の他のすべてのオペレーションを含む。一実施形態では、各実行フラグメントが、複数のメモリ・フラグメントと、正確に1つの演算フラグメントとに分割される。コンパイラ196は、メモリ・アクセスで使用されるアドレスへの入力が、コンパイラ196が一定値または(バインドされた)ループ/パターン・イテレータの何れかに到達するまで、再帰的にフラグ付けられるように、逆データフロー解析を使用して区分化を実行する。単一の実行フラグメントは、元のループ本体に存在するメモリ・アクセスの数に応じて、1または複数のメモリ・フラグメントを生成する場合がある。同じメモリ・アドレッシング・ロジックが、複数のメモリ・アクセス間で共有される場合、アドレス計算が重複して、同じ実行フラグメントから複数のメモリ・フラグメントを作成することがある。
【0051】
実行フラグメント222のメモリ・フラグメント264は、データ構造にインデックスを付けるように構成される。メモリ・フラグメント264の少なくとも1つは、メモリ・アロケーション224の1つの論理メモリ空間内のデータ構造にインデックスを付ける。各演算フラグメントとメモリ・フラグメントは、ループ本体に対応する実行フラグメント内のオペレーションが直接含まれているすべてのループに関する情報を保持する。一実施形態では、これは各ループのループ・イテレータの計算を各演算フラグメント及びメモリ・フラグメントに複製することに対応する。この複製は、各フラグメントが元のプログラムと同じ反復行為を保存することを可能にし、同時にループ・イテレータの分散計算も可能にする。
【0052】
アクション5において、アサイナ266は、メモリ・フラグメント264を仮想メモリ・ユニット244に割り当て、演算フラグメント262を仮想演算ユニット242に割り当てる。仮想メモリ・ユニット244は、対応するメモリ・フラグメント264を実施する。仮想演算ユニット242は、対応する演算フラグメント262を実施する。
【0053】
各メモリ・フラグメントは、アクセスされるメモリに対応する仮想メモリ・ユニットにオペレーション別にマッピングされる。各オペレーションは、その仮想メモリ・ユニットのための対応する構成中間表現(IR)に下げられる。各演算フラグメントは、新たにアロケーティングされた仮想演算ユニットにオペレーション別にマッピングされる。各オペレーションは、その仮想演算ユニットのためのその対応する構成中間表現(IR)に下げられる。
【0054】
アクション6において、アロケータ274は、仮想メモリ・ユニット244を物理メモリ・ユニット284にアロケーティングし、仮想演算ユニット242を物理演算ユニット282にアロケーティングする。
【0055】
アクション7において、プレーサ及びルータ286は物理メモリ・ユニット284及び物理演算ユニット282を構成可能ユニットのアレイ100内の位置に設置し、設置された位置の間でデータ及び制御ネットワークをルーティングする。一実施形態では、これは更に、各物理メモリ及び演算ユニット内にカウンタ及びレジスタなどの物理リソースをアロケーティングすることを含む。
【0056】
アクション8で、ビット・ファイル・ジェネレータ292は、プレーサ及びルータ286によって生成された設置及びルーティング情報296にアクセスし、設置位置及びルーティングされたデータ及び制御ネットワークのための構成データと共にビット・ファイル198を生成する。一実施形態では、これは帯域幅を最大化し、待ち時間を最小化しながら、構成可能ユニットのアレイ100上にユニットを設置し、ルーティングすることによって、物理メモリ及び演算ユニットの座標及び通信リソースを割り当てることを含む。
【0057】
アクション9において、構成ロード/アンロード・コントローラ195は、構成可能ユニットのアレイ100のインスタンス上にビット・ファイル198をロードし、構成可能ユニットのアレイ100にデータフロー・グラフ206を実装させる。
[スプリッティング]
【0058】
図3は、仮想メモリ・ユニット244を複数の物理メモリ・ユニット284、285にアロケーティングし、仮想演算ユニット242を複数の物理演算ユニット282、283にアロケーティングする一実施態様のブロック
図300である。これは、
図3のアクション6において、アロケータ274によって行われる。一実施形態では、該アロケーションは、複数の物理メモリ・ユニット284、285及び複数の物理演算ユニット282、283のハードウェア制約を満たす。
【0059】
一実施形態では、該アロケーティングは、少なくとも部分的に、特定の物理演算ユニットによって受け入れられる入力の数に依存する。一実施形態では、第1ステップとして、それぞれの仮想メモリ及び演算ユニットにおいて、仮想メモリ及び演算ユニットが物理的に実現可能になるまで、オペレーションが除去される。一実施形態では、第2ステップとして、除去されたオペレーションは別個の新しい仮想メモリ及び演算ユニットにグループ化される。一実施形態では、これらの2つのステップがすべての仮想メモリ及び演算ユニットが物理的に実現可能になるまで繰り返される。一実施形態では、コンパイラ196が次に、元の仮想メモリ及び演算ユニットにおける依存性に基づいて、仮想メモリと演算ユニットとの間のIRにデータ及び制御通信チャネルを追加する。
【0060】
本出願の文脈において、「物理的に実現可能」は、目標アーキテクチャ・パラメータでの分析を用いてモデル化される。一実施形態では、該パラメータは、物理メモリ・ユニットで利用可能なオンチップSRAMの容量、算術論理ユニット(ALU)のステージ数、ステージ当たりのレジスタ数、各ALUステージの能力、ALUとレジスタとの間で利用可能な接続、及びレジスタ間で利用可能な接続を含む。一実施形態では、オペレーションが除去される順序は、変化することができ、その目的関数が物理的に実現可能なユニットの最終数を最小化することであるヒューリスティックに基づく。他の実施形態では、ヒューリスティックは、物理的に実現可能なユニットの数を増加させ得る総実行時間を最小化するために、異なる目的関数を用いて適用され得る。
【0061】
アクション7において、プレーサ及びルータ286は複数の物理メモリ・ユニット284、285及び複数の物理演算ユニット282、283を構成可能ユニットのアレイ100内の位置に設置し、設置された位置の間でデータ及び制御ネットワークをルーティングする。
【0062】
アクション8において、ビット・ファイル・ジェネレータ292は、プレーサ及びルータ286によって生成された設置及びルーティング情報296にアクセスし、設置位置及びルーティングされたデータ及び制御ネットワークのための構成データと共にビット・ファイル198を生成する。
【0063】
アクション9において、構成ロード/アンロード・コントローラ195は、構成可能ユニットのアレイ100のインスタンス上にビット・ファイル198をロードし、構成可能ユニットのアレイ100にデータフロー・グラフ206を実装させる。
[融合]
【0064】
図4は、複数の物理メモリ・ユニット402、404、406を単一の物理メモリ・ユニット424に融合し、複数の物理演算ユニット402、404、406を単一の物理演算ユニット424に融合する一実施態様のブロック
図400である。これは、
図4のアクション7において、融合ロジック416に基づいてフューザ424によって行われる。融合の目標は、物理メモリ及び演算ユニットへのオペレーションのより良いパッキングによって、リソースの消耗を低減することである。「空間的融合」と呼ばれる一実施形態では、結果として生じるリソース使用率が依然として物理的に実現可能である限り、利用不足のリソースを有する2つ以上の物理メモリまたは演算ユニットを、効率のためにより高いリソース利用率を有する単一のメモリまたは演算ユニットに統合することができる。「時間的融合」と呼ばれる別の実施形態では、2つ以上の物理メモリまたは演算ユニットを、単一の新しい物理メモリまたは演算ユニット内で別個の実行コンテキストとして順次実行するようにそれらをスケジューリングすることによって統合することができる。更に他の実施形態では、最適化のそのような組み合わせがコンパイル・フローによって利益があると見なされる場合、空間及び時間の両方における融合ルールの組み合わせを使用することができる。融合ルールは、ヒューリスティック、探索アルゴリズム、または他のアルゴリズム最適化手法を使用して決定され得る。
【0065】
一実施形態では、融合は、少なくとも部分的に、物理メモリ・ユニットで利用可能なオンチップSRAMの容量と、単一の物理演算ユニット内のALUステージの数とに依存する。一実施形態では、空間的融合は、別のやり方では異なるクロック・サイクルで別々の物理演算ユニット402、404、406上で実行される複数のオペレーションを単一の物理演算ユニット424上で実行することを含む。一実施形態では、時間的融合は、単一の物理演算ユニット424上で複数のオペレーションを別々の実行コンテキストとして順次実行することを含む。一実施形態では、特定の物理演算ユニット上にグループ化されたデータフロー・グラフ206からの複数のオペレーションが、特定の物理演算ユニット内のリソース上にマッピングされる。他の実施形態では、必要な物理メモリ及び演算ユニットの数と達成された性能との間のトレードオフを探すヒューリスティックが使用される。
【0066】
アクション8において、プレーサ及びルータ286は、単一の物理メモリ・ユニット424及び単一の物理演算ユニット424を構成可能ユニットのアレイ100内の位置に設置し、設置された位置間でデータ及び制御ネットワークをルーティングする。
【0067】
アクション9で、ビット・ファイル・ジェネレータ292は、プレーサ及びルータ286によって生成された設置及びルーティング情報296にアクセスし、設置位置及びルーティングされたデータ及び制御ネットワークのための構成データと共にビット・ファイル198を生成する。
【0068】
アクション10において、構成ロード/アンロード・コントローラ195は、構成可能ユニットのアレイ100のインスタンス上にビット・ファイル198をロードし、構成可能ユニットのアレイ100にデータフロー・グラフ206を実装させる。
【0069】
幾つかの実施形態では、
図2、
図3、及び
図4を参照して説明したコンパイラ・フロー・ロジックはコンパイラ196によって実施される。
[ResNetの例]
-高レベル・プログラム
【0070】
図5は、PyTorchにおける高レベル・プログラム202の一例を示す。この例は、自動画像分類に一般的に使用される畳み込みニューラル・ネットワーク(CNN)の一般的に使用されるタイプである残差ニューラルネットワーク(ResNet)ブロックを実施する。ResNetアーキテクチャは、畳み込み演算の幾つかのレイヤを含み、各レイヤは、前のレイヤの出力及び現在のレイヤの重みフィルタに対して幾つかの畳み込み演算を実行する。ResNetアーキテクチャは、また、一部のレイヤの出力を、ネットワーク内の更に遠いレイヤの入力に、中間の2つまたは3つのレイヤを「スキップ」して接続するスキップ接続を含む。ResNetモデルは、また、ReLU及びバッチ正規化のような非線形関数をその間に含む。バッチ正規化は、データ標準化をネットワーク・アーキテクチャの不可欠な部分にすることによって、深いネットワーク・トレーニングを加速するための方法である。
-データフロー・グラフ
【0071】
図6は、ResNetブロック600のデータフロー・グラフ206の一例を示す。この例は、入力602に対して畳み込み612を実行し、出力614を生成する。バッチ正規化622は、出力614上で実行され、出力624を生成する。次に、バッチ正規化出力624は、ReLU活性化632によってゼロ値と最大正値との間で線形化され、ReLU活性化出力634を生成する。平均プーリング642は、ReLU活性化出力634に対して実行され、平均プール出力644を生成する。平均プール出力644は、次に、入力として線形レイヤ652(例えば、完全に接続されたネットワーク)に供給され、ResNetブロック600の最終出力654を生成する。線形レイヤ652は、1000個のニューロン(重み付け)を有する。
【0072】
入力602の次元性は4×3×224×224であり、ここで、4はバッチ・サイズであり、3は入力チャネルの数(例えば、RGB画像チャネル)であり、224は入力幅(例えば、画像内の画素列の数)であり、224は入力高さ(例えば、画像内の画素幅の数)である。畳み込み612の次元性は64×3×7×7であり、ここで、64は畳み込みフィルタの数であり、3は各畳み込みフィルタ内のカーネルの数であり、7はカーネル幅(例えば、カーネル内の重み列の数)であり、7はカーネル高さ(例えば、カーネル内の重み行の数)である。出力614の次元性は4×64×112×112であり、ここで、4はバッチ・チャネルであり、64は出力チャネルの数であり、112は出力幅(例えば、特徴マップ内の特徴列の数)であり、112は出力高さ(例えば、特徴マップ内の特徴行の数)である。最終出力654の次元性は4×100であり、ここで、4はバッチ・チャネルであり、1000は出力チャネルの数である。
-中間表現及び領域確保
【0073】
図7A、
図7B、及び
図7Cは、データフロー・グラフ206として内部的に表現される高レベル・プログラム202として、ResNetアーキテクチャのサブセットの実施態様例を示す。一実施形態では、高レベル・プログラムがSpatial高レベル言語で書くことができる。D. Koeplinger et al., "Spatial: A Language And Compiler For Application Accelerators," Proceedings Of The 39th ACM SIGPLAN Conference On Programming Language Design And Implementation (PLDI), Proceedings of the 43rd International Symposium on Computer Architecture, 2018を参照されたい。
【0074】
図7A、
図7B、及び
図7Cは、データフロー・グラフ206をメモリ・アロケーション224及び実行フラグメント222に区分化する一例を示す。
図7A、
図7B、及び
図7Cでは、イタリック体のコードがメモリ・アロケーション224を識別し、太字のコードが実行フラグメント222を識別する。第1のメモリ・アロケーション701は、入力602のためにオンチップSRAM内にメモリ空間をアロケーティングする。第2のメモリ・アロケーション702は、畳み込み612のためにオンチップSRAM内にメモリ空間をアロケーティングする。第3のメモリ・アロケーション703は、出力614のためにオンチップSRAM内にメモリ空間をアロケーティングする。
【0075】
第1の実行フラグメント704は、入力602と畳み込み612の畳み込み重み付けとの間で畳み込み612を実施する。第2の実行フラグメント705は、出力614の累算を実施する。
【0076】
第4のメモリ・アロケーション706は、バッチ正規化622の出力624のためにオンチップSRAM内にメモリ空間をアロケーティングする。第5のメモリ・アロケーション707は、バッチ正規化622のスケーリング値のためにオンチップSRAM内にメモリ空間をアロケーティングする。第6のメモリ・アロケーション708は、バッチ正規化622のバイアス値のためにオンチップSRAM内にメモリ空間をアロケーティングする。
【0077】
第3の実行フラグメント709は、バッチ正規化622の平均計算1302を実施する。第4の実行フラグメント710は、バッチ正規化622の平均正規化1206を実施する。
【0078】
図7Bでは、第5の実行フラグメント711が、バッチ正規化622の分散計算1304を実施する。第6の実行フラグメント712は、バッチ正規化622の分散正規化1207を実施する。第7の実行フラグメント713は、バッチ正規化622の出力624の計算を実施する。
【0079】
第7のメモリ・アロケーション714は、ReLU活性化632の出力634のために、オンチップSRAM内にメモリ空間をアロケーティングする。第8の実行フラグメント715は、ReLU活性化632の出力634の計算を実施する。
【0080】
第8のメモリ・アロケーション716は、平均プーリング642の出力644のためにオンチップSRAM内にメモリ空間をアロケーティングする。第9の実行フラグメント717は、平均プーリング642の出力644の計算を実施する。第10の実行フラグメント718は、平均プーリング642の出力644の累算を実施する。
【0081】
図7Cでは、第9のメモリ・アロケーション719が、線形レイヤ652のニューロン(重み付け)のためにオンチップSRAM内にメモリ空間をアロケーティングする。第10のメモリ・アロケーション20は、最終出力654のためにオンチップSRAM内にメモリ空間をアロケーティングする。第11の実行フラグメント721は、最終出力654の計算を実施する。
-指定
【0082】
図8は、メモリ・アロケーション224を仮想メモリ・ユニット244に指定し、実行フラグメントを仮想演算ユニット242に指定する一実施態様の例を示す。
図8では、
図7A、
図7B、及び
図7Cにおける10個のメモリ・アロケーション224はそれぞれ、対応する仮想メモリ・ユニット(VMU)に指定される。また、
図8では、
図7A、7B、及び7Cの11個の実行フラグメントはそれぞれ、対応する仮想演算ユニット(VCU)に指定される。
-実行フラグメントの領域確保
【0083】
図9A及び
図9Bは、実行フラグメント222をメモリ・フラグメント264及び演算フラグメント262に区分化する一実施態様を示す。
図9Aは、入力602と畳み込み612の畳み込み重み付けとの間の畳み込み612を実施する第1の実行フラグメント704が、第1のメモリ・フラグメント901、第2のメモリ・フラグメント902、及び演算フラグメント903に区分化されることを示す。
図9Bはまた、メモリ・アクセスのために第1及び第2のメモリ・フラグメント901、902(MF1a、MF1b)によって計算されたそれぞれのアドレスを示す。
【0084】
図10は、メモリ・フラグメント901、902を仮想メモリ・ユニット1002、1022(VMU 1、VMU 2)にそれぞれ割り当て、演算フラグメント903を仮想演算ユニット1014(VCU 1)に割り当てる一実施態様を示す。アドレス計算901、902(MF1a、MF1b)は、それぞれ、アロケーション904、905(A1、A2)を備えた仮想メモリ・ユニット1002、1022(VMU 1、VMU 2)にアロケーティングされる。
【0085】
図11は、仮想メモリ・ユニット1002、1022(VMU 1、VMU 2)を1または複数の物理メモリ・ユニット1102、1112、1122、1132、1142(PMU 1_0、PMU 1_1、PMU 2_0、PMU 2_1、PMU 2_2)にマッピングし、仮想演算ユニット1014(VCU 1)を1または複数の物理演算ユニット1104、1124(PCU 1_0、PCU 1_1)にマッピングする一実施態様を示す。
【0086】
仮想メモリ・ユニット1002(VMU 1)は、物理メモリ・ユニット1102(PMU 1_0)及び物理メモリ・ユニット1112(PMU 1_1)にマッピングされる。仮想メモリ・ユニット1002(VMU 1)の元のアドレス指定904(A1)は、物理メモリ・ユニット1102、1112(PMU 1_0、PMU 1_1)の重複アドレス指定1101、1102(A1_0、A1_1)としてそれぞれ表現される。
【0087】
仮想メモリ・ユニット1022(VMU 2)は、物理メモリ・ユニット1122(PMU 2_0)、物理メモリ・ユニット1132(PMU 2_1)、及び物理メモリ・ユニット1142(PMU 2_1)にマッピングされる。仮想メモリ・ユニット1022(VMU 2)の元のアドレス指定905(A2)は、物理メモリ・ユニット1122,1132,1142(PMU 2_0、PMU 2_1、PMU2_2)の重複アドレス指定1103,1104,1105(A2_0,A2_1,A2_2)としてそれぞれ表現される。
【0088】
仮想演算ユニット1014(VCU 1)は、物理演算ユニット1104(PCU 1_0)及び物理演算ユニット1124(PCU 1_1)にマッピングされる。
【0089】
図12A及び
図12Bは、実行フラグメント713を、4つの入力を有する仮想演算ユニット(VCU7)にマッピングする一例を示す。実行フラグメント713は、第1のメモリ・フラグメント1201、第2のメモリ・フラグメント1202、第3のメモリ・フラグメント1203、第4のメモリ・フラグメント1205、及び演算フラグメント1204に区分化される。
【0090】
図12Bでは、仮想演算ユニット(VCU 7)が4つの入力を有するので、4つのメモリ・フラグメント1201、1202、1203、1205のすべてを処理して、実行フラグメント713の演算フラグメント1204を計算することができる。
【0091】
単一の物理演算ユニットが、仮想演算及び/またはメモリ・ユニットにマッピングされた実行フラグメントを実行するのに十分でない場合、スプリッティングを使用して、仮想演算及び/またはメモリ・ユニットを複数の物理演算及び/またはメモリ・ユニットにマッピングすることができる。そして、複数の物理演算及び/またはメモリ・ユニットが、一緒に実行フラグメントを実行する。
【0092】
図12Cを参照して、単一の物理演算ユニットが3つの入力のみを有することを想定する。しかしながら、仮想演算ユニット(VCU 7)は4つの入力を有する。これを説明するために、実行フラグメント713の演算フラグメント1204を計算するために、2つの物理演算ユニット(PCU 7_0及びPCU 7_1)が使用される。これは、仮想演算ユニット(VCU 7) を2つの物理演算ユニット(PCU 7_0 及びPCU 7_1) にマッピングすることによって達成される。
【0093】
図13Aは、物理演算ユニット及び物理メモリ・ユニットを融合する一例である。
図13Aでは、様々なメモリ・フラグメント及び演算フラグメントを実装する物理演算ユニット及び物理メモリ・ユニットが接続されている。接続は、データフロー・グラフ206によって要求されるデータ依存性及び制御依存性に従う。
-空間的融合
【0094】
図13Bは、別のやり方では異なるクロック・サイクルで別々の物理演算ユニット上で実行される複数のオペレーションを、単一の物理演算ユニット上で実行することによる空間的融合の一例を示す。
図13Bでは、PCU3_0とPCU4_0が1つのPCU3_0_4_0に統合されている。また、PCU5_0とPCU6_0は1つのPCU5_0_6_0に統合されている。
-時間的融合
【0095】
図13Cは、別々の実行コンテキストとして単一の物理演算ユニット上で複数のオペレーションを順次実行することによる時間的融合の一例を示す。
図13Cでは、PCU3_0、PCU4_0、PCU5_0、PCU6_0 が1つのPCU3_0_4_0_5_0_6_0に統合されている。これは、1つのPCU3_0_4_0_5_0_6_0 が融合された演算フラグメント1302、1206(CF3/4)を1セグメントの間実行し、そしてコンテキストを変更して、融合された演算フラグメント1304、1207(CF5/6)を実行すること意味する。CF3/4の後の値は、(それが、CF5/6への入力として使用される中間値であるので)ユニットに戻される。この自己ループの実施態様は、ハードウェアの実施形態に依存するが、PCUの出力をそれ自身にフィードバックすることによって、PCU内の内部レジスタまたはメモリとして、または外部ネットワークを使用して実現することができる。別の実施形態では、PCUにフィードバックされたデータは、PMUまたはPMUのセットなどの別個のメモリ・ユニットに格納することができる。
[再構成可能タイル]
【0096】
図14Aは、
図1の再構成可能データ・プロセッサにおいて使用可能なタイル及びアレイ・レベル・ネットワークの簡略
図1400である。
図14Bは、アレイ・レベル・ネットワークにおける素子を接続する例示的なスイッチ・ユニットを示す。この例では、構成可能ユニット300のアレイが複数のタイプの構成可能ユニットを含む。この例における構成可能ユニットのタイプは、パターン計算ユニット(PCU)、パターン・メモリ・ユニット(PMU)、スイッチ・ユニット(S)、及びアドレス生成及び結合ユニット(それぞれ2つのアドレス生成器AG及び共用CUを含む)を含む。これらのタイプの構成可能ユニットの機能の例については、「Prabhakar et al., "Plasticine: A Reconfigurable Architecture For Parallel Patterns", ISCA '17, June 24-28, 2017, Toronto, ON, Canada」を参照されたく、また、上記文献は本明細書に完全に記載されているかのように参照により組み込まれる。
【0097】
これらの構成可能ユニットのそれぞれは、プログラムを実行するためのセットアップまたはシーケンスの何れかを表すレジスタまたはフリップフロップのセットを備える構成ストアを含み、ネストされたループの数、各ループ・イテレータの限界、各ステージに対して実行される命令、オペランドのソース、及び、入力及び出力インタフェースのネットワーク・パラメータを含むことができる。
【0098】
更に、これらの構成可能ユニットのそれぞれは、ネストされたループまたは他のものにおける進行を追跡するために使用可能な状態を記憶するレジスタまたはフリップフロップのセットを備える構成ストアを含む。構成ファイル198は、プログラムを実行する各構成要素の初期構成または開始状態 を表すビットストリームを含む。このビットストリームは、ビット・ファイルと呼ばれる。プログラム・ロードは、ビット・ファイルの内容に基づいて構成可能ユニットのアレイ190に構成ストアをセットアップし、全ての構成要素がプログラム(つまり、マシン)を実行できるようにする処理である。また、プログラム・ロードは、全てのPMUメモリのロードを必要とすることもある。
【0099】
アレイ・レベル・ネットワークは、アレイ内の構成可能ユニットを相互接続するリンクを含む。アレイ・レベル・ネットワーク内のリンクは、1以上の物理バスを含み、この場合では、チャンクレベル・ベクトル・バス(例えば、128ビットのデータ)、ワードレベル・スカラバス(例えば、32ビットのデータ)、及び、複数ビットレベルの制御バスの3種類の物理バスを含む。例えば、スイッチ・ユニット1411と1412との間の相互接続1421は、128ビットのベクトル・バス幅を有するベクトル・バス相互接続と、32ビットのスカラ・バス幅を有するスカラ・バス相互接続と、制御バス相互接続とを含む。
【0100】
3種類の物理バスは、転送されるデータの粒度が異なる。一実施形態では、ベクトル・バスがそのペイロードとして16バイト(=128ビット)のデータを含むチャンクを搬送することができる。スカラ・バスは32ビットのペイロードを持つことができ、スカラ・オペランドまたは制御情報を搬送することができる。制御バスは、トークン及び他の信号などの制御ハンドシェイクを搬送することができる。ベクトル・バスとスカラ・バスはパケット交換が可能であり、各パケットの宛先を示すヘッダと、パケットが順不同で受信されたときにファイルを再構成するために使用できるシーケンス番号などのその他の情報を含む。各パケットヘッダには、宛先スイッチ・ユニットの地理的座標(例:アレイ内の行と列)を識別する宛先識別子と、宛先ユニットに到達するために使用される宛先スイッチ上のインタフェースを識別するインタフェース識別子(例:北、南、東、西など)を含めることができる。制御ネットワークは、例えば、デバイス内のタイミング回路に基づいて切り換えられた回路であり得る。設定ロード/アンロード・コントローラは、128ビットの構成データのチャンクごとにヘッダを生成できる。ヘッダは、ヘッダ・バス上で、構成可能ユニットのアレイ190内の各構成可能ユニットに送信される。
【0101】
一例では、128ビットのデータのチャンクが、構成可能ユニットへのベクトル入力としてチャンクを提供するベクトル・バス上で送信される。ベクトル・バスには、128本のペイロードラインと、一組のヘッダラインを含めることができる。ヘッダには、チャンクごとに、シーケンスIDを含めることができ、それは、以下を含み得る:
【0102】
チャンクがスクラッチパッド・メモリまたは構成ストアデータであることを示すビット。
・チャンク番号を形成するビット。
・列識別子を示すビット。
・行識別子を示すビット。
・構成要素識別子を示すビット。
【0103】
ロード・オペレーションの場合、構成ロード・コントローラは、N-1から0までの順序で、N個のチャンクを構成可能ユニットに送信することができる。この例では、6つのチャンクが、チャンク5->チャンク4->チャンク3->チャンク2->チャンク1->チャンク0 の最上位ビット・ファーストの順序で送信される(この最上位ビット・ファーストの順序は、チャンク5がアレイ構成ロード・コントローラからの分配シーケンスのラウンド0に分配されることに注意する)。アンロード・オペレーションの場合、構成アンロード・コントローラは、順序のアンロード・データをメモリに書き出すことができる。ロード・オペレーション及びアンロード・オペレーションの両方について、構成可能ユニット内の構成データ・ストア内の構成シリアル・チェーン内のシフトは、LSB(最下位ビット)からMSB(最上位ビット)へ、またはMSBアウト・ファーストである。
【0104】
図14Bは、アレイ・レベル・ネットワーク内の素子を接続する例示的なスイッチ・ユニットを示す。
図14Bの例に示すように、スイッチ・ユニットは、8つのインタフェースを有することができる。スイッチ・ユニットの北、南、東、及び西インタフェースは、スイッチ・ユニット間の接続に使用される。スイッチ・ユニットの北東、南東、北西、及び南西インタフェースはそれぞれ、PCUまたはPMUインスタンスへの接続を行うために使用される。各タイル象限内の2つのスイッチ・ユニットのセットは、複数のアドレス生成(AG)ユニットと、複数のアドレス生成ユニットに接続された結合ユニット(CU)とを含むアドレス生成及び結合ユニット(AG CU)への接続を有する。結合ユニット(CU)はAG間を調停し、メモリ・リクエストを処理する。スイッチ・ユニットの8つのインタフェースのそれぞれは、ベクトル・インタフェース、スカラ・インタフェース、及び、ベクトル・ネットワーク、スカラ・ネットワーク、及び制御ネットワークと通信するための制御インタフェースを含むことができる。
【0105】
構成後のマシンの実行中に、データは、アレイ・レベル・ネットワーク上の1以上のスイッチ・ユニットのベクトル・バス及びベクトル・インタフェースを使用して、1以上のユニットスイッチ及びユニットスイッチ間の1以上のリンクを介して構成可能ユニットに送信することができる。
【0106】
本明細書で説明される一実施形態では、タイルの構成前に、構成ファイルまたはビット・ファイル198を、同じベクトル・バスを使用して構成ロード・コントローラから、アレイ・レベル・ネットワーク上の1以上のスイッチ・ユニットのベクトル・バス及びベクトル・インタフェースを使用して、1以上のユニットスイッチと、ユニットスイッチ間の1以上のリンクとを介して、構成可能ユニットに送信することができる。例えば、構成可能ユニットPMU1441に特有のユニットファイル内の構成データのチャンクは、構成ロード/アンロード・コントロ-ラ1401からPMU1441に、構成ロード・アンロードコントローラ1401とスイッチ・ユニット1411の西(W)ベクトル・インタフェースとの間のリンク1420、スイッチ・ユニット1411、及びスイッチ・ユニット1411の南東(SE)ベクトル・インタフェースとPMU1441との間のリンク1431を介して、送信することができる。
【0107】
この例では、AGCUの1つは、構成ロード/アンロード・コントローラ(例えば、1401)を含むマスタAGCUとなるように構成される。マスタAGCUは、ホスト(120、
図1)がバス・システムを介してマスタAGCUにコマンドを送信できるレジスタを実装する。マスタAGCUは、タイル内の構成可能ユニットのアレイに対するオペレーションを制御し、レジスタへの書き込みを通じてホストから受信したコマンドに基づいて、タイルの状態を追跡するプログラム制御ステート・マシンを実装する。状態遷移ごとに、マスタAGCUは、デイジー・チェーン接続されたコマンド・バスを介してタイル上のすべての構成要素にコマンドを発行する(
図15)。コマンドには、タイル内の構成可能ユニットのアレイで構成可能ユニットをリセットするプログラム・リセット・コマンドと、構成可能ユニットに構成ファイルをロードするプログラム・ロード・コマンドが含まれる。
【0108】
マスタAGCUの構成ロード・コントローラは、メモリから構成ファイルを読み取り、タイルのすべての構成可能ユニットに構成データを送信する。マスタAGCUは、好ましくはトップ・レベル・ネットワークの最大スループットでメモリから構成ファイルを読み取ることができる。メモリから読み出されたデータは、マスタAGCUによって、本明細書で説明する分散シーケンスに従って、アレイ・レベル・ネットワーク上のベクトル・インタフェースを介して、対応する構成可能ユニットに送信される。
【0109】
一実施形態では、構成可能ユニット内のワイヤリング要求を削減できる方法で、構成要素において構成ロード処理でロードされるか、または構成アンロード処理でアンロードされるユニットファイルを保持する構成レジスタ及びステータス・レジスタは、シリアル・チェーンで接続でき、シリアル・チェーンを介してビットをシフトする処理を通じてロードできる。幾つかの実施形態では、並列または直列に配置された2以上のシリアル・チェーンがあってもよい。構成可能ユニットが、例えば、1つのバスサイクルで128ビットの構成データをマスタAGCUから受信すると、構成可能ユニットは、このデータを、1サイクル当たり1ビットのレートで、そのシリアル・チェーンを介してシフトする。ここで、シフトサイクルは、バスサイクルと同じレートで実行することができる。構成可能ユニットが、ベクトル・インタフェースを介して受信された128ビットのデータを有する128の構成ビットをロードするのに、128シフトサイクルを要する。128ビットの構成データは、チャンクと呼ばれる。構成可能ユニットは、そのすべての構成ビットをロードするために複数チャンクのデータを必要とすることがある。
【0110】
構成可能ユニットは、複数のメモリ・インタフェース(150、
図1)を介してメモリとインタフェースする。メモリ・インタフェースのそれぞれには、幾つかのAGCUを使用してアクセスできる。各AGCUは、オフチップ・メモリのリクエストを生成するための再構成可能データパスを含む。各AGCUには、送信するコマンド、データ、及び、オフチップ・メモリからの受信応答をバッファするためのFIFO(データを編成するための先入先出バッファ)が含まれている。
【0111】
AGCU内のアドレス生成器AGは、高密度(デンス)または低密度(スパース)の何れかであるメモリコマンドを生成することができる。高密度リクエストは、連続するオフチップ・メモリ領域をバルク転送するために使用することができ、構成可能ユニットのアレイ内の構成可能ユニットとの間でデータのチャンクを読み出しまたは書き込みするために使用することができる。高密度リクエストは、AGCU内の結合ユニット(CU)によって複数のオフチップ・メモリ・バースト要求に変換することができる。低密度リクエストは、アドレスのストリームを結合ユニットにエンキューできる。結合ユニットは、結合キャッシュを使用して、発行されたオフチップ・メモリ・リクエスト上のメタデータを維持し、同じオフチップ・メモリ・リクエストに属する低密度アドレスを組み合わせて、発行されたオフチップ・メモリ・リクエストの数を最小化することができる。
[再構成可能ユニット]
【0112】
図15は、パターン計算ユニット(PCU)などの例示的な構成可能ユニット1500を示すブロック図である。本明細書の文脈において、PCUは物理演算ユニットに対応する。構成可能ユニットのアレイ内の構成可能ユニットは、対応する構成可能ユニットに特有の構成データの複数のチャンク(または他のサイズのサブファイル)を含むユニットファイルを格納するための構成データ・ストア1520(例えば、シリアル・チェーン)を含む。構成可能ユニットのアレイ内の構成可能ユニットはそれぞれ、ユニット構成ロード処理を実行するために、ライン1522を介して構成データ・ストア1520に接続されたユニット構成ロード・ロジック1540を含む。ユニット構成ロード処理は、バス・システム(例えば、ベクトル入力)を介して、構成可能ユニットに特有のユニットファイルのチャンクを受信することと、受信したチャンクを構成可能ユニットの構成データ・ストア1520にロードすることとを含む。
【0113】
この例での複数の構成可能ユニット内の構成可能ユニットにおける構成データ・ストアは、ラッチのシリアル・チェーンを備え、ラッチは構成可能ユニット内のリソースの構成を制御するビットを格納する。構成データ・ストアのシリアル・チェーンには、構成データ用のシフト・レジスタ・チェーンと、直列に接続された状態情報及びカウンタ値用の第2のシフト・レジスタ・チェーンを含めることができる。
【0114】
構成可能ユニットは、スカラ入力/出力、ベクトル入力/出力、及び制御入力/出力の3つの対応する入力及び出力(IO)のセットを使用して、スカラ・バス、ベクトル・バス、及び制御バスとインタフェースすることができる。スカラIO は、データの単一ワード(32 ビットなど)の通信に使用できる。ベクトルIOは、ユニット構成ロード処理において構成データを受信し、構成後のオペレーション中に複数のPCU間の長いパイプラインを介してデータを送受信するような場合に、データのチャンク(例えば、128ビット)を通信するために使用することができる。制御IOを使用して、構成可能ユニットの実行の開始または終了などの制御信号を通信することができる。制御入力は制御ブロック1570によって受信され、制御出力は制御ブロック1570によって供給される。
【0115】
各ベクトル入力は、1以上のベクトルFIFOを含むことのできるベクトルFIFOブロック1560内のベクトルFIFOを使用してバッファリングされる。各スカラ入力は、スカラFIFO1550を使用してバッファリングされる。入力FIFOを使用することで、データのプロデューサとコンシューマ間のタイミングを切り離し、入力遅延不整合に対してロバストにすることによって、構成可能ユニット間の制御ロジックを単純化する。
【0116】
入力構成データ1510は、ベクトル入力としてベクトルFIFOに供給され、次いで構成データ・ストア1520に転送される。出力構成データ1530は、ベクトル出力を使用して構成データ・ストア1520からアンロードすることができる。
【0117】
CGRAは、ロード/アンロード・コマンドが完了した時を示すために、デイジー・チェーン接続された完了バスを使用する。マスタAGCUは、デイジー・チェーン接続されたコマンド・バスを介して、プログラム・ロード及びアンロード・コマンドを構成可能ユニットのアレイ内の構成可能ユニットに送信する。
図15の例に示すように、デイジー・チェーン接続された完了バス1591及びデイジー・チェーン接続されたコマンド・バス1592は、ユニット構成ロード・ロジック1540と通信するデイジー・チェーン・ロジック1593に接続されている。デイジー・チェーン・ロジック1593は、以下に説明するように、ロード完了状態ロジックを含むことができる。デイジー・チェーン接続された完了バスについては、以下で更に説明する。コマンド・バス及び完了バスの他のトポロジも明らかに可能であるが、ここでは説明しない。
【0118】
構成可能ユニットは、ブロック1580内に複数の再構成可能データパスを含む。構成可能ユニット内のデータパスは、マルチステージ(ステージ1・・・ステージN)、再構成可能SIMD(単一命令、マルチデータ)パイプラインとして編成することができる。構成可能ユニットの構成シリアル・チェーンにプッシュされるデータのチャンクには、構成可能ユニットの各データパスの各ステージの構成データが含まれる。構成データ・ストア420内の構成シリアル・チェーンは、ライン1521を介してブロック1580内の複数のデータパスに接続される。
【0119】
本明細書の文脈において、パターン・メモリ・ユニット(PMU)は物理メモリ・ユニットに対応する。PMUは、PCUで使用されるバス・インタフェースと共に、アドレス計算用の再構成可能データパスに連結されたスクラッチパッド・メモリを含むことができる。PMUは、再構成可能ユニットのアレイ全体にオンチップメモリを分配するために使用することができる。一実施形態では、PMU内のメモリ内のアドレス計算がPMUデータパス上で実行され、コア計算がPCU内で実行される。各PMUには、主にアドレス計算を目的としたリ再構成データパスと結合したプログラマ管理スクラッチパッド・メモリと、プログラムで必要とされるその他の演算オペレーションが含まれている。PMUは、アレイ190全体にオンチップメモリを配分するために使用される。アレイ・アーキテクチャは、メモリ・アドレス計算に関係するオペレーションと、アプリケーションの基礎となるコア計算を区別する。アドレス計算はPMUデータパス上で実行され、コア計算はPCU内で実行される。幾つかの観察が、この設計選択を動機付けている:(i)アドレス計算はPCU内のALUよりも単純なALUを必要とする単純なスカラ計算を伴う;(ii)アドレス計算のために複数のレーンを使用することは、大抵のオンチップ・アクセス・パターンにとってしばしば不必要である;及び(iii)PCU内でアドレス計算を実行することは、PCUステージ及び出力リンクを占有し、PCUの利用不足につながり得る、PCUからPMUへのアドレスのルーティングを必要とする。
【0120】
PCU及びPMU(まとめて「ユニット」)は、ワードレベル・スカラ相互接続、複数ワードレベル・ベクトル相互接続、及びビットレベル制御相互接続の3種類の相互接続と通信する。構成可能ユニットのアレイ190は、複数DDRチャンネルを通じてDRAMとインタフェースする。各チャネルは、複数のアドレス・ストリーム間で調停する関連アドレス管理ユニットを有し、DRAMアクセスを最小化するために複数の未処理メモリ要求とアドレス結合をサポートするバッファから構成される。ローカル・アドレス計算はPMUで行われ、DRAMアドレス計算はDRAMアドレス管理ユニットで行われ、残りのデータ計算はPCUで行われる。スクラッチパッドは、PCUレーンの数に一致する複数のSRAMバンクで構築される。スクラッチパッド周辺のアドレス・デコーディング・ロジックは様々なアクセス・パターンをサポートするために、幾つかのバンキング・モードで動作するように構成され得る。ストライド・バンキング・モードは、高密度データ構造上にしばしば見られる線形アクセス・パターンをサポートする。FIFOモードはストリーミング・アクセスをサポートする。ライン・バッファ・モードは、スライディング・ウィンドウに似たアクセス・パターンを捕捉する。コンテンツがすべてのメモリ・バンクにわたって複製される複製モードは、並列化されたオンチップ収集オペレーションをサポートするために、複数読み出しアドレス・チャネルを提供する。
【0121】
PCUは、アプリケーションにおける最も内側の並列パターンを実行するように設計される。PCUデータパスは、マルチステージ再構成可能SIMDパイプラインとして編成することができる。この設計は、各PCUが高い計算密度を達成することを可能にし、レーンにわたるループレベル並列性とステージにわたるパイプライン並列性の両方を利用する。各SIMDレーンの各ステージは、機能ユニット(FU)及び関連するパイプライン・レジスタ(PR)で構成される。FU は、例えば、浮動小数点演算や整数演算のサポートを含み、32ビットワードレベルの算術演算やバイナリ演算を実行する。単一のパイプライン・ステージ内のFUは、SIMDで動作するので、各ステージは、単一の構成レジスタのみを必要とする。各FUからの結果は、その関連するレジスタに書き込まれる。各レーンのPRは、同じレーン内のステージ間でライブ値が伝播することを可能にするために、パイプライン・ステージにわたって一緒に連鎖する。FU間のクロス・レーン通信は、2つのタイプのPCU内ネットワーク、すなわち、複数のレーンからの値を単一のスカラに低減することを可能にする縮小ツリー・ネットワークと、ステンシル・アプリケーションでの再利用を活用するために、ステージにわたるスライディング・ウィンドウとしてPRを使用することを可能にするシフト・ネットワークとを使用して、捕捉される。どちらのネットワークも、ハードウェアのオーバーヘッドを最小限に抑えるために、PR 内で専用レジスタを使用する。
【0122】
PCUは、スカラ、ベクトル、及び制御の3種類の入力及び出力(IO)を使用してグローバル相互接続とインタフェースする。スカラIO は、畳み込みの結果など、データの単一ワードを通信するために使用される。各ベクトルIOは、PCU内のレーン当たり1ワードの通信を可能にし、PMU内のスクラッチパッドへの読み出し及び書き込み、及び複数のPCU間の長いパイプラインを介した中間データの伝送などの場合に使用される。各ベクトル及びスカラ入力は小さなFIFOを使用してバッファリングされる。入力FIFOを使用することは、データのプロデューサとコンシューマとを切り離し、入力遅延不整合に対してロバストにすることによってPCU間制御ロジックを単純化する。制御IOは、PCUの実行の開始または終了などの制御信号を通信するために、または背圧を示すために使用される。
【0123】
カウンタの再構成可能チェーンは、実行を調整するために、パターン反復インデックス及び制御信号を生成する。PCUの実行は、制御ブロックがカウンタの1つをイネーブルにするときに開始する。アプリケーションの制御及びデータ依存性に基づいて、制御ブロックは、PCUの実行をトリガするために、ローカルFIFO及びグローバル制御入力の両方からの複数の制御信号を結合するように構成することができる。制御ブロックは、ステートマシンのための再構成可能な組合せ論理及びプログラミング可能なアップダウン・カウンタを使用して実装される。
【0124】
バンキングは、計算スループットを維持するために複数のSIMDユニットに供給するのに重要であるのと同様に、Nバッファリング、または一般化された二重バッファリングは、粗粒度パイプラインをサポートするためにも重要である。例として、ResNetのスキップ接続と、各レイヤの出力を保持するバッファは、Nバッファリングを使用して実現される。PMUスクラッチパッドは、説明したバンキング・モードの何れかを有するNバッファとして動作するように構成することができる。Nバッファは、各SRAMバンクのアドレス空間をN個の互いに素な領域に区分化することによって実現される。書き込み及び読み出し状態情報を使用して、適切なオフセットが各バンクのローカル・アドレスに追加され、正しいデータにアクセスする。
【0125】
プログラマブル・カウンタ・チェーン及び制御ブロックは、PCUと同様にPMU実行をトリガする。各PMUには通常、プロデューサ・パターンからの書き込みアドレス計算ロジックと、コンシューマ・パターンからの読み出しアドレス計算ロジックが含まれる。ローカルFIFO及び外部制御入力の状態に基づいて、制御ブロックは、適切なカウンタを有効にすることによって、書き込みアドレス計算、読み出しアドレス計算、またはその両方をトリガするように構成できる。
[特定の実施態様]
【0126】
一実施態様において、筆者らは、構成可能ユニットのアレイを有する再構成可能データ・プロセッサにマッピングするための高レベル・プログラムを変換するコンピュータにより実施される方法を開示した。この方法は、高レベル・プログラムのデータフロー・グラフをメモリ・アロケーションと実行フラグメントに区分化することを含む。メモリ・アロケーションは、データフロー・グラフを実施するために必要なデータのためのオンプロセッサ・メモリ及び/またはオフプロセッサ・メモリ内の論理メモリ空間の作成を表す。実行フラグメントは、データに対するオペレーションを表す。
【0127】
該方法は、メモリ・アロケーションを仮想メモリ・ユニットに指定し、実行フラグメントを仮想演算ユニットに指定することを含む。
【0128】
該方法は、実行フラグメントをメモリ・フラグメントと演算フラグメントに区分化することを含む。
【0129】
該方法は、メモリ・フラグメントを仮想メモリ・ユニットに割り当て、演算フラグメントを仮想演算ユニットに割り当てることを含む。
【0130】
該方法は、仮想メモリ・ユニットを物理メモリ・ユニットにアロケーティングすること、及び、仮想演算ユニットを物理演算ユニットにアロケーティングすることを含む。
【0131】
該方法は、構成可能ユニットのアレイ内の位置上に物理メモリ・ユニット及び物理演算ユニットを設置すること、及び、設置された位置間でデータ及び制御ネットワークをルーティングすることを含む。
【0132】
該方法は、設置された位置及びルーティングされたデータ及び制御ネットワークのための構成データを有するビット・ファイルを生成することを含む。ビット・ファイルは、構成可能ユニットのアレイのインスタンス上にロードされると、構成可能ユニットのアレイにデータフロー・グラフを実施させる。
【0133】
他の実施態様のために特定の実施態様のセクションで論じられた特徴の各々は、この実施態様に同様に適用される。上述したように、他の全ての特徴は、ここでは繰り返されず、参照により繰り返されると考えられるべきである。読者は、これらの実施態様で特定された特徴が他の実施態様で特定された基本特徴の集合と如何にして容易に組み合わせられるかを理解するであろう。
【0134】
該方法は、仮想メモリ・ユニットの少なくとも1つを複数の物理メモリ・ユニットにアロケーティングすること、及び/または、仮想演算ユニットの少なくとも1つを複数の物理演算ユニットにアロケーティングすることを含む。
【0135】
該方法は、複数の物理メモリ・ユニットと複数の物理演算ユニットを構成可能ユニットのアレイ内の位置に設置すること、及び、設置された位置間でデータ及び制御ネットワークをルーティングすることを含む。
【0136】
該方法は、設置された位置及びルーティングされたデータ及び制御ネットワークのための構成データを有するビット・ファイルを生成することを含む。ビット・ファイルは、構成可能ユニットのアレイのインスタンス上にロードされると、構成可能ユニットのアレイにデータフロー・グラフを実施させる。
【0137】
アロケーティングは、複数の物理メモリ・ユニット及び複数の物理演算ユニットのハードウェア制約を満たす。アロケーティングは、少なくとも部分的に、特定の物理的演算ユニットによって受け入れられる入力の数に依存する。アロケーティングは、少なくとも部分的に、物理メモリ・ユニットで利用可能なオンチップSRAMの容量、算術論理ユニット(ALU)のステージ数、ステージ当たりのレジスタ数、各ALUステージの能力、ALUとレジスタ間で利用可能な接続、及びレジスタ間で利用可能な接続に依存する。
【0138】
該方法は、物理メモリ・ユニットの少なくとも2つを単一の物理メモリ・ユニットに融合すること、及び/または、物理演算ユニットの少なくとも2つを単一の物理演算ユニットに融合することを含む。
【0139】
該方法は、単一の物理記憶ユニット及び単一の物理演算ユニットを構成可能ユニットのアレイ内の位置上に設置すること、及び、設置された位置間でデータ及び制御ネットワークをルーティングすることを含む。
【0140】
該方法は、設置された位置及びルーティングされたデータ及び制御ネットワークのための構成データを有するビット・ファイルを生成することを含む。ビット・ファイルは、構成可能ユニットのアレイのインスタンス上にロードされると、構成可能ユニットのアレイにデータフロー・グラフを実施させる。
【0141】
融合は、単一の物理メモリ・ユニット及び単一の物理演算ユニットのリソースの利用を増加させる。融合は、少なくとも部分的に、単一の物理演算ユニット内のALUステージの数に依存する。空間的融合は、別のやり方では異なるクロック・サイクルで別々の物理演算ユニット上で実行される複数のオペレーションを、単一の物理演算ユニット上で実行することを含む。時間的融合は、複数のオペレーションを別々の実行コンテキストとして単一の物理演算ユニット上で順次実行することを含む。実行フラグメントは非同期に実行可能である。
【0142】
該方法は、実行フラグメントのメモリ・フラグメントを、データ構造にインデックスを付けるように構成することを含む。メモリ・フラグメントの少なくとも1つは、1つのメモリ・アロケーションの論理メモリ空間内のデータ構造にインデックスを付ける。実行フラグメントの少なくとも1つは、少なくとも1つの演算フラグメントに対するオペレーションを、メモリ・フラグメントによってインデックス付けされた値に対して繰り返し動作させるループまたはパターン・イテレータを含む。特定の実行フラグメントの演算フラグメント及びメモリ・フラグメントは、該オペレーションをインデックス付けされた値を保持するデータ構造の少なくとも2つの次元にわたって動作させる。特定の実行フラグメントは、複数のデータ構造にインデックス付けする複数のメモリ・フラグメントを含む。
【0143】
実行フラグメントへの区分化は、データフロー・グラフのネストされたループの少なくとも1つの最も内側のループ内の計算を別個の実行フラグメントとして処理することを含む。実行フラグメントへの区分化は、データフロー・グラフの最も内側のループの周りの外側ループの計算を別個の実行フラグメントとして処理することを更に含む。
【0144】
該方法は、特定の物理演算ユニット上にグループ化されたデータフロー・グラフからの複数のオペレーションを、特定の物理演算ユニット内のリソース上にマッピングすることを含む。
【0145】
このセクションで説明された方法の他の実施態様は、上述の方法の何れかを実行するためにプロセッサによって実行可能な命令を格納する非一時的コンピュータ可読記憶媒体を含むことができる。このセクションで説明された方法の更に別の実施態様は、上述の方法の何れかを実行するために、該メモリ内に記憶された命令を実行するように動作可能なメモリ及び1または複数のプロセッサを含むシステムを含むことができる。
【0146】
一実施態様において、筆者らは、構成可能ユニットのアレイを有する再構成可能データ・プロセッサにマッピングするための高レベル・プログラムを変換するコンピュータにより実施される方法を開示する。
【0147】
該方法は、高レベル・プログラムのデータフロー・グラフをメモリ・アロケーションと実行フラグメントに区分化することを含む。メモリ・アロケーションは、データフロー・グラフを実施するために必要なデータのためのオンプロセッサ・メモリ及び/またはオフプロセッサ・メモリ内の論理メモリ空間の作成を表す。実行フラグメントは、データに対するオペレーションを表す。
【0148】
該方法は、メモリ・アロケーション及び実行フラグメントを仮想構成可能ユニットに指定することを含む。
【0149】
該方法は、実行フラグメントをメモリ・フラグメント及び演算フラグメントに区分化することを含む。
【0150】
該方法は、メモリ・フラグメント及び演算フラグメントを仮想構成可能ユニットに割り当てることを含む。
【0151】
該方法は、仮想構成可能ユニットを物理構成可能ユニットにアロケーティングすることを含む。
【0152】
該方法は、構成可能ユニットのアレイ内の位置上に物理構成可能ユニットを設置すること、及び、設置された位置間でデータ及び制御ネットワークをルーティングすることを含む。
【0153】
該方法は、設置された位置及びルーティングされたデータ及び制御ネットワークのための構成データを有するビット・ファイルを生成することを含む。ビット・ファイルは、構成可能ユニットのアレイのインスタンス上にロードされると、構成可能ユニットのアレイにデータフロー・グラフを実施させる。
【0154】
他の実施態様のために特定の実施態様のセクションで論じられた特徴の各々は、この実施態様に同様に適用される。上述したように、他の全ての特徴は、ここでは繰り返されず、参照により繰り返されると考えられるべきである。読者は、これらの実施態様で特定された特徴が他の実施態様で特定された基本特徴の集合と如何にして容易に組み合わせられるかを理解するのであろう。
【0155】
該方法は、仮想構成可能ユニットの少なくとも1つを複数の物理構成可能ユニットにアロケーティングすることを含む。
【0156】
該方法は、複数の物理構成可能ユニットを構成可能ユニットのアレイ内の位置に設置すること、及び、設置された位置間でデータ及び制御ネットワークをルーティングすることを含む。
【0157】
該方法は、設置された位置及びルーティングされたデータ及び制御ネットワークのための構成データを有するビット・ファイルを生成することを含む。ビット・ファイルは、構成可能ユニットのアレイのインスタンス上にロードされると、構成可能ユニットのアレイにデータフロー・グラフを実施させる。
【0158】
該方法は、物理構成可能ユニットの少なくとも2つを単一の物理構成可能ユニットに融合することを含む。
【0159】
該方法は、単一の物理構成可能ユニットを構成可能ユニットのアレイ内の位置に設置すること、及び、設置された位置間でデータ及び制御ネットワークをルーティングすることを含む。
【0160】
該方法は、設置された位置及びルーティングされたデータ及び制御ネットワークのための構成データを有するビット・ファイルを生成することを含む。ビット・ファイルは、構成可能ユニットのアレイのインスタンス上にロードされると、構成可能ユニットのアレイにデータフロー・グラフを実施させる。
【0161】
このセクションで説明された方法の他の実施態様は、上述の方法の何れかを実行するためにプロセッサによって実行可能な命令を格納する非一時的コンピュータ可読記憶媒体を含むことができる。このセクションで説明された方法の更に別の実施態様は、上述の方法の何れかを実行するために、該メモリ内に記憶された命令を実行するように動作可能なメモリ及び1または複数のプロセッサを含むシステムを含むことができる。
【0162】
前述の説明は、開示された技術の作成及び使用を可能にするために提示されている。開示された実施態様に対する種々の変形は明らかであり、本明細書で規定された全般的な原理は、開示された技術の趣旨及び範囲から逸脱することなく、他の実施態様及びアプリケーションに適用され得る。したがって、開示された技術は、示された実施態様に限定されることを意図するものではなく、本明細書で開示された原理及び特徴と一致する最も広い範囲が与えられるべきである。開示された技術の範囲は、添付の特許請求の範囲によって規定される。
【国際調査報告】