(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023153160
(43)【公開日】2023-10-17
(54)【発明の名称】ニューラルネットワークプロセッサにおいてタスクを割り当てるためのシステム及び方法
(51)【国際特許分類】
G06N 3/063 20230101AFI20231005BHJP
G06F 9/50 20060101ALI20231005BHJP
【FI】
G06N3/063
G06F9/50 150E
【審査請求】有
【請求項の数】20
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2023121917
(22)【出願日】2023-07-26
(62)【分割の表示】P 2022104387の分割
【原出願日】2019-04-04
(31)【優先権主張番号】15/971,872
(32)【優先日】2018-05-04
(33)【優先権主張国・地域又は機関】US
(71)【出願人】
【識別番号】503260918
【氏名又は名称】アップル インコーポレイテッド
【氏名又は名称原語表記】Apple Inc.
【住所又は居所原語表記】One Apple Park Way,Cupertino, California 95014, U.S.A.
(74)【代理人】
【識別番号】100094569
【弁理士】
【氏名又は名称】田中 伸一郎
(74)【代理人】
【識別番号】100103610
【弁理士】
【氏名又は名称】▲吉▼田 和彦
(74)【代理人】
【識別番号】100067013
【弁理士】
【氏名又は名称】大塚 文昭
(74)【代理人】
【識別番号】100139712
【弁理士】
【氏名又は名称】那須 威夫
(72)【発明者】
【氏名】ノルデン エリク
(72)【発明者】
【氏名】フィッシェル リラン
(57)【要約】
【課題】実施形態は、ニューラルプロセッサ回路によって実行された場合に、ニューラルネットワークをインスタンス化するタスクを管理することに関する。
【解決手段】ニューラルプロセッサ回路は、ニューラルエンジン回路と、ニューラルタスクマネージャ回路とを含む。ニューラルタスクマネージャ回路は、複数のタスクキューと、タスクアービタ回路とを含む。各タスクキューは、機械学習動作用のタスクのタスクリストへの参照を記憶する。各タスクキューは、優先度パラメータに関連付けられてもよい。タスクキューの優先度に基づいて、タスクアービタ回路は、ニューラルプロセッサ回路の外部にあるメモリからタスクのための構成データを取得し、ニューラルエンジン回路を含むニューラルプロセッサ回路の構成要素に、構成データを提供する。構成データは、ニューラルプロセッサ回路をプログラムして、タスクを実行させる。
【選択図】
図10
【特許請求の範囲】
【請求項1】
ニューラルエンジン回路と、
ニューラルエンジンに結合されたニューラルタスクマネージャ回路と、を備えるニューラルプロセッサ回路であって、ニューラルタスクマネージャは、
ニューラルネットワークをインスタンス化するタスクを含むタスクリストへの参照を記憶するように構成されたタスクキュー回路であって、前記タスクリストは、前記ニューラルプロセッサ回路の外部にあるメモリの場所に記憶されたタスクの構成データを含む、タスクキュー回路と、
前記タスクキュー回路に結合されたタスクアービタ回路であって、前記タスクアービタ回路は、
前記タスクキュー回路に記憶された前記タスクリストへの前記参照に基づいて、前記ニューラルプロセッサ回路の外部にある前記メモリの前記場所から前記タスクの前記構成データを取得し、
前記構成データの一部を前記ニューラルエンジン回路に提供するように構成され、
前記構成データの前記一部が前記ニューラルエンジン回路をプログラムして前記タスクを実行させる、タスクアービタ回路と、を含む、
ニューラルプロセッサ回路。
【請求項2】
前記タスクは、実行された場合、前記ニューラルネットワークの単一のネットワーク層、前記ニューラルネットワークの複数のネットワーク層、又は前記ニューラルネットワークのネットワーク層の一部をインスタンス化する、請求項1に記載のニューラルプロセッサ回路。
【請求項3】
前記タスクアービタ回路は、前記ニューラルタスクマネージャ回路の構成キュー内に前記構成データを記憶するように更に構成され、前記構成キューは、前記ニューラルエンジン回路に結合され、前記構成データの前記一部を前記ニューラルエンジン回路に提供するように構成されており、
前記ニューラルプロセッサ回路は、
前記構成データが前記構成キューに記憶されている場合に、前記ニューラルプロセッサ回路の外部にある前記メモリから前記タスクのカーネルデータを取得するように構成されたカーネルダイレクトメモリアクセス(DMA)と、
前記構成データが前記構成キューに記憶されている場合に、前記ニューラルプロセッサ回路の外部にある前記メモリから前記タスクの入力データを取得するように構成されたバッファダイレクトメモリアクセス(DMA)と、
を更に含む、請求項1に記載のニューラルプロセッサ回路。
【請求項4】
前記ニューラルタスクマネージャ回路は、
前記構成キューに結合されたフェッチキューと、
前記フェッチキュー及び前記タスクアービタ回路に結合されたタスクマネージャダイレクトメモリアクセス(DMA)と、
を更に含み、
前記タスクアービタ回路は、前記タスクマネージャDMAを介して、前記ニューラルプロセッサ回路の外部にある前記メモリの前記場所から前記タスクの前記構成データを取得し、前記構成データを前記フェッチキューに記憶するように更に構成され、実行されたタスクの第2の構成データが前記構成キューから除去された場合に、前記フェッチキューは、前記構成データを前記構成キューに提供する、
請求項3に記載のニューラルプロセッサ回路。
【請求項5】
前記ニューラルタスクマネージャ回路は、前記タスクアービタ回路に結合された別のタスクキュー回路を更に含み、他のタスクキュー回路は、別のニューラルネットワークをインスタンス化する他のタスクの別のタスクリストへの別の参照を記憶するように構成され、前記タスクキュー回路は、第1の優先度を有し、前記他のタスクキュー回路は第2の優先度を有し、
前記タスクアービタ回路は、前記第1の優先度と前記第2の優先度との比較に基づいて、(i)前記タスクの前記構成データ、又は(ii)フェッチキュー内の前記他のタスクの別の構成データ、のうちの1つを記憶するように構成されている、
請求項3に記載のニューラルプロセッサ回路。
【請求項6】
前記ニューラルプロセッサ回路の外部にある前記メモリと前記ニューラルエンジン回路とに結合されたデータバッファを更に備え、前記タスクアービタ回路は、前記構成データの別の部分を前記データバッファに提供するように更に構成され、前記構成データの前記他の部分が前記データバッファをプログラムして、前記タスクの入力データのワークユニットを前記ニューラルエンジン回路にブロードキャストさせる、請求項1に記載のニューラルプロセッサ回路。
【請求項7】
前記データバッファと前記ニューラルプロセッサ回路の外部にある前記メモリとに結合されたバッファダイレクトメモリアクセス(DMA)を更に含み、
前記タスクアービタ回路は、前記構成データの第3の部分を前記バッファDMAに提供するように更に構成され、前記構成データの前記第3の部分が前記バッファDMAをプログラムして、前記ニューラルプロセッサ回路の外部にある前記メモリから前記タスクの前記入力データのタイルを取得し、前記タイルを前記データバッファに記憶させ、
前記タイルは、複数のワークユニットを含む、請求項6に記載のニューラルプロセッサ回路。
【請求項8】
前記ニューラルエンジン回路は、
前記ニューラルタスクマネージャに結合された入力バッファ回路と、
前記入力バッファ回路に結合された乗算-加算(MAD)回路と、
を含み、
前記構成データの前記一部が前記入力バッファ回路をプログラムして、前記入力バッファ回路に記憶された前記タスクの入力データの一部を前記MAD回路に提供させる、
請求項1に記載のニューラルプロセッサ回路。
【請求項9】
前記ニューラルプロセッサ回路の外部にある前記メモリと前記ニューラルエンジン回路とに結合されたデータバッファを更に備え、前記ニューラルエンジンは出力回路を更に備え、前記構成データの前記少なくとも一部が前記出力回路をプログラムして、前記MAD回路から前記データバッファに出力データを提供させる、請求項8に記載のニューラルプロセッサ回路。
【請求項10】
前記ニューラルプロセッサ回路の外部にある前記メモリと前記ニューラルエンジン回路とに結合されたカーネルダイレクトメモリアクセス(DMA)を更に備え、
前記タスクアービタ回路は、前記構成データの別の部分を前記カーネルDMAに提供するように更に構成され、前記構成データの前記他の部分が前記カーネルDMAをプログラムして、前記ニューラルプロセッサ回路の外部にある前記メモリからカーネルデータを取得させ、前記カーネルデータを前記ニューラルエンジン回路に提供して前記タスクを実行させる、請求項1に記載のニューラルプロセッサ回路。
【請求項11】
ニューラルプロセッサ回路においてタスクを管理する方法であって、
前記ニューラルプロセッサ回路のタスクキュー回路内に、ニューラルネットワークをインスタンス化するタスクのタスクリストへの参照を記憶することであって、前記タスクリストは、前記ニューラルプロセッサ回路の外部にあるメモリの場所に記憶された、タスクの構成データを含む、ことと、
前記タスクキュー回路に記憶された前記タスクリストへの前記参照に基づいて、前記ニューラルプロセッサ回路の外部にある前記メモリの前記場所から前記構成データを取得することと、
前記構成データの一部を前記ニューラルプロセッサ回路のニューラルエンジン回路に提供することであって、前記構成データの前記一部が前記ニューラルエンジン回路をプログラムして、前記タスクを実行させる、ことと、
を含む方法。
【請求項12】
前記タスクは、実行された場合、前記ニューラルネットワークの単一のネットワーク層、前記ニューラルネットワークの複数のネットワーク層、又は前記ニューラルネットワークのネットワーク層の一部をインスタンス化する、請求項11に記載の方法。
【請求項13】
前記構成データを前記ニューラルプロセッサ回路の構成キューに記憶することと、
前記構成データの前記一部を、前記構成キューから前記ニューラルエンジン回路に提供することと、
前記構成データが前記構成キューに記憶されている場合に、外部メモリから前記タスクのカーネルデータを取得することと、
前記構成データが前記構成キューに記憶されている場合に、前記外部メモリから前記タスクの入力データを取得することと、
を更に含む請求項11に記載の方法。
【請求項14】
前記タスクの前記構成データを、前記ニューラルプロセッサ回路のタスクマネージャダイレクトメモリアクセス(DMA)を介して、前記外部メモリの前記場所から取得することと、
前記構成データを前記ニューラルプロセッサ回路のフェッチキュー内に記憶することと、
実行されたタスクの別の構成データが前記構成キューから除去された場合に、前記フェッチキューから前記構成キューに前記構成データを提供することと、
を更に含む請求項13に記載の方法。
【請求項15】
別のニューラルネットワークをインスタンス化する他のタスクの別のタスクリストへの別の参照を、別のタスクキュー回路内に記憶することであって、前記タスクキュー回路は、第1の優先度を有し、前記他のタスクキュー回路は第2の優先度を有する、ことと、
前記第1の優先度と前記第2の優先度との比較に基づいて、(i)前記タスクの前記構成データ、又は(ii)フェッチキュー内の前記他のタスクの別の構成データ、のうちの1つを記憶することと、
を更に含む請求項13に記載の方法。
【請求項16】
前記構成の別の部分を、前記ニューラルプロセッサ回路のデータバッファに提供することを更に含み、前記構成データの前記他の部分が前記データバッファをプログラムして、前記タスクの入力データのワークユニットを前記ニューラルエンジン回路にブロードキャストさせる、請求項11に記載の方法。
【請求項17】
前記構成データの第3の部分を、前記データバッファ及び外部メモリに結合された前記ニューラルプロセッサ回路のバッファダイレクトメモリアクセス(DMA)に提供することを更に含み、前記構成データの前記第3の部分が前記バッファDMAをプログラムして、前記外部メモリから前記タスクの前記入力データのタイルを取得させ、前記タイルを前記データバッファに記憶させ、前記タイルは複数のワークユニットを含む、請求項16に記載の方法。
【請求項18】
前記構成データの前記一部が、前記ニューラルエンジン回路の入力バッファ回路をプログラムして、前記入力バッファ回路に記憶された前記タスクの入力データの一部を、前記ニューラルエンジン回路の乗算-加算(MAD)回路に提供させ、
前記構成データの前記少なくとも一部が、前記ニューラルエンジン回路の出力回路をプログラムして、出力データを前記MAD回路から前記ニューラルプロセッサ回路のデータバッファに提供させる、
請求項11に記載の方法。
【請求項19】
前記構成データの別の部分を、前記ニューラルプロセッサ回路の外部にある前記メモリと前記ニューラルエンジン回路とに結合されたカーネルダイレクトメモリアクセス(DMA)に提供することを更に含み、前記構成データの前記他の部分が前記カーネルDMAをプログラムして、前記ニューラルプロセッサ回路の外部にある前記メモリからカーネルデータを取得させ、前記カーネルデータを前記ニューラルエンジン回路に提供して前記タスクを実行させる、
請求項11に記載の方法。
【請求項20】
ニューラルプロセッサ回路を備える集積回路(IC)システムであって、前記ニューラルプロセッサ回路は、
ニューラルエンジン回路と、
前記ニューラルエンジン回路に結合されたニューラルタスクマネージャ回路と、を備え、前記ニューラルタスクマネージャ回路は、
ニューラルネットワークをインスタンス化するタスクのタスクリストへの参照を記憶するように構成されたタスクキュー回路であって、前記タスクリストは、前記ニューラルプロセッサ回路の外部にあるメモリの場所に記憶されたタスクの構成データを含む、タスクキュー回路と、
前記タスクキュー回路に結合されたタスクアービタ回路であって、前記タスクアービタ回路は、
前記タスクキュー回路に記憶された前記タスクリストへの前記参照に基づいて、前記ニューラルプロセッサ回路の外部にある前記メモリの前記場所から前記タスクの前記構成データを取得し、
前記構成データの少なくとも一部を前記ニューラルエンジン回路に提供するように構成され、前記構成データの前記少なくとも一部が前記ニューラルエンジン回路をプログラムして前記タスクを実行させる、タスクアービタ回路と、
を含む、
集積回路(IC)システム。
【発明の詳細な説明】
【技術分野】
【0001】
1.技術分野の開示
【0002】
本開示は、ニューラルネットワークを実装するための回路に関し、より具体的には、ニューラルネットワークタスクを管理することに関する。
【背景技術】
【0003】
2.関連技術の記載
【0004】
人工ニューラルネットワーク(artificial neural network、ANN)は、入力データを処理するために、接続されたノードの集合を使用するコンピューティングシステム又はモデルである。ANNは、典型的には層に組織化され、異なる層がそれらの入力に対して、異なる種類の変換を実行する。畳み込みニューラルネットワーク(convolution neural network、CNN)、ディープニューラルネットワーク(deep neural network、DNN)、リカレントニューラルネットワーク(recurrent neural network、RNN)、及びディープビリーフネットワーク(deep belief network、DBN)などのANNの拡張又は変形が大きな注目を受けるようになってきた。これらのコンピューティングシステム又はモデルは多くの場合、乗算及び累積を含む大規模な計算演算を伴う。例えば、CNNは、主に入力データとカーネルデータとの間の畳み込みを使用する機械学習技術のクラスであり、これは、乗算演算及び累積演算に分解することができる。
【0005】
入力データの種類及び実行される演算に応じて、これらの機械学習システム又はモデルは、構成が異なり得る。そのような様々な構成としては、例えば、前処理動作、入力データ内のチャネル数、使用されるカーネルデータ、畳み込み結果に適用される非線形関数、及び様々な後処理動作の適用が挙げられるであろう。中央処理装置(central processing unit、CPU)及びそのメインメモリを使用して、様々な構成の機械学習システム又はモデルをインスタンス化及び実行することは比較的容易である。なぜなら、そのようなシステム又はモデルは、コードを更新することだけでインスタンス化できるからである。しかしながら、これら機械学習システム又はモデルの様々な動作のためにCPUにのみ依存することは、中央処理装置(CPU)の帯域幅を著しく消費し、並びに全体的な電力消費を増加させることになる。
【発明の概要】
【0006】
実施形態は、ニューラルプロセッサ回路によって実行された場合に、ニューラルネットワークをインスタンス化するタスクを管理することに関する。ニューラルプロセッサ回路は、1つ以上のニューラルエンジン回路と、ニューラルタスクマネージャ回路とを含む。ニューラルタスクマネージャ回路は、複数のタスクキュー回路と、タスクアービタ回路とを含む。各タスクキュー回路は、機械学習動作用のタスクのタスクリストへの参照を記憶する。タスクリスト及びタスクキュー回路の各々は、優先度パラメータに関連付けられてもよい。タスクキュー回路の優先度に基づいて、タスクアービタ回路は、外部メモリからタスクのための構成データを取得し、1つ以上のニューラルエンジンを含むニューラルプロセッサ回路の構成要素に、構成データを提供する。構成データは、ニューラルプロセッサ回路をプログラムして、タスクを実行させる。
【0007】
いくつかの実施形態は、ニューラルプロセッサ回路においてタスクを管理する方法を含む。ニューラルネットワークをインスタンス化するタスクのタスクリストへの参照は、ニューラルプロセッサ回路のタスクキュー回路に記憶される。タスクリストは、外部メモリの場所に記憶されたタスクの構成データを含む。タスクリストは、例えばタスク優先度に基づいて、タスクキュー回路から取得される。タスクリストを取得することに応答して、構成データは、外部メモリの場所から取得される。構成データの少なくとも一部は、ニューラルプロセッサ回路のニューラルエンジンに提供されて、ニューラルエンジンをプログラムして、タスクを実行させる。
【図面の簡単な説明】
【0008】
【
図1】一実施形態に係る、電子デバイスの概要図である。
【
図2】一実施形態に係る、電子デバイスの構成要素を示すブロック図である。
【
図3】一実施形態に係る、ニューラルプロセッサ回路を示すブロック図である。
【
図4】一実施形態に係る、ニューラルプロセッサ回路内のニューラルエンジンのブロック図である。
【
図5】一実施形態に係る、ニューラルプロセッサ回路における入力データを処理するためのループを示す概念図である。
【
図6】一実施形態に係る、入力データをスライス、タイル、及びワークユニットにセグメント化することを示す概念図である。
【
図7】一実施形態に係る、ニューラルプロセッサ回路の構成要素内のラスタライザのプログラミングを示す図である。
【
図8】一実施形態に係る、ニューラルプロセッサ回路において入力データを処理する方法を示すフローチャートである。
【
図9】一実施形態に係る、タスクのリストによって表されるニューラルネットワークを示す概略ブロック図である。
【
図10】一実施形態に係る、ニューラルタスクマネージャを示すブロック図である。
【
図11】一実施形態に係る、タスクキューを使用したタスク記述子の取得を示す図である。
【
図12】一実施形態に係る、タスク記述子を示す図である。
【
図13】一実施形態に係る、ニューラルタスクマネージャのフェッチキュー及び構成キューを示すブロック図である。
【
図14】一実施形態に係る、ニューラルプロセッサ回路においてタスクを管理する方法を示すフローチャートである。
【0009】
種々の非限定的な実施形態を単に例示を目的として、図で示し、詳細な説明において説明する。
【発明を実施するための形態】
【0010】
ここで、添付図面に実施例が示される実施形態への詳細な参照が行われる。以下の詳細な説明では、説明される様々な実施形態の完全な理解を提供するために数多くの具体的な詳細が記載されている。しかし、説明する実施形態は、これらの具体的な詳細なしに実施することができる。他の例では、周知の方法、手順、構成要素、回路、及びネットワークは、実施形態の態様を不必要に不明瞭にしないよう詳細には説明されていない。
【0011】
本開示の実施形態は、ニューラルプロセッサ回路によって実行された場合に、ニューラルネットワークをインスタンス化するタスクを管理することに関する。推論動作又は訓練動作などの機械学習動作は、タスクのタスクリストによって定義される。ニューラルプロセッサ回路は、1つ以上のニューラルエンジンと、ニューラルタスクマネージャとを含む。ニューラルタスクマネージャは、複数のタスクキュー及びタスクアービタを含む。各タスクキューは、機械学習動作用のタスクのタスクリストを記憶する。タスクリスト又はタスクキューの各々は、優先度パラメータに関連付けられてもよい。タスクアービタは、優先度パラメータに基づいて、外部メモリからタスクに関する構成データを取得し、1つ以上のニューラルエンジンを含むニューラルプロセッサ回路の構成要素に、構成データを提供する。いくつかの実施形態では、ニューラルタスクマネージャは、タスクアービタによって選択されたコミットされたタスクの構成データを記憶し、構成データをニューラルプロセッサ回路の他の構成要素に提供する構成キューを含む。構成データは、ニューラルプロセッサ回路をプログラムして、タスクを実行させる。例えば、構成データは、タスクを実行するためにニューラルエンジンによって処理される入力データ及びカーネルデータを含み得る。構成データは、構成データを取得及び処理するための命令、並びにニューラルエンジンの出力データを記憶するための命令を更に含んでもよい。とりわけ、ニューラルタスクマネージャは、ニューラルプロセッサ回路が複数の機械学習動作を効率的に処理することを可能にする。更に、ニューラルタスクマネージャは、より低い優先度のタスクが実行されている一方で、より高い優先度のタスクがタスクキューに記憶されている場合に、タスク切替えを促進することができる。
【0012】
本明細書に記載される「タスク」は、ニューラルネットワークのネットワーク層、ニューラルネットワークの複数のネットワーク層、又はニューラルネットワークのネットワーク層の一部をインスタンス化する、ニューラルプロセッサ回路の処理動作を指す。本明細書に記載される「タスクリスト」は、ニューラルプロセッサ回路によって実行されて、ニューラルネットワークの複数のネットワーク層をインスタンス化するタスクのシーケンスなどのタスクのシーケンスを指す。
例示的な電子デバイス
【0013】
電子デバイス、そのようなデバイス用のユーザインターフェース、及びそのようなデバイスを使用する関連するプロセスの実施形態が説明される。いくつかの実施形態では、デバイスは、パーソナルデジタルアシスタント(PDA)機能及び/又は音楽プレーヤ機能などの他の機能も含む、携帯電話などのポータブル通信デバイスである。ポータブル多機能デバイスの例示的な実施形態としては、カリフォルニア州クパチーノのApple Inc.からのiPhone(登録商標)、iPod Touch(登録商標)、Apple Watch(登録商標)、及びiPad(登録商標)のデバイスが挙げられるが、これらに限定されない。ウェアラブルコンピュータ、ラップトップコンピュータ、又はタブレットコンピュータなどの他のポータブル電子デバイスが、任意選択的に使用される。いくつかの実施形態では、デバイスは、ポータブル通信デバイスではないが、デスクトップコンピュータ又はポータブル使用のために設計されていない他のコンピューティングデバイスである。いくつかの実施形態では、本開示の電子デバイスは、タッチ感知面(例えば、タッチスクリーンディスプレイ及び/又はタッチパッド)を含むことができる。
図1に関連して以下に説明する例示的な電子デバイス(例えば、デバイス100)は、ユーザ入力を受け取るためのタッチ感知面を含むことができる。電子デバイスは、物理キーボード、マウス、及び/又はジョイスティックなどの、1つ以上の他の物理ユーザインターフェースデバイスも含むことができる。
【0014】
図1は、一実施形態に係る、電子デバイス100の概要図である。デバイス100は、「ホーム」又はメニューボタン104などの、1つ以上の物理ボタンを含んでもよい。メニューボタン104は、例えば、デバイス100上で実行されるアプリケーションのセット内の任意のアプリケーションへナビゲートするために使用される。いくつかの実施形態では、メニューボタン104は、メニューボタン104上の指紋を識別する指紋センサを含む。指紋センサを使用して、メニューボタン104上の指が、デバイス100をロック解除するために記憶された指紋と一致する指紋を有するか否かを判定することができる。あるいは、いくつかの実施形態では、メニューボタン104は、タッチスクリーン上に表示されるグラフィカルユーザインターフェース(graphical user interface、GUI)内のソフトキーとして実装される。
【0015】
いくつかの実施形態では、デバイス100は、タッチスクリーン150、メニューボタン104、デバイスへの電源をオン/オフし、デバイスをロックするためのプッシュボタン106、音量調整ボタン108、加入者識別モジュール(Subscriber Identity Module、SIM)カードスロット110、ヘッドセットジャック112、及びドッキング/充電用外部ポート124を含む。プッシュボタン106は、ボタンを押し下げて、所定の時間間隔の間、ボタンを押し下げた状態に保持することによってデバイス上の電源をオン/オフするため、ボタンを押し下げて、既定の時間が経過する前にボタンを解放することによってデバイスをロックするため、及び/又はデバイスをロック解除する、若しくはロック解除プロセスを開始するために、使用され得る。代替的実施形態では、デバイス100はまた、マイクロフォン113を介して、一部の機能をアクティブ化又は非アクティブ化するための口頭入力も受け入れる。デバイス100は、メモリ(1つ以上のコンピュータ可読記憶媒体を含むことができる)、メモリコントローラ、1つ以上の中央処理装置(CPU)、周辺機器インターフェース、RF回路、オーディオ回路、スピーカ111、マイクロフォン113、入出力(input/output、I/O)サブシステム、及び他の入力又は制御デバイスを含むがこれらに限定されない、様々な構成要素を含む。デバイス100は、1つ以上の画像センサ164と、1つ以上の近接センサ166と、1つ以上の加速度計168とを含むことができる。デバイス100は、
図1に示されていない構成要素を含んでもよい。
【0016】
デバイス100は、電子デバイスの単なる一実施例であり、デバイス100は、上記に列挙したものより多い又は少ない構成要素を有することができ、それらの構成要素の一部は、1つの構成要素に組み合わせる、又は異なる構成若しくは配置を有することができる。上記に列挙したデバイス100の様々な構成要素は、1つ以上の信号処理回路及び/又は特定用途向け集積回路(application specific integrated circuit、ASIC)を含む、ハードウェア、ソフトウェア、ファームウェア、又はそれらの組合せで具現化される。
【0017】
図2は、一実施形態に係る、デバイス100の構成要素を示すブロック図である。デバイス100は、画像処理を含む様々な動作を実行することができる。この目的及び他の目的のために、デバイス100は、他の構成要素の中でもとりわけ、画像センサ202と、システムオンチップ(system-on-a chip、SOC)構成要素204と、システムメモリ230と、永続的記憶装置(例えば、フラッシュメモリ)228と、動き(方向)センサ234と、ディスプレイ216とを含むことができる。
図2に示すような構成要素は、単なる例示である。例えば、デバイス100は、
図2に示されていない他の構成要素(スピーカ又はマイクロフォンなど)を含んでもよい。更に、いくつかの構成要素(動きセンサ234など)は、デバイス100から省略されてもよい。
【0018】
画像センサ202は、画像データをキャプチャするための構成要素であり、例えば、相補的金属酸化物半導体(complementary metal-oxide-semiconductor、CMOS)アクティブピクセルセンサ、カメラ、ビデオカメラ、又は他のデバイスとして具現化することができる。画像センサ202は、更なる処理のためにSOC構成要素204に送信される生画像データを生成する。いくつかの実施形態では、SOC構成要素204によって処理された画像データは、ディスプレイ216上に表示され、システムメモリ230、永続的記憶装置228に記憶され、又は、ネットワーク接続を介してリモートコンピューティングデバイスに送信される。画像センサ202によって生成された生画像データは、ベイヤーカラーカーネル配列(color kernel array、CFA)パターン(以降、「ベイヤーパターン」とも呼ばれる)とすることができる。
【0019】
動きセンサ234は、デバイス100の動きを感知するための構成要素又は構成要素のセットである。動きセンサ234は、デバイス100の向き及び/又は加速度を示すセンサ信号を生成することができる。センサ信号は、デバイス100をオンにする、又はディスプレイ216上に表示された画像を回転するなどの、様々な動作のためにSOC構成要素204に送信される。
【0020】
ディスプレイ216は、SOC構成要素204によって生成されたような画像を表示するための構成要素である。ディスプレイ216は、例えば、液晶ディスプレイ(liquid crystal display、LCD)デバイス又は有機発光ダイオード(organic light emitting diode、OLED)デバイスを含むことができる。SOC構成要素204から受信したデータに基づいて、ディスプレイ216は、メニュー、選択された動作パラメータ、画像センサ202によってキャプチャされSOC構成要素204によって処理された画像、及び/又はデバイス100のユーザインターフェース(図示せず)から受信した他の情報などの、様々な画像を表示することができる。
【0021】
システムメモリ230は、SOC構成要素204によって実行するための命令を記憶するため、及びSOC構成要素204によって処理されたデータを記憶するための構成要素である。システムメモリ230は、例えば、ダイナミックランダムアクセスメモリ(dynamic random access memory、DRAM)、シンクロナスDRAM(synchronous DRAM、SDRAM)、ダブルデータレート(double data rate)(DDR、DDR2、DDR3など)RAMBUS DRAM(RDRAM)、スタティックRAM(static RAM、SRAM)、又はそれらの組合せを含む、任意の種類のメモリとして具現化することができる。いくつかの実施形態では、システムメモリ230は、ピクセルデータ若しくは他の画像データ、又は統計を様々なフォーマットで記憶してもよい。
【0022】
永続的記憶装置228は、不揮発的にデータを記憶するための構成要素である。永続的記憶装置228は、電源が使用可能でないときでもデータを保持する。永続的記憶装置228は、読み出し専用メモリ(read-only memory、ROM)、フラッシュメモリ、又は他の不揮発性ランダムアクセスメモリデバイスとして具現化することができる。
【0023】
SOC構成要素204は、1つ以上の集積回路(integrated circuit、IC)チップとして具現化され、様々なデータ処理プロセスを実行する。SOC構成要素204は、他のサブコンポーネントの中でもとりわけ、画像信号プロセッサ(image signal processor、ISP)206、中央プロセッサユニット(central processor unit、CPU)208、ネットワークインターフェース210、センサインターフェース212、ディスプレイコントローラ214、ニューラルプロセッサ回路218、グラフィックプロセッサgraphics processor、GPU)220、メモリコントローラ222、ビデオエンコーダ224、ストレージコントローラ226、及びこれらのサブコンポーネントを接続するバス232を含むことができる。SOC構成要素204は、
図2に示されるサブコンポーネントよりも多くの又は少ないサブコンポーネントを含んでもよい。
【0024】
ISP206は、画像処理パイプラインの様々なステージを実行するハードウェアである。いくつかの実施形態では、ISP206は、画像センサ202から生画像データを受信して、その生画像データをSOC構成要素204の他のサブコンポーネント又はデバイス100の構成要素によって使用可能なフォーマットに処理することができる。ISP206は、
図3を参照して以下に詳細に説明するように、画像変換演算、水平及び垂直スケーリング、色空間変換、並びに/又は画像安定化変換などの、様々な画像操作演算を実行することができる。
【0025】
CPU208は、任意の好適な命令セットアーキテクチャを使用して具現化してもよく、その命令セットアーキテクチャで定義された命令を実行するように構成されてもよい。CPU208は、x86、PowerPC、SPARC、RISC、ARM、若しくはMIPS命令セットアーキテクチャ(instruction set architectures、ISA)、又は任意の他の好適なISAなどの様々なISAのいずれかを使用する汎用又は組み込み型プロセッサであってもよい。単一のCPUを
図2に示すが、SOC構成要素204は、複数のCPUを含むことができる。マルチプロセッサシステムでは、CPUの各々は、必ずしもそうではないが、同一のISAを共通して実装してもよい。
【0026】
グラフィック処理ユニット(graphics processing unit、GPU)220は、グラフィックデータを実行するためのグラフィック処理回路である。例えば、GPU220は、フレームバッファに表示されることになるオブジェクト(例えば、フレーム全体に対してピクセルデータを含むもの)をレンダリングすることができる。GPU220は、グラフィック演算の一部又は全てを実行するようにグラフィックソフトウェア又は特定のグラフィック演算のハードウェア高速化を実行することができる1つ以上のグラフィックプロセッサを含んでもよい。
【0027】
ニューラルプロセッサ回路218は、乗算、加算、及び累積を含む計算に基づいて、様々な機械学習動作を実行する回路である。このような計算は、例えば、入力データ及びカーネルデータの畳み込みを実行するように構成されてもよい。ニューラルプロセッサ回路218は、ニューラルネットワーク動作に関連付けられたリソース集約的動作からCPU208を解放しながら、高速かつ電力効率の良い方法でこれらの動作を実行する構成可能回路である。ニューラルプロセッサ回路218は、センサインターフェース212、画像信号プロセッサ206、システムメモリ230、又はネットワークインターフェース210若しくはGPU220などの他のソースから入力データを受信してもよい。ニューラルプロセッサ回路218の出力は、様々な動作のために、画像信号プロセッサ206、システムメモリ230、又はCPU208などのデバイス100の様々な構成要素に提供されてもよい。ニューラルプロセッサ回路218の構造及び動作は、
図3を参照して以下に詳細に説明される。
【0028】
ネットワークインターフェース210は、1つ以上のネットワーク(例えば、キャリア又はエージェントデバイス)を介してデータをデバイス100と他のデバイスとの間で交換することを可能にするサブコンポーネントである。例えば、ビデオ又は他の画像データは、ネットワークインターフェース210を介して他のデバイスから受信して、(例えば、
図3に関して後述するような画像信号プロセッサ206へのバックエンドインターフェースを介した)後続の処理及び表示のためにシステムメモリ230に記憶してもよい。ネットワークとしては、ローカルエリアネットワーク(Local Area Network、LAN)(例えば、イーサネット又は企業ネットワーク)及びワイドエリアネットワーク(Wide Area Network、WAN)を挙げることができるが、これらに限定されない。ネットワークインターフェース210を介して受信した画像データは、ISP206によって画像処理プロセスにかけることができる。
【0029】
センサインターフェース212は、動きセンサ234とインターフェースするための回路である。センサインターフェース212は、動きセンサ234からセンサ情報を受信し、このセンサ情報を処理して、デバイス100の向き又は移動を判定する。
【0030】
ディスプレイコントローラ214は、ディスプレイ216上に表示されることになる画像データを送信するための回路である。ディスプレイコントローラ214は、ISP206、CPU208、グラフィックプロセッサ、又はシステムメモリ230から画像データを受信し、ディスプレイ216上に表示するために好適なフォーマットに画像データを処理する。
【0031】
メモリコントローラ222は、システムメモリ230と通信するための回路である。メモリコントローラ222は、SOC構成要素204のISP206、CPU208、GPU220、又は他のサブコンポーネントによって処理するためにシステムメモリ230からデータを読み取ることができる。メモリコントローラ222はまた、SOC構成要素204の様々なサブコンポーネントから受信したデータをシステムメモリ230に書き込むことができる。
【0032】
ビデオエンコーダ224は、ビデオデータを永続的記憶装置128に記憶するために好適なフォーマットにエンコードするための、又はネットワークを介して別のデバイスに伝送するためにネットワークインターフェース210にデータを渡すための、ハードウェア、ソフトウェア、ファームウェア、又はそれらの組合せである。
【0033】
いくつかの実施形態では、SOC構成要素204の1つ以上のサブコンポーネント又はこれらのサブコンポーネントのいくつかの機能は、ISP206、CPU208、又はGPU220上で実行されるソフトウェア構成要素によって実行することができる。そのようなソフトウェア構成要素は、システムメモリ230、永続的記憶装置228、又はネットワークインターフェース210を介してデバイス100と通信する別のデバイスに記憶することができる。
【0034】
画像データ又はビデオデータは、SOC構成要素204内の様々なデータ経路を介して流れることができる。一実施例では、生画像データは、画像センサ202から生成して、ISP206によって処理し、その後、バス232及びメモリコントローラ222を介してシステムメモリ230に送信することができる。画像データがシステムメモリ230に記憶された後で、画像データは、エンコードするためにビデオエンコーダ224によって、又は表示するためにディスプレイ116によって、バス232を介してアクセスすることができる。
例示的ニューラルプロセッサ回路
【0035】
ニューラルプロセッサ回路218は、少なくともカーネルデータ340に基づいて、入力データに対してニューラルネットワーク動作を実行する構成可能回路である。この目的のために、ニューラルプロセッサ回路218は、他の構成要素の中でもとりわけ、ニューラルタスクマネージャ310、複数のニューラルエンジン314A~314N(以下では、総称して「ニューラルエンジン314」と称され、個別に「ニューラルエンジン314」とも称される)、カーネルダイレクトメモリアクセス(direct memory access、DMA)324、データバッファ318、及びバッファDMA320を含んでもよい。ニューラルプロセッサ回路218は、
図3に示されていない他の構成要素を含んでもよい。
【0036】
ニューラルエンジン314の各々は、ニューラルネットワーク動作のための計算動作を並列に実行する。動作の負荷に応じて、ニューラルエンジン314の全セットが動作されてもよく、又はニューラルエンジン314のサブセットのみが動作される一方で、残りのニューラルエンジン314は電力を節約するためにパワーセーブモードに置かれてもよい。ニューラルエンジン314の各々は、
図4を参照して以下に詳細に説明するように、1つ以上のカーネルを記憶するための、乗算-累積演算を実行するための、及び出力データ328を生成するために後処理するための、構成要素を含む。ニューラルネットワーク動作の一例は、畳み込み演算である。
【0037】
ニューラルタスクマネージャ310は、ニューラルプロセッサ回路218の全体的な動作を管理する。ニューラルタスクマネージャ310は、CPU208によって実行されるコンパイラからタスクリストを受信し、そのタスクキュー内にタスクを記憶し、実行するタスクを選択し、選択されたタスクを実行するための命令をニューラルプロセッサ回路218の他の構成要素に送信してもよい。ニューラルタスクマネージャ310はまた、CPU208からの命令を受信するなどのイベントを検出したときに、タスク切替えを実行してもよい。1つ以上の実施形態では、
図5~
図7を参照して以下に詳細に記載されるように、ニューラルタスクマネージャ310は、ニューラルプロセッサ回路218の構成要素にラスタライザ情報を送信して、入力データ及びカーネルデータの適切な部分を各構成要素が追跡、取得、又は処理することを可能にする。ニューラルタスクマネージャ310が、ニューラルプロセッサ回路218の一部として
図3に示されているが、ニューラルタスクマネージャ310は、ニューラルプロセッサ回路218の外側にある構成要素であってもよい。
【0038】
カーネルDMA324は、カーネルデータをソース(例えば、システムメモリ230)からフェッチし、カーネルデータ326A~326Nをニューラルエンジン314の各々に送信する読み出し回路である。カーネルデータは、そこからカーネル要素が抽出され得る情報を表す。一実施形態では、カーネルデータは、ニューラルエンジン314の各々において圧縮された圧縮フォーマットであってもよい。ニューラルエンジン314の各々に提供されるカーネルデータは、場合によっては同じであってもよいが、ニューラルエンジン314の各々に提供されるカーネルデータは、ほとんどの場合は異なる。
【0039】
データバッファ318は、ニューラルネットワーク動作に関連付けられたデータを記憶するための一時記憶装置である。一実施形態では、データバッファ318は、ニューラルエンジン314の全てによってアクセスすることができるメモリとして具体化されている。データバッファ318は、対応するニューラルエンジン314A~314Nに供給するための入力データ322A~322N、並びにニューラルエンジン314へとフィードバックする又は標的回路(例えば、システムメモリ230)に送信するためのニューラルエンジン314A~314Nの各々からの出力、を記憶してもよい。データバッファ318及びニューラルプロセッサ回路218の他の構成要素の動作は、データバッファ318に記憶された入力データ及び中間データが、ニューラルエンジン314における複数の動作にわたって再使用され、それによりシステムメモリ230への及びシステムメモリ230からのデータ転送を低減させるように協調されている。データバッファ318は、全ての入力チャネルの入力データが全てのニューラルエンジン314に供給されるブロードキャストモードにて、又は入力チャネルのサブセットの入力データが各ニューラルエンジン314に供給されるユニキャストモードにて動作されてもよい。
【0040】
データバッファ318に記憶されている入力データ322は、とりわけ、ニューラルエンジン314の以前のサイクルの画像データ、輝度勾配ヒストグラム(HOG)データ、オーディオデータ、メタデータ、出力データ328、及びSOC構成要素204の他の構成要素から受信した他の処理されたデータ、の一部であり得る。
【0041】
バッファDMA320は、データバッファ318に記憶するために、ソース(例えば、システムメモリ230)からの入力データの一部(例えば、タイル)を受信する読み出し回路と、データバッファ318から標的(例えば、システムメモリ)へとデータを送達する書き込み回路とを含む。
例示的なニューラルエンジンアーキテクチャ
【0042】
図4は、一実施形態に係る、ニューラルエンジン314のブロック図である。ニューラルエンジン314は、畳み込み、空間プーリング、及び局所応答正規化などの、ニューラルネットワーク動作を促進する様々な動作を実行する。ニューラルエンジン314は、入力データ322を受信し、記憶されたカーネルデータに基づいて入力データ322に対して乗算-累積演算(例えば、畳み込み演算)を実行し、乗算-累積演算の結果に対して更なる後処理動作を実行し、出力データ328を生成する。ニューラルエンジン314の入力データ322及び/又は出力データ328は、単一のチャネル又は複数のチャネルのものであってもよい。
【0043】
ニューラルエンジン314は、他の構成要素の中でもとりわけ、入力バッファ回路402、計算コア416、ニューラルエンジン(NE)制御部418、カーネル抽出回路432、累積器414、及び出力回路424を含んでもよい。ニューラルエンジン314は、
図4に示されていない更なる構成要素を含んでもよい。
【0044】
入力バッファ回路402は、入力データ322をデータバッファ318から受信しながら、その一部を記憶し、現在のタスク又はプロセスループにとって適切な入力データの一部408を処理するために計算コア416に送信する回路である。入力バッファ回路402は、入力バッファ回路402の読取り場所をシフトさせて、計算コア416に送信される、入力データの部分408を変更するシフタ410を含む。シフトを介して、計算コア416に提供される入力データの部分を変更することにより、ニューラルエンジン314は、より少ない数の読み出し動作に基づいて、入力データの異なる部分に対して乗算-累積を実行することができる。1つ以上の実施形態では、入力データ322は、差異畳み込みグループ(difference convolution groups)及び/又は入力チャネルのデータを含む。
【0045】
カーネル抽出回路432は、カーネルDMA324からカーネルデータ326を受信し、カーネル係数422を抽出する回路である。一実施形態では、カーネル抽出回路432はルックアップテーブル(look up table、LUT)を参照し、マスクを使用して、圧縮カーネルデータ326からカーネルを再構築する。マスクは、再構成されたカーネル内においてゼロで埋められる場所を示し、残りの場所は数字で充填される。再構成されたカーネルのカーネル係数422は、計算コア416に送信されて、計算コア416の乗算-加算(multiply-add、MAD)回路内のレジスタに読み込まれる。他の実施形態では、カーネル抽出回路432は、カーネルデータを非圧縮形式で受信し、カーネル係数は、LUTを参照することなく又はマスクを使用することなく決定される。
【0046】
計算コア416は、計算動作を実行するプログラム可能回路である。この目的のために、計算コア416は、MAD回路であるMAD0~MADN、及びポストプロセッサ428を含んでもよい。MAD回路であるMAD0~MADNの各々は、入力データの部分408内の入力値、及びカーネル係数422内の対応するカーネル係数を記憶してもよい。入力値及び対応するカーネル係数は、各MAD回路において乗算されて、処理された値412が生成される。
【0047】
累積器414は、処理された値412をMAD回路から受信及び記憶するメモリ回路である。累積器414に記憶された処理された値は、MAD回路における更なる乗算及び加算演算のためにフィードバック情報419として送信されてもよく、又は後処理のためにポストプロセッサ428に送信されてもよい。累積器414は、MAD回路と組み合わせて、乗算-累積器(multiply-accumulator、MAC)404を形成する。1つ以上の実施形態では、累積器414はサブユニットを有してもよく、各サブユニットは、ニューラルエンジン314の異なる構成要素にデータを送信する。例えば、処理サイクル中、累積器414の第1のサブユニットに記憶されたデータはMAC回路に送信され、累積器414の第2のサブユニットに記憶されたデータはポストプロセッサ428に送信される。
【0048】
ポストプロセッサ428は、累積器414から受信した値412の更なる処理を実行する回路である。ポストプロセッサ428は、これらに限定されないが、非線形関数(例えば、正規化線形ユニット(Rectified Linear Unit、ReLU))、正規化相互相関(normalized cross-correlation、NCC)、8ビットデータに対してニューラル動作を実行した結果を16ビットデータにマージすること、及び局所応答正規化(local response normalization、LRN)を含む動作を実行してもよい。このような動作の結果は、処理された値417としてポストプロセッサ428から出力回路424に出力される。
【0049】
NE制御部418は、ニューラルプロセッサ回路218の動作モード及びパラメータに基づいて、ニューラルエンジン314の他の構成要素の動作を制御する。異なる動作モード(例えば、グループ畳み込みモード若しくは非グループ畳み込みモード)、又はパラメータ(例えば、入力チャネルの数及び出力チャネルの数)に応じて、ニューラルエンジン314は、異なる入力データに対して異なるシーケンスで動作し、累積器414からの異なる値をMAC回路に戻し、ポストプロセッサ428において異なる種類の後処理動作を実行してもよい。ニューラルエンジン314の構成要素を所望の形態で動作するように構成するために、NE制御部418は、制御信号をニューラルエンジンの構成要素に送信する。NE制御部418はまた、
図5~
図7を参照して詳細に後述するように、ニューラルエンジン314で処理されている現在のタスク又はプロセスループを追跡するラスタライザ430を含んでもよい。
【0050】
出力回路424は、ポストプロセッサ428から処理された値417を受信し、データバッファ318とインターフェースして、処理された値417をデータバッファ318に記憶する。この目的のために、出力回路424は、出力データ328として、順序通りに、若しくは順序通りとは異なる形式で、又は処理された値417がポストプロセッサ428において処理される形式で、送出してもよい。
【0051】
ニューラルエンジン314内の構成要素は、構成期間中に、NE制御部418及びニューラルタスクマネージャ310によって構成されてもよい。この目的のために、ニューラルタスクマネージャ310は、構成期間中に、構成情報をニューラルエンジン314に送信する。構成可能パラメータ及びモードとしては、入力データ要素とカーネル要素との間のマッピング、入力チャネルの数、出力チャネルの数、出力ストライドの実行、及びポストプロセッサ428における後処理動作の有効化/選択、が挙げられるが、これらに限定されない。
ニューラルプロセッサ回路における処理のためのデータのセグメント化の動作
【0052】
入力データは、典型的には、複数のニューラルエンジン314での並列処理のために、より小さいデータ片に分割される。多くの場合、ニューラルネットワークに関連付けられたタスクの出力を生成するために、複数のサイクルの動作が実行される。CPU208によって実行されるコンパイラは、ニューラルネットワークの階層及びノードを解析し、ニューラルプロセッサ回路218のハードウェア制約に基づいて、入力データがどのようにセグメント化されるかを判定する。コンパイラの機能の1つは、ニューラルエンジン314における処理のために、入力データをどのように、より小さいデータユニットに分割すべきか、及びタスクに対する結果を生成するために、処理をどのようにループで繰り返すべきか、を判定することである。
【0053】
図5は、一実施形態に係る、ニューラルプロセッサ回路218において入力データを処理するためのループを示す概念図である。最も外側のループは、複数の畳み込みグループを伴うグループ畳み込みが使用される場合、畳み込みグループに対する処理を表す。グループ畳み込みは、各グループ内の入力チャネルの入力データが、各グループの出力チャネルの出力データを生成するためにのみ使用されるが、他のグループの出力チャネルに対する出力データを生成するためには使用されない畳み込みである。したがって、グループ畳み込みの各グループは、別個の畳み込み演算として扱われ得る。
【0054】
各畳み込みグループのループには、入力データのスライスのための処理ループがある。畳み込み動作のための入力データの全体は、
図6に示すように、重なり合う形態で、スライスの複数のストリップにセグメント化される。重なり合う部分602、604、606は、対応するカーネルに対して空間サポートを提供するために、2つの隣接するスライスにおいてオーバーフェッチされた、入力データの部分である。外側から2番目のループは、入力データ内の各スライスに対して畳み込み演算を実行する。スライスのためのループ内には、スライスのタイルのための処理ループがある。各スライスは、
図6に示すように、複数のタイルにセグメント化される。重なり合う部分608、610、612、614は、対応するカーネルに対して空間サポートを提供するために、2つの隣接するタイルにおいてオーバーフェッチされた、スライス4内の入力データの部分である。最も右側のタイルは、典型的には、スライスの他のタイルよりも小さい幅を有することになる。一実施形態では、各タイルの入力データは、読取りサイクルにおいてデータバッファ318上にロードされ、タイルに対する処理ループにおける動作のために再使用される。タイルに対する処理ループ内には、ワークユニットのための処理ループがある。各タイルは、
図6に示すように、複数のワークユニットにセグメント化されている。ワークユニットは、計算コア416の単一のサイクル中に、ニューラルエンジン314の累積器414に適合する出力値を生成するサイズを有する、入力データの一部である。各ワークユニットの形状は、
図6では水平ストリップとして示されているが、ワークユニットの形状はタイルの形状及びサイズに応じて異なっていてもよい。ワークユニットはまた、対応するカーネルに対してサポートを提供するための、オーバーフェッチされたデータを表す重なり合う部分を有する。特に、スライスの最後のタイルのワークユニットは、タイルが縦長である場合、垂直ストリップの形状を有してもよい。1つ以上の実施形態では、各ワークユニットのサイズは256バイトである。このような実施形態では、例えば、ワークユニットは、16×16、32×8、64×4、128×2、又は256×1の寸法のうちの1つに形作られる。
【0055】
各ワークユニットに対して、出力チャネルグループ(output channel group、OCG)のための内部処理ループが設けられてもよい。計算コア416の単一サイクルによって、所与のワークユニットに対して生成される出力チャネルの数はOCGと称される。動作モードに応じて、各ニューラルエンジン314は、入力バッファ回路402への入力データの単一のロードに対して、異なる数の出力チャネル(例えば、8チャネル、32チャネル)の出力データを処理してもよい。
【0056】
各出力チャネルグループに対して、入力チャネル(input channel、Cin)のための内部処理ループが設けられてもよい。特定の入力データをスキップするように入力ストライドが実装される場合、サブ入力チャネル(sub-input channel、Sub-Cin)のループは、入力チャネル(Cin)に対する処理ループ内に設けられてもよい。
【0057】
各入力チャネル又は各サブ入力チャネルに対して、カーネルに対する水平空間サポート、及び各水平空間サポート内の垂直サポートを処理するために、内部ループが設けられる。空間サポートは、カーネルとの畳み込みのための入力データを指し、畳み込みを実行するためのオーバーフェッチされた入力データを、入力データの端部に含む。
【0058】
オーバーフェッチとは、カーネルとの畳み込みのために、入力データの適切な寸法が提供され得るように、現在のスライス、タイル、又はワークユニット内で追加の入力データをフェッチすることを指す。1つ以上の実施形態では、オーバーフェッチは、スライス間において追加の入力データ行を得るために垂直に(
図6で、重なり合う部分602、604、606として示される)、タイル間において追加の入力データ列を得るために水平に(
図6で、重なり合う部分608、610、612、614として示される)、及びタイル内のワークユニット間において追加の入力データ行を得るために垂直に、実行される。
【0059】
カーネルに対する各空間サポートのために、出力チャネル(output channel、OC)に対する内部処理ループが設けられて、各出力チャネル(output channel、Cout)に対して出力データが生成される。出力ストライドが空間アップサンプリングを実装する場合、各サブ出力チャネルを処理するための追加の内側ループが設けられる。出力ストライドが実装される場合、出力チャネル(OC)又はサブ出力チャネルのためのループ内でカーネル係数及びMAC動作のロードが実行されて、出力チャネル(OC)又はサブ出力チャネルのための出力データが生成される。
【0060】
図5の入れ子になったループ構造は、単なる例示に過ぎない。ループは、様々な要因に応じて、省略、追加、又は構造化されてもよい。例えば、単一の畳み込みグループのみが使用される場合、最も外側のループを除去してもよい。更に、水平空間サポート及び垂直空間サポートのためのループ構造は反転させてもよい。
【0061】
1つ以上の実施形態では、
図5及び
図6を参照して上述したように、入力空間をより小さいユニットに分け、これらのより小さいユニットを処理することに関連付けられた動作は、ニューラルプロセッサ回路218の様々な構成要素内のラスタライザ714、718、720、722によって実行される。ラスタライザは、入力/出力データのセグメント(例えば、グループ、ワークユニット、入力チャネル、出力チャネル)を追跡し、入力データのセグメントの適切な取り扱いのために、ニューラルプロセッサ回路の構成要素に命令する、ニューラルプロセッサ回路218の様々な構成要素内の回路である。例えば、バッファDMA320内のラスタライザ720は、システムメモリ230から受信したタイル及びスライスを追跡する一方で、データバッファ318内のラスタライザ718は、ニューラルエンジン314による処理のためにワークユニットを順序通りにブロードキャストする。カーネルDMA322内のラスタライザ722は、どのカーネルが受信されてニューラルエンジン314に分配されるかを判定する一方で、ニューラルエンジン314内のラスタライザ714は、入力バッファ回路402内のシフタ410を動作させて、入力データの正しい部分408をMAC404に送達し、最終出力データ328をデータバッファ318に送信する。
【0062】
図7は、一実施形態に係る、ニューラルプロセッサ回路218の構成要素314、318、320、322内のラスタライザ714、718、720、722のプログラミングを示す図である。それらの機能を実行するために、ラスタライザ714、718、720、722の各々は、入力データ及び/又はカーネルデータがニューラルプロセッサ回路218の各構成要素によって、どのようにセグメント化されるべきか、並びにどのように取り扱われるべきかを示すタスク情報710(例えば、構成データ)を受信する。タスク情報は、現在の層の詳細に関する情報(例えば、入力データ及び出力データの寸法、関連付けられたカーネルの寸法、入力データの境界におけるパディングの種類)を含む。ラスタライザ714、718、720、及び722はまた、それらの動作における制約(例えば、閾値を超えるタイル幅を許可するか又は許可しないか)を受信してもよい。
【0063】
ニューラルプロセッサ回路218の異なる構成要素内にラスタライザを設けることにより、ニューラルプロセッサ回路218の構成要素間で伝達されるデータにおけるオーバーヘッドを減らすことができる。ニューラルプロセッサ回路218の異なる構成要素を制御するために単一の中央ラスタライザが設けられる場合、これらのデータには、畳み込みグループ、タイル、スライス、ワークユニット、入力チャネル、及び出力チャネルなどのタスクのループ内の関連付けられた位置を識別するために、構成要素間で伝達されるカーネルデータ、入力データ、及び出力データが必要であり得る。分散ラスタライザを使用することにより、カーネルデータ、入力データ、及び出力データを、ニューラルプロセッサ回路218の構成要素間で伝達するための別個のメタデータは必要とされない。
ニューラルエンジンアーキテクチャにおける例示的プロセス
【0064】
図8は、一実施形態に係る、ニューラルプロセッサ回路218において入力データを処理する方法を示すフローチャートである。本方法は、異なる及び/若しくは追加のステップを含んでもよく、又はステップは異なる順序であってもよい。
【0065】
ニューラルタスクマネージャ310がラスタライザ714、718、720、722をプログラムした後、バッファDMA320を動作させるプロセスは、システムメモリ230からの入力データのタイルをバッファDMA320に受信させるように、ラスタライザ720がバッファDMA320に命令する(804)ことによって開始される。バッファDMA320によって受信されたタイルは、データバッファ318に記憶される(806)。
【0066】
データバッファ318内のラスタライザ718は、次いで、データバッファ318に、1つ以上のニューラルエンジン314にワークユニットを送信するように命令する(808)。次いで、ワークユニットは、1つ以上のニューラルエンジン314の入力バッファ回路402に記憶される。
【0067】
1つ以上の実施形態では、入力バッファ回路402は、乗算-累積演算を実行するために、MAC404に送信されるワークユニットの一部を選択する(816)。次いで、MAC404は、対応するカーネルを使用して、ワークユニットの選択された部分に対して乗算-累積演算を実行する(820)。次いで、ワークユニット全体が1つ以上のニューラルエンジン314において処理されているかどうかを判定する(824)。判定がいいえの場合、ワークユニットの選択された部分はシフタ410によってシフトされ(828)、乗算-累積演算を再度実行する(820)。
【0068】
ワークユニット全体が処理されたと判定された(824)場合、次に進み、タイル内の全てのワークユニットが処理されたかどうかを判定する(832)。判定がいいえの場合、プロセスは、データバッファ318に、次のワークユニットを1つ以上のニューラルエンジン314に送信させる(808)ことにより、次のワークユニットに進み(836)、後続のプロセスを繰り返す。
【0069】
タイル内の全てのワークユニットがニューラルエンジン314によって処理されたと判定された(832)場合、プロセスは進み、入力データの全てのタイルが処理されたか否かを判定する(840)。判定がいいえの場合、プロセスは、ラスタライザ720に、システムメモリ230から次のタイルを受信するようにバッファDMA320に命令(804)させることにより、次のタイルに進み(844)、後続のプロセスを繰り返す。
【0070】
入力データの全てのタイルが処理されたと判定された(840)場合、現在の入力データについてのプロセスは終了する。次いで、次の入力データを処理するためにプロセスが繰り返されてもよく、又は次のタスクに進んでもよい。
【0071】
図8を参照して上述したようなプロセスの実施形態は、単なる例示に過ぎない。
図5を参照して上述したように、更なるループを実施してもよい。その上、プロセスのシーケンスは修正されてもよく、又は省略されてもよい。
例示的なニューラルタスクマネージャアーキテクチャ
【0072】
ニューラルネットワークは、ニューラルプロセッサ回路218によって実行される一連のタスクとしてインスタンス化又は実装されるネットワーク層又はサブ層を含み得る。
図9は、一実施形態に係る、タスクのリスト904によって表されるニューラルネットワーク900を示す概略ブロック図である。ニューラルネットワーク900は、畳み込み層C1、C2、C3(サブ層C3
00、C3
10、C3
11、C3
20、及びC3
21を含む)、C5、及びC6、並びにプーリング層P2及びP4を含むネットワーク層(又はサブ層)を含む。ニューラルネットワーク900は、ニューラルプロセッサ回路218によってインスタンス化され得るニューラルネットワークアーキテクチャの一例である。すなわち、ニューラルネットワーク900が変換されてタスクリスト904になり、ニューラルプロセッサ回路218によって実行可能となった場合である。異なる種類のネットワーク層又は異なる順序のネットワーク層を有する他の種類のニューラルネットワークアーキテクチャもまた、ニューラルプロセッサ回路218によってインスタンス化されてもよい。
【0073】
ニューラルネットワーク900は、例えばCPU208によって、タスクリスト904に変換される。タスクリスト904は、タスクC1、タスクC2+P2、タスクC300+P4、タスクC310、タスクC311+P4、タスクC320、タスクC321+P4、タスクC5a、タスクC5b、及びタスクC6を含むタスクのシーケンスを定義する線形リンクリストを含む。各タスクは、タスクを実行するための、ニューラルプロセッサ回路218の構成を定義するタスク記述子と関連付けられる。各タスクは、ニューラルネットワーク900の単一ネットワーク層、ニューラルネットワーク900のネットワーク層の一部、又はニューラルネットワーク900の複数のネットワーク層に対応してもよい。例えば、タスクC1は単一のネットワーク層C1に対応し、タスクC2+P2は複数のネットワーク層C2及びP2に対応し、タスクC5a及びC5bはそれぞれ、ネットワーク層C5の一部に対応する。ニューラルプロセッサ回路218は、ニューラルタスクマネージャ310の制御下でタスクリスト904のタスクを実行することによって、ニューラルネットワーク900をインスタンス化する。
【0074】
図10は、一実施形態に係る、ニューラルタスクマネージャ310を示すブロック図である。ニューラルタスクマネージャ310は、ニューラルプロセッサ回路218による、1つ以上のニューラルネットワーク900に対するタスクの実行を管理する。ニューラルタスクマネージャ310は、他の構成要素の中でもとりわけ、タスクアービタ1002、タスクキュー1004A~1004N(以下、総称して「タスクキュー1004」と称され、個別に「タスクキュー1004」とも称される)、タスクマネージャダイレクトメモリアクセス(DMA)1006、フェッチキュー1008、及び構成キュー1010を含んでもよい。ニューラルタスクマネージャ310は、
図10に示されていない他の構成要素を含んでもよい。
【0075】
タスクアービタ1002は、ニューラルプロセッサ回路218によって実行される、タスクキュー1004からタスクを選択する回路であるか、又は回路とファームウェアとの組み合わせである。タスクアービタ1002は、タスクキュー1004からタスクをデキューし、タスクを構成キュー1010内に置く。タスクが構成キュー内にある間に、そのタスクは実行がコミットされ、ニューラルプロセッサ回路は、タスクがニューラルプロセッサ回路218の他の構成要素によって実行される前に、入力データ及びカーネルデータに対してプリフェッチを実行する。例えば、タスクアービタ1002は、複数のタスクキュー1004の間で固定優先度のアービトレーションを実行し、タスクマネージャDMA1006によるシステムメモリ230からのタスク記述子1012の取得のために、最も高い優先度を有するタスクを、タスクキュー1004から選択してもよい。
【0076】
ニューラルタスクマネージャ310は、1つ以上のタスクキュー1004を含んでもよい。各タスクキュー1004は、CPU208及びタスクアービタ1002に結合されている。各タスクキュー1004は、ニューラルプロセッサ回路218によって実行された場合、ニューラルネットワーク900をインスタンス化するタスクのタスクリスト904への参照をCPU208から受信する。各タスクキュー1004に記憶された参照は、システムメモリ230内のタスク記述子1012のタスクリスト904を指す1組のポインタ及びカウンタを含んでもよい。各タスクキュー1004は、タスクキュー1004の相対優先度を定義する優先度パラメータに更に関連付けられてもよい。タスクのタスク記述子1012は、タスクを実行するための、ニューラルプロセッサ回路218の構成を指定する。
【0077】
タスクマネージャDMA1006は、タスクアービタ1002、システムメモリ230、及びフェッチキュー1008に結合されている。タスクマネージャDMA1006は、フェッチキュー1008に記憶するためのソース(例えば、システムメモリ230)からタスクのタスク記述子1012を受信する読み出し回路を含む。例えば、タスクアービタ1002は、タスクキュー1004の優先度に応じてタスクキュー1004を選択し、選択されたタスクキュー1004によって参照されるタスクリスト904を使用して、タスクマネージャDMA1006を制御して、タスクのタスク記述子1012を選択する。
【0078】
フェッチキュー1008は、実行するコミットが保留中であるタスクのタスク記述子1012を記憶する単一のエントリキューである。フェッチキュー1008は、タスクマネージャDMA1006に結合されて、タスク記述子1012をシステムメモリ230から受信し、タスク記述子1012を構成キュー1010に提供するか、又はタスク記述子1012から抽出された構成データ1014を構成キュー1010に提供する。
【0079】
構成キュー1010は、実行がコミットされている複数のタスクの構成データ1014を保持する。タスクが構成キュー1010内にある場合、カーネルDMA324は、システムメモリ230からカーネルデータをフェッチして、ニューラルエンジン314のカーネル抽出回路432に記憶させてもよく、バッファDMA320は、システムメモリ230から入力データをフェッチしてデータバッファ318に記憶させてもよい。タスクを実行するために、カーネル抽出回路432は、プリフェッチされたカーネルデータをニューラルエンジン314のMAC404に提供し、データバッファ318は、プリフェッチされた入力データをニューラルエンジン314のMAC404に提供する。いくつかの実施形態では、構成キュー1010は、コミットされたタスク記述子1012から抽出された構成データ1014を保持する複数のキューを含んでもよい。
図13に関連してより詳細に論じたように、構成キュー1010は、ニューラルプロセッサ回路218の他の構成要素に更に結合されて、構成データ1014に応じてニューラルプロセッサ回路218を構成する。
【0080】
図11は、一実施形態に係る、タスクキュー1004を使用したタスク記述子1012の取得を示す図である。タスクキュー1004は、システムメモリ230に記憶されたタスク記述子1012A~1012Nへの参照、例えば1組のポインタを含む。その目的のために、タスクキュー1004は、ヘッドパラメータ1102、ネットワーク識別子(network identifier、ID)1104、ベースアドレスインデックス1106、テールパラメータ1108、カウントパラメータ1110、及び優先度パラメータ1112を記憶するメモリを含んでもよい。ヘッドパラメータ1102は、タスクキュー1004のヘッドにある、タスク記述子1012Aを記憶するシステムメモリ230の場所へのポインタである。ネットワークID1104は、タスクキュー1004のヘッドにあるタスク記述子1012のニューラルネットワーク900を識別し、ベースアドレスインデックス1106は、タスクキュー1004のヘッドにあるタスク記述子1012AのネットワークID1104でタグ付けされたベースアドレステーブル1114へのインデックスである。カウントパラメータ1110は、タスクキュー1004内のタスク記述子1012の数を定義する。優先度パラメータ1112は、タスクキュー1004の優先度を定義し、これをタスクアービタ1002が使用して複数のタスクキュー1004の間から選択する。
【0081】
特定のタスクキュー1004が(例えば、優先度パラメータ1112に応じて)選択された場合、タスクアービタ1002は、ヘッドパラメータ1102、ネットワークID1104、ベースアドレスインデックス1106、及びベースアドレステーブル1114を参照して、システムメモリ230からタスク記述子1012を取得し、タスク記述子1012をフェッチキュー1008内に配置して、タスク実行のコミットメントを開始する。各構成期間において、タスクアービタ1002は、次のタスク記述子1012Bを取得することなどによって、タスクキュー1004のタスクリスト904によって定義されたタスクの順序に応じて、タスク記述子1012をフェッチキュー1008内に配置し続けてもよい。
【0082】
図12は、一実施形態に係る、タスク記述子1012を示す図である。タスクアービタ1002は、システムメモリ230からのタスク記述子1012をフェッチキュー1008内に配置し、タスク記述子1012は次いで、構成キュー1010に転送される。構成キュー1010内で優先度が最も高い(例えば、最初に入力される)タスク記述子1012を使用して、構成期間中に、実行のためにニューラルプロセッサ回路218を構成する。タスク記述子1012は、タスク記述子ヘッダ1202と、アドレスデータ1204A~1204N(以下、「アドレスデータ1204」と称する)とを含む構成データ1014を含む。タスク記述子ヘッダ1202は、タスク選択及びタスク切替えに関する動作を含む、ニューラルタスクマネージャ310の様々な動作を構成する構成データ1014を含む。例えば、タスク記述子ヘッダ1202は、タスクアービタ1002によってパースされて、ニューラルタスクマネージャ310及びニューラルプロセッシング回路218の他の構成要素をプログラムする構成データ1014を抽出してもよい。タスク記述子ヘッダ1202は、タスクを識別するタスク識別子(ID)1206と、タスクによってインスタンス化されたニューラルネットワーク900を識別するニューラルネットワーク識別子(ID)1208と、タスクの実行後に、ニューラルタスクマネージャ310がタスク切替えを起動すべきか否かを定義するタスク切替えパラメータ1210(例えば、異なるタスクキュー1004のタスクを実行するために)と、タスクに対する入力データがシステムメモリ230又はデータバッファ318から取得されるべきか否かを定義する入力表面パラメータ1212と、タスクの出力データがシステムメモリ230又はデータバッファ318に記憶されるべきか否かを定義する出力表面パラメータ1214と、ニューラルプロセッサ回路218のプログラミングを促進するための様々な(例えば、ベースアドレス)ポインタ1216と、イベント、例外、又はデバッグログを制御する1つ以上のデバッグ/例外パラメータ1218と、を含んでもよい。
【0083】
(総称して又は個別に「アドレスデータ1204」と称される)アドレスデータ1204A~1204Nの各インスタンスは、ニューラルプロセッサ回路218の構成要素をプログラムするために使用されるアドレス及びデータペイロードペアを定義する。データペイロードは、タスクを実行するために使用される入力データ及びカーネルデータを含んでもよい。例えば、アドレスデータ1204の各インスタンスは、データペイロードを定義するレジスタデータと、レジスタデータを受信するための、ニューラルプロセッシング回路218の宛先メモリ場所を定義するレジスタアドレスと、レジスタデータで書き込まれる連続したメモリ場所(例えば、レジスタ)を定義するレジスタカウントとを含む。いくつかの実施形態では、レジスタアドレスは、ヘッダ1202に記憶されたベースアドレスと組み合わされて、各メモリ場所のフルアドレスを定義する。タスク記述子1116がコンパイル時に生成される場合、実際のランタイムアドレスは既知でなくてもよい。ベースアドレステーブル1114は、全てのタスク記述子が、動的に割り当てられたアドレスで複製又は更新されることを回避するために使用される。
【0084】
図13は、一実施形態に係る、フェッチキュー1008及び構成キュー1010を示すブロック図である。構成キュー1010はフェッチキュー1008に結合され、フェッチキュー1008はタスクマネージャDMA1006を介してシステムメモリ230に結合される。構成キュー1010は、1つ以上のニューラルエンジン314のラスタライザ714、データバッファ318のラスタライザ718、バッファDMA320のラスタライザ720、及びカーネルDMA322のラスタライザ722に更に結合される。フェッチキュー1008は、保留中であって実行がコミットされていないタスクに対するタスク記述子1012(例えば、タスク記述子ヘッダ1202、及びアドレスデータ1204A~1204Nを含む)を記憶する。フェッチキュー1008は、次のタスク記述子1012をシステムメモリ230から構成キュー1010の中に読み込むレイテンシを低減させる。フェッチキュー1008は、タスクアービタ1002によって決定された、優先度が最も高いタスク記述子1012を記憶する。タスクアービタ1002は、より高い優先度のタスク記述子1012が(例えば、より高い優先度のタスクキュー1004から)エンキューされている場合に、フェッチキュー1008に記憶されているタスク記述子1012を置換してもよい。フェッチキュー1008内のタスク記述子1012は、入力データ又はカーネルのプリフェッチを開始せず、タスクキュー優先度、ポインタ、又はカウンタに影響を与えない。よって、フェッチキュー1008内のタスク記述子1012は、より高い優先度のタスク記述子1012をフェッチキュー1008に書き込むことによって、より高い優先度のタスク記述子1012によって容易に置換されてもよい。構成キュー1010に記憶されたタスク記述子1012がニューラルプロセッサ回路218によって実行された場合、フェッチキュー1008に記憶されたタスク記述子1012は、構成キュー1010に転送され、後続のタスクの別のタスク記述子1012がフェッチキュー1008に記憶されてもよい。
【0085】
構成キュー1010は、ニューラルプロセッサ回路218による実行がコミットされたタスクのタスク記述子1012を記憶する。いくつかの実施形態では、構成キュー1010は複数の別個のキュー1310を含み、キュー1310の各々が、タスク記述子1012から抽出された構成データ1014(構成データ1014A~1014Eを含む)の一部を記憶する。更に、キュー1310は各々がニューラルプロセッサ回路218の対応する構成要素に結合されて、その構成要素を構成データ1014でプログラムする。構成キュー1010の動作を通して、ニューラルタスクマネージャ310は、ラスタライザ714、718、720、722をプログラムして、
図7及び
図8で上述した機能を実行させる。例えば、キュー1310Aは、ニューラルエンジン314のラスタライザ714に結合されて、入力バッファ回路402内のシフタ410の動作を制御して、入力データの正しい部分408をMAC404に送達し、最終出力データ328をデータバッファ318に送信する構成データ1014Aを提供する。キュー1310Bは、データバッファ318のラスタライザ718に結合されて、ニューラルエンジン314による処理のために、データバッファ318による入力データ(例えば、ワークユニット)のブロードキャストを制御する構成データ1014Bを提供する。キュー1310Cは、バッファDMA320のラスタライザ720に結合された読取りキューであり、バッファDMA320を制御して、システムメモリ230から入力データ(例えば、タイル)を取得し、入力データをデータバッファ318に記憶する構成データ1014Cを提供する。キュー1310Dは、バッファDMA320のラスタライザ720に結合された書き込みキューであり、バッファDMA320を制御して、出力データをシステムメモリ230に記憶する構成データ1014Dを提供する。キュー1310Eは、カーネルDMA322のラスタライザ722に結合されて、どのカーネルが受信されてニューラルエンジン314に分配されるかを制御する構成データ1014Eを提供する。いくつかの実施形態では、構成キュー1010に記憶されたタスク記述子1012又は構成データ1014を置換することはできず、ファーストイン、ファーストアウト(FIFO)の順序で実行されることになる。
ニューラルタスクマネージャアーキテクチャにおける例示的プロセス
【0086】
図14は、一実施形態に係る、ニューラルプロセッサ回路218においてタスクを管理する方法を示すフローチャートである。本方法は、異なる及び/若しくは追加のステップを含んでもよく、又はステップは異なる順序であってもよい。
【0087】
CPU208は、ニューラルプロセッサ回路218によって実行された場合、ニューラルネットワーク900をインスタンス化するタスクのタスク記述子1012のタスクリスト904を生成する(1402)。例えば、CPU208は、機械学習動作のための入力データを、画像センサ202、システムメモリ230、永続的記憶装置228、ネットワークインターフェース210、又は何らかの他の構成要素から受信してもよい。機械学習動作は、推論動作又は訓練動作を含んでもよい。ニューラルネットワーク900は、カーネルデータ、及びネットワーク層を含むニューラルネットワークアーキテクチャを含んでもよい。入力データはニューラルネットワーク900に適用されて、機械学習動作が実行される。ニューラルネットワーク900のカーネルデータ及びネットワーク層は、機械学習訓練プロセスにて計算されてもよい。CPU208は、コンパイル動作(オフライン又はオンザフライ)を実行して、ニューラルネットワーク記述900を、本明細書ではタスクリスト904と称される、タスク記述子1012のリンクリストに変える。各タスクはタスク記述子1012によって定義され、ニューラルプロセッサ回路218によって実行された場合、単一のネットワーク層、複数のネットワーク層、又はネットワーク層の一部をインスタンス化する。タスクの各タスク記述子1012は、タスク記述子ヘッダ1202などの構成データ1014と、ニューラルプロセッサ回路218アドレス及びデータペイロードペアを定義するアドレスデータ1204と、を含む。データペイロードは、ニューラルネットワーク900のカーネルデータと、入力データとを含んでもよい。構成データ1014は、タスクを実行するためにラスタライザ714、718、720、及び722の動作を構成する命令を更に含む。
【0088】
CPU208は、タスク記述子1012のタスクリスト904をシステムメモリ230に記憶する(1404)。いくつかの実施形態では、CPU208、又は電子デバイス100の外部の別のCPUが、タスク記述子1012を生成し、そのタスク記述子1012を永続的記憶装置228又は何らかの他の不揮発性メモリに記憶させる。タスク記述子1012は、ニューラルプロセッサ回路218による使用のために、システムメモリ230内のカーネルデータ及び入力データと共にロードされる。CPU208は、バス232及びメモリコントローラ222を介してシステムメモリ230に結合されてもよい。
【0089】
タスクリスト904は、システムメモリ230内のタスク記述子1012の場所を参照する1組のポインタを含んでもよい。更に、CPU208は、メモリアドレス又はネットワークIDなどのタスク記述子1102のパラメータを更新してもよい。例えば、タスクリスト904は、複数のタスク記述子1012が記憶されているシステムメモリ230の開始レジスタアドレス及び終了レジスタアドレスをそれぞれ定義する、ヘッドパラメータ1102及びテールパラメータ1108を含んでもよい。いくつかの実施形態では、タスクリスト904内のレジスタアドレスへの参照は部分アドレスであってもよく、システムメモリ230へのフル参照アドレスを定義するためにベースアドレステーブル1114が使用される。いくつかの実施形態では、CPU208は、必要に応じて絶対アドレスをパッチしてもよい。CPU208は、そのベースアドレスレジスタを設定することによって、ニューラルプロセッサ回路218を更に構成してもよい。
【0090】
ニューラルタスクマネージャ310のタスクアービタ1002は、ニューラルプロセッサ回路218によって実行されるタスクリスト904をエンキューする(1406)。例えば、ニューラルタスクマネージャ310は、複数のタスクキュー1004A~1004Nを含む。タスクキュー1004は各々が、タスクリスト904への参照を記憶してもよい。更に、タスクキュー1004は、タスクキュー1004によって参照されるタスクリスト904の優先度パラメータ1112に応じて実行されるように優先順位付けされる。
【0091】
いくつかの実施形態では、CPU208は、タスクを実行するために、ニューラルプロセッサ回路218の一般的な構成を実行する。ニューラルプロセッサ回路218が既に動作していない場合、CPU208は、ニューラルプロセッサ回路218を更に開始してもよい。
【0092】
タスクアービタ1002は、実行のための最も高い優先度を有するタスクキューを選択する(1408)。例えば、タスクアービタ1002は、各プログラミング期間中に、タスクキュー1004の優先度パラメータの比較又はタスクキュー1004のタスクリスト904の比較に基づいてタスクキュー1004を選択し、タスクリスト904からのタスクを、優先度が最も高いタスクキュー1004から実行する。
【0093】
ニューラルプロセッサ回路218は、選択されたタスクキューからタスクを実行する(1410)。例えば、ニューラルプロセッサ回路218は、タスクを実行するために
図8の方法を実行する。ニューラルタスクマネージャ310の構成キュー1010は、
図7に示すように、ニューラルプロセッサ回路218のラスタライザ714、718、720、722に構成データ1014(又はタスク情報710)を提供して、ニューラルプロセッサ回路218をプログラムして、タスクを実行させてもよい。更に、タスクの実行は、タスクが構成キュー1010内にある間に、プリフェッチされたカーネルデータ及び入力データを処理することを含んでもよい。各タスクの実行は、
図5及び
図6に示すように、入力データを取り扱うための複数の処理ループを含んでもよい。タスクアービタ1002は、タスクの実行後に、構成キュー1010からのタスクをデキューしてもよい。
【0094】
いくつかの実施形態では、タスクを実行するために、タスクアービタ1002は、タスクマネージャDMA1006を制御して、タスクリスト904のタスクのタスク記述子1012を取得し、タスク記述子1012をフェッチキュー1008に記憶する。以前にコミットされたタスクの実行後、タスクアービタ1002は、タスクのタスク記述子又は構成データを構成キュー1010から除去することによって、実行されたタスクをデキューしてもよい。次に、現在のタスクのタスク記述子1012又は抽出された構成データ1014は次いで、フェッチキュー1008から構成キュー1010に配置される。タスクが構成キュー1010内にある場合、ニューラルプロセッサ回路218は、システムメモリ230からカーネル抽出回路432へのカーネルデータに対する、カーネルDMA324によるプリフェッチ動作と、システムメモリ230からデータバッファ318への入力データに対する、バッファDMA320によるプリフェッチ動作とを開始してもよい。
【0095】
異なるタスクキューがより高い優先度を有する場合、より高い優先度を有するタスクキューへのタスク切替えが、可能な場合に実行されてもよい。(例えば、別の機械学習動作への)タスク切替えを実行するために、タスクアービタ1002は、フェッチキュー1008内のタスクを、異なるタスクキュー1004において参照されている別のタスク記述子で置換する。タスクアービタ1002は、置換されたタスクをフェッチキュー1008に記憶させることによって、タスク切替えの完了後に、タスクリスト904によって定義された中断された機械学習動作を再開してもよい。
【0096】
いくつかの実施形態では、CPU208は、タスクリスト904の優先度パラメータ1110を判定して(1408)、タスクキューを選択する。優先度パラメータ1110は、機械学習動作のそのタスクの優先度を、ニューラルプロセッサ回路218によって実行される他の機械学習動作の他のタスクと比較して定義する。CPU208は、複数の機械学習動作の実行を促進させてもよい。機械学習動作は、異なる入力データ又は異なるニューラルネットワークアーキテクチャ、及びカーネルデータを使用することなどによって、異なる場合がある。CPU208は、タスクリスト904の優先度パラメータを、プログラム的に又はユーザ入力に基づいて判定することができる。最も高い優先度を有するタスクキュー1004によって参照されるタスク記述子1012が、実行のために選択されてもよい。タスクキューの優先度は、CPU208によって判定されるか、又は以前に実行されたタスク記述子からの情報によって動的に判定される。
【0097】
タスクアービタ1002は、タスクリスト904の全てのタスクが実行されたか否かを判定する(1412)。タスクリスト904のタスクが実行されていない場合、プロセスはステップ1410に戻り、そこで、タスクアービタ1002は、タスクリスト904の実行されていないタスクを実行する。
【0098】
タスクリスト904の各タスクが実行されている場合、タスクアービタ1002は、タスクリスト904をタスクキュー1004から除去する(1414)。別の実施例では、タスクのタスク記述子1012への参照は、タスクの実行後にタスクキュー1004から除去されてもよい。プロセスは終了してもよい。別の実施例では、このプロセスは1402に戻ってもよく、そこでは、CPU208が、他の機械学習動作のためのタスクのタスク記述子を生成し続けてもよい。その意味では、プロセスは、ニューラルプロセッサ回路218による機械学習動作の実行のために、指定されたタスク優先度に応じてタスクをタスクキューに配置するように繰り返されてもよい。
【0099】
特定の実施形態及び用途が例示及び記載されてきたが、本発明は、本明細書に開示される厳密な構造及び構成要素に限定されず、本開示の趣旨及び範囲から逸脱することなく、当業者には明らかであろう様々な修正、変更、及び変形が、本明細書に開示される方法及び装置の構成、動作、並びに詳細になされてもよいことを理解されたい。
【手続補正書】
【提出日】2023-08-16
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
ニューラルエンジン回路と、
前記ニューラルエンジン回路に結合されたニューラルタスクマネージャ回路と、
を備えるニューラルプロセッサ回路であって、前記ニューラルタスクマネージャは、
ニューラルネットワークをインスタンス化するタスクを含むタスク記述子のタスクリストへの参照を記憶するように構成されたタスクキュー回路であって、前記タスクリストのタスク記述子が、タスク記述子ヘッダと、ニューラルプロセッサ回路アドレスを定義するアドレスデータとを含むタスクの構成データを含む、タスクキュー回路と、
前記タスクキュー回路に結合されたタスクアービタ回路と、
を含み、前記タスクアービタ回路は、
前記タスクキュー回路に記憶された前記タスクリストへの前記参照に基づいて、前記ニューラルプロセッサ回路の外部にあるメモリの場所に記憶された前記タスク記述子を取得し、
前記タスクリストから前記タスクを実行のために選択し、
保留中であって実行がコミットされていないタスクに対するタスク記述子を記憶するように構成されたフェッチキューに前記タスクの前記タスク記述子を記憶し、
前記タスク記述子を、実行がコミットされたデキューされたタスクになるように、前記フェッチキューから、前記デキューされたタスクを記憶するように構成された構成キューに転送し、
前記デキューされたタスクの前記構成データの一部を、該構成データの一部に基づいて前記デキューされたタスクを実行するように構成された前記ニューラルエンジン回路に提供する、
ように構成される、
ニューラルプロセッサ回路。
【請求項2】
前記デキューされたタスクは、実行された場合、前記ニューラルネットワークの単一のネットワーク層、前記ニューラルネットワークの複数のネットワーク層、又は前記ニューラルネットワークのネットワーク層の一部をインスタンス化する、請求項1に記載のニューラルプロセッサ回路。
【請求項3】
前記タスクアービタ回路は、前記タスク記述子に含まれる前記構成データを前記ニューラルタスクマネージャ回路の前記構成キュー内に記憶するように更に構成され、前記構成キューは、前記ニューラルエンジン回路に結合され、前記構成データの前記一部を前記ニューラルエンジン回路に提供するように構成されており、
前記ニューラルプロセッサ回路は、
前記構成データが前記構成キューに記憶されている場合に、前記ニューラルプロセッサ回路の外部にある前記メモリから前記デキューされたタスクのカーネルデータを取得するように構成されたカーネルダイレクトメモリアクセス(DMA)と、
前記構成データが前記構成キューに記憶されている場合に、前記ニューラルプロセッサ回路の外部にある前記メモリから前記デキューされたタスクの入力データを取得するように構成されたバッファダイレクトメモリアクセス(DMA)と、
を更に含む、請求項1に記載のニューラルプロセッサ回路。
【請求項4】
前記ニューラルタスクマネージャ回路は、
前記構成キューに結合された前記フェッチキューと、
前記フェッチキュー及び前記タスクアービタ回路に結合されたタスクマネージャダイレクトメモリアクセス(DMA)と、
を更に含み、
前記タスクアービタ回路は、前記タスクマネージャDMAを介して、前記ニューラルプロセッサ回路の外部にある前記メモリの前記場所から前記デキューされたタスクの前記構成データを取得し、前記構成データを前記フェッチキューに記憶するように更に構成され、実行されたタスクの第2の構成データが前記構成キューから除去された場合に、前記フェッチキューは、前記構成データを前記構成キューに提供する、
請求項3に記載のニューラルプロセッサ回路。
【請求項5】
前記タスクキュー回路は第1のタスクキュー回路であり、前記ニューラルタスクマネージャ回路は第2のタスクキュー回路を更に含み、前記第1のタスクキュー回路は第1の優先度を有し、前記第2のタスクキュー回路は第2の優先度を有し、
前記タスクアービタ回路は、前記第1の優先度と前記第2の優先度との比較に基づいて、(i)前記デキューされたタスクの前記構成データ、又は(ii)前記フェッチキュー内の別のタスクの別の構成データ、のうちの1つを記憶するように構成されている、
請求項4に記載のニューラルプロセッサ回路。
【請求項6】
前記ニューラルプロセッサ回路の外部にある前記メモリと前記ニューラルエンジン回路とに結合されたデータバッファを更に備え、前記タスクアービタ回路は、前記構成データの他の部分を前記データバッファに提供するように更に構成され、前記構成データの前記他の部分が前記データバッファをプログラムして、前記デキューされたタスクの入力データのワークユニットを前記ニューラルエンジン回路にブロードキャストさせる、請求項1に記載のニューラルプロセッサ回路。
【請求項7】
前記データバッファと前記ニューラルプロセッサ回路の外部にある前記メモリとに結合されたバッファダイレクトメモリアクセス(DMA)を更に備え、
前記タスクアービタ回路は、前記構成データの第3の部分を前記バッファDMAに提供するように更に構成され、前記構成データの前記第3の部分が前記バッファDMAをプログラムして、前記ニューラルプロセッサ回路の外部にある前記メモリから前記デキューされたタスクの前記入力データのタイルを取得し、前記タイルを前記データバッファに記憶させ、
前記タイルは、複数のワークユニットを含む、請求項6に記載のニューラルプロセッサ回路。
【請求項8】
前記ニューラルエンジン回路は、
前記ニューラルタスクマネージャに結合された入力バッファ回路と、
前記入力バッファ回路に結合された乗算-加算(MAD)回路と、
を含み、
前記構成データの前記一部が前記入力バッファ回路をプログラムして、前記入力バッファ回路に記憶された前記デキューされたタスクの入力データの一部を前記MAD回路に提供させる、
請求項1に記載のニューラルプロセッサ回路。
【請求項9】
前記ニューラルプロセッサ回路の外部にある前記メモリと前記ニューラルエンジン回路とに結合されたデータバッファを更に備え、前記ニューラルエンジンは出力回路を更に含み、前記構成データの前記一部が前記出力回路をプログラムして、前記MAD回路から前記データバッファに出力データを提供させる、請求項8に記載のニューラルプロセッサ回路。
【請求項10】
前記ニューラルプロセッサ回路の外部にある前記メモリと前記ニューラルエンジン回路とに結合されたカーネルダイレクトメモリアクセス(DMA)を更に備え、
前記タスクアービタ回路は、前記構成データの別の部分を前記カーネルDMAに提供するように更に構成され、前記構成データの前記他の部分が前記カーネルDMAをプログラムして、前記ニューラルプロセッサ回路の外部にある前記メモリからカーネルデータを取得させ、前記カーネルデータを前記ニューラルエンジン回路に提供して前記デキューされたタスクを実行させる、請求項1に記載のニューラルプロセッサ回路。
【請求項11】
ニューラルプロセッサ回路においてタスクを管理する方法であって、
複数のタスクキュー回路内の複数のタスクを参照することと、
前記ニューラルプロセッサ回路のタスクキュー回路に、ニューラルネットワークをインスタンス化するタスクを含むタスク記述子のタスクリストへの参照を記憶することであって、前記タスクリストのタスク記述子が、タスク記述子ヘッダと、ニューラルプロセッサ回路アドレスを定義するアドレスデータとを含むタスクの構成データを含む、ことと、
前記複数のタスクキュー回路に結合されたタスクアービタ回路において、前記タスクキュー回路に記憶された前記タスクリストへの前記参照に基づいて、前記ニューラルプロセッサ回路の外部にあるメモリの場所に記憶された前記タスク記述子を取得することと、
前記タスクリストから前記タスクを実行のために選択することと、
保留中であって実行がコミットされていないタスクに対するタスク記述子を記憶するように構成されたフェッチキューに前記タスクの前記タスク記述子を記憶することと、
前記タスク記述子を、実行がコミットされたデキューされたタスクになるように、前記フェッチキューから、前記デキューされたタスクを記憶するように構成された構成キューに転送することと、
前記デキューされたタスクの前記構成データの一部を、該構成データの一部に基づいて前記デキューされたタスクを実行するように構成されたニューラルエンジン回路に提供することと、
を含む方法。
【請求項12】
前記デキューされたタスクは、実行された場合、前記ニューラルネットワークの単一のネットワーク層、前記ニューラルネットワークの複数のネットワーク層、又は前記ニューラルネットワークのネットワーク層の一部をインスタンス化する、請求項11に記載の方法。
【請求項13】
前記構成データを前記ニューラルプロセッサ回路の前記構成キューに記憶することと、
前記構成データの前記一部を前記構成キューから前記ニューラルエンジン回路に提供することと、
前記構成データが前記構成キューに記憶されている場合に、外部メモリから前記デキューされたタスクのカーネルデータを取得することと、
前記構成データが前記構成キューに記憶されている場合に、前記外部メモリから前記デキューされたタスクの入力データを取得することと、
を更に含む請求項11に記載の方法。
【請求項14】
デキューされたタスクの前記構成データを、前記ニューラルプロセッサ回路のタスクマネージャダイレクトメモリアクセス(DMA)を介して、前記外部メモリの前記場所から取得することと、
前記構成データを前記ニューラルプロセッサ回路の前記フェッチキュー内に記憶することと、
実行されたタスクの別の構成データが前記構成キューから除去された場合に、前記フェッチキューから前記構成キューに前記構成データを提供することと、
を更に含む請求項13に記載の方法。
【請求項15】
第1のタスクキュー回路に対応する第1の優先度及び第2のタスクキュー回路に対応する第2の優先度を記憶することと、
前記第1の優先度と前記第2の優先度との比較に基づいて、(i)前記デキューされたタスクの前記構成データ、又は(ii)前記フェッチキュー内の別のタスクの他の構成データ、のうちの1つを記憶することと、
を更に含む請求項14に記載の方法。
【請求項16】
前記構成の別の部分を前記ニューラルプロセッサ回路のデータバッファに提供することを更に含み、前記構成データの前記他の部分が前記データバッファをプログラムして、前記デキューされたタスクの入力データのワークユニットを前記ニューラルエンジン回路にブロードキャストさせる、請求項11に記載の方法。
【請求項17】
前記構成データの第3の部分を、前記データバッファ及び外部メモリに結合された前記ニューラルプロセッサ回路のバッファダイレクトメモリアクセス(DMA)に提供することを更に含み、前記構成データの前記第3の部分が前記バッファDMAをプログラムして、前記外部メモリから前記デキューされたタスクの前記入力データのタイルを取得させ、前記タイルを前記データバッファに記憶させ、前記タイルは複数のワークユニットを含む、請求項16に記載の方法。
【請求項18】
前記構成データの前記一部が、前記ニューラルエンジン回路の入力バッファ回路をプログラムして、前記入力バッファ回路に記憶された前記デキューされたタスクの入力データの一部を、前記ニューラルエンジン回路の乗算-加算(MAD)回路に提供させ、
前記構成データの前記一部が、前記ニューラルエンジン回路の出力回路をプログラムして、出力データを前記MAD回路から前記ニューラルプロセッサ回路のデータバッファに提供させる、
請求項11に記載の方法。
【請求項19】
前記構成データの別の部分を、前記ニューラルプロセッサ回路の外部にある前記メモリと前記ニューラルエンジン回路とに結合されたカーネルダイレクトメモリアクセス(DMA)に提供することを更に含み、前記構成データの前記他の部分が前記カーネルDMAをプログラムして、前記ニューラルプロセッサ回路の外部にある前記メモリからカーネルデータを取得させ、前記カーネルデータを前記ニューラルエンジン回路に提供して前記タスクを実行させる、
請求項11に記載の方法。
【請求項20】
ニューラルプロセッサ回路を備える集積回路(IC)システムであって、前記ニューラルプロセッサ回路は、
ニューラルエンジン回路と、
前記ニューラルエンジン回路に結合されたニューラルタスクマネージャ回路と、
を備え、前記ニューラルタスクマネージャ回路は、
複数のタスクを参照する複数のタスクキュー回路であって、あるタスクキュー回路が、ニューラルネットワークをインスタンス化するタスクを含むタスク記述子のタスクリストへの参照を記憶するように構成され、前記タスクリストのタスク記述子が、タスク記述子ヘッダと、ニューラルプロセッサ回路アドレスを定義するアドレスデータとを含むタスクの構成データを含む、複数のタスクキュー回路と、
前記複数のタスクキュー回路に結合されたタスクアービタ回路と、
を含み、前記タスクアービタ回路は、
前記タスクキュー回路に記憶された前記タスクリストへの前記参照に基づいて、前記ニューラルプロセッサ回路の外部にあるメモリの場所に記憶された前記タスク記述子を取得し、
前記タスクリストから前記タスクを実行のために選択し、
保留中であって実行がコミットされていないタスクに対するタスク記述子を記憶するように構成されたフェッチキューに前記タスクの前記タスク記述子を記憶し、
前記タスク記述子を、実行がコミットされたデキューされたタスクになるように、前記フェッチキューから、前記デキューされたタスクを記憶するように構成された構成キューに転送し、
前記デキューされたタスクの前記構成データの一部を、該構成データの一部に基づいて前記デキューされたタスクを実行するように構成された前記ニューラルエンジン回路に提供する、
ように構成される、
集積回路(IC)システム。
【外国語明細書】