(57)【要約】  実施形態は、ニューラルプロセッサ回路によって実行された場合に、ニューラルネットワークをインスタンス化するタスクを管理することに関する。ニューラルプロセッサ回路は、ニューラルエンジン回路と、ニューラルタスクマネージャ回路とを含む。ニューラルタスクマネージャ回路は、複数のタスクキューと、タスクアービタ回路とを含む。各タスクキューは、機械学習動作用のタスクのタスクリストへの参照を記憶する。各タスクキューは、優先度パラメータに関連付けられてもよい。タスクキューの優先度に基づいて、タスクアービタ回路は、ニューラルプロセッサ回路の外部にあるメモリからタスクのための構成データを取得し、ニューラルエンジン回路を含むニューラルプロセッサ回路の構成要素に、構成データを提供する。構成データは、ニューラルプロセッサ回路をプログラムして、タスクを実行させる。例えば、構成データは、タスクを実行するためにニューラルエンジン回路によって処理される入力データ及びカーネルデータを含み得る。
2021520572.tif 000002
【特許請求の範囲】
【請求項１】
ニューラルエンジン回路と、
ニューラルエンジンに結合されたニューラルタスクマネージャ回路と、を備えるニューラルプロセッサ回路であって、ニューラルタスクマネージャは、
ニューラルネットワークをインスタンス化するタスクを含むタスクリストへの参照を記憶するように構成されたタスクキュー回路であって、前記タスクリストは、前記ニューラルプロセッサ回路の外部にあるメモリの場所に記憶されたタスクの構成データを含む、タスクキュー回路と、
前記タスクキュー回路に結合されたタスクアービタ回路であって、前記タスクアービタ回路は、
前記タスクキュー回路に記憶された前記タスクリストへの前記参照に基づいて、前記ニューラルプロセッサ回路の外部にある前記メモリの前記場所から前記タスクの前記構成データを取得し、
前記構成データの一部を前記ニューラルエンジン回路に提供するように構成され、
前記構成データの前記一部が前記ニューラルエンジン回路をプログラムして前記タスクを実行させる、タスクアービタ回路と、を含む、
ニューラルプロセッサ回路。
【請求項２】
前記タスクは、実行された場合、前記ニューラルネットワークの単一のネットワーク層、前記ニューラルネットワークの複数のネットワーク層、又は前記ニューラルネットワークのネットワーク層の一部をインスタンス化する、請求項１に記載のニューラルプロセッサ回路。
【請求項３】
前記タスクアービタ回路は、前記ニューラルタスクマネージャ回路の構成キュー内に前記構成データを記憶するように更に構成され、前記構成キューは、前記ニューラルエンジン回路に結合され、前記構成データの前記一部を前記ニューラルエンジン回路に提供するように構成されており、
前記ニューラルプロセッサ回路は、
前記構成データが前記構成キューに記憶されている場合に、前記ニューラルプロセッサ回路の外部にある前記メモリから前記タスクのカーネルデータを取得するように構成されたカーネルダイレクトメモリアクセス（ＤＭＡ）と、
前記構成データが前記構成キューに記憶されている場合に、前記ニューラルプロセッサ回路の外部にある前記メモリから前記タスクの入力データを取得するように構成されたバッファダイレクトメモリアクセス（ＤＭＡ）と、
を更に含む、請求項１に記載のニューラルプロセッサ回路。
【請求項４】
前記ニューラルタスクマネージャ回路は、
前記構成キューに結合されたフェッチキューと、
前記フェッチキュー及び前記タスクアービタ回路に結合されたタスクマネージャダイレクトメモリアクセス（ＤＭＡ）と、
を更に含み、
前記タスクアービタ回路は、前記タスクマネージャＤＭＡを介して、前記ニューラルプロセッサ回路の外部にある前記メモリの前記場所から前記タスクの前記構成データを取得し、前記構成データを前記フェッチキューに記憶するように更に構成され、実行されたタスクの第２の構成データが前記構成キューから除去された場合に、前記フェッチキューは、前記構成データを前記構成キューに提供する、
請求項３に記載のニューラルプロセッサ回路。
【請求項５】
前記ニューラルタスクマネージャ回路は、前記タスクアービタ回路に結合された別のタスクキュー回路を更に含み、他のタスクキュー回路は、別のニューラルネットワークをインスタンス化する他のタスクの別のタスクリストへの別の参照を記憶するように構成され、前記タスクキュー回路は、第１の優先度を有し、前記他のタスクキュー回路は第２の優先度を有し、
前記タスクアービタ回路は、前記第１の優先度と前記第２の優先度との比較に基づいて、（ｉ）前記タスクの前記構成データ、又は（ｉｉ）フェッチキュー内の前記他のタスクの別の構成データ、のうちの１つを記憶するように構成されている、
請求項３に記載のニューラルプロセッサ回路。
【請求項６】
前記ニューラルプロセッサ回路の外部にある前記メモリと前記ニューラルエンジン回路とに結合されたデータバッファを更に備え、前記タスクアービタ回路は、前記構成データの別の部分を前記データバッファに提供するように更に構成され、前記構成データの前記他の部分が前記データバッファをプログラムして、前記タスクの入力データのワークユニットを前記ニューラルエンジン回路にブロードキャストさせる、請求項１に記載のニューラルプロセッサ回路。
【請求項７】
前記データバッファと前記ニューラルプロセッサ回路の外部にある前記メモリとに結合されたバッファダイレクトメモリアクセス（ＤＭＡ）を更に含み、
前記タスクアービタ回路は、前記構成データの第３の部分を前記バッファＤＭＡに提供するように更に構成され、前記構成データの前記第３の部分が前記バッファＤＭＡをプログラムして、前記ニューラルプロセッサ回路の外部にある前記メモリから前記タスクの前記入力データのタイルを取得し、前記タイルを前記データバッファに記憶させ、
前記タイルは、複数のワークユニットを含む、請求項６に記載のニューラルプロセッサ回路。
【請求項８】
前記ニューラルエンジン回路は、
前記ニューラルタスクマネージャに結合された入力バッファ回路と、
前記入力バッファ回路に結合された乗算−加算（ＭＡＤ）回路と、
を含み、
前記構成データの前記一部が前記入力バッファ回路をプログラムして、前記入力バッファ回路に記憶された前記タスクの入力データの一部を前記ＭＡＤ回路に提供させる、
請求項１に記載のニューラルプロセッサ回路。
【請求項９】
前記ニューラルプロセッサ回路の外部にある前記メモリと前記ニューラルエンジン回路とに結合されたデータバッファを更に備え、前記ニューラルエンジンは出力回路を更に備え、前記構成データの前記少なくとも一部が前記出力回路をプログラムして、前記ＭＡＤ回路から前記データバッファに出力データを提供させる、請求項８に記載のニューラルプロセッサ回路。
【請求項１０】
前記ニューラルプロセッサ回路の外部にある前記メモリと前記ニューラルエンジン回路とに結合されたカーネルダイレクトメモリアクセス（ＤＭＡ）を更に備え、
前記タスクアービタ回路は、前記構成データの別の部分を前記カーネルＤＭＡに提供するように更に構成され、前記構成データの前記他の部分が前記カーネルＤＭＡをプログラムして、前記ニューラルプロセッサ回路の外部にある前記メモリからカーネルデータを取得させ、前記カーネルデータを前記ニューラルエンジン回路に提供して前記タスクを実行させる、請求項１に記載のニューラルプロセッサ回路。
【請求項１１】
ニューラルプロセッサ回路においてタスクを管理する方法であって、
前記ニューラルプロセッサ回路のタスクキュー回路内に、ニューラルネットワークをインスタンス化するタスクのタスクリストへの参照を記憶することであって、前記タスクリストは、前記ニューラルプロセッサ回路の外部にあるメモリの場所に記憶された、タスクの構成データを含む、ことと、
前記タスクキュー回路に記憶された前記タスクリストへの前記参照に基づいて、前記ニューラルプロセッサ回路の外部にある前記メモリの前記場所から前記構成データを取得することと、
前記構成データの一部を前記ニューラルプロセッサ回路のニューラルエンジン回路に提供することであって、前記構成データの前記一部が前記ニューラルエンジン回路をプログラムして、前記タスクを実行させる、ことと、
を含む方法。
【請求項１２】
前記タスクは、実行された場合、前記ニューラルネットワークの単一のネットワーク層、前記ニューラルネットワークの複数のネットワーク層、又は前記ニューラルネットワークのネットワーク層の一部をインスタンス化する、請求項１１に記載の方法。
【請求項１３】
前記構成データを前記ニューラルプロセッサ回路の構成キューに記憶することと、
前記構成データの前記一部を、前記構成キューから前記ニューラルエンジン回路に提供することと、
前記構成データが前記構成キューに記憶されている場合に、外部メモリから前記タスクのカーネルデータを取得することと、
前記構成データが前記構成キューに記憶されている場合に、前記外部メモリから前記タスクの入力データを取得することと、
を更に含む請求項１１に記載の方法。
【請求項１４】
前記タスクの前記構成データを、前記ニューラルプロセッサ回路のタスクマネージャダイレクトメモリアクセス（ＤＭＡ）を介して、前記外部メモリの前記場所から取得することと、
前記構成データを前記ニューラルプロセッサ回路のフェッチキュー内に記憶することと、
実行されたタスクの別の構成データが前記構成キューから除去された場合に、前記フェッチキューから前記構成キューに前記構成データを提供することと、
を更に含む請求項１３に記載の方法。
【請求項１５】
別のニューラルネットワークをインスタンス化する他のタスクの別のタスクリストへの別の参照を、別のタスクキュー回路内に記憶することであって、前記タスクキュー回路は、第１の優先度を有し、前記他のタスクキュー回路は第２の優先度を有する、ことと、
前記第１の優先度と前記第２の優先度との比較に基づいて、（ｉ）前記タスクの前記構成データ、又は（ｉｉ）フェッチキュー内の前記他のタスクの別の構成データ、のうちの１つを記憶することと、
を更に含む請求項１３に記載の方法。
【請求項１６】
前記構成の別の部分を、前記ニューラルプロセッサ回路のデータバッファに提供することを更に含み、前記構成データの前記他の部分が前記データバッファをプログラムして、前記タスクの入力データのワークユニットを前記ニューラルエンジン回路にブロードキャストさせる、請求項１１に記載の方法。
【請求項１７】
前記構成データの第３の部分を、前記データバッファ及び外部メモリに結合された前記ニューラルプロセッサ回路のバッファダイレクトメモリアクセス（ＤＭＡ）に提供することを更に含み、前記構成データの前記第３の部分が前記バッファＤＭＡをプログラムして、前記外部メモリから前記タスクの前記入力データのタイルを取得させ、前記タイルを前記データバッファに記憶させ、前記タイルは複数のワークユニットを含む、請求項１６に記載の方法。
【請求項１８】
前記構成データの前記一部が、前記ニューラルエンジン回路の入力バッファ回路をプログラムして、前記入力バッファ回路に記憶された前記タスクの入力データの一部を、前記ニューラルエンジン回路の乗算−加算（ＭＡＤ）回路に提供させ、
前記構成データの前記少なくとも一部が、前記ニューラルエンジン回路の出力回路をプログラムして、出力データを前記ＭＡＤ回路から前記ニューラルプロセッサ回路のデータバッファに提供させる、
請求項１１に記載の方法。
【請求項１９】
前記構成データの別の部分を、前記ニューラルプロセッサ回路の外部にある前記メモリと前記ニューラルエンジン回路とに結合されたカーネルダイレクトメモリアクセス（ＤＭＡ）に提供することを更に含み、前記構成データの前記他の部分が前記カーネルＤＭＡをプログラムして、前記ニューラルプロセッサ回路の外部にある前記メモリからカーネルデータを取得させ、前記カーネルデータを前記ニューラルエンジン回路に提供して前記タスクを実行させる、
請求項１１に記載の方法。
【請求項２０】
ニューラルプロセッサ回路を備える集積回路（ＩＣ）システムであって、前記ニューラルプロセッサ回路は、
ニューラルエンジン回路と、
前記ニューラルエンジン回路に結合されたニューラルタスクマネージャ回路と、を備え、前記ニューラルタスクマネージャ回路は、
ニューラルネットワークをインスタンス化するタスクのタスクリストへの参照を記憶するように構成されたタスクキュー回路であって、前記タスクリストは、前記ニューラルプロセッサ回路の外部にあるメモリの場所に記憶されたタスクの構成データを含む、タスクキュー回路と、
前記タスクキュー回路に結合されたタスクアービタ回路であって、前記タスクアービタ回路は、
前記タスクキュー回路に記憶された前記タスクリストへの前記参照に基づいて、前記ニューラルプロセッサ回路の外部にある前記メモリの前記場所から前記タスクの前記構成データを取得し、
前記構成データの少なくとも一部を前記ニューラルエンジン回路に提供するように構成され、前記構成データの前記少なくとも一部が前記ニューラルエンジン回路をプログラムして前記タスクを実行させる、タスクアービタ回路と、
を含む、
集積回路（ＩＣ）システム。
【発明の詳細な説明】
【技術分野】
【０００１】
１．技術分野の開示
【０００２】
本開示は、ニューラルネットワークを実装するための回路に関し、より具体的には、ニューラルネットワークタスクを管理することに関する。
【背景技術】
【０００３】
２．関連技術の記載
【０００４】
人工ニューラルネットワーク（artificial neural network、ＡＮＮ）は、入力データを処理するために、接続されたノードの集合を使用するコンピューティングシステム又はモデルである。ＡＮＮは、典型的には層に組織化され、異なる層がそれらの入力に対して、異なる種類の変換を実行する。畳み込みニューラルネットワーク（convolution neural network、ＣＮＮ）、ディープニューラルネットワーク（deep neural network、ＤＮＮ）、リカレントニューラルネットワーク（recurrent neural network、ＲＮＮ）、及びディープビリーフネットワーク（deep belief network、ＤＢＮ）などのＡＮＮの拡張又は変形が大きな注目を受けるようになってきた。これらのコンピューティングシステム又はモデルは多くの場合、乗算及び累積を含む大規模な計算演算を伴う。例えば、ＣＮＮは、主に入力データとカーネルデータとの間の畳み込みを使用する機械学習技術のクラスであり、これは、乗算演算及び累積演算に分解することができる。
【０００５】
入力データの種類及び実行される演算に応じて、これらの機械学習システム又はモデルは、構成が異なり得る。そのような様々な構成としては、例えば、前処理動作、入力データ内のチャネル数、使用されるカーネルデータ、畳み込み結果に適用される非線形関数、及び様々な後処理動作の適用が挙げられるであろう。中央処理装置（central processing unit、ＣＰＵ）及びそのメインメモリを使用して、様々な構成の機械学習システム又はモデルをインスタンス化及び実行することは比較的容易である。なぜなら、そのようなシステム又はモデルは、コードを更新することだけでインスタンス化できるからである。しかしながら、これら機械学習システム又はモデルの様々な動作のためにＣＰＵにのみ依存することは、中央処理装置（ＣＰＵ）の帯域幅を著しく消費し、並びに全体的な電力消費を増加させることになる。
【発明の概要】
【０００６】
実施形態は、ニューラルプロセッサ回路によって実行された場合に、ニューラルネットワークをインスタンス化するタスクを管理することに関する。ニューラルプロセッサ回路は、１つ以上のニューラルエンジン回路と、ニューラルタスクマネージャ回路とを含む。ニューラルタスクマネージャ回路は、複数のタスクキュー回路と、タスクアービタ回路とを含む。各タスクキュー回路は、機械学習動作用のタスクのタスクリストへの参照を記憶する。タスクリスト及びタスクキュー回路の各々は、優先度パラメータに関連付けられてもよい。タスクキュー回路の優先度に基づいて、タスクアービタ回路は、外部メモリからタスクのための構成データを取得し、１つ以上のニューラルエンジンを含むニューラルプロセッサ回路の構成要素に、構成データを提供する。構成データは、ニューラルプロセッサ回路をプログラムして、タスクを実行させる。
【０００７】
いくつかの実施形態は、ニューラルプロセッサ回路においてタスクを管理する方法を含む。ニューラルネットワークをインスタンス化するタスクのタスクリストへの参照は、ニューラルプロセッサ回路のタスクキュー回路に記憶される。タスクリストは、外部メモリの場所に記憶されたタスクの構成データを含む。タスクリストは、例えばタスク優先度に基づいて、タスクキュー回路から取得される。タスクリストを取得することに応答して、構成データは、外部メモリの場所から取得される。構成データの少なくとも一部は、ニューラルプロセッサ回路のニューラルエンジンに提供されて、ニューラルエンジンをプログラムして、タスクを実行させる。
【図面の簡単な説明】
【０００８】
【図１】一実施形態に係る、電子デバイスの概要図である。
【図２】一実施形態に係る、電子デバイスの構成要素を示すブロック図である。
【図３】一実施形態に係る、ニューラルプロセッサ回路を示すブロック図である。
【図４】一実施形態に係る、ニューラルプロセッサ回路内のニューラルエンジンのブロック図である。
【図５】一実施形態に係る、ニューラルプロセッサ回路における入力データを処理するためのループを示す概念図である。
【図６】一実施形態に係る、入力データをスライス、タイル、及びワークユニットにセグメント化することを示す概念図である。
【図７】一実施形態に係る、ニューラルプロセッサ回路の構成要素内のラスタライザのプログラミングを示す図である。
【図８】一実施形態に係る、ニューラルプロセッサ回路において入力データを処理する方法を示すフローチャートである。
【図９】一実施形態に係る、タスクのリストによって表されるニューラルネットワークを示す概略ブロック図である。
【図１０】一実施形態に係る、ニューラルタスクマネージャを示すブロック図である。
【図１１】一実施形態に係る、タスクキューを使用したタスク記述子の取得を示す図である。
【図１２】一実施形態に係る、タスク記述子を示す図である。
【図１３】一実施形態に係る、ニューラルタスクマネージャのフェッチキュー及び構成キューを示すブロック図である。
【図１４】一実施形態に係る、ニューラルプロセッサ回路においてタスクを管理する方法を示すフローチャートである。
【０００９】
種々の非限定的な実施形態を単に例示を目的として、図で示し、詳細な説明において説明する。
【発明を実施するための形態】
【００１０】
ここで、添付図面に実施例が示される実施形態への詳細な参照が行われる。以下の詳細な説明では、説明される様々な実施形態の完全な理解を提供するために数多くの具体的な詳細が記載されている。しかし、説明する実施形態は、これらの具体的な詳細なしに実施することができる。他の例では、周知の方法、手順、構成要素、回路、及びネットワークは、実施形態の態様を不必要に不明瞭にしないよう詳細には説明されていない。
【００１１】
本開示の実施形態は、ニューラルプロセッサ回路によって実行された場合に、ニューラルネットワークをインスタンス化するタスクを管理することに関する。推論動作又は訓練動作などの機械学習動作は、タスクのタスクリストによって定義される。ニューラルプロセッサ回路は、１つ以上のニューラルエンジンと、ニューラルタスクマネージャとを含む。ニューラルタスクマネージャは、複数のタスクキュー及びタスクアービタを含む。各タスクキューは、機械学習動作用のタスクのタスクリストを記憶する。タスクリスト又はタスクキューの各々は、優先度パラメータに関連付けられてもよい。タスクアービタは、優先度パラメータに基づいて、外部メモリからタスクに関する構成データを取得し、１つ以上のニューラルエンジンを含むニューラルプロセッサ回路の構成要素に、構成データを提供する。いくつかの実施形態では、ニューラルタスクマネージャは、タスクアービタによって選択されたコミットされたタスクの構成データを記憶し、構成データをニューラルプロセッサ回路の他の構成要素に提供する構成キューを含む。構成データは、ニューラルプロセッサ回路をプログラムして、タスクを実行させる。例えば、構成データは、タスクを実行するためにニューラルエンジンによって処理される入力データ及びカーネルデータを含み得る。構成データは、構成データを取得及び処理するための命令、並びにニューラルエンジンの出力データを記憶するための命令を更に含んでもよい。とりわけ、ニューラルタスクマネージャは、ニューラルプロセッサ回路が複数の機械学習動作を効率的に処理することを可能にする。更に、ニューラルタスクマネージャは、より低い優先度のタスクが実行されている一方で、より高い優先度のタスクがタスクキューに記憶されている場合に、タスク切替えを促進することができる。
【００１２】
本明細書に記載される「タスク」は、ニューラルネットワークのネットワーク層、ニューラルネットワークの複数のネットワーク層、又はニューラルネットワークのネットワーク層の一部をインスタンス化する、ニューラルプロセッサ回路の処理動作を指す。本明細書に記載される「タスクリスト」は、ニューラルプロセッサ回路によって実行されて、ニューラルネットワークの複数のネットワーク層をインスタンス化するタスクのシーケンスなどのタスクのシーケンスを指す。
例示的な電子デバイス
【００１３】
電子デバイス、そのようなデバイス用のユーザインターフェース、及びそのようなデバイスを使用する関連するプロセスの実施形態が説明される。いくつかの実施形態では、デバイスは、パーソナルデジタルアシスタント（ＰＤＡ）機能及び／又は音楽プレーヤ機能などの他の機能も含む、携帯電話などのポータブル通信デバイスである。ポータブル多機能デバイスの例示的な実施形態としては、カリフォルニア州クパチーノのＡｐｐｌｅ  Ｉｎｃ．からのｉＰｈｏｎｅ（登録商標）、ｉＰｏｄ  Ｔｏｕｃｈ（登録商標）、Ａｐｐｌｅ  Ｗａｔｃｈ（登録商標）、及びｉＰａｄ（登録商標）のデバイスが挙げられるが、これらに限定されない。ウェアラブルコンピュータ、ラップトップコンピュータ、又はタブレットコンピュータなどの他のポータブル電子デバイスが、任意選択的に使用される。いくつかの実施形態では、デバイスは、ポータブル通信デバイスではないが、デスクトップコンピュータ又はポータブル使用のために設計されていない他のコンピューティングデバイスである。いくつかの実施形態では、本開示の電子デバイスは、タッチ感知面（例えば、タッチスクリーンディスプレイ及び／又はタッチパッド）を含むことができる。図１に関連して以下に説明する例示的な電子デバイス（例えば、デバイス１００）は、ユーザ入力を受け取るためのタッチ感知面を含むことができる。電子デバイスは、物理キーボード、マウス、及び／又はジョイスティックなどの、１つ以上の他の物理ユーザインターフェースデバイスも含むことができる。
【００１４】
図１は、一実施形態に係る、電子デバイス１００の概要図である。デバイス１００は、「ホーム」又はメニューボタン１０４などの、１つ以上の物理ボタンを含んでもよい。メニューボタン１０４は、例えば、デバイス１００上で実行されるアプリケーションのセット内の任意のアプリケーションへナビゲートするために使用される。いくつかの実施形態では、メニューボタン１０４は、メニューボタン１０４上の指紋を識別する指紋センサを含む。指紋センサを使用して、メニューボタン１０４上の指が、デバイス１００をロック解除するために記憶された指紋と一致する指紋を有するか否かを判定することができる。あるいは、いくつかの実施形態では、メニューボタン１０４は、タッチスクリーン上に表示されるグラフィカルユーザインターフェース（graphical user interface、ＧＵＩ）内のソフトキーとして実装される。
【００１５】
いくつかの実施形態では、デバイス１００は、タッチスクリーン１５０、メニューボタン１０４、デバイスへの電源をオン／オフし、デバイスをロックするためのプッシュボタン１０６、音量調整ボタン１０８、加入者識別モジュール（Subscriber Identity Module、ＳＩＭ）カードスロット１１０、ヘッドセットジャック１１２、及びドッキング／充電用外部ポート１２４を含む。プッシュボタン１０６は、ボタンを押し下げて、所定の時間間隔の間、ボタンを押し下げた状態に保持することによってデバイス上の電源をオン／オフするため、ボタンを押し下げて、既定の時間が経過する前にボタンを解放することによってデバイスをロックするため、及び／又はデバイスをロック解除する、若しくはロック解除プロセスを開始するために、使用され得る。代替的実施形態では、デバイス１００はまた、マイクロフォン１１３を介して、一部の機能をアクティブ化又は非アクティブ化するための口頭入力も受け入れる。デバイス１００は、メモリ（１つ以上のコンピュータ可読記憶媒体を含むことができる）、メモリコントローラ、１つ以上の中央処理装置（ＣＰＵ）、周辺機器インターフェース、ＲＦ回路、オーディオ回路、スピーカ１１１、マイクロフォン１１３、入出力（input/output、Ｉ／Ｏ）サブシステム、及び他の入力又は制御デバイスを含むがこれらに限定されない、様々な構成要素を含む。デバイス１００は、１つ以上の画像センサ１６４と、１つ以上の近接センサ１６６と、１つ以上の加速度計１６８とを含むことができる。デバイス１００は、図１に示されていない構成要素を含んでもよい。
【００１６】
デバイス１００は、電子デバイスの単なる一実施例であり、デバイス１００は、上記に列挙したものより多い又は少ない構成要素を有することができ、それらの構成要素の一部は、１つの構成要素に組み合わせる、又は異なる構成若しくは配置を有することができる。上記に列挙したデバイス１００の様々な構成要素は、１つ以上の信号処理回路及び／又は特定用途向け集積回路（application specific integrated circuit、ＡＳＩＣ）を含む、ハードウェア、ソフトウェア、ファームウェア、又はそれらの組合せで具現化される。
【００１７】
図２は、一実施形態に係る、デバイス１００の構成要素を示すブロック図である。デバイス１００は、画像処理を含む様々な動作を実行することができる。この目的及び他の目的のために、デバイス１００は、他の構成要素の中でもとりわけ、画像センサ２０２と、システムオンチップ（system-on-a chip、ＳＯＣ）構成要素２０４と、システムメモリ２３０と、永続的記憶装置（例えば、フラッシュメモリ）２２８と、動き（方向）センサ２３４と、ディスプレイ２１６とを含むことができる。図２に示すような構成要素は、単なる例示である。例えば、デバイス１００は、図２に示されていない他の構成要素（スピーカ又はマイクロフォンなど）を含んでもよい。更に、いくつかの構成要素（動きセンサ２３４など）は、デバイス１００から省略されてもよい。
【００１８】
画像センサ２０２は、画像データをキャプチャするための構成要素であり、例えば、相補的金属酸化物半導体（complementary metal-oxide-semiconductor、ＣＭＯＳ）アクティブピクセルセンサ、カメラ、ビデオカメラ、又は他のデバイスとして具現化することができる。画像センサ２０２は、更なる処理のためにＳＯＣ構成要素２０４に送信される生画像データを生成する。いくつかの実施形態では、ＳＯＣ構成要素２０４によって処理された画像データは、ディスプレイ２１６上に表示され、システムメモリ２３０、永続的記憶装置２２８に記憶され、又は、ネットワーク接続を介してリモートコンピューティングデバイスに送信される。画像センサ２０２によって生成された生画像データは、ベイヤーカラーカーネル配列（color kernel array、ＣＦＡ）パターン（以降、「ベイヤーパターン」とも呼ばれる）とすることができる。
【００１９】
動きセンサ２３４は、デバイス１００の動きを感知するための構成要素又は構成要素のセットである。動きセンサ２３４は、デバイス１００の向き及び／又は加速度を示すセンサ信号を生成することができる。センサ信号は、デバイス１００をオンにする、又はディスプレイ２１６上に表示された画像を回転するなどの、様々な動作のためにＳＯＣ構成要素２０４に送信される。
【００２０】
ディスプレイ２１６は、ＳＯＣ構成要素２０４によって生成されたような画像を表示するための構成要素である。ディスプレイ２１６は、例えば、液晶ディスプレイ（liquid crystal display、ＬＣＤ）デバイス又は有機発光ダイオード（organic light emitting diode、ＯＬＥＤ）デバイスを含むことができる。ＳＯＣ構成要素２０４から受信したデータに基づいて、ディスプレイ２１６は、メニュー、選択された動作パラメータ、画像センサ２０２によってキャプチャされＳＯＣ構成要素２０４によって処理された画像、及び／又はデバイス１００のユーザインターフェース（図示せず）から受信した他の情報などの、様々な画像を表示することができる。
【００２１】
システムメモリ２３０は、ＳＯＣ構成要素２０４によって実行するための命令を記憶するため、及びＳＯＣ構成要素２０４によって処理されたデータを記憶するための構成要素である。システムメモリ２３０は、例えば、ダイナミックランダムアクセスメモリ（dynamic random access memory、ＤＲＡＭ）、シンクロナスＤＲＡＭ（synchronous DRAM、ＳＤＲＡＭ）、ダブルデータレート（double data rate）（ＤＤＲ、ＤＤＲ２、ＤＤＲ３など）ＲＡＭＢＵＳ  ＤＲＡＭ（ＲＤＲＡＭ）、スタティックＲＡＭ（static RAM、ＳＲＡＭ）、又はそれらの組合せを含む、任意の種類のメモリとして具現化することができる。いくつかの実施形態では、システムメモリ２３０は、ピクセルデータ若しくは他の画像データ、又は統計を様々なフォーマットで記憶してもよい。
【００２２】
永続的記憶装置２２８は、不揮発的にデータを記憶するための構成要素である。永続的記憶装置２２８は、電源が使用可能でないときでもデータを保持する。永続的記憶装置２２８は、読み出し専用メモリ（read-only memory、ＲＯＭ）、フラッシュメモリ、又は他の不揮発性ランダムアクセスメモリデバイスとして具現化することができる。
【００２３】
ＳＯＣ構成要素２０４は、１つ以上の集積回路（integrated circuit、ＩＣ）チップとして具現化され、様々なデータ処理プロセスを実行する。ＳＯＣ構成要素２０４は、他のサブコンポーネントの中でもとりわけ、画像信号プロセッサ（image signal processor、ＩＳＰ）２０６、中央プロセッサユニット（central processor unit、ＣＰＵ）２０８、ネットワークインターフェース２１０、センサインターフェース２１２、ディスプレイコントローラ２１４、ニューラルプロセッサ回路２１８、グラフィックプロセッサgraphics processor、ＧＰＵ）２２０、メモリコントローラ２２２、ビデオエンコーダ２２４、ストレージコントローラ２２６、及びこれらのサブコンポーネントを接続するバス２３２を含むことができる。ＳＯＣ構成要素２０４は、図２に示されるサブコンポーネントよりも多くの又は少ないサブコンポーネントを含んでもよい。
【００２４】
ＩＳＰ２０６は、画像処理パイプラインの様々なステージを実行するハードウェアである。いくつかの実施形態では、ＩＳＰ２０６は、画像センサ２０２から生画像データを受信して、その生画像データをＳＯＣ構成要素２０４の他のサブコンポーネント又はデバイス１００の構成要素によって使用可能なフォーマットに処理することができる。ＩＳＰ２０６は、図３を参照して以下に詳細に説明するように、画像変換演算、水平及び垂直スケーリング、色空間変換、並びに／又は画像安定化変換などの、様々な画像操作演算を実行することができる。
【００２５】
ＣＰＵ２０８は、任意の好適な命令セットアーキテクチャを使用して具現化してもよく、その命令セットアーキテクチャで定義された命令を実行するように構成されてもよい。ＣＰＵ２０８は、ｘ８６、ＰｏｗｅｒＰＣ、ＳＰＡＲＣ、ＲＩＳＣ、ＡＲＭ、若しくはＭＩＰＳ命令セットアーキテクチャ（instruction set architectures、ＩＳＡ）、又は任意の他の好適なＩＳＡなどの様々なＩＳＡのいずれかを使用する汎用又は組み込み型プロセッサであってもよい。単一のＣＰＵを図２に示すが、ＳＯＣ構成要素２０４は、複数のＣＰＵを含むことができる。マルチプロセッサシステムでは、ＣＰＵの各々は、必ずしもそうではないが、同一のＩＳＡを共通して実装してもよい。
【００２６】
グラフィック処理ユニット（graphics processing unit、ＧＰＵ）２２０は、グラフィックデータを実行するためのグラフィック処理回路である。例えば、ＧＰＵ２２０は、フレームバッファに表示されることになるオブジェクト（例えば、フレーム全体に対してピクセルデータを含むもの）をレンダリングすることができる。ＧＰＵ２２０は、グラフィック演算の一部又は全てを実行するようにグラフィックソフトウェア又は特定のグラフィック演算のハードウェア高速化を実行することができる１つ以上のグラフィックプロセッサを含んでもよい。
【００２７】
ニューラルプロセッサ回路２１８は、乗算、加算、及び累積を含む計算に基づいて、様々な機械学習動作を実行する回路である。このような計算は、例えば、入力データ及びカーネルデータの畳み込みを実行するように構成されてもよい。ニューラルプロセッサ回路２１８は、ニューラルネットワーク動作に関連付けられたリソース集約的動作からＣＰＵ２０８を解放しながら、高速かつ電力効率の良い方法でこれらの動作を実行する構成可能回路である。ニューラルプロセッサ回路２１８は、センサインターフェース２１２、画像信号プロセッサ２０６、システムメモリ２３０、又はネットワークインターフェース２１０若しくはＧＰＵ２２０などの他のソースから入力データを受信してもよい。ニューラルプロセッサ回路２１８の出力は、様々な動作のために、画像信号プロセッサ２０６、システムメモリ２３０、又はＣＰＵ２０８などのデバイス１００の様々な構成要素に提供されてもよい。ニューラルプロセッサ回路２１８の構造及び動作は、図３を参照して以下に詳細に説明される。
【００２８】
ネットワークインターフェース２１０は、１つ以上のネットワーク（例えば、キャリア又はエージェントデバイス）を介してデータをデバイス１００と他のデバイスとの間で交換することを可能にするサブコンポーネントである。例えば、ビデオ又は他の画像データは、ネットワークインターフェース２１０を介して他のデバイスから受信して、（例えば、図３に関して後述するような画像信号プロセッサ２０６へのバックエンドインターフェースを介した）後続の処理及び表示のためにシステムメモリ２３０に記憶してもよい。ネットワークとしては、ローカルエリアネットワーク（Local Area Network、ＬＡＮ）（例えば、イーサネット又は企業ネットワーク）及びワイドエリアネットワーク（Wide Area Network、ＷＡＮ）を挙げることができるが、これらに限定されない。ネットワークインターフェース２１０を介して受信した画像データは、ＩＳＰ２０６によって画像処理プロセスにかけることができる。
【００２９】
センサインターフェース２１２は、動きセンサ２３４とインターフェースするための回路である。センサインターフェース２１２は、動きセンサ２３４からセンサ情報を受信し、このセンサ情報を処理して、デバイス１００の向き又は移動を判定する。
【００３０】
ディスプレイコントローラ２１４は、ディスプレイ２１６上に表示されることになる画像データを送信するための回路である。ディスプレイコントローラ２１４は、ＩＳＰ２０６、ＣＰＵ２０８、グラフィックプロセッサ、又はシステムメモリ２３０から画像データを受信し、ディスプレイ２１６上に表示するために好適なフォーマットに画像データを処理する。
【００３１】
メモリコントローラ２２２は、システムメモリ２３０と通信するための回路である。メモリコントローラ２２２は、ＳＯＣ構成要素２０４のＩＳＰ２０６、ＣＰＵ２０８、ＧＰＵ２２０、又は他のサブコンポーネントによって処理するためにシステムメモリ２３０からデータを読み取ることができる。メモリコントローラ２２２はまた、ＳＯＣ構成要素２０４の様々なサブコンポーネントから受信したデータをシステムメモリ２３０に書き込むことができる。
【００３２】
ビデオエンコーダ２２４は、ビデオデータを永続的記憶装置１２８に記憶するために好適なフォーマットにエンコードするための、又はネットワークを介して別のデバイスに伝送するためにネットワークインターフェース２１０にデータを渡すための、ハードウェア、ソフトウェア、ファームウェア、又はそれらの組合せである。
【００３３】
いくつかの実施形態では、ＳＯＣ構成要素２０４の１つ以上のサブコンポーネント又はこれらのサブコンポーネントのいくつかの機能は、ＩＳＰ２０６、ＣＰＵ２０８、又はＧＰＵ２２０上で実行されるソフトウェア構成要素によって実行することができる。そのようなソフトウェア構成要素は、システムメモリ２３０、永続的記憶装置２２８、又はネットワークインターフェース２１０を介してデバイス１００と通信する別のデバイスに記憶することができる。
【００３４】
画像データ又はビデオデータは、ＳＯＣ構成要素２０４内の様々なデータ経路を介して流れることができる。一実施例では、生画像データは、画像センサ２０２から生成して、ＩＳＰ２０６によって処理し、その後、バス２３２及びメモリコントローラ２２２を介してシステムメモリ２３０に送信することができる。画像データがシステムメモリ２３０に記憶された後で、画像データは、エンコードするためにビデオエンコーダ２２４によって、又は表示するためにディスプレイ１１６によって、バス２３２を介してアクセスすることができる。
例示的ニューラルプロセッサ回路
【００３５】
ニューラルプロセッサ回路２１８は、少なくともカーネルデータ３４０に基づいて、入力データに対してニューラルネットワーク動作を実行する構成可能回路である。この目的のために、ニューラルプロセッサ回路２１８は、他の構成要素の中でもとりわけ、ニューラルタスクマネージャ３１０、複数のニューラルエンジン３１４Ａ〜３１４Ｎ（以下では、総称して「ニューラルエンジン３１４」と称され、個別に「ニューラルエンジン３１４」とも称される）、カーネルダイレクトメモリアクセス（direct memory access、ＤＭＡ）３２４、データバッファ３１８、及びバッファＤＭＡ３２０を含んでもよい。ニューラルプロセッサ回路２１８は、図３に示されていない他の構成要素を含んでもよい。
【００３６】
ニューラルエンジン３１４の各々は、ニューラルネットワーク動作のための計算動作を並列に実行する。動作の負荷に応じて、ニューラルエンジン３１４の全セットが動作されてもよく、又はニューラルエンジン３１４のサブセットのみが動作される一方で、残りのニューラルエンジン３１４は電力を節約するためにパワーセーブモードに置かれてもよい。ニューラルエンジン３１４の各々は、図４を参照して以下に詳細に説明するように、１つ以上のカーネルを記憶するための、乗算−累積演算を実行するための、及び出力データ３２８を生成するために後処理するための、構成要素を含む。ニューラルネットワーク動作の一例は、畳み込み演算である。
【００３７】
ニューラルタスクマネージャ３１０は、ニューラルプロセッサ回路２１８の全体的な動作を管理する。ニューラルタスクマネージャ３１０は、ＣＰＵ２０８によって実行されるコンパイラからタスクリストを受信し、そのタスクキュー内にタスクを記憶し、実行するタスクを選択し、選択されたタスクを実行するための命令をニューラルプロセッサ回路２１８の他の構成要素に送信してもよい。ニューラルタスクマネージャ３１０はまた、ＣＰＵ２０８からの命令を受信するなどのイベントを検出したときに、タスク切替えを実行してもよい。１つ以上の実施形態では、図５〜図７を参照して以下に詳細に記載されるように、ニューラルタスクマネージャ３１０は、ニューラルプロセッサ回路２１８の構成要素にラスタライザ情報を送信して、入力データ及びカーネルデータの適切な部分を各構成要素が追跡、取得、又は処理することを可能にする。ニューラルタスクマネージャ３１０が、ニューラルプロセッサ回路２１８の一部として図３に示されているが、ニューラルタスクマネージャ３１０は、ニューラルプロセッサ回路２１８の外側にある構成要素であってもよい。
【００３８】
カーネルＤＭＡ３２４は、カーネルデータをソース（例えば、システムメモリ２３０）からフェッチし、カーネルデータ３２６Ａ〜３２６Ｎをニューラルエンジン３１４の各々に送信する読み出し回路である。カーネルデータは、そこからカーネル要素が抽出され得る情報を表す。一実施形態では、カーネルデータは、ニューラルエンジン３１４の各々において圧縮された圧縮フォーマットであってもよい。ニューラルエンジン３１４の各々に提供されるカーネルデータは、場合によっては同じであってもよいが、ニューラルエンジン３１４の各々に提供されるカーネルデータは、ほとんどの場合は異なる。
【００３９】
データバッファ３１８は、ニューラルネットワーク動作に関連付けられたデータを記憶するための一時記憶装置である。一実施形態では、データバッファ３１８は、ニューラルエンジン３１４の全てによってアクセスすることができるメモリとして具体化されている。データバッファ３１８は、対応するニューラルエンジン３１４Ａ〜３１４Ｎに供給するための入力データ３２２Ａ〜３２２Ｎ、並びにニューラルエンジン３１４へとフィードバックする又は標的回路（例えば、システムメモリ２３０）に送信するためのニューラルエンジン３１４Ａ〜３１４Ｎの各々からの出力、を記憶してもよい。データバッファ３１８及びニューラルプロセッサ回路２１８の他の構成要素の動作は、データバッファ３１８に記憶された入力データ及び中間データが、ニューラルエンジン３１４における複数の動作にわたって再使用され、それによりシステムメモリ２３０への及びシステムメモリ２３０からのデータ転送を低減させるように協調されている。データバッファ３１８は、全ての入力チャネルの入力データが全てのニューラルエンジン３１４に供給されるブロードキャストモードにて、又は入力チャネルのサブセットの入力データが各ニューラルエンジン３１４に供給されるユニキャストモードにて動作されてもよい。
【００４０】
データバッファ３１８に記憶されている入力データ３２２は、とりわけ、ニューラルエンジン３１４の以前のサイクルの画像データ、輝度勾配ヒストグラム（ＨＯＧ）データ、オーディオデータ、メタデータ、出力データ３２８、及びＳＯＣ構成要素２０４の他の構成要素から受信した他の処理されたデータ、の一部であり得る。
【００４１】
バッファＤＭＡ３２０は、データバッファ３１８に記憶するために、ソース（例えば、システムメモリ２３０）からの入力データの一部（例えば、タイル）を受信する読み出し回路と、データバッファ３１８から標的（例えば、システムメモリ）へとデータを送達する書き込み回路とを含む。
例示的なニューラルエンジンアーキテクチャ
【００４２】
図４は、一実施形態に係る、ニューラルエンジン３１４のブロック図である。ニューラルエンジン３１４は、畳み込み、空間プーリング、及び局所応答正規化などの、ニューラルネットワーク動作を促進する様々な動作を実行する。ニューラルエンジン３１４は、入力データ３２２を受信し、記憶されたカーネルデータに基づいて入力データ３２２に対して乗算−累積演算（例えば、畳み込み演算）を実行し、乗算−累積演算の結果に対して更なる後処理動作を実行し、出力データ３２８を生成する。ニューラルエンジン３１４の入力データ３２２及び／又は出力データ３２８は、単一のチャネル又は複数のチャネルのものであってもよい。
【００４３】
ニューラルエンジン３１４は、他の構成要素の中でもとりわけ、入力バッファ回路４０２、計算コア４１６、ニューラルエンジン（ＮＥ）制御部４１８、カーネル抽出回路４３２、累積器４１４、及び出力回路４２４を含んでもよい。ニューラルエンジン３１４は、図４に示されていない更なる構成要素を含んでもよい。
【００４４】
入力バッファ回路４０２は、入力データ３２２をデータバッファ３１８から受信しながら、その一部を記憶し、現在のタスク又はプロセスループにとって適切な入力データの一部４０８を処理するために計算コア４１６に送信する回路である。入力バッファ回路４０２は、入力バッファ回路４０２の読取り場所をシフトさせて、計算コア４１６に送信される、入力データの部分４０８を変更するシフタ４１０を含む。シフトを介して、計算コア４１６に提供される入力データの部分を変更することにより、ニューラルエンジン３１４は、より少ない数の読み出し動作に基づいて、入力データの異なる部分に対して乗算−累積を実行することができる。１つ以上の実施形態では、入力データ３２２は、差異畳み込みグループ（difference convolution groups）及び／又は入力チャネルのデータを含む。
【００４５】
カーネル抽出回路４３２は、カーネルＤＭＡ３２４からカーネルデータ３２６を受信し、カーネル係数４２２を抽出する回路である。一実施形態では、カーネル抽出回路４３２はルックアップテーブル（look up table、ＬＵＴ）を参照し、マスクを使用して、圧縮カーネルデータ３２６からカーネルを再構築する。マスクは、再構成されたカーネル内においてゼロで埋められる場所を示し、残りの場所は数字で充填される。再構成されたカーネルのカーネル係数４２２は、計算コア４１６に送信されて、計算コア４１６の乗算−加算（multiply-add、ＭＡＤ）回路内のレジスタに読み込まれる。他の実施形態では、カーネル抽出回路４３２は、カーネルデータを非圧縮形式で受信し、カーネル係数は、ＬＵＴを参照することなく又はマスクを使用することなく決定される。
【００４６】
計算コア４１６は、計算動作を実行するプログラム可能回路である。この目的のために、計算コア４１６は、ＭＡＤ回路であるＭＡＤ０〜ＭＡＤＮ、及びポストプロセッサ４２８を含んでもよい。ＭＡＤ回路であるＭＡＤ０〜ＭＡＤＮの各々は、入力データの部分４０８内の入力値、及びカーネル係数４２２内の対応するカーネル係数を記憶してもよい。入力値及び対応するカーネル係数は、各ＭＡＤ回路において乗算されて、処理された値４１２が生成される。
【００４７】
累積器４１４は、処理された値４１２をＭＡＤ回路から受信及び記憶するメモリ回路である。累積器４１４に記憶された処理された値は、ＭＡＤ回路における更なる乗算及び加算演算のためにフィードバック情報４１９として送信されてもよく、又は後処理のためにポストプロセッサ４２８に送信されてもよい。累積器４１４は、ＭＡＤ回路と組み合わせて、乗算−累積器（multiply-accumulator、ＭＡＣ）４０４を形成する。１つ以上の実施形態では、累積器４１４はサブユニットを有してもよく、各サブユニットは、ニューラルエンジン３１４の異なる構成要素にデータを送信する。例えば、処理サイクル中、累積器４１４の第１のサブユニットに記憶されたデータはＭＡＣ回路に送信され、累積器４１４の第２のサブユニットに記憶されたデータはポストプロセッサ４２８に送信される。
【００４８】
ポストプロセッサ４２８は、累積器４１４から受信した値４１２の更なる処理を実行する回路である。ポストプロセッサ４２８は、これらに限定されないが、非線形関数（例えば、正規化線形ユニット（Rectified Linear Unit、ＲｅＬＵ））、正規化相互相関（normalized cross-correlation、ＮＣＣ）、８ビットデータに対してニューラル動作を実行した結果を１６ビットデータにマージすること、及び局所応答正規化（local response normalization、ＬＲＮ）を含む動作を実行してもよい。このような動作の結果は、処理された値４１７としてポストプロセッサ４２８から出力回路４２４に出力される。
【００４９】
ＮＥ制御部４１８は、ニューラルプロセッサ回路２１８の動作モード及びパラメータに基づいて、ニューラルエンジン３１４の他の構成要素の動作を制御する。異なる動作モード（例えば、グループ畳み込みモード若しくは非グループ畳み込みモード）、又はパラメータ（例えば、入力チャネルの数及び出力チャネルの数）に応じて、ニューラルエンジン３１４は、異なる入力データに対して異なるシーケンスで動作し、累積器４１４からの異なる値をＭＡＣ回路に戻し、ポストプロセッサ４２８において異なる種類の後処理動作を実行してもよい。ニューラルエンジン３１４の構成要素を所望の形態で動作するように構成するために、ＮＥ制御部４１８は、制御信号をニューラルエンジンの構成要素に送信する。ＮＥ制御部４１８はまた、図５〜図７を参照して詳細に後述するように、ニューラルエンジン３１４で処理されている現在のタスク又はプロセスループを追跡するラスタライザ４３０を含んでもよい。
【００５０】
出力回路４２４は、ポストプロセッサ４２８から処理された値４１７を受信し、データバッファ３１８とインターフェースして、処理された値４１７をデータバッファ３１８に記憶する。この目的のために、出力回路４２４は、出力データ３２８として、順序通りに、若しくは順序通りとは異なる形式で、又は処理された値４１７がポストプロセッサ４２８において処理される形式で、送出してもよい。
【００５１】
ニューラルエンジン３１４内の構成要素は、構成期間中に、ＮＥ制御部４１８及びニューラルタスクマネージャ３１０によって構成されてもよい。この目的のために、ニューラルタスクマネージャ３１０は、構成期間中に、構成情報をニューラルエンジン３１４に送信する。構成可能パラメータ及びモードとしては、入力データ要素とカーネル要素との間のマッピング、入力チャネルの数、出力チャネルの数、出力ストライドの実行、及びポストプロセッサ４２８における後処理動作の有効化／選択、が挙げられるが、これらに限定されない。
ニューラルプロセッサ回路における処理のためのデータのセグメント化の動作
【００５２】
入力データは、典型的には、複数のニューラルエンジン３１４での並列処理のために、より小さいデータ片に分割される。多くの場合、ニューラルネットワークに関連付けられたタスクの出力を生成するために、複数のサイクルの動作が実行される。ＣＰＵ２０８によって実行されるコンパイラは、ニューラルネットワークの階層及びノードを解析し、ニューラルプロセッサ回路２１８のハードウェア制約に基づいて、入力データがどのようにセグメント化されるかを判定する。コンパイラの機能の１つは、ニューラルエンジン３１４における処理のために、入力データをどのように、より小さいデータユニットに分割すべきか、及びタスクに対する結果を生成するために、処理をどのようにループで繰り返すべきか、を判定することである。
【００５３】
図５は、一実施形態に係る、ニューラルプロセッサ回路２１８において入力データを処理するためのループを示す概念図である。最も外側のループは、複数の畳み込みグループを伴うグループ畳み込みが使用される場合、畳み込みグループに対する処理を表す。グループ畳み込みは、各グループ内の入力チャネルの入力データが、各グループの出力チャネルの出力データを生成するためにのみ使用されるが、他のグループの出力チャネルに対する出力データを生成するためには使用されない畳み込みである。したがって、グループ畳み込みの各グループは、別個の畳み込み演算として扱われ得る。
【００５４】
各畳み込みグループのループには、入力データのスライスのための処理ループがある。畳み込み動作のための入力データの全体は、図６に示すように、重なり合う形態で、スライスの複数のストリップにセグメント化される。重なり合う部分６０２、６０４、６０６は、対応するカーネルに対して空間サポートを提供するために、２つの隣接するスライスにおいてオーバーフェッチされた、入力データの部分である。外側から２番目のループは、入力データ内の各スライスに対して畳み込み演算を実行する。スライスのためのループ内には、スライスのタイルのための処理ループがある。各スライスは、図６に示すように、複数のタイルにセグメント化される。重なり合う部分６０８、６１０、６１２、６１４は、対応するカーネルに対して空間サポートを提供するために、２つの隣接するタイルにおいてオーバーフェッチされた、スライス４内の入力データの部分である。最も右側のタイルは、典型的には、スライスの他のタイルよりも小さい幅を有することになる。一実施形態では、各タイルの入力データは、読取りサイクルにおいてデータバッファ３１８上にロードされ、タイルに対する処理ループにおける動作のために再使用される。タイルに対する処理ループ内には、ワークユニットのための処理ループがある。各タイルは、図６に示すように、複数のワークユニットにセグメント化されている。ワークユニットは、計算コア４１６の単一のサイクル中に、ニューラルエンジン３１４の累積器４１４に適合する出力値を生成するサイズを有する、入力データの一部である。各ワークユニットの形状は、図６では水平ストリップとして示されているが、ワークユニットの形状はタイルの形状及びサイズに応じて異なっていてもよい。ワークユニットはまた、対応するカーネルに対してサポートを提供するための、オーバーフェッチされたデータを表す重なり合う部分を有する。特に、スライスの最後のタイルのワークユニットは、タイルが縦長である場合、垂直ストリップの形状を有してもよい。１つ以上の実施形態では、各ワークユニットのサイズは２５６バイトである。このような実施形態では、例えば、ワークユニットは、１６×１６、３２×８、６４×４、１２８×２、又は２５６×１の寸法のうちの１つに形作られる。
【００５５】
各ワークユニットに対して、出力チャネルグループ（output channel group、ＯＣＧ）のための内部処理ループが設けられてもよい。計算コア４１６の単一サイクルによって、所与のワークユニットに対して生成される出力チャネルの数はＯＣＧと称される。動作モードに応じて、各ニューラルエンジン３１４は、入力バッファ回路４０２への入力データの単一のロードに対して、異なる数の出力チャネル（例えば、８チャネル、３２チャネル）の出力データを処理してもよい。
【００５６】
各出力チャネルグループに対して、入力チャネル（input channel、Ｃｉｎ）のための内部処理ループが設けられてもよい。特定の入力データをスキップするように入力ストライドが実装される場合、サブ入力チャネル（sub-input channel、Ｓｕｂ−Ｃｉｎ）のループは、入力チャネル（Ｃｉｎ）に対する処理ループ内に設けられてもよい。
【００５７】
各入力チャネル又は各サブ入力チャネルに対して、カーネルに対する水平空間サポート、及び各水平空間サポート内の垂直サポートを処理するために、内部ループが設けられる。空間サポートは、カーネルとの畳み込みのための入力データを指し、畳み込みを実行するためのオーバーフェッチされた入力データを、入力データの端部に含む。
【００５８】
オーバーフェッチとは、カーネルとの畳み込みのために、入力データの適切な寸法が提供され得るように、現在のスライス、タイル、又はワークユニット内で追加の入力データをフェッチすることを指す。１つ以上の実施形態では、オーバーフェッチは、スライス間において追加の入力データ行を得るために垂直に（図６で、重なり合う部分６０２、６０４、６０６として示される）、タイル間において追加の入力データ列を得るために水平に（図６で、重なり合う部分６０８、６１０、６１２、６１４として示される）、及びタイル内のワークユニット間において追加の入力データ行を得るために垂直に、実行される。
【００５９】
カーネルに対する各空間サポートのために、出力チャネル（output channel、ＯＣ）に対する内部処理ループが設けられて、各出力チャネル（output channel、Ｃｏｕｔ）に対して出力データが生成される。出力ストライドが空間アップサンプリングを実装する場合、各サブ出力チャネルを処理するための追加の内側ループが設けられる。出力ストライドが実装される場合、出力チャネル（ＯＣ）又はサブ出力チャネルのためのループ内でカーネル係数及びＭＡＣ動作のロードが実行されて、出力チャネル（ＯＣ）又はサブ出力チャネルのための出力データが生成される。
【００６０】
図５の入れ子になったループ構造は、単なる例示に過ぎない。ループは、様々な要因に応じて、省略、追加、又は構造化されてもよい。例えば、単一の畳み込みグループのみが使用される場合、最も外側のループを除去してもよい。更に、水平空間サポート及び垂直空間サポートのためのループ構造は反転させてもよい。
【００６１】
１つ以上の実施形態では、図５及び図６を参照して上述したように、入力空間をより小さいユニットに分け、これらのより小さいユニットを処理することに関連付けられた動作は、ニューラルプロセッサ回路２１８の様々な構成要素内のラスタライザ７１４、７１８、７２０、７２２によって実行される。ラスタライザは、入力／出力データのセグメント（例えば、グループ、ワークユニット、入力チャネル、出力チャネル）を追跡し、入力データのセグメントの適切な取り扱いのために、ニューラルプロセッサ回路の構成要素に命令する、ニューラルプロセッサ回路２１８の様々な構成要素内の回路である。例えば、バッファＤＭＡ３２０内のラスタライザ７２０は、システムメモリ２３０から受信したタイル及びスライスを追跡する一方で、データバッファ３１８内のラスタライザ７１８は、ニューラルエンジン３１４による処理のためにワークユニットを順序通りにブロードキャストする。カーネルＤＭＡ３２２内のラスタライザ７２２は、どのカーネルが受信されてニューラルエンジン３１４に分配されるかを判定する一方で、ニューラルエンジン３１４内のラスタライザ７１４は、入力バッファ回路４０２内のシフタ４１０を動作させて、入力データの正しい部分４０８をＭＡＣ４０４に送達し、最終出力データ３２８をデータバッファ３１８に送信する。
【００６２】
図７は、一実施形態に係る、ニューラルプロセッサ回路２１８の構成要素３１４、３１８、３２０、３２２内のラスタライザ７１４、７１８、７２０、７２２のプログラミングを示す図である。それらの機能を実行するために、ラスタライザ７１４、７１８、７２０、７２２の各々は、入力データ及び／又はカーネルデータがニューラルプロセッサ回路２１８の各構成要素によって、どのようにセグメント化されるべきか、並びにどのように取り扱われるべきかを示すタスク情報７１０（例えば、構成データ）を受信する。タスク情報は、現在の層の詳細に関する情報（例えば、入力データ及び出力データの寸法、関連付けられたカーネルの寸法、入力データの境界におけるパディングの種類）を含む。ラスタライザ７１４、７１８、７２０、及び７２２はまた、それらの動作における制約（例えば、閾値を超えるタイル幅を許可するか又は許可しないか）を受信してもよい。
【００６３】
ニューラルプロセッサ回路２１８の異なる構成要素内にラスタライザを設けることにより、ニューラルプロセッサ回路２１８の構成要素間で伝達されるデータにおけるオーバーヘッドを減らすことができる。ニューラルプロセッサ回路２１８の異なる構成要素を制御するために単一の中央ラスタライザが設けられる場合、これらのデータには、畳み込みグループ、タイル、スライス、ワークユニット、入力チャネル、及び出力チャネルなどのタスクのループ内の関連付けられた位置を識別するために、構成要素間で伝達されるカーネルデータ、入力データ、及び出力データが必要であり得る。分散ラスタライザを使用することにより、カーネルデータ、入力データ、及び出力データを、ニューラルプロセッサ回路２１８の構成要素間で伝達するための別個のメタデータは必要とされない。
ニューラルエンジンアーキテクチャにおける例示的プロセス
【００６４】
図８は、一実施形態に係る、ニューラルプロセッサ回路２１８において入力データを処理する方法を示すフローチャートである。本方法は、異なる及び／若しくは追加のステップを含んでもよく、又はステップは異なる順序であってもよい。
【００６５】
ニューラルタスクマネージャ３１０がラスタライザ７１４、７１８、７２０、７２２をプログラムした後、バッファＤＭＡ３２０を動作させるプロセスは、システムメモリ２３０からの入力データのタイルをバッファＤＭＡ３２０に受信させるように、ラスタライザ７２０がバッファＤＭＡ３２０に命令する（８０４）ことによって開始される。バッファＤＭＡ３２０によって受信されたタイルは、データバッファ３１８に記憶される（８０６）。
【００６６】
データバッファ３１８内のラスタライザ７１８は、次いで、データバッファ３１８に、１つ以上のニューラルエンジン３１４にワークユニットを送信するように命令する（８０８）。次いで、ワークユニットは、１つ以上のニューラルエンジン３１４の入力バッファ回路４０２に記憶される。
【００６７】
１つ以上の実施形態では、入力バッファ回路４０２は、乗算−累積演算を実行するために、ＭＡＣ４０４に送信されるワークユニットの一部を選択する（８１６）。次いで、ＭＡＣ４０４は、対応するカーネルを使用して、ワークユニットの選択された部分に対して乗算−累積演算を実行する（８２０）。次いで、ワークユニット全体が１つ以上のニューラルエンジン３１４において処理されているかどうかを判定する（８２４）。判定がいいえの場合、ワークユニットの選択された部分はシフタ４１０によってシフトされ（８２８）、乗算−累積演算を再度実行する（８２０）。
【００６８】
ワークユニット全体が処理されたと判定された（８２４）場合、次に進み、タイル内の全てのワークユニットが処理されたかどうかを判定する（８３２）。判定がいいえの場合、プロセスは、データバッファ３１８に、次のワークユニットを１つ以上のニューラルエンジン３１４に送信させる（８０８）ことにより、次のワークユニットに進み（８３６）、後続のプロセスを繰り返す。
【００６９】
タイル内の全てのワークユニットがニューラルエンジン３１４によって処理されたと判定された（８３２）場合、プロセスは進み、入力データの全てのタイルが処理されたか否かを判定する（８４０）。判定がいいえの場合、プロセスは、ラスタライザ７２０に、システムメモリ２３０から次のタイルを受信するようにバッファＤＭＡ３２０に命令（８０４）させることにより、次のタイルに進み（８４４）、後続のプロセスを繰り返す。
【００７０】
入力データの全てのタイルが処理されたと判定された（８４０）場合、現在の入力データについてのプロセスは終了する。次いで、次の入力データを処理するためにプロセスが繰り返されてもよく、又は次のタスクに進んでもよい。
【００７１】
図８を参照して上述したようなプロセスの実施形態は、単なる例示に過ぎない。図５を参照して上述したように、更なるループを実施してもよい。その上、プロセスのシーケンスは修正されてもよく、又は省略されてもよい。
例示的なニューラルタスクマネージャアーキテクチャ
【００７２】
ニューラルネットワークは、ニューラルプロセッサ回路２１８によって実行される一連のタスクとしてインスタンス化又は実装されるネットワーク層又はサブ層を含み得る。図９は、一実施形態に係る、タスクのリスト９０４によって表されるニューラルネットワーク９００を示す概略ブロック図である。ニューラルネットワーク９００は、畳み込み層Ｃ１、Ｃ２、Ｃ３（サブ層Ｃ３00、Ｃ３10、Ｃ３11、Ｃ３20、及びＣ３21を含む）、Ｃ５、及びＣ６、並びにプーリング層Ｐ２及びＰ４を含むネットワーク層（又はサブ層）を含む。ニューラルネットワーク９００は、ニューラルプロセッサ回路２１８によってインスタンス化され得るニューラルネットワークアーキテクチャの一例である。すなわち、ニューラルネットワーク９００が変換されてタスクリスト９０４になり、ニューラルプロセッサ回路２１８によって実行可能となった場合である。異なる種類のネットワーク層又は異なる順序のネットワーク層を有する他の種類のニューラルネットワークアーキテクチャもまた、ニューラルプロセッサ回路２１８によってインスタンス化されてもよい。
【００７３】
ニューラルネットワーク９００は、例えばＣＰＵ２０８によって、タスクリスト９０４に変換される。タスクリスト９０４は、タスクＣ１、タスクＣ２＋Ｐ２、タスクＣ３00＋Ｐ４、タスクＣ３10、タスクＣ３11＋Ｐ４、タスクＣ３20、タスクＣ３21＋Ｐ４、タスクＣ５a、タスクＣ５b、及びタスクＣ６を含むタスクのシーケンスを定義する線形リンクリストを含む。各タスクは、タスクを実行するための、ニューラルプロセッサ回路２１８の構成を定義するタスク記述子と関連付けられる。各タスクは、ニューラルネットワーク９００の単一ネットワーク層、ニューラルネットワーク９００のネットワーク層の一部、又はニューラルネットワーク９００の複数のネットワーク層に対応してもよい。例えば、タスクＣ１は単一のネットワーク層Ｃ１に対応し、タスクＣ２＋Ｐ２は複数のネットワーク層Ｃ２及びＰ２に対応し、タスクＣ５a及びＣ５bはそれぞれ、ネットワーク層Ｃ５の一部に対応する。ニューラルプロセッサ回路２１８は、ニューラルタスクマネージャ３１０の制御下でタスクリスト９０４のタスクを実行することによって、ニューラルネットワーク９００をインスタンス化する。
【００７４】
図１０は、一実施形態に係る、ニューラルタスクマネージャ３１０を示すブロック図である。ニューラルタスクマネージャ３１０は、ニューラルプロセッサ回路２１８による、１つ以上のニューラルネットワーク９００に対するタスクの実行を管理する。ニューラルタスクマネージャ３１０は、他の構成要素の中でもとりわけ、タスクアービタ１００２、タスクキュー１００４Ａ〜１００４Ｎ（以下、総称して「タスクキュー１００４」と称され、個別に「タスクキュー１００４」とも称される）、タスクマネージャダイレクトメモリアクセス（ＤＭＡ）１００６、フェッチキュー１００８、及び構成キュー１０１０を含んでもよい。ニューラルタスクマネージャ３１０は、図１０に示されていない他の構成要素を含んでもよい。
【００７５】
タスクアービタ１００２は、ニューラルプロセッサ回路２１８によって実行される、タスクキュー１００４からタスクを選択する回路であるか、又は回路とファームウェアとの組み合わせである。タスクアービタ１００２は、タスクキュー１００４からタスクをデキューし、タスクを構成キュー１０１０内に置く。タスクが構成キュー内にある間に、そのタスクは実行がコミットされ、ニューラルプロセッサ回路は、タスクがニューラルプロセッサ回路２１８の他の構成要素によって実行される前に、入力データ及びカーネルデータに対してプリフェッチを実行する。例えば、タスクアービタ１００２は、複数のタスクキュー１００４の間で固定優先度のアービトレーションを実行し、タスクマネージャＤＭＡ１００６によるシステムメモリ２３０からのタスク記述子１０１２の取得のために、最も高い優先度を有するタスクを、タスクキュー１００４から選択してもよい。
【００７６】
ニューラルタスクマネージャ３１０は、１つ以上のタスクキュー１００４を含んでもよい。各タスクキュー１００４は、ＣＰＵ２０８及びタスクアービタ１００２に結合されている。各タスクキュー１００４は、ニューラルプロセッサ回路２１８によって実行された場合、ニューラルネットワーク９００をインスタンス化するタスクのタスクリスト９０４への参照をＣＰＵ２０８から受信する。各タスクキュー１００４に記憶された参照は、システムメモリ２３０内のタスク記述子１０１２のタスクリスト９０４を指す１組のポインタ及びカウンタを含んでもよい。各タスクキュー１００４は、タスクキュー１００４の相対優先度を定義する優先度パラメータに更に関連付けられてもよい。タスクのタスク記述子１０１２は、タスクを実行するための、ニューラルプロセッサ回路２１８の構成を指定する。
【００７７】
タスクマネージャＤＭＡ１００６は、タスクアービタ１００２、システムメモリ２３０、及びフェッチキュー１００８に結合されている。タスクマネージャＤＭＡ１００６は、フェッチキュー１００８に記憶するためのソース（例えば、システムメモリ２３０）からタスクのタスク記述子１０１２を受信する読み出し回路を含む。例えば、タスクアービタ１００２は、タスクキュー１００４の優先度に応じてタスクキュー１００４を選択し、選択されたタスクキュー１００４によって参照されるタスクリスト９０４を使用して、タスクマネージャＤＭＡ１００６を制御して、タスクのタスク記述子１０１２を選択する。
【００７８】
フェッチキュー１００８は、実行するコミットが保留中であるタスクのタスク記述子１０１２を記憶する単一のエントリキューである。フェッチキュー１００８は、タスクマネージャＤＭＡ１００６に結合されて、タスク記述子１０１２をシステムメモリ２３０から受信し、タスク記述子１０１２を構成キュー１０１０に提供するか、又はタスク記述子１０１２から抽出された構成データ１０１４を構成キュー１０１０に提供する。
【００７９】
構成キュー１０１０は、実行がコミットされている複数のタスクの構成データ１０１４を保持する。タスクが構成キュー１０１０内にある場合、カーネルＤＭＡ３２４は、システムメモリ２３０からカーネルデータをフェッチして、ニューラルエンジン３１４のカーネル抽出回路４３２に記憶させてもよく、バッファＤＭＡ３２０は、システムメモリ２３０から入力データをフェッチしてデータバッファ３１８に記憶させてもよい。タスクを実行するために、カーネル抽出回路４３２は、プリフェッチされたカーネルデータをニューラルエンジン３１４のＭＡＣ４０４に提供し、データバッファ３１８は、プリフェッチされた入力データをニューラルエンジン３１４のＭＡＣ４０４に提供する。いくつかの実施形態では、構成キュー１０１０は、コミットされたタスク記述子１０１２から抽出された構成データ１０１４を保持する複数のキューを含んでもよい。図１３に関連してより詳細に論じたように、構成キュー１０１０は、ニューラルプロセッサ回路２１８の他の構成要素に更に結合されて、構成データ１０１４に応じてニューラルプロセッサ回路２１８を構成する。
【００８０】
図１１は、一実施形態に係る、タスクキュー１００４を使用したタスク記述子１０１２の取得を示す図である。タスクキュー１００４は、システムメモリ２３０に記憶されたタスク記述子１０１２Ａ〜１０１２Ｎへの参照、例えば１組のポインタを含む。その目的のために、タスクキュー１００４は、ヘッドパラメータ１１０２、ネットワーク識別子（network identifier、ＩＤ）１１０４、ベースアドレスインデックス１１０６、テールパラメータ１１０８、カウントパラメータ１１１０、及び優先度パラメータ１１１２を記憶するメモリを含んでもよい。ヘッドパラメータ１１０２は、タスクキュー１００４のヘッドにある、タスク記述子１０１２Ａを記憶するシステムメモリ２３０の場所へのポインタである。ネットワークＩＤ１１０４は、タスクキュー１００４のヘッドにあるタスク記述子１０１２のニューラルネットワーク９００を識別し、ベースアドレスインデックス１１０６は、タスクキュー１００４のヘッドにあるタスク記述子１０１２ＡのネットワークＩＤ１１０４でタグ付けされたベースアドレステーブル１１１４へのインデックスである。カウントパラメータ１１１０は、タスクキュー１００４内のタスク記述子１０１２の数を定義する。優先度パラメータ１１１２は、タスクキュー１００４の優先度を定義し、これをタスクアービタ１００２が使用して複数のタスクキュー１００４の間から選択する。
【００８１】
特定のタスクキュー１００４が（例えば、優先度パラメータ１１１２に応じて）選択された場合、タスクアービタ１００２は、ヘッドパラメータ１１０２、ネットワークＩＤ１１０４、ベースアドレスインデックス１１０６、及びベースアドレステーブル１１１４を参照して、システムメモリ２３０からタスク記述子１０１２を取得し、タスク記述子１０１２をフェッチキュー１００８内に配置して、タスク実行のコミットメントを開始する。各構成期間において、タスクアービタ１００２は、次のタスク記述子１０１２Ｂを取得することなどによって、タスクキュー１００４のタスクリスト９０４によって定義されたタスクの順序に応じて、タスク記述子１０１２をフェッチキュー１００８内に配置し続けてもよい。
【００８２】
図１２は、一実施形態に係る、タスク記述子１０１２を示す図である。タスクアービタ１００２は、システムメモリ２３０からのタスク記述子１０１２をフェッチキュー１００８内に配置し、タスク記述子１０１２は次いで、構成キュー１０１０に転送される。構成キュー１０１０内で優先度が最も高い（例えば、最初に入力される）タスク記述子１０１２を使用して、構成期間中に、実行のためにニューラルプロセッサ回路２１８を構成する。タスク記述子１０１２は、タスク記述子ヘッダ１２０２と、アドレスデータ１２０４Ａ〜１２０４Ｎ（以下、「アドレスデータ１２０４」と称する）とを含む構成データ１０１４を含む。タスク記述子ヘッダ１２０２は、タスク選択及びタスク切替えに関する動作を含む、ニューラルタスクマネージャ３１０の様々な動作を構成する構成データ１０１４を含む。例えば、タスク記述子ヘッダ１２０２は、タスクアービタ１００２によってパースされて、ニューラルタスクマネージャ３１０及びニューラルプロセッシング回路２１８の他の構成要素をプログラムする構成データ１０１４を抽出してもよい。タスク記述子ヘッダ１２０２は、タスクを識別するタスク識別子（ＩＤ）１２０６と、タスクによってインスタンス化されたニューラルネットワーク９００を識別するニューラルネットワーク識別子（ＩＤ）１２０８と、タスクの実行後に、ニューラルタスクマネージャ３１０がタスク切替えを起動すべきか否かを定義するタスク切替えパラメータ１２１０（例えば、異なるタスクキュー１００４のタスクを実行するために）と、タスクに対する入力データがシステムメモリ２３０又はデータバッファ３１８から取得されるべきか否かを定義する入力表面パラメータ１２１２と、タスクの出力データがシステムメモリ２３０又はデータバッファ３１８に記憶されるべきか否かを定義する出力表面パラメータ１２１４と、ニューラルプロセッサ回路２１８のプログラミングを促進するための様々な（例えば、ベースアドレス）ポインタ１２１６と、イベント、例外、又はデバッグログを制御する１つ以上のデバッグ／例外パラメータ１２１８と、を含んでもよい。
【００８３】
（総称して又は個別に「アドレスデータ１２０４」と称される）アドレスデータ１２０４Ａ〜１２０４Ｎの各インスタンスは、ニューラルプロセッサ回路２１８の構成要素をプログラムするために使用されるアドレス及びデータペイロードペアを定義する。データペイロードは、タスクを実行するために使用される入力データ及びカーネルデータを含んでもよい。例えば、アドレスデータ１２０４の各インスタンスは、データペイロードを定義するレジスタデータと、レジスタデータを受信するための、ニューラルプロセッシング回路２１８の宛先メモリ場所を定義するレジスタアドレスと、レジスタデータで書き込まれる連続したメモリ場所（例えば、レジスタ）を定義するレジスタカウントとを含む。いくつかの実施形態では、レジスタアドレスは、ヘッダ１２０２に記憶されたベースアドレスと組み合わされて、各メモリ場所のフルアドレスを定義する。タスク記述子１１１６がコンパイル時に生成される場合、実際のランタイムアドレスは既知でなくてもよい。ベースアドレステーブル１１１４は、全てのタスク記述子が、動的に割り当てられたアドレスで複製又は更新されることを回避するために使用される。
【００８４】
図１３は、一実施形態に係る、フェッチキュー１００８及び構成キュー１０１０を示すブロック図である。構成キュー１０１０はフェッチキュー１００８に結合され、フェッチキュー１００８はタスクマネージャＤＭＡ１００６を介してシステムメモリ２３０に結合される。構成キュー１０１０は、１つ以上のニューラルエンジン３１４のラスタライザ７１４、データバッファ３１８のラスタライザ７１８、バッファＤＭＡ３２０のラスタライザ７２０、及びカーネルＤＭＡ３２２のラスタライザ７２２に更に結合される。フェッチキュー１００８は、保留中であって実行がコミットされていないタスクに対するタスク記述子１０１２（例えば、タスク記述子ヘッダ１２０２、及びアドレスデータ１２０４Ａ〜１２０４Ｎを含む）を記憶する。フェッチキュー１００８は、次のタスク記述子１０１２をシステムメモリ２３０から構成キュー１０１０の中に読み込むレイテンシを低減させる。フェッチキュー１００８は、タスクアービタ１００２によって決定された、優先度が最も高いタスク記述子１０１２を記憶する。タスクアービタ１００２は、より高い優先度のタスク記述子１０１２が（例えば、より高い優先度のタスクキュー１００４から）エンキューされている場合に、フェッチキュー１００８に記憶されているタスク記述子１０１２を置換してもよい。フェッチキュー１００８内のタスク記述子１０１２は、入力データ又はカーネルのプリフェッチを開始せず、タスクキュー優先度、ポインタ、又はカウンタに影響を与えない。よって、フェッチキュー１００８内のタスク記述子１０１２は、より高い優先度のタスク記述子１０１２をフェッチキュー１００８に書き込むことによって、より高い優先度のタスク記述子１０１２によって容易に置換されてもよい。構成キュー１０１０に記憶されたタスク記述子１０１２がニューラルプロセッサ回路２１８によって実行された場合、フェッチキュー１００８に記憶されたタスク記述子１０１２は、構成キュー１０１０に転送され、後続のタスクの別のタスク記述子１０１２がフェッチキュー１００８に記憶されてもよい。
【００８５】
構成キュー１０１０は、ニューラルプロセッサ回路２１８による実行がコミットされたタスクのタスク記述子１０１２を記憶する。いくつかの実施形態では、構成キュー１０１０は複数の別個のキュー１３１０を含み、キュー１３１０の各々が、タスク記述子１０１２から抽出された構成データ１０１４（構成データ１０１４Ａ〜１０１４Ｅを含む）の一部を記憶する。更に、キュー１３１０は各々がニューラルプロセッサ回路２１８の対応する構成要素に結合されて、その構成要素を構成データ１０１４でプログラムする。構成キュー１０１０の動作を通して、ニューラルタスクマネージャ３１０は、ラスタライザ７１４、７１８、７２０、７２２をプログラムして、図７及び図８で上述した機能を実行させる。例えば、キュー１３１０Ａは、ニューラルエンジン３１４のラスタライザ７１４に結合されて、入力バッファ回路４０２内のシフタ４１０の動作を制御して、入力データの正しい部分４０８をＭＡＣ４０４に送達し、最終出力データ３２８をデータバッファ３１８に送信する構成データ１０１４Ａを提供する。キュー１３１０Ｂは、データバッファ３１８のラスタライザ７１８に結合されて、ニューラルエンジン３１４による処理のために、データバッファ３１８による入力データ（例えば、ワークユニット）のブロードキャストを制御する構成データ１０１４Ｂを提供する。キュー１３１０Ｃは、バッファＤＭＡ３２０のラスタライザ７２０に結合された読取りキューであり、バッファＤＭＡ３２０を制御して、システムメモリ２３０から入力データ（例えば、タイル）を取得し、入力データをデータバッファ３１８に記憶する構成データ１０１４Ｃを提供する。キュー１３１０Ｄは、バッファＤＭＡ３２０のラスタライザ７２０に結合された書き込みキューであり、バッファＤＭＡ３２０を制御して、出力データをシステムメモリ２３０に記憶する構成データ１０１４Ｄを提供する。キュー１３１０Ｅは、カーネルＤＭＡ３２２のラスタライザ７２２に結合されて、どのカーネルが受信されてニューラルエンジン３１４に分配されるかを制御する構成データ１０１４Ｅを提供する。いくつかの実施形態では、構成キュー１０１０に記憶されたタスク記述子１０１２又は構成データ１０１４を置換することはできず、ファーストイン、ファーストアウト（ＦＩＦＯ）の順序で実行されることになる。
ニューラルタスクマネージャアーキテクチャにおける例示的プロセス
【００８６】
図１４は、一実施形態に係る、ニューラルプロセッサ回路２１８においてタスクを管理する方法を示すフローチャートである。本方法は、異なる及び／若しくは追加のステップを含んでもよく、又はステップは異なる順序であってもよい。
【００８７】
ＣＰＵ２０８は、ニューラルプロセッサ回路２１８によって実行された場合、ニューラルネットワーク９００をインスタンス化するタスクのタスク記述子１０１２のタスクリスト９０４を生成する（１４０２）。例えば、ＣＰＵ２０８は、機械学習動作のための入力データを、画像センサ２０２、システムメモリ２３０、永続的記憶装置２２８、ネットワークインターフェース２１０、又は何らかの他の構成要素から受信してもよい。機械学習動作は、推論動作又は訓練動作を含んでもよい。ニューラルネットワーク９００は、カーネルデータ、及びネットワーク層を含むニューラルネットワークアーキテクチャを含んでもよい。入力データはニューラルネットワーク９００に適用されて、機械学習動作が実行される。ニューラルネットワーク９００のカーネルデータ及びネットワーク層は、機械学習訓練プロセスにて計算されてもよい。ＣＰＵ２０８は、コンパイル動作（オフライン又はオンザフライ）を実行して、ニューラルネットワーク記述９００を、本明細書ではタスクリスト９０４と称される、タスク記述子１０１２のリンクリストに変える。各タスクはタスク記述子１０１２によって定義され、ニューラルプロセッサ回路２１８によって実行された場合、単一のネットワーク層、複数のネットワーク層、又はネットワーク層の一部をインスタンス化する。タスクの各タスク記述子１０１２は、タスク記述子ヘッダ１２０２などの構成データ１０１４と、ニューラルプロセッサ回路２１８アドレス及びデータペイロードペアを定義するアドレスデータ１２０４と、を含む。データペイロードは、ニューラルネットワーク９００のカーネルデータと、入力データとを含んでもよい。構成データ１０１４は、タスクを実行するためにラスタライザ７１４、７１８、７２０、及び７２２の動作を構成する命令を更に含む。
【００８８】
ＣＰＵ２０８は、タスク記述子１０１２のタスクリスト９０４をシステムメモリ２３０に記憶する（１４０４）。いくつかの実施形態では、ＣＰＵ２０８、又は電子デバイス１００の外部の別のＣＰＵが、タスク記述子１０１２を生成し、そのタスク記述子１０１２を永続的記憶装置２２８又は何らかの他の不揮発性メモリに記憶させる。タスク記述子１０１２は、ニューラルプロセッサ回路２１８による使用のために、システムメモリ２３０内のカーネルデータ及び入力データと共にロードされる。ＣＰＵ２０８は、バス２３２及びメモリコントローラ２２２を介してシステムメモリ２３０に結合されてもよい。
【００８９】
タスクリスト９０４は、システムメモリ２３０内のタスク記述子１０１２の場所を参照する１組のポインタを含んでもよい。更に、ＣＰＵ２０８は、メモリアドレス又はネットワークＩＤなどのタスク記述子１１０２のパラメータを更新してもよい。例えば、タスクリスト９０４は、複数のタスク記述子１０１２が記憶されているシステムメモリ２３０の開始レジスタアドレス及び終了レジスタアドレスをそれぞれ定義する、ヘッドパラメータ１１０２及びテールパラメータ１１０８を含んでもよい。いくつかの実施形態では、タスクリスト９０４内のレジスタアドレスへの参照は部分アドレスであってもよく、システムメモリ２３０へのフル参照アドレスを定義するためにベースアドレステーブル１１１４が使用される。いくつかの実施形態では、ＣＰＵ２０８は、必要に応じて絶対アドレスをパッチしてもよい。ＣＰＵ２０８は、そのベースアドレスレジスタを設定することによって、ニューラルプロセッサ回路２１８を更に構成してもよい。
【００９０】
ニューラルタスクマネージャ３１０のタスクアービタ１００２は、ニューラルプロセッサ回路２１８によって実行されるタスクリスト９０４をエンキューする（１４０６）。例えば、ニューラルタスクマネージャ３１０は、複数のタスクキュー１００４Ａ〜１００４Ｎを含む。タスクキュー１００４は各々が、タスクリスト９０４への参照を記憶してもよい。更に、タスクキュー１００４は、タスクキュー１００４によって参照されるタスクリスト９０４の優先度パラメータ１１１２に応じて実行されるように優先順位付けされる。
【００９１】
いくつかの実施形態では、ＣＰＵ２０８は、タスクを実行するために、ニューラルプロセッサ回路２１８の一般的な構成を実行する。ニューラルプロセッサ回路２１８が既に動作していない場合、ＣＰＵ２０８は、ニューラルプロセッサ回路２１８を更に開始してもよい。
【００９２】
タスクアービタ１００２は、実行のための最も高い優先度を有するタスクキューを選択する（１４０８）。例えば、タスクアービタ１００２は、各プログラミング期間中に、タスクキュー１００４の優先度パラメータの比較又はタスクキュー１００４のタスクリスト９０４の比較に基づいてタスクキュー１００４を選択し、タスクリスト９０４からのタスクを、優先度が最も高いタスクキュー１００４から実行する。
【００９３】
ニューラルプロセッサ回路２１８は、選択されたタスクキューからタスクを実行する（１４１０）。例えば、ニューラルプロセッサ回路２１８は、タスクを実行するために図８の方法を実行する。ニューラルタスクマネージャ３１０の構成キュー１０１０は、図７に示すように、ニューラルプロセッサ回路２１８のラスタライザ７１４、７１８、７２０、７２２に構成データ１０１４（又はタスク情報７１０）を提供して、ニューラルプロセッサ回路２１８をプログラムして、タスクを実行させてもよい。更に、タスクの実行は、タスクが構成キュー１０１０内にある間に、プリフェッチされたカーネルデータ及び入力データを処理することを含んでもよい。各タスクの実行は、図５及び図６に示すように、入力データを取り扱うための複数の処理ループを含んでもよい。タスクアービタ１００２は、タスクの実行後に、構成キュー１０１０からのタスクをデキューしてもよい。
【００９４】
いくつかの実施形態では、タスクを実行するために、タスクアービタ１００２は、タスクマネージャＤＭＡ１００６を制御して、タスクリスト９０４のタスクのタスク記述子１０１２を取得し、タスク記述子１０１２をフェッチキュー１００８に記憶する。以前にコミットされたタスクの実行後、タスクアービタ１００２は、タスクのタスク記述子又は構成データを構成キュー１０１０から除去することによって、実行されたタスクをデキューしてもよい。次に、現在のタスクのタスク記述子１０１２又は抽出された構成データ１０１４は次いで、フェッチキュー１００８から構成キュー１０１０に配置される。タスクが構成キュー１０１０内にある場合、ニューラルプロセッサ回路２１８は、システムメモリ２３０からカーネル抽出回路４３２へのカーネルデータに対する、カーネルＤＭＡ３２４によるプリフェッチ動作と、システムメモリ２３０からデータバッファ３１８への入力データに対する、バッファＤＭＡ３２０によるプリフェッチ動作とを開始してもよい。
【００９５】
異なるタスクキューがより高い優先度を有する場合、より高い優先度を有するタスクキューへのタスク切替えが、可能な場合に実行されてもよい。（例えば、別の機械学習動作への）タスク切替えを実行するために、タスクアービタ１００２は、フェッチキュー１００８内のタスクを、異なるタスクキュー１００４において参照されている別のタスク記述子で置換する。タスクアービタ１００２は、置換されたタスクをフェッチキュー１００８に記憶させることによって、タスク切替えの完了後に、タスクリスト９０４によって定義された中断された機械学習動作を再開してもよい。
【００９６】
いくつかの実施形態では、ＣＰＵ２０８は、タスクリスト９０４の優先度パラメータ１１１０を判定して（１４０８）、タスクキューを選択する。優先度パラメータ１１１０は、機械学習動作のそのタスクの優先度を、ニューラルプロセッサ回路２１８によって実行される他の機械学習動作の他のタスクと比較して定義する。ＣＰＵ２０８は、複数の機械学習動作の実行を促進させてもよい。機械学習動作は、異なる入力データ又は異なるニューラルネットワークアーキテクチャ、及びカーネルデータを使用することなどによって、異なる場合がある。ＣＰＵ２０８は、タスクリスト９０４の優先度パラメータを、プログラム的に又はユーザ入力に基づいて判定することができる。最も高い優先度を有するタスクキュー１００４によって参照されるタスク記述子１０１２が、実行のために選択されてもよい。タスクキューの優先度は、ＣＰＵ２０８によって判定されるか、又は以前に実行されたタスク記述子からの情報によって動的に判定される。
【００９７】
タスクアービタ１００２は、タスクリスト９０４の全てのタスクが実行されたか否かを判定する（１４１２）。タスクリスト９０４のタスクが実行されていない場合、プロセスはステップ１４１０に戻り、そこで、タスクアービタ１００２は、タスクリスト９０４の実行されていないタスクを実行する。
【００９８】
タスクリスト９０４の各タスクが実行されている場合、タスクアービタ１００２は、タスクリスト９０４をタスクキュー１００４から除去する（１４１４）。別の実施例では、タスクのタスク記述子１０１２への参照は、タスクの実行後にタスクキュー１００４から除去されてもよい。プロセスは終了してもよい。別の実施例では、このプロセスは１４０２に戻ってもよく、そこでは、ＣＰＵ２０８が、他の機械学習動作のためのタスクのタスク記述子を生成し続けてもよい。その意味では、プロセスは、ニューラルプロセッサ回路２１８による機械学習動作の実行のために、指定されたタスク優先度に応じてタスクをタスクキューに配置するように繰り返されてもよい。
【００９９】
特定の実施形態及び用途が例示及び記載されてきたが、本発明は、本明細書に開示される厳密な構造及び構成要素に限定されず、本開示の趣旨及び範囲から逸脱することなく、当業者には明らかであろう様々な修正、変更、及び変形が、本明細書に開示される方法及び装置の構成、動作、並びに詳細になされてもよいことを理解されたい。
【図１】
2021520572.tif 000003
【図２】
2021520572.tif 000004
【図３】
2021520572.tif 000005
【図４】
2021520572.tif 000006
【図５】
2021520572.tif 000007
【図６】
2021520572.tif 000008
【図７】
2021520572.tif 000009
【図８】
2021520572.tif 000010
【図９】
2021520572.tif 000011
【図１０】
2021520572.tif 000012
【図１１】
2021520572.tif 000013
【図１２】
2021520572.tif 000014
【図１３】
2021520572.tif 000015
【図１４】
2021520572.tif 000016
【国際調査報告】
2021520572.tif 000017
2021520572.tif 000018
2021520572.tif 000019