IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ インテル・コーポレーションの特許一覧

特許7400169ワークロードのスタティックマッピングの順不同にパイプライン化された実行を可能にする方法及び装置
<>
  • 特許-ワークロードのスタティックマッピングの順不同にパイプライン化された実行を可能にする方法及び装置 図1
  • 特許-ワークロードのスタティックマッピングの順不同にパイプライン化された実行を可能にする方法及び装置 図2
  • 特許-ワークロードのスタティックマッピングの順不同にパイプライン化された実行を可能にする方法及び装置 図3
  • 特許-ワークロードのスタティックマッピングの順不同にパイプライン化された実行を可能にする方法及び装置 図4
  • 特許-ワークロードのスタティックマッピングの順不同にパイプライン化された実行を可能にする方法及び装置 図5
  • 特許-ワークロードのスタティックマッピングの順不同にパイプライン化された実行を可能にする方法及び装置 図6
  • 特許-ワークロードのスタティックマッピングの順不同にパイプライン化された実行を可能にする方法及び装置 図7
  • 特許-ワークロードのスタティックマッピングの順不同にパイプライン化された実行を可能にする方法及び装置 図8
  • 特許-ワークロードのスタティックマッピングの順不同にパイプライン化された実行を可能にする方法及び装置 図9
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-12-11
(45)【発行日】2023-12-19
(54)【発明の名称】ワークロードのスタティックマッピングの順不同にパイプライン化された実行を可能にする方法及び装置
(51)【国際特許分類】
   G06F 9/50 20060101AFI20231212BHJP
   G06F 9/38 20180101ALI20231212BHJP
   G06F 9/48 20060101ALI20231212BHJP
