図は、実寸通りではない。一般に、同じ参照番号は、同じか又は類似した部分を参照するために図面及び添付の明細書にわたって使用されることになる。接続参照(例えば、取り付けられる(attached)、結合される(coupled)、接続される(connected)、及びつなぎ合わされる(joined))は、広く解釈されるべきであり、別段示されない限りは、一群の要素間にある中間部材、及び要素間の相対運動を含み得る。そのようなものとして、接続参照は、必ずしも、2つの要素が直接接続されて互いに固定関係にあることを暗示しない。
「第1」、「第2」、「第3」などの記述子は、別々に言及され得る複数の要素又はコンポーネントを識別する場合に本願では使用される。それらの使用文脈に基づいて別段特定又は理解されない限り、そのような記述子は、優先度、物理的な順序若しくはリスト内の配置、又は時間的な順序の意味を有することは意図されず、単に、開示されている例を理解することを容易にするために別々に複数の要素又はコンポーネントに言及するラベルとして使用される。いくつかの例で、「第1」との記述子は、詳細な説明において、ある要素に言及するために使用されることがあり、一方、同じ要素は、「第2」又は「第3」といった別の記述子により特許請求の範囲では言及されることがある。そのような場合に、かような記述子は、単に、複数の要素又はコンポーネントを参照することを簡単にするために使用されることが理解されるべきである。
多くのコンピュータハードウェア製造業者は、作業負荷の処理を加速させるための、アクセラレータとして知られている処理要素を開発している。例えば、アクセラレータは、CPU、GPU、VPU、及び/又はFPGAであることができる。更に、アクセラレータは、あらゆるタイプの作業負荷を処理可能である一方で、特定のタイプの作業負荷を最適化するよう設計される。例えば、CPU及びFPGAは、より一般的な処理を扱うよう設計され得るが、GPUは、映像、ゲーム、及び/又は他の物理及び数学に基づく計算を改善するよう設計され得、VPUは、マシンビジョンタスクの処理を改善するよう設計され得る。
その上、いくつかのアクセラレータは、人工知能(Artificial Intelligence,AI)アプリケーションの処理を改善するよう特に設計される。VPUは、特定のタイプのAIアクセラレータであり、一方、多くの異なるAIアクセラレータが使用可能である。実際に、多くのAIアクセラレータは、特定用途向け集積回路(Application Specific Integrated Circuits,ASIC)によって実装され得る。かようなASICに基づくAIアクセラレータは、機械学習(Machine Learning,ML)、ディープラーニング(Deep Learning,DL)、及び/又はサポートベクトルマシン(Support Vector Machines,SVM)、ニューラルネットワーク(Neural Networks,NN)、再帰型ニューラルネットワーク(Recurrent Neural Networks,RNN)、畳み込み型ニューラルネットワーク(Convolutional Neural Networks,CNN)、長短期メモリ(Long Short Term Memory,LSTM)、ゲート回帰型ユニット(Gate Recurrent Units,GRU)などを含む他の人工マシン駆動型ロジックといった特定のタイプのAIに関するタスクの処理を改善するよう設計され得る。
コンピュータハードウェア製造業者はまた、1よりも多いタイプの処理要素を含むヘテロジニアスシステムを開発している。例えば、コンピュータハードウェア製造業者は、CPUのような汎用の処理要素を、FPGAなどの汎用アクセラレータ及び/又はGPU、VPU及び/又は他のAIアクセラレータなどのよりカスタマイズされたアクセラレータのいずれかと組み合わせることがある。かようなヘテロジニアスシステムは、システム・オン・チップ(Systems on a Chip,SoC)として実装され得る。
開発者がヘテロジニアスシステムで関数、アルゴリズム、プログラム、アプリケーション、及び/又は他のコードを実行したいと望むとき、開発者及び/又はソフトウェアは、コンパイル時点で関数、アルゴリズム、プログラム、アプリケーション、及び/又は他のコードのためのスケジュール(例えば、グラフ)を生成する。スケジュールが生成されると、スケジュールは、(事前(Ahead of Time)又は実行時(Just in Time)パラダイムのいずれかのための)実行ファイルを生成するよう関数、アルゴリズム、プログラム、アプリケーション、及び/又は他のコード仕様と組み合わされる。更に、関数、アルゴリズム、プログラム、アプリケーション、及び/又は他のコードと組み合わされたスケジュールは、ノードを含むグラフとして表現されることがあり、グラフは、作業負荷(workload)を表し、各ノード(例えば、作業負荷ノード)は、その作業負荷の特定のタスクを表す。更には、グラフ内の異なるノード間の接続は、特定の作業負荷ノードが実行されるために必要とされるデータ入力及び/又は出力を表し、グラフの頂点は、グラフの作業負荷ノード間のデータ依存性を表す。
スケジュール(例えば、グラフ)をコンパイルする一般的な実施は、スケジュール(例えば、グラフ)を受け取って、作業負荷の様々な作業負荷ノードを、アクセラレータ内にある様々な計算構築ブロック(Compute Building Blocks,CBB)に割り当てるグラフコンパイラを含む。ヘテロジニアスシステムでは、グラフコンパイラは、夫々の独立したCBBと通じるよう個別に構成される。例えば、グラフコンパイラが作業負荷ノードをDSP及び/又はDSPに位置するカーネルに割り当て及び/又は別なふうに送るために、かようなグラフコンパイラは、DSPが含む入力及び出力条件(例えば、入力のタイプ及び出力のタイプ)を知っている必要がある。様々な計算構築ブロック(CBB)を含むヘテロジニアスシステム、あるいは、様々なCBBで実行されるべき様々な作業負荷ノードを受け取り及び/又は別なふうに取得するヘテロジニアスシステムでは、単一のグラフコンパイラを使用する実行は計算的に集中することになる。更には、ランタイム中のCBBの間の通信及び制御は、システムのヘテロジニアス性質によりしばしば実際的でない。同様に、CBBの間のデータ交換同期化は、しばしば計算的に負荷が重い。
その上、ヘテロジニアスシステム内に位置する様々なカーネルに対する作業負荷の様々な作業負荷ノードの割り当ては、同様に、グラフコンパイラが夫々の独立したカーネルと通じるよう個別に構成されることを必要とする。加えて、カーネルはしばしば、ユーザによって生成後にアクセラレータにロードされ、そのようなものとして、グラフコンパイラの再設定を必要とする。例えば、グラフコンパイラは、グラフコンパイラの初期設定後にアクセラレータに生成及び/又は別なふうにロードされたカーネルと通じること(例えば、作業負荷ノードを送ること)ができないことがある。
本願で開示される例は、アクセラレータにおいてヘテロジニアスコンポーネントを設定する方法及び装置を含む。本願で開示される例は、如何なる任意のスケジュール及び/又はグラフも用いて動作可能なアクセラレータを含む。例えば、本願で開示される例は、任意のスケジュール及び/又はグラフを効率的に理解しアクセラレータにマッピングすることができるグラフコンパイラを含む。本願で開示されるかような例の動作は、以下で、更に詳細に説明される。
本願で開示される例は、コンパイル時間中の様々なCBBの抽象化及び/又は一般化を含む。本願で開示される例は、CBBのための共通識別を採用することを含む。例えば、各CBBは、ヘテロジニアスであろうとなかろうと、そのCBBと相互作用するよう各々のセレクタを生成することによって識別され得る。かような例では、セレクタは、作業負荷内の作業負荷ノードを解析することに応答して生成される。各作業負荷ノードはしばしば、実行するために使用されるCBBのタイプに関する詳細を含むので、セレクタは、かようなCBBと相互作用するように作られ得る。本願で開示される例では、セレクタは、かようなCBBの入力及び/又は出力条件を決定する。セレクタは、作業負荷及び作業負荷内のCBBと通じる(例えば、作業負荷ドメイン及びCBBドメインと通じる)ことが可能な個別エンティティであるよう作られ得る。結果として、グラフコンパイラは、作業負荷ドメインにおいて動作を可能にするプラグインを含む。本願で使用されるように、作業負荷ドメインは、作業負荷に基づく抽象化及び/又は一般のレベルを指す。同様に、本願で使用されるように、CBBドメインは、CBBに基づく、作業負荷ドメインよりもより詳細な抽象化及び/又は一般化のレベルを指す。本願で開示されるかような例は、システムに固有であるか、又は後の時点でシステムに含まれるかのいずれかであるCBBの抽象化を可能にする。
本願で開示される例は、入力及び出力バッファとして識別されるバッファを利用する。本願で開示されるかような例では、プロデューサ(例えば、他のCBBによって使用されるデータを生成及び/又は別なふうに書き込むCBB)又はコンシューマ(例えば、他のCBBによって生成されたデータを取得及び/又は別なふうに読み出すCBB)のいずれかとして振る舞うCBBのパイプラインは、バッファを用いて実装される。プロデューサ又はコンシューマのいずれかとして振る舞うCBBのパイプラインを実装することによって、グラフコンパイラは、作業負荷(例えば、グラフ)の作業負荷ノード(例えば、タスク)を各CBBにサイジング及び/又は割り当てるときに、ジェネリックヒューリスティクス(generic heuristics)(例えば、課題を解決するために設計された技術、作業負荷ドメインで動作する経験則)を使用することができる。本願で開示されるいくつかの例で、グラフコンパイラは、作業負荷ノード(例えば,タスク)を実行するようバッファのスロットのサイズ及び数(例えば、ストレージサイズ)を含むことができる情報を提供し得る。このようにして、例となるクレジットマネージャは、バッファ内のn個のスロットに基づいてn個のクレジットを生成し得る。n個のクレジットは、従って、CBBが書き込み又は読み出し可能であるメモリ内の利用可能なn個のスペースを示す。クレジットジェネレータは、n個のクレジットを、パッケージ化して、コンフィグレーションコントローラによって決定された対応するプロデューサ及び/又はコンシューマへ送信し、例となるファブリック(例えば、制御及び設定ファブリック)にわたって通信されるように、コンフィグレーションコントローラへ供給する。
更には、本願で開示される例は、グラフコンパイラに対してCBBの標準表現を実装することを含む。本願で開示される例は、作業負荷内の各作業負荷ノードのために設定されたセレクタを含む。セレクタは、対応する作業負荷ノードによって識別されるCBBの標準の入力及び/又は出力条件を識別するよう構成される。更に、かようなセレクタは、それらの入力及び/又は出力条件によって特定される抽象化されたデバイスのリストをグラフコンパイラへ供給するよう構成される。本願で開示される可能な例では、グラフコンパイラは、様々なCBBに対する作業負荷ノード(例えば、タスク)のマッピングを可能にするよう、作業負荷(例えば、グラフ)内の作業負荷ノード(例えば、タスク)と様々なCBBとの間の変換レイヤ(例えば、CBBドメインと作業負荷ドメインとの間の変換レイヤ)を形成することができるプラグインを含む。加えて、本願で開示されるいくつかの例では、セレクタは、関連するCBBの具体的な要件をグラフコンパイラへ返してもよい。例えば、セレクタは、かようなCBBが動作するためにメモリ割り当ての一定の割合を必要とすることを、グラフコンパイラに伝えてよい。
ランタイム中に、本願で開示される例は、CBB間の通信を可能にするようCBBを構成するために使用される共通アーキテクチャを含む。本願で開示される例は、グラフコンパイラによって生成されたパイプラインとともにクレジットのシステムを利用する。かようなシステムは、グラフコンパイラが作業負荷(例えば、グラフ)からの作業負荷ノード(例えば、タスク)をプロデューサ及びコンシューマパイプラインにマッピングし、CBB間の通信を可能にすることを可能にする。初期プロデューサ(データを書き込むことを指示する作業負荷ノードを実行するCBB)として振る舞うCBBが作業負荷ノードの実行を完了すると、クレジットは、次のCBBではなく、そのCBBから見た原点へ返送される。かような原点は、本願で開示される例ではクレジットマネージャであってよい。
図1は、アクセラレータにおいてヘテロジニアスコンポーネントを設定するコンピュータシステム100を例示するブロック図である。図1の例では、コンピュータシステム100は、例となるシステムメモリ102と、例となるヘテロジニアスシステム104とを含む。例となるヘテロジニアスシステム104は、例となるホストプロセッサ106と、例となる第1通信バス108と、例となる第1アクセラレータ110aと、例となる第2アクセラレータ110bと、例となる第3アクセラレータ110cとを含む。例となる第1アクセラレータ110a、例となる第2アクセラレータ110b、及び例となる第3アクセラレータ110cの夫々は、各々のアクセラレータの動作に取って一般的及び/又は特有である様々なCBBを含む。
図1の例では、システムメモリ102は、例えば、フラッシュメモリ、磁気媒体、光学媒体などのような、データを記憶するための如何なるデバイスによっても実装されてよい。更に、例となるシステムメモリ102に記憶されるデータは、例えば、バイナリデータ、コンマ区切りデータ、タブ区切りデータ、構造化されたクエリ言語(Structured Query Language,SQL)構造、などのような、如何なるデータフォーマットにあってもよい。システムメモリ102は、ヘテロジニアスシステム104へ結合されている。図1で、システムメモリ102は、ホストプロセッサ106、第1アクセラレータ110a、第2アクセラレータ110b、及び第3アクセラレータ110cのうちの少なくとも1つの間の共有ストレージである。図1の例では、システムメモリ102は、コンピュータシステム100のローカルの物理ストレージであるが、他の例では、システムメモリ102は、コンピュータシステム100の外にあっても、かつ/あるいは、コンピュータシステム100に対して別なふうに遠隔にあってもよい。更なる例では、システムメモリ102は、仮想ストレージであってもよい。図1の例では、システムメモリ102は、不揮発性メモリ(例えば、リードオンリーメモリ(Read Only Memory,ROM)、プログラム可能(Programmable)ROM(PROM)、消去可能(Erasable)PROM(EPROM)、電気的消去可能な(Electrically Erasable)PROM(EEPROM)、など)である。他の例では、システムメモリ102は、不揮発性基本入出力システム(Basic Input/Output System,BIOS)又はフラッシュストレージであってよい。更なる例では、システムメモリ102は、揮発性メモリであってもよい。
図1で、ヘテロジニアスシステム104は、システムメモリ102経結合されている。図1の例では、ヘテロジニアスシステム104は、ホストプロセッサ106及び/又は第1アクセラレータ110a、第2アクセラレータ110b、若しくは第3アクセラレータ110cのうちの1つ以上で作業負荷を実行することによって、作業負荷を処理する。図1で、ヘテロジニアスシステム104は、システム・オン・チップ(SoC)である。代替的に、ヘテロジニアスシステム104は、如何なる他のタイプのコンピュータ又はハードウェアシステムであってもよい。
図1の例では、ホストプロセッサ106は、コンピュータ及び/又はコンピュータデバイス(例えば、コンピュータシステム100)に関連した動作を実行し及び/又は別なふうにその動作の完了を助けるように命令(マシン読み出し可能な命令)を実行するよう構成された処理要素である。図1の例では、ホストプロセッサ106は、ヘテロジニアスシステム104のためのプライマリ処理要素であり、少なくとも1つのコアを含む。代替的に、ホストプロセッサ106は、(例えば、1よりも多いCPUが利用される例において)コプライマリ 処理要素であってよく、一方、他の例では、ホストプロセッサ106は、セカンダリ処理要素であってよい。
図1の表されている例では、第1アクセラレータ110a、第2アクセラレータ110b、及び/又は第3アクセラレータ110cのうちの1つ以上は、ハードウェアアクセラレーションなどの計算タスクのためにヘテロジニアスシステム104で実行するプログラムによって利用され得る処理要素である。例えば、第1アクセラレータ110aは、AIのためのマシンビジョンタスクを処理する処理性能及び全体性能を改善するよう設計及び/又は別なふうに構成若しくは構造化されている処理リソースを含む処理要素である(例えば、VPU)。
本願で開示される例では、ホストプロセッサ106、第1アクセラレータ110a、第2アクセラレータ110b、及び第3アクセラレータ110cの夫々は、コンピュータシステム100の他の要素及び/又はシステムメモリ102と通信している。例えば、ホストプロセッサ106、第1アクセラレータ110a、第2アクセラレータ110b、及び第3アクセラレータ110c、及び/又はシステムメモリ102は、第1通信バス108を介して通信している。本願で開示されるいくつかの例では、ホストプロセッサ106、第1アクセラレータ110a、第2アクセラレータ110b、第3アクセラレータ110c、及び/又はシステムメモリ102は、任意の適切な有線及び/又は無線通信方法により通信し得る。その上、本願で開示されるいくつかの例では、ホストプロセッサ106、第1アクセラレータ110a、第2アクセラレータ110b、第3アクセラレータ110c、及び/又はシステムメモリ102は、任意の適切な有線及び/又は無線通信方法によりコンピュータシステム100の外部の如何なるコンポーネントとも通信し得る。
図1の例では、第1アクセラレータ110aは、例となる畳み込みエンジン112、例となるRNNエンジン114、例となるメモリ116、例となるメモリ管理ユニット(Memory Management Unit,MMU)118、例となるDSP120、及び例となるコントローラ122を含む。本願で開示される例では、畳み込みエンジン112、RNNエンジン114、メモリ116、メモリ管理ユニット(MMU)118、DSP120、及び/又はコントローラ122のいずれも、CBBと称されることがある。本願で開示されるいくつかの例では、メモリ116及び/又はMMU118は、基盤要素と称されることがある。例えば、メモリ116及び/又はMMU118は、第1アクセラレータ110aの外で実装されてもよい。例となる畳み込みエンジン112、例となるRNNエンジン114、例となるメモリ116、例となるMMU118、例となるDSP120、及び例となるコントローラ122の夫々は、例となる第1スケジューラ124、例となる第2スケジューラ126、例となる第3スケジューラ128、例となる第4スケジューラ130、例となる第5スケジューラ132、及び例となる第6スケジューラ134を夫々含む。例となるDSP120及び例となるコントローラ122の夫々は、例となるカーネルライブラリ136及び例となる第2カーネルライブラリ138を更に含む。
図1の表されている例では、畳み込みエンジン112は、例えば、ハードウェアプロセッサなどの論理回路によって実装される。なお、如何なる他のタイプの回路構成も、更に、又は代替的に、使用されてよく、例えば、1つ以上のアナログ又はデジタル回路、論理回路、プログラム可能プロセッサ、特定用途向け集積回路(ASIC)、プログラム可能論理デバイス(Programmable Logic Device(s),PLD)、フィールドプログラマブルゲートアレイ(FPGA)、デジタル信号プロセッサ(Digital Signal Processor(s),DSP)などがある。畳み込みエンジン112は、畳み込みに関連したタスクの処理を改善するよう構成されているデバイスである。更に、畳み込みエンジン112は、視覚心像の解析に関連したタスク及び/又はCNNに関連した他のタスクの処理を改善する。
図1の例では、RNNエンジン114は、例えば、ハードウェアプロセッサなどの論理回路によって実装される。なお、如何なる他のタイプの回路構成も、更に、又は代替的に、使用されてよく、例えば、1つ以上のアナログ又はデジタル回路、論理回路、プログラム可能プロセッサ、特定用途向け集積回路(ASIC)、プログラム可能論理デバイス(PLD)、フィールドプログラマブルゲートアレイ(FPGA)、デジタル信号プロセッサ(DSP)などがある。RNNエンジン114は、RNNに関連したタスクの処理を改善するよう構成されているデバイスである。更に、RNNエンジン114は、セグメント化されていない繋がった手書きの認識や発話認識の解析に関連したタスク及び/又はRNNに関連した他のタスクの処理を改善する。
図1の例では、メモリ116は、例えば、フラッシュメモリ、磁気媒体、光学媒体などのような、データを記憶するための如何なるデバイスによっても実装されてよい。更に、例となるメモリ116に記憶されるデータは、例えば、バイナリデータ、コンマ区切りデータ、タブ区切りデータ、構造化されたクエリ言語(SQL)構造、などのような、如何なるデータフォーマットにあってもよい。メモリ116は、畳み込みエンジン112、RNNエンジン114、MMU118、DSP120、及び直接メモリアクセス(Direct Memory Access,DMA)機能性を含むコントローラ122のうちの少なくとも1つの間の共有ストレージである。更に、メモリ116は、畳み込みエンジン112、RNNエンジン114、MMU118、DSP120、及びコントローラ122のうちの少なくとも1つが、ホストプロセッサ106から独立したシステムメモリ102にアクセスすることを可能にする。図1の例では、メモリ116は、第1アクセラレータ110aのローカルの物理ストレージであるが、他の例では、メモリ116は、第1アクセラレータ110aの外にあっても、かつ/あるいは、第1アクセラレータ110aに対して別なふうに遠隔にあってもよい。更なる例では、メモリ116は、仮想ストレージであってもよい。図1の例では、メモリ116は、不揮発性ストレージ(例えば、リードオンリーメモリ(ROM)、プログラム可能ROM(PROM)、消去可能PROM(EPROM)、電気的消去可能なPROM(EEPROM)、など)である。他の例では、メモリ116は、不揮発性基本入出力システム(BIOS)又はフラッシュストレージであってよい。更なる例では、メモリ116は、揮発性メモリであってもよい。
図1の表されている例では、例となるMMU118は、例えば、ハードウェアプロセッサなどの論理回路によって実装される。なお、如何なる他のタイプの回路構成も、更に、又は代替的に、使用されてよく、例えば、1つ以上のアナログ又はデジタル回路、論理回路、プログラム可能プロセッサ、特定用途向け集積回路(ASIC)、プログラム可能論理デバイス(PLD)、フィールドプログラマブルゲートアレイ(FPGA)、デジタル信号プロセッサ(DSP)などがある。MMU118は、メモリ116及び/又はシステムメモリ102の全てのアドレスへの参照を含むである。MMU118は更に、畳み込みエンジン112、RNNエンジン114、DSP120、及び/又はコントローラ122のうちの1つ以上によって利用される仮想メモリアドレスを、メモリ116及び/又はシステムメモリ102内の物理アドレスへ変換する。
図1の例では、DSP120は、例えば、ハードウェアプロセッサなどの論理回路によって実装される。なお、如何なる他のタイプの回路構成も、更に、又は代替的に、使用されてよく、例えば、1つ以上のアナログ又はデジタル回路、論理回路、プログラム可能プロセッサ、特定用途向け集積回路(ASIC)、プログラム可能論理デバイス(PLD)、フィールドプログラマブルゲートアレイ(FPGA)、デジタル信号プロセッサ(DSP)などがある。DSP120は、デジタル信号の処理を改善するデバイスである。例えば、DSP120は、カメラ及び/又はコンピュータビジョンに関する他のセンサからのデータなどの連続的な現実世界の信号を測定し、フィルタ処理し、及び/又は圧縮する処理を助ける。より一般的には、DSP120は、第1カーネルライブラリ136内の例となるカーネルを介して、他の固定機能CBB(例えば、RNNエンジン114、CNNエンジン、など)によってサーブされない作業負荷からの如何なる作業負荷ノードも実装するために使用される。更には、作業負荷が、第1言語(例えば、TensorFlow、CAFFE、ONNX、など)に基づき書かれた100個の作業負荷ノードを含む場合に、第1アクセラレータ110a、第2アクセラレータ110b、及び/又は第3アクセラレータ110cは、100個の作業負荷ノードのうちの20個の作業負荷ノードを固定機能として実行し(例えば、RNNエンジン114、CNNエンジン、などを用いて実行し)、次いで、100個の作業負荷ノードのうちの残り80個の作業負荷ノードを第1カーネルライブラリ136内の各々のカーネルを用いて実行し得る。このようにして、同じ言語(例えば、TensorFlow、CAFFE、ONNX、など)に基づく如何なる任意の要素も、第1アクセラレータ110a、第2アクセラレータ110b、及び/又は第3アクセラレータ110cにマッピングされ得る。
図1で、コントローラ122は、例えば、ハードウェアプロセッサなどの論理回路によって実装される。なお、如何なる他のタイプの回路構成も、更に、又は代替的に、使用されてよく、例えば、1つ以上のアナログ又はデジタル回路、論理回路、プログラム可能プロセッサ、特定用途向け集積回路(ASIC)、プログラム可能論理デバイス(PLD)、フィールドプログラマブルゲートアレイ(FPGA)、デジタル信号プロセッサ(DSP)などがある。コントローラ122は、第1アクセラレータ110aの制御ユニットとして実装される。例えば、コントローラ122は、第1アクセラレータ110aの動作を指示する。いくつかの例では、コントローラ122はクレジットマネージャを実装する。更には、コントローラ122は、ホストプロセッサ106から受け取られたマシン読み出し可能な命令に如何にして応答するかを畳み込みエンジン112、RNNエンジン114、メモリ116、MMU118、及び/又はDSP120のうちの1つ以上に指示することができる。
図1の例では、第1スケジューラ124、第2スケジューラ126、第3スケジューラ128、第4スケジューラ130、第5スケジューラ132、及び第6スケジューラ134の夫々は、畳み込みエンジン112、RNNエンジン114、メモリ116、MMU118、DSP120、及びコントローラ122が夫々、第1アクセラレータ110aにオフロード及び/又は別なふうに送信されている作業負荷の部分をいつ実行するかを決定するデバイスである。その上、第1カーネルライブラリ136及び第2カーネルライブラリ138の夫々は、1つ以上のカーネルを含むデータ構造である。第1カーネルライブラリ136及び第2カーネルライブラリ138のカーネルは、例えば、DSP120及びコントローラ122での高スループットのために夫々コンパイルされたルーチンである。カーネルは、例えば、コンピュータシステム100で実行されるべき実行ファイルの実行可能なサブセションに対応する。
本願で開示される例では、畳み込みエンジン112、RNNエンジン114、メモリ116、MMU118、DSP120、及びコントローラ122の夫々は、第1アクセラレータ110aの他の要素と通信している。例えば、畳み込みエンジン112、RNNエンジン114、メモリ116、MMU118、DSP120、及びコントローラ122は、例となる第2通信バス140を介して通信している。いくつかの例では、第2通信バス140は、1つ以上のコンピュータファブリック(例えば、設定及び制御ファブリック、データファブリック、など)によって実装されてよい。本願で開示されるいくつかの例では、畳み込みエンジン112、RNNエンジン114、メモリ116、MMU118、DSP120、及びコントローラ122は、任意の適切な有線及び/又は無線通信方法を介して通信し得る。その上、本願で開示されるいくつかの例では、畳み込みエンジン112、RNNエンジン114、メモリ116、MMU118、DSP120、及びコントローラ122の夫々は、任意の適切な有線及び/又は無線通信方法を介して第1アクセラレータ110aの外の如何なるコンポーネントとも通信し得る。
上記の通り、例となる第1アクセラレータ110a、例となる第2アクセラレータ110b、及び/又は例となる第3アクセラレータ110cのいずれも、各々のアクセラレータの動作にとって一般的及び/又は特有である様々なCBBを含んでよい。例えば、第1アクセラレータ110a、第2アクセラレータ110b、及び第3アクセラレータ110cの夫々は、メモリ、MMU、コントローラ、及びCBBの夫々のための各々のスケジューラなどの一般的なCBBを含む。その上、又は代替的に、第1アクセラレータ110a、例となる第2アクセラレータ110b、及び/又は例となる第3アクセラレータ110cのいずれにも位置していない外付けCBBが包含及び/又は付加されてもよい。例えば、コンピュータシステム100のユーザは、第1アクセラレータ110a、第2アクセラレータ110b、及び/又は第3アクセラレータ110cのうちのいずれか1つを利用して外部RNNエンジンを作動させてもよい。
図1の例では、第1アクセラレータ110aはVPUを実装し、畳み込みエンジン112、RNNエンジン114、及びDSP120(例えば、第1アクセラレータ110aの動作に特有の動作に特有のCBB)を含み、一方、第2アクセラレータ110b及び第3アクセラレータ110cは、第2アクセラレータ110b及び/又は第3アクセラレータ110cの動作に特有の追加の又は代替的なCBBを含んでもよい。例えば、第2アクセラレータ110bがGPUを実装する場合に、第2アクセラレータ110bの動作に特有のCBBは、スレッドディスパッチャ、グラフィクス技術インターフェイス、及び/又はコンピュータグラフィクスの処理及び/又は画像処理の処理速度及び全体性能を改善するために望ましい任意の他のCBBを含むことができる。更に、第3アクセラレータ110cがFPGAを実装する場合に、第3アクセラレータ110cの動作に特有のCBBは、1つ以上の算術論理演算装置(Arithmetic Logic Unit,ALU)、及び/又は一般的な計算の処理の処理速度及び全体性能を改善するために望ましい任意の他のCBBを含むことができる。
図1のヘテロジニアスシステム104は、ホストプロセッサ106、第1アクセラレータ110a、第2アクセラレータ110b、及び第3アクセラレータ110cを含み、一方、いくつかの例で、ヘテロジニアスシステム104は、特定用途向け命令セットプロセッサ(Application Specific Instruction set Processors,ASIP)、フィジクス処理ユニット(Physics Processing Unit,PPU)、指定済みDSP(designated DSPs)、画像プロセッサ、コプロセッサ、浮動小数点ユニット、ネットワークプロセッサ、マルチコアプロセッサ、及びフロントエンドプロセッサを含む任意数の処理要素(例えば、ホストプロセッサ及び/又はアクセラレータ)を含んでよい。
図2は、例となるグラフコンパイラ202及び1つ以上の例となるセレクタ204を含むコンピュータシステム200を例示するブロック図である。図2の例では、コンピュータシステム200は、例となる作業負荷206及び例となるアクセラレータ208を更に含む。更に、図2で、アクセラレータ208は、例となるクレジットマネージャ210と、例となる制御及び設定(Control and Configuration,CnC)ファブリック212と、例となる畳み込みエンジン214と、例となるMMU216と、例となるRNNエンジン218と、例となるDSP220と、例となるメモリ222と、例となるコンフィグレーションコントローラ224とを含む。図2の例では、メモリ222は、例となるDMAユニット226及び1つ以上の例となるバッファ228を含む。本願で開示される他の例では、如何なる適切なCBBも、アクセラレータ208に包含及び/又は追加されてよい。
図2の表されている例では、例となるグラフコンパイラ202は、コンパイルする手段、又はコンパイル手段である。図2の表されている例では、1つ以上のセレクタの中の例となるセレクタは、選択する手段、又は選択手段である。図2の表されている例では、例となるクレジットマネージャ210は、クレジットを管理する手段、又はクレジット管理手段である。図2の表されている例では、例となるコンフィグレーションコントローラ224は、制御する手段、又は制御手段である。図2の例では、畳み込みエンジン214、MMU216、RNNエンジン218、DSP220、メモリ222、及び/又はカーネルバンク232内のカーネルのいずれも、計算する手段、又は計算手段であってよい。
図2の表されている例では、グラフコンパイラ202は、例えば、ハードウェアプロセッサなどの論理回路によって実装される。なお、如何なる他のタイプの回路構成も、更に、又は代替的に、使用されてよく、例えば、1つ以上のアナログ又はデジタル回路、論理回路、プログラム可能プロセッサ、特定用途向け集積回路(ASIC)、プログラム可能論理デバイス(PLD)、フィールドプログラマブルゲートアレイ(FPGA)、デジタル信号プロセッサ(DSP)などがある。図2で、グラフコンパイラ202は、1つ以上のセレクタ204へ及びアクセラレータ208へ結合されている。動作中、グラフコンパイラ202は、作業負荷206を受け取り、作業負荷206を、アクセラレータ208によって実行される例となる実行ファイル230にコンパイルする。例えば、グラフコンパイラ202は、作業負荷206を受け取り、作業負荷206(例えば、グラフ)の様々な作業負荷ノードをアクセラレータ208の様々なCBB(例えば、畳み込みエンジン214、MMU216、RNNエンジン218、DSP220、及び/又はDMAユニット226のいずれか)に割り当てる。グラフコンパイラ202は更に、作業負荷206内の各作業負荷ノードに対応する1つ以上のセレクタ204の中の例となるセレクタを生成する。その上、グラフコンパイラ202は、アクセラレータ208のメモリ222内の1つ以上のバッファ228のためにメモリを割り当てる。本願で開示される例では、実行ファイル230は、別個のシステム(例えば、コンパイルシステム及び/又はコンパイルプロセッサ)で生成され、後の使用のために異なるシステム(例えば、デプロイメントシステム、ランタイムシステム、デプロイメントプロセッサ、など)で記憶されてよい。例えば、グラフコンパイラ202及び1つ以上のセレクタ204は、アクセラレータ208とは別個のシステムに位置してよい。
図2で表されている例では、1つ以上のセレクタ204は、例えば、ハードウェアプロセッサなどの論理回路によって実装される。なお、如何なる他のタイプの回路構成も、更に、又は代替的に、使用されてよく、例えば、1つ以上のアナログ又はデジタル回路、論理回路、プログラム可能プロセッサ、特定用途向け集積回路(ASIC)、プログラム可能論理デバイス(PLD)、フィールドプログラマブルゲートアレイ(FPGA)、デジタル信号プロセッサ(DSP)などがある。1つ以上のセレクタ204は、グラフコンパイラ202、アクセラレータ208、及びDSP220内に位置する例となるカーネルバンク232へ結合されている。1つ以上のセレクタ204は、作業負荷206を取得するようグラフコンパイラ202へ結合されている。作業負荷206内の各作業負荷ノード(例えば、タスク)は、関連する作業負荷を実行するために使用されるCBB(例えば、畳み込みエンジン214、MMU216、RNNエンジン218、DSP220、及び/又はDMAユニット226のいずれか)を示す。本願で開示される例では、1つ以上のセレクタ204の中のセレクタは、作業負荷ノードごとに生成され、対応するCBB(例えば、畳み込みエンジン214、MMU216、RNNエンジン218、DSP220、及び/又はDMAユニット226のいずれか)及び/又はカーネルバンク232内のカーネルと関連付けられる。1つ以上のセレクタ204は、作業負荷206に応答してグラフコンパイラ202によって生成され、そのようなものとして、様々なCBB(例えば、畳み込みエンジン214、MMU216、RNNエンジン218、DSP220、及び/又はDMAユニット226のいずれか)及び/又はカーネルバンク232内のカーネルの各々の入力及び/又は出力条件を識別することができる。1つ以上のセレクタによるかような識別は、グラフコンパイラ202による使用のために、抽象化された知識として表現され得る。かような抽象化された知識は、グラフコンパイラ202がアクセラレータ208のヘテロジニアス性質とは無関係に動作することを可能にする。
その上、グラフコンパイラ202は、作業負荷206からの各々の作業負荷ノードを対応するCBB(例えば、畳み込みエンジン214、MMU216、RNNエンジン218、DSP220、及び/又はDMAユニット226のいずれか)及び/又はカーネルバンク232内のカーネルにマッピングするために、1つ以上のセレクタ204を利用する。更に、グラフコンパイラ202は、対応する作業負荷ノード及び隣接する作業負荷ノード(例えば、作業負荷ノードの結果として得られるコンシューマ及び/又はプロデューサ)ごに適切な量のクレジットで特定の動作及びパラメータについて対応するCBB(例えば、畳み込みエンジン214、MMU216、RNNエンジン218、DSP220、お及び/又はDMAユニット226のいずれか)を設定する、などのために、1つ以上のセレクタ204を利用する。本願で開示されるいくつかの例で、1つ以上のセレクタ204は、作業負荷206からの各々の作業負荷ノードを対応するCBB(例えば、畳み込みエンジン214、MMU216、RNNエンジン218、DSP220、及び/又はDMAユニット226のいずれか)及び/又はカーネルバンク232内のカーネルにマッピングしてよい。
本願で開示される例では、1つ以上のセレクタ204は、グラフコンパイラ202に含まれてもよい。本願で開示されるかような例では、追加のセレクタが1つ以上のセレクタ204に含まれてもよく、あるいは、代替的に、1つ以上のセレクタ204の中の現在のセレクタが、作業負荷206及び/又はアクセラレータ208の変化(例えば、新しい作業負荷206が供給される、追加のCBBがアクセラレータ208に加えられる、など)に応答して変更されてもよい。
いくつかの例で、グラフコンパイラ202は、データがスケーリングされるべきであることを示す作業負荷206からの作業負荷ノードを識別する。データがスケーリングされるべきであることを示すかような作業負荷ノードは、そのようなタスクに関連した1つ以上のセレクタ204へ送られる。識別された作業負荷ノードに関連した1つ以上のセレクタ204は、グラフコンパイラ202が作業負荷を実行するために、CBB(例えば、畳み込みエンジン214、MMU216、RNNエンジン218、DSP220、及び/又はDMAユニット226のいずれか)及び/又はカーネルバンク232内のカーネルを、そのような識別されたCBB及び/又はカーネルバンク232内のカーネルの識別された入力及び/又は出力条件とともに、識別することができる。
図2の例では、作業負荷206は、例えば、アクセラレータによって実行されるグラフ、関数、アルゴリズム、プログラム、アプリケーション、及び/又は他のコードである。いくつかの例で、作業負荷206は、グラフ、関数、アルゴリズム、プログラム、アプリケーション、及び/又は他のコードの記述である。作業負荷206は、ユーザから取得されたあらゆる任意のグラフ及び/又はあらゆる適切な入力であってよい。例えば、作業負荷206は、ディープラーニングトポロジ及び/又はコンピュータビジョンなどのAI処理に関連した作業負荷であってよい。動作中、作業負荷206(例えば、グラフ)内の各作業負荷ノードは、特定のCBB(例えば、畳み込みエンジン214、MMU216、RNNエンジン218、DSP220、及び/又はDMAユニット226のいずれか)、カーネルバンク232内のカーネル、及び/又は作業負荷ノード内のタスクを実行するための入力及び/又は出力条件を指定する制約を含む。従って、グラフコンパイラ202に含まれる例となるプラグイン236は、作業負荷206(例えば、グラフ)の作業負荷ノードと関連するCBB及び/又はカーネルバンク232内のカーネルとの間のマッピングを可能にする。プラグイン236は、作業負荷206(例えば、グラフ)内の作業負荷を割り当てるよう、1つ以上のセレクタ204によって取得された抽象化された知識(例えば、夫々のCBB及び/又はカーネルバンク232内のカーネルの各々の標準入力及び/又は出力定義)と相互作用する。本願で開示されるかような例では、プラグイン236は、1つ以上のセレクタ204によって取得された抽象化された知識(例えば、夫々のCBB及び/又はカーネルバンク232内のカーネルの各々の標準入力及び/又は出力定義)に基づいて、様々なCBB(例えば、畳み込みエンジン214、MMU216、RNNエンジン218、DSP220、及び/又はDMAユニット226のいずれか)及び/又はカーネルバンク232内のカーネルに対する作業負荷206内の作業負荷のマッピングを可能にするように、作業負荷206(例えば、グラフ)内の作業負荷ノードと様々なCBB(例えば、畳み込みエンジン214、MMU216、RNNエンジン218、DSP220、及び/又はDMAユニット226のいずれか)及び/又はカーネルバンク232内のカーネルとの間の変換レイヤを形成し得る。
図2の例では、アクセラレータ208は、グラフコンパイラ202へ及び1つ以上のセレクタ204へ結合されている。本願で開示されるいくつかの例では、コンパイル時間中に、グラフコンパイラ202は、コンパイルシステム(例えば、第1プロセッサ)に対して作用し、1つ以上のセレクタ204を利用してコンパイル処理を実行(例えば、実行ファイル230を生成する)してよい。結果として、グラフコンパイラ202は、コンパイルシステム(例えば、第1プロセッサ)で、例となる実行ファイル230を生成する。更に、又は代替的に、実行ファイル230は、後の使用のためにデータベースに記憶されてよい。例えば、実行ファイル230は、コンパイルシステム(例えば、第1プロセッサ)及び/又はあらゆる外部及び/又は内部システム(例えば、デプロイメントシステム、第2プロセッサ、など)で記憶及び実行されてよい。ランタイム中、実行ファイル230は、デプロイメントシステム(例えば、図1のシステム100、第2プロセッサ、など)において動作可能である。コンパイルシステム(例えば、第1プロセッサ)は、デプロイメントシステム(例えば、図1のシステム100、第2プロセッサ、など)から別の場所で動作可能であってもよい。代替的に、コンパイルシステム及び/又はデプロイメントシステムは、組み合わされてもよく、そのようなものとして、アクセラレータによって直接に実行されている実行ファイル(例えば、実行ファイル230)へと任意の作業負荷(例えば、作業負荷206)の実行時(Just in Time,JIT)コンパイルを可能にし得る。
図2の表されている例では、クレジットマネージャ210はCnCファブリック212へ結合されている。クレジットマネージャ210は、例えば、ハードウェアプロセッサなどの論理回路によって実装される。なお、如何なる他のタイプの回路構成も、更に、又は代替的に、使用されてよく、例えば、1つ以上のアナログ又はデジタル回路、論理回路、プログラム可能プロセッサ、特定用途向け集積回路(ASIC)、プログラム可能論理デバイス(PLD)、フィールドプログラマブルゲートアレイ(FPGA)、デジタル信号プロセッサ(DSP)などがある。クレジットマネージャ210は、畳み込みエンジン214、MMU216、RNNエンジン218、及び/又はDSP220のうちの1つ以上に関連したクレジットを管理するデバイスである。いくつかの例で、クレジットマネージャ210は、クレジットマネージャコントローラとしてコントローラによって実装可能である。クレジットは、メモリ222で利用可能である作業負荷ノードに関連したデータ及び/又は作業負荷ノードの出力のためにメモリ222で利用可能な空間の量を表す。他の例では、クレジット及び/又はクレジット値は、データを記憶し及び/又は別なふうに書き込むために利用可能なバッファ(例えば、バッファ228の1つ)内のスロットの数を示し得る。
クレジットマネージャ210及び/又はコンフィグレーションコントローラ224は、グラフコンパイラ202から受け取られてコンフィグレーションコントローラ224によって分配された実行ファイル230に基づいて、メモリ222を、所与の作業負荷の各作業負荷ノードに関連した1つ以上のバッファ(例えば、バッファ228)に区画することができる。そのようなものとして、クレジットは、データを記憶し及び/又は別なふうに書き込むために利用可能な関連バッファ(例えば、バッファ228)内のスロットを表し得る。例えば、クレジットマネージャ210は、作業負荷206に対応する情報(例えば、設定及び制御メッセージ234及び/又はさもなければ、設定メッセージ及び制御メッセージ)を受け取る。例えば、クレジットマネージャ210は、コンフィグレーションコントローラ224から、CnCファブリック212を介して、プロデューサとして初期化されたCBB及びコンシューマとして初期化されたCBBを示すコンフィグレーションコントローラ224によって決定された情報を受け取る。
本願で開示される例では、特定の作業負荷ノードを実行するよう指示するコンフィグレーションコントローラ224から受け取られ命令に応答して(例えば、コンフィグレーションコントローラ224が設定及び制御メッセージ234を送信することに応答して)、クレジットマネージャ210は、対応するクレジットを、初期プロデューサとして振る舞うCBBへ供給し及び/又は別なふうに送信する(例えば、バッファの3つのスロットにデータを書き込むために畳み込みエンジン214へ3つのクレジットを供給する)。初期プロデューサとして振る舞うCBBが作業負荷ノードを完了すると、クレジットは、CBBから見た原点(例えば、クレジットマネージャ210)へ返送される。クレジットマネージャ210は、プロデューサからクレジットを取得することに応答して、コンシューマとして振る舞うCBBへクレジットを供給し及び/又は別なふうに送信する(例えば、DSP220は、バッファの3つのスロットからデータを読み出すよう3つのスロットを取得する)。プロデューサ及びコンシューマのかような順序は、実行ファイル230を用いて決定される。このようにして、CBBは、ヘテロジニアス性質にかかわらず、クレジットマネージャ210を介して動作するよう、能力の指示を送る。プロデューサCBBは、他のCBBによって利用されるデータを生成し、一方、コンシューマCBBは、他のCBBによって生成されたデータを消費し及び/又は別なふうに処理する。
本願で開示されるいくつかの例では、クレジットマネージャ210は、作業負荷ノードの実行が完了しているかどうかを判定するよう構成されてよい。かような例では、クレジットマネージャ210は、作業負荷ノードに関連したCBBにおいて全てのクレジットをクリアしてよい。
図2の例では、CnCファブリック212は、クレジットマネージャ210、畳み込みエンジン214、MMU216、RNNエンジン218、DSP220、メモリ222、及びコンフィグレーションコントローラ224へ結合されている。本願で開示されるいくつかの例では、メモリ222及び/又はMMU216は、基盤要素と称され、CnCファブリック212へ結合されなくてもよい。CnCファブリック212は、クレジットマネージャ210、畳み込みエンジン214、MMU216、RNNエンジン218、及び/又はDSP220のうちの1つ以上がクレジットマネージャ210、畳み込みエンジン214、MMU216、RNNエンジン218、DSP220、メモリ222、及び/又はコンフィグレーションコントローラ224のうちの1つ以上との間でクレジットを送受信することを可能にする配線及び少なくとも1つの論理回路の回路網を含む制御ファブリックである。その上、CnCファブリック212は、例となる設定及び制御メッセージ234を1つ以上のセレクタ204へ及び/又はそれから送信するよう構成される。本願で開示される他の例では、如何なる適切なコンピューティングファブリックも、CnCファブリック212を実装するために使用されてよい(例えば、AXI(Advanced eXtensible Interface)など)。
図2の表される例では、畳み込みエンジン214は、例えば、ハードウェアプロセッサなどの論理回路によって実装される。なお、如何なる他のタイプの回路構成も、更に、又は代替的に、使用されてよく、例えば、1つ以上のアナログ又はデジタル回路、論理回路、プログラム可能プロセッサ、特定用途向け集積回路(ASIC)、プログラム可能論理デバイス(PLD)、フィールドプログラマブルゲートアレイ(FPGA)、デジタル信号プロセッサ(DSP)などがある。畳み込みエンジン214は、CnCファブリック212へ結合されている。畳み込みエンジン214は、畳み込みに関連したタスクの処理を改善するよう構成されているデバイスである。更に、畳み込みエンジン112は、視覚心像の解析に関連したタスク及び/又はCNNに関連した他のタスクの処理を改善する。
図2の表される例では、例となるMMU216は、例えば、ハードウェアプロセッサなどの論理回路によって実装される。なお、如何なる他のタイプの回路構成も、更に、又は代替的に、使用されてよく、例えば、1つ以上のアナログ又はデジタル回路、論理回路、プログラム可能プロセッサ、特定用途向け集積回路(ASIC)、プログラム可能論理デバイス(PLD)、フィールドプログラマブルゲートアレイ(FPGA)、デジタル信号プロセッサ(DSP)などがある。MMU216は、CnCファブリック212へ結合されている。MMU216は、メモリ222及び/又はアクセラレータ208に対して遠隔にあるメモリのアドレスの変換を可能にするデバイスである。MMU216は更に、クレジットマネージャ210、畳み込みエンジン214、RNNエンジン218、及び/又はDSP220のうちの1つ以上によって利用される仮想メモリアドレスを、メモリ222及び/又はアクセラレータ208に対して遠隔にあるメモリ内の物理アドレスへ変換する。
図2で、RNNエンジン218は、例えば、ハードウェアプロセッサなどの論理回路によって実装される。なお、如何なる他のタイプの回路構成も、更に、又は代替的に、使用されてよく、例えば、1つ以上のアナログ又はデジタル回路、論理回路、プログラム可能プロセッサ、特定用途向け集積回路(ASIC)、プログラム可能論理デバイス(PLD)、フィールドプログラマブルゲートアレイ(FPGA)、デジタル信号プロセッサ(DSP)などがある。RNNエンジン218は、CnCファブリック212へ結合されている。RNNエンジン218は、RNNに関連したタスクの処理を改善するよう構成されているデバイスである。更に、RNNエンジン218は、セグメント化されていない繋がった手書きの認識や発話認識の解析に関連したタスク及び/又はRNNに関連した他のタスクの処理を改善する。
図2の例では、DSP220は、例えば、ハードウェアプロセッサなどの論理回路によって実装される。なお、如何なる他のタイプの回路構成も、更に、又は代替的に、使用されてよく、例えば、1つ以上のアナログ又はデジタル回路、論理回路、プログラム可能プロセッサ、特定用途向け集積回路(ASIC)、プログラム可能論理デバイス(PLD)、フィールドプログラマブルゲートアレイ(FPGA)、デジタル信号プロセッサ(DSP)などがある。DSP220は、CnCファブリック212へ結合されている。DSP220は、デジタル信号の処理を改善するデバイスである。例えば、DSP220は、カメラ及び/又はコンピュータビジョンに関する他のセンサからのデータなどの連続的な現実世界の信号を測定し、フィルタ処理し、及び/又は圧縮する処理を助ける。
図2の例では、メモリ222は、例えば、フラッシュメモリ、磁気媒体、光学媒体などのような、データを記憶するための如何なるデバイスによっても実装されてよい。更に、例となるメモリ222に記憶されるデータは、例えば、バイナリデータ、コンマ区切りデータ、タブ区切りデータ、構造化されたクエリ言語(SQL)構造、などのような、如何なるデータフォーマットにあってもよい。メモリ222は、CnCファブリック212へ結合されている。メモリ222は、クレジットマネージャ210、畳み込みエンジン214、MMU216、RNNエンジン218、DSP220、及び/又はコンフィグレーションコントローラ224のうちの少なくとも1つの間の共有ストレージである。メモリ222は、DMAユニット226を含む。更に、メモリ222は、コンフィグレーションコントローラ224及び/又はクレジットマネージャ210によって受け取られた実行ファイルに関連した作業負荷の1つ以上の作業負荷ノードに関連した1つ以上のバッファ228に区画され得る。更には、メモリ222のDMAユニット226は、CnCファブリック212を介してコンフィグレーションコントローラ224によって供給されるコマンドに応答して動作する。本願で開示されるいくつかの例では、メモリ222のDMAユニット226は、クレジットマネージャ210、畳み込みエンジン214、MMU216、RNNエンジン218、DSP220、及び/又はコンフィグレーションコントローラ224のうちの少なくとも1つが、各々のプロセッサ(例えば、ホストプロセッサ106)から独立したアクセラレータ208の遠隔にあるメモリにアクセスすることを可能にする。図2の例では、メモリ222は、アクセラレータ208のローカルの物理ストレージである。更に、又は代替的に、他の例では、メモリ222は、アクセラレータ208の外にあっても、かつ/あるいは、アクセラレータ208に対して別なふうに遠隔にあってもよい。本願で開示される更なる例では、メモリ222は、仮想ストレージであってもよい。図2の例では、メモリ222は、不揮発性ストレージ(例えば、ROM、PROM、EPROM、EEPROM、など)である。他の例では、メモリ222は、不揮発性BIOS又はフラッシュストレージであってよい。更なる例では、メモリ222は、揮発性メモリであってもよい。
本願で開示される例では、コンフィグレーションコントローラ224は、例えば、ハードウェアプロセッサなどの論理回路によって実装される。なお、如何なる他のタイプの回路構成も、更に、又は代替的に、使用されてよく、例えば、1つ以上のアナログ又はデジタル回路、論理回路、プログラム可能プロセッサ、特定用途向け集積回路(ASIC)、プログラム可能論理デバイス(PLD)、フィールドプログラマブルゲートアレイ(FPGA)、デジタル信号プロセッサ(DSP)などがある。コンフィグレーションコントローラ224は、アクセラレータ208の制御ユニットとして実装される。本願で開示される例では、1つ以上のセレクタ204は、実行ファイル230を生成するためにグラフコンパイラ202へ設定及び制御メッセージ234を送信する。本願で開示されるいくつかの例では、コンフィグレーションコントローラ224は、実行ファイル230に含まれる作業負荷ノードを示す設定及び制御メッセージ(例えば、1つ以上のセレクタ204によって取得され及び/又はそれへ送信された設定及び制御メッセージ234)を識別するよう、実行ファイル230を取得及びパースしてよい。そのようなものとして、コンフィグレーションコントローラ224は、実行ファイル230のタスクを実行するために様々なCBBへ設定及び制御メッセージ(例えば、1つ以上のセレクタ204によって取得され及び/又はそれへ送信された設定及び制御メッセージ234)を供給する。本願で開示されるかような例では、設定及び制御メッセージ234は、実行ファイル230に埋め込まれ、そのようなものとして、コンフィグレーションコントローラ224へ供給され、様々なCBB及び/又はカーネルバンク232に位置するカーネルへ送られる。例えば、コンフィグレーションコントローラ224は、実行可能ファイルにおいて作業負荷ノードを識別するよう実行ファイル230をパースし、グラフコンパイラ202からクレジットマネージャ210を介して受け取られた実行ファイル230及び/又は他のマシン読み出し可能な命令に如何にして応答するかを畳み込みエンジン214、MMU216、RNNエンジン218、DSP220、カーネルバンク232内のカーネル、及び/又はメモリ222のうちの1つ以上に指示する。
本願で開示される例では、コンフィグレーションコントローラ224は、取得された実行ファイル230からの作業負荷ノード(例えば、設定及び制御フォーマットにある)を、識別された対応するCBBへ送信する。同じく、コンフィグレーションコントローラ224は、クレジットの分配を開始するために作業負荷ノード(例えば、設定及び制御フォーマットにある)をクレジットマネージャ210へ送信してもよい。
図2の例では、畳み込みエンジン214、MMU216、RNNエンジン218、及び/又はDSP220は、各々のスケジューラ238、240、242、及び244を夫々含んでよい。動作中、スケジューラ238、240、242、及び244は、アクセラレータ208のコンフィグレーションコントローラ224、クレジットマネージャ210、及び/又は更なるCBBによって畳み込みエンジン214、MMU216、RNNエンジン218、及び/又はDSP220へ夫々割り当てられている作業負荷206の一部(例えば、作業負荷ノード)を夫々実行する。所与の作業負荷ノードのタスク及び/又は他の動作に応じて、作業負荷ノードはプロデューサ及び/又はコンシューマであることができる。
図2の例では、スケジューラ238、240、242、244のいずれも、クレジットマネージャ210によって供給される指示に応答して、データ(例えば、プロデューサ)をバッファ(例えば、バッファ228の少なくとも1つ)に書き込むことを対応するCBB(例えば、畳み込みエンジン214、MMU216、RNNエンジン218、及び/又はDSP220のいずれか)に示す作業負荷ノードに関連したクレジット値を受け取り及び/又は別なふうにメモリにロードしてよい。例えば、実行ファイル230が、プロデューサとして動作してデータの3つのビットをバッファ(例えば、バッファ228の1つ)に書き込むようにRNNエンジン218に対して指示する場合に、次いで、スケジューラ242は、3つのクレジット値をRNNエンジン218にロードし得る。その上、かような例では、実行ファイル230は、MMU216がRNNエンジン218によって前に書き込まれた3つのビットを読み出すべきであることを示してもよい。そのようなものとして、スケジューラ242(又はRNNエンジン218)は、3つのクレジットを、使用されると、MMU216へCnCファブリック212及びクレジットマネージャ210を介して送信する。
動作中、スケジューラ238、240、242、244、及び/又はCBB(例えば、畳み込みエンジン214、MMU216、RNNエンジン218、及び/又はDSP220のいずれか)は、漸増的に及び/又は任意の適切な方法でクレジットを送信してよい。他の例では、第1CBBは、第1作業負荷ノードを実行するために供給された第1クレジット値を有してよい。かような例では、第1作業負荷ノードを実行することに応答して、第1CBBは、データをメモリ222内の第1バッファ(例えば、バッファ228の1つ)に書き込み、第2クレジット値をクレジットマネージャ210に送信する。第2クレジット値は、データを第1バッファ(例えば、バッファ228の1つ)に書き込むために使用される第1クレジット値の量を表す。例えば、第1クレジット値が3であり、第1CBBがバッファ(例えば、バッファ228の1つ)の2つのスロットに書き込む場合に、次いで、第1CBBは、2つのクレジットをクレジットマネージャ210へ送信する。これに応えて、クレジットマネージャ210は、第2クレジット値(例えば、2つのクレジット)を第2CBBへ送信し、第2CBBは、第2クレジット値(例えば、2つのクレジット)を利用して、バッファ(例えば、バッファ228の1つ)の2つのスロット内のデータを読み出す。そのようなものとして、第2CBBは、次いで、第2作業負荷ノードを実行することができる。本願で開示される例では、バッファ228は、データの読み出し及び/又は書き込みにおいて使用される任意の適切な数のデータスロットを含む循環バッファにより実装される。
図2の表される例では、カーネルバンク232は、1つ以上のカーネルを含むデータ構造である。カーネルバンク232のカーネルは、例えば、DSP220での高スループットのためにコンパイルされたルーチンである。本願で開示される他の例では、各CBB(例えば、畳み込みエンジン214、MMU216、RNNエンジン218、及び/又はDSP220のいずれか)は、各々のカーネルバンクを含んでよい。カーネルは、例えば、アクセラレータ208で実行されるべき実行ファイルの実行可能なサブセションに対応する。図2の例では、アクセラレータ208は、VPUを実装し、クレジットマネージャ210、CnCファブリック212、畳み込みエンジン214、MMU216、RNNエンジン218、DSP220、及びメモリ222、並びにコンフィグレーションコントローラ224を含むが、一方で、アクセラレータ208は、図2に表されているものに対して付加的な又は代替のCBBを含んでもよい。本願で開示される更なる及び/又は代替の例では、カーネルバンク232は、グラフコンパイラ202による使用のために抽象化されるよう1つ以上のセレクタ204へ結合される。
図2の例では、データファブリック233が、クレジットマネージャ210、畳み込みエンジン214、MMU216、RNNエンジン218、DSP220、メモリ222、コンフィグレーションコントローラ224、及びCnCファブリック212へ結合されている。データファブリック233は、クレジットマネージャ210、畳み込みエンジン214、MMU216、RNNエンジン218、DSP220、メモリ222、及び/又はコンフィグレーションコントローラ224のうちの1つ以上がデータを交換することを可能にする配線及び少なくとも1つの論理回路の回路網である。例えば、データファブリック233は、プロデューサCBBがデータのタイルをメモリ、例えば、メモリ222及び/又は畳み込みエンジン214、MMU216、RNNエンジン218、及びDSP220のうちの1つ以上に位置するメモリのバッファに書き込むことを可能にする。その上、データファブリック233は、コンシューマCBBが、メモリ、例えば、メモリ222及び/又は畳み込みエンジン214、MMU216、RNNエンジン218、及びDSP220のうちの1つ以上に位置するメモリのバッファからデータのタイルを読み出すことを可能にする。データファブリック233は、データのパッケージにおいて提供される情報に応じてメモリとの間でデータを転送する。例えば、データは、パッケージのメソッドによって転送可能であり、パケットはヘッダ、ペイロード、及びトレイラを含む。パケットのヘッダは、データのあて先アドレス、データの発信元アドレス、データ送信されているプロトコルのタイプ、及びパケット番号である。ペイロードは、CBBが生成又は消費するデータである。データファブリック233は、意図されたあて先アドレスを解析することによってパケットのヘッダに基づいてCBB間のデータ交換を助け得る。本願で開示されるいくつかの例では、データファブリック233及びCnCファブリック212は、単一及び/又は複数のコンピューティングファブリックを用いて実装されてよい。
図3は、図2の1つ以上のセレクタ204の中の例となるセレクタ300を表す例となるブロック図である。セレクタ300は、特定の作業負荷ノードについて図2のグラフコンパイラ202によって生成されるセレクタの例を表す。かような例では、セレクタ300は、図2の特定のCBB(例えば、畳み込みエンジン214、MMU216、RNNエンジン218、及び/又はDSP220のいずれか)及び/又はカーネルバンク232内のカーネルと通じるよう生成され得る。セレクタ300は、図2の作業負荷206内の個々の作業負荷ノードについて実装されてよい。その上、個別のセレクタが、作業負荷206内の夫々の個々の作業負荷ノードについて実装されてもよい。図3に表されているセレクタ300は、例となるCBBアナライザ302、例となるカーネルアナライザ304、及び例となるコンパイラインターフェイス306を含む。動作中、CBBアナライザ302、カーネルアナライザ304、及び/又はコンパイラインターフェイス306のいずれも、例となる通信バス308を介して通信してよい。図3で、通信バス308は、任意の適切な通信方法及び/又は装置(例えば、Bluetooth(登録商標)通信、LAN通信、WLAN通信、など)により実装されてよい。本願で開示されるいくつかの例では、セレクタ300は、1つ以上のセレクタ204の中の例となるセレクタを表し、図2のグラフコンパイラ202に含まれてよい。
図3で表されている例では、CBBアナライザ302は、計算要素を解析する手段、又は計算要素解析手段である。図3の例では、カーネルアナライザ304は、カーネルを解析する手段、又はカーネル解析手段である。図3の例では、コンパイラインターフェイス306は、コンパイラ通信のための手段、又はコンパイラ通信手段である。
図3で表されている例では、CBBアナライザ302は、例えば、ハードウェアプロセッサなどの論理回路によって実装される。なお、如何なる他のタイプの回路構成も、更に、又は代替的に、使用されてよく、例えば、1つ以上のアナログ又はデジタル回路、論理回路、プログラム可能プロセッサ、特定用途向け集積回路(ASIC)、プログラム可能論理デバイス(PLD)、フィールドプログラマブルゲートアレイ(FPGA)、デジタル信号プロセッサ(DSP)などがある。動作中、CBBアナライザ302は、作業負荷に関連したCBB(例えば、畳み込みエンジン214、MMU216、RNNエンジン218、及び/又はDSP220のいずれか)の入力及び出力条件を識別するよう構成される。図3のCBBアナライザ302は、標準の入力要件(例えば、データ構造、入力の数、など)に対応し、かつ、作業負荷ノードを実行すると識別されたCBBに関連する入力条件のタイプを識別するよう構成される。その上、CBBアナライザ302は、標準の結果(例えば、出力の数、結果のタイプ、など)に対応し、かつ、作業負荷を実行すると識別されたCBBに関連する出力条件のタイプを識別するよう構成される。このようにして、識別された入力及び出力条件は、CBBアナライザ302によって識別され、グラフコンパイラ202による使用のために標準のフォーマットで供給される。
本願開示される他の例では、CBBアナライザ302は、動作要件を識別するよう、関連するCBBと通信してよい。例えば、CCBが、例となる作業負荷ノードを実行するために特定の割合のメモリ割り当てを必要とする場合に、かような要件は、CBBアナライザ302によって決定され、コンパイラインターフェイス306を介してグラフコンパイラ202へ送られ得る。
本願で開示されるいくつかの例では、CBBアナライザ302は、内部知識及び/又は、関連するCBBの現在及び/又は前のモデリングを利用することによって、関連するCBBと間接的に通信する。例となる内部知識及び/又は現在及び/又は前のモデリングは、CBB動作要件の知識を含んでよい。更に、CBBアナライザ302は、関連する作業負荷に対してノード解析を実行して、ノードタイプを識別し得る。かような例となる解析は、セレクタ300に位置するノードアナライザを用いて実行されてよい。更に、かような例では、識別されたノードタイプは、グラフコンパイラ202によって通信され、供給され、及び/又は別なふうに利用されてよい。このようにして、セレクタ300は、対応する作業負荷ノードをマッピングするターゲットであり得る対応するCBB及び/又は複数のCBBに関する知識を得る。例えば、乗算を実行することを示す作業負荷ノードが存在してよい。そのようなものとして、図2のグラフコンパイラ202は、(例えば、識別されたノードタイプを解析することに基づいて)乗算に関する知識を有しているセレクタ300を呼び出し及び/又はそれと別なふうに通信し、作業負荷ノードの関連パラメータをセレクタ300へ供給し得る。セレクタ300のCBBアナライザ302は、マッピングにおいて使用される作業負荷ノードを実行するCBBを識別する。本願で開示されるいくつかの例では、CBBアナライザ302は、対応する作業負荷ノードを、対応するCBBへマッピングしてよい。
図3で、例となるカーネルアナライザ304は、例えば、ハードウェアプロセッサなどの論理回路によって実装される。なお、如何なる他のタイプの回路構成も、更に、又は代替的に、使用されてよく、例えば、1つ以上のアナログ又はデジタル回路、論理回路、プログラム可能プロセッサ、特定用途向け集積回路(ASIC)、プログラム可能論理デバイス(PLD)、フィールドプログラマブルゲートアレイ(FPGA)、デジタル信号プロセッサ(DSP)などがある。動作中、カーネルアナライザ304は、カーネル(例えば、図2のカーネルバンク232に含まれるカーネル)の入力及び出力条件を識別するよう構成される。例えば、カーネルアナライザ304は、標準の入力要件(例えば、データ構造、入力の数、など)に対応し、かつ、作業負荷ノードを実行すると識別されたカーネルに関連する入力条件のタイプを識別するよう構成される。その上、カーネルアナライザ304は、標準の結果(例えば、出力の数、結果のタイプ、など)に対応し、かつ、作業負荷を実行すると識別されたカーネルに関連する出力条件のタイプを識別するよう構成される。このようにして、識別された入力及び出力条件は、グラフコンパイラ202による使用のために標準のフォーマットで供給される。本願で開示される例では、カーネルアナライザ304は、アクセラレータ208に含まれるいずれかのカーネル(例えば、アクセラレータにダウンロードされた新しいカーネル、など)の入力及び/又は出力条件のタイプを識別し得る。
本願で開示される他の例では、カーネルアナライザ304は、動作要件を識別するよう、関連するカーネルと通信してよい。例えば、カーネルが、例となる作業負荷ノードを実行するために特定の割合のメモリ割り当てを必要とする場合に、かような要件は、カーネルアナライザ304によって決定され、コンパイラインターフェイス306を介してグラフコンパイラ202へ送られ得る。
本願で開示されるいくつかの例では、カーネルアナライザ304は、内部知識及び/又は、関連するカーネルの現在及び/又は前のモデリングを利用することによって、関連するカーネルと間接的に通信する。例となる内部知識及び/又は現在及び/又は前のモデリングは、カーネル動作要件の知識を含んでよい。更に、カーネルアナライザ304は、関連する作業負荷に対してノード解析を実行して、ノードタイプを識別し得る。かような例となる解析は、セレクタ300に位置するノードアナライザを用いて実行されてよい。更に、かような例では、識別されたノードタイプは、グラフコンパイラ202によって通信され、供給され、及び/又は別なふうに利用されてよい。例えば、乗算を実行することを示す作業負荷ノードが存在してよい。そのようなものとして、図2のグラフコンパイラ202は、(例えば、識別されたノードタイプに基づいて)乗算に関する知識を有しているセレクタ300を呼び出し及び/又はそれと別なふうに通信し、作業負荷ノードの関連パラメータをセレクタ300へ供給し得る。セレクタ300のカーネルアナライザ304は、マッピングにおいて使用される作業負荷ノードを実行するCBBを識別する。本願で開示されるいくつかの例では、カーネルアナライザ304は、対応する作業負荷ノードを、対応するカーネルへマッピングしてよい。
本願で開示される例では、CBBアナライザ302及び/又はカーネルアナライザ304のいずれも、識別された制約及び/又は要件を、コンパイラインターフェイス306を介してグラフコンパイラ202へ伝えてよい。
図3で表されている例では、コンパイラインターフェイス306は、例えば、ハードウェアプロセッサなどの論理回路によって実装される。なお、如何なる他のタイプの回路構成も、更に、又は代替的に、使用されてよく、例えば、1つ以上のアナログ又はデジタル回路、論理回路、プログラム可能プロセッサ、特定用途向け集積回路(ASIC)、プログラム可能論理デバイス(PLD)、フィールドプログラマブルゲートアレイ(FPGA)、デジタル信号プロセッサ(DSP)などがある。本願で開示されるいくつかの例では、コンパイラインターフェイス306は、ハードウェア回路構成で実行可能なソフトウェア・アプリケーションプログラミングインターフェイス(Application Programming Interface,API)を用いて実装されてよい。かような例となるコンパイラインターフェイス306は、セレクタ300と図2のグラフコンパイラ202との間の通信を可能にする。その上、コンパイラインターフェイス306は、Ethernet(登録商標)インターフェイス、ユニバーサルシリアルバス(Universal Serial Bus,USB)、Bluetooth(登録商標)インターフェイス、近距離通信(Near Field Communication,NFC)インターフェイス、及び/又はPCIエクスプレスインターフェイスなどの如何なるタイプのインターフェイス標準によっても実装されてよい。コンパイラインターフェイス306は、CBBアナライザ302及び/又はカーネルアナライザ304のいずれかから入力及び出力条件を取得し、入力及び出力条件をグラフコンパイラ202へ送るよう構成される。更に、又は代替的に、コンパイラインターフェイス306は、CBBアナライザ302及び/又はカーネルアナライザ304によって決定された要件をグラフコンパイラ202へ送るよう構成されてもよい。
図4は、図2のグラフコンパイラ202を表すブロック図の例である。グラフコンパイラ202は、図4に表されるように、例となるグラフインターフェイス402、例となるセレクタインターフェイス404、例となる作業負荷アナライザ406、例となる実行ファイル生成部408、例となるデータストア410、及び図2のプラグイン236を含む。動作中、グラフインターフェイス402、セレクタインターフェイス404、作業負荷アナライザ406、実行ファイル生成部408、データストア410、及び/又はプラグイン236のいずれも、例となる通信バス412を介して通信してよい。図4で、通信バス412は、任意の適切な通信方法及び/又は装置(例えば、Bluetooth(登録商標)通信、LAN通信、WLAN通信、など)を用いて実装されてよい。
図4で表されている例では、グラフインターフェイス402は、グラフ通信のための手段、又はグラフ通信手段である。図4の例では、セレクタインターフェイス404は、セレクタ通信のための手段、又はセレクタ通信手段である。図4で表されている例では、作業負荷アナライザ406は、作業負荷を解析する手段、又は作業負荷解析手段である。図4の例では、プラグイン236は、変換する手段、又は変換手段である。図4の例では、実行ファイル生成部408は、実行ファイル生成のための手段、又は実行ファイル生成手段である。図4の例では、データストア410は、データを記憶する手段、又はデータ記憶手段である。
図4で表されている例では、グラフインターフェイス402は、例えば、ハードウェアプロセッサなどの論理回路によって実装される。なお、如何なる他のタイプの回路構成も、更に、又は代替的に、使用されてよく、例えば、1つ以上のアナログ又はデジタル回路、論理回路、プログラム可能プロセッサ、特定用途向け集積回路(ASIC)、プログラム可能論理デバイス(PLD)、フィールドプログラマブルゲートアレイ(FPGA)、デジタル信号プロセッサ(DSP)などがある。その上、グラフインターフェイス402は、Ethernetインターフェイス、ユニバーサルシリアルバス(USB)、Bluetooth(登録商標)インターフェイス、近距離通信(NFC)インターフェイス、及び/又はPCIエクスプレスインターフェイスなどの如何なるタイプのインターフェイス標準によっても実装されてよい。グラフインターフェイス402は、作業負荷(例えば、図2の作業負荷206)が受け取られるかどうかを判定するよう構成される。本願で開示される例では、作業負荷206が利用可能である場合に、グラフインターフェイス402は、作業負荷206をデータストア410に格納し得る。
図4で、例となるセレクタインターフェイス404は、例えば、ハードウェアプロセッサなどの論理回路によって実装される。なお、如何なる他のタイプの回路構成も、更に、又は代替的に、使用されてよく、例えば、1つ以上のアナログ又はデジタル回路、論理回路、プログラム可能プロセッサ、特定用途向け集積回路(ASIC)、プログラム可能論理デバイス(PLD)、フィールドプログラマブルゲートアレイ(FPGA)、デジタル信号プロセッサ(DSP)などがある。その上、セレクタインターフェイス404は、Ethernetインターフェイス、ユニバーサルシリアルバス(USB)、Bluetooth(登録商標)インターフェイス、近距離通信(NFC)インターフェイス、及び/又はPCIエクスプレスインターフェイスなどの如何なるタイプのインターフェイス標準によっても実装されてよい。セレクタインターフェイス404は、作業負荷206を取得することに応答して、作業負荷206内の作業負荷ノードごとに1つ以上のセレクタ204を生成及び/又は別なふうに供給するよう構成される。その上、セレクタインターフェイス404は、1つ以上のセレクタ204から入力及び/又は出力条件を取得し及び/又は別なふうに受け取るよう構成される。例えば、セレクタインターフェイス404は、アクセラレータ208における各CBB(例えば、畳み込みエンジン214、MMU216、RNNエンジン218、及び/又はDSP220のいずれか)の入力及び/又は出力条件を取得するよう構成される。かような動作において、セレクタインターフェイス404は、CBBを動作させる入力及び出力条件を特定するCBBのジェネリックリストを取得する。他の例では、セレクタインターフェイス404は、アクセラレータ208における各カーネル(例えば、カーネルバンク232内のいずれかのカーネル、及び/又は任意の適切なカーネル)の入力及び出力条件を取得するよう構成される。かような動作において、セレクタインターフェイス404は、カーネルを動作させる入力及び出力条件を特定するカーネルのジェネリックリストを取得する。動作中、セレクタインターフェイス404は、1つ以上のセレクタ204によって識別された入力及び/又は出力条件をデータストア410に格納する。
図4で表されている例では、作業負荷アナライザ406は、例えば、ハードウェアプロセッサなどの論理回路によって実装される。なお、如何なる他のタイプの回路構成も、更に、又は代替的に、使用されてよく、例えば、1つ以上のアナログ又はデジタル回路、論理回路、プログラム可能プロセッサ、特定用途向け集積回路(ASIC)、プログラム可能論理デバイス(PLD)、フィールドプログラマブルゲートアレイ(FPGA)、デジタル信号プロセッサ(DSP)などがある。作業負荷アナライザ406は、作業負荷(例えば、図6の作業負荷206)に含まれる作業負荷ノードをパースする。作業負荷アナライザ406は、作業負荷ノードを実行するために使用される入力及び出力条件を識別するよう作業負荷ノードをパースする。作業負荷アナライザ406は、パースされた作業負荷ノードを、1つ以上のセレクタ204による使用のためにセレクタインターフェイス404へ、及び/又はプラグイン236による使用のためにデータストア410へ送信し得る。
図4の例では、プラグイン236は、例えば、ハードウェアプロセッサなどの論理回路によって実装される。なお、如何なる他のタイプの回路構成も、更に、又は代替的に、使用されてよく、例えば、1つ以上のアナログ又はデジタル回路、論理回路、プログラム可能プロセッサ、特定用途向け集積回路(ASIC)、プログラム可能論理デバイス(PLD)、フィールドプログラマブルゲートアレイ(FPGA)、デジタル信号プロセッサ(DSP)などがある。動作中、プラグイン236は、作業負荷アナライザ406によって識別された作業負荷ノードをCBB(例えば、畳み込みエンジン214、MMU216、RNNエンジン218、及び/又はDSP220のいずれか)へマッピングするために、セレクタインターフェイス404、作業負荷アナライザ406、及びデータストア410に記憶されているデータと通じるよう構成される。例えば、プラグイン236は、識別された入力及び/又は出力条件に基づいて、作業負荷を、アクセラレータ208におけるCBB及び/又はカーネルにマッピングし及び/又は割り当てる。更に、かような例では、プラグイン236は、作業負荷ノードを実装するための入力及び出力条件を取得し、かような作業負荷ノードを、同じか又は実質的に類似した入力及び/又は出力条件を同様に含むデバイス(例えば、畳み込みエンジン214、MMU216、RNNエンジン218、DSP220、及び/又はカーネルバンク232に位置するカーネルのいずれか)に基づいて、実行されるよう割り当てる。このように、プラグイン236は、作業負荷ノードを割り当てられている特定のデバイス(例えば、畳み込みエンジン214、MMU216、RNNエンジン218、DSP220、及び/又はカーネルバンク232に位置するカーネルのいずれか)の直接的な知識を有さない。
本願で開示されるいくつかの例では、プラグイン236は、どのCBB及び/又はカーネルが特定の作業負荷ノードを割り当てられ得るかを鑑み及び/又は予測するために、適切なAI技術を用いて実装されてよい。例えば、プラグイン236が、データをバックアップすることを示す作業負荷ノードを特定のCBBへ以前に割り当てている場合に、かような作業負荷が今後割り当てられるべきであったならば、プラグインは、それを、データストア410に記憶されているデータを解析することから独立した特定のCBBへ割り当て得る。
図4で、例となる実行ファイル生成部408は、例えば、ハードウェアプロセッサなどの論理回路によって実装される。なお、如何なる他のタイプの回路構成も、更に、又は代替的に、使用されてよく、例えば、1つ以上のアナログ又はデジタル回路、論理回路、プログラム可能プロセッサ、特定用途向け集積回路(ASIC)、プログラム可能論理デバイス(PLD)、フィールドプログラマブルゲートアレイ(FPGA)、デジタル信号プロセッサ(DSP)などがある。プラグイン236が、同様の入力及び/又は出力条件を含むデバイスへ作業負荷ノードを割り当てた後、実行ファイル生成部408は、アクセラレータ208によって実行されるべき図2の実行ファイル230を生成するよう構成される。実行ファイル生成部408は更に、実行ファイル230をコンフィグレーションコントローラ224へ送る。その上、実行ファイル生成部408は、アクセラレータ208によって実行されるべき1つ以上の実行ファイルを生成してもよい。
図4で表されている例では、データストア410は、例えば、フラッシュメモリ、磁気媒体、光学媒体、などのような、データを記憶するための如何なるデバイスによっても実装されてよい。更に、例となるデータストア410に記憶されるデータは、例えば、バイナリデータ、コンマ区切りデータ、タブ区切りデータ、構造化されたクエリ言語(SQL)構造、などのような、如何なるデータフォーマットにあってもよい。図4で、データストア410は、セレクタインターフェイス404から取得された入力及び/又は出力条件、グラフインターフェイス402から取得された作業負荷(例えば、図2の作業負荷206)、及び/又は作業負荷ノードを実行するための入力及び/又は出力条件(例えば、作業負荷アナライザ406によって識別された入力及び/又は出力条件)を記憶するよう構成される。データストア410は、グラフインターフェイス402、セレクタインターフェイス404、作業負荷アナライザ406、プラグイン236、及び/又は実行ファイル生成部408のいずれによっても書き込まれ及び/又は読み出されてよい。
図5は、例となる第1CBB502及び例となる第2CBB504を用いて実行される作業負荷を表すパイプライン500を例示する図である。第1CBB502及び/又は第2CBB504は、図2の例となるCBB(例えば、畳み込みエンジン214、MMU216、RNNエンジン218、及び/又はDSP220)であってよい。代替的に、第1CBB502及び/又は第2CBB504は、任意の適切なカーネル(例えば、カーネルバンク232に位置するカーネル)を用いて実装されてもよい。図5の例では、第1CBB502は、プロデューサであり、第2CBB504は、コンシューマである。例となるパイプライン500は、例となる第1作業負荷ノード506、及び例となる第2作業負荷ノード508を含む。図5の例では、第1CBB502は、第1作業負荷ノード506を実行するよう構成される。同様に、第2CBB504は、第2作業負荷ノード508を実行するよう構成される。動作中、例となるクレジットマネージャ510は、第1作業負荷ノード506を実行するために第1クレジット値を第1CBB502へ供給するよう構成される。例えば、第1クレジット値は、5つのクレジット(バッファ512で最初に利用可能なデータスロット)であり、そのようなものとして、第1作業負荷ノード506の実行を開始する指示を第1CBB502に与える。図5で、バッファ512は循環バッファである。
図5で表されている例では、第1作業負荷ノード506は、バッファ512の2つのスロット(データスロットのサブセット)に書き込むことによって実行される。そのようなものとして、第1CBB502は、バッファ512の最初の2つの利用可能なスロットに書き込む。これに応えて、第1CBB502は、2つのクレジットをクレジットマネージャ510へ送る。クレジットマネージャ510は、利用可能になると、2つのクレジットを第2CBB504へ送る。第2CBB504へ供給された2つのクレジットは、第2作業負荷ノード508の実行を開始することを第2CBB504に示すよう動作する。図5で、第2作業負荷ノード508は、バッファ512内の次の2つのスロットを先入先出法(First-In First-Out,FIFO)で読み出すことによって実行される。
例となるグラフコンパイラ202、例となる1つ以上のセレクタ204、例となるセレクタ300、及び/又は図2のアクセラレータ208を実装する方法の例が図3及び/又は図4に表されている一方で、図2、図3及び/又は図4で表されている要素、プロセス、及び/又はデバイスの1つ以上は、組み合わされ、分割され、再配置され、省略され、削除され、及び/又は如何なる他の方法でも実装されてよい。更に、例となるCBBアナライザ302、例となるカーネルアナライザ304、例となるコンパイラインターフェイス306、及び/又はより一般的に、図2及び/又は図3の例となるセレクタ300及び/又は例となる1つ以上のセレクタ204、例となるグラフインターフェイス402、例となるセレクタインターフェイス404、例となる作業負荷アナライザ406、例となる実行ファイル生成部408、例となるデータストア410、例となるプラグイン236、及び/又はより一般的に、図2及び/又は図4の例となるグラフコンパイラ202、及び/又は例となるクレジットマネージャ210、例となるCnCファブリック212、例となる畳み込みエンジン214、例となるMMU216、例となるRNNエンジン218、例となるDSP220、例となるメモリ222、例となるコンフィグレーションコントローラ224、例となるカーネルバンク232、及び/又はより一般的に、図2の例となるアクセラレータ208は、ハードウェア、ソフトウェア、又はファームウェアによって、かつ/あるいは、ハードウェア、ソフトウェア、及び/又はファームウェアの任意の組み合わせによって実装されてよい。よって、例えば、例となるCBBアナライザ302、例となるカーネルアナライザ304、例となるコンパイラインターフェイス306、及び/又はより一般的に、図2及び/又は図3の例となるセレクタ300及び/又は例となる1つ以上のセレクタ204、例となるグラフインターフェイス402、例となるセレクタインターフェイス404、例となる作業負荷アナライザ406、例となる実行ファイル生成部408、例となるデータストア410、例となるプラグイン236、及び/又はより一般的に、図2及び/又は図4の例となるグラフコンパイラ202、及び/又は例となるクレジットマネージャ210、例となるCnCファブリック212、例となる畳み込みエンジン214、例となるMMU216、例となるRNNエンジン218、例となるDSP220、例となるメモリ222、例となるコンフィグレーションコントローラ224、例となるカーネルバンク232、及び/又はより一般的に、図2の例となるアクセラレータ208のいずれも、1つ以上のアナログ若しくは又はデジタル回路、論理回路、プログラム可能プロセッサ、プログラム可能コントローラ、グラフィクス処理ユニット(GPU)、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、プログラム可能論理デバイス(PLD)、及び/又はフィールドプログラマブルゲートアレイ(FPGA)によって実装されてよい。純粋にソフトウェア及び/又はファームウェアの実施をカバーするよう本発明の装置又はシステム請求項のいずれかを読む場合に、例となるCBBアナライザ302、例となるカーネルアナライザ304、例となるコンパイラインターフェイス306、及び/又はより一般的に、図2及び/又は図3の例となるセレクタ300及び/又は例となる1つ以上のセレクタ204、例となるグラフインターフェイス402、例となるセレクタインターフェイス404、例となる作業負荷アナライザ406、例となる実行ファイル生成部408、例となるデータストア410、例となるプラグイン236、及び/又はより一般的に、図2及び/又は図4の例となるグラフコンパイラ202、及び/又は例となるクレジットマネージャ210、例となるCnCファブリック212、例となる畳み込みエンジン214、例となるMMU216、例となるRNNエンジン218、例となるDSP220、例となるメモリ222、例となるコンフィグレーションコントローラ224、例となるカーネルバンク232、及び/又はより一般的に、図2の例となるアクセラレータ208のうちの少なくとも1つは、ソフトウェア及び/又はファームウェアを含むメモリ、デジタルバーサタイルディスク(DVD)、コンパクトディスク(CD)、ブルーレイディスク、などのような非一時的なコンピュータ可読記憶デバイス又は記憶ディスクを含むようこれをもって明示的に定義される。また更に、図2、図3及び/又は図4の例となるグラフコンパイラ202、例となる1つ以上のセレクタ204、例となるセレクタ300、及び/又はアクセラレータ208は、図2、図3及び/又は図4で表されているものに加えて、又はそれらの代わりに、1つ以上の要素、プロセス及び/又はデバイスを含んでよく、かつ/あるいは、表されている要素、プロセス、及びデバイスのいずれか又は全ての1つ以上を含んでよい。本願で使用されるように、「~と通信している」との表現及びその変形は、直接的な通信及び/又は1つ以上の中間コンポーネントを介した間接的な通信を包含し、直接的な物理(例えば、有線)通信及び/又は継続的な通信を必要とせず、むしろ、周期的なインターバル、スケジューリングされたインターバル、不規則なインターバル、及び/又は一回限りでの選択的な通信を更に含む。
例となるグラフコンパイラ202、例となる1つ以上のセレクタ204、例となるセレクタ300、及び/又はアクセラレータ208を実装するための例となるハードウェアロジック、マシン読み出し可能な命令、ハードウェア実装による状態マシン、及び/又はそれらの任意の組み合わせを表すフローチャートは、図6及び/又は図7に示される。マシに読み出し可能な命令は、図8に関連して以下で説明されるプロセッサプラットフォーム800で例として示されるプロセッサ810及び/又はアクセラレータ812などのコンピュータプロセッサによって実行される1つ以上の実行可能プログラム又は実行可能プログラムの部分であってよい。プログラムは、CD-ROM、フロッピー(登録商標)ディスク、ハードドライブ、DVD、ブルーレイディスク、あるいは、プロセッサ810及び/又はアクセラレータ812に付随したメモリなどの非一時的なコンピュータ可読記憶媒体に記憶されたソフトウェアにおいて具現されてよいが、プログラム全体及び/又はその部分は、代替的に、プロセッサ810やアクセラレータ812以外の他のデバイスによって実行され、かつ/あるいは、ファームウェア又は専用ハードウェアにおいて具現されてもよい。更に、例となるプログラムが、図4で表されているフローチャートを参照して記載されるが、例となるグラフコンパイラ202、例となる1つ以上のセレクタ204、例となるセレクタ300、及び/又はアクセラレータ208を実装する多くの他の方法が代替的に使用されてもよい。例えば、ブロックの実行の順序は変更されてよく、かつ/あるいは、記載されているブロックのいくつかは、変更され、削除され、又は結合されてもよい。更に、又は代替的に、ブロックのいずれか又は全ては、対応する動作をソフトウェア又はファームウェアを実行せずに実行するよう構造化された1つ以上のハードウェア回路(例えば、ディスクリート及び/又は集積アナログ及び/又はデジタル回路構成、FPGA、ASIC、コンパレータ、演算増幅器(op-amp)、論理回路、など)によって実装されてもよい。
本願で記載されるマシン読み出し可能な命令は、圧縮されたフォーマット、暗号化されたフォーマット、断片化されたフォーマット、コンパイルされたフォーマット、実行可能なフォーマット、パッケージ化されたフォーマット、などのうちの1つ以上で記憶されてよい。本願で記載されるマシン読み出し可能な命令は、マシン読み出し可能な命令を作成し、製造し、及び/又は生成するために利用され得るデータ(例えば、命令の部分、コード、コードの表現、など)として記憶されてよい。例えば、マシン読み出し可能な命令は、1つ以上の記憶デバイス及び/又はコンピュータデバイス(例えば、サーバ)で断片化及び記憶されてよい。マシン読み出し可能な命令は、それらをコンピュータデバイス及び/又は他のマシンによって直接に読み出し可能、解釈可能、及び/又は実行可能にするために、インストール、変更、適応、更新、結合、補足、設定、解読、解凍、アンパッケージ、分配、再配置、コンパイル、などのうちの1つ以上を必要とすることがある。例えば、マシン読み出し可能な命令は、別々のコンピュータデバイスで個々に圧縮、暗号化、及び記憶される複数の部分において記憶されてよく、それらの部分は、解読、解凍、及び結合されるときに、本願で記載されるようなプログラムを実装する実行可能命令の組を形成する。
他の例では、マシン読み出し可能な命令は、それらがコンピュータによって読み出され得る状態で記憶されるが、特定のコンピュータデバイス又は他のデバイスで命令を実行するために、ライブラリ(例えば、動的リンクライブラリ(Dynamic Link Library,DLL))、ソフトウェア開発キット(Software Development Kit,SDK)、アプリケーションプログラミングインターフェイス(API)などの追加を必要とすることができる。他の例では、マシン読み出し可能な命令は、マシン読み出し可能な命令及び/又は対応するプログラムが全体として又は部分的に実行可能である前に、設定される必要があることがある(例えば、設定記憶、データ入力、ネットワークアドレス記録、など)。よって、開示されるマシン読み出し可能な命令及び/又は対応するプログラムは、記憶されているときに又は別なふうに格納された状態か若しくは伝送中にマシン読み出し可能な命令及び/又はプログラムの特定のフォーマット又は状態に関わらず、かようなマシン読み出し可能な命令及び/又はプログラムを包含することが意図される。
本願で記載されるマシン読み出し可能な命令は、あらゆる過去、現在、又は将来の命令言語、スクリプト言語、プログラミング言語、などによって表現可能である。例えば、マシン読み出し可能な命令は、次の言語:C、C++、Java(登録商標)、C#、Perl、Python、JavaScript(登録商標)、HyperText Markup Laguage(HTML)、構造化されたクエリ言語(SQL)、Swift、などのいずれかを用いて表現され得る。
上記の通り、図6及び/又は図7の例となるプロセスは、情報が任意の期間(長期間、永久に、束の間、一時バッファリングのために、及び/又は情報のキャッシングのために)保存されるハードディスクドライブ、フラッシュメモリ、リードオンリーメモリ、コンパクトディスク、デジタルバーサタイルディスク、キャッシュ、ランダムアクセスメモリ及び/又はあらゆる他の記憶デバイス若しくは記憶ディスクなどの非一時的なコンピュータ及び/又はマシン読み出し可能な媒体に記憶された実行可能命令(例えば、コンピュータ及び/又はマシン読み出し可能な命令)を用いて実装されてよい。本願で使用されるように、「非一時的なコンピュータ可読媒体」との語は、あらゆるタイプのコンピュータ可読記憶デバイス及び/又は記憶デバイスを含むよう、かつ、電波信号を除外し、伝送媒体を除外するよう明示的に定義される。
「含む」(including)及び「有する」(comprising)(並びにそれらの全ての形及び時制)は、非限定的な語であるよう本願では使用される。よって、請求項が、プリアンブルとして又はあらゆる種類のクレーム記載の中で「含む」又は「有する」のいかなる形(例えば、有する(comprises)、含む(includes)、有している(comprising)、含んでいる(including)、持っている(having)、など)を用いるとしても、対応する請求項又は記載の範囲から出ることなしに、追加の要素、項目などが存在し得ることが理解されるべきである。本願で使用されるように、「少なくとも」(at least)との表現が、例えば、請求項のプリアンブルにおいて、移行語(transition term)として使用される場合に、それは、「有する」及び「含む」との語が非限定的であるのと同じように非限定的である。「及び/又は」(and/or)は、例えば、A、B及び/又はなどの形で使用される場合に、(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、のいずれかを含む実施を指すよう意図される。
本願で使用されるように、単数参照(例えば、「1つ」(a)、「1つ」(an)、「第1」、「第2」、など)は複数を除外しない。「1つ」(a又はan)との語は、そのエンティティの1つ以上を指す。「1つ」(a又はan)、「1つ以上」、及び「少なくとも1つ」との語は、道義的に本願では使用され得る。更に、たとえ個々に挙げられているとしても、複数の手段、要素、又は方法動作は、例えば、単一ユニット又はプロセッサによって、実装されてよい。その上、たとえ個々の特徴が異なる例又は請求項に含まれることがあるとしても、それらは、場合により組み合わされてもよく、異なる例又は請求項における包含は、特徴の組み合わせが実現可能及び/又は有利でないことを暗示しない。
図6は、図2の実行ファイル230を生成するために図2、図3及び/又は図4のグラフコンパイラ202、セレクタ300、及び/又は1つ以上のセレクタ204を実装するよう実行され得るプロセス600を表すフローチャートである。図6の表される例で、グラフインターフェイス402(図4)は、作業負荷206が受け取られる及び/又は別なふうに利用可能であるかどうかを判定する(ブロック602)。作業負荷206が受け取られない及び/又は別なふうに利用可能でないとグラフインターフェイス402が決定する(例えば、ブロック602の制御が否定(NO)の結果を返す)ことに応答して、プロセス600は待ち続ける。代替的に、作業負荷206が受け取られる及び/又は別なふうに利用可能であるとグラフインターフェイス402が決定する(例えば、ブロック602の制御が肯定(YES)の結果を返す)場合に、次いで、作業負荷アナライザ406(図4)は、作業負荷ノードを識別するよう作業負荷206をパースする(ブロック604)。
これに応えて、セレクタインターフェイス404(図4)は、作業負荷ノードごとにセレクタ(例えば、図2の1つ以上のセレクタ204)を生成する(ブロック606)。CBBアナライザ302(図3)は更に、関連するCBBの入力及び出力条件を取得及び/又は別なふうに識別する(ブロック608)。これに応えて、セレクタインターフェイス404は、生成された全てのセレクタが各々の入力及び/又は出力条件を供給したかどうかを判定し、そのようなものとして、解析すべき更なるCBBがあるかどうかを判定する(ブロック610)。解析すべき更なるCBBがあるとセレクタインターフェイス404が決定する(ブロック610の制御が肯定の結果を返す)場合に、次いで、制御はブロック608に戻る。代替的に、解析すべき更なるCBBがないとセレクタインターフェイス404が決定する(ブロック610の制御が否定の結果を返す)場合に、次いで、カーネルアナライザ304(図3)は更に、関連するカーネルの入力及び出力条件を取得及び/又は別なふうに識別する(ブロック612)。これに応えて、セレクタインターフェイス404は、生成された全てのセレクタが各々の入力及び/又は出力条件を供給したかどうかを判定し、そのようなものとして、解析すべき更なるカーネルがあるかどうかを判定する(ブロック614)。解析すべき更なるカーネルがあるとセレクタインターフェイス404が決定する(例えば、ブロック614の制御が肯定の結果を返す)場合に、次いで、制御はブロック612に戻る。代替的に、解析すべき更なるカーネルがないとセレクタインターフェイス404が決定する(例えば、ブロック614の制御が否定の結果を返す)場合に、次いで、プラグイン236(図2及び/又は図4)は、セレクタ(例えば、図1の1つ以上のセレクタ204)によって識別された入力及び出力条件に基づいて、作業負荷ノードをCBB及び/又はカーネルにマッピングする(ブロック616)。
実行ファイル生成部408(図4)は、次いで、実行ファイル230を生成する(ブロック618)。実行ファイル生成部408は更に、実行ファイル230をコンフィグレーションコントローラ224へ送る(ブロック620)。本願で開示される他の例では、ブロック618の実行に応答して、実行ファイル生成部408は、外部及び/又は内部デプロイメントシステム(例えば、図1のシステム100)での後の使用のために、実行ファイル230をデータストア410に格納してよい。図6の表される例で、グラフコンパイラ202は、動作を続けるべきかどうかを判断する(ブロック622)。動作を続けるとグラフコンパイラ202が決定する(例えば、ブロック622の制御が肯定の結果を返す)場合に、次いで、制御はブロック602に戻り、グラフインターフェイス402は、作業負荷206が受け取られる及び/又は別なふうに利用可能であるかどうかを判定する。例えば、グラフコンパイラ202は、更なる作業負荷が利用可能である場合に、かつ/あるいは、新しいCBB及び/又はカーネルがアクセラレータ208に含まれる場合に、動作し続けると決定してよい。
代替的に、動作が続くべきでないとグラフコンパイラ202が決定する(ブロック622の制御が否定の結果を返す)場合に、次いで、図6のプロセス600は終了する。すなわち、プロセス600は、これ以上作業負荷が利用可能でない場合に停止し得る。
図7は、図2の実行ファイル230の実行を助けるために図2のクレジットマネージャ210及び/又はコンフィグレーションコントローラ224を実装するよう実行され得るプロセス700を表すフローチャートである。図7で、コンフィグレーションコントローラ224(図2)は、実行ファイル230がグラフコンパイラ202から受け取られる及び/又は別なふうに利用可能であるかどうかを判定する(ブロック702)。実行ファイル230が受け取られない及び/又は別なふうに利用可能でないとコンフィグレーションコントローラ224が決定する(例えば、ブロック702の制御が否定の結果を返す)場合に、次いで、プロセス700は待ち続ける。代替的に、実行ファイル230が受け取られる及び/又は別なふうに利用可能であるとコンフィグレーションコントローラ224が決定する(ブロック702の制御が肯定の結果を返す)場合に、次いで、コンフィグレーションコントローラ224は、生成作業負荷ノード及び消費作業負荷ノードを実行するよう各々のCBBを識別するために、生成作業負荷ノード及び消費作業負荷ノードを識別するよう実行ファイル230をパースする(ブロック704)。これに応えて、コンフィグレーションコントローラ224は、生成作業負荷ノードを第1の選択されたCBB(例えば、畳み込みエンジン214)へ送る(ブロック706)。同様に、コンフィグレーションコントローラ224は、消費作業負荷ノードを第2の選択されたCBB(例えば、DSP220)へ送る(ブロック708)。
応答して、又は並行して、クレジットマネージャ210は、生成作業負荷ノードの実行を開始するよう第1の選択されたCBB(例えば、畳み込みエンジン214)へクレジットを分配する(ブロック710)。本願で開示されるいくつかの例では、ブロック706、708、及び/又は710の動作は、全ての生成作業負荷ノード及び/又は消費作業負荷ノードに対して作用する。例えば、クレジットマネージャ210は、全ての生成作業負荷ノードに対応するクレジットを全ての対応する生成CBBへ分配する。かような例では、ランタイム中の同期化は、対応するCBB及び/又はクレジットマネージャ210の間の通信に基づいて達成される。クレジットはクレジットマネージャ210へ及びそれから送出されるので、クレジットマネージャ210は、クレジットが第1の選択されたCBB(例えば、畳み込みエンジン214)から受け取られるかどうかを判定する(ブロック712)。クレジットが第1の選択されたCBB(例えば、畳み込みエンジン214)から取得も送出されていないとクレジットマネージャ210が決定する(例えば、ブロック712の制御が否定の結果を返す)場合に、次いで、プロセス700は待ち続ける。代替的に、クレジットが第1の選択されたCBB(例えば、畳み込みエンジン214)から取得及び/又は送出されたとクレジットマネージャ210が決定する(例えば、ブロック712の制御が肯定の結果を返す)場合に、クレジットマネージャ210は、消費作業負荷ノードの実行を開始するようクレジットを第2の選択されたCBB(例えば、DSP220)へ分配する(ブロック714)。
これに応えて、クレジットマネージャ210は、クレジットが第2の選択されたCBB(例えば、DSP220)から受け取られるかどうかを判定する(ブロック716)。クレジットが第2の選択されたCBB(例えば、DSP220)から取得も送出もされていないとクレジットマネージャ210が決定する(例えば、ブロック716の制御が否定の結果を返す)場合に、次いで、プロセス700は待ち続ける。代替的に、クレジットが第2の選択されたCBB(例えば、DSP220)から取得及び/又は送出されたとクレジットマネージャ210が決定する(ブロック716の制御が肯定の結果を返す)場合に、次いで、クレジットマネージャ210は、生成作業負荷の実行を続けるようクレジットを第1の選択されたCBB(例えば、畳み込みエンジン214)へ分配する(ブロック718)。
クレジットマネージャ210は、作業負荷ノード(例えば、生成作業負荷ノード又は消費作業負荷ノード)の実行が完了しているかどうかを判定する(ブロック720)。本願で開示されるいくつかの例では、クレジットマネージャ210は、バッファの生成されたクレジットを数えることに基づいて、作業負荷ノードの実行が完了しているかどうかを判定してよい。例えば、クレジットマネージャ210は、プロデューサとして振る舞うCBB(例えば、図5の第1CBB502)が、対応する作業負荷ノードを実行及び/又は別なふうに処理する間に、50個のクレジットを生成すべきであることを実行ファイル230から知り得る。従って、クレジットマネージャ210は、生成作業負荷ノード(例えば、第1CBB502)から50個のクレジットを取得し及び/又は別なふうに受け取ることに応答して、作業負荷の実行が完了していると決定し得る。作業負荷ノード(例えば、生成作業負荷ノード又は消費作業負荷ノード)の実行が完了してないとクレジットマネージャ210が決定する(ブロック720の制御が否定の結果を返す)場合に、次いで、制御はブロック712に戻り、クレジットマネージャ210は、クレジットが第1の選択されたCBB(例えば、畳み込みエンジン214)から受け取られるかどうかを判定する。本願で開示される他の例では、作業負荷ノード(例えば、生成作業負荷ノード又は消費作業負荷ノード)の実行が完了してないと(ブロック720の制御が否定の結果を返す)、かつ、生成作業負荷ノードの実行が完了しているとクレジットマネージャ210が決定する場合に、次いで、制御は、消費作業負荷ノードの実行を完了するためにブロック714へ進んでよい。
代替的に、作業負荷ノード(例えば、生成作業負荷ノード又は消費作業負荷ノード)の実行が完了しているとクレジットマネージャ210が決定する(ブロック720の制御が肯定の結果を返す)場合に、次いで、コンフィグレーションコントローラ224は、更なる生成及び消費作業負荷ノードが利用可能であるかどうかを判定する(ブロック722)。更なる生成及び消費作業負荷ノードが利用可能であるとコンフィグレーションコントローラ224が決定する(例えば、ブロック722の制御が肯定の結果を返す)場合に、制御はブロック704に戻る。代替的に、利用可能な更なる生成又は消費作業負荷ノードがないとコンフィグレーションコントローラ224が決定する(例えば、ブロック722の制御が否定の結果を返す)場合に、次いで、プロセス700は停止する。
図8は、図2、図3及び/又は図4の例となるグラフコンパイラ202、例となる1つ以上のセレクタ204、例となるセレクタ300、及び/又はアクセラレータ208を実装するように図6及び/又は図7の命令を実行するよう構造化されたプロセッサプラットフォーム800(例えば、コンパイル結合型デプロイメントシステム)の例のブロック図である。代替的に、本願で開示されるいくつかの例では、例となるグラフコンパイラ202、例となる1つ以上のセレクタ204、及び/又は例となるセレクタ300は、例となるアクセラレータ208に比べて図6の命令を実行するよう構造化された別個のコンパイルシステム(例えば、コンパイルプロセッサ)で動作可能であってよい。かような例となる分離システム動作では、アクセラレータ208は、コンパイルシステムに比べて図7の命令を実行するよう構造化された別個のデプロイメントシステム(例えば、デプロイメントプロセッサ)で実行ファイルを実行するよう動作可能であってよい。プロセッサプラットフォーム800は、例えば、サーバ、パーソナルコンピュータ、ワークステーション、自己学習マシン(例えば、ニューラルネットワーク)、モバイル機器(例えば、携帯電話機、スマートフォン、iPad(登録商標)などのタブレット)、パーソナルデジタルアシスタント(PDA)、インターネットアプライアンス、ゲーム機、パーソナルビデオレコーダ、セットトップボックス、ヘッドセット若しくは他のウェアラブル機器、又はあらゆる他のタイプのコンピュータデバイスであることができる。
表されている例のプロセッサプラットフォーム800は、プロセッサ810及びアクセラレータ812を含む。表されている例のプロセッサ810は、ハードウェアである。例えば、プロセッサ810は、1つ以上の集積回路、論理回路、マイクロプロセッサ、GPU、DSP、又は何らかの望ましいファミリ若しくは製造業者からのコントローラによって実装可能である。ハードウェアプロセッサは、半導体ベース(例えば、シリコンベース)のデバイスであってよい。その上、アクセラレータ812は、例えば、1つ以上の集積回路、論理回路、マイクロプロセッサ、GPU、DSP、FPGA、VPU、コントローラ、及び/又は何らかの望ましいファミリ若しくは製造業者からの他のCBBによって実装可能である。表されている例のアクセラレータ812は、ハードウェアである。ハードウェアアクセラレータは、半導体ベース(例えば、シリコンベース)のデバイスであってよい。この例では、アクセラレータ812は、例となるクレジットマネージャ210、例となるCnCファブリック212、例となる畳み込みエンジン214、例となるMMU216、例となるRNNエンジン218、例となるDSP220、例となるメモリ222、例となるコンフィグレーションコントローラ224、及び/又は例となるカーネルバンク232を実装する。この例では、プロセッサは、例となるCBBアナライザ302、例となるカーネルアナライザ304、例となるコンパイラインターフェイス306、及び/又はより一般的に、図2及び/又は図3の例となるセレクタ300及び/又は例となる1つ以上のセレクタ204、例となるグラフインターフェイス402、例となるセレクタインターフェイス404、例となる作業負荷アナライザ406、例となる実行ファイル生成部408、例となるデータストア410、例となるプラグイン236、及び/又はより一般的に、図2及び/又は図4の例となるグラフコンパイラ202、及び/又は例となるクレジットマネージャ210、例となるCnCファブリック212、例となる畳み込みエンジン214、例となるMMU216、例となるRNNエンジン218、例となるDSP220、例となるメモリ222、例となるコンフィグレーションコントローラ224、例となるカーネルバンク232、及び/又はより一般的に、図2の例となるアクセラレータ208を実装する。
表されている例のプロセッサ810は、ローカルメモリ811(例えば、キャッシュ)を含む。表されている例のプロセッサ810は、バス818を介して、揮発性メモリ814及び不揮発性メモリ816を含むメインメモリと通信している。更に、表されている例のアクセラレータ812は、ローカルメモリ813(例えば、キャッシュ)を含む。表されている例のアクセラレータ812は、バス818を介して、揮発性メモリ814及び不揮発性メモリ816を含むメインメモリと通信している。揮発性メモリ814は、同期型動的ランダムアクセスメモリ(SDRAM)、動的ランダムアクセスメモリ(DRAM)、RAMBUS(登録商標)動的ランダムアクセスメモリ(RDRAM(登録商標))及び/又はあらゆる他のタイプの欄無アクセスメモリデバイスによって実装されてよい。不揮発性メモリ816は、フラッシュメモリ及び/又はあらゆる他の望ましいタイプのメモリデバイスによって実装されてよい。メインメモリ814、816へのアクセスは、メモリコントローラによって制御される。
表されている例のプロセッサプラットフォーム800はまた、インターフェイス回路820を含む。インターフェイス回路820は、Ethernetインターフェイス、ユニバーサルシリアルバス(USB)、Bluetooth(登録商標)インターフェイス、近距離通信(NFC)インターフェイス、及び/又はPCIエクスプレスインターフェイスなどの如何なるタイプのインターフェイスによっても実装されてよい。
表されている例では、1つ以上の入力デバイス822がインターフェイス回路820へ接続されている。入力デバイス822は、ユーザがプロセッサ810及び/又はアクセラレータ812にデータ及び/又はコマンドを入力することを可能にする。入力デバイスは、例えば、オーディオセンサ、マイクロホン、カメラ(静止若しくはビデオ)、キーボード、ボタン、マウス、タッチスクリーン、トラックパッド、トラックボール、アイソポイント(isopoint)及び/又は音声認識システムによって実装可能である。
1つ以上の出力デバイス824も、表されている例のインターフェイス回路820へ接続されている。出力デバイス824は、例えば、表示デバイス(例えば、発光ダイオード(LED)、有機発光ダイオード(OLED)、液晶ディスプレイ(LCD)、陰極線管ディスプレイ(CRT)、インプレイススイッチング(In-Place Switching,IPS)ディスプレイ、タッチスクリーン、など)、触覚出力デバイス、プリンタ及び/又はスピーカによって実装可能である。表されている例のインターフェイス回路820は、よって、通常は、グラフィクスドライバカード、グラフィクスドライバチップ及び/又はグラフィクスドライバプロセッサを含む。
表されている例のインターフェイス回路820はまた、ネットワーク826を介した外部のマシン(例えば、あらゆる種類のコンピュータデバイス)とのデータの交換を助けるよう、送信器、受信器、トランシーバ、モデム、住宅用ゲートウェイ、無線アクセスポイント、及び/又はネットワークインターフェイスなどの通信デバイスを含む。通信は、例えば、Ethernet接続、デジタル加入者回線(DSL)接続、電話回線接続、同軸ケーブルシステム、衛星システム、ラインオブサイト(Line-of-Site)無線システム、セルラー電話システム、などを介することができる。
表されている例のプロセッサプラットフォーム800はまた、ソフトウェア及び/又はデータを記憶する1つ以上の大容量記憶デバイス828を含む。かような大容量記憶デバイス828の例には、フロッピーディスクドライブ、ハードドライブディスク、コンパクトディスクドライブ、ブルーレイディスクドライブ、レイド(RAID,Redundant Array of Independent Disks)システム、及びデジタルバーサタイルディスク(DVD)ドライブがある。
図6及び/又は図7のマシン実行可能な命令832は、大容量記憶デバイス828に、揮発性メモリ814に、不揮発性メモリ816に、及び/又はCD若しくはDVDなどのリムーバブル式非一時コンピュータ可読記憶媒体に記憶されてよい。
以上より、例となる方法、装置及び製品が開示されており、それらはアクセラレータにおいてヘテロジニアスコンポーネントを設定することが理解されるだろう。開示されている方法、装置及び製品は、作業負荷内の作業負荷ノードごとにセレクタを生成及び/又は別なふうに提供することによって、コンピュータデバイスを使用する効率を改善する。そのようなものとして、開示されている方法、装置及び製品は、グラフコンパイラが、アクセラレータにおける夫々のヘテロジニアス計算構築ブロック及び/又はカーネルについて個別的に設定される必要なしに、実行ファイルを生成することを可能にする。その上、本願で開示される例は、アクセラレータにおけるヘテロジニアス計算構築ブロック及び/又はカーネルからクレジットを分配し及び/又は受け取るクレジットマネージャを含む。このようにして、計算構築ブロック及び/又はカーネルは、センターファブリック及びクレジットマネージャを通じて他のヘテロジニアス計算構築ブロック及び/又はカーネルと通信することができる。本願で開示される例は、グラフコンパイラがアクセラレータにおける任意の数のヘテロジニアス計算構築ブロック及び/又はカーネルについて作業負荷(例えば、受け取られグラフ)を効率的にマッピングすることを可能にする。本願で開示される例は、同様に、グラフジェネレータが、更なる計算構築ブロック及び/又はカーネルが後にアクセラレータに含まれる場合に、あるいは、現在の計算構築ブロック及び/又はカーネルが変更又は調整される場合に、受け取られる作業負荷(例えば、グラフ)を効率的にマッピングすることを可能にする。開示されている方法、装置及び製品は、従って、コンピュータの機能の1つ以上の改善を対象としている。
アクセラレータにおいてヘテロジニアスコンポーネントを設定するための方法及び装置に対する例となる方法、装置、システム、及び製品が本願では開示されている。更なる例及びそれらの組み合わせは、次を含む。
例1は、アクセラレータにおいてヘテロジニアスコンポーネントを設定する装置であって、
作業負荷において作業負荷ノードを識別し、該作業負荷ノードについてセレクタを生成するグラフコンパイラと、
計算構築ブロックの入力条件及び出力条件を識別する前記セレクタと
を有し、
前記グラフコンパイラは、前記識別された入力条件及び出力条件を前記セレクタから取得することに応答して、前記作業負荷ノードを前記計算構築ブロックにマッピングする、
装置を含む。
例2は、例1の装置であって、前記グラフコンパイラが、前記作業負荷において第2作業負荷ノードを識別し、該第2作業負荷ノードについて第2セレクタを生成する、装置を含む。
例3は、例2の装置であって、前記第2セレクタが、カーネルの第2入力条件及び第2出力条件を識別する、装置を含む。
例4は、例1の装置であって、前記作業負荷が、前記グラフコンパイラによって取得された前記作業負荷ノードを含むグラフである、装置を含む。
例5は、例1の装置であって、前記入力条件が、前記計算構築ブロックの入力要件に対応し、前記出力条件が、前記計算構築ブロックの実行の結果に対応する、装置を含む。
例6は、例1の装置であって、前記グラフコンパイラが、前記作業負荷ノードを前記計算構築ブロックにマッピングすることに応答して、実行ファイルを生成する、装置を含む。
例7は、例1の装置であって、前記グラフコンパイラが、前記計算構築ブロックに対する前記作業負荷ノードのマッピングを可能にするよう、前記識別された入力条件及び出力条件に基づいて、前記作業負荷ノードと前記計算構築ブロックとの間の変換レイヤを形成するプラグインを更に含む、装置を含む。
例8は、実行される場合に、少なくとも1つのプロセッサに、少なくとも
作業負荷において作業負荷ノードを識別することと
前記作業負荷ノードについて、該作業負荷ノードを実行するための計算構築ブロックに関連したセレクタを生成することと、
前記計算構築ブロックの入力条件及び出力条件を識別することと、
前記識別された入力条件及び出力条件を取得することに応答して、前記作業負荷ノードを前記計算構築ブロックにマッピングすることと
を実行させる命令を有する少なくとも1つの非一時的なコンピュータ可読記憶媒体を含む。
例9は、例8の少なくとも1つの非一時的なコンピュータ可読記憶媒体であって、前記命令が、実行される場合に、前記少なくとも1つのプロセッサに、更に
前記作業負荷において第2作業負荷ノードを識別することと、
前記第2作業負荷ノードについて第2セレクタを生成することと
を実行させる、少なくとも1つの非一時的なコンピュータ可読記憶媒体を含む。
例10は、例9の少なくとも1つの非一時的なコンピュータ可読記憶媒体であって、前記命令が、実行される場合に、前記少なくとも1つのプロセッサに、更に
カーネルの第2入力条件及び第2出力条件を識別することを実行させる、
少なくとも1つの非一時的なコンピュータ可読記憶媒体を含む。
例11は、例8の少なくとも1つの非一時的なコンピュータ可読記憶媒体であって、前記作業負荷が、前記作業負荷ノードを含むグラフである、少なくとも1つの非一時的なコンピュータ可読記憶媒体を含む。
例12は、例8の少なくとも1つの非一時的なコンピュータ可読記憶媒体であって、前記入力条件が、前記計算構築ブロックの入力要件に対応し、前記出力条件が、前記計算構築ブロックの実行の結果に対応する、少なくとも1つの非一時的なコンピュータ可読記憶媒体を含む。
例13は、例8の少なくとも1つの非一時的なコンピュータ可読記憶媒体であって、前記命令が、実行される場合に、前記少なくとも1つのプロセッサに、更に
前記作業負荷ノードを前記計算構築ブロックにマッピングすることに応答して実行ファイルを生成することを実行させる、
少なくとも1つの非一時的なコンピュータ可読記憶媒体を含む。
例14は、例8の少なくとも1つの非一時的なコンピュータ可読記憶媒体であって、前記命令が、実行される場合に、前記少なくとも1つのプロセッサに、更に
前記計算構築ブロックに対する前記作業負荷ノードのマッピングを可能にするよう、前記識別された入力条件及び出力条件に基づいて、前記作業負荷ノードと前記計算構築ブロックとの間の変換レイヤを形成することを実行させる、
少なくとも1つの非一時的なコンピュータ可読記憶媒体を含む。
例15は、
作業負荷において作業負荷ノードを識別し、該作業負荷ノードについて、該作業負荷ノードを実行するための計算構築ブロックに関連した選択手段を生成するコンパイル手段と、
前記計算構築ブロックの入力条件及び出力条件を識別する前記選択手段と
を有し、
前記コンパイル手段は更に、前記識別された入力条件及び出力条件を取得することに応答して、前記作業負荷ノードを前記計算構築ブロックにマッピングする、
装置を含む。
例16は、例15の装置であって、前記コンパイル手段が更に、前記作業負荷において第2作業負荷ノードを識別し、該第2作業負荷ノードについて第2選択手段を生成する、装置を含む。
例17は、例16の装置であって、前記第2選択手段が更に、カーネルの第2入力条件及び第2出力条件を識別する、装置を含む。
例18は、例15の装置であって、前記作業負荷が、前記作業負荷ノードを含むグラフである、装置を含む。
例19は、例15の装置であって、前記入力条件が、前記計算構築ブロックの入力要件に対応し、前記出力条件が、前記計算構築ブロックの実行の結果に対応する、装置を含む。
例20は、例15の装置であって、前記コンパイル手段が更に、前記作業負荷ノードを前記計算構築ブロックにマッピングすることに応答して実行ファイルを生成する、装置を含む。
例21は、例15の装置であって、前記コンパイル手段が更に、前記計算構築ブロックに対する前記作業負荷ノードのマッピングを可能にするよう、前記識別された入力条件及び出力条件に基づいて、前記作業負荷ノードと前記計算構築ブロックとの間の変換レイヤを形成する、装置を含む。
例22は、アクセラレータにおいてヘテロジニアスコンポーネントを設定する方法であって、
作業負荷において作業負荷ノードを識別することと、
前記作業負荷ノードについて、該作業負荷ノードを実行するための計算構築ブロックに関連したセレクタを生成することと、
前記計算構築ブロックの入力条件及び出力条件を識別することと、
前記識別された入力条件及び出力条件を取得することに応答して前記作業負荷ノードを前記計算構築ブロックにマッピングすることと
を有する方法を含む。
例23は、例22の方法であって、
前記作業負荷において第2作業負荷ノードを識別することと、
前記第2作業負荷ノードについて第2セレクタを生成することと
を更に含む方法を含む。
例24は、例23の方法であって、カーネルの第2入力条件及び第2出力条件を識別することを更に含む方法を含む。
例25は、例22の方法であって、前記作業負荷が、前記作業負荷ノードを含むグラフである、方法を含む。
例26は、例22の方法であって、前記入力条件が、前記計算構築ブロックの入力要件に対応し、前記出力条件が、前記計算構築ブロックの実行の結果に対応する、方法を含む。
例27は、例22の方法であって、前記作業負荷ノードを前記計算構築ブロックにマッピングすることに応答して実行ファイルを生成することを更に含む方法を含む。
例28は、例22の方法であって、前記計算構築ブロックに対する前記作業負荷ノードのマッピングを可能にするよう、前記識別された入力条件及び出力条件に基づいて、前記作業負荷ノードと前記計算構築ブロックとの間の変換レイヤを形成することを更に含む方法を含む。
例29は、ヘテロジニアスコンポーネントを動作させる装置であって、
多数のデータスロットを含むバッファと、
クレジットマネージャと、
第1クレジット値を有し、第1作業負荷ノードを実行し、該第1作業負荷ノードを実行することに応答して、前記多数のデータスロットのサブセットにデータを書き込み、前記第1クレジット値よりも小さい第2クレジット値を前記クレジットマネージャへ送る第1計算構築ブロックと、
前記クレジットマネージャから前記第2クレジット値を受け取ることに応答して、前記多数のデータスロットの前記サブセット内のデータを読み出し、第2作業負荷ノードを実行する第2計算構築ブロックと
を有する装置を含む。
例30は、例29の装置であって、前記第1作業負荷ノードを供給するよう制御メッセージ及び設定メッセージを前記第1計算構築ブロックへ送るコントローラを更に含む装置を含む。
例31は、例30の装置であって、前記コントローラが、前記第1作業負荷ノードを前記第1計算構築ブロックへ送り、前記第2作業負荷ノードを前記第2計算構築ブロックへ送る、装置を含む。
例32は、例29の装置であって、前記クレジットマネージャが更に、前記第1作業負荷ノードの実行が完了しているかどうかを判定する、装置を含む。
例33は、例29の装置であって、前記第2計算構築ブロックが更に、前記第2クレジット値よりも小さい第3クレジット値を前記クレジットマネージャへ送る、装置を含む。
例34は、例33の装置であって、前記クレジットマネージャが更に、前記第3クレジット値を前記第1計算構築ブロックへ送る、装置を含む。
例35は、実行される場合に、少なくとも1つのプロセッサに、少なくとも
第1作業負荷ノードを実行することと、
前記第1作業負荷ノードを実行することに応答して、第1クレジット値を用いて多数のデータスロットにデータを書き込むことと、
前記第1クレジット値よりも小さい第2クレジット値をクレジットマネージャへ送ることと、
前記クレジットマネージャから前記第2クレジット値を受け取ることに応答して、前記第2クレジット値を用いて前記多数のデータスロット内のデータを読み出すことと、
第2作業負荷ノードを実行することと
を実行させる命令を有する少なくとも1つの非一時的なコンピュータ可読記憶媒体を含む。
例36は、例35の少なくとも1つの非一時的なコンピュータ可読記憶媒体であって、前記命令が、実行されるときに更に、前記少なくとも1つのプロセッサに、前記第1作業負荷ノードを供給するよう制御メッセージ及び設定メッセージを送らせる、少なくとも1つの非一時的なコンピュータ可読記憶媒体を含む。
例37は、例36の少なくとも1つの非一時的なコンピュータ可読記憶媒体であって、前記命令が、実行されるときに更に、前記少なくとも1つのプロセッサに、前記第1作業負荷ノードを第1計算構築ブロックへ送らせ、第2作業負荷ノードを前記第2計算構築ブロックへ送らせる、少なくとも1つの非一時的なコンピュータ可読記憶媒体を含む。
例38は、例35の少なくとも1つの非一時的なコンピュータ可読記憶媒体であって、前記命令が、実行されるときに更に、前記少なくとも1つのプロセッサに、前記第1作業負荷ノードの実行が完了しているかどうかを判定させる、少なくとも1つの非一時的なコンピュータ可読記憶媒体を含む。
例39は、例35の少なくとも1つの非一時的なコンピュータ可読記憶媒体であって、前記命令は、実行されるときに更に、前記少なくとも1つのプロセッサに、前記第2クレジット値よりも小さい第3クレジット値を前記クレジットマネージャへ送らせる、少なくとも1つの非一時的なコンピュータ可読記憶媒体を含む。
例40は、例39の少なくとも1つの非一時的なコンピュータ可読記憶媒体であって、前記命令は、実行されるときに更に、前記少なくとも1つのプロセッサに、前記第3クレジット値を計算構築ブロックへ送らせる、少なくとも1つの非一時的なコンピュータ可読記憶媒体を含む。
例41は、
第1作業負荷ノードを実行し、該第1作業負荷ノードを実行することに応答して、第1クレジット値を用いて多数のデータスロットにデータを書き込み、前記第1クレジット値よりも小さい第2クレジット値をクレジット管理手段へ送る第1計算手段と、
前記クレジット管理手段から前記第2クレジット値を受け取ることに応答して、前記第2クレジット値を用いて前記多数のデータスロット内のデータを読み出し、第2作業負荷ノードを実行する第2計算手段と
を有する装置を含む。
例42は、例41の装置であって、前記第1作業負荷ノードを供給するよう制御メッセージ及び設定メッセージを前記第1計算手段へ送る制御手段を更に含む装置を含む。
例43は、例42の装置であって、前記制御手段が更に、前記第1作業負荷ノードを前記第1計算手段へ送り、前記第2作業負荷ノードを前記第2計算手段へ送る、装置を含む。
例44は、例41の装置であって、前記クレジット管理手段が更に、前記第1作業負荷ノードの実行が完了しているかどうかを判定する、装置を含む。
例45は、例41の装置であって、前記第2計算手段が更に、前記第2クレジット値よりも小さい第3クレジット値を前記クレジット管理手段へ送る、装置を含む。
例46は、例45の装置であって、前記クレジット管理手段が更に、前記第3クレジット値を前記第1計算手段へ送る、装置を含む。
例47は、ヘテロジニアスコンポーネントを動作させる方法であって、
第1作業負荷ノードを実行することと、
前記第1作業負荷ノードを実行することに応答して、第1クレジット値を用いて多数のデータスロットにデータを書き込むことと、
前記第1クレジット値よりも小さい第2クレジット値をクレジットマネージャへ送ることと、
前記クレジットマネージャから前記第2クレジット値を受け取ることに応答して、前記多数のデータスロット内のデータを読み出すことと、
第2作業負荷ノードを実行することと
を有する方法を含む。
例48は、例47の方法であって、前記第1作業負荷ノードを供給するよう制御メッセージ及び設定メッセージを計算構築ブロックへ送ることを更に含む方法を含む。
例49は、例47の方法であって、前記第1作業負荷ノードを第1計算構築ブロックへ送り、前記第2作業負荷ノードを第2計算構築ブロックへ送ることを更に含む方法を含む。
例50は、例47の方法であって、前記第1作業負荷ノードの実行が完了しているかどうかを判定することを更に含む方法を含む。
例51は、例47の方法であって、前記第2クレジット値よりも小さい第3クレジット値を前記クレジットマネージャへ送ることを更に含む方法を含む。
例52は、例51の方法であって、前記第3クレジット値を計算構築ブロックへ送ることを更に含む方法を含む。
特定の例となる方法、装置及び製品が本願で開示されてきたが、本特許がカバーする範囲はそれらに制限されない。対照的に、本特許は、本特許の請求の範囲に含まれる全ての方法、装置及び製品をカバーする。
これによって、続く特許請求の範囲は、この参照によってこの詳細な説明に組み込まれ、各請求項は、本開示の別個の実施形態として独立している。