(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2022-11-16
(54)【発明の名称】ユーザ仕様に基づく再構成可能アーキテクチャ上でのオペレーション・ユニット・グラフの効率的な実行
(51)【国際特許分類】
G06F 15/80 20060101AFI20221109BHJP
G06F 30/34 20200101ALI20221109BHJP
G06F 30/327 20200101ALI20221109BHJP
H03K 19/17704 20200101ALI20221109BHJP
G06N 3/063 20060101ALI20221109BHJP
G06F 115/10 20200101ALN20221109BHJP
【FI】
G06F15/80
G06F30/34
G06F30/327
H03K19/17704
G06N3/063
G06F115:10
【審査請求】未請求
【予備審査請求】有
(21)【出願番号】P 2022516603
(86)(22)【出願日】2020-09-10
(85)【翻訳文提出日】2022-05-02
(86)【国際出願番号】 US2020050220
(87)【国際公開番号】W WO2021055234
(87)【国際公開日】2021-03-25
(32)【優先日】2019-09-16
(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)【発明者】
【氏名】ジャイラス, サムティ
【テーマコード(参考)】
5B146
5J042
【Fターム(参考)】
5B146AA22
5B146GA01
5B146GA02
5B146GC02
5J042BA04
5J042DA04
(57)【要約】
開示された技術は、目標アーキテクチャを有する再構成可能データ・プロセッサ上でオペレーション・ユニット・グラフを効率的に実行することに関する。特に、開示された技術は、再構成可能データ・プロセッサの目標アーキテクチャに固有のアーキテクチャ上のヒントをユーザから受け取り、アーキテクチャ上のヒントによって指定されたオペレーション・ユニットのパターンのインスタンスを検出するためにオペレーション・ユニット・グラフをスキャンし、オペレーション・ユニット・グラフ内のオペレーション・ユニットを統合されたオペレーション・ユニット・ブロックに融合し、それによって融合されたオペレーション・ユニット・グラフを生成することによって、オペレーション・ユニット・グラフを実行するのに必要な再構成可能データ・プロセッサの物理演算ユニット及び/または物理メモリ・ユニットの数を低減することに関する。
【選択図】
図2
【特許請求の範囲】
【請求項1】
目標アーキテクチャを有する再構成可能データ・プロセッサ上でオペレーション・ユニット・グラフを効率的に実行するコンピュータにより実施される方法であって、
前記再構成可能データ・プロセッサの前記目標アーキテクチャに固有のアーキテクチャ上のヒントを、ユーザから受け取ることにより、前記オペレーション・ユニット・グラフを実行するために必要とされる前記再構成可能データ・プロセッサの物理演算ユニット及び/または物理メモリ・ユニットの数を減少させること、
但し、前記アーキテクチャ上のヒントは、
前記再構成可能データ・プロセッサの前記物理演算ユニット及び/または前記物理メモリ・ユニット上で第1のオペレーション・ユニットのパターンを実行するときに、前記第1のオペレーション・ユニットを融合することを要求し、
パターン内の前記第1のオペレーション・ユニットを第1のノードとして指定し、
前記パターン内の前記第1のオペレーション・ユニット間の第1のデータフローを第1のエッジとして指定し、且つ、
前記パターン内の前記第1のオペレーション・ユニット間の融合を指示するものであり、
前記オペレーション・ユニット・グラフをスキャンして、前記アーキテクチャ上のヒントによって指定された前記第1のオペレーション・ユニットの前記パターンのインスタンスを検出すること、これは、前記オペレーション・ユニット・グラフ内の第2のノード及び第2のエッジを、前記アーキテクチャ上のヒント内の前記第1のノード及び前記第1のエッジと適合させることと、パターン・マッチングを検出することとを含み、
前記オペレーション・ユニット・グラフ内の前記第2のノードと前記第2のエッジのオペレーション・ユニットを統合されたオペレーション・ユニット・ブロックに融合し、融合されたオペレーション・ユニット・グラフを生成すること、
前記再構成可能データ・プロセッサの前記物理演算ユニット及び/または前記物理メモリ・ユニットを前記融合されたオペレーション・ユニット・グラフにアロケーティングすること、及び、
前記アロケーティングに基づいて前記再構成可能データ・プロセッサ上で前記融合されたオペレーション・ユニット・グラフを実行すること、
を含む方法。
【請求項2】
前記アーキテクチャ上のヒントが、前記パターン内の第1の出力オペレーション・ユニットを第1の出力ノードとして指定する請求項1に記載の方法。
【請求項3】
前記アーキテクチャ上のヒントによって指定された前記第1の出力ノードを前記オペレーション・ユニット・グラフ内の第2の出力ノードと適合させることによって前記パターン・マッチングを検出すること、及び、
前記オペレーション・ユニット・グラフ内の前記第2の出力ノードから始めて、前記オペレーション・ユニット・グラフ内の前記第2のノード及び前記第2のエッジが前記アーキテクチャ上のヒント内の前記第1のノード及び前記第1のエッジと適合することを決定するために前記オペレーション・ユニット・グラフをトラバースすること、
を更に含む請求項2に記載の方法。
【請求項4】
前記トラバースが上向きトラバースである請求項3に記載の方法。
【請求項5】
前記統合されたオペレーション・ユニット・ブロックに融合されるが、前記統合されたオペレーション・ユニット・ブロックの外側にある前記オペレーション・ユニット・グラフの別のオペレーション・ユニットへのデータフローを有する前記オペレーション・ユニット・グラフのオペレーション・ユニットを識別すること、
前記識別されたオペレーション・ユニット及びそのデータフローを複製し、前記識別されたオペレーション・ユニット及びそのデータフローに入力を提供する前記統合されたオペレーション・ユニット・ブロック内の任意の他のオペレーション・ユニットを複製すること、及び、
前記統合されたオペレーション・ユニット・ブロック及び前記複製されたオペレーション・ユニット及びデータフローを有する前記オペレーション・ユニット・グラフに基づいて、前記アロケーティング及び前記実行を行うこと、
を更に含む請求項1に記載の方法。
【請求項6】
前記アーキテクチャ上のヒントが、パターン・グラフに翻訳するノードとエッジのリストとして表現される請求項1に記載の方法。
【請求項7】
目標アーキテクチャを有する再構成可能データ・プロセッサ上でオペレーション・ユニット・グラフを効率的に実行するコンピュータ・プログラム命令を備えた非一時的コンピュータ可読記憶媒体であって、
前記命令がプロセッサで実行されると実施される方法が、
前記再構成可能データ・プロセッサの前記目標アーキテクチャに固有のアーキテクチャ上のヒントを、ユーザから受け取ることにより、前記オペレーション・ユニット・グラフを実行するために必要とされる前記再構成可能データ・プロセッサの物理演算ユニット及び/または物理メモリ・ユニットの数を減少させること、
但し、前記アーキテクチャ上のヒントは、
前記再構成可能データ・プロセッサの前記物理演算ユニット及び/または前記物理メモリ・ユニット上で第1のオペレーション・ユニットのパターンを実行するときに、前記第1のオペレーション・ユニットを融合することを要求し、
パターン内の前記第1のオペレーション・ユニットを第1のノードとして指定し、
前記パターン内の前記第1のオペレーション・ユニット間の第1のデータフローを第1のエッジとして指定し、且つ、
前記パターン内の第1のオペレーション・ユニット間の融合を指示するものであり、
前記オペレーション・ユニット・グラフをスキャンして、前記アーキテクチャ上のヒントによって指定された前記第1のオペレーション・ユニットの前記パターンのインスタンスを検出すること、これは、前記オペレーション・ユニット・グラフ内の第2のノード及び第2のエッジを、前記アーキテクチャ上のヒント内の前記第1のノード及び前記第1のエッジと適合させることと、パターン・マッチングを検出することとを含み、
前記オペレーション・ユニット・グラフ内の前記第2のノードと前記第2のエッジのオペレーション・ユニットを統合されたオペレーション・ユニット・ブロックに融合し、融合されたオペレーション・ユニット・グラフを生成すること、
前記再構成可能データ・プロセッサの前記物理演算ユニット及び/または前記物理メモリ・ユニットを前記融合されたオペレーション・ユニット・グラフにアロケーティングすること、及び、
前記アロケーティングに基づいて前記再構成可能データ・プロセッサ上で前記融合されたオペレーション・ユニット・グラフを実行すること、
を含む非一時的コンピュータ可読記憶媒体。
【請求項8】
前記アーキテクチャ上のヒントが、前記パターン内の第1の出力オペレーション・ユニットを第1の出力ノードとして指定する請求項7に記載の非一時的コンピュータ可読記憶媒体。
【請求項9】
前記アーキテクチャ上のヒントによって指定された前記第1の出力ノードを前記オペレーション・ユニット・グラフ内の第2の出力ノードと適合させることによって前記パターン・マッチングを検出すること、及び、
前記オペレーション・ユニット・グラフ内の前記第2の出力ノードから始めて、前記オペレーション・ユニット・グラフ内の前記第2のノード及び前記第2のエッジが前記アーキテクチャ上のヒント内の前記第1のノード及び前記第1のエッジと適合することを決定するために前記オペレーション・ユニット・グラフをトラバースすること、
を更に含む前記方法を実施する請求項8に記載の非一時的コンピュータ可読記憶媒体。
【請求項10】
前記トラバースが上向きトラバースである請求項9に記載の非一時的コンピュータ可読記憶媒体。
【請求項11】
前記統合されたオペレーション・ユニット・ブロックに融合されるが、前記統合されたオペレーション・ユニット・ブロックの外側にある前記オペレーション・ユニット・グラフの別のオペレーション・ユニットへのデータフローを有する前記オペレーション・ユニット・グラフのオペレーション・ユニットを識別すること、
前記識別されたオペレーション・ユニット及びそのデータフローを複製し、前記識別されたオペレーション・ユニット及びそのデータフローに入力を提供する前記統合されたオペレーション・ユニット・ブロック内の任意の他のオペレーション・ユニットを複製すること、及び、
前記統合されたオペレーション・ユニット・ブロック及び前記複製されたオペレーション・ユニット及びデータフローを有する前記オペレーション・ユニット・グラフに基づいて、前記アロケーティング及び前記実行を行うこと、
を更に含む前記方法を実施する請求項7に記載の非一時的コンピュータ可読記憶媒体。
【請求項12】
前記アーキテクチャ上のヒントが、パターン・グラフに翻訳するノードとエッジのリストとして表現される請求項7に記載の非一時的コンピュータ可読記憶媒体。
【請求項13】
目標アーキテクチャを有する再構成可能データ・プロセッサ上でオペレーション・ユニット・グラフを効率的に実行するコンピュータ・プログラム命令がロードされているメモリに接続された1または複数のプロセッサを含むシステムであって、
前記命令がプロセッサで実行されると実施されるアクションが、
前記再構成可能データ・プロセッサの前記目標アーキテクチャに固有のアーキテクチャ上のヒントを、ユーザから受け取ることにより、前記オペレーション・ユニット・グラフを実行するために必要とされる前記再構成可能データ・プロセッサの物理演算ユニット及び/または物理メモリ・ユニットの数を減少させること、
但し、前記アーキテクチャ上のヒントは、
前記再構成可能データ・プロセッサの前記物理演算ユニット及び/または前記物理メモリ・ユニット上で第1のオペレーション・ユニットのパターンを実行するときに、前記第1のオペレーション・ユニットを融合することを要求し、
パターン内の前記第1のオペレーション・ユニットを第1のノードとして指定し、
前記パターン内の前記第1のオペレーション・ユニット間の第1のデータフローを第1のエッジとして指定し、且つ、
前記パターン内の第1のオペレーション・ユニット間の融合を指示するものであり、
前記オペレーション・ユニット・グラフをスキャンして、前記アーキテクチャ上のヒントによって指定された前記第1のオペレーション・ユニットの前記パターンのインスタンスを検出すること、これは、前記オペレーション・ユニット・グラフ内の第2のノード及び第2のエッジを、前記アーキテクチャ上のヒント内の前記第1のノード及び前記第1のエッジと適合させることと、パターン・マッチングを検出することとを含み、
前記オペレーション・ユニット・グラフ内の前記第2のノードと前記第2のエッジのオペレーション・ユニットを統合されたオペレーション・ユニット・ブロックに融合し、融合されたオペレーション・ユニット・グラフを生成すること、
前記再構成可能データ・プロセッサの前記物理演算ユニット及び/または前記物理メモリ・ユニットを前記融合されたオペレーション・ユニット・グラフにアロケーティングすること、及び、
前記アロケーティングに基づいて前記再構成可能データ・プロセッサ上で前記融合されたオペレーション・ユニット・グラフを実行すること、
を含むシステム。
【請求項14】
前記アーキテクチャ上のヒントが、前記パターン内の第1の出力オペレーション・ユニットを第1の出力ノードとして指定する請求項13に記載のシステム。
【請求項15】
前記アーキテクチャ上のヒントによって指定された前記第1の出力ノードを前記オペレーション・ユニット・グラフ内の第2の出力ノードと適合させることによって前記パターン・マッチングを検出すること、及び、
前記オペレーション・ユニット・グラフ内の前記第2の出力ノードから始めて、前記オペレーション・ユニット・グラフ内の前記第2のノード及び前記第2のエッジが前記アーキテクチャ上のヒント内の前記第1のノード及び前記第1のエッジと適合することを決定するために前記オペレーション・ユニット・グラフをトラバースすること、
を更に含むアクションを実施する請求項14に記載のシステム。
【請求項16】
前記トラバースが上向きトラバースである請求項15に記載のシステム。
【請求項17】
前記統合されたオペレーション・ユニット・ブロックに融合されるが、前記統合されたオペレーション・ユニット・ブロックの外側にある前記オペレーション・ユニット・グラフの別のオペレーション・ユニットへのデータフローを有する前記オペレーション・ユニット・グラフのオペレーション・ユニットを識別すること、
前記識別されたオペレーション・ユニット及びそのデータフローを複製し、前記識別されたオペレーション・ユニット及びそのデータフローに入力を提供する前記統合されたオペレーション・ユニット・ブロック内の任意の他のオペレーション・ユニットを複製すること、及び、
前記統合されたオペレーション・ユニット・ブロック及び前記複製されたオペレーション・ユニット及びデータフローを有する前記オペレーション・ユニット・グラフに基づいて、前記アロケーティング及び前記実行を行うこと、
を更に含む前記方法を実施する請求項13に記載のシステム。
【請求項18】
前記アーキテクチャ上のヒントが、パターン・グラフに翻訳するノードとエッジのリストとして表現される請求項13に記載のシステム。
【発明の詳細な説明】
【優先出願】
【0001】
本出願は、米国特許出願第16/572,527号(発明の名称「再構成可能アーキテクチャのための性能見積ベースのリソース・アロケーション」、2019年9月16日出願(代理人整理番号SBNV 1016-2))に関連する。本関連出願は全ての目的のために参照により組み込まれる。
【技術分野】
【0002】
本技術は、再構成可能アーキテクチャ上でオペレーション・ユニット・グラフを効率的に実行することに関し、特に、粗粒度再構成可能アーキテクチャ及び他の分散実行システム上でのディープ・ニューラル・ネットワークの効率的な実行に適用することができる。
【合体資料】
【0003】
以下の文献は、ここに完全に記載されているかの如く、全ての目的のために参照により本出願に組み込まれる。
【0004】
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;
【0005】
Prabhakar, et al., "Plasticine: A Reconfigurable Architecture for Parallel Patterns," ISCA '17, June 24-28, 2017, Toronto, ON, Canada;
【0006】
2019年1月3日出願の米国特許出願番号16/239,252、発明の名称「再構成可能データ・プロセッサの仮想化」(代理人整理番号 SBNV 1000-1);
【0007】
2018年11月21日出願の米国特許出願番号16/197,826、発明の名称「再構成可能データ・プロセッサの構成ロード」, (代理人整理番号 SBNV 1001-1A);
【0008】
2018年11月21日出願の米国特許出願番号16/198,086、発明の名称「再構成可能データ・プロセッサの構成アンロード」、(代理人整理番号 SBNV 1001-1B);
【0009】
2019年1月29日出願の米国特許出願番号16/260,548、発明の名称「正規行列/転置読込とその再構成可能データ・プロセッサ」(代理人整理番号 SBNV 1005-1);
【0010】
2019年8月8日出願の米国特許出願番号16/536,192、発明の名称「再構成可能アーキテクチャのコンパイラ・フロー・ロジック」(代理人整理番号SBNV 1006-1);
【0011】
2019年5月9日出願の米国特許出願番号16/407,675、発明の名称「制御フローバリア及び再構成可能データ・プロセッサ」 (代理人整理番号 SBNV 1007-1);及び
【0012】
2019年7月8日出願の米国特許出願番号16/504,627、発明の名称「再構成可能データ・プロセッサの静止」(代理人整理番号SBNV 1008-1)。
【背景技術】
【0013】
このセクションで議論される主題は、単にこのセクションで言及された結果として、先行技術であると仮定されるべきではない。同様に、このセクションで言及された、または背景として提供される主題に関連する問題は、先行技術において以前に認識されたと仮定されるべきではない。このセクションの主題は単に、請求項に記載された技術の実施態様に対応することができる、様々な手法を表しているに過ぎない。
【0014】
フィールド・プログラマブル・ゲートアレイFPGAを含む再構成可能プロセッサは、コンピュータ・プログラムを実行する汎用プロセッサを使用して達成され得るものよりも効率的または高速に様々な機能を実装するように構成され得る。いわゆる粗粒度再構成可能アーキテクチャ(CGRA)が開発されており、このアーキテクチャでは、アレイ内の構成可能ユニットが、典型的なより細粒度のFPGAで使用されるよりも複雑であり、様々なクラスの機能のより高速またはより効率的な実行を可能にすることができる。例えば、機械学習及び人工知能作業負荷のためのエネルギー効率のよいアクセラレータの実施態様を可能にすることができるCGRAが提案されている。Prabhakar, et al., "Plasticine: A Reconfigurable Architecture for Parallel Patterns"、ISCA '17, June 24-28, 2017, Toronto, ON, Canadaを参照されたい。
【0015】
CGRAは、性能、電力、またはエネルギー効率が最優先の場合、極めて魅力的なプラットフォームである。CGRAは、再構成可能な相互接続ファブリックを使用して、あるトポロジ内で相互接続される粗粒度の再構成可能な演算要素及びメモリ要素の構成である。これは、アーキテクチャ内の再構成可能コンポーネントがFPGA等のアーキテクチャで一般に見られる細粒度のビットレベル粒度とは対照的に、命令、ワード、及びワードのベクトル等のより粗い粒度で動作するため、粗粒度再構成可能と呼ばれる。CGRAにおけるプログラマブル・データ及び制御パスは、再構成可能な演算及びメモリ・コンポーネントをカスタマイズされ、深くネストされた、階層的なパイプラインに接続することによって、アプリケーションにおけるネストされた並列性を利用するために、それらを自然に適合させる。
【0016】
最新のアプリケーションは、しばしば、幾つかのレベルのネストされたループレベルを有し、複数のレベルのネスティングにおける並列性を含む。このような深くネストされたループの場合、最も内側のループの本体のみに焦点を当てる従来のループ・パイプライン化方法では、しばしば、不十分な並列性を利用し、その結果、不十分なハードウェア利用の一因となり、性能、電力、またはエネルギー効率が悪くなる。
【0017】
オペレーションの並列性を指示するユーザ指定のアーキテクチャ上のヒントに基づいて、CGRAの再構成可能素子上でオペレーションの実行を加速することができる。並列化とハードウェア使用率が改善される可能性がある。
【図面の簡単な説明】
【0018】
図面において、同様の参照符号は一般に、様々な表示を通して同様の部分を指す。また、図面は必ずしも縮尺通りではなく、その代わりに、開示される技術の原理を示すことに概して重点が置かれる。以下の記載において、開示される技術の様々な実施態様が、以下の図面に関連して説明される。
【0019】
【
図1】ホスト、メモリ、及び、構成可能ユニットのアレイを備える再構成可能データ・プロセッサを含むシステムを示すシステム図である。
【0020】
【
図2】再構成可能データ・プロセッサ上でオペレーション・ユニット・グラフを効率的に実行するために融合を使用する一実施態様である。
【0021】
【
図3】JSON(JavaScript Object Notation)で記述されたパターン・グラフであり、ユーザ指定のアーキテクチャ上のヒントの例である。
【0022】
【
図4】JSONで記述されたパターン・グラフであり、ユーザ指定のアーキテクチャ上のヒントの別の例である。
【0023】
【
図5】開示された技術の一実施態様による融合アルゴリズムを示す。
【0024】
【
図6】
図5の融合アルゴリズムによって構成されるオペレーション・ユニットのパターンの一例を示す。
【0025】
【
図7】開示された技術の一実施態様によるパターン・マッチング(適合したサブグラフ)を見つけるサンプル・コードである。
【0026】
【0027】
【0028】
【
図10】
図6の融合アルゴリズムを、ResNet50のオペレーション・ユニット・グラフに適用する一例を示す。
【0029】
【
図11】結果として得られる融合されたResNet50のオペレーション・ユニット・グラフを示す。
【0030】
【
図12】性能見積を使用して、再構成可能データ・プロセッサの利用可能な物理演算ユニット及び/または物理メモリ・ユニットを、融合されたオペレーション・ユニット・グラフのオペレーション・ユニットに、その実行のために割り当てる一実施態様を示す。
【0031】
【
図13】再構成可能データ・プロセッサ上で融合されたオペレーション・ユニット・グラフを実行する性能見積を生成するために使用されるバイナリ・サーチ・アルゴリズムの一実施態様を示す。
【0032】
【
図14】再構成可能データ・プロセッサ上の融合されたオペレーション・ユニット・グラフのパイプライン演算ロードを処理するのに必要な再構成可能データ・プロセッサの物理演算ユニット及び/または物理メモリ・ユニットのパイプライン数を決定するリソース決定機能の一実施態様を示す。
【0033】
【
図15】融合されたオペレーション・ユニット・グラフの特定の加算オペレーション・ユニットのステージ演算ロードを決定する一例を示す。
【0034】
【
図16】融合されたオペレーション・ユニット・グラフの特定の行列乗算オペレーション・ユニットのステージ演算ロードを決定する別の例を示す。
【0035】
【
図17】開示された技術の一実施態様に従って、性能見積が決定される例示的なオペレーション・ユニット・グラフを示す。
【0036】
【
図18】開示された技術の一実施態様に従って、
図18のオペレーション・ユニット・グラフの異なるオペレーション・ユニットについて決定されたステージ演算処理時間を示す図である。
【0037】
【
図19A】
図1の再構成可能データ・プロセッサにおいて使用可能なタイル及びアレイ・レベル・ネットワークの簡略図である。
【
図19B】アレイ・レベル・ネットワーク内の素子を接続する例示的なスイッチ・ユニットを示す。
【0038】
【
図20】例示的な構成ユニットを示すブロック図である。
【発明を実施するための形態】
【0039】
以下の議論は、当業者が開示された技術を作成し、使用することを可能にするために提示され、特定の用途及びその要件との関連で提供される。開示された実施態様に対する種々の変形は、当業者には容易に明らかであり、本明細書で規定された全般的な原理は、開示された技術の趣旨及び範囲から逸脱することなく、他の実施態様及びアプリケーションに適用され得る。従って、開示された技術は、示された実施態様に限定されることを意図するものではなく、本明細書で開示された原理及び特徴と一致する最も広い範囲が与えられるべきである。
[再構成可能データ・プロセッサ]
【0040】
図1は、ホスト120、メモリ140、及び再構成可能データ・プロセッサ110を含むシステムを示すシステム図である。
図1の例に示すように、再構成可能データ・プロセッサ110は、構成可能ユニットのアレイ190と、構成ロード/アンロード・コントローラ195とを含む。本明細書で使用される「構成ロード/アンロード・コントローラ」という語句は、構成ロード・コントローラと構成アンロード・コントローラとの組合せを指す。構成ロード・コントローラ及び構成アンロード・コントローラは別個のロジック及びデータ・パス・リソースを使用して実装されてもよく、または特定の実施形態に適合するように、共用ロジック及びデータ・パス・リソースを使用して実装されてもよい。幾つかの実施形態では、システムが本明細書で説明するタイプの構成ロード・コントローラのみを含むことができる。幾つかの実施形態では、システムが本明細書で説明するタイプの構成アンロード・コントローラのみを含むことができる。
【0041】
構成可能ユニットのアレイ190の構成は、ビットストリームまたはビット・ファイルとも呼ばれる構成ファイルを作成するための、コンパイラ(図示せず)による構成記述のコンパイル、構成ファイルをアレイ190上の構成可能ユニットに分配することを伴う。一実施形態では、コンパイラがアプリケーション・プログラムからビット・ファイルへの変換を提供する。
【0042】
プロセッサ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つのチャンクを含むサブファイルを含む、異なるサイズのサブファイルを分配するように構成することができる。
【0043】
構成ファイルを用いて構成可能ユニットのアレイ190内の構成可能ユニットを構成するために、ホスト120は、再構成可能データ・プロセッサ110内のインタフェース130、バス・システム115、及びインタフェース150を介して、構成ファイルをメモリ140に送信することができる。ホスト120は、バス・システム125を介してインタフェース130に接続する。メモリ140は、バス・システム125を介してインタフェース150に接続する。構成ファイルは、構成可能プロセッサ110外のデータパス内を含む特定のアーキテクチャに適するように、多くの方法でロードされ得る。構成ファイルは、メモリ・インタフェース150を介してメモリ140から検索することができる。次いで、構成ファイルのチャンクは、本明細書で説明するように分配シーケンスで、再構成可能データ・プロセッサ110における構成可能ユニットのアレイ190内の構成可能ユニットに送信することができる。
【0044】
外部クロック発生器170または他のクロック信号源は、構成可能ユニットのアレイ190、バス・システム115、及び外部データI/Oインタフェースを含む、再構成可能データ・プロセッサ110内の素子にクロック信号175またはクロック信号を供給することができる。
[融合]
【0045】
図2は、再構成可能データ・プロセッサ100上でオペレーション・ユニット・グラフ204を効率的に実行するために融合200を使用する一実施態様である。フューザ214は、オペレーション・ユニット・グラフ204、アーキテクチャ上のヒント202、及びアーキテクチャ仕様212を入力として受け取り、融合されたオペレーション・ユニット・グラフ224を生成する。
【0046】
オペレーション・ユニット・グラフ204は、C、C++、Java、Python、またはSpatial等のプログラミング言語で書かれたアプリケーション・プログラムまたはソース・コードである。例えば、オペレーション・ユニット・グラフ204は、各レイヤが異なるプロパティを有する幾つかのネストされたループを含むように、様々なサイズ及びデータタイプの幾つかのレイヤを用いて畳み込みニューラルネットワーク(CNN)処理を実施することができる。例えば、オペレーション・ユニット・グラフ204は、入力及び重み付けにアクセスするためのメモリ・オペレーションと、行列乗算を実行するための浮動小数点演算とを含むことができる。別の例として、オペレーション・ユニット・グラフ204は、次のレイヤの出力を生成するために、前のレイヤからの入力値に次のレイヤの重みをロードして乗算する、高い反復カウントを有するネストされたループ、及びループ本体を含むことができる。オペレーション・ユニット・グラフ204は、粗粒度パイプライン化を使用して利用することのできる最も外側のループ本体のループレベルの並列性を有する。これは、ループ展開、SIMDベクトル化、及びパイプライン化を使用して同様に利用できる、最も内側のループ本体の命令レベルの並列性を有する。
【0047】
ループに関して、ループ本体に直接ネストされたループは、外側親ループの子ループと呼ばれる。ループは、子を持たない場合、即ち、その本体内にネストされたループがない場合、最も内側のループと呼ばれる。ループは、親を有さない場合、即ち、別のループの本体内にネストされていない場合、最も外側のループである。不完全にネストされたループは、非ループ文(例えば、基本演算、論理演算、関係演算のオペレーション)と1または複数の子ループが混在した本文を持つ。不完全にネストされたループにおける並列性は、任意のまたは全てのループレベルにおいて、及びループ本体を含むオペレーションにおいて利用することができる。並列性は、細粒度及び粗粒度パイプラインの並列性、データの並列性、及びタスクの並列性等の複数の形式で発生する。
【0048】
オペレーション・ユニット・グラフ204の実例として以下が含まれる:
・ AlexNet
・ ResNet
・ Inception
・ WaveNet
・ PixelCNN
・ GoogLeNet
・ ENet
・ U-Net
・ BN-NIN
・ VGG
・ LeNet
・ DeepSEA
・ DeepChem
・ DeepBind
・ DeepMotif
・ FIDDLE
・ DeepLNC
・ DeepCpG
・ DeepCyTOF
・ SPINDLE
【0049】
アーキテクチャ上のヒント202は、JSON、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を参照されたい。
【0050】
図3及び
図4は、JSONで書かれたアーキテクチャ上のヒント202の例を示す。アーキテクチャ上のヒント202は、再構成可能データ・プロセッサ100の物理演算ユニット及び/または物理メモリ・ユニット上で第1のオペレーション・ユニットのパターンを実行するときに、第1のオペレーション・ユニットを融合することを要求する。また、アーキテクチャ上のヒント202は、パターン内の第1の演算ユニットを第1のノードとして指定し、パターン内の第1の演算ユニット間の第1のデータフローを第1のエッジとして指定する。更に、アーキテクチャ上のヒント202は、パターン内の第1のオペレーション・ユニット(例えば、322、332、342、252、422)間の融合を指示する。
【0051】
一実施態様では、アーキテクチャ上のヒント202が、再構成可能データ・プロセッサ100の1つの物理演算ユニット上で実行可能な1つのオペレーションに融合されるノード・パターンのリストを記述する。幾つかの実施態様では、各ノード・パターンは、ノードのリスト(それらの汎用一意識別子(UUID)とオペレーション・タイプ)、ノードが如何に接続されているかを記述するエッジ(即ち、各ノードの入力のリスト)、及び融合されたノードのオペレーション・タイプで構成される。
【0052】
パターン・グラフ300は、アーキテクチャ上のヒント202の一例である。パターン・グラフ300は、(1)2次元(2D)畳み込みオペレーション・ユニット(Conv2D)、(2)バッチ正規化オペレーション・ユニット(BatchNorm)、及び(3)正規化線形ユニット(ReLU)オペレーション・ユニットの3つの演算ユニット(Conv2DBNRelu)の融合322を要求する。パターン・グラフ300は、これら3つのオペレーション・ユニットをノード302として指定し、これら3つのオペレーション・ユニット間のデータフローをエッジ312として指定する。
【0053】
パターン・グラフ300は、また、(1)2D畳み込みオペレーション・ユニット、及び、(2)バッチ正規化オペレーション・ユニットの2つのオペレーション・ユニット(Conv2DBN)の融合332を要求する。パターン・グラフ300は、また、(1)2D畳み込みオペレーション・ユニット、及び、(2)ReLUオペレーション・ユニットの2つのオペレーション・ユニット(Conv2DRelu)の融合342を要求する。パターン・グラフ300は、また、(1)乗算オペレーション・ユニット(Mm)、及び、(2)加算オペレーション・ユニット(Add)の2つのオペレーション・ユニット(Addmm)の融合352を要求する。
【0054】
パターン・グラフ400は、非シーケンシャル・パターンに対するアーキテクチャ上のヒント202の別の例である。パターン・グラフ400は、(1)第1の2D畳み込みオペレーション・ユニット、(2)第1のバッチ正規化オペレーション・ユニット、(3)第2の2D畳み込みオペレーション・ユニット、(4)第2のバッチ正規化オペレーション・ユニット、(5)加算オペレーション・ユニットの5つのオペレーション・ユニット(Conv2DBNAdd)の融合422を要求する。パターン・グラフ400は、これら5つのオペレーション・ユニットをノード402として指定し、これら5つのオペレーション・ユニット間のデータフローをエッジ412として指定する。ここで、再構成可能データ・プロセッサ100の1つの物理演算ユニットは、データの2つのセットに対して2D畳み込みオペレーションとバッチ正規化を行い、その結果を加算する。
【0055】
フューザ214は、再構成可能データ・プロセッサ100の目標アーキテクチャを考慮して融合を実行する。目標アーキテクチャは、アーキテクチャ仕様212において規定され、ユーザによって提供される。一実施態様では、アーキテクチャ上のヒント202が再構成可能データ・プロセッサ100の目標アーキテクチャに固有である。
【0056】
図6は、開示された技術の一実施態様による融合アルゴリズム500を示す。一実施態様では、融合アルゴリズム500がフューザ214によって実施される。
【0057】
オペレーション502において、融合アルゴリズム500は、ユーザ指定のアーキテクチャ上のヒント202に基づいて「オペレーション・ユニットのパターン」を構築する。オペレーション・ユニットのパターン内のノードは制御構造、データ・オペレーション、及びメモリ・アロケーションを表し、エッジは、データ及び効果依存性を表す。オペレーション・ユニットのパターンは分岐、ループ、関数呼び出し、及び制御依存性の他の変形をサポートする。一実施態様では、オペレーション・ユニットのそれぞれのパターンが複数入力を有することができるが、1つの出力のみを有することができる。出力ノードは、"node_pattern_output"と呼ばれる。
図6は、加算出力ノード622(node_pattern_output)と共に、2D畳み込みノード602,604及びバッチ正規化ノード612,614を有するオペレーション・ユニットのパターンの一例600を示す。
【0058】
アクション512において、融合アルゴリズム500は融合されていないオペレーション・ユニット・グラフ204内の、オペレーション・ユニットのパターンの出力ノード(例えば、加算出力ノード622)に適合するノードを見つける。この融合されていないオペレーション・ユニット・グラフ204内の適合したノードを"node_matched_output"と呼ぶ
【0059】
アクション522において、融合アルゴリズム500は、並列に、node_pattern_outputから、及び、node_matched_outputから上方へトラバースし、オペレーション・ユニットのパターン内の全てのノードがアクセスされるまで、全ての対応するノードが適合するかどうかをチェックする。全てのノードが適合する場合、「適合したサブグラフ」が見つかる。適合したサブグラフが見つからない場合、融合アルゴリズム500はアクション512に戻る。
【0060】
一実施態様では、アクション522は検出器714によって実行され、検出器は、順々にスキャナ702とマッチャー712を備える。アクション522を具体化するサンプル・コード724は、700のパターン・マッチング(適合したサブグラフ)を見つけるために、
図7にも提供される。スキャナ702は。融合されていないオペレーション・ユニット・グラフ204をスキャンして、アーキテクチャ上のヒント202によって指定された第1のオペレーション・ユニット(例えば、322、332、342、252、422)のパターンのインスタンスを検出する。マッチャー712は、オペレーション・ユニット・グラフ204内の第2のノード及び第2のエッジを、アーキテクチャ上のヒント202内の第1のノード及び第1のエッジと適合させ、パターン・マッチング(適合したサブグラフ)を検出する。
【0061】
一実施態様では、アクション522は、アーキテクチャ上のヒント202によって指定された第1の出力ノードをオペレーション・ユニット・グラフ204内の第2の出力ノードと適合させることによってパターン・マッチングを検出することと、オペレーション・ユニット・グラフ204内の第2の出力ノードから始めて、オペレーション・ユニット・グラフ204をトラバースして、オペレーション・ユニット・グラフ204内の第2のノード及び第2のエッジがアーキテクチャ上のヒント202内の第1のノード及び第1のエッジとマッチングすることを決定することとを含む。一実施態様では、トラバースは上向きトラバースである。
【0062】
アクション532で、融合アルゴリズム500は、適合したサブグラフ内の中間ノードが適合したサブグラフの外側を指す接続を有する場合に、その適合したサブグラフの一部を複製する統合されたオペレーション・ユニット・ブロック814は、2D畳み込みユニット(Conv2D)812、バッチ正規化オペレーション・ユニット(BatchNorm)824、及びReLUオペレーション・ユニット(ReLU)834を備える。ここで、Conv2D812及びBatchNorm824の中間結果は、加算オペレーション・ユニット(Add)842への入力として、統合されたオペレーション・ユニット・ブロック814の外部で必要とされる。これは、ノード融合後の正確さを保証するために、幾つかのノードの複製を必要とする。
【0063】
一実施態様では、適合したサブグラフ(即ち、統合されたオペレーション・ユニット・ブロック)の中間ノードを接続する任意のコネクションについて、統合されたオペレーション・ユニット・ブロック内の中間ノード並びにその先祖の全てが複製される。統合されたオペレーション・ユニット・ブロック814の場合、そのような中間ノードは、Conv2D812及びBatchNorm824である。
【0064】
図9は、識別されたオペレーション・ユニット(例えば、Conv2D812A、Conv2D812B、BatchNorm824)及びそのデータフローを複製し(900)、識別されたオペレーション・ユニット(例えば、BatchNorm824)及びそのデータフローに入力を提供する統合されたオペレーション・ユニット・ブロック814内の任意の他のオペレーション・ユニット(例えば、Conv2D812A)を複製することを示す。
【0065】
アクション542で、融合アルゴリズム500は、アーキテクチャ上のヒント202によって指定されたように、適合したサブグラフを融合されたノードで置き換える。一実施態様では、フューザ214が、オペレーション・ユニット・グラフ204内の第2のノードと第2のエッジとを統合されたオペレーション・ユニット・ブロックに融合して、融合されたオペレーション・ユニット・グラフ224を生成する。
【0066】
アロケータ234は、再構成可能データ・プロセッサ100の物理演算ユニット及び/または物理メモリ・ユニットを融合されたオペレーション・ユニット・グラフ224にアロケーティングする。
【0067】
エグゼキュータ244は、該アロケーティングに基づいて、再構成可能データ・プロセッサ100上で融合されたオペレーション・ユニット・グラフ224を実行する。
[ResNet50の融合例]
【0068】
図10は、
図6の融合アルゴリズムをResNet50のオペレーション・ユニット・グラフ1000に適用する一例を示す。融合アルゴリズム500は、Conv2Dオペレーション・ユニット1002、BatchNormオペレーション・ユニット1012、Conv2Dオペレーション・ユニット1022、BatchNormオペレーション・ユニット1032、及びAddオペレーション・ユニット1042を含む適合したサブグラフを、それらのデータフロー(点線の矢印として示される)と共に識別する。
【0069】
図11は、得られた融合されたResNet50のオペレーション・ユニット・グラフ1100を、統合されたオペレーション・ユニット・ブロック1102(即ち、融合されたブロック)と共に示す。
[性能見積]
【0070】
開示された技術は、再構成可能データ・プロセッサ100上でオペレーション・ユニット・グラフを実行するための性能見積を生成する。オペレーション・ユニット・グラフは、融合されたオペレーション・ユニット・グラフ224とすることができる。一実施態様では、性能見積は、再構成可能データ・プロセッサ100の利用可能な物理演算ユニット及び/または物理メモリ・ユニットをオペレーション・ユニット・グラフのオペレーション・ユニットにアロケーティングするために使用される。
【0071】
図12は、性能見積1200を使用して、再構成可能データ・プロセッサ100の利用可能な物理演算ユニット及び/または物理メモリ・ユニットを、融合されたオペレーション・ユニット・グラフ224のオペレーション・ユニットに、その実行のためにアロケーティングする一実施態様を示す。
【0072】
性能見積器1202は、融合されたオペレーション・ユニット・グラフ224を入力として受け取り、出力として性能見積1262を生成する。一実施態様では、性能見積1262を使用して、再構成可能データ・プロセッサ100の利用可能な物理演算ユニット及び/または物理メモリ・ユニットを融合されたオペレーション・ユニット・グラフ224のオペレーション・ユニットにアロケーティングし、次いで、再構成可能データ・プロセッサ100上で融合されたオペレーション・ユニット・グラフ224を実行する。
【0073】
幾つかの実施態様では、ビジュアライザ1272が、表示用の性能見積1262を生成する。視覚化は、融合されたオペレーション・ユニット・グラフ224が再構成可能データ・プロセッサ100によってどの程度効率的に実行されるかを伝えるために使用することができる。視覚化は、比較分析に使用して、融合されたオペレーション・ユニット・グラフ224の性能見積をオペレーション・ユニット・グラフ204の性能見積と比較することができる。視覚化は、第1の融合されたオペレーション・ユニット・グラフの性能見積と第2の融合されたオペレーション・ユニット・グラフの性能見積を比較する比較分析に使用することができる。視覚化は、第1のオペレーション・ユニット・グラフの性能見積を第2のオペレーション・ユニット・グラフの性能見積と比較するための比較分析に使用することができる。
【0074】
性能見積器1202は、サーチャー1212と、パイプライン・リソース決定器1222と、ステージ待ち時間決定器1232と、ステージ・リソース決定器1242と、性能見積計算器1252とを備える。
【0075】
一実施態様では、性能見積1262は、再構成可能データ・プロセッサ100上で融合されたオペレーション・ユニット・グラフ224を実行するスループット及び待ち時間を識別する。理想的なケースでは、チップ(再構成可能データ・プロセッサ100)の使用率は100%で、これは次のように定式化できる:
ここで、GRAPH FLOPは、融合されたオペレーション・ユニット・グラフ224における浮動小数点演算の総数であり、CHIP FLOPSは、1秒当たりにチップ(再構成可能データ・プロセッサ100)によって処理可能な浮動小数点演算の最大数である。
【0076】
チップ(再構成可能データ・プロセッサの100)の100%使用率が、(例えば、ソフトウェアやハードウェアの制約のために)達成されない場合、:
但し、ηは平均チップ使用率である。
【0077】
ここで、ηは再構成可能データ・プロセッサ100のアーキテクチャ、融合されたオペレーション・ユニット・グラフ224、及び/または融合されたオペレーション・ユニット・グラフ224の入力次元に依存する数字であり、従って、容易に見積もることができない。更に、特定のオペレーション・ユニット・グラフについては、再構成可能データ・プロセッサ100の異なる物理演算ユニット及び/または物理メモリ・ユニットの使用率も異なってくる可能性があり、これは特定の物理演算ユニットまたは物理メモリ・ユニット上で実行されるオペレーション及びデータ・サイズに依存する。例えば、畳み込みを実行する物理演算ユニットは非常に高い使用率を達成することができ、一方、加算を実行する物理演算ユニットは、使用率が低くなり得る。これらの変数は正確な性能見積を困難にする。
[バイナリ・サーチ]
【0078】
図13は、再構成可能データ・プロセッサ100上で融合されたオペレーション・ユニット・グラフ224を実行する性能見積1262を生成するために使用されるバイナリ・サーチ・アルゴリズム1300の一実施態様を示す。
【0079】
サーチャー1212は、バイナリ・サーチ・アルゴリズム1300による反復処理を使用して、融合されたオペレーション・ユニット・グラフ224のオペレーション・ユニットを実行するのに必要な汎用ステージ演算処理時間("stage_latency")を決定する。一実施態様では、サーチャー1212は、汎用ステージ演算処理時間("stage_latency")のサーチ範囲の下限("stage_latency_low")及び上限("stage_latency_high")を初期化する。
【0080】
一実施態様では、汎用ステージ演算処理時間("stage_latency")のサーチ範囲下限("stage_latency_low")は、再構成可能データ・プロセッサ100の最大使用率(例えば、100%使用率)に基づくことができる。これは、アクション1302において具体化される。
【0081】
一実施態様では、汎用ステージ演算処理時間("stage_latency")のサーチ範囲上限("stage_latency_high")は、汎用ステージ演算処理時間("stage_latency")のサーチ範囲下限("stage_latency_low")と最小使用ファクタの乗算に基づくことができる。幾つかの実施態様では、最小使用ファクタが100であるため、最小使用率は1% である。他の実施態様では、サーチ範囲上限("stage_latency_high")の初期値は、サーチ範囲下限("stage_latency_low")の1000倍に設定されており、これはまた、0.1%使用率に等しくなる。これも、アクション1302において具体化される。
【0082】
次に、サーチャー1212は評価のために、汎用ステージ演算処理時間("stage_latency")のサーチ範囲下限("stage_latency_low")とサーチ範囲上限("stage_latency_high")間の中間ステージ演算処理時間を選択する。一実施態様では、中間ステージの演算処理時間は、汎用ステージの演算処理時間("stage_latency")のサーチ範囲下限("stage_latency_low")とサーチ範囲上限("stage_latency_high")の平均("stage_latency_average")にすることができる。これは、アクション1312において具体化される。
【0083】
次に、パイプライン・リソース決定器1222は、再構成可能データ・プロセッサ100上の融合されたオペレーション・ユニット・グラフ224のパイプライン演算ロードを処理するのに必要な物理演算ユニット及び/または物理メモリ・ユニットのパイプライン数1432("total_PCUs")を決定する。
[ステージ演算ロード]
【0084】
図14を参照すると、融合されたオペレーション・ユニット・グラフ224の各オペレーション・ユニット("for node in fused_graph")に対して、ステージ待ち時間決定器1232は、リソース決定機能(例えば、"get_graph_PCUs"1402)を使用して、リソース決定1400を実行し、1つの物理演算ユニットのみ及び/または1つの物理メモリ・ユニットのみを使用して融合されたオペレーション・ユニット・グラフ224のオペレーション・ユニットのそれぞれ1つのステージ演算ロード1424("node.get_flop()")を処理するのに必要な特定のステージ演算処理時間1414("node_latency_with_one_PCU")を決定する。
【0085】
オペレーション・ユニットのそれぞれ1つのステージ演算ロード1424("node.get_flop()")は、オペレーション・ユニットのそれぞれ1つを実行するのに必要な浮動小数点演算(FLOP)の総数を意味するが、そのオペレーション・タイプ、入力次元、及び出力次元によって決定される。
【0086】
例えば、
図15では、加算オペレーション・ユニットについてのステージ演算ロード1500が、出力サイズの関数としてFLOP1502の総数を先ず計算することによって決定される。即ち、1回のオペレーションで1つの出力数が生成される。次いで、テンソル形状に基づいて入力サイズ1512が計算される。
【0087】
再構成可能データ・プロセッサ100の一実施態様では、物理演算ユニットは32のレーン及び6つのステージを有し、全体で196(32×6)の算術論理ユニット(ALU)を有する。各ALUは、1サイクル当たり2つの演算を実行することができ、1サイクルで1つの乗算と加算を終了することができる。これは"n_passes"1522 として具体化される。
【0088】
加算オペレーション・ユニットは1ステージしか使用できないので、"/ config.PCU_N_STAGES"パラメータ1536は、"PCU_utilization"計算式1532に含まれる。PCU使用率計算1532の他の構成要素1534は、加算が全てのレーンを活用することができない可能性があることによるものである。例えば、32個の数字に32個の数字を追加すると、32個のレーンを(並列に)活用できる。しかし、40個の数字があれば、最初に32個の数字をロードし、次に8個の数字をロードし、従って、使用率に(44/64)が乗算される。
【0089】
別の例では、
図16において、行列乗算オペレーション・ユニットのステージ演算ロード1600が、先ず、出力サイズM×Nの関数としてFLOP1602の総数を先ず計算することによって決定される、即ち、出力要素毎に、K回の乗算及び加算オペレーションを行う必要があり、従って、総FLOPはM×N×(K×2)である。
【0090】
1つの物理演算ユニットを使用して、1612で具体化されるように、M次元の32レーンにわたって並列化し、N次元の6つのステージにわたって並列化することができる。従って、M=64、K=100、N=12であれば、第1の行列を2つの32×100のチャンクに分割し、第2の行列を2つの200×6のチャンクに分割することによって、100%の使用率1622を達成することができる。しかし、M=16、K=100、N=3の場合、25%の使用率1622しか得ることができない。
[ステージ演算処理時間]
【0091】
最後に、特定ステージ演算処理時間1414("node_latency_with_one_PCU")は、1つの物理演算ユニットのみ及び/または1つの物理メモリ・ユニットのみの使用率と能力との比率として決定される(後者は特定のプロセッサ/チップ/ハードウェアに対して定数とすることができる)。
[ステージ・リソース]
【0092】
ステージ・リソース決定器1242は、特定ステージ演算処理時間1414("node_latency_with_one_PCU")を中間ステージ演算処理時間1434(例えば、"stage_latency_average")で除算することによって、オペレーション・ユニットのそれぞれ1つのステージ演算ロード1424("node.get_flop()")を処理するのに必要な物理演算ユニット及び/または物理メモリ・ユニットのステージ数1432("node_PCUs")を決定する。
【0093】
一実施態様では、ステージ・リソース決定器1242が、ステージ演算処理時間1414("node_latency_with_one_PCU")を中間ステージ演算処理時間1432(例えば"stage_latency_average")で除算した結果である整数に切り上げることによって、ステージ演算ロード1424("node.get_flop()")を処理するのに必要な物理演算ユニット及び/または物理メモリ・ユニットのステージ数1432("node_PCUs")を決定する。これは、天井関数1433によって具体化される。
[パイプライン・リソース]
【0094】
パイプライン・リソース決定器1222はオペレーション・ユニットのそれぞれについて物理演算ユニット及び/または物理メモリ・ユニットのステージ数1432("node_PCUs")を合計し、物理演算ユニット及び/または物理メモリ・ユニットのパイプライン数1442("total_PCUs")を生成する。これも、
図13のアクション1312において具体化される。
【0095】
一実施態様では、ノード毎に、1つのPCUのみが使用される場合、先ず、その待ち時間を計算した。これは、各オペレーション(例えば、Conv、Add)のモデリングを有するノード・ライブラリを構築することを必要とし、その結果、入力及び出力サイズが与えられると、FLOP及び各オペレーションの使用率を演算する方法が分かる。次に、この待ち時間(1つのPCUを有する)と目標stage_latencyとの間の比率を調べて、このオペレーションを並列化するのに必要なPCUの数を決定する。グラフの合計PCUは、各ノードにアロケーティングされたPCUの合計になる。
[反復]
【0096】
次に、サーチャー1212は汎用ステージ演算処理時間("stage_latency")の新しいサーチ範囲下限("stage_latency_low")及びサーチ範囲上限("stage_latency_high")を反復的に初期化し、次の反復における評価のために、前の反復における前の中間ステージ演算処理時間に対して生成された物理演算ユニット及び/または物理メモリ・ユニットのパイプライン数1432("total_PCUs")が、利用可能な物理演算ユニット及び/または物理メモリ・ユニット(available_PCUs)よりも低いか高いかを考慮して、汎用ステージ演算処理時間("stage_latency")の新しいサーチ範囲下限及びサーチ範囲上限間の新しい中間ステージ演算処理時間を選択する。これは、アクション1322において具体化される。
【0097】
一実施態様では、前の反復における前の中間ステージ演算処理時間のために生成された物理演算ユニット及び/または物理メモリ・ユニットのパイプライン数1432("total_PCUs")が利用可能な物理演算ユニット及び/または物理メモリ・ユニット(available_PCUs)よりも低い場合、サーチャー1212は、次の反復のための新しいサーチ範囲上限("stage_latency_high")を前の中間ステージ演算処理時間(例えば、"stage_latency_average")として設定する。これは、動作1324において具体化される。
【0098】
一実施態様では、前の反復における前の中間ステージ演算処理時間のために生成された物理演算ユニット及び/または物理メモリ・ユニットのパイプライン数1432("total_PCUs")が利用可能な物理演算ユニット及び/または物理メモリ・ユニット(available_PCUs)よりも高い場合、サーチャー1212は、次の反復のための新しいサーチ範囲下限("stage_latency_low")を前の中間ステージ演算処理時間(例えば、"stage_latency_average")として設定する。これは、アクション1332において具体化される。
【0099】
一実施態様では、各反復でサーチ範囲の上限と下限の中間点(stage_latency_average)を選択し、get_graph_PCUs関数の呼び出しを介して、このようなステージ待ち時間を実現するのに必要な合計PCUの見積りを取得する。PCUの合計数が利用可能なPCUを超える場合は、ステージ待ち時間を増やす必要がある(stage_latency_low = stage_latency_average)。それ以外の場合は、性能を更に向上させるために費やす演算リソースが増えるため、ステージ待ち時間の削減を試みる(stage_latency_high = stage_latency_average)。
[終了]
【0100】
サーチャー1212は、現在の反復における現在の中間ステージ演算処理時間のために生成された物理演算ユニット及び/または物理メモリ・ユニットのパイプライン数1432("total_PCUs")が収束基準を満たす場合、反復初期化及び選択を終了する。一実施態様では、サーチ範囲上限とサーチ範囲下限間の差異が閾値未満になるとき、収束基準が生じる。これは、アクション1342において具体化される。一実施態様では、サーチャー1212がサーチ範囲上限とサーチ範囲下限間の差異が閾値を上回る限り、反復初期化及び選択を継続する。
[スループット及び待ち時間]
【0101】
性能見積計算器1252は、現在の中間ステージ演算処理時間の逆関数としてパイプライン・スループットを計算し、ステージ演算処理時間に融合されたオペレーション・グラフ224内のオペレーション・ユニットの数("graph depth")を乗算することによってグラフ待ち時間を計算する。これは、アクション1344において具体化される。
[汎用性能見積例]
【0102】
図17は、開示された技術の一実施態様に従って、性能見積が決定される例示的なオペレーション・ユニット・グラフ1700を示す。
【0103】
空間アーキテクチャでは、ノード・オペレーションはパイプライン化される。言い換えれば、各ノードはパイプライン内のステージであり、パイプラインの長さはグラフの深さである。例えば、オペレーション・ユニット・グラフ1700では、パイプライン内に5つのノード/ステージ/オペレーション・ユニットがある。第2のオペレーション「Add1」にアロケーティングされたPCUがn番目のサンプルに加算を適用している間、第1のオペレーション「Conv1」1702のPCUはn+1番目のサンプルに対して畳み込みを実行している(また、Conv2はn-1番目のサンプルに対するオペレーション等である)。
【0104】
図18は、開示された技術の1つの実施態様に従った、
図17のオペレーション・ユニット・グラフ1700の異なるオペレーション・ユニット1702、1712、1722、1732、及び1742について決定されたステージ演算処理時間1800を図示する。列1802及び1812内の値は、1つのPCU及び/またはPCUのみがそれぞれのノード/オペレーション・ユニット/ステージにアロケーティングされる場合に考慮される、同様に命名されたセクションにおいて上述されたステージ演算ロード及びステージ演算処理時間の実施形態に基づいて決定される。
【0105】
ここで、40台の利用可能なPCU(available_PCUs)があると仮定する。ステージ待ち時間の現在のサーチ範囲を4us(stage_latency_low)及び12us(stage_latency_high)と仮定する。中間点を(4+12)/2=8us(stage_latency_average)とする。Conv1 1702が8usを達成するためには、200/8=25通りに並列化する必要がある。従って、Conv1 1702に25個のPCUを割り当てる。同様に、Add1 1712にceil(18/8)=3PCUを、Conv2 1722にceil(110/8)=14PCUを、Add2 1732にceil(9/8)=2PCUを、MM 1742にceil(50/8)=7PCUを割り当てる。使用されるPCUの合計は、25+3+14+2+7=51(total_PCUs)で、使用可能な40 (available_PCUs)よりも大きくなる。
【0106】
従って、stage_latency_low =8usとすることによって、ステージ待ち時間を増加させ、試みる次の中間点は(8+12)/2=10usとなる。バイナリ・サーチ・アルゴリズム1300は最終的に、最適ステージ待ち時間として11usに収束する。これに基づいて、見積もられたスループットは、1/11us=90,909サンプル/sである。グラフ待ち時間は11us×5=55usである。
[再構成可能タイル]
【0107】
図19Aは、
図1の再構成可能データ・プロセッサにおいて使用可能なタイル及びアレイ・レベル・ネットワークの簡略
図1900である。
図19Bは、アレイ・レベル・ネットワークにおける素子を接続する例示的なスイッチ・ユニットを示す。この例では、構成可能ユニット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」を参照されたく、また、上記文献は本明細書に完全に記載されているかのように参照により組み込まれる。
【0108】
これらの構成可能ユニットのそれぞれは、プログラムを実行するためのセットアップまたはシーケンスの何れかを表すレジスタまたはフリップフロップのセットを備える構成ストアを含み、ネストされたループの数、各ループ・イテレータの限界、各ステージに対して実行される命令、オペランドのソース、及び、入力及び出力インタフェースのネットワーク・パラメータを含むことができる。
【0109】
更に、これらの構成可能ユニットのそれぞれは、ネストされたループまたは他のものにおける進行を追跡するために使用される状態を記憶するレジスタまたはフリップフロップのセットを備える構成ストアを含む。構成ファイルは、プログラムを実行する各構成要素の初期構成または開始状態 を表すビットストリームを含む。このビットストリームは、ビット・ファイルと呼ばれる。プログラム・ロードは、ビット・ファイルの内容に基づいて構成可能ユニットのアレイ190に構成ストアをセットアップし、全ての構成要素がプログラム(つまり、マシン)を実行できるようにする処理である。また、プログラム・ロードは、全てのPMUメモリのロードを必要とすることもある。
【0110】
アレイ・レベル・ネットワークは、アレイ内の構成可能ユニットを相互接続するリンクを含む。アレイ・レベル・ネットワーク内のリンクは、1以上の物理バスを含み、この場合では、チャンクレベル・ベクトル・バス(例えば、128ビットのデータ)、ワードレベル・スカラバス(例えば、32ビットのデータ)、及び、複数ビットレベルの制御バスの3種類の物理バスを含む。例えば、スイッチ・ユニット1911と1912との間の相互接続1921は、128ビットのベクトル・バス幅を有するベクトル・バス相互接続と、32ビットのスカラ・バス幅を有するスカラ・バス相互接続と、制御バス相互接続とを含む。
【0111】
3種類の物理バスは、転送されるデータの粒度が異なる。一実施形態では、ベクトル・バスがそのペイロードとして16バイト(=128ビット)のデータを含むチャンクを搬送することができる。スカラ・バスは32ビットのペイロードを持つことができ、スカラ・オペランドまたは制御情報を搬送することができる。制御バスは、トークン及び他の信号等の制御ハンドシェイクを搬送することができる。ベクトル・バスとスカラ・バスはパケット交換が可能であり、各パケットの宛先を示すヘッダと、パケットが順不同で受信されたときにファイルを再構成するために使用できるシーケンス番号等のその他の情報を含む。各パケットヘッダには、宛先スイッチ・ユニットの地理的座標(例:アレイ内の行と列)を識別する宛先識別子と、宛先ユニットに到達するために使用される宛先スイッチ上のインタフェースを識別するインタフェース識別子(例:北、南、東、西等)を含めることができる。制御ネットワークは、例えば、デバイス内のタイミング回路に基づいて切り換えられた回路であり得る。設定ロード/アンロード・コントローラは、128ビットの構成データのチャンク毎にヘッダを生成できる。ヘッダは、ヘッダ・バス上で、構成可能ユニットのアレイ190内の各構成可能ユニットに送信される。
【0112】
一例では、128ビットのデータのチャンクが、構成可能ユニットへのベクトル入力としてチャンクを提供するベクトル・バス上で送信される。ベクトル・バスには、128本のペイロードラインと、一組のヘッダラインを含めることができる。ヘッダには、チャンク毎に、シーケンスIDを含めることができ、それは、以下を含み得る:
【0113】
チャンクがスクラッチパッド・メモリまたは構成ストアデータであることを示すビット。
・チャンク番号を形成するビット。
・列識別子を示すビット。
・行識別子を示すビット。
・構成要素識別子を示すビット。
【0114】
ロード・オペレーションの場合、構成ロード・コントローラは、N-1から0までの順序で、N個のチャンクを構成可能ユニットに送信することができる。この例では、6つのチャンクが、チャンク5->チャンク4->チャンク3->チャンク2->チャンク1->チャンク0 の最上位ビット・ファーストの順序で送信される(この最上位ビット・ファーストの順序は、チャンク5がアレイ構成ロード・コントローラからの分配シーケンスのラウンド0に分配されることに注意する)。アンロード・オペレーションの場合、構成アンロード・コントローラは、順序のアンロード・データをメモリに書き出すことができる。ロード・オペレーション及びアンロード・オペレーションの両方について、構成可能ユニット内の構成データ・ストア内の構成シリアル・チェーン内のシフトは、LSB(最下位ビット)からMSB(最上位ビット)へ、またはMSBアウト・ファーストである。
【0115】
図19Bは、アレイ・レベル・ネットワーク内の素子を接続する例示的なスイッチ・ユニットを示す。
図19Bの例に示すように、スイッチ・ユニットは、8つのインタフェースを有することができる。スイッチ・ユニットの北、南、東、及び西インタフェースは、スイッチ・ユニット間の接続に使用される。スイッチ・ユニットの北東、南東、北西、及び南西インタフェースはそれぞれ、PCUまたはPMUインスタンスへの接続を行うために使用される。各タイル象限内の2つのスイッチ・ユニットのセットは、複数のアドレス生成(AG)ユニットと、複数のアドレス生成ユニットに接続された結合ユニット(CU)とを含むアドレス生成及び結合ユニット(AG CU)への接続を有する。結合ユニット(CU)はAG間を調停し、メモリ・リクエストを処理する。スイッチ・ユニットの8つのインタフェースのそれぞれは、ベクトル・インタフェース、スカラ・インタフェース、及び、ベクトル・ネットワーク、スカラ・ネットワーク、及び制御ネットワークと通信するための制御インタフェースを含むことができる。
【0116】
構成後のマシンの実行中に、データは、アレイ・レベル・ネットワーク上の1以上のスイッチ・ユニットのベクトル・バス及びベクトル・インタフェースを使用して、1以上のユニットスイッチ及びユニットスイッチ間の1以上のリンクを介して構成可能ユニットに送信することができる。
【0117】
本明細書で説明される一実施形態では、タイルの構成前に、構成ファイルまたはビット・ファイルを、同じベクトル・バスを使用して構成ロード・コントローラから、アレイ・レベル・ネットワーク上の1以上のスイッチ・ユニットのベクトル・バス及びベクトル・インタフェースを使用して、1以上のユニットスイッチと、ユニットスイッチ間の1以上のリンクとを介して、構成可能ユニットに送信することができる。例えば、構成可能ユニットPMU1941に特有のユニットファイル内の構成データのチャンクは、構成ロード/アンロード・コントロ-ラ1901からPMU1941に、構成ロード・アンロード・コントローラ1901とスイッチ・ユニット1911の西(W)ベクトル・インタフェースとの間のリンク1920、スイッチ・ユニット1911、及びスイッチ・ユニット1911の南東(SE)ベクトル・インタフェースとPMU1941との間のリンク1931を介して、送信することができる。
【0118】
この例では、AGCUの1つは、構成ロード/アンロード・コントローラ(例えば、1901)を含むマスタAGCUとなるように構成される。マスタAGCUは、ホスト(120、
図1)がバス・システムを介してマスタAGCUにコマンドを送信できるレジスタを実装する。マスタAGCUは、タイル内の構成可能ユニットのアレイに対するオペレーションを制御し、レジスタへの書き込みを通じてホストから受信したコマンドに基づいて、タイルの状態を追跡するプログラム制御ステート・マシンを実装する。状態遷移毎に、マスタAGCUは、デイジー・チェーン接続されたコマンド・バスを介してタイル上の全ての構成要素にコマンドを発行する(
図19A)。コマンドには、タイル内の構成可能ユニットのアレイで構成可能ユニットをリセットするプログラム・リセット・コマンドと、構成可能ユニットに構成ファイルをロードするプログラム・ロード・コマンドが含まれる。
【0119】
マスタAGCUの構成ロード・コントローラは、メモリから構成ファイルを読み取り、タイルの全ての構成可能ユニットに構成データを送信する。マスタAGCUは、好ましくはトップ・レベル・ネットワークの最大スループットでメモリから構成ファイルを読み取ることができる。メモリから読み出されたデータは、マスタAGCUによって、本明細書で説明する分散シーケンスに従って、アレイ・レベル・ネットワーク上のベクトル・インタフェースを介して、対応する構成可能ユニットに送信される。
【0120】
一実施形態では、構成可能ユニット内のワイヤリング要求を削減できる方法で、構成要素において構成ロード処理でロードされるか、または構成アンロード処理でアンロードされるユニットファイルを保持する構成レジスタ及びステータス・レジスタは、シリアル・チェーンで接続でき、シリアル・チェーンを介してビットをシフトする処理を通じてロードできる。幾つかの実施形態では、並列または直列に配置された2以上のシリアル・チェーンがあってもよい。構成可能ユニットが、例えば、1つのバスサイクルで128ビットの構成データをマスタAGCUから受信すると、構成可能ユニットは、このデータを、1サイクル当たり1ビットのレートで、そのシリアル・チェーンを介してシフトする。ここで、シフトサイクルは、バスサイクルと同じレートで実行することができる。構成可能ユニットが、ベクトル・インタフェースを介して受信された128ビットのデータを有する128の構成ビットをロードするのに、128シフトサイクルを要する。128ビットの構成データは、チャンクと呼ばれる。構成可能ユニットは、その全ての構成ビットをロードするために複数チャンクのデータを必要とすることがある。
【0121】
構成可能ユニットは、複数のメモリ・インタフェース(150、
図1)を介してメモリとインタフェースする。メモリ・インタフェースのそれぞれには、幾つかのAGCUを使用してアクセスできる。各AGCUは、オフチップ・メモリのリクエストを生成するための再構成可能データパスを含む。各AGCUには、送信するコマンド、データ、及び、オフチップ・メモリからの受信応答をバッファするためのFIFO(データを編成するための先入先出バッファ)が含まれている。
【0122】
AGCU内のアドレス生成器AGは、高密度(デンス)または低密度(スパース)の何れかであるメモリコマンドを生成することができる。高密度リクエストは、連続するオフチップ・メモリ領域をバルク転送するために使用することができ、構成可能ユニットのアレイ内の構成可能ユニットとの間でデータのチャンクを読み出しまたは書き込みするために使用することができる。高密度リクエストは、AGCU内の結合ユニット(CU)によって複数のオフチップ・メモリ・バースト要求に変換することができる。低密度リクエストは、アドレスのストリームを結合ユニットにエンキューできる。結合ユニットは、結合キャッシュを使用して、発行されたオフチップ・メモリ・リクエスト上のメタデータを維持し、同じオフチップ・メモリ・リクエストに属する低密度アドレスを組み合わせて、発行されたオフチップ・メモリ・リクエストの数を最小化することができる。
[再構成可能ユニット]
【0123】
図20は、パターン演算ユニット(PCU)等の例示的な構成可能ユニット2000を示すブロック図である。本明細書の文脈において、PCUは物理演算ユニットに対応する。構成可能ユニットのアレイ内の構成可能ユニットは、対応する構成可能ユニットに特有の構成データの複数のチャンク(または他のサイズのサブファイル)を含むユニットファイルを格納するための構成データ・ストア2020(例えば、シリアル・チェーン)を含む。構成可能ユニットのアレイ内の構成可能ユニットはそれぞれ、ユニット構成ロード処理を実行するために、ライン2022を介して構成データ・ストア2020に接続されたユニット構成ロード・ロジック2040を含む。ユニット構成ロード処理は、バス・システム(例えば、ベクトル入力)を介して、構成可能ユニットに特有のユニットファイルのチャンクを受信することと、受信したチャンクを構成可能ユニットの構成データ・ストア2020にロードすることとを含む。
【0124】
この例での複数の構成可能ユニット内の構成可能ユニットにおける構成データ・ストアは、ラッチのシリアル・チェーンを備え、ラッチは構成可能ユニット内のリソースの構成を制御するビットを格納する。構成データ・ストアのシリアル・チェーンには、構成データ用のシフト・レジスタ・チェーンと、直列に接続された状態情報及びカウンタ値用の第2のシフト・レジスタ・チェーンを含めることができる。
【0125】
構成可能ユニットは、スカラ入力/出力、ベクトル入力/出力、及び制御入力/出力の3つの対応する入力及び出力(IO)のセットを使用して、スカラ・バス、ベクトル・バス、及び制御バスとインタフェースすることができる。スカラIO は、データの単一ワード(32ビット等)の通信に使用できる。ベクトルIOは、ユニット構成ロード処理において構成データを受信し、構成後のオペレーション中に複数のPCU間の長いパイプラインを介してデータを送受信するような場合に、データのチャンク(例えば、128ビット)を通信するために使用することができる。制御IOを使用して、構成可能ユニットの実行の開始または終了等の制御信号を通信することができる。制御入力は制御ブロック2070によって受信され、制御出力は制御ブロック2070によって供給される。
【0126】
各ベクトル入力は、1以上のベクトルFIFOを含むことのできるベクトルFIFOブロック2060内のベクトルFIFOを使用してバッファリングされる。各スカラ入力は、スカラFIFO2050を使用してバッファリングされる。入力FIFOを使用することで、データのプロデューサとコンシューマ間のタイミングを切り離し、入力遅延不整合に対してロバストにすることによって、構成可能ユニット間の制御ロジックを単純化する。
【0127】
入力構成データ2010は、ベクトル入力としてベクトルFIFOに供給され、次いで構成データ・ストア2020に転送される。出力構成データ2030は、ベクトル出力を使用して構成データ・ストア2020からアンロードすることができる。
【0128】
CGRAは、ロード/アンロード・コマンドが完了した時を示すために、デイジー・チェーン接続された完了バスを使用する。マスタAGCUは、デイジー・チェーン接続されたコマンド・バスを介して、プログラム・ロード及びアンロード・コマンドを構成可能ユニットのアレイ内の構成可能ユニットに送信する。
図20の例に示すように、デイジー・チェーン接続された完了バス2091及びデイジー・チェーン接続されたコマンド・バス2092は、ユニット構成ロード・ロジック2040と通信するデイジー・チェーン・ロジック2093に接続されている。デイジー・チェーン・ロジック2093は、以下に説明するように、ロード完了状態ロジックを含むことができる。デイジー・チェーン接続された完了バスについては、以下で更に説明する。コマンド・バス及び完了バスの他のトポロジも明らかに可能であるが、ここでは説明しない。
【0129】
構成可能ユニットは、ブロック2080内に複数の再構成可能データパスを含む。構成可能ユニット内のデータパスは、マルチステージ(ステージ1・・・ステージN)、再構成可能SIMD(単一命令、マルチデータ)パイプラインとして編成することができる。構成可能ユニットの構成シリアル・チェーンにプッシュされるデータのチャンクには、構成可能ユニットの各データパスの各ステージの構成データが含まれる。構成データ・ストア2020内の構成シリアル・チェーンは、ライン2021を介してブロック2080内の複数のデータパスに接続される。
【0130】
本明細書の文脈において、パターン・メモリ・ユニット(PMU)は物理メモリ・ユニットに対応する。PMUは、PCUで使用されるバス・インタフェースと共に、アドレス計算用の再構成可能データパスに連結されたスクラッチパッド・メモリを含むことができる。PMUは、再構成可能ユニットのアレイ全体にオンチップメモリを分配するために使用することができる。一実施形態では、PMU内のメモリ内のアドレス計算がPMUデータパス上で実行され、コア演算がPCU内で実行される。各PMUには、主にアドレス計算を目的としたリ再構成データパスと結合したプログラマ管理スクラッチパッド・メモリと、プログラムで必要とされるその他の演算オペレーションが含まれている。PMUは、アレイ190全体にオンチップメモリを配分するために使用される。アレイ・アーキテクチャは、メモリ・アドレス計算に関係するオペレーションと、アプリケーションの基礎となるコア演算を区別する。アドレス計算はPMUデータパス上で実行され、コア演算はPCU内で実行される。幾つかの観察が、この設計選択を動機付けている:(i)アドレス計算はPCU内のALUよりも単純なALUを必要とする単純なスカラ計算を伴う;(ii)アドレス計算のために複数のレーンを使用することは、大抵のオンチップ・アクセス・パターンにとってしばしば不必要である;及び(iii)PCU内でアドレス計算を実行することは、PCUステージ及び出力リンクを占有し、PCUの利用不足につながり得る、PCUからPMUへのアドレスのルーティングを必要とする。
【0131】
PCU及びPMU(まとめて「ユニット」)は、ワードレベル・スカラ相互接続、複数ワードレベル・ベクトル相互接続、及びビットレベル制御相互接続の3種類の相互接続と通信する。構成可能ユニットのアレイ190は、複数DDRチャンネルを通じてDRAMとインタフェースする。各チャネルは、複数のアドレス・ストリーム間で調停する関連アドレス管理ユニットを有し、DRAMアクセスを最小化するために複数の未処理メモリ要求とアドレス結合をサポートするバッファから構成される。ローカル・アドレス計算はPMUで行われ、DRAMアドレス計算はDRAMアドレス管理ユニットで行われ、残りのデータ演算はPCUで行われる。スクラッチパッドは、PCUレーンの数に一致する複数のSRAMバンクで構築される。スクラッチパッド周辺のアドレス・デコーディング・ロジックは様々なアクセス・パターンをサポートするために、幾つかのバンキング・モードで動作するように構成され得る。ストライド・バンキング・モードは、高密度データ構造上にしばしば見られる線形アクセス・パターンをサポートする。FIFOモードはストリーミング・アクセスをサポートする。ライン・バッファ・モードは、スライディング・ウィンドウに似たアクセス・パターンを捕捉する。コンテンツが全てのメモリ・バンクにわたって複製される複製モードは、並列化されたオンチップ収集オペレーションをサポートするために、複数読み出しアドレス・チャネルを提供する。
【0132】
PCUは、アプリケーションにおける最も内側の並列パターンを実行するように設計される。PCUデータパスは、マルチステージ再構成可能SIMDパイプラインとして編成することができる。この設計は、各PCUが高い演算密度を達成することを可能にし、レーンにわたるループレベル並列性とステージにわたるパイプライン並列性の両方を利用する。各SIMDレーンの各ステージは、機能ユニット(FU)及び関連するパイプライン・レジスタ(PR)で構成される。FUは、例えば、浮動小数点演算や整数演算のサポートを含み、32ビットワードレベルの算術演算やバイナリ演算を実行する。単一のパイプライン・ステージ内のFUは、SIMDで動作するので、各ステージは、単一の構成レジスタのみを必要とする。各FUからの結果は、その関連するレジスタに書き込まれる。各レーンのPRは、同じレーン内のステージ間でライブ値が伝播することを可能にするために、パイプライン・ステージにわたって一緒に連鎖する。FU間のクロス・レーン通信は、2つのタイプのPCU内ネットワーク、即ち、複数のレーンからの値を単一のスカラに低減することを可能にする縮小ツリー・ネットワークと、ステンシル・アプリケーションでの再利用を活用するために、ステージにわたるスライディング・ウィンドウとしてPRを使用することを可能にするシフト・ネットワークとを使用して、捕捉される。どちらのネットワークも、ハードウェアのオーバーヘッドを最小限に抑えるために、PR内で専用レジスタを使用する。
【0133】
PCUは、スカラ、ベクトル、及び制御の3種類の入力及び出力(IO)を使用してグローバル相互接続とインタフェースする。スカラIOは、畳み込みの結果等、データの単一ワードを通信するために使用される。各ベクトルIOは、PCU内のレーン当たり1ワードの通信を可能にし、PMU内のスクラッチパッドへの読み出し及び書き込み、及び複数のPCU間の長いパイプラインを介した中間データの伝送等の場合に使用される。各ベクトル及びスカラ入力は小さなFIFOを使用してバッファリングされる。入力FIFOを使用することは、データのプロデューサとコンシューマとを切り離し、入力遅延不整合に対してロバストにすることによってPCU間制御ロジックを単純化する。制御IOは、PCUの実行の開始または終了等の制御信号を通信するために、または背圧を示すために使用される。
【0134】
カウンタの再構成可能チェーンは、実行を調整するために、パターン反復インデックス及び制御信号を生成する。PCUの実行は、制御ブロックがカウンタの1つをイネーブルにするときに開始する。アプリケーションの制御及びデータ依存性に基づいて、制御ブロックは、PCUの実行をトリガするために、ローカルFIFO及びグローバル制御入力の両方からの複数の制御信号を結合するように構成することができる。制御ブロックは、ステートマシンのための再構成可能な組合せ論理及びプログラミング可能なアップダウン・カウンタを使用して実装される。
【0135】
バンキングは、演算スループットを維持するために複数のSIMDユニットに供給するのに重要であるのと同様に、Nバッファリング、または一般化された二重バッファリングは、粗粒度パイプラインをサポートするためにも重要である。例として、ResNetのスキップ接続と、各レイヤの出力を保持するバッファは、Nバッファリングを使用して実現される。PMUスクラッチパッドは、説明したバンキング・モードの何れかを有するNバッファとして動作するように構成することができる。Nバッファは、各SRAMバンクのアドレス空間をN個の互いに素な領域に区分化することによって実現される。書き込み及び読み出し状態情報を使用して、適切なオフセットが各バンクのローカル・アドレスに追加され、正しいデータにアクセスする。
【0136】
プログラマブル・カウンタ・チェーン及び制御ブロックは、PCUと同様にPMU実行をトリガする。各PMUには通常、プロデューサ・パターンからの書き込みアドレス計算ロジックと、コンシューマ・パターンからの読み出しアドレス計算ロジックが含まれる。ローカルFIFO及び外部制御入力の状態に基づいて、制御ブロックは、適切なカウンタを有効にすることによって、書き込みアドレス計算、読み出しアドレス計算、またはその両方をトリガするように構成できる。
[特定の実施態様]
【0137】
一実施態様では、目標アーキテクチャを有する再構成可能データ・プロセッサ上でオペレーション・ユニット・グラフを効率的に実行するコンピュータにより実施される方法が開示される。該方法は、オペレーション・ユニット・グラフを実行するために必要とされる再構成可能データ・プロセッサの物理演算ユニット及び/または物理メモリ・ユニットの数を減少させることを含む。
【0138】
該方法は、ユーザから、再構成可能データ・プロセッサの目標アーキテクチャに固有のアーキテクチャ上のヒントを受け取ることを含む。アーキテクチャ上のヒントは、再構成可能データ・プロセッサの物理演算ユニット及び/または物理メモリ・ユニット上で第1のオペレーション・ユニットのパターンを実行するときに、第1のオペレーション・ユニットを融合することを要求し、パターン内の第1のオペレーション・ユニットを第1のノードとして指定し、パターン内の第1のオペレーション・ユニット間の第1のデータフローを第1のエッジとして指定し、パターン内の第1のオペレーション・ユニット間の融合を指示する。
【0139】
該方法は、オペレーション・ユニット・グラフをスキャンして、アーキテクチャ上のヒントによって指定された第1のオペレーション・ユニットのパターンのインスタンスを検出することを含む。これは、更に、オペレーション・ユニット・グラフ内の第2のノード及び第2のエッジを、アーキテクチャ上のヒント内の第1のノード及び第1のエッジと適合させることと、パターン・マッチングを検出することとを含む。
【0140】
該方法は、オペレーション・ユニット・グラフ内の第2のノードと第2のエッジのオペレーション・ユニットとを統合されたオペレーション・ユニット・ブロックに融合し、融合されたオペレーション・ユニット・グラフを生成することを含む。
【0141】
該方法は、再構成可能データ・プロセッサの物理演算ユニット及び/または物理メモリ・ユニットを融合されたオペレーション・ユニット・グラフにアロケーティングすることを含む。
【0142】
該方法は、該アロケーティングに基づいて再構成可能データ・プロセッサ上で融合されたオペレーション・ユニット・グラフを実行することを含む。
【0143】
他の実施態様のために特定の実施態様のセクションで論じられた特徴の各々は、この実施態様に同様に適用される。上述したように、他の全ての特徴は、ここでは繰り返されず、参照により繰り返されると考えられるべきである。読者は、これらの実施態様で特定された特徴が他の実施態様で特定された基本特徴の集合と如何にして容易に組み合わせられるかを理解するであろう。
【0144】
アーキテクチャ上のヒントは、パターン内の第1の出力オペレーション・ユニットを第1の出力ノードとして指定する。
【0145】
該方法は、アーキテクチャ上のヒントによって指定された第1の出力ノードをオペレーション・ユニット・グラフ内の第2の出力ノードと適合させることによってパターン・マッチングを検出することと、オペレーション・ユニット・グラフ内の第2の出力ノードから始めて、オペレーション・ユニット・グラフ内の第2のノード及び第2のエッジがアーキテクチャ上のヒント内の第1のノード及び第1のエッジと適合することを決定するためにオペレーション・ユニット・グラフをトラバースすることとを含む。一実施態様では、トラバースは上向きトラバースである。
【0146】
該方法は、統合されたオペレーション・ユニット・ブロックに融合されるが、統合されたオペレーション・ユニット・ブロックの外側にあるオペレーション・ユニット・グラフの別のオペレーション・ユニットへのデータフローを有するオペレーション・ユニット・グラフのオペレーション・ユニットを識別することと、識別されたオペレーション・ユニット及びそのデータフローを複製することと、識別されたオペレーション・ユニット及びそのデータフローに入力を提供する統合されたオペレーション・ユニット・ブロック内の任意の他のオペレーション・ユニットを複製することと、統合されたオペレーション・ユニット・ブロック及び複製されたオペレーション・ユニット及びデータフローを有するオペレーション・ユニット・グラフに基づいて、前記アロケーティング及び前記実行を行うことを含む。
【0147】
一実施態様では、アーキテクチャ上のヒントがパターン・グラフに翻訳するノードとエッジのリストとして表現される。
【0148】
このセクションで説明された方法の他の実施態様は、上述の方法の何れかを実行するためにプロセッサによって実行可能な命令を格納する非一時的コンピュータ可読記憶媒体を含むことができる。このセクションで説明された方法の更に別の実施態様は、上述の方法の何れかを実行するために、該メモリ内に記憶された命令を実行するように動作可能なメモリ及び1または複数のプロセッサを含むシステムを含むことができる。
【0149】
再構成可能データ・プロセッサの利用可能な物理演算ユニット及び/または物理メモリ・ユニット(available_PCUs)を、その実行のためにオペレーション・ユニット・グラフのオペレーション・ユニットにアロケーティングするコンピュータにより実施される方法を開示する。
【0150】
該方法は、オペレーション・ユニット・グラフのオペレーション・ユニットを実行するのに必要な汎用ステージ演算処理時間("stage_latency")のサーチ範囲下限("stage_latency_low")及びサーチ範囲上限("stage_latency_high")を初期化することを含む。
【0151】
該方法は、評価のために、汎用ステージ演算処理時間("stage_latency")のサーチ範囲下限("stage_latency_low")とサーチ範囲上限("stage_latency_high")の間の中間ステージ演算処理時間("stage_latency_average"等)を選択することを含む。
【0152】
該方法は、再構成可能データ・プロセッサ上のオペレーション・ユニット・グラフのパイプライン演算ロードを処理するために必要とされる物理演算ユニット及び/または物理メモリ・ユニットのパイプライン数("total_PCUs")を決定することを含む。
【0153】
該方法は、オペレーション・ユニット・グラフのオペレーション・ユニット("for node in fused_graph")の各々について、1つの物理演算ユニット及び/または1つの物理メモリ・ユニットのみを使用して、オペレーション・ユニットのそれぞれ1つのステージ演算ロード("node.get_flop()")を処理するのに必要な特定のステージ演算処理時間("node_latency_with_one_PCU")を決定し、特定のステージ演算処理時間("node_latency_with_one_PCU")を中間ステージ演算処理時間(例えば"stage_latency_average")で除算することによって、オペレーション・ユニットのそれぞれ1つのステージ演算ロード("node.get_flop()")を処理するのに必要な物理演算ユニット及び/または物理メモリ・ユニットのステージ数("node_PCUs")を決定することを含む。
【0154】
該方法は、各オペレーション・ユニットの物理演算ユニット及び/または物理メモリ・ユニットのステージ数("node_PCUs")を合計することと、物理演算ユニット及び/または物理メモリ・ユニットのパイプライン数("total_PCUs")を生成することとを含む。
【0155】
該方法は、反復的に、汎用ステージ演算処理時間("stage_latency")の新しいサーチ範囲下限("stage_latency_low")及びサーチ範囲上限("stage_latency_high")を初期化し、次の反復における評価のために、前の反復における前の中間ステージ演算処理時間に対して生成された物理演算ユニット及び/または物理メモリ・ユニットのパイプライン数("total_PCUs")が、利用可能な物理演算ユニット及び/または物理メモリ・ユニット(available_PCUs)よりも低いか高いかを考慮して、汎用ステージ演算処理時間の新しいサーチ範囲下限及びサーチ範囲上限間の新しい中間ステージ演算処理時間を選択することを含む。
【0156】
該方法は、現在の反復における現在の中間ステージ演算処理時間に対して生成された物理演算ユニット及び/または物理メモリ・ユニットのパイプライン数が収束基準を満たす場合、反復初期化及び選択を終了することを含む。
【0157】
該方法は、現在の中間ステージ演算処理時間に基づいて、利用可能な物理演算ユニット及び/または物理メモリ・ユニットをオペレーション・ユニット・グラフのオペレーション・ユニットにアロケーティングすることを含む。
【0158】
該方法は、該アロケーティングに基づいて、再構成可能データ・プロセッサ上でオペレーション・ユニット・グラフのオペレーション・ユニットを実行することを含む。
【0159】
他の実施態様のために特定の実施態様のセクションで論じられた特徴の各々は、この実施態様に同様に適用される。上述したように、他の全ての特徴は、ここでは繰り返されず、参照により繰り返されると考えられるべきである。読者は、これらの実施態様で特定された特徴が他の実施態様で特定された基本特徴の集合と如何にして容易に組み合わせられるかを理解するであろう。
【0160】
一実施態様では、収束基準は、サーチ範囲上限とサーチ範囲下限間の差異が閾値未満であるときに発生し得る。
【0161】
一実施態様では、汎用ステージ演算処理時間のサーチ範囲下限が再構成可能データ・プロセッサの最大使用率に基づくことができ、オペレーション・ユニット・グラフのパイプライン演算ロードを再構成可能データ・プロセッサの総処理能力で除算することによって決定することができる。
【0162】
一実施態様では、オペレーション・ユニット・グラフのパイプライン演算ロードがオペレーション・ユニット・グラフを実行するのに必要な浮動小数点演算の総数(FLOP)によって決定することができる。
【0163】
一実施態様において、再構成可能データ・プロセッサの総処理能力は、再構成可能データ・プロセッサによって毎秒実行可能なFLOP(FLOP/s)の最大数によって決定することができる。
【0164】
一実施態様では、汎用ステージ演算処理時間のサーチ範囲上限が、汎用ステージ演算処理時間のサーチ範囲下限に最小使用ファクタを乗算することに基づくことができる。幾つかの実施態様では、最小使用ファクタは100である。
【0165】
一実施態様では、該方法がサーチ範囲上限とサーチ範囲下限間の差異が閾値を上回る限り、反復初期化と選択を継続することを含む。
【0166】
一実施態様では、中間ステージ演算処理時間は、汎用ステージ演算処理時間("stage_latency")のサーチ範囲下限("stage_latency_low")とサーチ範囲上限("stage_latency_high")の平均("stage_latency_average")とすることができる。
【0167】
一実施態様では、前の反復における前の中間ステージ演算処理時間のために生成された物理演算ユニット及び/または物理メモリ・ユニットのパイプライン数が利用可能な物理演算ユニット及び/または物理メモリ・ユニットよりも低い場合、該方法は、前の中間ステージ演算処理時間として、次の反復のための新しいサーチ範囲上限を設定することを含む。
【0168】
一実施態様では、前の反復における前の中間ステージ演算処理時間のために生成された物理演算ユニット及び/または物理メモリ・ユニットのパイプライン数が利用可能な物理演算ユニット及び/または物理メモリ・ユニットよりも高い場合、該方法は、前の中間ステージ演算処理時間として、次の反復のための新しいサーチ範囲下限を設定することを含む。
【0169】
一実施態様では、オペレーション・ユニットのそれぞれ1つを実行するのに必要な浮動小数点演算(FLOP)の総数を意味する、オペレーション・ユニットのそれぞれ1つのステージ演算ロードは、そのオペレーション・タイプ、入力次元、及び出力次元によって決定される。
【0170】
一実施態様では、該方法は、ステージ演算処理時間を中間ステージ演算処理時間で除算した結果を整数に切り上げることによって、ステージ演算ロードを処理するのに必要な物理演算ユニット及び/または物理メモリ・ユニットのステージ数を決定することを含む。
【0171】
一実施態様では、該方法は、現在の中間ステージ演算処理時間に基づいてスループット値を決定することを含む。
【0172】
一実施態様では、該方法は、オペレーション・ユニット・グラフのオペレーション・ユニットの数を現在の中間ステージ演算処理時間と乗算することに基づいて、オペレーション・ユニット・グラフを実行するのに必要なパイプライン演算処理時間を決定することを含む。
【0173】
一実施態様では、該方法は、ステージ演算処理時間がオペレーション・ユニット・グラフの他のほとんどのオペレーション・ユニットよりも相対的に長いオペレーション・ユニット・グラフのオペレーション・ユニットを選択することと、追加の利用可能な物理演算ユニット及び/または物理メモリ・ユニットを選択されたオペレーション・ユニットにアロケーティングすることとを含む。
【0174】
一実施態様では、アロケーティングの結果、オペレーション・ユニット・グラフのそれぞれのオペレーション・ユニットは、実質的に適合するステージ演算処理時間を有することとなる。
【0175】
一実施態様では、オペレーション・ユニット・グラフは、少なくとも1つの融合されたオペレーション・ユニットを有する融合されたオペレーション・ユニット・グラフとすることができる。
【0176】
一実施態様では、オペレーション・ユニット・グラフは、ディープ・ニューラル・ネットワークとすることができる。
【0177】
一実施態様では、該方法は、収束基準を満たす現在の反復における現在の中間ステージ演算処理時間を視覚化するデータ、現在の中間ステージ演算処理時間のために生成された物理演算ユニット及び/または物理メモリ・ユニットのパイプライン数、1つの物理演算ユニットのみ及び/または1つの物理メモリ・ユニットのみを使用して、オペレーション・ユニットのそれぞれの1つのステージ演算ロードを処理するのに必要なステージ演算処理時間、及び/または、オペレーション・ユニットのそれぞれ1つのステージ演算ロードを処理するのに必要な物理演算ユニット及び/または物理メモリ・ユニットのステージ数を、表示用に生成することを含む。
【0178】
一実施態様では、該方法は、現在の中間ステージ演算処理時間に基づいて決定されたスループット値を視覚化するデータを表示用に生成することを含む。
【0179】
一実施態様では、オペレーション・ユニット・グラフを実行するのに必要なパイプライン演算処理時間を視覚化するデータを、表示用に生成することを含む。
【0180】
一実施態様では、該方法は、オペレーション・ユニット・グラフの各オペレーション・ユニットにそれぞれアロケーティングされた利用可能な物理演算ユニット及び/または物理メモリ・ユニットを視覚化するデータを、表示用に生成することを含む。
【0181】
一実施態様では、反復的な初期化及び選択は、バイナリ・サーチに基づいている。
【0182】
このセクションで説明された方法の他の実施態様は、上述の方法の何れかを実行するためにプロセッサによって実行可能な命令を格納する非一時的コンピュータ可読記憶媒体を含むことができる。このセクションで説明された方法の更に別の実施態様は、上述の方法の何れかを実行するために、該メモリ内に記憶された命令を実行するように動作可能なメモリ及び1または複数のプロセッサを含むシステムを含むことができる。
【0183】
再構成可能データ・プロセッサの利用可能な物理演算ユニット及び/または物理メモリ・ユニット(available_PCUs)を、その実行のためにオペレーション・ユニット・グラフのオペレーション・ユニットにアロケーティングするコンピュータにより実施される方法が開示される。
【0184】
該方法は、オペレーション・ユニット・グラフのオペレーション・ユニットを実行するのに必要な汎用ステージ演算処理時間のサーチ範囲下限("stage_latency_low")及びサーチ範囲上限("stage_latency_high")を初期化することを含む。
【0185】
該方法は、評価のために、汎用ステージ演算処理時間のサーチ範囲下限("stage_latency_low")とサーチ範囲上限("stage_latency_high")間の中間ステージ演算処理時間("stage_latency_average"等)を選択することを含む。
【0186】
該方法は、再構成可能データ・プロセッサ上のオペレーション・ユニット・グラフのパイプライン演算ロードを処理するのに必要な物理演算ユニット及び/または物理メモリ・ユニットのパイプライン数("total_PCUs"、"get_graph_PCUs")を決定することを含む。
【0187】
該方法は、反復的に、汎用ステージ演算処理時間の新しいサーチ範囲下限とサーチ範囲上限を初期化し、次の反復における評価のために、前の反復における前の中間ステージ演算処理時間のために生成された物理演算ユニット及び/または物理メモリ・ユニットのパイプライン数が、利用可能な物理演算ユニット及び/または物理メモリ・ユニット(available_PCUs)よりも低いか、または高いかを考慮に入れて、汎用ステージ演算処理時間の新しいサーチ範囲下限とサーチ範囲上限間の新しい中間ステージ演算処理時間を選択することを含む。
【0188】
該方法は、現在の反復における現在の中間ステージ演算処理時間に対して生成された物理演算ユニット及び/または物理メモリ・ユニットのパイプライン数が収束基準を満たす場合、該反復初期化と該選択を終了することとを含む。
【0189】
他の実施態様のために特定の実施態様のセクションで論じられた特徴の各々は、この実施態様に同様に適用される。上述したように、他の全ての特徴は、ここでは繰り返されず、参照により繰り返されると考えられるべきである。読者は、これらの実施態様で特定された特徴が他の実施態様で特定された基本特徴の集合と如何にして容易に組み合わせられるかを理解するのであろう。
【0190】
該方法は、オペレーション・ユニット・グラフのオペレーション・ユニット("for node in fused_graph")の各々について、1つの物理演算ユニットのみ及び/または1つの物理メモリ・ユニットのみを使用してオペレーション・ユニットのそれぞれ1つのステージ演算ロード("node.get_flop()")を処理するのに必要な特定のステージ演算処理時間("node_latency_with_one_PCU")を決定し、特定のステージ演算処理時間("node_latency_with_one_PCU")を中間ステージ演算処理時間("stage_latency"、例えば"stage_latency_average")で除算することによって、オペレーション・ユニットのそれぞれ1つのステージ演算ロード("node.get_flop()")を処理するのに必要な物理演算ユニット及び/または物理メモリ・ユニットのステージ数("node_PCUs")を決定することを含む。
【0191】
該方法は、オペレーション・ユニットのそれぞれにおける物理演算ユニット及び/または物理メモリ・ユニットのステージ数("node_PCUs")を合計することと、物理演算ユニット及び/または物理メモリ・ユニットのパイプライン数を生成することとを含む。
【0192】
該方法は、現在の中間ステージ演算処理時間に基づいて、利用可能な物理演算ユニット及び/または物理メモリ・ユニットをオペレーション・ユニット・グラフのオペレーション・ユニットにアロケーティングすることを含む。
【0193】
該方法は、該アロケーティングに基づいて、再構成可能データ・プロセッサ上でオペレーション・ユニット・グラフのオペレーション・ユニットを実行することを含む。
【0194】
このセクションで説明された方法の他の実施態様は、上述の方法の何れかを実行するためにプロセッサによって実行可能な命令を格納する非一時的コンピュータ可読記憶媒体を含むことができる。このセクションで説明された方法の更に別の実施態様は、上述の方法の何れかを実行するために、該メモリ内に記憶された命令を実行するように動作可能なメモリ及び1または複数のプロセッサを含むシステムを含むことができる。
【0195】
前述の説明は、開示された技術の作成及び使用を可能にするために提示されている。開示された実施態様に対する種々の変形は明らかであり、本明細書で規定された全般的な原理は、開示された技術の趣旨及び範囲から逸脱することなく、他の実施態様及びアプリケーションに適用され得る。従って、開示された技術は、示された実施態様に限定されることを意図するものではなく、本明細書で開示された原理及び特徴と一致する最も広い範囲が与えられるべきである。開示された技術の範囲は、添付の特許請求の範囲によって規定される。
【国際調査報告】