【FI】
G06F9/50 150A
G06F9/38 310J
G06F9/38 370C
G06F9/38 370X
G06F9/48 300G
【請求項の数】 14
【外国語出願】
(21)【出願番号】P 2020104328
(22)【出願日】2020-06-17
(65)【公開番号】P2021034020
(43)【公開日】2021-03-01
【審査請求日】2022-06-13
(31)【優先権主張番号】16/542,012
(32)【優先日】2019-08-15
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591003943
【氏名又は名称】インテル・コーポレーション
(74)【代理人】
【識別番号】110000877
【氏名又は名称】弁理士法人RYUKA国際特許事務所
(72)【発明者】
【氏名】マイケル ベハー
(72)【発明者】
【氏名】モシェ マオル
(72)【発明者】
【氏名】ロネン ガバイ
(72)【発明者】
【氏名】ロニ ロスナー
(72)【発明者】
【氏名】ジギ ウォルター
(72)【発明者】
【氏名】オレン アガム
【審査官】坂東 博司
(56)【参考文献】
【文献】特開2005-018620(JP,A)
【文献】米国特許出願公開第2004/0268083(US,A1)
【文献】特表2017-525047(JP,A)
【文献】特開平07-021144(JP,A)
【文献】特開2012-190415(JP,A)
【文献】米国特許出願公開第2012/0239833(US,A1)
【文献】米国特許出願公開第2016/0140071(US,A1)
【文献】米国特許出願公開第2019/0050261(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/50
G06F 9/38
G06F 9/48
(57)【特許請求の範囲】
【請求項1】
第1のローカルクレジットマネージャーを有する第1のコンピューティングユニットであって、前記第1のコンピューティングユニットは、第1のバッファにデータを書き込むタスクを処理する、前記第1のコンピューティングユニットと、
第2のローカルクレジットマネージャーを有する第2のコンピューティングユニットであって、前記第2のコンピューティングユニットは、第2のバッファからデータを読み出すタスクを処理する、前記第2のコンピューティングユニットと、
前記第1のコンピューティングユニットと前記第2のコンピューティングユニットに結合された少なくとも1つのファブリックと、
前記少なくとも1つのファブリックに結合された中央クレジットマネージャーとを備え、
前記中央クレジットマネージャーは、
前記第1のローカルクレジットマネージャーへの第1のクレジットの送信を生じさせることであって、前記第1のクレジットは、前記第1のバッファに格納される第2のデータを生成すべく前記第1のコンピューティングユニットにより処理される第1のデータに対応する、前記送信を生じさせることと、
前記第1のコンピューティングユニットの前記第1のローカルクレジットマネージャーから前記第1のクレジットにアクセスすることと、
前記第2のコンピューティングユニットに対するクレジットのカウントを減らすこととを行う
装置。
【請求項2】
前記中央クレジットマネージャーは、前記第1のコンピューティングユニットが前記第1のデータを処理することに応じて、前記第1のコンピューティングユニットの前記第1のローカルクレジットマネージャーから前記第1のクレジットにアクセスする
請求項1に記載の装置。
【請求項3】
前記中央クレジットマネージャーは、前記第2のバッファにおける前記第2のデータの利用可能性に応じて、前記第2のコンピューティングユニットに対する前記クレジットのカウントを減らす
請求項1又は2に記載の装置。
【請求項4】
前記第2のコンピューティングユニットに対する前記クレジットのカウントは、クレジットの第1のカウントであり、
前記中央クレジットマネージャーは、
前記第1のコンピューティングユニットに対するクレジットの第2のカウントを初期化し、
前記第2のコンピューティングユニットに対するクレジットの前記第1のカウントを初期化する
請求項1から3のいずれか一項に記載の装置。
【請求項5】
前記中央クレジットマネージャーは、前記第1のデータが前記第1のコンピューティングユニットに割り当てられるタスクに関連付けられることに基づいて、前記第1のローカルクレジットマネージャーへの前記第1のクレジットの送信を生じさせる
請求項1から4のいずれか一項に記載の装置。
【請求項6】
コンピューティングシステムにおける少なくとも一つのプロセッサにって命令実行されたとき前記コンピューティングシステムにおける中央クレジットマネージャーが、第1のコンピューティングユニットの第1のローカルクレジットマネージャーへ、第1のクレジットを送信する段階であって、前記第1のコンピューティングユニットは、第1のバッファにデータを書き込むタスクを処理し、前記第1のクレジットは、前記第1のバッファに格納される第2のデータを生成すべく前記第1のコンピューティングユニットにより処理される第1のデータに対応する、段階と、
前記少なくとも一つのプロセッサにって命令実行されたとき前記中央クレジットマネージャーが、前記第1のコンピューティングユニットの前記第1のローカルクレジットマネージャーから前記第1のクレジットにアクセスする段階と、
前記少なくとも一つのプロセッサにって命令実行されたとき前記中央クレジットマネージャーが、第2のローカルクレジットマネージャーを有する第2のコンピューティングユニットに対するクレジットのカウントを減らす段階であって、前記第2のコンピューティングユニットは、第2のバッファからデータを読み出すタスクを処理する、段階と、を備える
方法。
【請求項7】
前記第1のコンピューティングユニットが前記第1のデータを処理することに応じて、前記中央クレジットマネージャーが、前記第1のコンピューティングユニットの前記第1のローカルクレジットマネージャーから前記第1のクレジットにアクセスする段階を更に備える
請求項6に記載の方法。
【請求項8】
前記第2のバッファにおける前記第2のデータの利用可能性に応じて、前記中央クレジットマネージャーが、前記第2のコンピューティングユニットに対する前記クレジットのカウントを減らす段階を更に備える
請求項6又は7に記載の方法。
【請求項9】
前記第2のコンピューティングユニットに対する前記クレジットのカウントは、クレジットの第1のカウントであり、
前記方法は、
前記中央クレジットマネージャーが、前記第1のコンピューティングユニットに対するクレジットの第2のカウント、及び前記第2のコンピューティングユニットに対するクレジットの前記第1のカウントを初期化する段階を更に備える
請求項6から8のいずれか一項に記載の方法。
【請求項10】
前記第1のデータが前記第1のコンピューティングユニットに割り当てられるタスクに関連付けられることに基づいて、前記中央クレジットマネージャーが、前記第1のローカルクレジットマネージャーへ、前記第1のクレジットを送信する段階を更に備える
請求項6から9のいずれか一項に記載の方法。
【請求項11】
メモリと、複数の命令と、請求項6から10のいずれか一項に記載の方法を実行するべく、前記複数の命令を実行する前記少なくとも一つのプロセッサとを備える装置。
【請求項12】
命令を備え、前記命令は、実行されると、請求項6から10のいずれか一項に記載の方法を前記少なくとも一つのプロセッサに実行させる
非一時的コンピュータ可読媒体。
【請求項13】
請求項6から10のいずれか一項に記載の方法を実行するための手段を備える装置。
【請求項14】
請求項6から10のいずれか一項に記載の方法を前記少なくとも一つのプロセッサに実行させるコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
この開示は概して、処理に関し、より詳細にはワークロードのスタティックマッピングの順不同にパイプライン化された実行を可能にする方法及び装置に関する。
【背景技術】
【0002】
コンピュータハードウェア製造者は、コンピュータプラットフォームの様々なコンポーネントに用いられるハードウェアコンポーネントを開発する。例えば、コンピュータハードウェア製造者は、マザーボード、マザーボード用のチップセット、中央処理ユニット(CPU)、ハードディスクドライブ(HDD)、ソリッドステートドライブ(SSD)及び、他のコンピュータコンポーネントを開発する。更に、コンピュータハードウェア製造者は、アクセラレータとして知られる、ワークロードの処理を加速する処理要素を開発する。例えば、アクセラレータは、CPU、グラフィック処理ユニット(GPU)、ビジョン処理ユニット(VPU)及び/又はフィールドプログラマブルゲートアレイ(FPGA)などであり得る。
【図面の簡単な説明】
【0003】
図1】異種システムのアクセラレータで実行されるワークロードを表したグラフの図である。
【0004】
図2】パイプライン及びバッファを実装した異種システムのアクセラレータで実行されるワークロードを表したグラフの図である。
【0005】
図3】本開示の教示に従って構築された例示的なコンピューティングシステムを示すブロック図である。
【0006】
図4】例示的な1又は複数のスケジューラを含む例示的なコンピューティングシステムを示すブロック図である。
【0007】
図5図3及び4の1又は複数のスケジューラを実装し得る例示的なスケジューラのブロック図である。
【0008】
図6図5のバッファクレジット記録装置のさらなる詳細を示す例示的なスケジューラのブロック図である。
【0009】
図7】パイプライン及びバッファを実装した異種システムのアクセラレータで実行するワークロードを表す例示的なグラフの図である。
【0010】
図8図5のスケジューラ及び/又は図6のスケジューラを実装するために実行できる機械可読命令によって実装され得る処理を表すフローチャートである。
【0011】
図9図5のスケジューラ及び/又は図6のスケジューラの1又は複数のインスタンス化を実装するための図8の命令を実行するよう構築された例示的なプロセッサプラットフォームのブロック図である。
【0012】
図は縮尺通りではない。概して、同じもの又は一部のようなものを指すべく、図面及び付随する記述説明全体で同じ参照が用いられるであろう。接続についての言及(例えば、取り付け、結合、接続及び結合)は広く解釈されるべきであり、そうでないと示していない限り、要素の集合の間の中間部材及び要素の間の相対的な移動を含んでよい。従って、接続についての言及は、2つの要素が直接接続されたり互いに固定された関係であることを必ずしも推論されるものではない。
【0013】
「第1」、「第2」、「第3」等の記述子は、別個に称される複数の要素又はコンポーネントを識別する場合に本明細書で用いられる。用いられるそれらの文脈に基づいて特定又は理解されるのでない限り、そのような記述子は、優先性、物理的順序若しくはリストの配置、又は、時間的な順序のいかなる意味を負わせることを意図しておらず、開示された例の理解の簡略化のために、複数の要素又はコンポーネントを別個に参照するためのラベルとして、単に用いられている。いくつかの例において、ある要素を指すのに「第1」という記述子が詳細な説明で用いられる一方で、同じ要素が請求項で「第2」又は「第3」のような異なる記述子で称されてよい。このような例において、そのような記述子は単に、複数の要素又はコンポーネントの参照を簡略化するために用いられていると理解されるべきである。
【発明を実施するための形態】
【0014】
多くのコンピュータハードウェア製造者は、アクセラレータとして知られる、ワークロードの処理を加速する処理要素を開発する。例えば、アクセラレータは、中央処理ユニット(CPU)、グラフィック処理ユニット(GPU)、ビジョン処理ユニット(VPU)及び/又はフィールドプログラマブルゲートアレイ(FPGA)であり得る。さらに、アクセラレータは、ワークロードの任意のタイプを処理可能であるが、ワークロードの特定のタイプを最適化するように設計される。例えば、CPU及びFPGAはより汎用の処理を扱うよう設計され得るが、GPUは、ビデオ、ゲーム及び/又は他の物理及び数学に基づく計算の処理を向上するよう設計され得るとともに、VPUは、マシンビジョンタスクの処理を向上するよう設計され得る。
【0015】
更に、いくつかのアクセラレータは、人工知能(AI)アプリケーションの処理を特に向上するよう設計される。VPUはAIアクセラレータの特定のタイプであるが、多くの異なるAIアクセラレータが用いられ得る。実際、多くのAIアクセラレータは、特定用途向け集積回路(ASIC)によって実装され得る。このようなASICベースのAIアクセラレータは、機械学習(ML)、深層学習(DL)、及び/又は、サポートベクタマシン(SVM)、ニューラルネットワーク(NN)、リカレントニューラルネットワーク(RNN)、畳み込みニューラルネットワーク(CNN)、ロングショートタームメモリ(LSTM)、ゲートリカレントユニット(GRU)等を含む他の人工機械駆動ロジックのようなAIの特定のタイプに関したタスクの処理を向上するよう設計され得る。
【0016】
コンピュータハードウェア製造者は、1つより多いタイプの処理要素を含む異種システムもまた開発している。例えば、コンピュータハードウェア製造者は、CPUのような汎用の処理要素と、FPGAのような汎用アクセラレータ、及び/又は、GPU、VPU及び/又は他のAIアクセラレータのようなより調整されたアクセラレータのいずれかとの両方を組み合わせてよい。このような異種システムは、システムオンチップ(SoC)として実装され得る。
【0017】
開発者が異種システム上で機能、アルゴリズム、プログラム、アプリケーション及び/又は他のコードを動作させることを望む場合、開発者及び/又はソフトウェアは、コンパイル時に、機能、アルゴリズム、プログラム、アプリケーション及び/又は他のコードのためのスケジュールを生成する。一旦スケジュールが生成されると、スケジュールは、実行可能ファイルを生成するために(アヘッドオブタイム又はジャストインタイムのいずれかのパラダイムで)、機能、アルゴリズム、プログラム、アプリケーション及び/又は他のコードの仕様と組み合わせられる。さらに、機能、アルゴリズム、プログラム、アプリケーション及び/又は他のコードはノードを含むグラフとして表されてよく、ここで、グラフはワークロードを示し、各ノードはそのワークロードの特定のタスクを示す。さらに、グラフ内の異なるノード間の接続は、特定のノードが実行されるために必要なデータ入力及び/又は出力を示し、グラフの頂点はグラフのノード間のデータ依存性を示す。
【0018】
実行可能ファイルは多数の異なる実行可能なセクションを含み、ここで、各実行可能なセクションは特定の処理要素(例えば、CPU、GPU、VPU及び/又はFPGA)によって実行可能である。実行可能ファイルの各実行可能なセクションは実行可能なサブセクションをさらに含んでよく、ここで、各実行可能サブセクションは特定の処理要素の計算ビルディングブロック(CBB)によって実行可能である。更に又は代替的に、本明細書で開示されるいくつかの例において、開発者及び/又はソフトウェア開発用ソフトウェアは、実行ファイルの実行の成功を判断する基準を定め得る(例えば成功基準)。例えば、このような成功基準は、異種システム及び/又は特定の処理要素の利用の閾値と満たし及び/又はそうでなければ満足するよう実行ファイルを実行することに対応してよい。他の例において、成功基準は、閾値量の時間に実行ファイルを実行することに対応してよい。しかしながら、異種システム及び/又は特定の処理要素でどのように実行ファイルを実行するかを判断する場合に任意の適切な成功機能が用いられてよい。このように、成功基準は、開発者、ソフトウェア及び/又は人工知能システムが成功基準を満たすよう最適化されたスケジュールを含む実行ファイルを生成するのに有益であり得る。
【0019】
図1は、異種システムのアクセラレータで実行されるワークロードのグラフ100を表す図である。グラフ100は、第1ワークロードノード102(WN[0])、第2ワークロードノード104(WN[1])、第3ワークロードノード106(WN[2])、第4ワークロードノード108(WN[3])及び第5ワークロードノード110(WN[4])を含む。図1において、アクセラレータは、スタティックソフトウェアスケジュールでグラフ100によって表されるワークロードを行っている。スタティックソフトウェアスケジューリングは、アクセラレータの計算ビルディングブロック(CBB)上でグラフ100の異なるワークロードノードを実行するための予め定義された態様を決定することを含む。例えば、スタティックソフトウェアスケジュールは、第1ワークロードノード102(WN[0])を第1CBB112に、第2ワークロードノード104(WN[1])を第2CBB114に、第3ワークロードノード106(WN[2])を第3CBB116に、第4ワークロードノード108(WN[3])を第4CBB118に、第5ワークロードノード110(WN[4])を第2CBB114に割り当てる。
【0020】
図1において、スタティックソフトウェアスケジュールは、第4CBB118で実行する第4ワークロードノード108(WN[3])と並列して第1ワークロードノード102(WN[0])が第1CBB112で実行するという枠組みを作っている。図1において、第1CBB112が第1ワークロードノード102(WN[0])を実行するより速く、第4CBB118は第4ワークロードノード108(WN[3])を実行する。スタティックソフトウェアスケジュールが、第2CBB114が第5ワークロードノード110(WN[4])を実行する前に第2CBB114が第2ワークロードノード104(WN[1])を実行するという枠組みを作っているように、第1CBB112が第1ワークロードノード102(WN[0])の実行を完了するまで、第2CBB114はアイドル状態である。さらに、次のワークロードノードの実行前にワークロードノードが全て実行されるまで待つことは、著しいメモリオーバーヘッドを必要とする。というのは、CBBが2番目のワークロードノード(例えば第2ワークロードノード104(WN[1]))を実行し得る前に、CBBによる1番目のワークロードノード(例えば第1ワークロードノード102(WN[0])の実行で生成されたデータをアクセラレータに格納することが必要とされるからである。
【0021】
図2は、パイプライン及びバッファを実装している異種システムのアクセラレータで実行するワークロードを表すグラフ200の図である。グラフ200は、第1ワークロードノード102(WN[0])、第2ワークロードノード104(WN[1])、第3ワークロードノード106(WN[2])、第4ワークロードノード108(WN[3])及び第5ワークロードノード110(WN[4])を含む。図2において、アクセラレータは、スタティックソフトウェアスケジュールでグラフ200によって表されるワークロードを行っている。図2のスタティックソフトウェアスケジュールは、パイプラインを実装するとともに第1バッファ202、第2バッファ204及び第3バッファ206を含むアクセラレータのCBBでのグラフ200の異なるワークロードノードに対する実行スケジュールの枠組みを作っている。更に、スタティックソフトウェアスケジュールは、第1ワークロードノード102(WN[0])を第1CBB112に、第2ワークロードノード104(WN[1])を第2CBB114に、第3ワークロードノード106(WN[2])を第3CBB116に、第4ワークロードノード108(WN[3])を第4CBB118に、第5ワークロードノード110(WN[4])を第2CBB114に割り当てる。第1バッファ202は第1CBB112及び第2CBB114と結合し、第2バッファ204は第2CBB114及び第3CBB116と結合し、第3バッファ206は第2CBB114及び第4CBB118と結合する。
【0022】
バッファ202、204及び206によって、スタティックソフトウェアスケジュールが、ある時間間隔内でワークロードノードの全体を実行するよりむしろ各CBBがワークロードノードの一部(例えばタイル)をその時間間隔内で処理する枠組みを作るのが可能となる。同様に、スタティックソフトウェアスケジュールは、ワークロードのそのような一部が利用可能となった場合に、他のCBB(例えばコンシューマー)によって生成されたデータを処理しているCBBがワークロードノードの一部(例えばタイル)を実行し得る枠組みを作り得る。しかしながら、ワークロードノードを実行しているCBBは利用可能なデータを処理して新たなデータをメモリに書き込むので、CBBで所与のワークロードノードを実行するためには、ランタイムにおいて閾値量のデータが利用可能でなければならず、ランタイムにおいて結果を書き込むメモリ内の閾値量のスペースがなければならない。バッファは基本的なスタティックソフトウェアスケジューリングによってメモリのオーバーヘッドを減少させるが、それはランタイムにおいてデータ利用可能性及び/又は依存性に高く依存するので、バッファでスタティックソフトウェアスケジュールの枠組みを作ることはますます難しい。さらに、アクセラレータ全体の負荷はアクセラレータ上の各CBBの処理速度に影響し得るので、所与のアクセラレータのCBBを効果的に利用するスタティックソフトウェアスケジュールを開発するのは難しい。
【0023】
本明細書で開示された例は、ワークロードのスタティックマッピングの順不同にパイプライン化された実行を可能にする方法及び装置を含む。スタティックソフトウェアスケジューリングとは対照的に、本明細書で開示された例は、予め定められたスタティックソフトウェアスケジュールには依存しない。むしろ、本明細書で開示された例は、アクセラレータ及び/又は他の処理要素上の利用可能なデータ及び利用可能なメモリに基づいて、所与のCBBに割り当てられているワークロードノードのどれを行うかを決定する。さらに、各CBBは、クレジットの第1の数で表される、第1バッファで利用可能な所与のワークロードに関連づけられたデータの量、及び、クレジットの第2の数で表される、第2バッファで利用可能なスペースの量を追跡する。これは、所与のCBBでのワークロードノードのダイナミックランタイムスケジューリングを可能にする。
【0024】
ワークロードノードごとに、クレジットの第1の数が第1閾値を満たしかつクレジットの第2の数が第2閾値を満たす場合に、CBBはワークロードノードを実行し得る。これは、ワークロード全体の所与のグラフから独立した順不同にパイプライン化された実行を可能にする。本明細書で開示された例は、アクセラレータの1又は複数の計算ビルディングブロックにワークロードのスタティックマッピングの順不同にパイプライン化された実行を可能にする装置を提供する。例示的な装置は、クレジットの第1の数をメモリ内へ読み込むインターフェースと、クレジットの第1の数をバッファのメモリ利用可能性に関連付けられたクレジットの閾値数と比較する比較器と、クレジットの第1の数がクレジットの閾値数を満たす場合に、1又は複数の計算ビルディングブロックの最初の一つで実行されるワークロードのワークロードノードを選択するディスパッチャとを含む。
【0025】
図3は、本開示の教示に従い構築される例示的なコンピューティングシステム300を示すブロック図である。図3の例において、コンピューティングシステム300は、例示的なシステムメモリ302及び例示的な異種システム304を含む。例示的な異種システム304は、例示的なホストプロセッサ306、例示的な第1通信バス308、例示的な第1アクセラレータ310a、例示的な第2アクセラレータ310b及び例示的な第3アクセラレータ310cを含む。例示的な第1アクセラレータ310a、例示的な第2アクセラレータ310b及び例示的な第3アクセラレータ310cの各々は、いくつかはアクセラレータの演算に対して汎用的で、いくつかはそれぞれのアクセラレータの演算に対して特化した様々のCBBを含む。
【0026】
図3の例において、システムメモリ302は異種システム304に結合される。システムメモリ302はメモリである。図3において、システムメモリ302は、ホストプロセッサ306、第1アクセラレータ310a、第2アクセラレータ310b及び第3アクセラレータ310cのうちの少なくとも1つの間での共有ストレージである。図3の例において、システムメモリ302はコンピューティングシステム300に位置する物理ストレージである。しかしながら、他の例において、システムメモリ302はコンピューティングシステム300の外部にあってよく及び/又はそうでなければ離れていてよい。さらなる例において、システムメモリ302は仮想記憶装置であってよい。図3の例において、システムメモリ302は、永続ストレージ(例えば読み出し専用メモリ(ROM)、プログラマブルROM(PROM)、消去可能PROM(EPROM)、電気的消去可能PROM(EEPROM等))である。他の例において、システムメモリ302は、永続基本入出力システム(BIOS)又はフラッシュストレージであってよい。さらなる例において、システムメモリ302は揮発性メモリであってよい。
【0027】
図3において、異種システム304はシステムメモリ302と結合される。図3の例において、異種システム304は、ホストプロセッサ306、及び/又は、第1アクセラレータ310a、第2アクセラレータ310b又は第3アクセラレータ310cの1又は複数でワークロードを実行することによって、ワークロードを処理する。図3において、異種システム304はSoCである。代替的に、異種システム304はいかなるその他のタイプのコンピューティング又はハードウェアシステムであってよい。
【0028】
図3の例において、ホストプロセッサ306は、コンピュータ又はコンピューティングデバイス(例えばコンピューティングシステム300)に関連付けられた演算の完了の実行、遂行及び/又は促進するための命令(例えば機械可読命令)を実行する処理要素である。図3の例において、ホストプロセッサ306は、異種システム304にとって基本の処理要素であり、かつ、少なくとも1つのコアを含む。代替的に、ホストプロセッサ306は、(例えば1つより多いCPUが用いられる例において)共同した一次的な処理要素であってよいが、他の例において、ホストプロセッサ306は、二次的な処理要素であってよい。
【0029】
図3に図示の例において、第1アクセラレータ310a、第2アクセラレータ310b及び/又は第3アクセラレータ310cの1又は複数は、ハードウェアアクセラレーションのようなコンピューティングタスクのための異種システム304で実行するプログラムによって利用されてよい処理要素である。例えば、第1アクセラレータ310aは、AIに対するマシンビジョンタスク(例えばVPU)を処理する処理速度及び全体性能を向上するよう設計され及び/又はそうでなければ構成され若しくは構築された処理リソースを含む処理要素である。
【0030】
本明細書で開示された例において、ホストプロセッサ306、第1アクセラレータ310a、第2アクセラレータ310b及び第3アクセラレータ310cの各々は、コンピューティングシステム300及び/又はシステムメモリ302の他の要素と通信する。例えば、ホストプロセッサ306、第1アクセラレータ310a、第2アクセラレータ310b、第3アクセラレータ310c及び/又はシステムメモリ302は第1通信バス308で通信する。本明細書で開示されたいくつかの例において、ホストプロセッサ306、第1アクセラレータ310a、第2アクセラレータ310b、第3アクセラレータ310c及び/又はシステムメモリ302は、任意の適切な有線及び/又は無線通信システムで通信してよい。更に、本明細書で開示されたいくつかの例において、ホストプロセッサ306、第1アクセラレータ310a、第2アクセラレータ310b、第3アクセラレータ310c及び/又はシステムメモリ302の各々は、任意の適切な有線及び/又は無線通信システムで、コンピューティングシステム300の外部の任意のコンポーネントと通信してよい。
【0031】
図3の例において、第1アクセラレータ310aは、例示的な畳み込みエンジン312、例示的なRNNエンジン314、例示的なメモリ316、例示的なメモリ管理ユニット(MMU)318、例示的なDSP320、例示的なコントローラ322及び例示的なダイレクトメモリアクセス(DMA)ユニット324を含む。更に、例示的な畳み込みエンジン312、例示的なRNNエンジン314、例示的なDMAユニット324、例示的なDSP320及び例示的なコントローラ322及びの各々は、例示的な第1スケジューラ326、例示的な第2スケジューラ328、例示的な第3スケジューラ330、例示的な第4スケジューラ332及び例示的な第5スケジューラ334をそれぞれ含む。例示的なDSP320及び例示的なコントローラ322の各々は更に、例示的な第1カーネルライブラリ336及び例示的な第2カーネルライブラリ338を含む。
【0032】
図3に図示の例において、畳み込みエンジン312は畳み込みに関連したタスクの処理を向上させるよう構成されたデバイスである。さらに、畳み込みエンジン312は、視覚イメージの解析に関連するタスク及び/又はCNNに関連する他のタスクの処理を向上させる。図3において、RNNエンジン314はRNNに関連するタスクの処理を向上するよう構成されたデバイスである。更に、RNNエンジン314は、セグメント化されていない繋がった手書き認識、音声認識の解析に関連するタスク及び/又はRNNに関連する他のタスクの処理を向上させる。
【0033】
図3の例において、メモリ316は、畳み込みエンジン312、RNNエンジン314、MMU318、DSP320、コントローラ322及びDMAユニット324のうちの少なくとも1つの間の共有ストレージである。図3の例において、メモリ316は第1アクセラレータ310aに位置する物理ストレージである。しかしながら、他の例において、メモリ316は、第1アクセラレータ310aの外部にあってよく及び/又はそうでなければ離れていてよい。さらなる例において、メモリ316は仮想記憶装置であってよい。図3の例において、メモリ316は、永続ストレージ(例えばROM、PROM、EPROM、EEPROM等)である。他の例において、メモリ316は永続BIOS又はフラッシュストレージであってよい。さらなる例において、メモリ316は揮発性メモリであってよい。
【0034】
図3に図示の例において、例示的なMMU318は、メモリ316及び/又はシステムメモリ302のアドレスへの参照を含むデバイスである。MMU318は更に、畳み込みエンジン312、RNNエンジン314、DSP320及び/又はコントローラ322の1又は複数によって用いられる仮想的メモリアドレスを、メモリ316及び/又はシステムメモリ302内の物理アドレスへ変換する。
【0035】
図3の例において、DSP320は、デジタル信号の処理を向上させるデバイスである。例えば、DSP320は、カメラ及び/又はコンピュータビジョンに関する他のセンサからのデータのような、連続的な実世界の信号を測定、フィルタ及び/又は圧縮する処理を促進する。図3において、コントローラ322は第1アクセラレータ310aの制御ユニットとして実装される。例えば、コントローラ322は、第1アクセラレータ310aの演算を管理する。いくつかの例において、コントローラ322はクレジットマネージャーを実装する。さらに、コントローラ322は、畳み込みエンジン312、RNNエンジン314、メモリ316、MMU318及び/又はDSP320の1又は複数に、ホストプロセッサ306から受信した機械可読命令にどのように応答するかを命令し得る。
【0036】
図3に図示の例において、DMAユニット324は、畳み込みエンジン312、RNNエンジン314、DSP320及びコントローラ322のうちの少なくとも1つに、ホストプロセッサ306から独立してシステムメモリ302にアクセスすることを可能にするデバイスである。例えば、DMAユニット324は、アナログ又はデジタル回路、ロジック回路、プログラマブルプロセッサ、プログラマブルコントローラ、グラフィック処理ユニット(GPU)、デジタルシグナルプロセッサ(DSP)、特定用途向け集積回路(ASIC)、プログラマブル論理デバイス(PLD)及び/又はフィールドプログラマブル論理デバイス(FPLD)の1又は複数によって実装され得る。
【0037】
図3の例において、第1スケジューラ326、第2スケジューラ328、第3スケジューラ330、第4スケジューラ332及び第5スケジューラ334の各々は、畳み込みエンジン312、RNNエンジン314、DMAユニット324、DSP320及びコントローラ322がそれぞれ、オフロードされていた及び/又はそうでなければ第1アクセラレータ310aに送信されているワークロードの一部をいつ実行するかを決定するデバイスである。更に、第1カーネルライブラリ336及び第2カーネルライブラリ338の各々は、1又は複数のカーネルを含むデータ構造である。第1カーネルライブラリ336及び第2カーネルライブラリ338のカーネルは、例えば、DSP320及びコントローラ322のそれぞれで高スループットのためにコンパイルされたルーチンである。カーネルは、例えば、コンピューティングシステム300で行われる実行ファイルの実行可能なサブセクションに対応する。
【0038】
本明細書で開示された例において、畳み込みエンジン312、RNNエンジン314、メモリ316、MMU318、DSP320、コントローラ322及びDMAユニット324の各々は、第1アクセラレータ310aの他の要素と通信する。例えば、畳み込みエンジン312、RNNエンジン314、メモリ316、MMU318、DSP320、コントローラ322及びDMAユニット324は、例示的な第2通信バス340で通信する。いくつかの例において、第2通信バス340は、コンフィギュレーションアンドコントロール(CnC)ファブリック及びデータファブリックにより実装されてよい。本明細書で開示されたいくつかの例において、畳み込みエンジン312、RNNエンジン314、メモリ316、MMU318、DSP320、コントローラ322及びDMAユニット324は、任意の適切な有線及び/又は無線通信システムで通信してよい。更に、本明細書に開示されたいくつかの例において、畳み込みエンジン312、RNNエンジン314、メモリ316、MMU318、DSP320、コントローラ322及びDMAユニット324の各々は、任意の適切な有線及び/又は無線通信システムで第1アクセラレータ310aの外部の任意のコンポーネントと通信してよい。
【0039】
前に言及したように、例示的な第1アクセラレータ310a、例示的な第2アクセラレータ310b及び例示的な第3アクセラレータ310cの各々は、いくつかはアクセラレータの演算に対して汎用的で、いくつかはそれぞれのアクセラレータの演算に対して特化した様々のCBBを含む。例えば、第1アクセラレータ310a、第2アクセラレータ310b及び第3アクセラレータ310cの各々は、メモリ、MMU、コントローラ、及び、CBBの各々に対するそれぞれのスケジューラのような汎用CBBを含む。
【0040】
図3の例において、第1アクセラレータ310aはVPUを実装し、かつ、畳み込みエンジン312、RNNエンジン314及びDSP320(例えば第1アクセラレータ310aの演算に特化したCBB)を含み、第2アクセラレータ310b及び第3アクセラレータ310cは第2アクセラレータ310b及び/又は第3アクセラレータ310cに特化した追加的又は代替的なCBBを含んでよい。例えば、もし第2アクセラレータ310bがGPUを実装していれば、第2アクセラレータ310bの演算に特化したCBBは、スレッドディスパッチャ、グラフィックテクノロジーインターフェース及び/又はコンピュータグラフィック及び/又は画像処理を処理する処理速度及び全体性能を向上するのに好ましい任意のその他のCBBを含み得る。さらに、もし第3アクセラレータ310cがFPGAを実装していれば、第3アクセラレータ310cの演算に特化したCBBは、1又は複数の算術ロジックユニット(ALU)及び/又は汎用の計算を処理する処理速度及び全体性能を向上するのに好ましい任意のその他のCBBを含み得る。
【0041】
図3の異種システム304は、ホストプロセッサ306、第1アクセラレータ310a、第2アクセラレータ310b及び第3アクセラレータ310cを含むが、いくつかの例において、異種システム304は、特定用途向け命令セットプロセッサ(ASIP)、物理演算ユニット(PPU)、指定されたDSP、画像プロセッサ、コプロセッサ、浮動小数点ユニット、ネットワークプロセッサ、マルチコア及びフロントエンドプロセッサを含む、任意の数の処理要素(例えばホストプロセッサ及び/又はアクセラレータ)を含んでよい。
【0042】
さらに、図3の例において、畳み込みエンジン312、RNNエンジン314、メモリ316、MMU318、DSP320、コントローラ322、DMAユニット324、第1スケジューラ326、第2スケジューラ328、第3スケジューラ330、第4スケジューラ332、第5スケジューラ334、第1カーネルライブラリ336及び第2カーネルライブラリ338は第1アクセラレータ310a上に実装されるが、畳み込みエンジン312、RNNエンジン314、メモリ316、MMU318、DSP320、コントローラ322、DMAユニット324、第1スケジューラ326、第2スケジューラ328、第3スケジューラ330、第4スケジューラ332、第5スケジューラ334、第1カーネルライブラリ336及び第2カーネルライブラリ338の1又は複数は、ホストプロセッサ306、第2アクセラレータ310b及び/又は第3アクセラレータ310cに実装され得る。
【0043】
図4は、例示的な1又は複数のスケジューラを含む例示的なコンピューティングシステム400を示すブロック図である。いくつかの例において、コンピューティングシステム400は、図3のコンピューティングシステム300に対応し得る。図4の例において、コンピューティングシステム400は、例示的な入力402、例示的なコンパイラ404及び例示的なアクセラレータ406を含む。いくつかの例において、アクセラレータ406は、図3の第1アクセラレータ310aに対応し得る。図4において、入力402はコンパイラ404に結合される。入力402は、アクセラレータ406で実行されるべきワークロードである。いくつかの例において、コンパイラ404は、図3のホストプロセッサ306及び/又は外部デバイスに対応し得る。
【0044】
図4の例において、入力402は、例えば、機能、アルゴリズム、プログラム、アプリケーション、及び/又は、アクセラレータ406によって実行される他のコードである。いくつかの例において、入力402は、機能、アルゴリズム、プログラム、アプリケーション及び/又は他のコードのグラフ記述であってよい。追加的又は代替的な例において、入力402は深層学習及び/又はコンピュータビジョンのようなAI処理に関するワークロードである。
【0045】
図4に図示の例において、コンパイラ404は入力402及びアクセラレータ406に結合される。コンパイラ404は入力402を受信し、入力402をアクセラレータ406によって実行される1又は複数の実行ファイル内へコンパイルする。例えば、コンパイラ404は、入力402を受信し、ワークロード(例えば入力402)の様々なワークロードノードをアクセラレータ406の様々なCBBに割り当てるグラフコンパイラである。更に、コンパイラ404は、アクセラレータ406のメモリ内の1又は複数のバッファに対してメモリを割り振る。
【0046】
図4の例において、アクセラレータ406はコンパイラ404に結合されており、例示的なクレジットマネージャー408、例示的なCnCファブリック410、例示的なデータファブリック411、例示的な畳み込みエンジン412、例示的なDMAユニット414、例示的なRNNエンジン416、例示的なDSP418、例示的なメモリ420及び例示的なMMU422を含む。更に、例示的な畳み込みエンジン412、例示的なDMAユニット414、例示的なRNNエンジン416及び例示的なDSP418の各々は、例示的な第1スケジューラ424、例示的な第2スケジューラ426、例示的な第3スケジューラ428及び例示的な第4スケジューラ430をそれぞれ含む。さらに、例示的なDSP418は例示的なカーネルライブラリ432を含む。いくつかの例において、第1スケジューラ424は図3の第1スケジューラ326に対応し得る。追加的又は代替的な例において、第2スケジューラ426は図3の第3スケジューラ330に対応し得る。さらなる例において、第3スケジューラ428は図3の第2スケジューラ328に対応し得る。いくつかの例において、第4スケジューラ430は図4の第4スケジューラ332に対応し得る。
【0047】
図4に図示の例において、クレジットマネージャー408はコンパイラ404及びCnCファブリック410に結合される。クレジットマネージャー408は、畳み込みエンジン412、DMAユニット414、RNNエンジン416及び/又はDSP418の1又は複数に関連付けられたクレジットを管理するデバイスである。いくつかの例において、クレジットマネージャー408は、クレジットマネージャーコントローラとしてコントローラにより実装され得る。クレジットは、メモリ420内で利用可能なワークロードノードに関連付けられたデータ、及び/又は、ワークロードノードの出力に対してメモリ420内で利用可能なスペースの量を表す。例えば、クレジットマネージャー408は、コンパイラ404から受信した1又は複数の実行ファイルに基づいて、メモリ420を、所与のワークロードのワークロードノードごとに関連付けられた1又は複数のバッファに区分し得る。もしワークロードノードがバッファにデータを書き込むよう構成されていれば、ワークロードノードはプロデューサーであり、もしワークロードノードがバッファからデータを読み出すよう構成されていれば、ワークロードノードはコンシューマーである。
【0048】
図4の例において、クレジットマネージャー408は更に、畳み込みエンジン412、DMAユニット414、RNNエンジン416及び/又はDSP418の1又は複数にクレジットを送信及び/又はクレジット受信するよう構成される。いくつかの例において、クレジットマネージャー408は、アクセラレータ406の制御ユニットとして実装される。例えば、クレジットマネージャー408はアクセラレータ406の演算を管理し得る。さらに、クレジットマネージャー408は、畳み込みエンジン412、DMAユニット414、RNNエンジン416及び/又はDSP418の1又は複数に、実行ファイル及び/又はコンパイラ404から受信した他の機械可読命令に対してどのように応答するかを命令し得る。
【0049】
図4の例において、CnCファブリック410は、クレジットマネージャー408、畳み込みエンジン412、DMAユニット414、RNNエンジン416及びDSP418に結合される。CnCファブリック410は、クレジットマネージャー408、畳み込みエンジン412、DMAユニット414、RNNエンジン416及び/又はDSP418の1又は複数が、クレジットマネージャー408、畳み込みエンジン412、DMAユニット414、RNNエンジン416及び/又はDSP418の1又は複数にクレジットを送信及び/又はそれらからクレジットを受信することを可能にする少なくとも1つのロジック回路と電気的に相互接続されるネットワークである。いくつかの例において、CnCファブリック410は、図3の第2通信バス340に対応し得る。
【0050】
図4の例において、データファブリック411は、畳み込みエンジン412、DMAユニット414、RNNエンジン416、DSP418、メモリ420及びMMU422に結合される。データファブリック411は、クレジットマネージャー408、畳み込みエンジン412、RNNエンジン416、DSP418、メモリ420及び/又はMMU422の1又は複数が、クレジットマネージャー408、畳み込みエンジン412、RNNエンジン416、DSP418、メモリ420及び/又はMMU422の1又は複数にデータを送信及び/又はそれらからデータを受信することを可能にする少なくとも1つのロジック回路と電気的に相互接続するネットワークである。いくつかの例において、データファブリック411は図3の第2通信バス340に対応し得る。
【0051】
図4に図示の例において、畳み込みエンジン412はCnCファブリック410及びデータファブリック411に結合される。畳み込みエンジン412は、畳み込みに関連するタスクの処理を向上するよう構成されたデバイスである。さらに、畳み込みエンジン412は、視覚イメージの解析に関連付けられたタスク及び/又はCNNに関連付けられた他のタスクの処理を向上させる。いくつかの例において、畳み込みエンジン412は図3の畳み込みエンジン312に対応し得る。
【0052】
図4に図示の例において、DMAユニット414はCnCファブリック410及びデータファブリック411に結合される。DMAユニット414は、畳み込みエンジン412、RNNエンジン416又はDSP418のうちの少なくとも1つが、対応するプロセッサ(例えばホストプロセッサ306)から独立して、アクセラレータ406から離れたメモリ(例えばシステムメモリ302)にアクセスすることを可能にするデバイスである。いくつかの例において、DMAユニット414は図3のDMAユニット324に対応し得る。例えば、DMAユニット414は、アナログ又はデジタル回路、ロジック回路、プログラマブルプロセッサ、プログラマブルコントローラ、GPU、DSP、ASIC、PLD及び/又はFPLDの1又は複数によって実装され得る。
【0053】
図4において、RNNエンジン416はCnCファブリック410及びデータファブリック411に結合される。RNNエンジン416は、RNNに関連するタスクの処理を向上するよう構成されたデバイスである。更に、RNNエンジン416は、セグメント化されていない繋がった手書き認識、音声認識の解析に関連付けられたタスク及び/又はRNNに関連付けられた他のタスクの処理を向上させる。いくつかの例において、RNNエンジン416は図3のRNNエンジン314に対応し得る。
【0054】
図4の例において、DSP418はCnCファブリック410及びデータファブリック411に結合される。DSP418はデジタル信号の処理を向上させるデバイスである。例えば、DSP418は、カメラ及び/又はコンピュータビジョンに関する他のセンサからのデータのような、連続的な実世界の信号を測定、フィルタ及び/又は圧縮する処理を促進する。いくつかの例において、DSP418は図3のDSP320に対応し得る。
【0055】
図4の例において、メモリ420はデータファブリック411に結合される。メモリ420は、畳み込みエンジン412、DMAユニット414、RNNエンジン416及びDSP418のうちの少なくとも1つの間での共有ストレージである。いくつかの例において、メモリ420は図3のメモリ316に対応し得る。メモリ420は、クレジットマネージャー408から受信した実行ファイルに関連付けられたワークロードの1又は複数のワークロードノードに関連付けられた1又は複数のバッファに区分化され得る。図4の例において、メモリ420はアクセラレータ406に位置する物理ストレージである。しかしながら、他の例において、メモリ420はアクセラレータ406の外部にあってよく及び/又はそうでなければ離れていてよい。さらなる例において、メモリ420は仮想記憶装置であってよい。図4の例において、メモリ420は永続ストレージ(例えばROM、PROM、EPROM、EEPROM等)である。他の例において、メモリ420は永続BIOS又はフラッシュストレージであってよい。さらなる例において、メモリ420は揮発性メモリであってよい。
【0056】
図4に図示の例において、例示的なMMU422はデータファブリック411に結合される。MMU422は、メモリ420及び/又はアクセラレータ406から離れたメモリのアドレスへの参照を含むデバイスである。MMU422は更に、畳み込みエンジン412、DMAユニット414、RNNエンジン416及び/又はDSP418の1又は複数に利用される仮想的メモリアドレスを、メモリ420及び/又はアクセラレータ406から離れたメモリ内の物理アドレスに変換する。いくつかの例において、MMU422は図3のMMU318に対応し得る。
【0057】
図4の例において、第1スケジューラ424、第2スケジューラ426、第3スケジューラ428及び第4スケジューラ430の各々は、クレジットマネージャー408及び/又はアクセラレータ406の追加的なCBBによって、畳み込みエンジン412、DMAユニット414、RNNエンジン416及びDSP418にそれぞれ割り当てられているワークロードの一部(例えばワークロードノード)を、畳み込みエンジン412、DMAユニット414、RNNエンジン416及びDSP418がそれぞれいつ実行するかを決定するデバイスである。タスク及び/又は所与のワークロードノードの他の演算に応じて、ワークロードノードはプロデューサー又はコンシューマーであり得る。プロデューサーワークロードノードは他のワークロードノードで利用されるデータを生成し、他方、コンシューマーワークロードノードは他のワークロードノードで生成されたデータを消費及び/又はそうでなければ処理する。
【0058】
図4に図示の例において、カーネルライブラリ432は1又は複数のカーネルを含むデータ構造である。いくつかの例において、カーネルライブラリ432は図3の第1カーネルライブラリ336に対応し得る。カーネルライブラリ432のカーネルは、例えば、DSP418で高スループットとなるためにコンパイルされたルーチンである。カーネルは、例えば、アクセラレータ406上で動作する実行ファイルの実行可能なサブセクションに対応する。図4の例において、アクセラレータ406はVPUを実装し、クレジットマネージャー408、CnCファブリック410、データファブリック411、畳み込みエンジン412、DMAユニット414、RNNエンジン416、DSP418、メモリ420及びMMU422を含むが、アクセラレータ406は図4に図示されたこれらに追加的又は代替的なCBBを含んでよい。
【0059】
図4の例で、演算において、第1スケジューラ424は、畳み込みエンジン412に割り当てられたワークロードノードに対するワークロードノードへの入力バッファ及びワークロードノードからの出力バッファに対応したクレジットを読み込む。例えば、入力バッファはワークロードノードがそこからデータを読み出すよう構成されたバッファである一方、出力バッファはワークロードノードがそこからデータを書き込むよう構成されたバッファである。いくつかの例において、第1ワークロードノードの入力バッファは第2ワークロードノードの出力バッファであり得る。さらに、第1スケジューラ424はクレジットマネージャー408からクレジットを受信及び/又はそうでなければ取得する。
【0060】
図4の例で、演算において、第1スケジューラ424は、畳み込みエンジン412に割り当てられたワークロードノードを選択し、選択されたワークロードノードへの入力バッファに格納されているデータを演算するために、第1スケジューラ424がクレジットの閾値量を受信しているか否かを決定する。例えば、第1スケジューラ424は、入力バッファに対するプロデューサーワークロードノードから受信したクレジット数を、入力バッファに対するクレジットの閾値数と比較する。もし第1スケジューラ424はクレジットの閾値量を受信していなければ、第1スケジューラ424は畳み込みエンジン412に割り当てられた他のワークロードノードの処理を繰り返す。
【0061】
図4に図示した例において、演算において、もし第1スケジューラ424が、選択されたワークロードノードへの入力バッファに格納されているデータを演算するためにクレジットの閾値量を受信していれば、第1スケジューラ424は、第1スケジューラ424が選択されたワークロードノードに対して出力バッファにデータを書き込むためにクレジットの閾値量を受信しているか否かを判断する。例えば、第1スケジューラ424は、出力バッファに対するコンシューマーワークロードノードから受信したクレジット数を、選択されたワークロードノードのための出力バッファに対するクレジットの閾値数と比較する。もし第1スケジューラ424がクレジットの閾値量を受信していなければ、第1スケジューラ424は畳み込みエンジン412に割り当てられた他のワークロードノードの処理を繰り返す。もし第1スケジューラ424が出力バッファにデータを書き込むためにクレジットの閾値量を受信していれば、第1スケジューラ424は選択されたワークロードノードの実行が準備できたことを示す。次に、第1スケジューラ424は畳み込みエンジン412に割り当てられた追加的なワークロードノードに対してこの処理を繰り返す。
【0062】
図4の例で、演算において、畳み込みエンジン412に割り当てられたワークロードノードが解析された後に、第1スケジューラ424は実行の準備ができたワークロードノードをスケジューリングする。第1スケジューラ424は次に、スケジュールに従ってワークロードノードをディスパッチする。ディスパッチされたワークロードノードが畳み込みエンジン412によって実行された後に、第1スケジューラ424は、入力バッファ及び/又は出力バッファに対応するクレジットをクレジットマネージャー408に送信する。第1スケジューラ424は実行されるスケジュール内に追加的なワークロードノードがあるかどうかを判断する。もしスケジュール内に追加的なワークロードノードがあるなら、第1スケジューラ424は、畳み込みエンジン412で実行されるスケジュール内の次のワークロードノードを生じさせる。
【0063】
図5図3及び4の1又は複数のスケジューラを実装し得る例示的なスケジューラ500のブロック図である。例えば、スケジューラ500は、図3の第1スケジューラ326、第2スケジューラ328、第3スケジューラ330、第4スケジューラ332及び/又は第5スケジューラ334、及び/又は、図4の第1スケジューラ424、第2スケジューラ426、第3スケジューラ428及び/又は第4スケジューラ430、及び/又は、図6のスケジューラ600、及び/又は、図7の第1スケジューラ722、第2スケジューラ724、第3スケジューラ726及び/又は第4スケジューラ728の例示的な実装である。
【0064】
図5の例において、スケジューラ500は、例示的なワークロードインターフェース502、例示的なバッファクレジット格納装置504、例示的なクレジット比較器506、例示的なワークロードノードディスパッチャ508及び例示的な通信バス510を含む。スケジューラ500は、スケジューラ500が関連付けられるところCBBに割り当てられているワークロードの一部(例えばワークロードノード)を、スケジューラ500が関連付けられるところのCBBがいつ実行するかを決定するデバイスである。
【0065】
図5に図示の例において、ワークロードインターフェース502は、スケジューラ500、バッファクレジット記録装置504、クレジット比較器506及び/又はワークロードノードディスパッチャ508の外部の他のデバイスと通信するよう構成されたデバイスである。
例えば、ワークロードインターフェース502は、スケジューラ500が関連付けられるところのCBBによって実行されるワークロードノードを受信及び/又はそうでなければ取得し得る。更に又は代替的に、ワークロードインターフェース502は他のスケジューラ、他のCBB及び/又は他のデバイスにクレジットを送信及び/又はそれらから受信し得る。さらに、ワークロードインターフェース502は、ワークロードノードへの入力バッファ及び/又はワークロードノードからの出力バッファに対応するクレジットを、バッファクレジット記録装置504内へ及び/又はそこから読み込み得る。
【0066】
いくつかの例において、例示的なワークロードインターフェース502は例示的なインターフェースする手段を実装する。インターフェース手段は、図8の少なくともブロック802、818及び822によって実装されるような実行可能命令によって実装される。例えば、図8のブロック802、818及び822の実行可能命令は、図9の例に示される例示的なプロセッサ910及び/又は例示的なアクセラレータ912のような少なくとも1つのプロセッサで実行されてよい。他の例において、インターフェース手段は、ハードウェアロジック、ハードウェア実装ステートマシン、論理回路、及び/又は、ハードウェア、ソフトウェア及び/又はファームウェアの他の任意の組み合わせによって実装される。
【0067】
図5に図示される例において、バッファクレジット記録装置504は、ワークロードインターフェース502、クレジット比較器506及び/又はワークロードノードディスパッチャ508のうちの少なくとも1つの間での共有ストレージである。バッファクレジット記録装置504はスケジューラ500に位置する物理ストレージである。しかしながら、他の例において、バッファクレジット記録装置504はスケジューラ500の外部にあってよく及び/又はそうでなければそれから離れていてよい。さらなる例において、バッファクレジット記録装置504は仮想記憶装置であってよい。図5の例において、バッファクレジット記録装置504は永続ストレージ(例えばROM、PROM、EPROM、EEPROM等)である。他の例において、バッファクレジット記録装置504は永続BIOS又はフラッシュストレージであってよい。さらなる例において、バッファクレジット記録装置504は揮発性メモリであってよい。
【0068】
図5の例において、バッファクレジット記録装置504は、スケジューラ500が関連付けられるところのCBBに割り当てられたワークロードノードに関連付けられたワークロードノードへの入力バッファ及び/又はワークロードノードからの出力バッファに対応したクレジットを格納することに関連付けられたメモリである。例えば、バッファクレジット記録装置504は、スケジューラ500が関連付けられるところのCBBに割り当てられたワークロードノードごとに対するフィールド、及び、スケジューラ500が関連付けられるところのCBBに割り当てられたワークロードノードに関連付けられたワークロードノードへの各入力バッファ及び/又はワークロードノードからの各出力バッファに対するフィールド、を含むデータ構造として実装され得る。
【0069】
図5の図示の例において、バッファクレジット記録装置504は更に又は代替的に、スケジューラ500が関連付けられるところのCBBに割り当てられているワークロードノード、及び/又は、ワークロードノードへの入力バッファ及び/又はワークロードノードからの出力バッファに対応するクレジットの閾値量を格納し得る。さらに、バッファクレジット記録装置504は、各ワークロードノードへの入力バッファ及び/又は各ワークロードノードからの出力バッファに対するクレジットの閾値数に関連付けられたフィールドを含む。
【0070】
図5の例において、ワークロードノードがプロデューサーである(例えばワークロードノードが他のワークロードノードによって利用されるデータを生成する)場合に、クレジットの閾値数は、スケジューラ500が関連付けられるところのCBBがプロデューサーワークロードノードを実行し得る前に満たされるべき出力バッファのスペースの閾値量(例えばメモリ420の区分化されたスペース)に対応する。更に、ワークロードノードがコンシューマーである(例えばワークロードノードが他のワークロードノードによって生成されたデータを処理する)場合に、クレジットの閾値数は、スケジューラ500が関連付けられるところのCBBがコンシューマーワークロードノードを実行し得る前に満たされるべき入力バッファのデータの閾値量(例えばメモリ420の区分化されたスペース)に対応する。
【0071】
いくつかの例において、例示的なバッファクレジット格納装置504は例示的な格納する手段を実装する。格納手段は、図8において実装されたもののような実行可能命令によって実装され得る。例えば、実行可能命令は図9の例に示された例示的なプロセッサ910及び/又は例示的なアクセラレータ912のような少なくとも1つのプロセッサで実行されてよい。他の例において、格納手段は、ハードウェアロジック、ハードウェア実装ステートマシン、論理回路、及び/又は、ハードウェア、ソフトウェア及び/又はファームウェアの他の任意の組み合わせによって実装される。
【0072】
図5に図示された例において、クレジット比較器506は、スケジューラ500が関連付けられるところのCBBに割り当てられたワークロードノードへの入力バッファ及び/又はワークロードノードからの出力バッファに対応したクレジットの閾値数が受信されているか否かを判断するよう構成されたデバイスである。クレジット比較器506は、スケジューラ500が関連付けられるところのCBBに割り当てられたワークロードノードを選択するよう構成される。
【0073】
図5の例において、クレジット比較器506は更に、選択されたワークロードノードに対して入力バッファに格納されたデータを演算するために、スケジューラ500がクレジットの閾値量を受信したか否かを判断するよう構成される。例えば、クレジット比較器506は、外部デバイス(例えばクレジットマネージャー408、コントローラ322等)から受信したクレジット数に関連付けられたバッファクレジット記録装置504内のフィールドを、選択されたワークロードノードへの入力バッファに対するクレジットの閾値数に関連付けられたバッファクレジット記録装置504内のフィールドと比較する。もしスケジューラ500がクレジットの閾値量を受信していないならば、クレジット比較器506はスケジューラ500が関連付けられるところのCBBに割り当てられた他のワークロードノードの処理を繰り返す。
【0074】
図5に図示した例において、もしスケジューラ500が入力バッファに格納されたデータを演算するためにクレジットの閾値量を受信しているならば、クレジット比較器506は選択されたワークロードノードに対する出力バッファにデータを書き込むためにクレジットの閾値量をスケジューラ500が受信したか否かを判断する。例えば、クレジット比較器506は、選択されたワークロードノードに対する出力バッファに対する外部デバイス(例えばクレジットマネージャー408、コントローラ322等)から受信したクレジット数に関連付けられたバッファクレジット記録装置504内のフィールドを、出力バッファに対するクレジットの閾値数に関連付けられたバッファクレジット記録装置504内のフィールドと比較する。
【0075】
図5の例において、もしスケジューラ500がクレジットの閾値量を受信していないならば、クレジット比較器506はスケジューラ500に関連付けられるところのCBBに割り当てられた他のワークロードノードの処理を繰り返す。もしスケジューラ500が出力バッファにデータを書き込むためにクレジットの閾値量を受信しているならば、クレジット比較器506は選択されたワークロードノードが実行する準備があることを示す。次に、クレジット比較器506は、スケジューラ500が関連付けられるところのCBBに割り当てられた追加的なワークロードノードに対するこの処理を繰り返す。
【0076】
いくつかの例において、例示的なクレジット比較器506は例示的な比較する手段を実装する。比較手段は、少なくとも図8のブロック804、806、808、810及び812によって実装されるような実行可能命令によって実装される。例えば、図8のブロック804、806、808、810及び812の実行可能命令は、図9の例に示された例示的なプロセッサ910及び/又は例示的なアクセラレータ912のような少なくとも1つのプロセッサで実行されてよい。他の例において、比較手段は、ハードウェアロジック、ハードウェア実装ステートマシン、論理回路、及び/又は、ハードウェア、ソフトウェア及び/又はファームウェアの他の任意の組み合わせによって実装される。
【0077】
図5の例において、ワークロードノードディスパッチャ508は、スケジューラ500に関連付けられるところのCBBで実行されるべくスケジューラ500に関連付けられるところのCBBに割り当てられた1又は複数のワークロードノードをスケジューリングするデバイスである。例えば、スケジューラ500に関連付けられるところのCBBに割り当てられたワークロードノードが解析された後に、ワークロードノードディスパッチャ508は実行する準備ができたワークロードノードをスケジューリングする。例えば、ワークロードノードディスパッチャ508は、実行する準備ができたワークロードノードをラウンドロビンスケジュールのようなスケジューリングアルゴリズムに基づいてスケジューリングする。ワークロードノードディスパッチャ508は次に、スケジュールに従ってワークロードノードをディスパッチする。他の例において、ワークロードノードディスパッチャ508は、実行する準備ができたワークロードノードをスケジューリングする任意の他の適切な任意のアルゴリズムを利用し得る。
【0078】
図5に図示された例において、ディスパッチされたワークロードノードがスケジューラ500が関連付けられるところのCBBによって実行されるにつれ、ワークロードインターフェース502は、ワークロードインターフェース502がクレジットをそこから受信するところの外部デバイス(例えばクレジットマネージャー408、コントローラ322等)への入力バッファに関連付けられたクレジットを送信する。ワークロードノードディスパッチャ508は更に、実行されるスケジュール内に追加的なワークロードノードがあるかどうかを判断する。もしスケジュール内に追加的なワークロードノードがあるならば、ワークロードノードディスパッチャ508はスケジュール内の次のワークロードノードをディスパッチする。
【0079】
いくつかの例において、例示的なワークロードノードディスパッチャ508は、例示的なディスパッチする手段を実装する。ディスパッチ手段は、少なくとも図8のブロック814、816及び820によって実装されるような実行可能命令によって実装される。例えば、図8のブロック814、816及び820の実行可能命令は、図9の例に示される例示的なプロセッサ910及び/又は例示的なアクセラレータ912のような少なくとも1つのプロセッサで実行されてよい。他の例において、ディスパッチ手段は、ハードウェアロジック、ハードウェア実装ステートマシン、論理回路、及び/又は、ハードウェア、ソフトウェア及び/又はファームウェアの他の任意の組み合わせによって実装される。
【0080】
本明細書で開示された例において、ワークロードインターフェース502、バッファクレジット記録装置504、クレジット比較器506及びワークロードノードディスパッチャ508の各々は、スケジューラ500の他の要素と通信する。例えば、ワークロードインターフェース502、バッファクレジット記録装置504、クレジット比較器506及びワークロードノードディスパッチャ508は例示的な通信バス510で通信する。本明細書で開示されるいくつかの例において、ワークロードインターフェース502、バッファクレジット記録装置504、クレジット比較器506及びワークロードノードディスパッチャ508は、任意の適切な有線及び/又は無線通信システムで通信してよい。更に、本明細書で開示されたいくつかの例において、ワークロードインターフェース502、バッファクレジット記録装置504、クレジット比較器506及びワークロードノードディスパッチャ508の各々は、任意の適切な有線及び/又は無線通信システムでスケジューラ500の外部の任意のコンポーネントと通信してよい。
【0081】
図6は、図5のバッファクレジット記録装置504のさらなる詳細を示す例示的なスケジューラ600のブロック図である。スケジューラ600は、図3の第1スケジューラ326、第2スケジューラ328、第3スケジューラ330、第4スケジューラ332及び/又は第5スケジューラ334、及び/又は、図4の第1スケジューラ424、第2スケジューラ426、第3スケジューラ428及び/又は第4スケジューラ430、及び/又は、図5のスケジューラ500、及び/又は、図7の第1スケジューラ722、第2スケジューラ724、第3スケジューラ726及び/又は第4スケジューラ728の例示的な実装である。
【0082】
図6の例において、スケジューラ600は、例示的なワークロードインターフェース502、例示的なバッファクレジット格納装置504、例示的なクレジット比較器506及び例示的なワークロードノードディスパッチャ508を含む。スケジューラ600は、スケジューラ600が関連付けられるところのCBBが、スケジューラ600が関連付けられるところのCBBに割り当てられているワークロードの一部(例えばワークロードノード)をいつ実行するかを決定するデバイスである。
【0083】
図6に図示の例において、ワークロードインターフェース502は、スケジューラ600の外部の1又は複数のデバイス、バッファクレジット記録装置504及びワークロードノードディスパッチャ508に結合される。ワークロードインターフェース502は、スケジューラ600の外部の他のデバイス、バッファクレジット記録装置504及び/又はワークロードノードディスパッチャ508と通信するよう構成されているデバイスである。例えば、ワークロードインターフェース502は、スケジューラ600が関連付けられるところのCBBによって実行されるワークロードノードを受信及び/又はそうでなければ取得し得る。更に又は代替的に、ワークロードインターフェース502は、クレジットをスケジューラ600の外部の1又は複数のデバイスへ送信及び/又はそこから受信し得る。さらに、ワークロードインターフェース502は、ワークロードノードへの入力バッファ及び/又はワークロードノードからの出力バッファに対応するクレジットを、バッファクレジット記録装置504内へ及び/又はから読み込み得る。
【0084】
図6に図示した例において、バッファクレジット記録装置504は、ワークロードインターフェース502、クレジット比較器506及び/又はワークロードノードディスパッチャ508のうちの少なくとも1つの間での共有ストレージである。バッファクレジット記録装置504はスケジューラ500に位置する物理ストレージである。しかしながら、他の例において、バッファクレジット記録装置504はスケジューラ500の外部にあってよく及び/又はそうでなければそれから離れていてもよい。さらなる例において、バッファクレジット記録装置504は仮想記憶装置であってよい。図5の例において、バッファクレジット記録装置504は、永続ストレージ(例えばROM、PROM、EPROM、EEPROM等)である。他の例において、バッファクレジット記録装置504は永続BIOS又はフラッシュストレージであってよい。さらなる例において、バッファクレジット記録装置504は揮発性メモリであってよい。
【0085】
図6の例において、バッファクレジット記録装置504は、第1ワークロードノードWN[0]、第2ワークロードノードWN[1]及び第nワークロードノードWN[n]に対応する行を含むデータ構造である。バッファクレジット記録装置504は更に、第1コンシューマー(例えばコンシューマー[0])に対する入力バッファ、第lコンシューマー(例えばコンシューマー[l])に対する入力バッファ、第1プロデューサー(例えばプロデューサー[0])に対する出力バッファ、及び、第mプロデューサー(例えばプロデューサー[m])に対する出力バッファに対応する列を含む。バッファクレジット記録装置504はさらに、各ワークロードノードへの入力バッファ及び/又は各ワークロードノードからの出力バッファのクレジットの閾値数に対応する列を含む。
【0086】
図6に図示の例において、第1ワークロードノードWN[0]、第2ワークロードノードWN[1]及び第nワークロードノードWN[n]の各々は、スケジューラ600が関連付けられるところのCBBに割り当てられる。バッファクレジット記録装置504において、第1ワークロードノードWN[0]、第2ワークロードノードWN[1]及び第nワークロードノードWN[n]に対応する行と、第1コンシューマー(例えばコンシューマー[0])に対する入力バッファ、第lコンシューマー(例えばコンシューマー[l])に対する入力バッファ、第1プロデューサー(例えばプロデューサー[0])に対する出力バッファ、第mプロデューサー(例えばプロデューサー[m])に対する出力バッファに対応する列との間の交差は、そのバッファに対する1又は複数の外部デバイスから受信するクレジット数に対応するフィールドを示す。さらに、各ワークロードノードへの入力バッファ及び/又は各ワークロードノードからの出力バッファに対するクレジットの閾値数に対応する列は、スケジューラ600が関連付けられるところのCBBがそれぞれのワークロードノードを演算し得る前にバッファに対して満たされるべきクレジットの閾値数を示す。
【0087】
図6の例において、バッファクレジット記録装置504における、第1ワークロードノードWN[0]、第2ワークロードノードWN[1]及び第nワークロードノードWN[n]に対応する行と、第1コンシューマー(例えばコンシューマー[0])に対する入力バッファ及び第lコンシューマー(例えばコンシューマー[l])に対する入力バッファに対応する列との間の交差のフィールドは、外部デバイス(例えばクレジットマネージャー408、コントローラ322等)によってゼロの値に初期化される。更に、バッファクレジット記録装置504における、第1ワークロードノードWN[0]、第2ワークロードノードWN[1]及び第nワークロードノードWN[n]に対応する行と、第1プロデューサー(例えばプロデューサー[0])に対する出力バッファ及び第mプロデューサー(例えばプロデューサー[m])に対する出力バッファに対応する列との間の交差のフィールドは、外部デバイス(例えばクレジットマネージャー408、コントローラ322等)によって関連するバッファ内に区分化されたメモリの量に対応した値に初期化される。さらに、入力バッファ及び/又は出力バッファに対するクレジットの閾値数に対応する列は、外部デバイス(例えばクレジットマネージャー408、コントローラ322、ホストプロセッサ306で実行するソフトウェア等)によって初期化される。
【0088】
図6に図示の例において、クレジット比較器506は、バッファクレジット記録装置504及びワークロードノードディスパッチャ508に結合される。クレジット比較器506は、スケジューラ600が関連付けられるところのCBBに割り当てられたワークロードノードへの入力バッファ及び/又はワークロードノードからの出力バッファに対応するクレジットの閾値数を受信しているか否かを判断するよう構成されたデバイスである。図6の例において、ワークロードノードディスパッチャ508は、ワークロードインターフェース502、バッファクレジット記録装置504、クレジット比較器506及びスケジューラ600の外部の1又は複数のデバイスに結合される。ワークロードノードディスパッチャ508は、例えば、スケジューラ600が関連付けられるところのCBBで実行されるべく、スケジューラ600が関連付けられるところのCBBに割り当てられた1又は複数のワークロードノードをスケジューリングするデバイスである。
【0089】
図6の例で、演算において、ワークロードインターフェース502が外部デバイス(例えばクレジットマネージャー408、コントローラ322等)からワークロードノードを受信及び/又はそうでなければ取得した場合に、ワークロードインターフェース502はワークロードノードをワークロードノードに対応するバッファクレジット記録装置504のそれぞれのフィールド内へ読み込む。さらに、クレジット比較器506は、スケジューラ600が関連付けられるところのCBBに割り当てられたワークロードノードを選択する。
【0090】
図6に図示の例において、クレジット比較器506は、選択されたワークロードノードに対する入力バッファに格納されたデータを演算するためにクレジットの閾値量をスケジューラ600が受信しているか否かを判断する。例えば、クレジット比較器506は、外部デバイス(例えばクレジットマネージャー408、コントローラ322等)から受信したクレジット数に関連付けられたバッファクレジット記録装置504内のフィールドを、選択されたワークロードノードへの入力バッファに対するクレジットの閾値数に関連付けられたバッファクレジット記録装置504内のフィールドと比較する。クレジットの閾値数は、スケジューラ600が関連付けられるところのCBBがコンシューマーワークロードノードを実行し得る前に満たされるべき入力バッファのデータの閾値量(例えばメモリ420の区分化されたスペース)に対応する。もしスケジューラ600がクレジットの閾値量を受信していないならば、クレジット比較器506は、スケジューラ600が関連付けられるところのCBBに割り当てられた他のワークロードノードの処理を繰り返す。
【0091】
図6に図示した例において、もしスケジューラ600が入力バッファに格納されたデータを演算するためにクレジットの閾値量を受信しているならば、クレジット比較器506は、スケジューラ600が選択されたワークロードノードに対する出力バッファへデータを書き込むためにクレジットの閾値量を受信しているか否かを判断する。例えば、クレジット比較器506は、選択されたワークロードノードに対する出力バッファに対する外部デバイス(例えばクレジットマネージャー408、コントローラ322等)から受信したクレジット数に関連付けられたバッファクレジット記録装置504内のフィールドを、出力バッファに対するクレジットの閾値数に関連付けられたバッファクレジット記録装置504内のフィールドと比較する。クレジットの閾値数は、スケジューラ600が関連付けられるところのCBBがプロデューサーワークロードノードを実行し得る前に満たされるべき出力バッファのスペースの閾値量(例えばメモリの区分化されたスペース)に対応し得る。
【0092】
図6の例において、もしスケジューラ600がクレジットの閾値量を受信していないならば、クレジット比較器506はスケジューラ600が関連付けられるところのCBBに割り当てられた他のワークロードノードの処理を繰り返す。もしスケジューラ600が出力バッファへデータを書き込ためにクレジットの閾値量を受信しているならば、クレジット比較器506は、選択されたワークロードノードが実行する準備ができていることを示す。次に、クレジット比較器506は、スケジューラ600が関連付けられるところのCBBに割り当てられた追加的なワークロードノードに対するこの処理を繰り返す。
【0093】
図6の例において、ワークロードノードディスパッチャ508は、スケジューラ600が関連付けられるところのCBBで実行されるべく、スケジューラ600が関連付けられるところのCBBに割り当てられた1又は複数のワークロードノードをスケジューリングするデバイスである。例えば、スケジューラ600が関連付けられるところのCBBに割り当てられたワークロードノードが解析された後に、ワークロードノードディスパッチャ508は、実行の準備ができたワークロードノードをスケジューリングする。例えば、ワークロードノードディスパッチャ508は、実行の準備ができたワークロードノードを、ラウンドロビンスケジュールのようなスケジューリングアルゴリズムに基づいてスケジューリングする。ワークロードノードディスパッチャ508は次に、スケジュールに従ってワークロードノードをディスパッチする。他の例において、ワークロードノードディスパッチャ508は実行の準備ができたワークロードノードをスケジューリングする任意の他の適切な任意のアルゴリズムを利用し得る。
【0094】
図6に図示した例において、ディスパッチされたワークロードノードがスケジューラ600が関連付けられるところのCBBによって実行されるにつれ、ワークロードインターフェース502は、入力バッファに関連付けられたクレジットをワークロードインターフェース502がそこからクレジットを受信したところの外部デバイス(例えばクレジットマネージャー408、コントローラ322等)へ送信する。ワークロードノードディスパッチャ508は更に、実行されるべきスケジュール内に追加的なワークロードノードがあるかどうかを判断する。もしスケジュール内に追加的なワークロードノードがあるならば、ワークロードノードディスパッチャ508はスケジュール内の次のワークロードノードをディスパッチする。
【0095】
図7は、パイプライン及びバッファを実装している異種システムのアクセラレータで実行するワークロードを表す例示的なグラフ700の図である。例えば、アクセラレータは、図3の第1アクセラレータ310aであり、異種システムは異種システム304である。例示的なグラフ700は、例示的な第1ワークロードノード702(WN[0])、例示的な第2ワークロードノード704(WN[1])、例示的な第3ワークロードノード706(WN[2])、例示的な第4ワークロードノード708(WN[3])及び例示的な第5ワークロードノード710(WN[4])を含む。図7の例において、アクセラレータは、ワークロードノードを様々なCBBに割り当てる例示的なクレジットマネージャー712からのスケジュールに基づいたグラフ700によって表されるワークロードを実行するよう構成されている。例えば、クレジットマネージャー712及び/又は他のコントローラは、第1ワークロードノード702(WN[0])を例示的な第1CBB714に、第2ワークロードノード704(WN[1])を例示的な第2CBB716に、第3ワークロードノード706(WN[2])を例示的な第3CBB718に、第4ワークロードノード708(WN[3])を例示的な第4CBB720に、及び、第5ワークロードノード710(WN[4])を例示的な第2CBB716に割り当てる。
【0096】
図7の例において、例示的な第1CBB714、例示的な第2CBB716、例示的な第3CBB718及び例示的な第4CBB720の各々は、例示的な第1スケジューラ722、例示的な第2スケジューラ724、例示的な第3スケジューラ726及び例示的な第4スケジューラ728を含む。第1スケジューラ722、第2スケジューラ724、第3スケジューラ726及び第4スケジューラ728の各々は、図5のスケジューラ500及び/又は図6のスケジューラ600によって実装され得る。
【0097】
図7に図示の例において、第1ワークロードノード702(WN[0])及び第2ワークロードノード704(WN[1])は例示的な第1バッファ730に関連付けられる。第1バッファ730は、第1ワークロードノード702(WN[0])の出力バッファ及び第2ワークロードノード704(WN[1])の入力バッファである。第2ワークロードノード704(WN[1])及び第3ワークロードノード706(WN[2])は例示的な第2バッファ732に関連付けられる。第2バッファ732は第2ワークロードノード704(WN[1])の出力バッファ及び第3ワークロードノード706(WN[2])の入力バッファである。第4ワークロードノード708(WN[3])及び第5ワークロードノード710(WN[4])は例示的な第3バッファ734に関連付けられる。第3バッファ734は第4ワークロードノード708(WN[3])の出力バッファ及び第5ワークロードノード710(WN[4])の入力バッファである。第1バッファ730、第2バッファ732及び第3バッファ734の各々は循環バッファによって実装され得る。図7の例において、第1バッファ730、第2バッファ732及び第3バッファ734の各々は、アクセラレータのメモリの5つの区分を含み、それらの各々はデータのタイルを格納し得る。
【0098】
図7に図示した例において、第1ワークロードノード702(WN[0])はプロデューサーワークロードノードであり、クレジットマネージャー712は第1バッファ730に対する5つのクレジットで第1スケジューラ722を初期化する。同様に、第2ワークロードノード704(WN[1])はプロデューサーワークロードノードなので、クレジットマネージャー712は第2バッファ732に対する5つのクレジットで第2スケジューラ724を初期化する。更に、第4ワークロードノード708(WN[3])はプロデューサーワークロードノードであり、クレジットマネージャー712は第3バッファ734に対する5つのクレジットで第4スケジューラ728を初期化する。
【0099】
第1スケジューラ722、第2スケジューラ724及び第4スケジューラ728の各々に提供された5つのクレジットは、第1バッファ730、第2バッファ732及び第3バッファ734のサイズの表現である。更に、第2ワークロードノード704(WN[1])はまたコンシューマーワークロードノードでもあり、クレジットマネージャー712は第1バッファ730に対するゼロクレジットで第2スケジューラ724を初期化する。さらに、第3ワークロードノード706(WN[2])はコンシューマーワークロードノードなので、クレジットマネージャー712は第2バッファ732に対するゼロクレジットで第3スケジューラ726を初期化する。さらに、第5ワークロードノード710(WN[4])はコンシューマーワークロードノードであり、クレジットマネージャー712は第3バッファ734に対するゼロクレジットで第2スケジューラ724を初期化する。
【0100】
図7の例において、第1スケジューラ722は第1ワークロードノード702(WN[0])への入力バッファ及びそこからの出力バッファの両方に対するクレジットの閾値数を受信しているので、第1スケジューラ722は第1CBB714で実行する第1ワークロードノード702(WN[0])をディスパッチする。更に、第4スケジューラ728は、第4ワークロードノード708(WN[3])への入力バッファ及びそこからの出力バッファの両方に対するクレジットの閾値数を受信しているので、第4スケジューラ728は第4CBB720で実行する第4ワークロードノード708(WN[3])をディスパッチする。第1ワークロードノード702(WN[0])が第1CBB714で実行されるにつれ、第1CBB714はデータを第1バッファ730に送信する。同様に、第4ワークロードノード708(WN[3])が第4CBB720で実行されるにつれ、第4CBB720はデータを第3バッファ734に送信する。
【0101】
図7に図示された例において、第1CBB714及び第4CBB720の各々がそれぞれ第1ワークロードノード702(WN[0])及び第4ワークロードノード708(WN[3])に関連付けられたデータのタイルを送信するにつれ、第1スケジューラ722及び第4スケジューラ728は、それぞれ、第1CBB714及び第4CBB720から第1バッファ730及び第3バッファ734へ送信されたデータのタイルごとにクレジットマネージャー712へクレジットを送信する。クレジットマネージャー712は、第1スケジューラ722から受信したクレジットを第2スケジューラ724へ、第4スケジューラ728から受信したクレジットを第2スケジューラ724へ送信する。第4CBB720が第4ワークロードノード708(WN[3])を実行するにつれ、第4CBB720は第3バッファ734に格納するデータの2つのタイルを生成する。同様に、第1CBB714が第1ワークロードノード702(WN[0])を実行するにつれ、第1CBB714は第1バッファ730に格納するデータの5つのタイルを生成する。
【0102】
図7の例において、第1CBB714が第1ワークロードノード702(WN[0])を実行するよりも迅速に、第4CBB720は第4ワークロードノード708(WN[3])を実行する。第2バッファ732には利用可能なメモリはあるが、第2ワークロードノード704(WN[1])が依存しているデータが準備される前に第5ワークロードノード710(WN[4])が依存しているデータが準備されるので、第2スケジューラ724は、第2ワークロードノード704(WN[1])とは対照的に、第5ワークロードノード710(WN[4])を第2CBB716で実行するものとして選択する。
【0103】
図7に図示の例において、第5ワークロードノード710(WN[4])が第2CBB716で実行され、第2CBB716が第3バッファ734に格納されたデータのタイルを消費するにつれ、第2スケジューラ724は、第3バッファ734に関連付けられたクレジットを、第3バッファ734からの第2CBB716で消費されたデータのタイルごとに、クレジットマネージャー712へ返送する。次に、第1バッファ730及び第2バッファ732に対するクレジットの閾値量が満たされると、第2スケジューラ724は第2CBB716で実行する第2ワークロードノード704(WN[1])をディスパッチする。第2CBB716が第2ワークロードノード704(WN[1])に関連付けられたデータのタイルを生成し、第2バッファ732にデータを出力するにつれ、第2スケジューラ724は、第2CBB716から第2バッファ732へ送信されたデータのタイルごとに、第2バッファ732に関連付けられたクレジットをクレジットマネージャー712に送信する。
【0104】
図7の例において、第2スケジューラ724から第2バッファ732に関連付けられたクレジットを受信すると、クレジットマネージャー712は、第2バッファ732に関連付けられたクレジットを第3スケジューラ726に送信する。第3スケジューラ726が第2バッファ732に関連付けられたクレジットの閾値量を受信した場合に、第3スケジューラ726は、第3CBB718で実行する第3ワークロードノード706(WN[2])をディスパッチする。第3CBB718が第3ワークロードノード706(WN[2])を実行し、第3CBB718が第2バッファ732に格納されたデータのタイルを消費するにつれ、第3スケジューラ726は、第2バッファ732に関連付けられたクレジットを、第2バッファ732からの第3CBB718で消費されたデータのタイルごとに、クレジットマネージャー712へ返送する。
【0105】
追加的又は代替的な例において、第1CBB714は図4の畳み込みエンジン412に対応し得、第1スケジューラ722は図4の第1スケジューラ424に対応し得る。いくつかの例において、第2CBB716は図4のRNNエンジン416に対応し得、第2スケジューラ724は図4の第3スケジューラ428に対応し得る。さらなる例において、第3CBB718は図4のDMAユニット414に対応し得、第3スケジューラ726は図4の第2スケジューラ426に対応し得る。いくつかの例において、第4CBB720は図4のDSP418に対応し得、第4スケジューラ728は図4の第4スケジューラ430に対応し得る。
【0106】
図3の第1スケジューラ326、第2スケジューラ328、第3スケジューラ330、第4スケジューラ332及び/又は第5スケジューラ334、及び/又は、図4の第1スケジューラ424、第2スケジューラ426、第3スケジューラ428及び/又は第4スケジューラ430、及び/又は、図7の第1スケジューラ722、第2スケジューラ724、第3スケジューラ726及び/又は第4スケジューラ728の実装の例示的な態様は図5及び/又は図6に図示されているが、図5及び/又は図6に図示された要素、処理及び/又はデバイスの1又は複数は、組み合わせたり、分割されたり、再構成されたり、省略されたり、除去されたり、及び/又は、その他の方式によって実装されてよい。さらに、図5の例示的なワークロードインターフェース502、例示的なバッファクレジット格納装置504、例示的なクレジット比較器506、例示的なワークロードノードディスパッチャ508、例示的な通信バス510及び/又は、より一般的に、例示的なスケジューラ500及び/又は図6の例示的なスケジューラ600は、ハードウェア、ソフトウェア、ファームウェア、及び/又は、ハードウェア、ソフトウェア及び/又はファームウェアの任意の組み合わせによって実装されてよい。従って、例えば、図5の例示的なワークロードインターフェース502、例示的なバッファクレジット格納装置504、例示的なクレジット比較器506、例示的なワークロードノードディスパッチャ508、例示的な通信バス510及び/又は、より一般的に、例示的なスケジューラ500及び/又は図6の例示的なスケジューラ600のいずれも、アナログ又はデジタル回路、ロジック回路、プログラマブルプロセッサ、プログラマブルコントローラ、グラフィック処理ユニット(GPU)、デジタルシグナルプロセッサ(DSP)、特定用途向け集積回路(ASIC)、プログラマブル論理デバイス(PLD)及び/又はフィールドプログラマブル論理デバイス(FPLD)の1又は複数によって実装され得る。本特許の任意の装置又はシステムの請求項を純粋なソフトウェア及び/又はファームウェア実装を包含するように読む場合に、図5の例示的なワークロードインターフェース502、例示的なバッファクレジット格納装置504、例示的なクレジット比較器506、例示的なワークロードノードディスパッチャ508、例示的な通信バス510、及び/又は、より一般的に、例示的なスケジューラ500及び/又は図6の例示的なスケジューラ600のうちの少なくとも1つは、ソフトウェア及び/又はファームウェアを含む、メモリ、デジタルバーサタイルディスク(DVD)、コンパクトディスク(CD)、ブルーレイディスク等のような、非一時的コンピュータ可読記憶装置デバイス、又は、ストレージディスクを含むように本明細書では明示的に定義される。更にまた、図5の例示的なスケジューラ500及び/又は図6の例示的なスケジューラ600は、図5及び/又は図6に図示されている、要素、処理及び/又はデバイスに追加し、又は、代わりに、1又は複数のそれらを含んでよく、及び/又は、図示された要素、処理及びデバイスのいずれか一つより多く又は全てを含んでよい。本明細書で用いられるように、「通信」及びそれらの変形を含む語句は、直接的な通信及び/又は1又は複数の中間媒介コンポーネントを介した間接的な通信を包含し、直接物理的な(例えば有線)通信及び/又は一定の通信を必要としておらず、むしろ、周期的な間隔、スケジュールされた間隔、非周期的な間隔及び/又は一回的なイベントでの選択的な通信を更に含む。
【0107】
図5のスケジューラ500及び/又は図6のスケジューラ600を実装するための、例示的なハードウェアロジック、機械可読命令、ハードウェア実装ステートマシン及び/又はそれらの任意の組み合わせを表すフローチャートが図8に示される。機械可読命令は、図9に関して以下で説明される例示的なプロセッサプラットフォーム900に示されるプロセッサ910及び/又はアクセラレータ912のようなコンピュータプロセッサによる実行のための実行可能プログラム又は実行可能プログラムの一部の1又は複数であってよい。プログラムは、プロセッサ910及び/又はアクセラレータ912に関連付けられた、CD-ROM、フロッピーディスク、ハードドライブ、DVD、ブルーレイディスクのような非一時的コンピュータ可読記憶媒体又はメモリに格納されたソフトウェア内に具現されてよいが、プログラム全体及び/又はそれらの一部は代替的にプロセッサ910及び/又はアクセラレータ912以外のデバイスで実行され得、及び/又は、ファームウェア又は専用のハードウェアに具現され得る。さらに、例示的なプログラムが図8に図示されたフローチャートに言及して記載されるが、図5の例示的なスケジューラ500及び/又は図6スケジューラ600を実装する多くの他の方法が代替的に用いられてよい。例えば、ブロックの実行の順序が変更されてよく、及び/又は、記載されたいくつかのブロックは変更、除去又は組み合わせされてよい。更に又は代替的に、ブロックのいずれか又は全部は、ソフトウェア又はファームウェアを実行することなく対応する演算を実行するよう構築された1又は複数のハードウェア回路(例えば別個及び/又は統合されたアナログ及び/又はデジタル回路、FPGA、ASIC、比較器、オペレーショナルアンプ(オペアンプ)、ロジック回路等)によって実装されてよい。
【0108】
本明細書に記載された機械可読命令は、圧縮されたフォーマット、暗号化されたフォーマット、細分化されたフォーマット、コンパイルされたフォーマット、実行可能なフォーマット、パッケージされたフォーマット等の1又は複数で格納されてよい。本明細書で記載される機械可読命令は、機械実行可能命令を創造、製造及び/又は生成するのに利用されてよいデータ(例えば命令の一部、コード、コードの表現等)として格納されてよい。例えば、機械可読命令は細分化されて、ストレージデバイス及び/又はコンピューティングデバイス(例えばサーバ)の1又は複数に格納されてよい。機械可読命令は、コンピューティングデバイス及び/又は、他の機械でそれらを直接的に可読、変換可能及び/又は実行可能にするために、インストール、変更、適合、更新、組み合わせ、補完、構成、復号化、解凍、アンパッキング、分配、再割り当て、コンパイル等の1又は複数が必要であってよい。例えば、機械可読命令は、複数部分に格納されてよく、それらは、個別に圧縮され、暗号化されかつ別個のコンピューティングデバイスに格納され、それらの部分は、復号化され、解凍され及び組み合わせされた場合に本明細書で記載されるようなプログラムに実装される実行可能命令のセットを形成する。
【0109】
別の例において、機械可読命令は、コンピュータによってそれらが読み出しえるが、特定のコンピューティングデバイス又は他のデバイスで命令を実行するために、ライブラリ(例えばダイナミックリンクライブラリ(DLL))、ソフトウェア開発キット(SDK)、アプリケーションプログラミングインターフェース(API)等の追加を必要してよい状態で格納されてよい。別の例において、機械可読命令は、機械可読命令及び/又は対応するプログラムが全部又は一部実行され得る前に構成されること(例えば、格納された設定、データ入力、記録されたネットワークアドレス等)が必要でもよい。従って、開示された機械可読命令及び/又は対応するプログラムは、格納され又はそうでなければ残り若しくは送信中の場合の、機械可読命令及び/又はプログラムの特定のフォーマット又は状態に関わらず、そのような機械可読命令及び/又はプログラムを包含するよう意図される。
【0110】
本明細書で記載される機械可読命令は、過去、存在又は未来命令言語、スクリプト言語、プログラミング言語等のいずれかで表され得る。例えば、機械可読命令は以下の言語の任意のものを使用して表され得る、すなわち、C、C++、Java(登録商標)、C#、PERL、PYTHON、JavaScript(登録商標)、ハイパーテキストマークアップ言語(HTML)、構造化照会言語(SQL)、Swift等。
【0111】
上で言及したように、図8の例示的な処理は、ハードディスクドライブ、フラッシュメモリ、読み出し専用メモリ、コンパクトディスク、デジタルバーサタイルディスク、キャッシュ、ランダムアクセスメモリ、及び/又は、任意の期間(例えば拡張された時間の間、恒久的に、短い期間の間、一時的なバッファリングの間及び/又は情報のキャッシングの間)情報が格納されるその他のストレージデバイス及び/又はストレージディスクのような、非一時的コンピュータ及び/又は機械可読媒体に格納された実行可能命令(例えばコンピュータ及び/又は機械可読命令)を使用することを実装されてよい。本明細書で用いられるように、非一時的コンピュータ可読媒体という用語は、コンピュータ可読記憶装置デバイス及び/又はストレージディスクの任意のタイプを含むように、かつ、伝播する信号を除外しかつ送信媒体を除外するよう明示的に定義される。
【0112】
「含み」及び「備え」(及びそれらの全ての型及び時制)は本明細書において非限定的な用語に用いられている。従って、請求項がプリアンブルとして又は請求項内の任意の種類の記述において「含む」又は「備える」の任意の型(例えば、備える、含む、備え、含み、有し等)が用いるときにはいつでも、対応する請求項又は記述の範囲の外部に入ることなく、追加的な要素、用語等が存在してよいと理解されるべきである。本明細書で用いられている、「少なくとも」という語句は、例えば、請求項のプリアンブルの遷移用語として用いられる場合、それは「備え」及び「含み」が非限定的な用語であるのと同じ態様において非限定的である。「及び/又は」という用語は例えば、A、B及び/又はCのような型で用いられる場合、(1)A単独、(2)B単独、(3)C単独、(4)AとB,(5)AとC、(6)BとC及び(7)AとBとCのような、A,B,Cの任意の組み合わせ又はサブセットを指す。本明細書において、構造、コンポーネント、項目、オブジェクト及び/又は物を説明する文脈の中で用いられると、「A及びBのうちの少なくとも1つ」という語句は、(1)少なくとも1つのA、(2)少なくとも1つのB及び(3)少なくとも1つA及び少なくとも1つのBのいずれかを含む実装を指すことを意図している。同様に、本明細書において、構造、コンポーネント、項目、オブジェクト及び/又は物を説明する文脈の中で用いられると、「A又はBのうちの少なくとも1つ」という語句は、(1)少なくとも1つのA、(2)少なくとも1つのB及び(3)少なくとも1つA及び少なくとも1つのBのいずれかを含む実装を指すことを意図している。本明細書において、処理、命令、動作、活動及び/又は段階の遂行又は実行を説明する文脈の中で用いられると、「A及びBのうちの少なくとも1つ」という語句は、(1)少なくとも1つのA、(2)少なくとも1つのB及び(3)少なくとも1つA及び少なくとも1つのBのいずれかを含む実装を指すことを意図している。同様に、本明細書において、処理、命令、動作、活動及び/又は段階の遂行又は実行を説明する文脈の中で用いられると、「A又はBのうちの少なくとも1つ」という語句は、(1)少なくとも1つのA、(2)少なくとも1つのB及び(3)少なくとも1つA及び少なくとも1つのBのいずれかを含む実装を指すことを意図している。
【0113】
本明細書で用いられると、単数の参照(例えば「a」、「an」、「第1」、「第2」等)は複数を除外していない。「a」又は「an」エンティティという用語は、本明細書で用いられると、そのエンティティの1又は複数を指す。「a」(又は「an」)、「1又は複数」、「少なくとも1つの」という用語は本明細書では同じ意味で用いられ得る。さらに、個別に列挙されているが、複数の手段、要素又は方法動作は、例えば単一のユニット又はプロセッサによって実装されてよい。更に、別個の特徴が異なる例又はクレイムに含まれていてよいが、これらはおそらく組み合わせられてよく、異なる例又はクレイムに含まれていることは特徴の組み合わせが実現可能でない及び/又は有利でないことを暗示するものではない。
【0114】
図8は、図5のスケジューラ500及び/又は図6のスケジューラ600を実装するために実行されてよい機械可読命令によって実装され得る処理800を表すフローチャートである。処理800はブロック802で開始し、そこにおいて、ワークロードインターフェース502は、スケジューラ500及び/又はスケジューラ600が関連付けられるところのCBBに割り当てられたワークロードノードへの入力バッファ及び/又はそこからの出力バッファに対応するクレジットを、バッファクレジット記録装置504内へ読み込む。
【0115】
図8に図示される例において、処理800はブロック804で継続し、そこにおいて、クレジット比較器506はスケジューラ500及び/又はスケジューラ600が関連付けられるところのCBBに割り当てられたワークロードノードを選択する。ブロック806において、クレジット比較器506は、選択されたワークロードノードに対する入力バッファに格納されたデータを演算するためにスケジューラ500及び/又はスケジューラ600がクレジットの閾値量を受信しているか否かを判断する。例えば、クレジット比較器506は、外部デバイス(例えばクレジットマネージャー408、コントローラ322等)から受信したクレジット数に関連付けられた配列又は他のデータ構造内のフィールドを、選択されたワークロードノードへの入力バッファに対するクレジットの閾値数に関連付けられた配列又は他のデータ構造内のフィールドと比較する。もしスケジューラ500及び/又はスケジューラ600が選択されたワークロードノードに対する入力バッファに格納されているデータを演算するためにクレジットの閾値量を受信していない、とクレジット比較器506が判断したら(ブロック806:NO)、処理800はブロック812に進む。
【0116】
図8の例において、もしスケジューラ500及び/又はスケジューラ600が入力バッファに格納されているデータを演算するためにクレジットの閾値量を受信している、とクレジット比較器506が判断したら(ブロック806:YES)、処理800はブロック808に進む。ブロック808において、クレジット比較器506は、選択されたワークロードノードに対する出力バッファにデータを書き込むためにスケジューラ500及び/又はスケジューラ600がクレジットの閾値量を受信しているか否かを判断する。例えば、クレジット比較器506は、選択されたワークロードノードに対する出力バッファに対する外部デバイス(例えばクレジットマネージャー408、コントローラ322等)から受信したクレジット数に関連付けられた配列又は他のデータ構造内のフィールドを、出力バッファに対するクレジットの閾値数に関連付けられた配列又は他のデータ構造内のフィールドと比較する。もしスケジューラ500及び/又はスケジューラ600がクレジットの閾値量を受信していない、とクレジット比較器506が判断したら(ブロック808:NO)、処理800はブロック812に進む。もし出力バッファにデータを書き込むためにスケジューラ500及び/又はスケジューラ600がクレジットの閾値量を受信している、とクレジット比較器506が判断したら(ブロック808:YES)、クレジット比較器506は、選択されたワークロードノードの実行の準備ができたことをブロック810において示す。
【0117】
図8に図示した例において、ブロック812で、クレジット比較器506は処理すべき追加的なワークロードノードがあるか否かを判断する。もしクレジット比較器506が処理すべき追加的なワークロードノードがあると判断したなら(ブロック812:YES)、クレジット比較器506は追加的なワークロードノードを選択して、処理800はブロック806に進む。もしクレジット比較器506が処理すべき追加的なワークロードノードがないと判断したなら(ブロック812:NO)、処理800はブロック814に進む。
【0118】
図8に図示の例において、ブロック814で、ワークロードノードディスパッチャ508は、実行の準備ができたワークロードノードをスケジューリングする。ブロック816において、ワークロードノードディスパッチャ508はスケジュールに従ってワークロードノードをディスパッチする。ブロック818において、ディスパッチされたワークロードノードがスケジューラ500及び/又はスケジューラ600が関連付けられるところのCBBによって実行されるにつれ、ワークロードインターフェース502は、入力バッファに関連付けられたクレジットを、そこからワークロードインターフェース502がクレジットを受信したところの外部デバイス(例えばクレジットマネージャー408、コントローラ322等)へ送信する。
【0119】
図8に図示した例において、ブロック820で、ワークロードノードディスパッチャ508は実行すべきスケジュール内に追加的なワークロードノードがあるかどうかを判断する。もしワークロードノードディスパッチャ508がスケジュール内に追加的なワークロードノードがあると判断したなら(ブロック820:YES)、処理800はブロック816に進む。もしワークロードノードディスパッチャ508がスケジュールに実行すべき追加的なワークロードノードがないと判断したなら(ブロック820:NO)、処理800はブロック822に進む。
【0120】
図8の例において、ブロック822で、ワークロードインターフェース502は演算を継続するか否かを判断する。例えば、ワークロードインターフェース502で演算を継続するとの判断が生じるであろう条件は、追加的なワークロードノードを受信することを含む。もしワークロードインターフェース502が演算を継続することを決定したら(ブロック822:YES)、処理800はブロック802に進む。もしワークロードインターフェース502が演算を継続しないことを決定したら(ブロック822:NO)、処理800は終了する。
【0121】
図9は、図5のスケジューラ500及び/又は図6のスケジューラ600の1又は複数のインスタンス化を実装するために図8の命令を実行するよう構築された例示的なプロセッサプラットフォーム900のブロック図である。プロセッサプラットフォーム900は、例えば、サーバ、パーソナルコンピュータ、ワークステーション、自己学習機械(例えばニューラルネットワーク)、モバイルデバイス(例えばセルフォン、スマートフォン、iPad(登録商標)のようなタブレット)、パーソナルデジタルアシスタント(PDA)、インターネット機器、DVDプレイヤ、CDプレイヤ、デジタルビデオレコーダ、ブルーレイプレイヤ、ゲームコンソール、パーソナルビデオレコーダ、セットトップボックス、ヘッドセット若しくは他のウェアラブルデバイス、又は、任意のその他のタイプのコンピューティングデバイスであり得る。
【0122】
図示の例のプロセッサプラットフォーム900は、プロセッサ910及びアクセラレータ912を含む。図示の例のプロセッサ910はハードウェアである。例えば、プロセッサ910は、任意の所望なファミリー若しくは製造者からの集積回路、ロジック回路、マイクロプロセッサ、GPU、DSP又はコントローラの1又は複数によって実装され得る。ハードウェアプロセッサは、半導体ベース(例えばシリコンベース)デバイスであってよい。更に、アクセラレータ912は、例えば、集積回路、ロジック回路、マイクロプロセッサ、GPU、DSP、FPGA、VPU、コントローラ、及び/又は、任意の所望なファミリー若しくは製造者からの他のCBBの1又は複数により実装され得る。図示の例のアクセラレータ912はハードウェアである。ハードウェアアクセラレータは、半導体ベース(例えばシリコンベース)デバイスであってよい。この例において、アクセラレータ912は、例示的な畳み込みエンジン312、例示的なRNNエンジン314、例示的なメモリ316、例示的なMMU318、例示的なDSP320、例示的なコントローラ322及び例示的なDMAユニット324を実装する。さらに、例示的な畳み込みエンジン312、例示的なRNNエンジン314、例示的なDMAユニット324、例示的なDSP320及び例示的なコントローラ322の各々は、例示的な第1スケジューラ326、例示的な第2スケジューラ328、例示的な第3スケジューラ330、例示的な第4スケジューラ332及び例示的な第5スケジューラ334をそれぞれ含む。図9の例において、例示的な第1スケジューラ326、例示的な第2スケジューラ328、例示的な第3スケジューラ330、例示的な第4スケジューラ332及び例示的な第5スケジューラ334の各々は、例示的なワークロードインターフェース502、例示的なバッファクレジット格納装置504、例示的なクレジット比較器506、例示的なワークロードノードディスパッチャ508、及び/又は、より一般的に、スケジューラ500を含む。
【0123】
追加的又は代替的な例において、プロセッサ910は、例示的な畳み込みエンジン312、例示的なRNNエンジン314、例示的なメモリ316、例示的なMMU318、例示的なDSP320、例示的なコントローラ322及び例示的なDMAユニット324を実装する。さらにこのような追加的又は代替的な例において、例示的な畳み込みエンジン312、例示的なRNNエンジン314、例示的なDMAユニット324、例示的なDSP320及び例示的なコントローラ322の各々は、例示的な第1スケジューラ326、例示的な第2スケジューラ328、例示的な第3スケジューラ330、例示的な第4スケジューラ332及び例示的な第5スケジューラ334をそれぞれ含む。このような追加的又は代替的な例において、例示的な第1スケジューラ326、例示的な第2スケジューラ328、例示的な第3スケジューラ330、例示的な第4スケジューラ332及び例示的な第5スケジューラ334の各々は、例示的なワークロードインターフェース502、例示的なバッファクレジット格納装置504、例示的なクレジット比較器506、例示的なワークロードノードディスパッチャ508、及び/又は、より一般的に、スケジューラ500を含む。
【0124】
図示の例のプロセッサ910はローカルメモリ911(例えばキャッシュ)を含む。図示の例のプロセッサ910は、バス918で揮発性メモリ914及び不揮発性メモリ916を含むメインメモリと通信する。さらには図示の例のアクセラレータ912は、ローカルメモリ913(例えばキャッシュ)を含む。図示の例のアクセラレータ912は、バス918で揮発性メモリ914及び不揮発性メモリ916を含むメインメモリと通信する。揮発性メモリ914は、同期ダイナミックランダムアクセスメモリ(SDRAM)、ダイナミックランダムアクセスメモリ(DRAM)、RAMBUS(登録商標)ダイナミックランダムアクセスメモリ(RDRAM(登録商標))及び/又は任意のその他のタイプのアクセスメモリデバイスによって実装されてよい。不揮発性メモリ916は、フラッシュメモリ及び/又はその他の所望の任意のタイプのメモリデバイスによって実装されてよい。メインメモリ914、916へのアクセスはメモリコントローラによって制御される。
【0125】
図示の例のプロセッサプラットフォーム900はまたインターフェース回路920をも含む。インターフェース回路920は、Ethernet(登録商標)インターフェース、ユニバーサルシリアルバス(USB)、Bluetooth(登録商標)インターフェース,近距離無線通信(NFC)インターフェース、及び/又は、PCIエクスプレスインターフェースのような任意のタイプのインターフェース規格によって実装されてよい。
【0126】
図示の例において、1又は複数入力デバイス922はインターフェース回路920に接続される。入力デバイス922は、ユーザにデータ及び/又はコマンドをプロセッサ910及び/又はアクセラレータ912内へ入力させるのを可能にする。入力デバイスは、例えば、オーディオセンサ、マイク、カメラ(静止画又は動画)、キーボード、ボタン、マウス、タッチスクリーン、トラックパッド、トラックボール、isopoint及び/又は音声認識システムによって実装され得る。
【0127】
1又は複数出力デバイス924もまた、図示の例のインターフェース回路920に接続される。出力デバイス924は、例えば、ディスプレイデバイス(例えば発光ダイオード(LED)、有機発光ダイオード(OLED)、液晶ディスプレイ(LCD)、カソードレイ管ディスプレイ(CRT), 面内スイッチング(IPS)ディスプレイ、タッチスクリーン等)、触覚出力デバイス、プリンタ及び/又はスピーカによって実装され得る。図示の例のインターフェース回路920は従って、典型的には、グラフィックドライバカード、グラフィックドライバチップ及び/又はグラフィックドライバプロセッサを含む。
【0128】
図示の例のインターフェース回路920はまた、送信機、受信機、トランシーバ、モデム、住宅ゲートウェイ、無線アクセスポイント、及び/又は、ネットワーク926を介した外部の機械(例えば任意の種類のコンピューティングデバイス)とのデータの交換を促進するネットワークインターフェースのような通信デバイスを含む。通信は、例えば、Ethernet(登録商標)接続、デジタル加入者ライン(DSL)接続、電話線接続、同軸ケーブルシステム、衛星システム、ラインオブサイト無線システム、セルラ電話システム等を介し得る。
【0129】
図示の例のプロセッサプラットフォーム900はまた、ソフトウェア及び/又はデータを格納するための1又は複数の大容量ストレージデバイス928を含む。このような大容量ストレージデバイス928の例は、フロッピーディスクドライブ、ハードドライブディスク、コンパクトディスクドライブ、ブルーレイディスクドライブ、独立ディスクの冗長アレイ(RAID)システム、デジタルバーサタイルディスク(DVD)ドライブを含む。
【0130】
図8の機械実行可能命令932は、大容量ストレージデバイス928内、揮発性メモリ914内、不揮発性メモリ916内、及び/又は、CD又はDVDのようなリムーバブル非一時的コンピュータ可読記憶媒体上に格納されてよい。
【0131】
上記から、ワークロードのスタティックマッピングの順不同にパイプライン化された実行が可能に、例示的な方法、装置及び製造物が開示されていることが理解されるであろう。さらに、ワークロードノードが依存するところのデータが利用可能であり、かつ、ワークロードノードの実行によって生成された出力を格納するのに利用可能な十分なメモリがある場合に、計算ビルディングブロックがワークロードノードを実行することが可能であるように、例示的な方法、装置及び製造物が開示されている。更に、本明細書で開示された例は、スケジュール及び/又は他の順序から独立してワークロードノードが割り当てられるところの計算ビルディングブロックによってワークロードノードが実行されることを可能にする。開示された方法、装置及び製造物は、処理デバイスの利用を増加することによってコンピューティングデバイスの使用の効率性を向上する。さらに、本明細書で開示された例示的な方法、装置及び製造物は、ワークロードを処理及び/又はそうでなければ実行するために処理デバイスによって用いられる計算サイクルの数を減少させる。従って、開示された方法、装置及び製造物は、コンピュータの機能を1又は複数改善するよう方向付けられている。
【0132】
ワークロードのスタティックマッピングの順不同にパイプライン化された実行を可能にする例示的な方法、装置、システム及び製造物が本明細書に開示されている。さらなる例及びそれらの組み合わせは以下のものを含む:例1は、クレジットの第1の数をメモリ内へ読み込むインターフェースと、クレジットの第1の数をバッファ内のメモリ利用可能性に関連付けられたクレジットの閾値数と比較する比較器と、クレジットの第1の数がクレジットの閾値数を満たす場合に、1又は複数の計算ビルディングブロックの最初の一つで実行されるワークロードのワークロードノードを選択するディスパッチャとを備える装置を含む。
【0133】
例2は、例1の装置を含み、インターフェースは、インターフェースがクレジットマネージャーからクレジットの第1の数を受信した場合にクレジットの第1の数をメモリ内へ読み込み、ワークロードノードに関連付けられたデータの1又は複数のタイルが1又は複数の計算ビルディングブロックの最初の一つからバッファへ送信されるにつれ、バッファに送信された各タイルに対してクレジットをクレジットマネージャーに送信するものである。
【0134】
例3は例1の装置を含み、バッファはワークロードノードに関連付けられた出力バッファであり、クレジットの第1の数は出力バッファに対応しており、クレジットの閾値数は出力バッファ内のメモリの閾値量に対応する。
【0135】
例4は例1の装置を含み、バッファはワークロードノードに関連付けられた入力バッファであり、クレジットの第1の数は入力バッファに対応しており、クレジットの閾値数は入力バッファ内のデータの閾値量に対応する。
【0136】
例5は例1の装置を含み、バッファは第1バッファであり、クレジットの閾値数はクレジットの第1閾値数であり、比較器はクレジットの第2の数を第2バッファ内のメモリ利用可能性に関連付けられたクレジットの第2閾値数と比較するものであり、ディスパッチャは、(1)クレジットの第1の数がクレジットの第1閾値数を満たしし、(2)クレジットの第2の数がクレジットの第2閾値数を満たす場合に、1又は複数の計算ビルディングブロックの最初の一つで実行されるワークロードノードを選択するものである。
【0137】
例6は例5の装置を含み、第2バッファはワークロードノードに関連付けられた入力バッファであり、クレジットの第2の数は入力バッファに対応しており、クレジットの第2閾値数は入力バッファ内のデータの閾値量に対応する。
【0138】
例7は例1の装置を含み、クレジットの閾値数はクレジットの第1閾値数であり、ワークロードノードは第1ワークロードノードであり、(1)クレジットの第1の数がクレジットの第1閾値数と満たし、(2)クレジットの第2の数がクレジットの第2閾値数を満たす場合に、ディスパッチャは、1又は複数の計算ビルディングブロックの最初の一つで実行される第1ワークロードノード及び第2ワークロードノードをスケジューリングするものである。
【0139】
例8は命令を備える非一時的コンピュータ可読記憶媒体を含み、命令は実行された場合に、少なくとも1つのプロセッサに、クレジットの第1の数をメモリ内へ読み込むこと、クレジットの第1の数をバッファ内のメモリ利用可能性に関連付けられたクレジットの閾値数と比較すること、及び、クレジットの第1の数がクレジットの閾値数を満たす場合に、計算ビルディングブロックで実行されるワークロードのワークロードノードを選択することを少なくとも生じせしめる。
【0140】
例9は例8の非一時的コンピュータ可読記憶媒体を含み、命令は実行された場合に、少なくとも1つのプロセッサに、クレジットの第1の数がクレジットマネージャーから受信された場合にクレジットの第1の数をメモリ内へ読み込むこと、及び、ワークロードノードに関連付けられたデータの1又は複数のタイルが計算ビルディングブロックからバッファへ送信されるにつれ、バッファに送信された各タイルに対してクレジットをクレジットマネージャーに送信することを生じせしめる。
【0141】
例10は例8の非一時的コンピュータ可読記憶媒体を含み、バッファはワークロードノードに関連付けられた出力バッファであり、クレジットの第1の数は出力バッファに対応しており、クレジットの閾値数は出力バッファ内のメモリの閾値量に対応する。
【0142】
例11は例8の非一時的コンピュータ可読記憶媒体を含み、バッファはワークロードノードに関連付けられた入力バッファであり、クレジットの第1の数は入力バッファに対応しており、クレジットの閾値数は入力バッファ内のデータの閾値量に対応する。
【0143】
例12は例8の非一時的コンピュータ可読記憶媒体を含み、バッファは第1バッファであり、クレジットの閾値数はクレジットの第1閾値数であり、かつ、命令は実行された場合に、少なくとも1つのプロセッサに、クレジットの第2の数を第2バッファ内のメモリ利用可能性に関連付けられたクレジットの第2閾値数と比較すること、(1)クレジットの第1の数がクレジットの第1閾値数を満たし、(2)クレジットの第2の数がクレジットの第2閾値数を満たす場合に、計算ビルディングブロックで実行されるワークロードノードを選択することを生じせしめる。
【0144】
例13は例12の非一時的コンピュータ可読記憶媒体を含み、第2バッファはワークロードノードに関連付けられた入力バッファであり、クレジットの第2の数は第2バッファに対応しており、クレジットの第2閾値数は入力バッファ内のデータの閾値量に対応する。
【0145】
例14は例8の非一時的コンピュータ可読記憶媒体を含み、クレジットの閾値数はクレジットの第1閾値数であり、ワークロードノードは第1ワークロードノードであり、命令は実行された場合に、少なくとも1つのプロセッサに、(1)クレジットの第1の数がクレジットの第1閾値数を満たし、(2)クレジットの第2の数がクレジットの第2閾値数を満たす場合に、計算ビルディングブロックで実行される第1ワークロードノード及び第2ワークロードノードをスケジューリングすることを生じせしめる。
【0146】
例15は、インターフェースする手段であって、クレジットの第1の数をメモリ内へ読み込むためのインターフェースする手段と、比較する手段であって、クレジットの第1の数をバッファ内のメモリ利用可能性に関連付けられたクレジットの閾値数と比較するための比較する手段と、ディスパッチする手段であって、クレジットの第1の数がクレジットの閾値数を満たす場合に、1又は複数の計算ビルディングブロックの最初の一つで実行されるワークロードのワークロードノードを選択するためのディスパッチする手段とを備える装置を含む。
【0147】
例16は例15の装置を含み、インターフェースする手段は、インターフェースする手段がクレジットマネージャーからクレジットの第1の数を受信した場合にクレジットの第1の数をメモリ内へ読み込み、ワークロードノードに関連付けられたデータの1又は複数のタイルが1又は複数の計算ビルディングブロックの最初の一つからバッファへ送信されるにつれ、バッファに送信された各タイルに対してクレジットをクレジットマネージャーに送信するものである。
【0148】
例17は例15の装置を含み、バッファはワークロードノードに関連付けられた出力バッファであり、クレジットの第1の数は出力バッファに対応しており、クレジットの閾値数は出力バッファ内のメモリの閾値量に対応する。
【0149】
例18は例15の装置を含み、バッファはワークロードノードに関連付けられた入力バッファであり、クレジットの第1の数は入力バッファに対応しており、クレジットの閾値数は入力バッファ内のデータの閾値量に対応する。
【0150】
例19は例15の装置を含み、バッファは第1バッファであり、クレジットの閾値数はクレジットの第1閾値数であり、比較する手段はクレジットの第2の数を第2バッファ内のメモリ利用可能性に関連付けられたクレジットの第2閾値数と比較するものであり、ディスパッチする手段は、(1)クレジットの第1の数がクレジットの第1閾値数を満たし、(2)クレジットの第2の数がクレジットの第2閾値数を満たす場合に、1又は複数の計算ビルディングブロックの最初の一つで実行されるワークロードノードを選択するものである。
【0151】
例20は例19の装置を含み、第2バッファはワークロードノードに関連付けられた入力バッファであり、クレジットの第2の数は入力バッファに対応しており、クレジットの第2閾値数は入力バッファ内のデータの閾値量に対応する。
【0152】
例21は例15の装置を含み、クレジットの閾値数はクレジットの第1閾値数であり、ワークロードノードは第1ワークロードノードであり、(1)クレジットの第1の数がクレジットの第1閾値数を満たし、(2)クレジットの第2の数がクレジットの第2閾値数を満たす場合に、ディスパッチする手段は、1又は複数の計算ビルディングブロックの最初の一つで実行される第1ワークロードノード及び第2ワークロードノードをスケジューリングするものである。
【0153】
例22は、クレジットの第1の数をメモリ内へ読み込むことと、クレジットの第1の数をバッファ内のメモリ利用可能性に関連付けられたクレジットの閾値数と比較することと、クレジットの第1の数がクレジットの閾値数を満たす場合に、1又は複数の計算ビルディングブロックの最初の一つで実行されるワークロードのワークロードノードを選択することとを備える方法を含む。
【0154】
例23は、例22の方法を含み、クレジットマネージャーからクレジットの第1の数を受信した場合にクレジットの第1の数をメモリ内へ読み込むことと、ワークロードノードに関連付けられたデータの1又は複数のタイルが1又は複数の計算ビルディングブロックの最初の一つからバッファへ送信されるにつれ、バッファに送信された各タイルに対してクレジットをクレジットマネージャーに送信することとをさらに含む。
【0155】
例24は例22の方法を含み、バッファはワークロードノードに関連付けられた出力バッファであり、クレジットの第1の数は出力バッファに対応しており、クレジットの閾値数は出力バッファ内のメモリの閾値量に対応する。
【0156】
例25は例22の方法を含み、バッファはワークロードノードに関連付けられた入力バッファであり、クレジットの第1の数は入力バッファに対応しており、クレジットの閾値数は入力バッファ内のデータの閾値量に対応する。
【0157】
特定の例示的な方法、装置及び製造物が本明細書で開示されているが、この特許のカバレッジの範囲はそれに限定されない。反対に、この特許は、この特許の請求項の範囲内に適正に含まれる全ての方法、装置及び製造物を包含する。
【0158】
以下の請求項は本明細書においてこの参照により本詳細な説明に組み込まれ、各請求項は本開示の別個の実施形態を独自に代表する。
他の可能な項目
[項目1]
クレジットの第1の数をメモリ内へ読み込むインターフェースと、
クレジットの上記第1の数をバッファ内のメモリ利用可能性に関連付けられたクレジットの閾値数と比較する比較器と、
クレジットの上記第1の数がクレジットの上記閾値数を満たす場合に、上記1又は複数の計算ビルディングブロックの最初の一つで実行される上記ワークロードのワークロードノードを選択するディスパッチャと
を備える装置。
[項目2]
上記インターフェースは、
上記インターフェースがクレジットマネージャーからクレジットの上記第1の数を受信した場合にクレジットの上記第1の数をメモリ内へ読み込み、
上記ワークロードノードに関連付けられたデータの1又は複数のタイルが上記1又は複数の計算ビルディングブロックの上記最初の一つから上記バッファへ送信されるにつれ、上記バッファに送信された各タイルに対してクレジットを上記クレジットマネージャーに送信するものである
項目1の装置。
[項目3]
上記バッファは上記ワークロードノードに関連付けられた出力バッファであり、クレジットの上記第1の数は上記出力バッファに対応しており、クレジットの上記閾値数は上記出力バッファ内のメモリの閾値量に対応する項目1の装置。
[項目4]
上記バッファは上記ワークロードノードに関連付けられた入力バッファであり、クレジットの上記第1の数は上記入力バッファに対応しており、クレジットの上記閾値数は上記入力バッファ内のデータの閾値量に対応する項目1の装置。
[項目5]
上記バッファは第1バッファであり、クレジットの上記閾値数はクレジットの第1閾値数であり、上記比較器はクレジットの第2の数を第2バッファ内のメモリ利用可能性に関連付けられたクレジットの第2閾値数と比較するものであり、上記ディスパッチャは、(1)クレジットの上記第1の数がクレジットの上記第1閾値数を満たし、(2)クレジットの上記第2の数がクレジットの上記第2閾値数を満たす場合に、上記1又は複数の計算ビルディングブロックの上記最初の一つで実行される上記ワークロードノードを選択するものである項目1の装置。
[項目6]
上記第2バッファは上記ワークロードノードに関連付けられた入力バッファであり、クレジットの上記第2の数は上記入力バッファに対応しており、クレジットの上記第2閾値数は上記入力バッファ内のデータの閾値量に対応する項目5の装置。
[項目7]
クレジットの上記閾値数はクレジットの第1閾値数であり、上記ワークロードノードは第1ワークロードノードであり、(1)クレジットの上記第1の数がクレジットの上記第1閾値数を満たし、(2)クレジットの第2の数がクレジットの第2閾値数を満たす場合に、上記ディスパッチャは、上記1又は複数の計算ビルディングブロックの上記最初の一つで実行される上記第1ワークロードノード及び第2ワークロードノードをスケジューリングするものである項目1の装置。
[項目8]
実行された場合に、少なくとも1つのプロセッサに、
クレジットの第1の数をメモリ内へ読み込むこと、
クレジットの上記第1の数をバッファ内のメモリ利用可能性に関連付けられたクレジットの閾値数と比較すること、及び、
クレジットの上記第1の数がクレジットの上記閾値数を満たす場合に、計算ビルディングブロックで実行される上記ワークロードのワークロードノードを選択すること
を少なくとも生じせしめる命令を備える非一時的コンピュータ可読記憶媒体。
[項目9]
上記命令は実行された場合に、上記少なくとも1つのプロセッサに、
クレジットの上記第1の数がクレジットマネージャーから受信された場合にクレジットの上記第1の数をメモリ内へ読み込むこと、及び、
上記ワークロードノードに関連付けられたデータの1又は複数のタイルが上記計算ビルディングブロックから上記バッファへ送信されるにつれ、上記バッファに送信された各タイルに対してクレジットを上記クレジットマネージャーに送信することを生じせしめる項目8の非一時的コンピュータ可読記憶媒体。
[項目10]
上記バッファは上記ワークロードノードに関連付けられた出力バッファであり、クレジットの上記第1の数は上記出力バッファに対応しており、クレジットの上記閾値数は上記出力バッファ内のメモリの閾値量に対応する項目8の非一時的コンピュータ可読記憶媒体。
[項目11]
上記バッファは上記ワークロードノードに関連付けられた入力バッファであり、クレジットの上記第1の数は上記入力バッファに対応しており、クレジットの上記閾値数は上記入力バッファ内のデータの閾値量に対応する項目8の非一時的コンピュータ可読記憶媒体。
[項目12]
上記バッファは第1バッファであり、クレジットの上記閾値数はクレジットの第1閾値数であり、かつ、上記命令は実行された場合に、上記少なくとも1つのプロセッサに、
クレジットの第2の数を第2バッファ内のメモリ利用可能性に関連付けられたクレジットの第2閾値数と比較すること、
(1)クレジットの上記第1の数がクレジットの上記第1閾値数を満たし、(2)クレジットの上記第2の数がクレジットの上記第2閾値数を満たす場合に、上記計算ビルディングブロックで実行される上記ワークロードノードを選択すること
を生じせしめる項目8の非一時的コンピュータ可読記憶媒体。
[項目13]
上記第2バッファは上記ワークロードノードに関連付けられた入力バッファであり、クレジットの上記第2の数は上記第2バッファに対応しており、クレジットの第2閾値数は上記入力バッファ内のデータの閾値量に対応する項目12の非一時的コンピュータ可読記憶媒体。
[項目14]
クレジットの上記閾値数はクレジットの第1閾値数であり、上記ワークロードノードは第1ワークロードノードであり、命令は実行された場合に、上記少なくとも1つのプロセッサに、(1)クレジットの上記第1の数がクレジットの上記第1閾値数を満たし、(2)クレジットの第2の数がクレジットの第2閾値数を満たす場合に、上記計算ビルディングブロックで実行される上記第1ワークロードノード及び第2ワークロードノードをスケジューリングすることを生じせしめる項目8の非一時的コンピュータ可読記憶媒体。
[項目15]
インターフェースする手段であって、クレジットの第1の数をメモリ内へ読み込むための上記インターフェースする手段と、
比較する手段であって、クレジットの上記第1の数をバッファ内のメモリ利用可能性に関連付けられたクレジットの閾値数と比較するための上記比較する手段と、
ディスパッチする手段であって、クレジットの上記第1の数がクレジットの上記閾値数に一致する場合に、上記1又は複数の計算ビルディングブロックの最初の一つで実行される上記ワークロードのワークロードノードを選択するための上記ディスパッチする手段と
を備える装置。
[項目16]
上記インターフェースする手段は、
上記インターフェースする手段がクレジットマネージャーからクレジットの上記第1の数を受信した場合にクレジットの上記第1の数をメモリ内へ読み込み、
上記ワークロードノードに関連付けられたデータの1又は複数のタイルが上記1又は複数の計算ビルディングブロックの上記最初の一つから上記バッファへ送信されるにつれ、上記バッファに送信された各タイルに対してクレジットを上記クレジットマネージャーに送信する
ものである項目15の装置。
[項目17]
上記バッファは上記ワークロードノードに関連付けられた出力バッファであり、クレジットの上記第1の数は上記出力バッファに対応しており、クレジットの上記閾値数は上記出力バッファ内のメモリの閾値量に対応する項目15の装置。[項目18]上記バッファは上記ワークロードノードに関連付けられた入力バッファであり、クレジットの上記第1の数は上記入力バッファに対応しており、クレジットの上記閾値数は上記入力バッファ内のデータの閾値量に対応する項目15の装置。
[項目19]
上記バッファは第1バッファであり、クレジットの上記閾値数はクレジットの第1閾値数であり、上記比較する手段はクレジットの第2の数を第2バッファ内のメモリ利用可能性に関連付けられたクレジットの第2閾値数と比較するものであり、上記ディスパッチする手段は、(1)クレジットの上記第1の数がクレジットの上記第1閾値数を満たし、(2)クレジットの上記第2の数がクレジットの上記第2閾値数を満たす場合に、上記1又は複数の計算ビルディングブロックの上記最初の一つで実行される上記ワークロードノードを選択するものである項目15の装置。
[項目20]
上記第2バッファは上記ワークロードノードに関連付けられた入力バッファであり、クレジットの上記第2の数は上記入力バッファに対応しており、クレジットの上記第2閾値数は上記入力バッファ内のデータの閾値量に対応する項目19の装置。
[項目21]
クレジットの上記閾値数はクレジットの第1閾値数であり、上記ワークロードノードは第1ワークロードノードであり、(1)クレジットの上記第1の数がクレジットの上記第1閾値数を満たし、(2)クレジットの第2の数がクレジットの第2閾値数を満たす場合に、上記ディスパッチする手段は、上記1又は複数の計算ビルディングブロックの上記最初の一つで実行される上記第1ワークロードノード及び第2ワークロードノードをスケジューリングするものである項目15の装置。
[項目22]
クレジットの第1の数をメモリ内へ読み込むことと、
クレジットの上記第1の数をバッファ内のメモリ利用可能性に関連付けられたクレジットの閾値数と比較することと、
クレジットの上記第1の数がクレジットの上記閾値数に一致する場合に、上記1又は複数の計算ビルディングブロックの最初の一つで実行される上記ワークロードのワークロードノードを選択することと
を備える方法。
[項目23]
クレジットマネージャーからクレジットの上記第1の数を受信する場合にクレジットの上記第1の数をメモリ内へ読み込むことと、
上記ワークロードノードに関連付けられたデータの1又は複数のタイルが上記1又は複数の計算ビルディングブロックの上記最初の一つから上記バッファへ送信されるにつれ、上記バッファに送信された各タイルに対してクレジットを上記クレジットマネージャーに送信することと
をさらに含む項目22の方法。
[項目24]
上記バッファは上記ワークロードノードに関連付けられた出力バッファであり、クレジットの上記第1の数は上記出力バッファに対応しており、クレジットの上記閾値数は上記出力バッファ内のメモリの閾値量に対応する項目22の方法。
[項目25]
上記バッファは上記ワークロードノードに関連付けられた入力バッファであり、クレジットの上記第1の数は上記入力バッファに対応しており、クレジットの上記閾値数は上記入力バッファ内のデータの閾値量に対応する項目22の方法。
図1
図2
図3
図4
図5
図6
図7
図8
図9