(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-08-29
(54)【発明の名称】データ処理アレイとともに使用するための多数のオーバーレイ
(51)【国際特許分類】
G06F 9/50 20060101AFI20240822BHJP
【FI】
G06F9/50 150Z
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2024510377
(86)(22)【出願日】2022-08-15
(85)【翻訳文提出日】2024-02-19
(86)【国際出願番号】 US2022074960
(87)【国際公開番号】W WO2023023480
(87)【国際公開日】2023-02-23
(32)【優先日】2021-08-20
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2021-08-20
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】591025439
【氏名又は名称】ザイリンクス インコーポレイテッド
【氏名又は名称原語表記】XILINX INCORPORATED
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】オズグル,バリス
(72)【発明者】
【氏名】クラーク,デイビッド
(72)【発明者】
【氏名】マッコルガン,ピーター
(72)【発明者】
【氏名】ミュンツ,ステファン
(72)【発明者】
【氏名】スチュアート,ディラン
(72)【発明者】
【氏名】ドゥアルテ,ペドロ・ミゲル・パロラ
(72)【発明者】
【氏名】ノゲラ・セラ,フアン・ホタ
(57)【要約】
データ処理アレイとともに多数のオーバーレイを使用することは、データ処理アレイ内にアプリケーションをロードすることを含む。データ処理アレイは、プロセッサを各々有する複数の計算タイルを含む。アプリケーションは、プロセッサによって実行可能なカーネルを指定し、データを複数の計算タイルに伝達するストリームチャネルを実現する。アプリケーションのランタイム中に、複数のオーバーレイが、データ処理アレイ内に順次実現される。各オーバーレイは、ストリームチャネルを介して、データ処理アレイ内にデータ移動の異なるモードを実現する。実現された各オーバーレイに対して、それぞれのデータ移動のモードに基づいてデータを複数の計算タイルに移動させることによって、ワークロードが実行される。
【特許請求の範囲】
【請求項1】
方法であって、
プロセッサを各々有する複数の計算タイルを含むデータ処理アレイ内にアプリケーションであって、
前記アプリケーションが、前記プロセッサによって実行可能なカーネルを指定し、データを前記複数の計算タイルに伝達するストリームチャネルを実現する、アプリケーションをロードすることと、
前記アプリケーションのランタイム中に、前記データ処理アレイ内に複数のオーバーレイであって、各オーバーレイが、前記ストリームチャネルを介して、前記データ処理アレイ内にデータ移動の異なるモードを実現する、複数のオーバーレイを順次実現することと、
実現された各オーバーレイに対して、前記それぞれのデータ移動のモードに基づいて、データを前記複数の計算タイルに移動させることによって、ワークロードを実行することと、を含む、方法。
【請求項2】
前記複数のオーバーレイが、異なるカーネルを前記計算タイルにロードするか、又は前記ストリームチャネルを修正する、異なるアプリケーションを前記データ処理アレイにロードすることなく、前記アプリケーションのための前記データ処理アレイ内に実現される、請求項1に記載の方法。
【請求項3】
前記データ処理アレイが、前記複数の計算タイルのサブセットを各々含む複数のパーティションに細分されており、各パーティションが、異なるアプリケーションを同時に実行し、前記パーティションによって実行される前記アプリケーションに特有の複数の異なるオーバーレイを順次実現するように適合されている、請求項1に記載の方法。
【請求項4】
複数のオーバーレイを順次実現することが、
第1の行列乗算演算を含む第1のワークロードを実行するために、前記複数のオーバーレイのうちの第1のオーバーレイを用いて前記データ処理アレイを設定することと、
第2の行列乗算演算を含む第2のワークロードを実行するために、前記複数のオーバーレイのうちの第2のオーバーレイを用いて前記データ処理アレイを設定することと、を含み、
前記第1の行列乗算演算及び前記第2の行列乗算演算が、異なる次元のものである、請求項1に記載の方法。
【請求項5】
前記アプリケーションが、ニューラルネットワークを実現し、前記ニューラルネットワークの各レイヤが、前記複数のオーバーレイのうちの1つにマッピングされており、前記複数のオーバーレイのうちの異なるオーバーレイが、経時的にロードされて、前記ニューラルネットワークのそれぞれのレイヤを実現する、請求項1に記載の方法。
【請求項6】
各オーバーレイが、ストリームチャネルへのバッファの異なるマッピングを指定する、請求項1に記載の方法。
【請求項7】
各オーバーレイの前記データ移動のモードが、前記ストリームチャネルを介して伝達される特徴マップの数及び重みの数によって特徴付けられている、請求項1に記載の方法。
【請求項8】
複数のオーバーレイを順次実現することが、
各オーバーレイに対して、前記ストリームチャネルへのバッファの異なるマッピングを用いて複数のダイレクトメモリアクセス回路をプログラムすることを含む、請求項1に記載の方法。
【請求項9】
前記複数のオーバーレイのうちの選択されたオーバーレイに対して、前記複数の計算タイルのうちの選択された計算タイルに、ランタイムパラメータを提供することを更に含み、前記ランタイムパラメータが、前記選択された計算タイルによって実行されるカーネルの動作パラメータを設定する、請求項1に記載の方法。
【請求項10】
前記選択されたオーバーレイが、前記アプリケーションの特定のレイヤに対応し、前記ランタイムパラメータが、前記選択されたオーバーレイによって実現される前記特定のレイヤの少なくとも1つの次元を指定する、請求項9に記載の方法。
【請求項11】
前記ランタイムパラメータが、前記選択された計算タイルによって実行される前記カーネルの関数を選択的に有効化する、請求項9に記載の方法。
【請求項12】
前記複数のオーバーレイのうちの選択されたオーバーレイに対して、前記複数の計算タイルのうちの選択された計算タイルに、ランタイムパラメータを提供することを更に含み、前記ランタイムパラメータが、実行のために前記選択された計算タイルの複数のカーネルからカーネルを選択する、請求項1に記載の方法。
【請求項13】
システムであって、
集積回路内に配置されたデータ処理アレイであって、前記データ処理アレイが、プロセッサを各々有する複数の計算タイルを含む、データ処理アレイを備え、
前記データ処理アレイが、アプリケーションを実行するように構成されており、前記アプリケーションが、前記プロセッサによって実行可能なカーネルと、データを前記複数の計算タイルに伝達するストリームチャネルと、を指定し、
前記アプリケーションのランタイム中に、前記データ処理アレイが、複数の異なるオーバーレイを実現するように適合されており、各オーバーレイが、ワークロードを実行するために、前記ストリームチャネルを介して、前記データ処理アレイ内にデータ移動の異なるモードを実現する、システム。
【請求項14】
前記アプリケーションが、ニューラルネットワークを実現し、前記ニューラルネットワークの各レイヤが、前記複数のオーバーレイのうちの1つにマッピングされており、前記複数のオーバーレイのうちの異なるオーバーレイが、経時的にロードされて、前記ニューラルネットワークのそれぞれのレイヤを実現する、請求項13に記載のシステム。
【請求項15】
前記複数のオーバーレイのうちの第1のオーバーレイが、第1の行列乗算演算を含む第1のワークロードを実行するように、前記データ処理アレイを設定し、
前記複数のオーバーレイのうちの第2のオーバーレイが、第2の行列乗算演算を含む第2のワークロードを実行するように、前記データ処理アレイを設定し、
前記第1の行列乗算演算及び前記第2の行列乗算演算が、異なる次元のものである、請求項13に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願の相互参照
本出願は、2021年8月20日に出願された米国特許仮出願第63/235,319号、及び2021年8月20日に出願された米国特許仮出願第63/235,532号の利益を主張し、これらの両方は、参照によりその全体が本明細書に組み込まれる。
【0002】
本開示は、集積回路(integrated circuit、IC)に関し、より具体的には、IC内に実装されたデータ処理アレイで多数のオーバーレイを使用することに関する。本開示はまた、1つ以上のアレイコントローラを使用して、データ処理アレイの動作を制御することに関する。
【背景技術】
【0003】
集積回路(IC)は、ますます洗練されたコンピューティングアーキテクチャを提供するために、時間とともに進化してきた。いくつかのICは、単一のプロセッサを含むコンピューティングアーキテクチャを利用するが、他のICは、多数のプロセッサを含む。更に、他のICは、アレイに配列された多数のプロセッサを含む。そのようなICは、単一プロセッサアーキテクチャの能力及びマルチコアプロセッサアーキテクチャさえもはるかに超える、かなりの計算能力並びに高度な並列性を提供することが可能である。
【発明の概要】
【0004】
1つ以上の例示的な実装形態では、方法は、データ処理アレイ内にアプリケーションをロードすることを含む。データ処理アレイは、プロセッサを各々有する複数の計算タイルを含む。アプリケーションは、プロセッサによって実行可能なカーネルを指定し、データを複数の計算タイルに伝達するストリームチャネルを実現する。本方法は、アプリケーションのランタイム中に、データ処理アレイ内に複数のオーバーレイを順次実現することを含む。各オーバーレイは、ストリームチャネルを介して、データ処理アレイ内にデータ移動の異なるモードを実現する。本方法は、実現された各オーバーレイに対して、それぞれのデータ移動のモードに基づいて、データを複数の計算タイルに移動させることによって、ワークロードを実行することを含む。
【0005】
一態様では、複数のオーバーレイは、異なるカーネルを計算タイルにロードするか、又はストリームチャネルを修正する、異なるアプリケーションをデータ処理アレイにロードすることなく、アプリケーションのためのデータ処理アレイ内に実現される。
【0006】
別の態様では、データ処理アレイは、複数の計算タイルのサブセットを各々含む複数のパーティションに細分されている。各パーティションは、異なるアプリケーションを同時に実行し、パーティションによって実行されるアプリケーションに特有の複数の異なるオーバーレイを順次実現するように適合されている。
【0007】
別の態様では、複数のオーバーレイを順次実現することは、第1の行列乗算演算を含む第1のワークロードを実行するように、複数のオーバーレイのうちの第1のオーバーレイを用いてデータ処理アレイを設定することと、第2の行列乗算演算を含む第2のワークロードを実行するように、複数のオーバーレイのうちの第2のオーバーレイを用いてデータ処理アレイを設定することとを含む。第1の行列乗算演算及び第2の行列乗算演算は、異なる次元のものである。
【0008】
別の態様では、アプリケーションは、ニューラルネットワークを実現する。ニューラルネットワークの各レイヤは、複数のオーバーレイのうちの1つにマッピングされている。複数のオーバーレイのうちの異なるオーバーレイは、経時的にロードされて、ニューラルネットワークのそれぞれのレイヤを実現する。
【0009】
別の態様では、各オーバーレイは、ストリームチャネルへのバッファの異なるマッピングを指定する。
【0010】
別の態様では、各オーバーレイのデータ移動のモードは、ストリームチャネルを介して伝達される特徴マップの数及び重みの数によって特徴付けられている(例えば、指定する)。例えば、オーバーレイは、ストリームチャネルのうちの特定のものを介して送信されるべき特定の重み及び特徴マップを指定する。
【0011】
別の態様では、複数のオーバーレイを順次実現することは、各オーバーレイに対して、ストリームチャネルへのバッファの異なるマッピングを用いて複数のダイレクトメモリアクセス回路をプログラムすることを含む。
【0012】
別の態様では、本方法は、複数のオーバーレイのうちの選択されたオーバーレイに対して、複数の計算タイルのうちの選択された計算タイルに、ランタイムパラメータを提供することを含む。ランタイムパラメータは、選択された計算タイルによって実行されるカーネルの動作パラメータを設定する。
【0013】
別の態様では、選択されたオーバーレイは、アプリケーションの特定のレイヤに対応する。ランタイムパラメータは、選択されたオーバーレイによって実現される特定のレイヤの少なくとも1つの次元を指定する。
【0014】
別の態様では、ランタイムパラメータは、選択された計算タイルによって実行されるカーネルの関数を選択的に有効化する。
【0015】
別の態様では、本方法は、複数のオーバーレイのうちの選択されたオーバーレイに対して、複数の計算タイルのうちの選択された計算タイルに、ランタイムパラメータを提供することを含む。ランタイムパラメータは、実行のために選択された計算タイルの複数のカーネルからカーネルを選択する。
【0016】
1つ以上の例示的な実装形態では、システムは、集積回路内に配置されたデータ処理アレイを含む。データ処理アレイは、プロセッサを各々有する複数の計算タイルを含む。データ処理アレイは、アプリケーションを実行するように構成されている。アプリケーションは、プロセッサによって実行可能なカーネルと、データを複数の計算タイルに伝達するストリームチャネルと、を指定する。アプリケーションのランタイム中に、データ処理アレイは、複数の異なるオーバーレイを実現するように適合されている。各オーバーレイは、ワークロードを実行するように、ストリームチャネルを介して、データ処理アレイ内にデータ移動の異なるモードを実現する。
【0017】
一態様では、アプリケーションは、ニューラルネットワークを実現し、ニューラルネットワークの各レイヤは、複数のオーバーレイのうちの1つにマッピングされている。複数のオーバーレイのうちの異なるオーバーレイは、経時的にロードされて、ニューラルネットワークのそれぞれのレイヤを実現する。
【0018】
別の態様では、各オーバーレイは、ストリームチャネルへのバッファの異なるマッピングを指定する。
【0019】
別の態様では、各オーバーレイのモードは、ストリームチャネルを介して伝達される特徴マップの数及び重みの数によって特徴付けられている。
【0020】
別の態様では、複数のオーバーレイのうちの選択されたオーバーレイに対して、複数の計算タイルのうちの選択された計算タイルに提供されるランタイムパラメータは、選択された計算タイルによって実行されるカーネルの動作パラメータを設定する。
【0021】
別の態様では、選択されたオーバーレイは、アプリケーションの特定のレイヤに対応する。ランタイムパラメータは、選択されたオーバーレイによって実現される特定のレイヤの1つ以上の次元を指定する。
【0022】
別の態様では、選択されたオーバーレイは、アプリケーションの特定のレイヤに対応する。ランタイムパラメータは、選択された計算タイルによって実行されるカーネルの関数を選択的に有効化する。
【0023】
別の態様では、複数のオーバーレイのうちの第1のオーバーレイは、第1の行列乗算演算を含む第1のワークロードを実行するように、データ処理アレイを設定する。複数のオーバーレイのうちの第2のオーバーレイは、第2の行列乗算演算を含む第2のワークロードを実行するように、データ処理アレイを設定する。第1の行列乗算演算及び第2の行列乗算演算は、異なる次元のものである。
【0024】
1つ以上の例示的な実装形態では、集積回路は、プロセッサを各々有する複数の計算タイルを含むデータ処理アレイを含む。集積回路は、データ処理アレイに結合されたアレイコントローラを含む。アレイコントローラは、アプリケーションを実行するためにデータ処理アレイの複数の計算タイルを設定するように適合されている。アプリケーションは、プロセッサによって実行可能なカーネルと、データを複数の計算タイルに伝達するストリームチャネルと、を指定する。アレイコントローラは、アプリケーションを用いて設定されるデータ処理アレイによって、ワークロードの実行を開始するように構成されている。
【0025】
1つ以上の例示的な実装形態では、集積回路は、データ処理アレイを含む。データ処理アレイは、プロセッサを各々有する複数の計算タイルを含む。データ処理アレイは、複数の計算タイルの第1のサブセットを含む第1のパーティションと、複数の計算タイルの第2のサブセットを含む第2のパーティションとに細分されている。集積回路は、第1のアプリケーションを実行するために第1のパーティションを設定するように適合された第1のアレイコントローラを含む。第1のアプリケーションは、第1のパーティションのプロセッサによって実行可能なカーネルと、第1のパーティションの複数の計算タイルの第1のサブセットにデータを伝達するストリームチャネルと、を指定する。集積回路は、第2のアプリケーションを実行するために第2のパーティションを設定するように適合された第2のアレイコントローラを含む。第2のアプリケーションは、第2のパーティションのプロセッサによって実行可能なカーネルと、第2のパーティションの複数の計算タイルの第2のサブセットにデータを伝達するストリームチャネルと、を指定する。第1のアレイコントローラ及び第2のアレイコントローラは各々、それぞれのパーティション内のワークロードの実行を開始するように構成されている。
【0026】
この概要のセクションは、単に特定の概念を導入するために提供され、特許請求される主題の任意の重要な又は本質的な特徴を特定するためには提供されない。本発明の構成の他の特徴は、添付図面及び以下の詳細な説明から明らかになるであろう。
【0027】
本発明の構成は、例として添付図面に例解されている。しかしながら、図面は、本発明の構成を、示される特定の実装形態のみに限定するものと解釈されるべきではない。以下の詳細な説明を検討し、図面を参照すると、種々の態様及び利点が明らかになるであろう。
【図面の簡単な説明】
【0028】
【
図1】データ処理(data processing、DP)アレイを含む例示的なシステムを例解する。
【
図2】DPアレイ用のアプリケーションを生成するための実装フローの例を例解する。
【
図4】DPアレイの計算タイルの例示的な実装形態を例解する。
【
図5】DPアレイのメモリタイル例示的な実装形態を例解する。
【
図6】DPアレイのインターフェースタイルの例示的な実装形態を例解する。
【
図7】DPアレイの計算タイル間のカスケード接続性の例を例解する。
【
図8】計算タイルが、別の計算タイルへのカスケード接続を使用せずに動作するように構成されている例を例解する。
【
図9】計算タイルが、カスケード接続を使用して動作するように構成されている例を例解する。
【
図10A】例示的なオーバーレイの特定の動作特徴を例解する。
【
図10B】例示的なオーバーレイの特定の動作特徴を例解する。
【
図10C】例示的なオーバーレイの特定の動作特徴を例解する。
【
図11】DPアレイのパーティションのためのアプリケーションを設定するために使用される例示的なオーバーレイの属性を例解する表である。
【
図12A】異なるオーバーレイ実装形態を伴うアプリケーションによって実現される入力ストリームチャネルの例を例解する。
【
図12B】異なるオーバーレイ実装形態を伴うアプリケーションによって実現される入力ストリームチャネルの例を例解する。
【
図12C】異なるオーバーレイ実装形態を伴うアプリケーションによって実現される入力ストリームチャネルの例を例解する。
【
図13】アプリケーションによって実現される出力ストリームチャネルの例を例解する。
【
図14】
図1のシステムの特定の動作特徴を例解する方法の例を例解する。
【
図15】DPアレイが、各々がアレイコントローラによって制御される多数のパーティションを含む例を例解する。
【
図16A】DPアレイ及び1つ以上のアレイコントローラを含むICのための異なる例示的なアーキテクチャを例解する。
【
図16B】DPアレイ及び1つ以上のアレイコントローラを含むICのための異なる例示的なアーキテクチャを例解する。
【
図16C】DPアレイ及び1つ以上のアレイコントローラを含むICのための異なる例示的なアーキテクチャを例解する。
【
図16D】DPアレイ及び1つ以上のアレイコントローラを含むICのための異なる例示的なアーキテクチャを例解する。
【
図16E】DPアレイ及び1つ以上のアレイコントローラを含むICのための異なる例示的なアーキテクチャを例解する。
【
図16F】DPアレイ及び1つ以上のアレイコントローラを含むICのための異なる例示的なアーキテクチャを例解する。
【
図16G】DPアレイ及び1つ以上のアレイコントローラを含むICのための異なる例示的なアーキテクチャを例解する。
【
図16H】DPアレイ及び1つ以上のアレイコントローラを含むICのための異なる例示的なアーキテクチャを例解する。
【
図17】DPアレイ及びアレイコントローラを含むICの動作の例示的な方法を例解する。
【
図18】アレイコントローラの追加の動作特徴を例解する。
【
図19】本明細書で説明する本発明の構成で使用するためのデータ処理システムの例示的な実装形態を例解する。
【発明を実施するための形態】
【0029】
本開示は、集積回路(IC)に関し、IC内に実装されたデータ処理(DP)アレイで多数のオーバーレイを使用することに関する。本開示はまた、1つ以上のアレイコントローラを使用して、DPアレイの動作を制御することに関する。
【0030】
DPアレイは、タイルと称される複数の回路ブロックを含む。タイルは、計算タイル並びにインターフェースタイル及び/又は計算タイル、インターフェースタイル、並びにメモリタイルの混合を含み得る。DPアレイは、「アプリケーション」と称される設定データをDPアレイにロードすることによって所望の計算活動を実行するように、設定可能である。アプリケーションを用いて設定されると、DPアレイは、計算活動を実行することができる。
【0031】
一態様では、DPアレイにロードされたアプリケーションは、計算タイルによって実行可能である複数のカーネルを指定する。例えば、アプリケーションは、計算タイルのうちの特定のものによって実行されることになる特定のカーネル、例えば、計算タイルへのカーネルのマッピングを指定し得る。アプリケーションはまた、DPアレイのタイルを通信可能にリンクする複数のストリームチャネルを実現する設定データを指定し得る。
【0032】
DPアレイにアプリケーションを実行すると、異なるオーバーレイをDPアレイに実現してアプリケーションを実行し得る。実現される各オーバーレイは、DPアレイ内のデータ移動のモードを指定する。すなわち、各オーバーレイは、DPアレイのタイル間のデータ移動のモードを指定する。例えば、各オーバーレイは、アプリケーションによって実現されるストリームチャネルを介して、それぞれの計算タイルに提供されるべき特定のデータ項目を指定する。データ項目は、特徴マップ及び/又は重みを含み得る。
【0033】
一態様では、アプリケーションは、マルチレイヤアプリケーションである。アプリケーションの異なるレイヤは、異なるオーバーレイをDPアレイにロードすることによって実現され得る。DPアレイ内に実現される各オーバーレイについて、1つ以上のランタイムパラメータが、オーバーレイによって実現されるアプリケーションの特定のレイヤにオーバーレイを更に適合させるために、DPアレイのタイルに提供され得る。アプリケーション、オーバーレイ、及び1つ以上のランタイムパラメータを用いて設定されるDPアレイは、アプリケーションのレイヤのワークロードを実行することが可能である。一般に、「ワークロード」という用語は、マルチレイヤアプリケーションの特定のレイヤの入力データを処理するのに必要な動作を実行することを指す。
【0034】
静的又は固定回路アーキテクチャとは異なり、DPアレイの設定可能性は、DPアレイが経時的に異なるワークロード(例えば、レイヤ)に適応することを可能にする。DPアレイは、異なるアプリケーションをロードすることによってDPアレイを再設定することを必要とせずに、異なるレイヤに適合されている。例解の目的で、DPアレイが1つ以上の行列乗算演算を実行するように、使用される例を検討する。行列乗算演算は、機械学習、画像処理、コンピュータビジョン、仮想現実及び/又は拡張現実、並びに遺伝分析を含むが、それらに限定されない、多くの異なる計算コンテキストにおいて利用されている。例えば、機械学習の場合、ニューラルネットワークの異なるレイヤは、異なるレイヤで演算される行列が異なる次元を有する異なる行列乗算演算を実行し得る。これらの異なるレイヤを実現するために固定又は静的回路アーキテクチャを使用するとき、その回路アーキテクチャは、特定のレイヤの行列乗算演算を効率的に実行し得るが、異なる次元の他の異なるレイヤの行列乗算演算はあまり効率的ではない。これは、行列乗算演算を含まない他のタイプのワークロードにも当てはまる。
【0035】
本開示内で説明される本発明の構成によれば、DPアレイは、様々な異なるワークロードを効率的に実行するように、経時的に適合され得る。DPアレイは、特定のアプリケーションを実行するように構成され得る。ランタイム時にアプリケーションの異なるレイヤを実現するために、異なるオーバーレイが経時的にロードされ得る。各オーバーレイは、オーバーレイがマッピングされるアプリケーションの特定のレイヤを実現するのに適した、DPアレイにおけるデータ移動の特定のモードを実現し得る。オーバーレイのための異なるランタイムパラメータもロードされ得、ランタイムパラメータは、アプリケーションの各レイヤに特有であり得る。
【0036】
前の行列乗算の例を検討する。DPアレイには、行列乗算演算を実行するように、適合されたカーネルを含むアプリケーションがロードされ得る。アプリケーションは更に、DPアレイに実現されたストリームチャネルを指定する。アプリケーションの異なるレイヤに対応する異なる行列乗算演算(例えば、異なる次元の行列乗算)を効率的に実行するために、アプリケーションを用いて設定されるDPアレイを適応させるように、異なるオーバーレイ及びランタイムパラメータが、経時的にDPアレイにロードされ得る。各オーバーレイの特定の動作特徴及び計算タイルによって実行されているカーネルは、ランタイムパラメータのローディングを通じてレイヤごとのベースで変更され得る。一態様では、ランタイムパラメータは、所与のオーバーレイによって実現されているレイヤの特定の次元を指定し得る。
【0037】
アプリケーションをロードすることは、無視できない数のクロックサイクルを必要とし得る。比較すると、アプリケーションの特定のレイヤを実現するためにオーバーレイ及び対応するランタイムパラメータをロードすることは、著しくより少ない時間(例えば、より少ないクロックサイクル)を消費する。本明細書で説明されるアプリケーションオーバーレイパラダイムを利用することによって、DPアレイは、DPアレイを継続的に再設定する必要なく、アプリケーションの異なるレイヤを効率的に実現するように適合され得る。すなわち、DPアレイは、DPアレイを継続的に再設定されている間アイドル状態にさせる、アプリケーションの各レイヤに対して異なるアプリケーションをロードすることを必要とせずに、1つのレイヤから次のレイヤに適合され得、それによって計算効率及びスループットを低減する。
【0038】
場合によっては、アプリケーション、オーバーレイ、及びランタイムパラメータのローディングを制御し、DPアレイのためのワークロードを開始することは、かなりの計算リソースを必要とする。これらの動作は、そのような責任を課されたプロセッサのためにかなりの量のクロックサイクルを消費し、プロセッサが他の関数を実行するか、又は他のアプリケーションを実行するために利用可能なクロックサイクルをほとんど残さないことがある。したがって、1つ以上の例示的な実装形態では、DPアレイによって提供されるかなりの計算能力を利用するために、1つ以上のアレイコントローラが、DPアレイと同じICに含まれ得る。アレイコントローラは、DPアレイの動作を制御するために専用であり得る。
【0039】
アレイコントローラを含むことにより、DPアレイの円滑かつ効率的な動作が保証される。例えば、アレイコントローラは、DPアレイの管理専用であり、他の非DPアレイ関連動作とのマルチタスクを試みていないので、アレイコントローラは、より高いデータスループットを達成するためにDPアレイをビジー状態に保つことができる。アレイコントローラを含むことはまた、IC内に配置されるかICの外部に配置されるかにかかわらず、他のプロセッサをDPアレイ関連の制御動作を実行することから解放し、その結果、そのようなプロセッサは他のタスクを実行し得る。
【0040】
プログラマブルロジックを含むICアーキテクチャの場合、アレイコントローラのうちの1つ以上は、プログラマブルロジックで実装され得る。他の例では、プログラマブルロジックを含むICアーキテクチャの場合、1つ以上のアレイコントローラは、プログラマブルロジックで実装され得、一方、1つ以上の他のアレイコントローラは、ハードワイヤード回路ブロックとして実装され得る。更に他の例では、プログラマブルロジックを含まないICアーキテクチャの場合、アレイコントローラは、ハードワイヤード回路ブロックとして実装され得る。アレイコントローラはまた、プログラマブルロジックを含むIC内のハードワイヤード回路ブロックとして実装され得ることを理解されたい。本発明の構成の更なる態様は、図を参照して以下に説明される。
【0041】
図1は、例示的なシステム100を例解する。本例では、システム100は、DPアレイ102、アレイコントローラ106、相互接続108、並びに1つ以上のサブシステム112、114、118、及び/又は120を含む。DPアレイ102は、アレイインターフェース104を含む。
【0042】
1つ以上の例示的な実装形態では、システム100は、集積回路(IC)として実装される。システム100は、単一のICパッケージ内に実装され得る。一態様では、システム100は、単一のICパッケージ内に配置された単一のダイを使用して実装される。別の態様では、システム100は、単一のICパッケージ内に配置された2つ以上の相互接続されたダイを使用して実装される。
【0043】
DPアレイ102は、タイルと称される複数の異なるタイプの回路ブロックから形成される。タイルは、計算タイル、メモリタイル、及び/又はインターフェースタイルを含み得る。考察の目的で、「アレイタイル」という用語は、本明細書では、計算タイル、又は計算タイル及びメモリタイルの混合を指すために使用される。計算タイル及びメモリタイルは、ハードワイヤードであり、プログラム可能である。アレイインターフェース104は、「インターフェースタイル」と称される複数の回路ブロックを含む。インターフェースタイルは、DPアレイ102のアレイタイルをDPアレイ102の外部の回路と通信可能にリンクする。インターフェースタイルは、ハードワイヤードでプログラム可能である。
【0044】
アレイコントローラ106は、DPアレイ102及び/又はアレイインターフェース104に通信可能にリンクされている。アレイコントローラ106は、直接及び/又は相互接続108を介して、DPアレイ102及び/又はアレイインターフェース104に結合され得る。一態様では、アレイコントローラ106は、DPアレイ102を設定すること、及びDPアレイ102の動作を制御することに専用である。すなわち、アレイコントローラ106は、DPアレイ102の設定及び/又は制御に関する関数のみを実行する。アレイコントローラ106は、ステートマシンとして、又はプログラムコードを実行することが可能なプロセッサとして実装され得る。一例では、アレイコントローラ106は、ハードワイヤード回路ブロックとして実装される。別の例では、アレイコントローラ106は、プログラマブルロジックを使用して実装される。1つ以上の例示的な実装形態では、アレイコントローラ106は省略され得る。その場合、サブシステム112~120のうちの1つとして実装され得るプロセッサは、アレイコントローラ106に起因する動作を実行し得る。代替として、システム100の外部のプロセッサが、アレイコントローラ106に起因する動作を実行し得る。
【0045】
相互接続108は、アレイインターフェース104、アレイコントローラ106、及びサブシステム112~120のうちの1つ以上に結合される。相互接続108は、オンチップ相互接続として実装され得る。オンチップ相互接続の一例は、高度なマイクロコントローラバスアーキテクチャ(Advanced Microcontroller Bus Architecture、AMBA)拡張可能インターフェース(eXtensible Interface、AXI)バスである。AXIバスは、回路ブロック及び/又はシステム間のオンチップ接続を確立する際に使用するための埋め込みマイクロコントローラバスインターフェースである。相互接続108の他の例示的な実装形態は、限定はしないが、他のバス、クロスバー、ネットワークオンチップ(Network-on-Chip、NoC)などを含み得る。例解の目的で、相互接続108は、1つ以上のメモリに対する読み取り及び/又は書き込みが可能であるメモリコントローラを含むか、又はそれに結合され得る。
【0046】
サブシステム112~120は、様々な異なるタイプの電子サブシステム及び/又は回路のいずれかを表し得る。例解の目的で、サブシステム112~120の例は、プロセッサ又はプロセッサシステム、プログラマブルロジック、ハードワイヤード回路ブロック(例えば、特定用途向け回路ブロック)、メモリなどの任意の組み合わせを含み得るが、これらに限定されない。
図1の例に例解されたサブシステムの数は、例解の目的であることを理解されたい。システム100は、示されたものよりも多い又は少ないサブシステムを含み得る。システム100のいくつかの例示的な実装形態は、例えば、DPアレイ102のみ、又はDPアレイ102及び1つ以上のアレイコントローラ106のみを含み得る。
【0047】
サブシステム112~120のうちの1つとして実装されるプロセッサは、コンピュータ可読命令を実行することが可能である。一例では、プロセッサは、ハードワイヤードプロセッサとして実装される。別の例では、プロセッサは、プログラマブルロジックを使用するソフトプロセッサとして実装される。プロセッサがサブシステム112~120のうちの1つとして実装される場合には、アレイコントローラ106は省略され得る。その場合、プロセッサは、DPアレイ102を設定し、DPアレイ102の動作を制御するようにプログラムされ得る。
【0048】
別の態様では、プロセッサは、DPアレイ102を含むICの外部にあり得る。その場合、プロセッサは、DPアレイ102を含むICに通信可能にリンクされる別のデータ処理システム(例えば、ホストコンピュータ)の一部であり得る。プロセッサが、ホストコンピュータの一部として含まれる場合、プロセッサは、アレイコントローラ106の動作を制御するためにアレイコントローラ106と通信し得る。一態様では、プロセッサは、DPアレイ102の動作を制御するためにアレイコントローラ106によって実行されるランタイムデータを書き込み得る。アレイコントローラ106が省略される例示的な実装形態では、DPアレイ102の動作を制御するために使用される特定のプロセッサは、外部であるか、又はサブシステム112~120のうちの1つの内部に実装されるかにかかわらず、DPアレイ102を制御するために専用である場合又は専用でない場合がある。
【0049】
一例では、サブシステム112~120のうちの1つ以上は、メモリとして実装され得る。メモリは、ランダムアクセスメモリ(random-access memory、RAM)として実装され得る。一例では、メモリは、高帯域幅メモリ(High Bandwidth Memory、HBM)として実装され得る。例えば、メモリは、DPアレイ102と同じダイ上に、又は同じICパッケージ内の異なるダイ上に実装されたRAM回路(例えば、HBM)であり得る。別の態様では、1つ以上のメモリが、DPアレイ102を含むICの外部に実装され得る。
【0050】
1つ以上の例示的な実装形態では、アレイコントローラ106、相互接続108、及びサブシステム112~120のうちの1つ以上又は全てなどの、システム100の特定の要素は、任意選択的であり、省略され得る。
【0051】
図2は、DPアレイ用のアプリケーションを生成するための実装フロー200の例を例解する。
図2の実装フロー200は、データ処理システムによって実行又は実現され得る。実装フロー200を実行することが可能であるデータ処理システムの例は、
図19に関連して説明される。
【0052】
図2の例では、アプリケーション202は、コンパイラ204に提供され得る。アプリケーション202は、ソースコードで指定され得る。1つ以上の例では、アプリケーション202は、C及び/又はC++などの高水準プログラミング言語で指定される。1つ以上の例では、アプリケーション202は、DPアレイ102の計算タイルによってコンパイル及び実行される1つ以上のカーネルを指定するデータフローグラフとして指定され得る。
【0053】
一般に、コンパイラ204は、DPアレイ102(例えば、そこに含まれる計算タイル)によって実行され得るアプリケーションの実行可能バージョンを生成することが可能である。コンパイラ204はまた、DPアレイ102の動作を制御するためにアレイコントローラ106又は他のプロセッサによって実行可能な制御アプリケーションを生成することが可能である。制御アプリケーションを実行する際に、アレイコントローラ106は、アプリケーション、アプリケーションのオーバーレイ、及びアプリケーションのレイヤのランタイムパラメータをロードすることが可能である。制御アプリケーションを実行する際に、アレイコントローラ106はまた、アプリケーション、オーバーレイ、及びランタイムパラメータを用いて設定されるように、DPアレイ102内のワークロードを開始することが可能である。
【0054】
1つ以上の例示的な実装形態では、アプリケーション202は、マルチレイヤアプリケーションである。一例では、アプリケーション202は、ニューラルネットワークとして実現される。別の例では、アプリケーション202は、機械学習モデルとして実現され得る。アプリケーション202によって実現され得る異なるタイプの機械学習モデルの例は、畳み込みニューラルネットワーク(Convolutional Neural Network、CNN)、長・短期記憶(Long-Short Term Memory、LSTM)ネットワーク、深層学習推奨モデル(Deep Learning Recommendation Model、DLRM)などを含み得るが、これらに限定されない。
【0055】
一態様では、各異なるタイプの機械学習モデルは、異なるアプリケーションとして指定され得、ここで、アプリケーションは、実現されている機械学習モデルに特有のカーネルを使用して構築される。カーネルは、DPアレイ102の計算タイルによって実行され得る実行可能プログラムコードを指す。カーネルは、特定のタイプの機械学習モデルに合わせて調整されるが、各カーネルは、カーネルの特定の動作特徴がランタイムパラメータの使用を通してランタイム時に変更又は設定され得るという意味で、一般化され得る。したがって、アプリケーション202によって実現される機械学習モデルのタイプに応じて、アプリケーション202は、異なるタイプのカーネルを利用する。加えて、1つ以上の例示的な実装形態では、多数のカーネルが、同じ計算タイルにロードされ得る。その場合に実行される特定のカーネル又は複数のカーネルは、所与の計算タイルにおいて、アプリケーション202のためにレイヤごとのベースで選択され得る。
【0056】
本開示内では、カーネルは、1つ以上の関数を表す。いくつかの構成では、カーネルは、複数の異なる関数を含む。他の構成では、プログラムコードは、異なる関数が異なる(例えば、多数の)カーネルとして実現されるように構成されている。いずれの場合も、ランタイムパラメータは、カーネルの1つ以上の動作パラメータを設定することが可能である。場合によっては、設定は、カーネルの1つ以上の関数を選択的に有効化/無効化し、それにより、関数が実行されるか又は実行されない。場合によっては、ランタイムパラメータは、実行のために複数のそのような関数/カーネルから特定の関数又はカーネルを選択し得る。
【0057】
図2の例では、アプリケーション202は、複数のレイヤ1~Mを指定し得る。例として、アプリケーション202の各レイヤ1~Mは、レイヤによって実行されるワークロードと称される動作の特定のセットに対応し得る。一例では、各レイヤは、実行される特定の行列乗算演算を指定し得る。異なるレイヤは、一緒に乗算される行列の異なる次元を有し得る。例えば、レイヤ1~Mによって乗算される行列は、1つのレイヤから次のレイヤへ異なる数の列及び/又は異なる数の行を有し得る。例えば、異なる次元の行列を乗算する2つの行列乗算演算は、異なる行列乗算演算とみなされ得る。
【0058】
アプリケーション202の各レイヤは、実行されるべき1つ以上の特定の関数を含み得る。アプリケーション202の異なるレイヤにおいて実行され得る異なる関数の例は、畳み込み、一般行列乗算(General Matrix Multiply、GEMM)、整流化線形ユニット(Rectified Linear Unit、ReLU)、バッチ正規化、又は機械学習及び/若しくはニューラルネットワークの分野において一般に知られている他の関数を含むことができるが、これらに限定されない。
【0059】
例解的かつ非限定的な例として、アプリケーション202がCNNを実現する場合を検討する。CNNは、異なるレイヤ1~Mを含み得、異なるレイヤは、画像のピクセルの異なる列及び行を処理する異なる次元を有する。更に、例解の目的で、アプリケーション202のレイヤ1は、二次元(2-dimensional、2D)畳み込みレイヤであり得る。アプリケーション202のレイヤ2は、バッチ正規化を伴う2D畳み込みレイヤであり得る。アプリケーション202のレイヤMは、ReLUを用いた2D畳み込みレイヤであり得る。例示的なアプリケーション及びレイヤは、例解の目的で提供され、限定ではない。
【0060】
コンパイラ204は、アプリケーション202及び1つ以上のオーバーレイ206を受け取ることが可能である。一態様では、オーバーレイ206の各々は、アプリケーション202(例えば、特定の機械学習モデル)のレイヤ(又はレイヤの一部分)を実現するために、データがDPアレイ102のタイルの間でどのように移動すべきかについての事前構築された定義であり得る。一般に、オーバーレイ206は、アプリケーション202によって実現される特定のタイプの機械学習モデルに利用可能な全ての可能なオーバーレイを表す。例えば、各オーバーレイ206は、DPアレイ102において実現されるようなアプリケーションのためのデータ移動の異なるモードを指定し得る。データ移動のモードは、コンパイルされたアプリケーション202によってDPアレイ102に実現されたストリームチャネルを使用する。すなわち、アプリケーション202によって確立されたストリームチャネルは、データ移動の異なるモードがオーバーレイ206のうちの異なるものを使用して経時的に実現される間、適所に留まり得る。各オーバーレイは、アプリケーション202に対して同じストリームチャネル実現を使用する。
【0061】
一態様では、オーバーレイは、様々なストリームチャネル上で伝達される入力データのタイプを指示することによって、ストリームチャネルを介して、データ移動を指定し得る。異なるタイプの入力データの例には、特徴マップ及び重みが含まれる。いくつかのストリームチャネルは、特徴マップを伝達し得、一方、他のストリームチャネルは、重みを伝達する。一態様では、各オーバーレイ206は、所与の機械学習モデルの特定のレイヤを実現する、例えば、効率的に実現する、ために必要とされるDPアレイ102の異なるタイル間の論理接続として、ストリームチャネルを定義する。例示的なオーバーレイ206及びオーバーレイによって実現されるデータ移動の対応するモードは、
図8の例に更に例解されている。
【0062】
したがって、本開示内で定義されるように、「オーバーレイ」という用語は、そこに実行されるアプリケーションのランタイム中にDPアレイに提供されるデータを意味し、データは、アプリケーションの特定のレイヤを実現するために、DPアレイの少なくとも一部におけるデータ移動のモードを定義する。
【0063】
アプリケーション202がCNNタイプの機械学習モデルを指定する例を続けると、各オーバーレイ206は、DPアレイ102内のそのような機械学習モデルのレイヤを実現するために、CNNタイプの機械学習モデルのために事前構築される。一態様では、各オーバーレイ206は、特定の形状を有するアプリケーション202のレイヤのデータを処理するのに適している。本例では、オーバーレイ206-1は、正方形のレイヤのデータを効率的に処理することが可能である。オーバーレイ206-2は、背の高い長方形のレイヤのデータを効率的に処理することが可能である。オーバーレイ206-Nは、幅の広い長方形のレイヤのデータを効率的に処理することが可能である。したがって、この例では、オーバーレイ206は、特定の寸法を有するレイヤを処理することに限定されないが、これも当てはまる場合があり得、むしろ、特定の形状のレイヤを扱うことが意図される。所与のタイプのアプリケーションのためのより少ない又はより多いオーバーレイが、本明細書に説明されるような形状又は異なる形状のために作成され得ることを理解されたい。
【0064】
コンパイラ204は、利用可能な事前構築されたオーバーレイ206をアプリケーション202のレイヤ1~Mと比較して、アプリケーション202のレイヤ1~Mへのオーバーレイ206のマッピングを決定することが可能である。オーバーレイ206は、アプリケーション202のタイプに特有である。オーバーレイ206はまた、DPアレイ102のアーキテクチャに特有であり得る。例えば、アプリケーション202が、異なるタイプの機械学習モデルを実現する場合、コンパイラ204がアプリケーションのレイヤにマッピングするために利用可能な事前構築されたオーバーレイは、異なる。利用可能なオーバーレイは、実現されている特定のタイプの機械学習モデルに必要とされる特定のタイプのデータ移動を実現するのに適している。したがって、コンパイラ204によるマッピングにおいて使用されるオーバーレイ206は、アプリケーション202によって実現される特定のタイプの機械学習モデルのために事前構築されたオーバーレイのみを含む。
【0065】
一態様では、コンパイラ204は、各レイヤの形状を決定することによって、オーバーレイ206をアプリケーション202のレイヤ1~Mにマッピングすることが可能である。形状は、レイヤの特定の重み又は重み行列によって与えられ得る。コンパイラ204は、各レイヤの形状を、決定された形状のレイヤ上で動作するのに適した特定のオーバーレイ206(例えば、オーバーレイ206の形状)に一致させることが可能である。オーバーレイをレイヤにマッピングするために同じ形状及び/又は形状の類似性が使用されるが、別の態様では、コンパイラ204は、各レイヤの寸法を決定し、そのレイヤを、形状のプロキシとして使用され得る寸法に基づいて、そのレイヤに適した特定の(例えば、1つの)オーバーレイ206にマッピングすることが可能である。形状に従ってオーバーレイ206をレイヤ1~Mにマッピングすることによって、マッピングされたオーバーレイを使用してアプリケーション202の各レイヤを実現する際にDPアレイ102によって達成されるデータスループットは、増加又は最適化され得る。
【0066】
オーバーレイ206は、
図2の例では1対1のベースでアプリケーション202のレイヤに対応するように見えるが、そうである必要はない。すなわち、コンパイラ204は、アプリケーションをコンパイルするために利用可能である異なるタイプの機械学習モデルのための複数の事前構築されたオーバーレイ206へのアクセスを有し得るか、又はそれを含み得る。オーバーレイ206の数は、コンパイルされているアプリケーションのレイヤの数よりも多く又は少なくあり得る。
【0067】
コンパイラ204は、アプリケーション208として示されたアプリケーション202の実行可能バージョンを生成することが可能である。アプリケーション208は、DPアレイ102によって実行可能である。例えば、アプリケーション208は、DPアレイ102の計算タイルのうちの特定のタイルによって実行されるカーネルの実行可能バージョンを指定する。この点に関して、アプリケーション208は、カーネルを指定するだけでなく、どの計算タイルが各それぞれのカーネルを実行するかも指定し得る。一態様では、アプリケーション208は、単一の、又は同じカーネルを利用し、アプリケーション208を実行するために使用される各計算タイルは、カーネルのインスタンスを実行する。カーネルは、複数の異なる、かつ選択可能な関数を含み得る。他の例では、アプリケーション208を実行するために使用される各計算タイルは、複数の又は異なるカーネルのセットの各々のインスタンスを実行する。アプリケーション208を実行する各計算タイルによって実行されるカーネルインスタンスのセットは、同じであり得るか、又は1つの計算タイルから別の計算タイルへ異なり得る。アプリケーション208の一部として、コンパイラ204はまた、DPアレイ102にロードされたときに、データを伝達するDPアレイ102内のストリームチャネルを実現する設定データも生成する。アプリケーション208はまた、DPアレイ102の様々なメモリのための初期化データを指定し得る。
【0068】
上で述べられるように、コンパイラ204はまた、アレイコントローラ106によって実行可能である制御アプリケーション214を生成することが可能である。制御アプリケーション214は、マッピング210及びランタイムパラメータ212を含むことができる。マッピング210は、アプリケーション208の実行(例えば、ランタイム)中に、アプリケーション208のレイヤ1~Mの各々についてどのオーバーレイ206を使用するかを指定する。ランタイムパラメータ212は、アプリケーション208のレイヤ1~Mのうちの1つ以上又は各々に対して生成され得る。すなわち、ランタイムパラメータ212は、レイヤ固有である。更に、ランタイムパラメータ212は、特定の計算タイルに特有であり得る。一般に、ランタイムパラメータ212は、ランタイム中にDPアレイ102の異なる計算タイルに提供されて、実行のためのカーネルに構成され得る。例えば、ランタイムパラメータ212は、実行のために特定のカーネルを選択し得、及び/又は実行するカーネルの特定の関数を有効化及び/若しくは無効化し得る(例えば、計算タイルによって実行されている様々なカーネルのいずれかの実行フローの変更を達成する)。ランタイムパラメータに関する更なる詳細は、以下でより詳細に説明される。
【0069】
一態様では、制御アプリケーション214は、ランタイム中にアプリケーション208の異なるレイヤに関するオーバーレイ206及びランタイムパラメータ212の実装を開始するアレイコントローラ106が従うスケジュールを指定し得る。スケジュールは更に、実行されるべき特定のタスクと、ランタイム中にアプリケーション208の様々なレイヤのワークロードを開始するためのタスクの順序付けとを指定し得る。
【0070】
DPアレイ102においてアプリケーションを実行する際に、アレイコントローラ106は、アプリケーション208を計算タイルのプログラムメモリにロードし、アプリケーション208の設定データを制御レジスタにロードして、ストリームチャネルを実現するようにストリームスイッチを設定し、DPアレイ102のメモリを初期化することが可能である。制御アプリケーション214を実行する際に、アレイコントローラ106は、異なるオーバーレイを実現し、指定されたスケジュールごとにランタイム中にアプリケーション208のためにDPアレイ102にランタイムパラメータをロードすることが可能である。更に、アレイコントローラ106は、制御アプリケーション214を実行する際に、スケジュールごとに経時的にアプリケーション208の異なるレイヤに対応するアプリケーション208のためのワークロードを開始する。
【0071】
本開示内では、DPアレイ102においてアプリケーションをロードし、実行することに言及する。DPアレイ102は、1つ、2つ、若しくはそれを上回るパーティション(各パーティションは、1つ以上の計算タイル及び1つ以上のインターフェースタイルを含み得る)、又は、1つ以上の計算タイル、1つ以上のメモリタイル、及び1つ以上のインターフェースタイルの組み合わせに細分され得ることを理解されたい。各パーティションは、他のパーティションから独立して動作することが可能であり、その結果、各パーティションは、異なるアプリケーションを実行し得、かつ他のパーティションと同時に実行し得る。したがって、本開示内で、DPアレイ102のパーティションにおいてアプリケーションをロード、実行、若しくは実現すること、オーバーレイをロードすること、ランタイムパラメータをロードすること、及び/又はワークロードを実行することへの言及は、DPアレイ102全体が単一のパーティションとして見られ、そのような動作が単一のパーティションに対して実行される場合、又はDPアレイ102が2つ以上のより小さいパーティションに細分され、動作が1つ以上のアレイコントローラの制御下で独立して2つ以上のより小さいパーティションの各々に対して実行される場合に言及し得る。
【0072】
図3は、DPアレイ102の例示的な実装形態を例解する。本例では、DPアレイ102は、計算タイル302、メモリタイル306、及びインターフェースタイル304を含む。インターフェースタイル304は、アレイインターフェース104の一部である。本例では、計算タイル302及びメモリタイル306は、複数の行及び列を有するグリッドに配列されている。インターフェースタイル304は、行に配列され、個々のインターフェースタイル304は、DPアレイ102のグリッド構成の列と整列されている。計算タイル302は、計算タイル302-1、302-2、302-3、302-4、302-5、302-6、302-7、302-8、302-9、302-10、302-11、302-12、302-13、302-14、302-15、302-16、302-17、及び302-18を含む。インターフェースタイル304は、インターフェースタイル304-1、304-2、304-3、304-4、304-5、及び304-6を含む。メモリタイル306は、メモリタイル306-1、306-2、306-3、306-4、306-5、及び306-6を含む。本例では、各タイルは、左(西)、右(東)、上(北)、及び下(南)に隣接するタイルに、そのようなタイルがそのような位置に位置する場合に結合される。
【0073】
図3の例は、例解のみを目的として提供されている。所与の列及び/又は行内のタイルの数、DPアレイ102及び/又はアレイインターフェース104に含まれるタイルの数、列及び/又は行内のタイルタイプ(例えば、メモリ及び計算タイル)のシーケンス又は順序は、例解を目的としたものであり、限定ではない。様々な数のタイル、行、列、タイルタイプの混合などを有する他の構成が含まれ得る。例えば、
図3の行は、タイルタイプに関して同種であるが、列は、同種ではない。他の構成では、行は、タイルタイプに関して異種であるが、列は、同種であり得る。更に、メモリタイル306の追加の行が、DPアレイ102に含まれ得る。メモリタイル306のそのような行は、計算タイル302の行を介在させることなく一緒にグループ化され得るか、又は計算タイル302の行が、メモリタイル306の行若しくは行のグループの間に介在するように、DPアレイ102全体にわたって分散され得る。
【0074】
DPアレイ102の別の例示的な実装形態では、メモリタイル306は、計算タイル302の最下行がインターフェースタイル304に直接結合するように省略され得る。例えば、メモリタイル306が省略されると、インターフェースタイル304-1は、計算タイル302-3などに直接接続することになる。そのような場合、本明細書で説明される様々な例示的な実装形態は、メモリタイル306の代わりに、メモリ(例えば、サブシステム112~120のうちの1つ)からデータを読み取り、メモリにデータを書き込み得る。しかしながら、メモリタイル306を含むことは、DPアレイ102の外部のRAMからデータを継続的に読み取る、及び/又はRAMにデータを書き込む必要なく、データが計算タイル302のより近くに記憶され得るという点で、DPアレイ102のデータスループットを増加させ得る。
【0075】
図4は、計算タイル302の例示的な実装形態を例解する。
図4の例は、計算タイル302の特定のアーキテクチャ上の特徴を例解するために提供されており、一般に、DPアレイ102の形態又は計算タイル302のアーキテクチャを限定するものとしてではない。構成要素及び/又はタイル間のいくつかの接続は、例解を容易にするために省略されている。
【0076】
本例では、各計算タイル302は、コア402、RAM404、ストリームスイッチ406、メモリマップドスイッチ408(例えば、図では「MM」スイッチと略記される)、制御レジスタ414、及びダイレクトメモリアクセス(direct memory access、DMA)回路434を含む。コア402は、プロセッサ420及びプログラムメモリ422を含む。制御レジスタ414は、計算タイル302に含まれる様々な構成要素の動作を制御するために、メモリマップドスイッチ408によって書き込まれ得る。示されていないが、計算タイル302の各メモリ構成要素(例えば、プログラムメモリ422、制御レジスタ414、及びRAM404)は、設定及び/又は初期化の目的で、メモリマップドスイッチ408を介して読み取られ、及び/又は書き込まれ得る。
【0077】
プロセッサ420は、種々の異なるプロセッサタイプのうちのいずれかであり得る。一態様では、プロセッサ420は、ベクトルプロセッサとして実装される。別の例では、プロセッサ420は、スカラプロセッサとして実装され得る。別の例では、プロセッサ420は、ベクトルプロセッサ及びスカラプロセッサを含み得る。プログラムメモリ422は、例えば、アプリケーションをロードすることによって、「カーネル」と称される実行可能命令でロードされ得る。各計算タイル302は、プロセッサ420によってプログラムメモリ422に記憶されたカーネルの実行を通じて、データ処理動作を実行し、大量のデータに対して動作することが可能である。
【0078】
各コア402、例えばプロセッサ420は、メモリインターフェース432を通して同じ計算タイル302内に位置するRAM404へ直接接続される。本開示内では、メモリインターフェースがRAMにアクセスするために同じタイル内の回路によって使用されるとき、メモリインターフェースは、「ローカルメモリインターフェース」と称される。メモリインターフェース432-1は、同じタイル内のプロセッサ420が、メモリインターフェースを利用してRAM404にアクセスするので、ローカルメモリインターフェースの例である。比較すると、RAM404にアクセスするためにタイルの外部の回路によって使用されるメモリインターフェースは、隣接メモリインターフェースと称される。メモリインターフェース432-2、432-3、及び/又は432-4は、そのようなメモリインターフェースは、RAM404にアクセスするために他の隣接するタイル内の回路によって使用されるので、隣接メモリインターフェースの例である。
【0079】
したがって、各プロセッサ420は、そのようなメモリインターフェースに向けられた標準読み取り及び書き込み動作を介して、同じ計算タイル302内のRAM404及び隣接タイル内の1つ以上の他のRAM404にアクセス(例えば、読み取り及び/又は書き込み)することが可能である。RAM404は、アプリケーションデータを記憶するように構成されている。RAM404は、設定及び/又は初期化の目的のために、メモリマップドスイッチ408を介して読み取られ、及び/又は書き込まれ得る。RAM404は、ランタイム中にプロセッサ420によって、及び/又はDMA回路434によって読み取られ、及び/又は書き込まれ得る。
【0080】
DMA回路434は、同じ計算タイル302内に位置するRAM404にデータを読み書きすることが可能である。DMA回路434は、計算タイル302の外部のソースからストリームスイッチ406を介してデータを受信し、そのようなデータをRAM404に記憶し得る。DMA434は、RAM404からデータを読み取り、計算タイル302の外部の1つ以上の他の宛先に伝達するために、データをストリームスイッチ406に出力し得る。
【0081】
各コア402、例えば、プロセッサ420は、メモリインターフェースを介して、(例えば、北、南、東、及び/又は西方向に)隣接する計算タイル302内に位置するRAM404に直接接続され得る。したがって、プロセッサ420は、ストリームスイッチ406を介して読み取り又は書き込みトランザクションを開始することなく、かつ/又はDMA回路434を使用することなく、プロセッサ420が同じ計算タイル302内に位置するRAM404にアクセスすることができるのと同じ様態で、そのような他の隣接するRAM404に直接アクセスし得る。例解的な例として、計算タイル302-5のプロセッサ420は、ストリームスイッチ406を介して及び/又はDMA回路434を使用して読み取り又は書き込みトランザクションをサブミットすることなく、計算タイル302-5、302-2、302-4、及び302-6内に位置するRAM404への読み取り及び/又は書き込みを行うことができる。しかしながら、プロセッサ420は、ストリームスイッチ406及びDMA回路434を介して、任意の他の計算タイル302及び/又はメモリタイル306のRAM404への読み取り及び書き込みトランザクションを開始し得ることを理解されたい。
【0082】
プロセッサ420はまた、プロセッサ420の内部レジスタ(例えば、累積レジスタ)に記憶されたデータの他のプロセッサ420との直接共有を可能にする、(例えば、北、南、東、及び/又は西方向の)隣接コアのプロセッサ420への、カスケード接続(図示せず)と称される直接接続を含み得る。これは、1つのプロセッサ420の1つ以上の内部レジスタに記憶されたデータが、最初にそのようなデータをRAM404に書き込むことなく、及び/又はDMA回路434を使用して、そのようなデータを、ストリームスイッチ406を介して伝達することなく、異なるプロセッサ420の1つ以上の内部レジスタへ直接伝達され得ることを意味する。
【0083】
図4の例では、アレイコントローラ106によるDPアレイ102内のアプリケーション208のローディングは、計算タイル302のそれぞれのプログラムメモリ422内のカーネルの実行可能プログラムコードをロードする。ストリームスイッチ406などの計算タイル302の他の構成要素の動作は、ストリームチャネル(例えば、論理接続)を実現するために、アプリケーション208の設定データを制御レジスタ414にロードすることによって制御され得る。異なるオーバーレイ206は、アプリケーション208の異なるレイヤを実現するためにストリームチャネルを介して、データ移動の異なるモードを実現するためにロードされ得る。
【0084】
ランタイムパラメータ212は、アレイコントローラ106によってRAM404にロードされ得る。すなわち、プロセッサ420によって実行されるカーネルは、プロセッサ420に、ランタイムパラメータ212を記憶するために確保され得るRAM404の特定のエリアからランタイムパラメータ212の値を読み取らせる命令を含み得る。RAM404に記憶され得る任意のランタイムパラメータ212の値に基づいて、計算タイル302によって実行されるカーネルが設定され得る。例えば、カーネルの実行は、あるランタイムパラメータ212をロードすることによって変更され得る。別の態様では、プロセッサ420は、RAM404から読み取られたランタイムパラメータ212に基づいて実行されるべき特定のカーネル又はカーネルの関数を選択する関数を実行し得る。1つの計算タイル302のRAM404にロードされた特定のランタイムパラメータは、別の異なる計算タイル302の別のRAM404にロードされたランタイムパラメータ(もしあれば)とは異なり得ることを理解されたい。ランタイムパラメータ212は、実行されるアプリケーション208の各レイヤに対して変更され得る。
【0085】
例解の目的で、アプリケーション208がCNNを実現する前の例を検討する。1つのレイヤのランタイムパラメータ212は、特定の行列乗算演算を実行するように、プロセッサ420によって実行されるカーネルを設定し得る。例えば、ランタイムパラメータは、実行されるべき行列乗算演算の次元を指定し得る。別の例では、ランタイムパラメータ212は、実行されるカーネル又は実行される異なるカーネルの特定の関数を指定し得る。例えば、第1のレイヤのランタイムパラメータ212は、レイヤの次元と、畳み込み演算が実行されるべきであることとを示し得る。異なるレイヤのためにロードされたランタイムパラメータ212は、レイヤの異なる次元と、畳み込み及びバッチ正規化が実行されるべきであることとを指定し得る。更に異なるレイヤのためにロードされたランタイムパラメータ212は、レイヤの次元と、畳み込み及びReLUが実行されるべきであることとを指定し得る。この例では、異なる関数、例えば、畳み込み、バッチ正規化、及びReLUは、そのレイヤのためにロードされた特定のランタイムパラメータ212に基づいて選択的に実行され得る一般的なCNNカーネルの異なる関数として実現され得る。すなわち、ランタイムパラメータ212は、特定の関数を実行するようにカーネルを設定する。別の例では、異なる関数は、実行のために選択され、ランタイムパラメータ212によって設定される異なるカーネルとして実現され得る。
【0086】
図5は、メモリタイル306の例示的な実装形態を例解する。
図5の例は、メモリタイル306の特定のアーキテクチャ上の特徴を例解するために提供されており、一般に、DPアレイ102の形態又はメモリタイル306のアーキテクチャを限定するものとしてではない。構成要素及び/又はタイル間のいくつかの接続は、例解を容易にするために省略されている。
【0087】
各メモリタイル306は、DMA回路502、RAM504、ストリームスイッチ506、メモリマップドスイッチ508、及び/又は制御レジスタ514を含む。制御レジスタ514は、メモリタイル306に例解された様々な構成要素の動作を制御するために、メモリマップドスイッチ508によって書き込まれ得る。示されていないが、メモリタイル306の各メモリ構成要素(例えば、RAM504及び制御レジスタ514)は、設定及び/又は初期化の目的で、メモリマップドスイッチ508を介して読み取られ、及び/又は書き込まれ得る。
【0088】
メモリタイル306の各DMA回路502は、ローカルメモリインターフェース532-1を介して同じメモリタイル306内のRAM504に結合され、他の隣接するメモリタイル306の1つ以上のRAM504に結合され得る。
図5の例では、各DMA回路502は、ローカルメモリインターフェース532-1を介して同じメモリタイル306内に含まれるRAM504にアクセスする(例えば、読み取る及び/又は書き込む)ことが可能である。RAM504は、隣接メモリインターフェース532-2及び532-3を含み、これらを通して、東及び西のメモリタイル306のDMA回路は、RAM504にアクセスし得る。例えば、メモリタイル306-2のDMA回路502は、メモリタイル306-1のRAM504及び/又はメモリタイル306-3のRAM504にアクセスし得る。この例におけるDMA回路502は、そのような他のメモリタイルのRAMの隣接メモリインターフェースによって、隣接するメモリタイル306のRAMを読み取り及び/又は書き込み得る。DMA回路502は、RAM504から読み取られたデータをストリームスイッチ406上に置き、ストリームスイッチを介して受信されたデータをRAM504に書き込み得る。
【0089】
図4の例と同様に、メモリマップドスイッチ508は、メモリタイル306の設定及び初期化の目的で使用され、ストリームスイッチ506は、ランタイム中にデータを伝達するために使用される。一態様では、RAM504は、アプリケーション208をDPアレイ102にロードするプロセスの一部として初期化され得る。アプリケーション208をロードすることはまた、ストリームスイッチ506を設定してストリームチャネルを実現する制御レジスタ514に設定データをロードする。
図2に関連して説明された異なるオーバーレイ206は、データ移動の特定のモードを実現するためにロードされ得る。
【0090】
本明細書で説明される例では、特定のタイルは、メモリマップドスイッチ、ストリームスイッチ、及び/又はDMA回路などの、1つ以上の共通又は同様の構成要素を含み得る。しかしながら、メモリタイル306は、概して、その中に含まれる処理要素(例えば、プロセッサ420)の欠如によって特徴付けられることを理解されたい。
【0091】
図6は、インターフェースタイル304の例示的な実装形態を例解する。
図6の例は、インターフェースタイル304の特定のアーキテクチャ上の特徴を例解するために提供されており、DPアレイ102の形態を限定するものとしてではない。構成要素及び/又はタイル間のいくつかの接続は、例解を容易にするために省略されている。
【0092】
本例では、各インターフェースタイル304は、DMA回路602、1つ以上のインターフェース604、ストリームスイッチ606、メモリマップドスイッチ608、及び制御レジスタ614を含む。他の例示的な実装形態では、全てのインターフェースタイル304が、DMA回路602を含むわけではない。アレイインターフェース104は、相互接続108によって、DPアレイ102のアレイタイルとシステム100の他の回路との間のインターフェースとして動作する。
図6の例では、インターフェースタイル304は、メモリタイル306に結合する。他の例示的な実装形態では、インターフェースタイル304は、DPアレイ102がメモリタイル306を含むかどうか、及び/又はDPアレイ102内のそのようなメモリタイル306の場所に応じて、計算タイル302に結合する。相互接続108を通して、インターフェースタイル304は、システム100内及び/又はシステムの外部の1つ以上の他の回路に結合することが可能である。そのような他の回路は、1つ以上のハードワイヤード回路及び/又はサブシステム、プログラマブルロジックで実装された回路及び/又はサブシステムなどを含み得る。
【0093】
図6の例では、インターフェース604は、他のシステム及び/又はシステムの回路に接続することが可能である。例解の目的で、インターフェース604は、NoC、プログラマブルロジック、埋め込みプロセッサ及び/若しくはプロセッサシステム(DPアレイ102から独立した)、ICに埋め込まれたプラットフォーム管理コントローラ、並びに/又はIC内の1つ以上の他のハードワイヤード回路ブロック(例えば、ASICブロック)に結合することが可能である。例えば、インターフェース604は、アレイコントローラ106及び/又はサブシステム112~120のうちの1つ以上への直接接続を含むか又は提供し得る。別の構成では、インターフェース604は、DPアレイ102と同じパッケージ内に位置するが、パッケージ内の異なるダイ内に実装された回路及び/又はシステムと通信するように構成され得る。更に別の構成では、インターフェース604は、DPアレイ102を含むICの外部に位置する回路及び/又はシステムと(例えば、パッケージの外部の回路及び/又はシステムへ)通信するように構成され得る。
【0094】
インターフェースタイル304は、ストリームスイッチ606を介したアプリケーションランタイムデータであっても、又はメモリマップドスイッチ608を介したアプリケーションであっても、データを、相互接続108を介して受信される、及び/又はそのようなデータを、相互接続108を介して他の回路に送出する際に、各それぞれのインターフェースタイル304の上に位置するアレイタイルに伝達することが可能である。更に、インターフェースタイル304は、メモリマップドスイッチ608によって各それぞれのインターフェースタイル304の制御レジスタ614にアプリケーション(例えば、設定データを含む)をロードすることによって設定可能である。例えば、アレイコントローラ106は、設定データを制御レジスタ614に書き込み得る。
【0095】
集合的に考えると、DPアレイ102内では、ストリームスイッチ(406、506、及び606)は、(アプリケーション自体と区別された)アプリケーションランタイムデータを伝達することが可能であるストリームネットワークを形成する。アプリケーションランタイムデータは、アプリケーションのランタイム中にDPアレイ102のアレイタイル(例えば、計算タイル302)によって受信され、操作され、又は生成(例えば、出力)されるデータを含む。アプリケーションランタイムデータは、一般に、ランタイム中に、RAM404及びRAM504に記憶され、アプリケーションによって設定されたストリームスイッチによって実現されるストリームチャネルを介して伝達される。集合的に考えると、メモリマップドスイッチ(408、508、及び608)は、アプリケーションがDPアレイ102にロードされ得るメモリマップドネットワークを形成する。一態様では、オーバーレイ206及び/又はランタイムパラメータ212は、メモリマップドネットワークを介して伝達され得る。別の態様では、オーバーレイ206及び/又はランタイムパラメータ212は、ストリームネットワークを介して伝達され得る。ワークロードを開始するタスクは、メモリマップドネットワークを介して(例えば、DMA回路434、502、及び/又は602に)伝達され得る。別の態様では、タスクは、ストリームネットワークを介して伝達され得る。
【0096】
DPアレイ102を参照すると、タイルの制御レジスタ(414、514、及び614)に書き込まれる設定データはまた、タイルのストリームスイッチが回線交換ストリーム相互接続として動作するか、又はパケット交換ストリーム相互接続として動作するかを制御し得る。回線交換ストリーム相互接続は、DPアレイ102のタイル間の高帯域幅通信に好適なポイントツーポイントの専用ストリームを実現することが可能である。パケット交換ストリーム相互接続により、ストリームを共有して、多数の論理ストリームを1つの物理チャネル上に時間多重化して、中帯域幅通信を行うことができる。したがって、ストリームスイッチは、アプリケーションデータが伝達され得るパケット交換ストリームネットワークを実現するように構成され得る。
【0097】
図7は、計算タイル302間のカスケード接続性の例を例解する。例解の目的で、DPアレイ102の計算タイル302のサブセットのみが例解されている。本例では、コア402のプロセッサ420は、隣接するコア402の1つ以上の他のプロセッサ420に直接接続され得る。プロセッサ420間の直接接続は、本明細書では「カスケード接続」と称され、
図7の例では「CC」と標識されている。カスケード接続は、RAM404、504及び/又はストリームスイッチを介したデータを共有することから独立して動作可能である。
図7の例では、各プロセッサ420は、カスケード接続を介して隣接するプロセッサ420に結合されている。他の例では、プロセッサ420は、複数のカスケード接続を介して他のプロセッサに接続され得る。
【0098】
各カスケード接続は、プロセッサによって、出力のカスケード接続又は入力のカスケード接続とみなされ得る。例えば、計算タイル302-6のプロセッサ420の観点から、計算タイル302-3から計算タイル302-6へのカスケード接続は、入力のカスケード接続と称され得る。計算タイル302-6のプロセッサ420の観点から、計算タイル302-6から右側に隣接する計算タイルへのカスケード接続は、出力のカスケード接続と称され得る。
【0099】
各カスケード接続は、マルチビットデータストリーム(例えば、並列で最大数百ビット)を1つのプロセッサ420から別のプロセッサに伝達し得る。一態様では、カスケード接続は、プロセッサ420内の累積レジスタの内容を出力し、その内容、例えば、クロックサイクルごとに多数のビット、を隣接するプロセッサ420の別の内部レジスタに伝達することができる。受信レジスタは、受信プロセッサ420内の累積レジスタに供給するか、又はそれに結合され得る。累積レジスタは、プロセッサの演算中に生成された中間値を保持することができる一時記憶場所として働く、プロセッサに含まれるレジスタの一種である。演算の中間結果は、累積レジスタに漸進的に書き込まれ、以前の値を上書きし得る。上で述べられるように、各カスケード接続は、最初にデータをRAMに記憶することなく、又はストリームスイッチ及び/又はDMA回路を利用することなく、データを1つのプロセッサ420から別のプロセッサ420に直接伝達することを可能にする。
【0100】
各カスケード接続は、データが1つのプロセッサ420から別のプロセッサへカスケード接続上で伝搬されるように独立して有効化され得るか、又はデータがカスケード接続上で伝搬されないように無効化され得る。一態様では、各カスケード接続は、それぞれのプロセッサ420によって実行されるカーネルのプログラムコードに基づいて選択的に有効化され得る。すなわち、カーネルのプログラムコードは、プロセッサ420に、出力のカスケード接続にデータを書き込ませるか、又は入力のカスケード接続からデータを読み取らせる命令を含み得る。これらの命令は、所与のプロセッサ420に、カスケード接続からデータを読み取るため、及び/又はカスケード接続にデータを書き込むための関数を実行させるオーバーレイ206のための好適なランタイムパラメータ212を書き込むことによって実行又はスキップされ得る。
【0101】
別の例では、ランタイムパラメータ212は、カーネルを実行する際にプロセッサ420によって使用されるアドレス指定を指定するために使用され得る。例えば、ランタイムパラメータ212は、プロセッサが、DMA回路及びストリームスイッチを介して、同じ計算タイル内のRAM404に、特定の隣接するRAM404に、及び/又は別のメモリに書き込むように、アドレス指定をシフトするために使用され得る。このようにして、DPアレイ102内のデータの移動は、アプリケーション208のランタイム中にロードされるそれぞれのオーバーレイ206のための適切なランタイムパラメータ212をロードすることによって更に修正され得る。
【0102】
別の例では、ランタイムパラメータ212は、入力の及び/又は出力のカスケード接続を使用して通信するように構成された計算タイル302において実行するカーネルを選択するか、又は機能的に類似若しくは同じであり得るが、カスケード接続を利用しない異なるカーネルを選択し得る。
【0103】
図8は、計算タイル302-1が、別の計算タイルへのカスケード接続を使用せずに動作するように構成されている例を例解する。
図8に例解された構成は、オーバーレイ及び任意選択的にランタイムパラメータをDPアレイ102にロードすることによって実現され得る。考察の目的で、カスケード接続を利用しないオーバーレイは、本明細書では「非カスケードオーバーレイ」と称される。同様に、非カスケードオーバーレイによってDPアレイ102において実現される動作モードは、「非カスケードモード」と称され得る。非カスケードモードでは、計算タイル302のプロセッサ420は、カスケード接続によって通信しない。
【0104】
図8の例では、非カスケードオーバーレイを使用して、計算タイル302は、行列乗算演算を実行するように、構成されている。他の例では、計算タイル302は、他のタイプの演算を実行し得る。例解の目的で、DPアレイ102は、行列Cを生成するために行列A及びBを乗算するために使用される。非カスケードモードにおけるDPアレイ102のパーティションの各計算タイル302は、行列Cの1つの要素を生成するように構成されている。
【0105】
本例では、計算タイル302-1は、行列Aの第1行と行列Bの第1列とのドット積を生成して、要素C
00を生成する。すなわち、計算タイル302-1は、(A
00×B
00)+(A
01×B
10)を計算するようにプログラムされる。
図8の例では、要素A
00、B
00、A
01、及びB
10は、アプリケーションの一部としてストリームネットワーク内に実現された1つ以上の入力ストリームチャネルを介して計算タイル302-1に提供される。
【0106】
したがって、8つの計算タイルを有するDPアレイ(又はそのパーティション)は、8つの出力要素を並列に生成することが可能である。非カスケードオーバーレイを使用するこの構成では、DPアレイ102は、4つの計算タイル302を使用して、行列Cを並列に計算することが可能である。4つの計算タイル302の各々は、行列Cの要素C00、C01、C10、及びC11のうちの1つを並列に計算する。
【0107】
図9は、計算タイル302-1及び302-2が、カスケード接続を使用して動作するように構成されている例を例解する。
図9に例解された構成は、オーバーレイ及び任意選択的にランタイムパラメータをDPアレイ102にロードすることによって実現され得る。考察の目的で、1つ以上のカスケード接続を利用するオーバーレイは、本明細書では「カスケードオーバーレイ」と称される。同様に、カスケードオーバーレイによって実現される動作モードは、選択された計算タイル302のプロセッサ420がカスケード接続によって通信する「カスケードモード」と称され得る。場合によっては、選択されたプロセッサ420は、カスケード接続のみを使用して通信し得、他の場合には、そのようなプロセッサは、カスケード接続とストリームチャネル(例えば、ストリームネットワーク)との組み合わせを使用して通信し得ることを理解されたい。
【0108】
図9の例では、カスケードオーバーレイを使用して、計算タイル302は、行列乗算演算を実行するように、構成されている。他の例では、計算タイル302は、他の演算を実行し得る。例解の目的で、DPアレイ102は、行列Cを生成するために行列A及びBを乗算するために使用される。
図9の例では、計算タイル302の対は、行列Cの1つの要素を生成するために協働して動作する。
図9は、計算タイル302-1及び計算タイル302-2のプロセッサ420がカスケード接続によって結合されていることを示す。したがって、計算タイル302-2は、A
00×B
00を計算することができ、一方、計算タイル302-1は、A
01×B
10を計算し、積を合計することができる。
【0109】
例えば、A00及びB00は、ストリームネットワーク内に実現された1つ以上の入力ストリームチャネルを介してタイル302-2を計算するために提供されている。要素A01及びB10は、ストリームネットワーク内に実現された1つ以上の入力ストリームチャネルを介してタイル302-1を計算するために提供されている。A00×B00の結果は、計算タイル302-2のプロセッサ420の累積レジスタから、計算タイル302-1のプロセッサ420へのカスケード接続を介して出力され得る。次いで、計算タイル302-1のプロセッサ420は、A01×B10を計算し、2つの積を合計する。
【0110】
図9の構成は、
図8の例よりも短い時間で(例えば、より少ないクロックサイクルを使用して)行列Cの要素C
00を計算することが可能であるが、行列Cの各要素を計算するために1つではなく2つの計算タイル302を利用する。したがって、
図9のカスケードモードを使用する8つの計算タイルを有するDPアレイは、8個ではなく4個の要素を同時に生成することができる。計算タイル302のカスケード接続された各対は、
図8の例からの1つの計算ユニットよりも少ないクロックサイクルを使用して、出力要素を計算することが可能である。この構成では、カスケードオーバーレイを使用して、行列Cを計算することは、DPアレイ102の8つ全ての計算タイルを使用して並列に実行され得、ここで、2つのカスケード接続された計算タイルの各セットは、C
00、C
01、C
10、及びC
11のうちの1つを並列に計算する。
【0111】
1つ以上の例示的な実装形態では、カスケード接続は、非カスケードカーネルを実行する計算タイル302のプロセッサ420によって無効化され得る。非カスケードカーネルは、プロセッサ420にカスケード接続からデータを読み取らせるか、又はカスケード接続にデータを書き込ませるどんなプログラミング又は命令も含まないカーネルである。同様に、カスケード接続は、カスケードカーネルを実行する計算タイル302のプロセッサ420によって有効化され得る。カスケードカーネルは、プロセッサ420にカスケード接続からデータを読み取らせるか、又はカスケード接続にデータを書き込ませるプログラミング又は命令を含むカーネルである。
【0112】
例えば、1つ以上の例示的な実装形態では、各オーバーレイは、所望の接続性及び/又は機能性を達成するために各計算タイル302によって実行されるべき特定のカーネルを指定し得る。DPアレイ102の初期設定時に、各プログラムメモリ422は、1つ以上の異なるカーネルでロードされ得る。同じ計算タイル302内のプロセッサ420によって実行されるとき、各カーネルは、カスケード接続が使用されるべきかどうかを指示する。この例では、カーネルは、カスケード接続を使用する第1のタイプ、又はカスケード接続を使用しない第2のタイプのものであり得る。カスケード接続を使用する第1のタイプのカーネルのうち、1つ以上のカーネルは、カスケード接続からデータを読み取るように構成され得(例えば、読み取りカスケードカーネル)、1つ以上のカーネルは、カスケード接続にデータを書き込むように構成され得(例えば、書き込みカスケードカーネル)、1つ以上のカーネルは、カスケード接続からデータを読み取り、カスケード接続にデータを書き込むために利用可能であり得る。アクティブ化カーネルと称される、別のタイプのカーネルがまた、プログラムメモリ422に含まれ得る。アクティブ化カーネルは、選択されたアクティブ化関数を実行し得る。一態様では、アクティブ化カーネルは、整流化線形(ReLU)アクティブ化関数を実行し得る。アクティブ化カーネルは、他のアクティブ化関数を実行し得ることを理解されたい。一例では、実行される特定のカーネル(例えば、カスケード及び/若しくは非カスケード、並びに/又は実行される特定のアクティブ化関数)は、ランタイムパラメータ212によって指定され得る。
【0113】
図7の例を参照すると、カスケードモードにおいて有効化されたカスケード接続によって接続された計算タイルは、実行のための適切なカーネルを選択することによって互いに協調して動作し得る。例えば、計算タイル302-3は、データを計算タイル302-6に送信するためにカスケード接続にデータを書き込む、書き込みカスケードカーネルを実行し得る。計算タイル302-6は、カスケード接続からデータを読み取って計算タイル302-3からデータを受信する、読み取りカスケードカーネルを実行し得、以下同様である。
【0114】
図9の例を再び参照すると、計算タイル302-2によって実行される書き込みカスケードカーネルは、(A
00×B
00)を計算し、その結果をカスケード接続に書き込み得る。計算タイル302-1によって実行される読み取りカスケードカーネルは、入力のカスケード接続から結果を読み取り、(A
01×B
10)を計算し、結果を合計することが可能である。
【0115】
図10A、
図10B、及び
図10Cは、例示的なオーバーレイの特定の動作特徴を例解する。
図10A、
図10B、及び
図10Cは、異なるオーバーレイによって実現される論理接続性の例を例解する。
図10A、
図10B、及び
図10Cの例では、A項は特徴マップを表し、一方、B項は重みを表す。C項は、計算タイル302の演算によって生成される出力データ項目を表す。
図10A、
図10B、及び
図10Cの例では、オーバーレイは、4つの計算タイル302を使用して実現されている。例えば、アプリケーションを実行するために使用されるパーティションは、4つの計算タイルを含む。
【0116】
図10Aは、オーバーレイ及び対応するデータ移動のモードの例示的な実装形態を例解する。
図10Aの例では、例解されたオーバーレイは、重みのブロードキャストによって特徴付けられている。「ブロードキャスト」という用語は、選択された(例えば、単一の)チャネルを介して多数の異なるエンドポイント又は宛先に同じデータ項目を伝達することを指す。本例では、重みは、単一のストリームチャネルを介して4つの計算タイル302の各々にブロードキャストされる。示されるように、重みB
00は、最初に各計算タイル302にブロードキャストされる。重みは、やはり計算タイルに提供される特徴マップ(A)との行列乗算演算の一部として使用される。特徴マップが提供されるストリームチャネルは、例解されていない。明らかに、
図10Aに例解された計算タイル302の各々は、異なる特徴マップを受信するので、4つのストリームチャネルが、特徴マップを伝達するために必要とされる(例えば、例解された計算タイル302の各々に1つのストリームチャネル)。
図10Aの例では、計算タイル302間にカスケード接続は利用されていない。
【0117】
この例では、各計算タイル302は、同じ重み及び異なる特徴マップを受け取る。例えば、計算タイル302-2は、最初にA00及びB00を受信し、計算タイル302-1は、最初にA10及びB00を受信し、計算タイル302-3は、最初にA20及びB00を受信し、計算タイル302-6は、最初にA30及びB00を受信する。計算タイル302の各々は、行列乗算演算を実行する。その後、重みB10が、4つの計算タイルの各々にブロードキャストされる。計算タイル302-2は、A01及びB10を受信し、計算タイル302-1は、A11及びB10を受信し、計算タイル302-3は、A21及びB10を受信し、計算タイル302-6は、A31及びB10を受信する。次いで、各計算タイル302は、行列乗算演算を実行する。各計算タイル302は、2つの行列乗算演算の結果を合計し、その合計を出力することが可能である。
【0118】
図10Bは、オーバーレイ及び対応するデータ移動のモードの別の例示的な実装形態を例解する。
図10Bの例では、例解されたオーバーレイは、特徴マップのブロードキャストによって特徴付けられている。特徴マップは、4つの計算タイル302の各々にブロードキャストされている。特徴マップは、単一のストリームチャネルを介してブロードキャストされ得る。示されるように、特徴マップA
00は、最初に各計算タイル302にブロードキャストされる。特徴マップは、やはり計算タイルに提供される重みとの行列乗算演算の一部として使用される。重みが提供されるストリームチャネルは、例解されていない。明らかに、
図10Bに例解された計算タイル302の各々は、異なる重みを受信するので、4つのストリームチャネルが、重みを伝達するために必要とされる(例えば、例解された計算タイル302の各々に1つ)。この例では、各計算タイル302は、同じ特徴マップ及び異なる重みを受信する。例えば、計算タイル302-2は、最初にA
00及びB
00を受信し、計算タイル302-1は、最初にA
00及びB
01を受信し、計算タイル302-3は、最初にA
00及びB
02を受信し、計算タイル302-6は、最初にA
00及びB
03を受信する。計算タイル302の各々は、行列乗算演算を実行する。その後、計算タイル302-2は、A
01及びB
10を受信し、計算タイル302-1は、A
01及びB
11を受信し、計算タイル302-3は、A
01及びB
12を受信し、計算タイル302-6は、A
01及びB
13を受信する。各計算タイル302は、行列乗算演算を実行することが可能である。各計算タイル302は、2つの行列乗算演算の結果を合計し、その合計を出力することが可能である。
【0119】
図10Cは、オーバーレイ及び対応するデータ移動のモードの別の例示的な実装形態を例解する。
図10Cの例では、例解されたオーバーレイは、多数の重みのブロードキャストによって特徴付けられている。第1の重みは、1つのストリームチャネルを介して2つの異なる計算タイルにブロードキャストされている。第2の重みは、1つのストリームチャネルを介して2つの異なる計算タイルにブロードキャストされている。第1のストリームチャネルは、計算タイル302-2及び302-3に重みB
00をブロードキャストし、一方、第2、かつ異なるストリームチャネルは、計算タイル302-1及び302-6に重みB
10を併行してブロードキャストする。この例では、2つの計算タイル302が使用されて、2つの行列乗算演算及び合計を実行し、それにより、より高速な演算(より高いスループット)を有するより多数の計算タイルの使用をもたらす。
【0120】
図10Cの例では、計算タイル302-2は、A
00×B
00の行列乗算演算を実行する。結果は、カスケード接続を介して計算タイル302-1に渡される。計算タイル302-1は、A
01及びB
10の行列乗算演算を実行する。計算タイル302-1は、2つの行列乗算結果を合計し、結果として生じる合計を出力する。計算タイル302-3は、A
10×B
00の行列乗算演算を実行する。結果は、カスケード接続を介して計算タイル302-6に渡される。計算タイル302-6は、A
11及びB
10の行列乗算演算を実行する。計算タイル302-6は、2つの行列乗算結果を合計し、結果として生じる合計を出力する。
【0121】
図10A、
図10B、及び
図10Cの例は、異なるオーバーレイが、DPアレイ102のパーティション内に実現された所与のアプリケーションのためのデータ移動の異なるモードをどのように実現し得るかを例解する。例えば、
図10A及び
図10Bの例では、計算タイルは各々、結果として生じるC行列の要素を生成する。
図10Cの例では、2つの計算タイルが、結果として生じるC行列の1つの要素を計算するために使用される。
図10Cの例は、アレイCの4つの要素を生成するために、
図10A及び
図10Bの例の2倍の数の計算タイルを必要とするが、より大きなデータスループット(例えば、行列Cの要素がより少ないクロックサイクルで計算され得るという点でより大きな計算速度)を提供する。各異なるオーバーレイは、特定の形状を有するレイヤを実現するのに適し得る。
【0122】
図11は、DPアレイ102のパーティションのためのアプリケーションを設定するために使用される例示的なオーバーレイの属性を例解する表1100である。
図11の例では、各オーバーレイ0、1、及び2は、DPアレイ102内の、又はDPアレイ102のパーティション内のデータ移動の特定のモードを実現する。各オーバーレイは、示されたパラメータに基づいてデータ移動のモードを指定する。
【0123】
本例では、「カスケード」列は、オーバーレイがカスケード接続を利用するかどうかを示す。「IFMストリーム」列(「IFM」は「入力特徴マップ」を表す)は、アプリケーションによって作成されたストリームチャネルを介して、オーバーレイを実現する特定の計算タイル302に送信される異なる特徴マップの数を指定する。特徴マップは、同時に送信され得る。「Wストリーム」列は、オーバーレイを実現する特定の計算タイル302へのアプリケーションによって作成されたストリームチャネルを介して提供される、異なる重みの数を指定する。重みは、同時に送信され得る。
【0124】
したがって、
図11の例では、オーバーレイ0は、モード0と称されるデータ移動のモードを実現する。モード0において、「IFMストリーム」パラメータの4は、4つの異なる特徴マップがストリームチャネルを介して伝達されることを示す。「Wストリーム」パラメータの2は、2つの異なる重みがストリームチャネルを介して伝達されることを示す。モード0は、カスケードパラメータによって示されるように、非カスケードモードである。
【0125】
図11の例では、オーバーレイ1は、モード1と称されるデータ移動のモードを実現する。モード1において、「IFMストリーム」パラメータの2は、2つの異なる特徴マップがストリームチャネルを介して伝達されることを示す。「Wストリーム」パラメータの4は、4つの異なる重みがストリームチャネルを介して伝達されることを示す。モード1は、カスケードパラメータによって示されるように、非カスケードモードである。
【0126】
図11の例では、オーバーレイ2は、モード2と称されるデータ移動のモードを実現する。モード2において、「IFMストリーム」パラメータの4は、4つの異なる特徴マップがストリームチャネルを介して伝達されることを示す。「Wストリーム」パラメータの4は、4つの異なる重みがストリームチャネルを介して伝達されることを示す。モード2は、カスケードパラメータによって示されるように、カスケードモードである。
【0127】
図12Aは、アプリケーションによって実現されるストリームチャネルの例と、ストリームチャネルを使用するオーバーレイ0の実装形態とを例解する。
図12Aの例では、特徴マップ及び重みを計算タイル302に伝達するために使用される異なるストリームチャネルが、ストリームチャネル0、1、2、3、4、5、6、及び7として描写されている。本例では、ストリームチャネルが、データを計算タイル302に提供しているので、ストリームチャネルは「入力」ストリームチャネルとみなされる。ストリームチャネル0~7は、特徴マップ及び重みをそれぞれの計算タイル302に伝達する。実現されている特定のオーバーレイは、どのストリームチャネルがどの特定の重みを伝達し、どのストリームチャネルがどの特定の特徴マップを伝達するかを定義する。
【0128】
例解及び便宜の目的で、
図12A、
図12B、及び
図12Cでは、タイルは再付番されている。更に、DPアレイ102又はそのパーティションは、この例では8つの計算タイルと2つのメモリタイルとを含む。
【0129】
図12Aの例では、異なるデータ項目(例えば、特徴マップ及び/又は重み)は、メモリタイル306内に位置する異なるバッファから様々なストリームチャネルにデータ項目を供給することによって、様々なストリームチャネル0~7を介して提供され得る。すなわち、特定のバッファを特定のストリームチャネルに接続することによって、ストリームチャネルは、そのバッファに含まれるデータ項目のタイプを伝達する。考察されるように、メモリタイル306が省略される場合、データは、オンチップメモリであろうとオフチップメモリであろうと、他のメモリに記憶された他のバッファからストリームチャネル0~7に供給され得る。
【0130】
図12Aの例では、4つの異なる特徴マップが、2つの異なる重みとともに伝達されている。4つの異なるストリームチャネルの各々は、異なる特徴マップ(F0、F1、F2、及びF3)を伝達する。メモリタイル306-1のRAM504は、バッファB0、B1、及びB2を含む。メモリタイル306-2のRAM504は、バッファB3、B4、及びB5を含む。バッファB0は、特徴マップF0を記憶する。バッファB1は、特徴マップF1を記憶する。バッファB2は、重みW0を記憶する。バッファB3は、重みW1を記憶する。バッファB4は、特徴マップF2を記憶する。バッファB5は、特徴マップF3を記憶する。
【0131】
図12Aの例では、バッファ0は、ストリームチャネル0に供給する。ストリームチャネル0は、特徴マップF0を計算タイル302-1及び302-2の各々に伝達するように構成されている。バッファ1は、ストリームチャネル1に供給する。ストリームチャネル1は、特徴マップF1を計算タイル302-3及び302-4の各々にブロードキャストするように構成されている。ストリームチャネル2は、バッファB2からデータが供給される。ストリームチャネル2は、重みW0を計算タイル302-1及び302-6の各々にブロードキャストするように構成されている。ストリームチャネル3は、バッファB2からデータが供給される。ストリームチャネル3は、重みW0を計算タイル302-3及び302-8の各々にブロードキャストするように構成されている。ストリームチャネル4は、バッファB3からデータが供給される。ストリームチャネル4は、重みW1を計算タイル302-2及び302-5の各々に伝達するように構成されている。ストリームチャネル5は、バッファB3からデータが供給される。ストリームチャネル5は、重みW1を計算タイル302-4及び302-7の各々にブロードキャストするように構成されている。ストリームチャネル6は、バッファB4からデータが供給される。ストリームチャネル6は、特徴マップF2を計算タイル302-6及び302-5の各々に伝達するように構成されている。ストリームチャネル7は、バッファB5からデータが供給される。ストリームチャネル7は、特徴マップF3を計算タイル302-8及び302-7の各々に伝達するように構成されている。
【0132】
図12Aの例では、各ストリームチャネルに提供される特定のデータ項目、例えば、特定の特徴マップ及び/又は重みは、メモリタイル306の設定、より具体的には、各それぞれのストリームチャネルにデータを供給するために使用されるメモリ内の特定のバッファ(B0、B1、B2、B3、B4、及びB5)に依存する。オーバーレイは、それぞれのタイル(例えば、この例ではメモリタイル306及び計算タイル302)内のDMA回路を設定することによって、バッファからストリームチャネルへのペアリングを指示する。
【0133】
オーバーレイ0は、メモリタイル306のDMA回路を、特定のバッファからストリームチャネルへのマッピングを用いてプログラムするアレイコントローラ106によって、DPアレイ102のパーティション内に実現され得る。別の態様では、データがメモリタイル306以外のメモリから得られる場合、データを計算タイル302に提供するために他のメモリにアクセスするインターフェースタイル304などの他のタイルのDMA回路が、特定のバッファからストリームチャネルへのマッピングを用いてプログラムされ得る。アレイコントローラ106は、例えば、データを適切なDMA回路に書き込んで、示されたストリームチャネルへのバッファのマッピングを作成することによって、
図12Aのオーバーレイ0を実現する。更に、バッファB0~B5は、アプリケーションのレイヤ(例えば、オーバーレイ)を実現するためにそのようなデータを移動させるように、インターフェースタイル304及び/又はメモリタイル306のDMA回路をプログラムするアレイコントローラ106によって、他のメモリからメモリタイル306に移動され得る。
【0134】
各計算タイル302のそれぞれのプロセッサ420において実行される特定のカーネル及び/又はその関数は、異なるストリームチャネルを介して受信されたデータを正しく処理するために必要な実行可能命令を提供する。ストリームチャネルを介して提供されるデータは、1つのオーバーレイから別のオーバーレイに変化し得るが、実現される各オーバーレイのそれぞれの計算タイルに適切なランタイムパラメータ212を提供することによって、そのようなカーネルの設定に基づいて、様々な計算タイル302において実行される特定のカーネル及び/又は関数も変化し得る。各計算タイル302に提供されるランタイムパラメータ212は、その中のプロセッサ420によって実行されるカーネルが、使用される対応するオーバーレイに基づいて実現されている特定のレイヤに対する任意の計算を実行する際に、受信されたデータを正しく解釈し適用することを確実にする。
【0135】
1つ以上の他の例示的な実装形態では、各オーバーレイは、それぞれの計算タイルにおいて実行されるカーネルを選択し得、ランタイムパラメータ212は、そのようなカーネルを設定し得る。
【0136】
図12Aの例では、各計算タイル302は、
図13において例解される出力ストリームチャネルを介して結果を出力する。計算タイル302のうちの1つ以上はまた、非カスケードカーネルの実行に続いてアクティブ化カーネルを実行するように構成され得る。
【0137】
図12Bは、アプリケーションによって実現されるストリームチャネルの例と、ストリームチャネルを使用するオーバーレイ1の実装形態とを例解する。
図12Bにおいて例解されるストリームチャネルは、入力ストリームチャネルである。
図12Bの例では、ストリームチャネル0~7は、
図12Aに関連して説明したものと同じである。すなわち、
図12A及び
図12Bは、同じアプリケーションによって実現されるストリームチャネルを例解し、異なるオーバーレイが実現されるときに適所に留まり得る。したがって、
図12Bの例では、各ストリームチャネル0~7は、
図12Aの例におけるものと同じ計算タイル302にデータを提供する。
【0138】
図12Bの例では、異なるデータ項目(例えば、特徴マップ及び/又は重み)は、メモリタイル306内に位置する異なるバッファから様々なストリームチャネルにデータ項目を供給することによって、様々なストリームチャネル0~7を介して提供され得る。すなわち、特定のバッファを特定のストリームチャネルに接続することによって、ストリームチャネルは、そのバッファに含まれるデータ項目のタイプを伝達する。考察されるように、メモリタイル306が省略される場合、データは、オンチップメモリであろうとオフチップメモリであろうと、他のメモリに記憶された他のバッファからストリームチャネル0~7に供給され得る。
【0139】
図12Bの例では、2つの異なる特徴マップが、4つの異なる重みとともに伝達されている。メモリタイル306-1のRAM504は、バッファB0、B1、及びB2を含む。メモリタイル306-2のRAM504は、バッファB3、B4、及びB5を含む。バッファB0は、特徴マップF0を記憶する。バッファB1は、重みW0を記憶する。バッファB2は、重みW1を記憶する。バッファB3は、重みW2を記憶する。バッファB4は、重みW3を記憶する。バッファB5は、特徴マップF1を記憶する。
【0140】
図12Bの例では、4つのストリームチャネルが、特徴マップを伝達するために使用されている。4つのストリームチャネルのうちの2つの第1のペアは、同じ特徴マップ(例えば、F0)を伝達する。4つのストリームチャネルのうちの2つの第2のペアは、同じ特徴マップ(例えば、F1)を伝達するが、第1のペアのストリームチャネルによって伝達される特徴マップとは異なる特徴マップを伝達する。4つのストリームチャネルは、4つの異なる重みを伝達するために使用される。
【0141】
図12Bの例では、バッファ0は、ストリームチャネル0及び1に供給する。ストリームチャネル0及び1が同じバッファからデータを供給されると、各々が、同じデータを伝達し、この場合は特徴マップF0である。ストリームチャネル0は、特徴マップF0を計算タイル302-1及び302-2の各々にブロードキャストするように構成されている。ストリームチャネル1は、特徴マップF0を計算タイル302-3及び302-4の各々にブロードキャストするように構成されている。ストリームチャネル2は、バッファB1からデータが供給される。ストリームチャネル2は、重みW0を計算タイル302-1及び302-6の各々にブロードキャストするように構成されている。ストリームチャネル3は、バッファB2からデータが供給される。ストリームチャネル3は、重みW1を計算タイル302-3及び302-8の各々にブロードキャストするように構成されている。ストリームチャネル4は、バッファB3からデータが供給される。ストリームチャネル4は、重みW2を計算タイル302-2及び302-5の各々にブロードキャストするように構成されている。ストリームチャネル5は、バッファB4からデータが供給される。ストリームチャネル5は、重みW3を計算タイル302-4及び302-7の各々にブロードキャストするように構成されている。ストリームチャネル6及びストリームチャネル7は、同じバッファB5からデータが供給される。ストリームチャネル6は、特徴マップF1を計算タイル302-6及び302-5の各々にブロードキャストするように構成されている。ストリームチャネル7は、特徴マップF1を計算タイル302-8及び302-7の各々にブロードキャストするように構成されている。
【0142】
図12Bの例では、特徴マップF0及びF1並びに重みW0、W1、W2、及びW3が、メモリタイル306から計算タイル302に提供される。各ストリームチャネルに提供される特定のデータ項目、例えば、特定の特徴マップ及び/又は重みは、メモリタイル306の設定、より具体的には、各それぞれのストリームチャネルにデータを供給するために使用されるメモリ内の特定のバッファ(B0、B1、B2、B3、B4、及びB5)に依存する。オーバーレイは、それぞれのタイル(例えば、この例ではメモリタイル306)内のDMA回路を設定することによって、バッファからストリームチャネルへのペアリングを指示する。
【0143】
オーバーレイ1は、メモリタイル306のDMA回路を、特定のバッファからストリームチャネルへのマッピングを用いてプログラムするアレイコントローラ106によって、DPアレイ102のパーティション内に実現され得る。別の態様では、データがメモリタイル306以外のメモリから得られる場合、データを計算タイル302に提供するために他のメモリにアクセスするインターフェースタイル304などの他のタイルのDMA回路が、特定のバッファからストリームチャネルへのマッピングを用いてプログラムされ得る。アレイコントローラ106は、例えば、データを適切なDMA回路に書き込んで、示されたストリームチャネルへのバッファのマッピングを作成し、例解されるようにメモリタイル306内にバッファを作成するためにデータを移動させることによって、
図10Bのオーバーレイ1を実現する。
【0144】
各計算タイル302のそれぞれのプロセッサ420において実行される特定のカーネル及び/又はその関数は、異なるストリームチャネルを介して受信されたデータを正しく処理するために必要な実行可能命令を提供する。ストリームチャネルを介して提供されるデータは、1つのオーバーレイから別のオーバーレイに変化し得るが、実現される各オーバーレイのそれぞれの計算タイルに適切なランタイムパラメータ212を提供することによって、そのようなカーネルの設定に基づいて、様々な計算タイル302において実行される特定のカーネル及び/又は関数も変化し得る。各計算タイル302に提供されるランタイムパラメータ212は、その中のプロセッサ420によって実行されるカーネルが、使用される対応するオーバーレイに基づいて実現されている特定のレイヤに対する任意の計算を実行する際に、受信されたデータを正しく解釈し適用することを確実にする。
【0145】
1つ以上の他の例示的な実装形態では、各オーバーレイは、それぞれの計算タイルにおいて実行されるカーネルを選択し得、ランタイムパラメータ212は、そのようなカーネルを設定し得る。
【0146】
図12Bの例では、各計算タイル302は、
図13において例解される出力ストリームチャネルを介して結果を出力する。計算タイル302のうちの1つ以上はまた、非カスケードカーネルの実行に続いてアクティブ化カーネルを実行するように構成され得る。
【0147】
図12Cは、アプリケーションによって実現されるストリームチャネルの例と、ストリームチャネルを使用するオーバーレイ2の実装形態と、を例解する。
図12Cにおいて例解されるストリームチャネルは、入力ストリームチャネルである。
図12Cの例では、ストリームチャネル0~7は、
図12A及び
図12Bに関連して説明したものと同じである。すなわち、
図12A、
図12B、及び
図12Cは、同じアプリケーションによって実現されるストリームチャネルを例解し、異なるオーバーレイが実現されるときに適所に留まり得る。したがって、
図12Cの例では、各ストリームチャネル0~7は、
図12Bの例におけるものと同じ計算タイル302にデータを提供する。
【0148】
図12Cの例では、4つの異なる特徴マップが、4つの異なる重みとともに伝達されている。メモリタイル306-1のRAM504は、バッファB0、B1、B2、及びB3を含む。メモリタイル306-2のRAM504は、バッファB4、B5、B6、及びB7を含む。バッファB0は、特徴マップF0を記憶する。バッファB1は、特徴マップF1を記憶する。バッファB2は、重みW0を記憶する。バッファB3は、重みW1を記憶する。バッファB4は、重みW2を記憶する。バッファB5は、重みW3を記憶する。バッファB6は、特徴マップF2を記憶する。バッファB7は、特徴マップF3を記憶する。
【0149】
上で述べられるように、オーバーレイ2は、カスケードモードを実現するカスケードオーバーレイである。
図12Cの例では、計算タイル302の選択されたプロセッサ420は、カスケード接続を使用して接続され、例えば、通信するように構成されている。カスケードモードでは、カスケード接続、例えば、カスケード接続のうちの少なくとも選択されたもの、が有効化される。すなわち、カスケード接続のうちの有効化されたものは、データを渡すことができる。
図12Cの例は、垂直カスケード接続(例えば、同じ列内のプロセッサ間のカスケード接続)を利用するが、カスケード接続は、実現される特定のDPアレイアーキテクチャ及びオーバーレイに従って、水平に(行方向に)及び/又は垂直に(列方向に)走り得ることを理解されたい。
【0150】
カスケード接続が有効化される例は、ランタイムパラメータ212によって、出力のカスケード接続にデータを書き込むように設定されたカーネル及び/又は関数と、ランタイムパラメータ212によって、入力のカスケード接続からデータを読み取るように構成された同じカスケード接続に結合された別のプロセッサ420内の別のカーネル及び/又は関数と、を実行する、計算タイル302のプロセッサ420によるものである。
図12Cの例では、カスケード接続された計算タイルの対は、計算タイル(302-1及び302-3)、(302-2及び302-4)、(302-5及び302-7)、並びに(302-6及び302-8)である。
【0151】
図12Cの例では、アプリケーションのためのオーバーレイ2を実現するように構成されており、ストリームチャネル0~7の各々は、メモリタイル306に記憶された異なるバッファからデータを供給されている。
図12Cの例では、ストリームチャネル0~7の各々は、バッファB1、B2、B3、B4、B5、B6、及びB7のそれぞれ1つからデータを供給されている。
図12Cの例では、4つのストリームチャネルが4つの異なる特徴マップを伝達するために使用され、4つのストリームチャネルが4つの異なる重みを伝達するために使用されている。
【0152】
その結果、ストリームチャネル0は、特徴マップF0を計算タイル302-1及び302-2の各々にブロードキャストするように構成されている。ストリームチャネル1は、特徴マップF1を計算タイル302-3及び302-4の各々にブロードキャストするように構成されている。ストリームチャネル2は、重みW0を計算タイル302-1及び302-6の各々にブロードキャストするように構成されている。ストリームチャネル3は、重みW1を計算タイル302-3及び302-8の各々にブロードキャストするように構成されている。ストリームチャネル4は、重みW2を計算タイル302-2及び302-5の各々にブロードキャストするように構成されている。ストリームチャネル5は、重みW3を計算タイル302-4及び302-7の各々にブロードキャストするように構成されている。ストリームチャネル6は、特徴マップF2を計算タイル302-5及び302-6の各々にブロードキャストするように構成されている。ストリームチャネル7は、特徴マップF3を計算タイル302-7及び302-8の各々にブロードキャストするように構成されている。
【0153】
オーバーレイ2は、メモリタイル306のDMA回路を、特定のバッファからストリームチャネルへのマッピングを用いてプログラムするアレイコントローラ106によって、DPアレイ102のパーティション内に実現され得る。別の態様では、データがメモリタイル306以外のメモリから得られる場合、データを計算タイル302に提供するために他のメモリにアクセスするインターフェースタイル304などの他のタイルのDMA回路が、特定のバッファからストリームチャネルへのマッピングを用いてプログラムされ得る。アレイコントローラ106は、例えば、ストリームチャネルへのバッファのマッピングを作成するために適切なDMA回路にデータを書き込むことによって、
図12Cのオーバーレイ2を実現し、
図12Cの例に例解されたバッファを作成する。
【0154】
各計算タイル302のそれぞれのプロセッサ420において実行される特定のカーネル及び/又はその関数は、異なるストリームチャネルを介して受信されたデータを正しく処理するために必要な実行可能命令を提供する。ストリームチャネルを介して提供されるデータは、1つのオーバーレイから別のオーバーレイに変化し得るが、実現される各オーバーレイのそれぞれの計算タイルに適切なランタイムパラメータ212を提供することによって、そのようなカーネルの設定に基づいて、様々な計算タイル302において実行される特定のカーネル及び/又は関数も変化し得る。各計算タイル302に提供されるランタイムパラメータ212は、その中のプロセッサ420によって実行されるカーネルが、使用される対応するオーバーレイに基づいて実現されている特定のレイヤに対する任意の計算を実行する際に、受信されたデータを正しく解釈し適用することを確実にする。
【0155】
1つ以上の他の例示的な実装形態では、各オーバーレイは、それぞれの計算タイルにおいて実行されるカーネルを選択し得、ランタイムパラメータ212は、そのようなカーネルを設定し得る。
【0156】
図12A、
図12B、及び
図12Cの例は、オーバーレイをDPアレイのパーティションにロードすることによって、異なるデータが、パーティションのタイル全体に分散され、それによって、タイル間のデータ移動の異なるモードが達成され得ることを例解する。データ移動の異なるモードは、少なくとも、確立されたストリームチャネルのうちの異なるものを通して異なる重み及び/又は特徴マップを送信することのおかげで達成され得る。これは、データ移動の異なるモードが同じアプリケーションに対して実現されることを可能にする。すなわち、計算タイル及び特定のストリームチャネルによって実行されるカーネルを指定する所与のアプリケーションについて、DPアレイ102を再設定することなく、異なるモードが実現され得る。
【0157】
図13は、アプリケーションによって実現されるストリームチャネルの別の例を例解する。
図13の例は、アプリケーションのための出力ストリームチャネルを例解する。すなわち、
図13に例解されるストリームチャネルは、
図12A、
図12B、及び
図12Cにおいて参照される同じアプリケーションによって実現されて、説明された異なるオーバーレイについて例解されたパーティションの計算タイル302からデータを出力し得る。
【0158】
図13の例では、ストリームチャネル(例えば、出力ストリームチャネル)0、1、2、3、及び4が実現されている。出力ストリームチャネルは、先で説明される入力ストリームチャネルと同様に、パーティションに含まれる様々なタイルのストリームスイッチを設定することによって実現され得る。本例では、ストリームチャネル0は、計算タイル302-1及び302-2によって生成された出力データ項目(例えば、C)を、メモリタイル306-1(又は考察されるような他のメモリ)に伝達する。ストリームチャネル1は、計算タイル302-3及び302-4によって生成された出力データ項目をメモリタイル306-1に伝達する。ストリームチャネル2は、計算タイル302-5及び302-6によって生成された出力データ項目をメモリタイル306-2に伝達する。ストリームチャネル3は、計算タイル302-7及び302-8によって生成された出力データ項目をメモリタイル306-2に伝達する。
【0159】
カスケードオーバーレイが使用される場合、カスケード接続された計算タイル302のセットの端部(例えば、宛先タイル)に位置するストリームチャネルが、使用され得る。例えば、破線で示されたストリームチャネル(0及び3)は、使用されない。それよりも、ストリームチャネル1及び2が、計算タイル302-3、302-4、302-7、及び302-8によって生成された出力データ項目をメモリタイル306-1及び306-2に伝達するために使用される。
【0160】
1つ以上の他の例示的な実装形態では、
図13に例解される計算タイル302内で実行されるカーネルは、出力データ項目がどこに向けられるか、又は書き込まれるかを指示するためにランタイムパラメータを使用して設定され得る。カーネルは、ランタイムパラメータによって、各オーバーレイに対して適切なアドレス(例えば、特定のストリームスイッチ又は出力のカスケードインターフェース)にデータを書き込むように構成され得る。例えば、非カスケードオーバーレイを実現している間、計算タイル302-1によって実行されるカーネルは、出力を出力ストリームチャネル0に向ける。計算タイル302-3によって実行されるカーネルは、出力を出力ストリームチャネル1に向ける。比較として、カスケードオーバーレイを実現するとき、計算タイル302-1によって実行されるカーネルは、カスケード接続を介して、計算タイル302-3に出力を向ける。計算タイル302-3によって実行されるカーネルは、出力を出力ストリームチャネル1に向ける。
【0161】
この開示内では、異なるオーバーレイが説明されている。2つを超える計算タイル302をリンクするために1つを超えるカスケード接続を使用する他のオーバーレイが実現され得ることを理解されたい。すなわち、本明細書に例解されるカスケードモードは、2つの計算タイル302のコンピューティングクラスタを使用して作成されるが、他の構成では、カスケード接続によってリンクされた3つ、4つ、又はそれを超える計算タイル302のコンピューティングクラスタが形成され得る。更に、DPアレイ102のパーティションは、アプリケーションをロードし、実行されているアプリケーションの異なるレイヤに対応するオーバーレイを経時的に順次ロードすることによって設定され得る。これにより、パーティションは、レイヤのサイズがパーティションよりも大きい場合に、アプリケーションの所与のレイヤのワークロードを全体又は部分的に反復的な様態で実行することが可能になる。パーティションによって実行される任意の行列乗算演算の次元は、例解されたものから、特に1つのワークロード(例えば、オーバーレイ/モード)から別のワークロードに変化し得ることを理解されたい。
【0162】
図14は、
図1のシステム100の特定の動作特徴を例解する方法1400の例を例解する。例解の目的で、アレイコントローラ106は、方法1400に関連して説明した動作を実行することが可能である。他の例示的な実装形態では、プロセッサが、アレイコントローラ106に起因する動作を実行し得ることを理解されたい。更に、他の例示的な実装形態では、プロセッサは、DPアレイ102の動作を制御するために、アレイコントローラ106に命令を提供することが可能である。
【0163】
図14の例では、DPアレイ102のパーティションが参照される。考察されるように、パーティションは、DPアレイ102の全体、又はDPアレイ102のタイルのサブセットを包含し得る。方法1400は、いずれかのタイプのパーティションに対して実行され得る。更に、アレイコントローラは、同時に動作する多数のパーティションについて
図14の動作を実行し得る。他の例示的な実装形態では、
図14に関連して説明される動作は、各々が異なるアプリケーションを実行する異なるパーティションを制御するために同時に動作する2つ以上の異なるアレイコントローラによって実行され得る。各パーティションは、パーティションが同じアレイコントローラの制御下にあるか、又は異なるアレイコントローラの制御下にあるかにかかわらず、他とは独立して動作し得る。
【0164】
ブロック1402において、アレイコントローラ106は、アプリケーションをDPアレイ102のパーティションにロードする。DPアレイ102は、プロセッサを各々有する複数の計算タイルを含む。アプリケーションは、プロセッサによって実行可能なカーネルを指定し、データを複数の計算タイルに伝達するストリームチャネル(例えば、入力ストリームチャネル)を実現する。アプリケーションはまた、出力ストリームチャネルを実現する。
【0165】
例えば、アプリケーションをDPアレイ102にロードすることは、DPアレイ102のパーティションの初期設定を実行する。ブロック1402を実行する際、アレイコントローラ106は、実行可能なカーネルをパーティションの計算タイル302のプログラムメモリ422にロードし、パーティションの任意のメモリ(例えば、計算タイル302のRAM404及び/又はメモリタイル306のRAM504)を初期化し、設定データを制御レジスタ414、514、及び/又は614にロードすることによってストリームチャネルを実現することが可能である。初期化データ及び設定データを含むアプリケーションのロードは、タイルのメモリマップドスイッチから形成されるメモリマップドネットワークを介してそのようなデータを書き込むアレイコントローラ106によって実行され得る。
【0166】
ブロック1404において、アレイコントローラ106は、DPアレイ102のパーティションによって実行されるアプリケーションのレイヤに対応するオーバーレイをロードすることが可能である。
【0167】
一態様では、各オーバーレイは、アプリケーションによって実現されるストリームチャネルへのバッファの異なるマッピングを指定する。各バッファは、特定のデータタイプ(例えば、特徴マップ又は重み)を含み得る。更に、各バッファは、データタイプの特定の要素を含み得る。1つ以上の例では、複数のオーバーレイのうちの選択されたオーバーレイを実現することは、ストリームチャネルのうちの選択されたものを介して特定のバッファから計算タイルのうちの選択されたものにデータを伝達するように複数のDMA回路をプログラムするアレイコントローラ106によって実行される。
【0168】
別の態様では、各オーバーレイのデータ移動のモードは、ストリームチャネルを介して伝達される入力特徴マップの数及び重みの数によって特徴付けられている。
【0169】
一態様では、複数のオーバーレイを順次実現することは、各オーバーレイに対して、ストリームチャネルへのバッファの異なるマッピングを用いて複数のDMA回路をプログラムすることを含む。一例として、選択されたオーバーレイは、ストリームチャネルのうちの選択されたものを介して特定のバッファから計算タイルのうちの選択されたものにデータを伝達するように複数のDMA回路をプログラムすることによって、アプリケーションのためのパーティション内に実現され得る。
【0170】
別の態様では、複数のオーバーレイを順次実現することは、ストリームチャネルにマッピングされる様々なバッファをセットアップすることを含む。アレイコントローラ106は、インターフェースタイル304及び/又はメモリタイル306のDMA回路をプログラムすることによって、例えば、正しいデータを含むようにストリームチャネルにマッピングされた様々なバッファを作成するために、データを移動させることが可能である。
【0171】
一態様では、アプリケーションは、ニューラルネットワークを実現する。ニューラルネットワークの各レイヤは、複数のオーバーレイのうちの1つにマッピングされている。複数のオーバーレイのうちの異なるオーバーレイは、経時的にロードされて、ニューラルネットワークのそれぞれのレイヤを実現する。
【0172】
一例では、アレイコントローラ106は、メモリに記憶されたスケジュールを指定する制御アプリケーションを実行することが可能である。スケジュールは、パーティションに実現されたアプリケーションによって実行されるワークロードを指定する。ワークロードは、コンパイラ204によって生成され得る。スケジュールは、アプリケーションが一連のワークロードを実行するために(例えば、アプリケーションのレイヤを実現し、各レイヤのワークロードを実行するために)、ロードされる一連のオーバーレイの一部としてどのオーバーレイがロードされるかを指定し得る。別の態様では、ホストプロセッサなどの別のプロセッサが、DPアレイ102のパーティション内の特定のオーバーレイのローディングを開始するようにアレイコントローラ106に命令し得る。その場合、他のプロセッサは、アレイコントローラ106によってDPアレイ102に実現されるべきオーバーレイのスケジュール又はシーケンスを指示する。
【0173】
ブロック1406において、アレイコントローラ106は、ランタイムパラメータを、ブロック1404においてロードされたオーバーレイのパーティションにロードする。アプリケーションの各レイヤは、ランタイムパラメータのセットに関連付けられ得る。ランタイムパラメータは、計算タイル固有であり得る。ランタイムパラメータは、実行のために様々なカーネルを設定する。したがって、ブロック1406において、アレイコントローラ106は、ブロック1404においてパーティションにロードされたオーバーレイによって実現されているレイヤのためのランタイムパラメータを選択し、ランタイムパラメータを計算タイル302のRAM404にロードする。ロードされているランタイムパラメータは、DPアレイ102のパーティションの1つ以上の選択された計算タイル又は全ての計算タイルのためのものであり得る。
【0174】
一態様では、アレイコントローラ106は、複数のオーバーレイのうちの選択されたオーバーレイに対して、複数の計算タイルのうちの選択された計算タイルに、ランタイムパラメータを提供することが可能である。ランタイムパラメータは、選択された計算タイルによって実行されるカーネルの演算パラメータを設定する。例えば、ランタイムパラメータは、選択された計算タイルのプロセッサによって、その中に記憶されたカーネルを実行する際に使用されて、選択された計算タイルの演算特徴を変更する。しかしながら、ロードされるランタイムパラメータは、DPアレイ102のパーティションの1つ以上の選択された計算タイル又は全ての計算タイルに対するものであり得ることを理解されたい。
【0175】
一態様では、選択された計算タイルに対するランタイムパラメータは、選択された計算タイルによって実行されるカーネルの実行フローを変更することが可能である。例えば、カーネルは、ランタイムパラメータから値を読み取り、読み取られた値に基づいて、特定の関数を選択的に実行する(例えば、特定の関数を実行する、及び/又は特定の関数の実行をスキップする)ように構成され得る。したがって、異なるランタイムパラメータが、異なるレイヤのランタイム中にDPアレイのパーティションにロードされると、アプリケーションのカーネルの関数及び/又はランタイム挙動が修正され得る。
【0176】
これは、各カーネルが、実現されている異なるレイヤに対して読み取られた特定のランタイムパラメータ値に基づいて、かつ各レイヤに対して使用されるオーバーレイに従って、異なる演算を実行することを可能にする。例えば、アプリケーションの異なるレイヤは、行列乗算、畳み込み、バッチ正規化、ReLU、他のアクティブ化関数、又は他の演算などの異なる関数を利用し得る。オーバーレイのためにロードされたランタイムパラメータは、カーネル又は異なるカーネルにおいて利用可能な関数のうちのどれが、所与のオーバーレイのために計算タイルごとのベースで実行されるべきかを指定し得る。ランタイムパラメータは、カーネルに、例えば、アクティブ化関数を実行させ得るか、又はランタイムパラメータの値に依存しない場合がある。
【0177】
したがって、各カーネルによって実行される特定の関数は、計算タイルにロードされたランタイムパラメータに依存し得、ロードされた特定のランタイムパラメータに基づいて1つのレイヤから別のレイヤに変化し得る。したがって、例解の目的で、カスケード接続構成内の最後の計算タイル302は、アクティブ化関数を実行するように命令され得るが、カスケード接続構成内の他の計算タイル302は、アクティブ化関数を実行しない場合がある。
【0178】
1つ以上の例では、ランタイムパラメータは、選択された計算タイルと複数の計算タイルのうちの少なくとも1つの他の計算タイルとの間のカスケード接続をアクティブ化又は非アクティブ化することが可能である。例えば、ランタイムパラメータは、選択された計算タイルのプロセッサに、出力のカスケード接続に書き込むことによって別の計算タイルにデータを提供させ得るか、又は入力のカスケード接続から読み取ることによって別の計算タイルからデータを受信させ得る。
【0179】
一例では、オーバーレイは、アプリケーションの特定のレイヤに対応する。その場合、各レイヤについて、ランタイムパラメータは、そのレイヤのパーティションにロードされたオーバーレイを使用して実現される特定のレイヤの1つ以上の次元を指定する。例えば、ランタイムパラメータは、処理されるべき行列の行の数又は処理されるべき行列の列の数のうちの少なくとも1つを指定し得る。
【0180】
1つ以上の例示的な実装形態では、ランタイムパラメータは、カーネルに、DPアレイ102内の特定の場所(例えば、メモリ)からの読み取り及び/又はそれへの書き込みを行わせ得る。例えば、ランタイムパラメータは、カーネルに、ローカルRAM404、隣接する計算ユニットの特定のRAM404、及び/又は特定のメモリタイル306のRAM504からの読み取り及び/又はそれらへの書き込みを行わせ得る。
【0181】
別の態様では、ランタイムパラメータは、それぞれの計算タイル内で実行されるべき計算タイル内の複数のカーネルのうちの特定のカーネルを指定又は選択し得る。他の態様では、オーバーレイは、それぞれのカーネルを設定するランタイムパラメータを用いて実行されるべきカーネルを指定し得る。
【0182】
ブロック1408において、DPアレイ102のパーティションは、アプリケーションによって、かつオーバーレイ及びランタイムパラメータに基づいて設定されたワークロードを実行する。ワークロードを完了したことに応答して、方法1400は、ブロック1404にループバックし得、アレイコントローラ106は、アプリケーションの異なるレイヤのために新たにプロセスを開始することが可能である。
【0183】
例えば、一態様では、アレイコントローラ106は、アプリケーションの次のレイヤを実現する際に、そのレイヤのためのDPアレイ102のパーティションに異なるオーバーレイをロードする。その場合、アレイコントローラ106は、継続し、異なるオーバーレイのためのランタイムパラメータをロードし得る。別の態様では、次のレイヤのために使用されるべきオーバーレイは、アプリケーションの前のレイヤのために使用された同じオーバーレイであり得る。その場合、アレイコントローラ106は、オーバーレイをロードされたままにし、ブロック1406に進み得る。ランタイムパラメータは、同じである場合又は同じでない場合がある。
【0184】
方法1400は、アプリケーションのランタイム中に、複数のオーバーレイがDPアレイ102のパーティション内に順次実現されることを例解する。各オーバーレイは、ストリームチャネルを使用して、DPアレイ102におけるデータ移動の異なるモードを実現する。上で述べられるように、各オーバーレイは、パーティション内のアプリケーションの特定のレイヤを実現するために使用され得る。実現された各オーバーレイ(例えば、レイヤ)に対して、ワークロードは、それぞれのデータ移動のモードに基づいてデータを複数の計算タイルに移動させることによって、実行され得る。
【0185】
例えば、複数のオーバーレイを順次実現することは、第1の行列乗算演算を含む第1のワークロードを実行するために、複数のオーバーレイのうちの第1のオーバーレイを実現することを含むことができる。複数のオーバーレイのうちの第2のオーバーレイは、第2の行列乗算演算を含む第2のワークロードを実行するように、実現することができる。第1の行列乗算演算及び第2の行列乗算演算は、異なる次元のものであり得る。一態様では、データを伝達する目的で特定のバッファを入力ストリームチャネルにリンクすることは、オーバーレイのローディングによって設定され得る。すなわち、入力ストリームチャネルは、特定のタイルへの接続性に関して確立され得るが、各そのような入力ストリームチャネルが、タイルに提供するデータを得るバッファは、DPアレイ102にロードされるオーバーレイによって決定される。
【0186】
異なるカーネルを計算タイルにロードするか、又はストリームチャネルを修正する、異なるアプリケーションをDPアレイ102にロードすることなく、異なるオーバーレイ及びランタイムパラメータがDPアレイ102のパーティションにロードされ得るので、アプリケーションの異なるレイヤは、パーティション内に実現され得る。
【0187】
考察されるように、DPアレイ102は、複数のパーティションに細分され得る。各パーティションは、複数の計算タイルのサブセットを含み得る。各パーティションは、異なるアプリケーションを同時に実行し、パーティションによって実行されるアプリケーションに特有の複数の異なるオーバーレイを順次実現するように適合されている。
【0188】
この開示内で説明される本発明の構成は、機械学習又は他の階層化アプリケーションの異なるレイヤを実現するようにDPアレイを適応させるための効率的かつ柔軟な技法を提供する。オーバーレイをロードすることと比較して、アプリケーションをロードすることは、アプリケーションのサイズ(例えば、カーネル及び設定データを含む)が、オーバーレイ及び/又はランタイムパラメータのサイズと比較して大きいので、時間がかかり得る。したがって、アプリケーションは、開始時にロードされ、オーバーレイ及びランタイムパラメータのロードを通して異なるワークロードに適応され得る。レイヤごとに(例えば、レイヤごとに新しいアプリケーションを用いて)DPアレイのパーティション全体を再設定しようと試みた場合、DPアレイは、継続した再設定を受けてかなりのクロックサイクルを失うことになる。特定の要素を、例えば、アプリケーションとデータ移動とを、分離することによって、DPアレイは、再設定のための実質的なタイミングペナルティを被ることなく、アプリケーションの異なるレイヤに適合され得る。更に、DPアレイは、アプリケーションのそれぞれのレイヤの各々に対して、より計算効率の良い様態で動作する。
【0189】
1つ以上の他の例示的な実装形態では、DPアレイにロードされたアプリケーションは、多数のカーネルを計算タイルのRAM404にロードさせることができる。その場合、ランタイムパラメータを使用して、各オーバーレイに対して実行される特定のカーネルを選択し得、各カーネルは、ロードされるオーバーレイのデータ移動に適合されている。したがって、所与の計算タイル302に対する実行のために選択された特定のカーネルは、異なる計算タイル302に対する実行のために選択された特定のカーネルとは異なり得る。
【0190】
一態様では、アレイコントローラ106は、様々なDMA回路434、502、602のタスクキューにタスクを提供して、DPアレイ102に、及びDPアレイ102から、データを移動させることが可能である。一例では、各タスクが完了すると、DMA回路は、タスクが完了したという通知を生成することができ、それによって、アレイコントローラ106が、DPアレイ102によって実行されるワークロードの進行を追跡することを可能にする。
【0191】
考察されるように、オーバーレイは、DPアレイ102において確立された入力ストリームチャネルにデータを供給するために使用される特定の入力バッファ、及び/又は出力ストリームチャネルからデータを受信するための特定の出力バッファを指定する。指定された入力及び/又は出力バッファは、オーバーレイごとに異なり得る。
【0192】
図15は、DPアレイ102が、アレイコントローラ106によって各々制御される多数のパーティションを含む例を例解する。
図15の例では、DPアレイ102は、複数のパーティション1502、1504にパーティショニングされている。各パーティション1502、1504は、1つ以上の計算タイル302、任意選択的に1つ以上のメモリタイル304(例えば、DPアレイ102に含まれる場合)、及び1つ以上のインターフェースタイル306を含む。
【0193】
図15の例では、単一のアレイコントローラ106が、多数のパーティションの動作を制御することが可能である。パーティション1502、1504の各々は、アレイコントローラ106の制御下ではあるが、互いに独立して動作することが可能である。したがって、パーティション1502は、1つのアプリケーションを実行し得、一方、例えば、同時に、パーティション1504は、異なるアプリケーションを実行する。アレイコントローラ106は、アプリケーションをロードすること、オーバーレイをロードすること、ランタイムパラメータをロードすること、及びアプリケーションのレイヤに対するワークロードを開始することに関して、各パーティションを制御することが可能である。
【0194】
図16A、
図16B、
図16C、
図16D、
図16E、
図16F、及び
図16Gは、DPアレイ102及びアレイコントローラ106を含むICのための異なる例示的なアーキテクチャを例解する。
図16Aの例では、ICは、アレイコントローラ106を実装するために使用されるプログラマブルロジック1602を含む。一態様では、アレイコントローラ106は、ステートマシン回路として実装され得る。別の例では、アレイコントローラ106は、ソフトプロセッサとして実装され得る。ソフトプロセッサは、プログラマブルロジック1602を使用して、形成又は実装されるプロセッサ、例えば、プログラムコードを実行することができる回路を指す。
【0195】
1つ以上の例では、アレイコントローラ106は、メモリ(図示せず)からの制御アプリケーション214を実行して、DPアレイ102の動作を制御し得る。別の例示的な実装形態では、アレイコントローラ106は、プロセッサ1604の制御下で動作し得る。プロセッサ1604は、ハードワイヤードプロセッサとして実装され得る。
【0196】
図16Bの例は、アレイコントローラ106がハードワイヤード回路ブロックとして実装され得ることを除いて、
図16Aに関連して説明したように実質的に動作し得る。一態様では、アレイコントローラ106は、ステートマシン回路として実装され得る。別の例では、アレイコントローラ106は、プログラムコードを実行することができるプロセッサとして実装され得る。
【0197】
図16Cの例では、2つ以上のアレイコントローラが実装され、アレイコントローラ106-1及びアレイコントローラ106-2として示されている。一例では、アレイコントローラ106-1及び106-2の両方が、プログラマブルロジック1602内に実装されている。一態様では、アレイコントローラ106-1は、DPアレイ102のタイルの特定のサブセット、例えばパーティション1502、を割り振られるか、又は割り当てられ得、一方、アレイコントローラ106-2は、DPアレイ102のタイルの別の重複しないサブセット、例えばパーティション1504、を割り振られ得る。例えば、DPアレイ102を列1~Nのグリッドとして見ると、アレイコントローラ106-1は、列1~(M-1)内のタイルを制御し得、一方、アレイコントローラ106-2は、列M~N内のタイルを制御し得、ここでM及びNは整数であり、M<Nである。一態様では、タイルの各サブセットは、他のパーティションから独立しているパーティションとみなされ得る。各パーティションは、その中で異なるアプリケーションを実行及び実行し得、他のパーティションから完全に独立して制御され得る。本明細書で提供される例における異なるパーティション内のタイル及びストリームチャネルは、互いに分離されている。
【0198】
1つ以上の例では、
図16Cの各アレイコントローラ106-1及び106-2は、メモリ(図示せず)からのそれ自体の制御アプリケーション214を実行して、DPアレイ102のそれぞれのパーティションの動作を制御し得る。別の例示的な実装形態では、アレイコントローラ106-1及び106-2は、プロセッサ1604の制御下で動作し得る。プロセッサ1604は、ハードワイヤードプロセッサとして、又はソフトプロセッサとして実装され得る。いずれの場合も、プロセッサ1604は、アレイコントローラ106-1及び106-2の各々を独立して制御して、各それぞれのアレイコントローラによって制御されるパーティションの独立した動作を果たすことができる。例えば、プロセッサ1604は、アレイコントローラ106-1及び106-2によってアクセス可能なメモリに制御アプリケーション214を書き込み得る。
【0199】
図16Dの例は、アレイコントローラ106-1及びアレイコントローラ106-2が、各々ハードワイヤード回路ブロックとして実装され得ることを除いて、実質的に
図16Cに関連して説明されたように動作し得る。アレイコントローラは、ステートマシン回路として、又はプログラムコードを実行することができるプロセッサとして実装され得る。
【0200】
1つ以上の他の例示的な実装形態では、
図16C及び/又は
図16Dのアレイコントローラ106-1は、プログラマブルロジック1602を使用して(例えば、ステートマシン回路又はソフトプロセッサとして)実装され得、一方、アレイコントローラ106-2は、ステートマシン回路又はプロセッサを実装するハードワイヤード回路ブロック(例えば、ASICブロック)として実装される。
【0201】
図16Eの例では、プロセッサ1604は、ICに実装又は組み込まれていない。例えば、プロセッサ1604は、x86タイプのプロセッサ、又は別の命令セットアーキテクチャを有する別のタイプのプロセッサとして実装され得る。プロセッサ1604は、ICが通信可能にリンクされる別のデータ処理システム内に配置され得るか、又はその一部であり得る。
【0202】
1つ以上の例では、各アレイコントローラ106-1及び106-2は、メモリ(図示せず)からのそれ自体の制御アプリケーション214を実行して、DPアレイ102のそれぞれのパーティションの動作を制御し得る。別の例示的な実装形態では、アレイコントローラ106-1及び106-2は、プロセッサ1604の制御下で動作し得る。本明細書で説明される様々な例では、プロセッサの制御下で動作するアレイコントローラは、プロセッサ1604が、アレイコントローラによって実行される制御アプリケーション214を、実行のためにアレイコントローラ106によってアクセス可能なメモリに書き込むことを含み得る。
【0203】
図16Eの例では、ICは、プログラマブルロジックを含まない。したがって、アレイコントローラ106-1及び106-2は、ハードワイヤード回路ブロック(例えば、ASIC回路ブロック)として実装され得る。
図16Eの例では、アレイコントローラ106-1及び/又は106-2は、ハードワイヤードステートマシン回路又はハードワイヤードプロセッサとして実装され得る。
【0204】
図16Fの例は、ICがプログラマブルロジック1602を含むことを除いて、
図16Eに関連して説明したように実質的に動作し得る。したがって、アレイコントローラ106-1及び/又は106-2の一方又は両方は、ステートマシンとしてであっても、又はソフトプロセッサとしてであっても、プログラマブルロジックを使用して実装され得る。
【0205】
図16Gの例では、ICアーキテクチャは、ハードワイヤード回路ブロック(例えば、ASICブロック)として実装される単一のアレイコントローラ106を含む。アレイコントローラ106は、ハードワイヤードステートマシン回路又はハードワイヤードプロセッサとして実装され得る。単一のアレイコントローラは、制御アプリケーション214の実行を通じてDPアレイ102の2つ以上のパーティション(例えば、パーティション1502、1504)を制御し得る。
【0206】
図16Hの例では、ICアーキテクチャは、プログラマブルロジック1602を含む。
図16Hの例では、ICは、プログラマブルロジック1602を使用して実装される単一のアレイコントローラ106を含む。アレイコントローラ106は、ステートマシン回路又はソフトプロセッサとして実装され得る。単一のアレイコントローラは、制御アプリケーション214の実行を通じてDPアレイ102の2つ以上のパーティション(例えば、パーティション1502、1504)を制御し得る。
【0207】
図16A、
図16B、
図16C、
図16D、
図16E、
図16F、
図16G、及び
図16Hの例では、示されたアレイコントローラ106の特定の数は、例解の目的で提供されている。DPアレイ102を制御するために、1つ、2つ、又はそれ以上のアレイコントローラ106が、IC内に含まれ得る。一態様では、複数のアレイコントローラ106は、DPアレイ102内に実現されたパーティションと1対1のベースで対応する。例えば、各アレイコントローラ106は、DPアレイ102の特定のパーティションを制御するために専用化され得る。各アレイコントローラ106は、アプリケーションのローディング、オーバーレイ及びランタイムパラメータのローディング、並びにDPアレイ102のそれぞれのパーティションに対するワークロードの開始を制御し得る。他の例では、アレイコントローラ対パーティション比は、1対1である必要はない。
【0208】
ワークロードを開始する際に、アレイコントローラ106は、バッファから処理される入力データ(例えば、特徴マップ及び重み)を指定するように制御されているDPアレイ102のパーティションに、ポインタ(例えば、メモリアドレス)を提供することが可能である。各アレイコントローラ106は更に、制御情報を提供することができる。一態様では、アレイコントローラ106は、それぞれのパーティション内のタイルの様々なDMA回路に、タスクを書き込むことが可能である。例解の目的で、タスクは、バッファ記述子、ポインタ、及び/又は制御データを指定し得る。例えば、タスクは、バッファを作成するためにDMA回路にデータを移動させ、特定のバッファを特定のストリームチャネルにマッピングするようにDMA回路をプログラムし、及び/又はデータ項目を計算タイル302に提供するためにデータへのポインタを指定し得る。例えば、各DMA回路は、1つ以上のタスクキューを含み得る。アレイコントローラ106は、制御アプリケーション214を実行する一部として、これらのタスクキューにタスクを書き込み得る。例解的かつ非限定的な例として、アレイコントローラ106は、データの移動を果たすために、本明細書で説明する様々な通信機構(例えば、メモリマップドスイッチ及び/若しくはストリームスイッチ、直接接続経由、及び/又はインターフェースタイル304のインターフェース604への接続経由)を介して、タスク、例えば、プログラミング、をDMA回路に書き込むことができる。例えば、アレイコントローラ106は、バッファ記述子又は他のデータをDMA回路に書き込むことによってオーバーレイを実現し得る。
【0209】
例解の目的で、
図10Bの例を参照すると、アレイコントローラ106は、メモリタイル306内にバッファを作成し得る。アレイコントローラ106は、DMA回路がストリームチャネルを介してA
00を計算タイル302-2に転送するように、A
00のアドレスを指定するポインタをメモリタイル306のDMA回路に提供し得る。同様に、アレイコントローラ106は、A
01のアドレスを指定する別のポインタをメモリタイル306のDMA回路に提供することができ、その結果、DMA回路は、ストリームチャネルを介してA
01を計算タイル302-2に転送する。アレイコントローラ106は、パーティションが、使用されるオーバーレイに基づいて正しい動作シーケンスを使用して、所与のレイヤごとにワークロードを実行し得るように、例解された様々なデータ項目を伝達するためのポインタを継続的に提供することが可能である。
【0210】
本明細書で説明される機能性を実行する際に、コントローラ106は、IC自体に埋め込まれているか、又はICの外部に実装され、ホストデータ処理システム内に位置するかにかかわらず、他のプロセッサに課されるワークロードを軽減する。DPアレイ102のサイズは、例解の目的で、本明細書に開示される例示的な図では比較的小さいが、DPアレイ102は、様々な設定で何百ものタイルを含み得る。したがって、DPアレイ102を全容量で、又はほぼ全容量で動作させ続けるために必要とされるデータ転送及びデータ移動動作の数は、重要であり得る。1つ以上のアレイコントローラ106を含むことにより、他のプロセッサのかなりの処理リソース(例えば、クロックサイクル)が解放される。更に、DPアレイ102と同じIC上にそのようなコントローラを含むことは、より効率的な動作及びより大きなデータスループットを容易にする。
【0211】
1つ以上の例示的な実装形態では、アレイコントローラ106は、計算タイル302、インターフェースタイル304、及びメモリタイル306の動作を制御することが可能である。いくつかの構成では、アレイコントローラ106は、計算タイル302の動作を制御しない場合がある。例えば、計算タイル302は、計算タイル302のそれぞれのプロセッサ420によって実行されるカーネルの制御下で動作し得る。上で述べられるように、計算タイル302によって提供されるランタイムパラメータは、カーネルの機能性を変化させ得る。1つ以上の他の例示的な実装形態では、アレイコントローラ106は、計算タイル302、インターフェースタイル304、及びメモリタイル306の動作を制御し得る。
【0212】
図17は、DPアレイ102を含むICの動作の例示的な方法1700を例解する。方法1700は、DPアレイ102を使用してワークロードを実行するためにアレイコントローラ106によって実行される様々な動作を例解する。
【0213】
ブロック1702において、アレイコントローラ106は、アプリケーションをDPアレイ102のパーティションにロードする。アプリケーションは、計算タイル302によって実行可能である複数のカーネルを含む。より具体的には、カーネルは、計算タイル302のプロセッサ420によって実行可能である。考察されるように、アプリケーションは、カーネルをパーティションの計算タイルにロードし、パーティションのメモリを初期化し、データを計算タイルに伝達し、計算タイルからデータを出力するためのストリームチャネル(例えば、入力及び出力ストリームチャネル)を実現する。
【0214】
ブロック1704において、アレイコントローラ106は、パーティション内のアプリケーションのレイヤを実現するためにオーバーレイをロードする。アレイコントローラ106はまた、レイヤのためのランタイムパラメータをロードする。
【0215】
ブロック1706において、アレイコントローラ106は、アプリケーション、オーバーレイ、及びランタイムパラメータによって設定されたパーティション内のワークロードを開始する。アレイコントローラ106は、タイルのDMA回路にタスクを書き込むことによってワークロードを開始することが可能である。制御アプリケーションによって指定されるタスクは、レイヤ及び各レイヤを実現するために必要な動作を順序付ける。タスクは、データを移動してバッファを作成し得る。タスクは、バッファに含まれるデータ、例えば、特徴マップ及び重み、のアドレスを指定して、ストリームチャネルのそれぞれを介して、データを計算タイルに伝達し得る。タスクは、計算タイルによって生成されたデータを書き込む際に使用される出力バッファへのポインタを指定し得る。
【0216】
1つ以上の例示的な実装形態では、アレイコントローラ106によって実行される命令は、コンパイラ204によって事前生成され得る。命令は、マッピング210及びランタイムパラメータ212を含み、本明細書で説明されるスケジュールを指定する制御アプリケーション214として具現化され得る。アレイコントローラ106は、アプリケーションを実行し、本明細書で説明される様々な動作を実行するために、ランタイム時に命令を実行することが可能である。
【0217】
別の態様では、制御アプリケーション214のスケジュールは、オーバーレイ及びランタイムパラメータでプログラムされたアプリケーションを実行する際に、各パーティションが、所与のレイヤを完了するために反復する回数を指定する。すなわち、場合によっては、パーティションは、ループを実行することを必要とせずに、アプリケーションのレイヤ全体を実現することが可能であり得る。他の場合には、レイヤは、セクションに分割され、パーティションは、レイヤのワークロードを完了するために、複数回(例えば、セクションの数に対応して)反復される。コンパイラ204によって生成される制御アプリケーションは、実行されているアプリケーションの異なるレイヤに対する各パーティションの動作のこの態様を制御することを理解されたい。
【0218】
ブロック1706の後、方法1700は、ブロック1704にループバックして、更なるワークロードの処理を継続することができる。したがって、アレイコントローラは、ポインタ及び/又は制御情報をDPアレイ102に提供することによって、アプリケーション、オーバーレイ、ランタイムパラメータのパーティション及びシーケンスワークロードへのローディングを制御することが可能である。
【0219】
DPアレイ102が、複数のパーティションにパーティショニングされ、複数のコントローラ106を含む1つ以上の他の例示的な実装形態では、各コントローラは、DPアレイ102の特定のパーティションの制御に専用であり得る。そのような場合、各コントローラは、DPアレイ102のパーティションを独立して制御することが可能である。例えば、各アレイコントローラ106は、そのアレイコントローラによって制御されるパーティションに関して、
図17に関連して本明細書で説明される動作を実行することが可能である。したがって、DPアレイ102は、その中の多数のアプリケーションを独立して実行し得、各アプリケーションは、異なるアレイコントローラ106によって制御される異なるパーティション内で実行する。
【0220】
更に、各アレイコントローラ106はまた、そのコントローラによって制御されるパーティションに関して、
図17に関連して本明細書で説明される動作を実行することが可能である。したがって、各パーティションは、そのパーティションのための特定のアレイコントローラの制御下で、経時的に異なるオーバーレイを実現し得る。各パーティションによって実現されるオーバーレイは、各それぞれのパーティションによって実行されるアプリケーションに基づいて異なる。これは、ポインタ及び/又は制御情報を提供することによって、アプリケーション、オーバーレイ、ランタイムパラメータのローディング、及びワークロードの順序付けを制御するために、各パーティションが、独立して、かつ専用アレイコントローラ106とともに動作することを可能にする。
【0221】
図18は、アレイコントローラ106の追加の動作特徴を例解する。
図18の例では、アレイコントローラ106は、アレイインターフェース104にタスク1802を発行することが可能である。アレイコントローラ106は更に、計算タイル302によって実行された特定のタスクが実行を完了したときの通知1804を受信することが可能である。一態様では、アレイコントローラ106によって受信された通知は、メモリマップドスイッチを介して、ストリームスイッチを介して、及び/又は割り込みを発行する特定のタイル若しくは構成要素をアレイコントローラ106と結合する別のインターフェースを通して提供される割り込みとして、受信され得る。
【0222】
このようにして、アレイコントローラ106は、DPアレイ102にタスクを提供し続けることが可能であり、その結果、DPアレイ102、又はDPアレイ102内の複数のパーティションは、ホストプロセッサの(例えば、ホストコンピュータからの)介入又は関与を伴わずに、継続的に動作し得る。例解的かつ非限定的な例として、アレイコントローラ106は、インターフェースタイル304及び/又はメモリタイル306のDMA回路間のデータ転送を開始して、データを計算タイル302に提供し、計算タイル302によって生成されたデータを受信することが可能である。アレイコントローラ106は、DMA回路のタスクキュー内にタスクを記憶し続けることが可能であり、その結果、このようなDMA回路は、処理すべきタスクが残っている限り、継続的に動作し得る。
【0223】
図19は、データ処理システム1900の例示的な実装形態を例解する。本明細書で定義される場合、「データ処理システム」という用語は、データを処理するように構成された1つ以上のハードウェアシステムを意味し、各ハードウェアシステムは、少なくとも1つのプロセッサ及びメモリを含み、プロセッサは、実行時に動作を開始するコンピュータ可読命令でプログラムされている。データ処理システム1900は、プロセッサ1902、メモリ1904、及びメモリ1904を含む様々なシステム構成要素をプロセッサ1902に結合するバス1906を含むことができる。
【0224】
プロセッサ1902は、1つ以上のプロセッサとして実装され得る。一例では、プロセッサ1902は、中央処理ユニット(central processing unit、CPU)として実装される。プロセッサ1902は、プログラムコードに含まれる命令を実行することができる1つ以上の回路として実装され得る。回路は、集積回路であり得るか、又は集積回路に埋め込まれ得る。プロセッサ1902は、複合命令セットコンピュータアーキテクチャ(complex instruction set computer architecture、CISC)、縮小命令セットコンピュータアーキテクチャ(reduced instruction set computer architecture、RISC)、ベクトル処理アーキテクチャ、又は他の既知のアーキテクチャを使用して実装され得る。例示的なプロセッサは、x86タイプのアーキテクチャ(IA-32、IA-64など)を有するプロセッサ、パワーアーキテクチャ(Power Architecture)、ARMプロセッサなどを含むが、これらに限定されない。
【0225】
バス1906は、様々な通信バス構造のいずれかのうちの1つ以上を表す。限定ではなく例として、バス1906は、ペリフェラルコンポーネントインターコネクトエクスプレス(Peripheral Component Interconnect Express、PCIe)バスとして実装され得る。データ処理システム1900は、通常、様々なコンピュータシステム可読媒体を含む。そのような媒体は、コンピュータ可読揮発性並びに不揮発性媒体及びコンピュータ可読リムーバブル並びに非リムーバブル媒体を含み得る。
【0226】
メモリ1904は、ランダムアクセスメモリ(RAM)1908及び/又はキャッシュメモリ1910などの揮発性メモリの形態のコンピュータ可読媒体を含むことができる。データ処理システム1900はまた、他のリムーバブル/非リムーバブル、揮発性/不揮発性コンピュータ記憶媒体を含むことができる。例として、ストレージシステム1912は、非リムーバブルの不揮発性磁気及び/又はソリッドステート媒体(図示せず、典型的には「ハードドライブ」と呼ばれる)から読み取り、それに書き込むために提供され得る。示されていないが、リムーバブルの不揮発性磁気ディスク(例えば、「フロッピー(登録商標)ディスク」)から読み取り、それに書き込むための磁気ディスクドライブ、及びCD-ROM、DVD-ROM、又は他の光媒体などのリムーバブルの不揮発性光ディスクから読み取り、それに書き込むための光ディスクドライブが、提供され得る。そのような場合、各々は、1つ以上のデータ媒体インターフェースによってバス1906に接続され得る。メモリ1904は、少なくとも1つのコンピュータプログラム製品の例である。
【0227】
メモリ1904は、プロセッサ1902によって実行可能であるコンピュータ可読プログラム命令を記憶することが可能である。例えば、コンピュータ可読プログラム命令は、オペレーティングシステム、1つ以上のアプリケーションプログラム、他のプログラムコード、及びプログラムデータを含むことができる。プロセッサ1902は、コンピュータ可読プログラム命令を実行する際に、コンピュータに起因する本明細書で説明される様々な動作を実行することが可能である。データ処理システム1900によって使用され、生成され、及び/又は演算されるデータ項目は、データ処理システム1900によって使用されるときに機能性を与える機能データ構造であることを理解されたい。本開示内で定義されるように、「データ構造」という用語は、物理メモリ内のデータのデータモデルの編成の物理的実装を意味する。したがって、データ構造は、メモリ内の特定の電気的又は磁気的構造要素から形成される。データ構造は、プロセッサを使用して実行されるアプリケーションプログラムによって使用されるように、メモリに記憶されたデータに物理的編成を課す。
【0228】
データ処理システム1900は、バス1906に通信可能にリンクされた1つ以上の入力/出力(Input/Output、I/O)インターフェース1918を含み得る。I/Oインターフェース1918は、データ処理システム1900が、1つ以上の外部デバイスと通信すること、並びに/又はローカルエリアネットワーク(local area network、LAN)、ワイドエリアネットワーク(wide area network、WAN)、及び/若しくはパブリックネットワーク(例えば、インターネット)などの1つ以上のネットワークを介して通信することを可能にする。I/Oインターフェース1918の例としては、ネットワークカード、モデム、ネットワークアダプタ、ハードウェアコントローラなどが挙げられ得るが、これらに限定されない。外部デバイスの例としては、ユーザがデータ処理システム1900と対話することを可能にするデバイス(例えば、ディスプレイ、キーボード、及び/又はポインティングデバイス)及び/又はアクセラレータカードなどの他のデバイスも挙げられ得る。
【0229】
データ処理システム1900は、1つの例示的な実装形態にすぎない。データ処理システム1900は、スタンドアロンデバイスとして(例えば、ユーザコンピューティングデバイス又はサーバとして、ベアメタルサーバとして)、クラスタ(例えば、2つ以上の相互接続されたコンピュータ)において、又は通信ネットワークを介してリンクされたリモート処理デバイスによってタスクが実行される分散クラウドコンピューティング環境において(例えば、クラウドコンピューティングノードとして)実行することができる。分散クラウドコンピューティング環境では、プログラムモジュールは、メモリ記憶デバイスを含むローカル及びリモートの両方のコンピュータシステム記憶媒体内に位置し得る。
【0230】
図19の例は、本明細書で説明する例示的な実装形態の使用又は機能性の範囲に関していかなる限定も示唆するものではない。データ処理システム1900は、この開示内で説明される様々な動作を実行することができるコンピュータハードウェアの例である。この点に関して、データ処理システム1900は、実装されるデバイス及び/又はシステムの特定のタイプに応じて、示されるよりも少ない構成要素、又は
図19に例解されない追加の構成要素を含み得る。含まれる特定のオペレーティングシステム及び/又はアプリケーションは、含まれるI/Oデバイスのタイプと同様に、デバイス及び/又はシステムタイプに従って変化し得る。更に、例解的な構成要素のうちの1つ以上は、別の構成要素に組み込まれ得るか、又は別の構成要素の一部を形成し得る。例えば、プロセッサは、少なくとも何らかのメモリを含み得る。
【0231】
データ処理システム1900は、
図2の例に例解されたソフトウェアフレームワークを実行することができるコンピュータの例である。データ処理システム1900はまた、DPアレイを有する本明細書で説明されるようなIC又はシステムに通信可能にリンクされ得るコンピュータの例であり、データ処理システム1900は、IC/システムをアクセラレータとして使用する。例えば、プロセッサ1902は、「ホストプロセッサ」であり得る。
【0232】
本開示は、新規の特徴を定義する特許請求の範囲で終わるが、本開示内で説明される種々の特徴は、図面と併せて説明を検討することからより良好に理解されると考えられる。本明細書において説明されるプロセス、機械、製造、及びそれらの任意の変形例は、例解の目的で提供される。本開示内で説明される特定の構造的及び機能的詳細は、限定として解釈されるべきではなく、単に、特許請求の範囲のための基礎として、及び事実上任意の適切に詳述された構造において説明される特徴を種々に採用するように当業者に教示するための代表的な基礎として解釈されるべきである。更に、本開示内で使用される用語及び句は、限定することを意図するものではなく、説明される特徴の理解可能な説明を提供することを意図するものである。
【0233】
例解を簡単かつ明確にするために、図に示される要素は、必ずしも縮尺どおりに描かれているわけではない。例えば、要素のうちのいくつかの寸法は、明確にするために、他の要素に対して誇張されている場合がある。更に、適切であるとみなされる場合、参照番号は、対応する、類似する、又は同様の特徴を示すために、図の間で繰り返される。
【0234】
本明細書で定義される場合、単数形の「a」、「an」、及び「the」は、文脈上別途明白に示さない限り、複数形も同様に含むことが意図される。
【0235】
本明細書で定義される場合、「少なくとも1つ」、「1つ以上」、及び「及び/又は」という用語は、明示的に別段に言明しない限り、動作において連言的及び選言的の両方であるオープンエンド表現である。例えば、「A、B、及びCのうちの少なくとも1つ」、「A、B、又はCのうちの少なくとも1つ」、「A、B、及びCのうちの1つ以上」、「A、B、又はCのうちの1つ以上」、並びに「A、B、及び/又はC」という表現の各々は、A単独、B単独、C単独、A及びBの組み合わせ、A及びCの組み合わせ、B及びCの組み合わせ、又はA、B及びCの組み合わせを意味する。
【0236】
本明細書で定義される場合、「自動的に」という用語は、人間の介入がないことを意味する。本明細書で定義される場合、「ユーザ」という用語は人間を意味する。
【0237】
本明細書で定義される場合、「コンピュータ可読記憶媒体」という用語は、命令実行システム、装置、又はデバイスによって、又はそれに関連して使用するためのプログラムコードを含有又は記憶する記憶媒体を意味する。本明細書で定義される場合、「コンピュータ可読記憶媒体」は、それ自体は一時的な伝搬信号ではない。コンピュータ可読記憶媒体は、電子記憶デバイス、磁気記憶デバイス、光学記憶デバイス、電磁記憶デバイス、半導体記憶デバイス、又は前述の任意の好適な組み合わせであることができるが、これらに限定されない。本明細書で説明される様々な形態のメモリは、コンピュータ可読記憶媒体の例である。コンピュータ可読記憶媒体のより具体的な例の非網羅的なリストは、ポータブルコンピュータディスケット、ハードディスク、RAM、読み取り専用メモリ(read-only memory、ROM)、消去可能プログラマブル読み取り専用メモリ(erasable programmable read-only memory、EPROM又はフラッシュメモリ)、電子的消去可能プログラマブル読み取り専用メモリ(electronically erasable programmable read-only memory、EEPROM)、スタティックランダムアクセスメモリ(static random-access memory、SRAM)、ポータブルコンパクトディスク読み取り専用メモリ(portable compact disc read-only memory、CD-ROM)、デジタル多用途ディスク(digital versatile disk、DVD)、メモリスティック、フロッピーディスクなどを含み得る。
【0238】
本明細書で定義される場合、「場合」という用語は、文脈に応じて、「ときに」又は「際に」又は「に応答して」又は「に応じて」を意味する。したがって、「~と決定された場合」又は「[記載される条件又はイベント]が検出された場合」という句は、文脈に応じて、「~と決定した際」若しくは「~と決定したことに応答して」、又は「[記載される条件又はイベント]を検出した際」若しくは「[記載される条件又はイベント]を検出したことに応答して」又は「[記載される条件又はイベント]を検出したことに応じて」を意味すると解釈され得る。
【0239】
本明細書で定義される場合、「に応じて」という用語及び上で説明されるような類似の文言、例えば、「場合」、「ときに」、又は「際に」は、アクション又はイベントに容易に応答又は反応することを意味する。応答又は反応は自動的に実行される。したがって、第2のアクションが第1のアクションに「応じて」実行される場合、第1のアクションの発生と第2のアクションの発生との間に因果関係がある。「に応じて」という用語は、因果関係を示す。
【0240】
本明細書で定義される場合、「プロセッサ」という用語は、プログラムコードに含まれる命令を実行することができる少なくとも1つの回路を意味する。回路は、集積回路であり得るか、又は集積回路に埋め込まれ得る。
【0241】
本明細書で定義される場合、「実質的に」という用語は、列挙された特性、パラメータ、又は値が、正確に達成される必要はないが、例えば、公差、測定誤差、測定精度制限、及び当業者に公知の他の要因を含む偏差又は変動が、特性が提供することが意図された効果を排除しない量で生じ得ることを意味する。
【0242】
第1、第2などの用語は、様々な要素を説明するために本明細書で使用され得る。これらの要素は、これらの用語によって限定されるべきではない。なぜなら、これらの用語は、別段に言明しない限り、又は文脈が明らかにそうでないことを示さない限り、1つの要素を別の要素から区別するために使用されるにすぎないからである。
【0243】
いくつかの代替的な実装形態では、ブロックにおいて述べられる動作は、図において述べられる順序から外れて発生する場合がある。例えば、連続して示される2つのブロックは、実質的に同時に実行され得るか、又はブロックは、関与する機能性に応じて、時には逆の順序で実行され得る。他の例では、ブロックは、一般に数字の昇順で実行され得、更に他の例では、1つ以上のブロックは、様々な順序で実行され得、結果は、記憶され、後続のブロック又は直後に続かない他のブロックにおいて利用される。ブロック図及び/又はフローチャート例解図の各ブロック、並びにブロック図及び/又はフローチャート例解図におけるブロックの組み合わせは、指定された関数若しくは行為を実行するか、又は専用ハードウェアとコンピュータ命令との組み合わせを行う、専用ハードウェアベースのシステムによって実装され得ることにも留意されよう。
【国際調査報告】