(57)【特許請求の範囲】
【請求項１】
二次元画像の特徴を検出するプロセッサ実行方法であって、
第１画像の画素を表す第１画像データを、並列処理システム内のデータメモリのセットに記憶することであって、前記並列処理システムは、命令パイプラインによって接続された同一の複数のデータプロセッサの行を備え、前記命令パイプラインは、前記複数のデータプロセッサのうち第１プロセッサから隣接するデータプロセッサの各々へ命令を順次搬送するように構成されており、前記データプロセッサの各々は、前記データメモリのセットの各々のデータメモリを備え、前記データメモリの各々は、同一の記憶容量の複数のメモリ領域を含むように分割されており、前記第１画像の連続する垂直スライスを表すデータを、前記並列処理システムの前記データメモリの各隣接メモリ領域に記憶することを含む、ことと、
前記並列処理システムに接続されたホストプロセッサのメモリに、重み行列のセットを表す重みデータを含む特徴カーネルデータを記憶することと、
前記第１画像内の複数の選択された画素の各々について、前記選択された画素を含む二次元画素領域に亘って畳み込みのセットを実行することであって、前記畳み込みのセットの各畳み込みは、前記重み行列のセットの各行列を用いて実行される、ことと、前記重み行列の各々について、前記選択された画素に対応する特徴マップ画素を生成するために、各畳み込みの結果に非線形関数を適用することと、
前記重み行列の各々について、前記特徴マップ画素の全てを含む特徴マップを記憶することであって、前記特徴マップの個別の画素を表すデータを、前記並列処理システムの前記データメモリの各々のメモリ領域に記憶することを含み、特徴マップの各画素について、全ての前記重み行列を用いて生成された前記特徴マップの各々からの前記対応する画素を表すデータが同じメモリ領域に記憶され、前記特徴マップを処理して、特定の特徴又は特徴のクラスが前記第１画像内で検出されたか否かを決定する、ことと、を含む、
方法。
【請求項２】
前記特徴カーネルデータは、前記重み行列セットの各重み行列に関連するバイアス値を表すバイアスデータをさらに含み、
前記畳み込みセットの各畳み込みは、前記重み行列セットの各重み行列に関連するバイアス値を用いて実行される、請求項１に記載の方法。
【請求項３】
前記複数の選択された画素の各々について畳み込みのセットを実行することは、前記並列処理システムの隣接するデータプロセッサにおいて前記畳み込みのセットを実行するための命令を順次実行することを含み、
前記並列処理システムの隣接するデータプロセッサにおいて前記命令を順次実行する単一の反復は、前記第１画像の１つの水平行内の全ての選択された画素に対して前記畳み込みのセットを実行することを含む、請求項１に記載の方法。
【請求項４】
前記複数の選択された画素は、整数サブサンプリング係数ｎによって定義された画素数だけ、前記第１画像内の水平方向及び垂直方向に離間した画素から構成されている、請求項３に記載の方法。
【請求項５】
前記並列処理システムの隣接するデータプロセッサにおいて前記命令を順次実行する単一の反復は、前記第１画像のｎ個の水平行内の全ての選択された画素に対して前記畳み込みのセットを実行することを含み、
前記ｎ個の水平行は、ｎ画素離れた一連の水平行内で隣接する行である、請求項４に記載の方法。
【請求項６】
前記特徴マップを記憶することは、隣接するデータプロセッサにおいて前記命令を順次実行する単一の反復の間に、
前記第１画像の前記ｎ個の水平行のうち最上位にある選択された画素に対応する特徴マップ画素を、前記並列処理システム内のデータプロセッサの隣接メモリ領域の第１グループに記憶することであって、前記隣接メモリ領域の第１グループは、前記並列処理システムの前記命令パイプラインの先頭に最も近い位置にあるデータプロセッサ内に存在する、ことと、
前記第１画像の前記ｎ個の水平行の次の下位行で選択された画素に対応する特徴マップ画素を、前記隣接メモリ領域の第１グループに隣接する、隣接メモリ領域の次のグループに記憶することであって、前記隣接メモリ領域の次のグループは、前記並列処理システムの前記命令パイプラインに沿って配置されたデータプロセッサ内に存在する、ことと、
前記ｎ個の水平行の追加の下位行で選択された画素に対応する特徴マップ画素を、前記並列処理システムの前記命令パイプラインに沿って配置されたデータプロセッサ内の隣接メモリ領域の連続グループに記憶することと、を含む、請求項５に記載の方法。
【請求項７】
前記特徴マップを記憶することは、隣接するデータプロセッサにおいて前記命令を順次実行する単一の反復の間に、
前記ｎ個の水平行の各々における第１の選択された画素に対応する第１の一連のｎ個の特徴マップ画素の各々を、前記ｎ個の水平行の最上位から最下位まで順に、前記並列処理システムの前記命令パイプラインの先頭に最も近い位置にある前記データプロセッサの第１メモリ領域から始まる、前記並列処理システム内の前記データプロセッサの各々の隣接メモリ領域に記憶することと、
前記ｎ個の水平行の各々における第２の選択された画素に対応する第２の一連のｎ個の特徴マップ画素の各々を、前記ｎ個の水平行の最上位から最下位まで順に、前記第１の一連の特徴マップ画素内の最後の特徴マップ画素を記憶するメモリ領域の直後の前記メモリ領域から始まる、前記並列処理システム内の前記データプロセッサの各々の隣接メモリ領域に記憶することと、
前記ｎ個の水平行の各々における追加の選択された画素に対応する追加の一連のｎ個の特徴マップ画素の各々を、前記ｎ個の水平行の最上位から最下位まで順に、直前の一連の特徴マップ画素内の最後の特徴マップ画素を記憶するメモリ領域の直後の前記メモリ領域から始まる、前記並列処理システム内の前記データプロセッサの各々の隣接メモリ領域に記憶することと、を含む、請求項５に記載の方法。
【請求項８】
前記特徴マップを処理して、決定することは、
前記第１画像内の同じ水平位置を有する選択された画素に対応する特徴マップ画素を表すデータが、前記並列処理システム内の前記データプロセッサの同じメモリ領域内に全て記憶されるように、前記特徴マップ画素を表す前記記憶されたデータを再配置することと、
各特徴マップ内の複数の選択された特徴マップ画素の各々について、前記選択された特徴マップ画素を含む二次元特徴マップ画素領域に亘って追加の畳み込みのセットを続けて実行することと、を含み、
前記追加の畳み込みのセットの各畳み込みは、前記ホストプロセッサの前記メモリに記憶された追加の重み行列のセットの各重み行列を用いて実行される、請求項５に記載の方法。
【請求項９】
前記第１画像は、より大きな画像の水平スライスを構成し、
前記方法は、前記第１画像の最上行を表す第１画像データに対する前記畳み込みのセットの完了に続いて、前記第１画像の前記最上行を表す前記第１画像データを、前に前記第１画像に含まれた前記より大きい画像の最下行の直下の前記より大きな画像の行を表すデータで上書きすることをさらに含む、請求項１に記載の方法。
【請求項１０】
二次元画像の特徴を検出するデータ処理システムであって、
同一のデータプロセッサの行であって、前記データプロセッサは、前記複数のデータプロセッサのうち第１プロセッサから隣接するデータプロセッサの各々に命令を順次搬送するように構成された命令パイプラインによって接続されており、前記データプロセッサの各々は、同一の記憶容量の複数のメモリ領域を含むように分割されたデータメモリを備える、データプロセッサの行と、
前記データプロセッサの行に接続されたホストプロセッサであって、重み行列のセットを表す重みデータと、前記重み行列のセットの各重み行列のバイアス値を表すバイアスデータとを含む特徴カーネルデータを記憶するように構成されたデータメモリを備え、前記複数のデータプロセッサによって実行される命令と、記憶されたプログラム命令と、をフェッチして前記命令パイプラインに提供するように構成された制御モジュールを含む、ホストプロセッサと、を備え、
前記プログラム命令は、前記データプロセッサの行によって実行される場合に、
第１画像を表す第１画像データを、前記複数のデータプロセッサの前記データメモリに記憶するステップであって、前記第１画像の連続する垂直スライスを表すデータを、前記データメモリの各隣接メモリ領域に記憶することを含む、ステップと、
前記第１画像内の複数の選択された画素の各々について、前記選択された画素を含む二次元画素領域に亘って畳み込みのセットを実行するステップであって、前記畳み込みのセットの各畳み込みは、前記重み行列のセットの各重み行列と、各重み行列に対応するバイアス値と、を用いて実行される、ステップと、
前記重み行列の各々について、各選択された画素に対応する特徴マップ画素を生成するために、各畳み込みの結果に非線形関数を適用するステップと、
前記重み行列の各々について、前記特徴マップ画素の全てを含む特徴マップを記憶するステップであって、前記特徴マップの個別の画素を表すデータを、前記データメモリの各々のメモリ領域に記憶することを含み、特徴マップの各画素について、全ての前記重み行列を用いて生成された前記特徴マップの各々からの前記対応する画素を表すデータが同じメモリ領域に記憶される、ステップと、
前記特徴マップを処理して、特定の特徴又は特徴のクラスが前記第１画像内で検出されたか否かを決定するステップと、を実行するように動作可能である、
データ処理システム。
【請求項１１】
前記制御モジュールは、前記ホストプロセッサ及び前記データプロセッサの行に接続された命令生成ユニットを備え、
前記命令生成ユニットは、
前記ホストプロセッサと前記データプロセッサの行との間のインタフェースを提供し、
前記ホストプロセッサから受け取ったカスタムコンパイラ命令を前記データプロセッサによって実行可能な命令に変換するように構成されている、請求項１０に記載のシステム。
【請求項１２】
前記複数の選択された画素の各々について前記畳み込みのセットを実行するステップは、前記データプロセッサの行に沿っって隣接するデータプロセッサにおいて前記畳み込みのセットを実行するための命令を順次実行するステップを含み、
隣接するデータプロセッサにおいて前記命令を順次実行する単一の反復は、前記第１画像の１つの水平行内の全ての選択された画素に対して前記畳み込みのセットを実行するステップを含む、請求項１０に記載のシステム。
【請求項１３】
前記複数の選択された画素は、整数サブサンプリング係数ｎによって定義された画素数だけ、前記第１画像内の水平方向及び垂直方向に離間した画素から構成されている、請求項１２に記載のシステム。
【請求項１４】
前記データプロセッサの行に沿って隣接するデータプロセッサにおいて前記命令を順次実行する単一の反復は、前記第１画像のｎ個の水平行内の全ての選択された画素に対して前記畳み込みのセットを実行するステップを含み、
前記ｎ個の水平行は、ｎ画素離れた一連の水平行内で隣接する行である、請求項１３に記載のシステム。
【請求項１５】
二次元配列のデータに対する処理動作の速度を向上させるプロセッサ実行方法であって、
第１配列の要素を表す第１配列データを、並列処理システム内のデータメモリのセットにすることであって、前記並列処理システムは、前記複数のデータプロセッサのうち第１プロセッサから隣接するデータプロセッサの各々に命令を順次搬送するように構成された命令パイプラインによって接続された、複数の同一のデータプロセッサの行を備え、前記データプロセッサの各々は、前記データメモリのセットの各々のメモリを備え、前記データメモリの各々は、同一の記憶容量の複数のメモリ領域を含むように分割されており、前記第１配列の連続する列を表すデータを、前記並列処理システムの前記データメモリの各々の隣接メモリ領域に記憶することを含む、ことと、
前記第１配列内の複数の選択された要素の各々について、前記選択された要素に対応する出力要素を生成するために、前記選択された要素に対して処理動作を実行することであって、前記複数の選択された要素は、整数サブサンプリング係数ｎによって定義された要素数だけ、前記第１配列内で水平方向及び垂直方向に離間した要素から構成されており、前記並列処理システムの隣接するデータプロセッサにおいて、前記処理動作を実行するための命令を順次実行することを含み、前記並列処理システムの隣接するデータプロセッサにおいて前記命令を順次実行する単一の反復は、前記第１配列のｎ個の水平行内の全ての選択された要素に対して前記処理動作を実行することを含み、前記ｎ個の水平行は、ｎ個の要素を隔てた一連の水平行内の隣接する行である、ことと、
前記出力要素の全てを含む出力配列を記憶することであって、前記並列処理システムの前記データメモリの各々のメモリ領域に前記出力配列の個別の要素を表すデータを記憶することを含む、ことと、を含む、
方法。
【請求項１６】
前記処理動作を実行することは、前記選択された要素を含む二次元要素領域に亘って１回以上の畳み込みを実行することを含み、
前記１回以上の畳み込みの各々は、前記並列処理システムに接続されたホストプロセッサのデータメモリに記憶された係数行列を用いて実行される、請求項１５に記載の方法。
【請求項１７】
前記出力配列を記憶することは、隣接するデータプロセッサにおいて前記命令を順次実行する単一の反復の間に、
前記第１配列の前記ｎ個の水平行のうち最上位にある選択された要素に対応する出力要素を、前記並列処理システム内のデータプロセッサの隣接メモリ領域の第１グループに記憶することであって、隣接メモリ領域の前記第１グループは、前記並列処理システムの前記命令パイプラインの先頭に最も近い位置に存在することと、
前記第１配列の前記ｎ個の水平行の次の下位行で選択された要素に対応する出力要素を、隣接メモリ領域の前記第１グループに隣接する、隣接メモリ領域の次のグループに記憶することであって、隣接メモリ領域の前記次のグループは、前記並列処理システムの前記命令パイプラインに沿ってさらに配置されたデータプロセッサ内に存在することと、
前記ｎ個の水平行の追加の下位行で選択された要素に対応する出力要素を、前記並列処理システムの前記命令パイプラインに沿ってさらに配置されたデータプロセッサ内の隣接メモリ領域の連続グループに記憶することと、をさらに含む、請求項１５に記載の方法。
【請求項１８】
前記出力配列を記憶することは、隣接するデータプロセッサにおいて前記命令を順次実行する単一の反復の間に、
前記ｎ個の水平行の各々における前記第１の選択された要素に対応する第１の一連のｎ個の出力要素の各々を、前記ｎ個の水平行の最上位から最下位まで順に、前記並列処理システムの前記命令パイプラインの先頭に最も近い位置にある前記データプロセッサの前記第１メモリ領域から始まる、前記並列処理システム内の前記データプロセッサの各々の隣接メモリ領域に記憶することと、
前記ｎ個の水平行の各々における前記第２の選択された要素に対応する第２の一連のｎ個の出力要素の各々を、前記ｎ個の水平行の最上位から最下位まで順に、前記第１の一連の出力要素内の最後の出力要素を記憶する前記メモリ領域の直後の前記メモリ領域から始まる、前記並列処理システム内の前記データプロセッサの各々の隣接メモリ領域に記憶することと、
前記ｎ個の水平行の各々における追加の選択された要素に対応する追加の一連のｎ個の出力要素の各々を、前記ｎ個の水平行の最上位から最下位まで順に、直前の一連の出力要素内の最後の出力要素を記憶する前記メモリ領域の直後の前記メモリ領域から始まる、前記並列処理システム内の前記データプロセッサの各々の隣接メモリ領域に記憶することと、をさらに含む、請求項１５に記載の方法。
【請求項１９】
前記出力配列を記憶した後に、
前記出力配列の同じ列からの出力要素を表すデータが、前記並列処理システム内の前記データプロセッサの同じメモリ領域内に全て記憶されるように、前記出力要素を表す前記記憶されたデータを再配置することと、
前記出力配列内の複数の選択された出力要素の各々について、前記選択された出力要素に対して追加の処理動作を続けて実行することと、をさらに含む、請求項１５に記載の方法。
【請求項２０】
二次元配列のデータに対する処理動作の速度を向上させるデータ処理システムであって、
同一のデータプロセッサの行であって、前記データプロセッサは、前記複数のデータプロセッサのうち第１プロセッサから隣接するデータプロセッサの各々に命令を順次搬送するように構成された命令パイプラインによって接続されており、前記データプロセッサの各々は、同一の記憶容量の複数のメモリ領域を含むように分割されたデータメモリを備える、データプロセッサの行と、
前記データプロセッサの行に接続されたホストプロセッサであって、前記データプロセッサの行の前記データメモリに記憶された配列データに対する処理動作で使用するための固定データを記憶するように適合されたデータメモリを備え、前記複数のデータプロセッサによって実行される命令と、記憶されたプログラム命令と、をフェッチして前記命令パイプラインに提供するように構成された制御モジュールを含む、ホストプロセッサと、を備え、
前記プログラム命令は、前記複数のデータプロセッサによって実行される場合に、
第１配列の要素を表す第１配列データを、前記複数のデータプロセッサの前記データメモリに記憶するステップであって、前記第１配列の連続する列を表すデータを、前記データメモリの各々の隣接メモリ領域に記憶するステップを含む、ステップと、
前記第１配列内の複数の選択された要素の各々について、前記選択された要素に対応する出力要素を生成するために、前記選択された要素に対して処理動作を実行するステップであって、前記複数の選択された要素は、整数サブサンプリング係数ｎによって定義された要素数だけ、前記第１配列内の水平方向及び垂直方向に離間した要素から構成されており、前記データプロセッサの行に沿って隣接するデータプロセッサにおいて、前記処理動作を実行するための命令を順次実行するステップを含み、前記データプロセッサの行に沿って隣接するデータプロセッサ内の前記命令を順次実行する単一の反復は、前記第１配列のｎ個の水平行内の全ての選択された要素に対して前記処理動作を実行するステップを含み、前記ｎ個の水平行は、ｎ個の要素を隔てた一連の水平行内の隣接する行である、ステップと、
前記出力要素の全てを含む出力配列を記憶するステップであって、前記データプロセッサの行の前記データメモリの各々のメモリ領域に前記出力配列の個別の要素を表すデータを記憶するステップと、を実行するように動作可能である、
システム。
【請求項２１】
前記制御モジュールは、前記ホストプロセッサ及び前記データプロセッサの行に接続された命令生成ユニットを備え、
前記命令生成ユニットは、
前記ホストプロセッサと前記データプロセッサの行との間のインタフェースを提供し、
前記ホストプロセッサから受け取ったカスタムコンパイラ命令を前記データプロセッサによって実行可能な命令に変換するように構成されている、請求項２０に記載のシステム。
【請求項２２】
前記処理動作を実行するステップは、前記選択された要素を含む二次元要素領域に亘って１回以上の畳み込みを実行するステップを含み、
前記１回以上の畳み込みの各々は、前記ホストプロセッサの前記データメモリに記憶された係数行列を用いて実行される、請求項２０に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願の相互参照）
本願は、２０１５年７月２３日に出願された「Ｍｉｒｅｐｌｉｃａ  Ｖｉｓｕａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ａｒｃｈｉｔｅｃｔｕｒｅ：Ｃｏｎｖｏｌｕｔｉｏｎａｌ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋｓ」と題する米国仮特許出願第６２／１９５，９２１号の利益を主張するものであり、あたかも完全且つ十分に本明細書に記載されているかのように、参照によってその全体が全ての目的のために本明細書に組み込まれる。
【背景技術】
【０００２】
多くのアプリケーションでは、二次元データセットが使用されている。視覚処理アプリケーションが一例として挙げられる。本明細書で使用される「視覚処理」という用語は、画像及びビデオ画素（ピクセル）及び関連するデータの一般的な処理クラスを指す。これには、画像の改善及びピクセル形式の変換、モーション検出及びトラッキング、並びに、静止画フレーム又はビデオフレームの特徴やオブジェクトの識別等のアプリケーションが含まれる。二次元セットで表現できるデータを含む他のアプリケーションには、力や電磁場等の物理量のモデリングが含まれる。場合によっては、三次元データセットを、二次元平面への投影若しくは変換によって、又は、複数の隣接する二次元データセット等のように二次元データセットで表すことができる。
【０００３】
畳み込みニューラルネットワークは、多種多様な検出及び分類アルゴリズムを包含する。近年、二次元（２Ｄ）畳み込みニューラルネットワーク（ＣＮＮ）は、多数の画像オブジェクトを検出して分類する能力のために広く注目されている。ＣＮＮには多くの異なる構成があるが、最先端の実装では典型的に９０％を超える高レベルの検出信頼性を達成するためにネットワークパラメータ及び相互接続トポロジを調整することによって、ネットワークを「トレーニング」してオブジェクトを認識させるのを可能にする基本要素で構成されている。
【０００４】
ＣＮＮは、一般に４つ以上の層を有することが多い「深い」ニューラルネットワークとして分類される。ＣＮＮの「畳み込み」層は、一般に、入力よりも多くの出力値を有し、出力は次の畳み込みレイヤの入力となる。以下でさらに説明するように、動作の結果として生じる数は非常に多く、１つの入力画像フレームに対して検出処理を実行するのに必要なクロックサイクル数は、容易に１０億のオーダーとなり得る。リアルタイム画像認識は、自動運転車の標識読取やセキュリティ状況での顔認識等の多くのアプリケーションで望まれている。したがって、検出速度を向上させることにより、かかる画像認識アプリケーションの性能及び能力を大きく向上させることができる。
【０００５】
添付図面を参照して、開示される様々な実施形態の詳細な説明を以下に行う。
【図面の簡単な説明】
【０００６】
【図１】例示的な畳み込みニューラルネットワークの特定の態様を示す簡略ブロック図である。
【図２】畳み込みニューラルネットワークにおける畳み込み演算を示す図である。
【図３】単一画素に関連する検出出力が依存する画像、信号、重み及びバイアス要素の数を示す図である。
【図４】タイルプロセッサのデータフローの実施の特定の態様を示す簡略ブロック図である。
【図５】例示的なＣＮＮ検出プロセスの動作中に実行されるデータ要求の待ち時間を示すヒストグラムである。
【図６】本明細書で説明されるタイルプロセッサを有するいくつかの実施形態で使用される命令生成ユニットの一実施形態の特定の態様を示す簡略ブロック図である。
【図７】畳み込みニューラルネットワークにおける例示的なサブサンプリング動作を示す図である。
【図８】例示的な畳み込みニューラルネットワークにおけるサブサンプリング動作から生じるデータベクトル幅を示す図である。
【図９】サブサンプリングを有する例示的な畳み込みニューラルネットワークの実行中のタイルプロセッサデータメモリ記憶を示す図である。
【図１０】例示的な畳み込みニューラルネットワークの改良された並列性及びより速い実行を提供するデータ再編成スキームを示す図である。
【図１１】サブサンプリング及びベクトル連結を有する例示的な畳み込みニューラルネットワークの実行中のタイルプロセッサデータメモリ記憶装置を示す図である。
【図１２】データ再編成スキームがない場合の例示的な畳み込み演算に対する行及び列入力を示す図である。
【図１３】データ再編成スキームを使用する例示的な畳み込み演算に対する行及び列入力を示す図である。
【図１４】データ再編成スキームの一部としてのデータの入力シャッフルを示す図である。
【図１５】データ再編成スキームの一部としてのデータの入力シャッフルを示す図である。
【図１６】データ再編成を使用する例示的なＣＮＮ検出プロセスの動作中に実行されるデータ要求の待ち時間を示すヒストグラムである。
【図１７】例示的な畳み込みニューラルネットワークのインターリーブされたデータ再編成スキームを示す図である。
【図１８】データ再編成スキームの一部としてのデータの入力シャッフルを示す図である。
【図１９】インターリーブされたデータ再構成スキームを使用する例示的なＣＮＮ検出プロセスの動作中に実施されるデータ要求の待ち時間を示すヒストグラムである。
【発明を実施するための形態】
【０００７】
（概要）
二次元配列のデータに対する処理速度を向上させ、画像内の特徴を検出する方法及びシステムを開示する。二次元画像内の特徴を検出するプロセッサ実行方法の実施形態は、第１画像の画素を表す第１画像データを、並列処理システム内のデータメモリのセットに記憶することを含む。並列処理システムは、命令パイプラインによって接続された実質的に同一な複数のデータプロセッサの行を含み、命令パイプラインは、複数のデータプロセッサのうち第１プロセッサから隣接するデータプロセッサの各々へ命令を順次搬送するように構成されている。データプロセッサの各々は、第１画像データが記憶されているデータメモリのセットの各々のデータメモリを備えている。また、データメモリの各々は、実質的に同一の記憶容量の複数のメモリ領域を含むように分割されており、第１画像データを記憶することは、第１画像の連続する垂直スライスを表すデータを、並列処理システムのデータメモリの各隣接メモリ領域に記憶することを含む。
【０００８】
本方法の実施形態は、並列処理システムに接続されたホストプロセッサのメモリに、重み行列のセットを表す重みデータを含む特徴カーネルデータを記憶することを続ける。さらに、本方法は、第１画像内の複数の選択された画素の各々について、選択された画素を含む二次元画素領域に亘って畳み込みのセットを実行し、選択された画素に対応する特徴マップ画素を生成するために、各畳み込みの結果に非線形関数を適用することを含む。畳み込みのセットの各畳み込みは、重み行列のセットの各行列を使用して実行され、特徴マップ画素は、重み行列の各々に対して生成される。本方法は、重み行列の各々について、特徴マップ画素の全てを含む特徴マップを記憶することを続け、特徴マップを記憶することは、特徴マップの個別の画素を表すデータを、並列処理システムのデータメモリの各々のメモリ領域に記憶することを含む。特徴マップの各画素について、全ての重み行列を用いて生成された特徴マップの各々からの対応する画素を表すデータは、同じメモリ領域に記憶される。本方法の実施形態は、特徴マップを処理して、特定の特徴又は特徴のクラスが第１画像内で検出されたか否かを決定することをさらに含む。
【０００９】
上記方法のさらなる実施形態では、特徴カーネルデータは、重み行列のセットの各重み行列に関連するバイアス値を表すバイアスデータをさらに含み、畳み込みのセットの各畳み込みは、重み行列のセットの各重み行列に関連するバイアス値を用いて実行される。一実施形態では、複数の選択された画素の各々について畳み込みのセットを実行することは、並列処理システムの隣接するデータプロセッサにおいて畳み込みのセットを実行するための命令を順次実行することを含む。さらに、並列処理システムの隣接するデータプロセッサにおいて命令を順次実行する単一の反復は、第１画像の１つの水平行内の全ての選択された画素に対して畳み込みのセットを実行することを含む。
【００１０】
この方法のさらなる実施形態では、複数の選択された画素は、整数サブサンプリング係数ｎによって定義された画素数だけ、第１画像内の水平方向及び垂直方向に離間した画素から構成されている。さらに別の実施形態では、並列処理システムの隣接するデータプロセッサにおいて命令を順次実行する単一の反復は、第１画像のｎ個の水平行内の全ての選択された画素に対して畳み込みのセットを実行することを含み、ｎ個の水平行は、ｎ画素離れた一連の水平行内で隣接する行である。
【００１１】
さらなる実施形態において、特徴マップを記憶することは、隣接するデータプロセッサにおいて命令を順次実行する単一の反復の間に、第１画像のｎ個の水平行のうち最上位にある選択された画素に対応する特徴マップ画素を、並列処理システム内のデータプロセッサの隣接メモリ領域の第１グループに記憶することをさらに含む。ここで、隣接メモリ領域の第１グループは、並列処理システムの命令パイプラインの先頭に最も近い位置にあるデータプロセッサ内に存在する。この実施形態では、特徴マップを記憶することは、隣接するデータプロセッサにおいて命令を順次実行する単一の反復の間に、第１画像のｎ個の水平行の次の下位行で選択された画素に対応する特徴マップ画素を、隣接メモリ領域の第１グループに隣接する、隣接メモリ領域の次のグループに記憶することさらに含む。ここで、隣接メモリ領域の次のグループは、並列処理システムの命令パイプラインに沿って配置されたデータプロセッサ内に存在する。この実施形態は、隣接するデータプロセッサにおいて命令を順次実行する単一の反復の間に、ｎ個の水平行の追加の下位行で選択された画素に対応する特徴マップ画素を、並列処理システムの命令パイプラインに沿って配置されたデータプロセッサ内の隣接メモリ領域の連続グループに記憶することをさらに含む。
【００１２】
別の実施形態において、特徴マップを記憶することは、隣接するデータプロセッサにおいて命令を順次実行する単一の反復の間に、ｎ個の水平行の各々における第１の選択された画素に対応する第１の一連のｎ個の特徴マップ画素の各々を、ｎ個の水平行の最上位から最下位まで順に、並列処理システム内のデータプロセッサの各々の隣接メモリ領域に記憶することを含む。これらの特徴マップ画素は、並列処理システムの命令パイプラインの先頭の最も近い位置にあるデータプロセッサの第１メモリ領域から始まるメモリ領域に記憶される。この実施形態では、特徴マップを記憶することは、隣接するデータプロセッサにおいて命令を順次実行する単一の反復の間に、ｎ個の水平行の各々における第２の選択された画素に対応する第２の一連のｎ個の特徴マップ画素の各々を、ｎ個の水平行の最上位から最下位まで順に、並列処理システム内のデータプロセッサの各々の隣接メモリ領域に記憶することをさらに含む。また、特徴マップを記憶することは、隣接するデータプロセッサにおいて命令を順次実行する単一の反復の間に、ｎ個の水平行の各々における追加の選択された画素に対応する追加の一連のｎ個の特徴マップ画素の各々を、ｎ個の水平行の最上位から最下位まで順に、直前の一連の特徴マップ画素内の最後の特徴マップ画素を記憶するメモリ領域の直後のメモリ領域から始まる、並列処理システム内のデータプロセッサの各々の隣接メモリ領域に記憶することを含む。
【００１３】
二次元画像内の特徴を検出する方法の一実施形態では、特徴マップを処理して、決定することは、第１画像内の同じ水平位置を有する選択された画素に対応する特徴マップ画素を表すデータが、並列処理システム内のデータプロセッサの同じメモリ領域内に全て記憶されるように、特徴マップ画素を表す記憶されたデータを再配置することを含む。この実施形態では、特徴マップを処理することは、各特徴マップ内の複数の選択された特徴マップ画素の各々について、選択された特徴マップ画素を含む二次元特徴マップ画素領域に亘って追加の畳み込みのセットを続けて実行することをさらに含む。ここで、追加の畳み込みのセットの各畳み込みは、ホストプロセッサのメモリに記憶された追加の重み行列のセットの各重み行列を用いて実行される。別の実施形態では、第１画像は、より大きな画像の水平スライスを構成し、この方法は、第１画像の最上行を表す第１画像データに対する畳み込みのセットの完了に続いて、第１画像の最上行を表す第１画像データを、前に第１画像に含まれたより大きい画像の最下行の直下のより大きな画像の行を表すデータで上書きすることをさらに含む。
【００１４】
二次元画像内の特徴を検出するデータ処理システムの一実施形態は、実質的に同一のデータプロセッサの行を含み、データプロセッサは、複数のデータプロセッサのうち第１プロセッサから隣接するデータプロセッサの各々に命令を順次搬送するように構成された命令パイプラインによって接続されており、データプロセッサの各々は、実質的に同一の記憶容量の複数のメモリ領域を含むように分割されたデータメモリを含む。データ処理システムのこの実施形態は、データプロセッサの行に接続されたホストプロセッサをさらに含み、ホストプロセッサは、重み行列のセットを表す重みデータと、重み行列のセットの各重み行列のバイアス値を表すバイアスデータとを含む特徴カーネルデータを記憶するように構成されたデータメモリを含む。ホストプロセッサは、複数のデータプロセッサによって実行される命令と、命令パイプラインに提供され、データプロセッサの行によって実行される場合に、二次元画像の特徴を検出する上述した方法の特定のステップを実行するように動作可能な記憶されたプログラム命令と、をフェッチして命令パイプラインに提供するように構成された制御モジュールをさらに含む。
【００１５】
データ処理システムのさらなる実施形態において、制御モジュールは、ホストプロセッサ及びデータプロセッサの行に接続された命令生成ユニットを含む。命令生成ユニットは、ホストプロセッサとデータプロセッサの行との間のインタフェースを提供し、ホストプロセッサから受け取ったカスタムコンパイラ命令をデータプロセッサの行内のデータプロセッサによって実行可能な命令に変換するように構成されている。
【００１６】
二次元配列のデータに対する処理動作の速度を向上させるプロセッサ実行方法の一実施形態は、第１配列の要素を表す第１配列データを、並列処理システム内のデータメモリのセットに記憶することを含む。並列処理システムは、複数のデータプロセッサのうち第１プロセッサから隣接するデータプロセッサの各々に命令を順次搬送するように構成された命令パイプラインによって接続された、複数の実質的に同一のデータプロセッサの行を含む。データプロセッサの各々は、データメモリのセットの各々のメモリを含み、データメモリの各々は、実質的に同一の記憶容量の複数のメモリ領域を含むように分割されている。本方法のこの実施形態において、第１配列データを記憶することは、第１配列の連続する列を表すデータを、並列処理システムのデータメモリの各々の隣接メモリ領域に記憶することを含む。
【００１７】
処理動作の速度を向上させる方法は、第１配列内の複数の選択された要素の各々について、選択された要素に対応する出力要素を生成するために、選択された要素に対して処理動作を実行することをさらに含む。この実施形態では、複数の選択された要素は、整数サブサンプリング係数ｎによって定義された要素数だけ、第１配列内で水平方向及び垂直方向に離間した要素から構成されている。複数の選択された要素の各々について処理動作を実行することは、並列処理システムの隣接するデータ処理プロセッサにおいて、処理動作を実行するための命令を順次実行することを含み、並列処理システムの隣接するデータプロセッサにおいて命令を順次実行する単一の反復は、第１配列のｎ個の水平行内の全ての選択された要素に対して処理動作を実行することを含む。ここで、ｎ個の水平行は、ｎ個の要素を隔てた一連の水平行内の隣接する行である。本方法は、出力要素の全てを含む出力配列を記憶することをさらに含み、出力配列を記憶することは、並列処理システムのデータメモリの各々のメモリ領域に出力配列の個別の要素を表すデータを記憶することを含む。
【００１８】
処理動作の速度を向上させる方法のさらなる実施形態では、処理動作を実行することは、選択された要素を含む二次元要素領域に亘って１回以上の畳み込みを実行することを含み、１回以上の畳み込みの各々は、並列処理システムに接続されたホストプロセッサのデータメモリに記憶された係数行列を用いて実行される。
【００１９】
処理動作の速度を向上させる方法の別の実施形態では、出力配列を記憶することは、隣接するデータプロセッサにおいて命令を順次実行する単一の反復の間に、第１配列のｎ個の水平行のうち最上位にある選択された要素に対応する出力要素を、並列処理システム内のデータプロセッサの隣接メモリ領域の第１グループに記憶することをさらに含む。隣接メモリ領域の第１グループは、並列処理システムの命令パイプラインの先頭に最も近い位置にあるデータプロセッサ内に存在する。この実施形態では、出力配列を記憶することは、隣接するデータプロセッサにおいて命令を順次実行する単一の反復の間に、第１配列のｎ個の水平行の次の下位行で選択された要素に対応する出力要素を、隣接メモリ領域の第１グループに隣接する、隣接メモリ領域の次のグループに記憶することをさらに含む。隣接メモリ領域の次のグループは、並列処理システムの命令パイプラインに沿ってさらに配置されたデータプロセッサ内に存在する。また、出力配列を記憶することは、隣接するデータプロセッサにおいて命令を順次実行する単一の反復の間に、ｎ個の水平行の追加の下位行で選択された要素に対応する出力要素を、並列処理システムの命令パイプラインに沿ってさらに配置されたデータプロセッサ内の隣接メモリ領域の連続グループに記憶することを含む。
【００２０】
本方法の別の実施形態では、出力配列を記憶することは、隣接するデータプロセッサにおいて命令を順次実行する単一の反復の間に、ｎ個の水平行の各々における第１の選択された要素に対応する第１の一連のｎ個の出力要素の各々を、ｎ個の水平行の最上位から最下位まで順に、並列処理システム内のデータプロセッサの各々の隣接メモリ領域に記憶することをさらに含む。出力要素は、並列処理システムの命令パイプラインの先頭に最も近い位置にあるデータプロセッサの第１メモリ領域から始まるメモリ領域に記憶される。この実施形態では、出力配列を記憶することは、隣接するデータプロセッサにおいて命令を順次実行する単一の反復の間に、ｎ個の水平行の各々における第２の選択された要素に対応する第２の一連のｎ個の出力要素の各々を、ｎ個の水平行の最上位から最下位まで順に、並列処理システム内のデータプロセッサの各々の隣接メモリ領域に記憶することをさらに含む。これらの出力要素は、第１の一連の出力要素内の最後の出力要素を記憶するメモリ領域の直後のメモリ領域から始まるメモリ領域に記憶される。また、出力配列を記憶することは、隣接するデータプロセッサにおいて命令を順次実行する単一の反復の間に、ｎ個の水平行の各々における追加の選択された要素に対応する追加の一連のｎ個の出力要素の各々を、ｎ個の水平行の最上位から最下位まで順に、並列処理システム内のデータプロセッサの各々の隣接メモリ領域に記憶することを含む。これらの出力要素は、直前の一連の出力要素内の最後の出力要素を記憶するメモリ領域の直後のメモリ領域から始まるメモリ領域に記憶される。
【００２１】
別の実施形態では、処理動作の速度を向上させる方法は、出力配列の同じ列からの出力要素を表すデータが、並列処理システム内のデータプロセッサの同じメモリ領域内に全て記憶されるように、出力要素を表す記憶されたデータを再配置することと、出力配列内の複数の選択された出力要素の各々について、選択された出力要素に対して追加の処理動作を続けて実行することと、をさらに含む。
【００２２】
二次元配列のデータに対する処理動作の速度を向上させるデータ処理システムの一実施形態は、実質的に同一のデータプロセッサの行を含み、データプロセッサは、複数のデータプロセッサのうち第１プロセッサから隣接するデータプロセッサの各々に命令を順次搬送するように構成された命令パイプラインによって接続されている。各データプロセッサは、実質的に同一の記憶容量の複数のメモリ領域を含むように分割されたデータメモリを含む。本システムは、データプロセッサの行に接続されたホストプロセッサをさらに含み、ホストプロセッサは、データプロセッサの行のデータメモリに記憶された配列データに対する処理動作で使用するための固定データを記憶するように構成されたデータメモリを含む。ホストプロセッサは、複数のデータプロセッサによって実行される命令と、命令パイプラインに提供され、複数のデータプロセッサによって実行される場合に、処理速度を向上させるために上述した方法の特定のステップを実行するように動作可能な記憶されたプログラム命令と、をフェッチして命令パイプラインに提供するように構成された制御モジュールをさらに含む。
【００２３】
データ処理システムのさらなる実施形態では、制御モジュールは、ホストプロセッサ及びデータプロセッサの行に接続された命令生成ユニットを備え、命令生成ユニットは、ホストプロセッサとデータプロセッサの行との間のインタフェースを提供し、ホストプロセッサから受け取ったカスタムコンパイラ命令をデータプロセッサによって実行可能な命令に変換するように構成されている。本システムの別の実施形態では、処理動作を実行することは、選択された要素を含む二次元要素領域に亘って１回以上の畳み込みを実行することを含み、１回以上の畳み込みの各々は、ホストプロセッサのデータメモリに記憶された係数行列を用いて実行される。
【００２４】
本明細書に記載された方法及びシステムは、２Ｄ  ＣＮＮ実行の速度及びサブサンプリングを含む二次元配列の他の動作の実質的な改善をもたらす。本明細書に記載された新規のタイルプロセッサアーキテクチャの特定の態様は、共有する米国特許出願第１３／６０２，９５８号、現在の米国特許第９，１８３，６１４号及び米国特許出願第１５／０５４，１１８号にさらに説明されており、これら全体が本明細書に援用される。他のアプローチとは異なり、タイルプロセッサアーキテクチャは、画像フレームの全幅にわたる同時処理を可能にし、実質的に通信オーバーヘッドのない非常に多数のネットワークパラメータの分散を含む、ニューラルネットワーク全体の低遅延通信をサポートする。さらに、本アーキテクチャは、既存のソリューションで可能な範囲を超える並列処理（少なくとも４倍以上の並列処理）を可能にするデータ再編成の機会を提供する。一実施形態では、ＣＮＮは、シングルスレッドＣ＋＋ソースプログラムによって直接実行される。
【００２５】
（ＣＮＮの概要）
ＣＮＮは、計算量及び通信量が非常に多く、並列処理要素間で分割するのが非常に困難な状況下で動作する。図１は、Ｅｉｎｄｈｏｖｅｎ  Ｕｎｉｖｅｒｓｉｔｙ  ｏｆ  Ｔｅｃｈｎｏｌｏｇｙの組み込みプロセッサアーキテクチャコース（ｈｔｔｐｓ：／／ｓｉｔｅｓ．ｇｏｏｇｌｅ．ｃｏｍ／ｓｉｔｅ／５ｋｋ７３ｇｐｕ２０１３／ａｓｓｉｇｎｍｅｎｔ／ｃｎｎ）に提供された参照コードに基づくＣＮＮの例の一般的なコンポーネントを示している（この特定の例では、交通標識を検出して分類している）。ニューラルネットワーク１００は、レイヤ１〜レイヤ４と名付けられた４つのレイヤから構成されている。各レイヤは、いくつかの特徴マップを用いて、入力画像内の画素及び各特徴マップについて、画素によって定義される領域（この場合、左上隅の画素を有する領域）がどの程度特徴マップとマッチするかを決定する。これは、各位置でこの決定を行うニューロンとおおまかに似ており、したがって、「ニューラルネットワーク」という用語になっている。図１には、可能な特徴マップのセット示されている。レイヤ１では、２４個の特徴マップのうち１０２個のセットを使用することができ、レイヤ２では、４０個の特徴マップのうち１０４個のセットを使用することができ、レイヤ３では、２４個の特徴マップのうちの１０６個のセットを使用することができる。図１の実施形態では、連続するレイヤで使用される特徴マップは、次第に複雑な特徴を表現している。これは、畳み込みニューラルネットワークの場合に多い。図１に示すように、特徴マップのセット１０２，１０４，１０６は、顔の認識のために使用される。他のオブジェクトの認識に適した他の例示的な特徴マップのセットが図１に示されている。図１には示されていないが、交通標識の認識に適した同様の特徴マップのセットは、交通標識である入力画像１０８の認識のために使用される。図１に示される特徴マップは、固定データであり、「特徴検出器」等の他の用語を用いて参照することもできる。「特徴マップ」という用語は、入力画像と特徴マップとの比較から生じる出力「画像」を記述するのに使用することができる。
【００２６】
この画像部分と、オブジェクト検出に使用される基本概念である特徴マップと、の比較によって、図１に示すように、ネットワークの実現には多数の基本的な動作が存在する。
・サブサンプリング（図では「ＳＡＭＰ」）。画像オブジェクトは、ビューポート（すなわち表示位置）から様々な距離にあり得るので、パターンマッチングのためには、マッチングする特徴における距離の範囲を考慮する必要がある。これは、画像情報を（許容可能な損失を伴って）より濃密な表現（より小さい幅及び高さ）に配置する様々なレイヤで画像をサブサンプリングすることによって、達成される。最後のレイヤであるレイヤ４は、オブジェクトが所定の位置で検出されたか否かを示すために、全てのレイヤの要約を比較し、必要に応じてオブジェクト（例えば、標識に示された速度）を分類することもできる。
・２Ｄ畳み込み（図では「ＣＯＮＶ」）。これは、画像の領域を特徴マップに一致させるための基本的な動作である。これらの領域の寸法は、任意の所定のネットワークに対して固定されているが、１つのレイヤから次のレイヤへ、及び、１つのネットワークから次のネットワークへ変化する可能性がある。これはネットワーク設計の一部である。
・非線形活性化機能（図では「ＡＣＴＶ」）。この機能は、領域が特徴と一致する度合いを決定し、（領域を定義する単一の画素（この場合、左上の画素）の出力を破棄することによって）一定の閾値を上回る一致をしない領域を破棄する。必要に応じて、これらの位置を強調するために、閾値をさらに上回る出力に対して比較的大きな値を割り当てることができる。
・レイヤ１からの異なる特徴マップからの出力の部分的な相互接続（図では「ＰＣＮＴ」）。この動作では、前のレイヤの特徴マップ比較の様々な組み合わせが考慮され、前のレイヤで一致した特徴に関する豊富な情報セットが形成される。
・レイヤ２からの異なる特徴マップからの出力の完全な相互接続（図では「ＦＣＮＴ」）。これは、より豊富な情報セットを形成するが、より多くの組み合わせをもたらすので、ここではレイヤ３でのみ行われる。
・最終的な閾値計算（図では「ＴＨＲＥＳＨ」）。これは、ネットワークが所定の位置で行った「決定」をまとめたもので、特徴が当該所定の位置で検出されたか否かを示している。これは、最後の畳み込みの後に、ゼロよりも大きいある値で示される。これが真であれば、他の畳み込みを用いて、検出されたオブジェクトの特定のクラスに検出をソートすることができ、この畳み込みの大きさは、分類の信頼水準を示す。
【００２７】
図１のような畳み込みニューラルネットワークにおいて最も時間のかかる動作は、図２に示す画像データの２Ｄ畳み込みである。この演算は、所定の垂直位置ｙ及び水平位置ｘでの信号出力Ｓｙ，ｘを計算する。この図は、６×６畳み込みを示しており、例えば、入力画像１０８内の領域２０２を使用して出力を計算することを意味し、領域２０２は高さ６画素、幅６画素であり、ｘ及びｙは左上隅で定義される。比較される様々な特徴は、バイアスＢ及び重み行列Ｗｍ，ｎからなるカーネルによって定義される。図２の実施形態では、重み行列２０４は、特徴マップセット２０８内の特徴マップ２０６の強度変化を表す３６個の要素Ｗｙ，ｘを有する。
【００２８】
畳み込み演算は、以下の式で定義される。
【数１】
0006771018.tif 000002
【００２９】
畳み込みは、画像データの積と、重み行列の対応する要素とを合計し、信号を生成するために、バイアスを加算して単一の値となる。したがって、畳み込みは、入力強度値ＩＮｙ，ｘを有する画素の空間的位置に対応する出力信号値Ｓｙ，ｘを生じる。非公式には、この演算は、画素値と重み値との間の対応度が高い領域に対してより大きい信号値を生成する。例えば、重みがより高い（より明るい）値を有する同じ位置で画像がより明るい場合、２つの積は、比較的大きい値を有する（そして、負の重みを使用して正のバイアスを適用すると、一致するより暗い領域の値が比較的大きくなる）。畳み込み量が大きいほど、一致度が高くなる。ＡＣＴＶ機能は、比較的弱い値を有する畳み込み出力を破棄するので、さらなる畳み込み層に関与しない。
【００３０】
畳み込みは、画像全体（本明細書に記載されたテスト実装では、幅１２８０画素、高さ７２０画素の画像）に亘って実行されるので、計算上激しい。しかし、これは演算の複雑さを左右する。図３は、例示的なネットワークの単一の出力が有する、ネットワークを介して戻る出力（１検出）からの追跡、及び、全ての畳み込みカーネルと相互接続動作との考慮の依存関係を示す図である（入力セットの組み合わせは、組み合わせの数に応じて、入力セットより多くの出力セットをもたらす）。
【００３１】
単一の出力分類は、３８，２８０個の信号要素（「ｓ」、入力画像を含む）、及び、２７２，５８８個のカーネル要素（バイアス「ｂ」及び重み「ｗ」の両方をカウントする）に依存する。レイヤ２は、レイヤ３への５×５信号入力を形成するために２５回繰り返す必要があり、レイヤ１は、レイヤ２への６×６信号入力を形成するために３６回繰り返す必要がある。すなわち、レイヤ３への５×５入力を形成するために、合計で３６×２５＝９００回繰り返す必要があることに留意されたい。出力検出は、各出力位置に形成され、各々は異なるデータ依存のセットを有する。隣接する出力は、隣接するコンテキストセットを有するが、各々が一意であるため、これらの依存関係には重複がある。
【００３２】
図１の例示的なネットワーク（ｎＶｉｄｉａ  ＧｅＦｏｒｃｅ  ＧＴＸ  ４６０を使用）の従来の実装では、入力画像のフレームに対して約１，４００，０００，０００サイクルの実行が必要である。一方、タイル型アーキテクチャへのマッピングの一実施形態は、同じネットワークに対して約３２，０００，０００サイクルを要し、ほぼ４４倍の速さである。この実施形態は、レイヤ１及びレイヤ２における２倍のサブサンプリングと、４つのレイヤ全てにおける２Ｄ畳み込みと、を含む。処理要素の基本的な数及び演算は、従来の実装とタイルプロセッサの実装とで似ているが、データフローがどのように実行されるか、つまり、図３のデータ依存性がどのように満たされるか、において非常に大きな違いがある。
【００３３】
従来のプロセッサソリューションは、信号及びカーネルデータを処理要素に伝達しなければならないようにデータフローを実装する。これは、共有メモリから処理要素（汎用グラフィックスプロセッサ）にデータを移動することによって、又は、処理要素間（「ビジョンプロセッサ」内）で明示的にデータを移動することによって実現することができる。この移動は、転送を行う時間を必要とするだけでなく、転送がプログラム内の意味のあるポイントで起きるように処理要素が同期することを要する。このことは、通常、適切なポイントに達するまで、データの送信元又は送信先が停止することを要する。
【００３４】
対照的に、本明細書に記載されたシステム及び方法では、タイルプロセッサ配列は、データの移動又は同期のためのオーバーヘッドがほとんど又は全くなく、全ての処理要素間で共有される方法で、全てのコンテキスト（例えば、周辺画素の画像データ）を適切な場所（すなわち、ローカルメモリ）に残す。図４は、本明細書に記載された方法及びシステムに使用されるタイルプロセッサ配列の重要な態様を示す図である。４つの相互接続されたタイルプロセッサ４０１のグループが示されている。「タイル」という用語は、幅が４、８又は１６画素、高さが２５６画素までのフレーム内の画素の直線領域又は二次元配列を指す。各処理要素又はタイルプロセッサは、隣接するタイルを隣接するタイルプロセッサにマッピングして、ピクセル固有のタイル上で動作する。本明細書では、タイル処理は主に画像処理アプリケーションについて記載されているが、開示された実施形態は、二次元データセット、特に二次元相互関連データセットのデータ処理を含む任意のアプリケーションに適していると考えられると理解されたい。
【００３５】
タイルプロセッサ４０１は、従来のプロセッサと共通する多くのコンポーネントを有しており、命令メモリを持たず、命令フェッチロジックを持たないという顕著な例外がある。図４の描写は、タイルプロセッサ４０１の従来にないコンポーネントを示し、複数のタイルプロセッサ４０１のグルーピングを示すことを意図している。タイルプロセッサ４０１のコンポーネントの配置は、コンポーネント間の全ての相互接続を反映していなくてもよい。本明細書で別段の記載がある場合を除いて、タイルプロセッサ４０１は、当該技術分野で知られている従来のプロセッサの方法で相互接続された従来のプロセッサのコンポーネント（例えば、電源を含む）を含む。従来の命令メモリ及び命令フェッチロジックを用いる代わりに、タイルプロセッサ４０１は、制御モジュールによってフェッチされ、全てのタイルプロセッサを同じ命令シーケンスに接続する直列命令バッファ、Ｉバッファ又はレジスタ４００から構成された命令パイプラインを用いて分散される命令を使用する。
【００３６】
Ｉバッファ４００で受け取られた命令は、デコード論理４０２によってデコードされ、オペランドをフェッチし、結果を区分データメモリ（ＤＭＥＭ）４１０に書き込むためのロード及びストアを用いて、バンク付きレジスタファイル４０８内のレジスタの内容に対して機能ユニット４０６による演算が実行される。タイルプロセッサの特に新規な特徴は、領域状態論理４０４と、レジスタファイルバンキングメカニズム４０８と、データメモリ分割化メカニズム４１０と、リモートアクセス論理４１２と、タイル相互接続ネットワーク４１４と、これらの組み合わせとを含む。ネットワーク４１４は、全てのタイルプロセッサを他の全てのタイルプロセッサのＤＭＥＭに接続する、完全に接続されたネットワークを表しているので、別個のハードウェアブロックとして示されていない。各タイルプロセッサのリモートアクセス論理４１２は、４つのタイルプロセッサの何れかからの要求を単一サイクルで他のタイルプロセッサの何れかにルーティングする、ローカルアクセス相互接続４１６に接続している。リモートアクセス論理４１８は、何れかの要求がローカルグループ内のプロセッサに向けられていないか否かを同時に判別し、このローカルでない要求を最終的な宛先に接続する非ローカルタイル相互接続４２０にそのような要求を提示する。ローカルアクセス相互接続４１６と、リモートアクセス論理４１８と、非ローカルタイル相互接続４２０とは、相互接続ネットワーク４１４の特定のレベルである。
【００３７】
各データパス（タイルパス）は、別のタイルパス（又は同じタイルパス内の異なるメモリ領域）内のメモリをターゲットとするロード命令を実行することによって、共有コンテキストにアクセスすることができる。このロードは、通常、命令にサイクルを追加することなく、ターゲットデータが確実に計算されるように実行される。
【００３８】
図５は、第１のタイルプロセッサの実装の実施形態におけるタイルパス間の信号トラフィックのデータフローレイテンシのヒストグラムを示す図である。ラウンドトリップレイテンシが水平軸に示され（ロード要求からデータ応答までのサイクル）、所定のレイテンシを伴うアクセスの回数が垂直軸上にある。（ヒストグラムには２つのピークがある。これは、サブサンプリング動作が広範囲のデータに亘って行われ、比較的遠隔の通信を必要とするためである。）ほぼ全ての要求は、同期を含む１２サイクル以内に満たされる。タイルパスは、複数の位置（この場合、４つの位置）でマルチタスクを行い、同じ命令シーケンスを４回実行する。したがって、例えば、３つの他の位置にある４つの命令のシーケンスは、次の命令シーケンスによって要求される前に応答を受信するのに十分な時間を提供する。
【００３９】
データの低オーバーヘッド移動に加えて、タイル配列は、従来のソリューションと比較して、データフロー実装において２つのさらなる重要な利点を有する。第１に、ネットワークの各レベルのデータは、共有メモリ内の所定の位置に残り、あるレイヤから次のレイヤに伝達される必要がない。従来のソリューションでは、図３に示す依存関係を拡張することで分かるように、コンピューティング要素への３５，０００，０００，０００回の信号データのデータ転送が必要である。一方、本実施形態では、タイル配列は約３８，０００，０００回（図５の分布の合計）の転送を必要とする。入力データは１回転送され、全てのネットワークレイヤがこの入力で実行され、検出がテーブルに出力される。必要とされる唯一のデータ転送は、サブサンプリングのためであり、畳み込みのための信号領域にアクセスするためのものである。レイヤの相互接続又はネットワークレイヤ間のデータ転送には、他の転送が必要ない。
【００４０】
第２に、所定の場所に残るデータに対して動作するこの機能は、タイル配列がカーネルデータを通信するためのオーバーヘッドを必要としないという事実による。より一般的なソリューションでは、このカーネルデータは信号データに付随しなければならず、カーネルデータ又は画像データを計算要素のローカルメモリにスワップする必要がある。カーネルデータは信号データよりもはるかに多く、合計２９０，０００，０００，０００回の転送である。これは、計算要素ごとの合計ストレージが全てのカーネルデータに対して３１１，０００のメモリ位置であり、非効率的なメモリ使用無しに複数の計算要素内に残るには大きすぎるために、必要である。
【００４１】
タイル配列では、カーネルデータがホストメモリ内の１つのメモリ位置に存在し、タイルパスにオーバーヘッドなしで通信される。ホストプロセッサとタイルプロセッサとの間をインタフェース接続する命令生成ユニット（ＩＧＵ）の実施形態を示すブロック図を図６に示す。ホストプロセッサとタイルプロセッサとの間をインタフェース接続するのに関連するタスクは、実行されるプログラム命令の性質に依存する。プログラムがタイルプロセッサによる実行に特に適合している場合でも、命令をフェッチし、それらを適切なシーケンスでタイルプロセッサの命令パイプラインに提供する制御モジュールが必要である。また、図６のＩＧＵは、従来のコンパイラからタイルプロセッサによる実行に適した命令へのカスタム命令の変換を実行する。このようにして、タイルプロセッサを用いて従来のプロセッサ用に書かれたプログラムを実行することができる。
【００４２】
ＩＧＵは、ホストのデータパス内の機能ユニットとして実装される。この機能ユニットは、２つの入力オペランド（すなわち、ホストデータＡ及びホストデータＢ）を有し、単一の結果であるホスト結果を返すという典型的な構成を有する。ＩＧＵの実装は、図の上部、中部、下部に対応する３つのパイプラインステージ（すなわち、属性ステージ６０２、デコードステージ６０４、Ｉバッファステージ６０６）に亘って分散されている。属性ステージは、ホストプロセッサへのメインインタフェースを実装し、ホストオペコードと、データＡオペランドと、データＢオペランドとを受け取り、タイルプロセッサの動作によって生成された多値ベクトルを識別するオブジェクトトラッカ結果を返す。このステージでは、ホストからのカスタム命令をタイルパス命令に変換するために、デコードステージで必要な情報もアセンブルする。ＩＧＵのデコードステージは、属性ステージから命令及び属性情報を受け取り、レジスタ割り当てフラグ及びレジスタ割り当てキューを用いて、レジスタの割り当て及び割り当て解除を処理する。また、デコードステージは、専用プロセッサの命令を形成し、その命令を命令バッファステージに渡す。
【００４３】
ＩＧＵのＩバッファステージは、スカラーレジスタと、専用プロセッサからスカラーデータを受け取り、スカラーデータをホストプロセッサによって提供される他のスカラーオペランドと演算し、スカラー結果を記憶するためのスカラー機能ユニットと、を含む。ＩＧＵは、スカラー機能ユニット６０８を介してホストデータメモリに接続されている。また、Ｉバッファステージは、専用プロセッサによる命令の実行を管理するための最適化キューと、命令再生バッファと、を含む。タイル配列を専用プロセッサとして含む実施形態では、Ｉバッファステージは、米国特許第９，１８３，６１４号に記載された「マスタプロセッサ」の命令フェッチ及びシーケンシング動作を実行する。さらに、タイルプロセッサのための命令生成ユニットは、２０１６年２月２５日に出願された「Ｈａｒｄｗａｒｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｇｅｎｅｒａｔｉｏｎ  Ｕｎｉｔ  ｆｏｒ  Ｓｐｅｃｉａｌｉｚｅｄ  Ｐｒｏｃｅｓｓｏｒｓ」と題する米国特許出願第１５／０５４，１１８号に記載されている。この出願は、参照によりその全体が本明細書に援用される。
【００４４】
ＣＮＮの実装のために、カーネルデータは、検出されるオブジェクトのクラスに応じて変化するが、所定の検出セットに対して変化しない定数値のみから構成される。その結果、カーネルデータは、ホストプログラムの一部であり、ホストメモリに定数として記憶され、（即時データ用の）「ホストデータＢ」入力ポートに直接提供される。このデータは、命令パイプライン（ベクトルＩパイプ）を介して直接流れ、通信又は同期オーバーヘッド無に全てのコンテキストに亘って適用される。
【００４５】
（ＣＮＮ最適化−データ再編成）
タイル配列のデータフロー機能により、パフォーマンスの大幅な向上のためにある程度のデータフローオーバーヘッドが追加されるユニークな最適化が可能になる。これまで説明したベースラインの実装と、上述した図５に示すレイテンシの結果を有することは、上述した参照コードからタイルベースのプログラミングモデルへの例示的なアルゴリズムの直接マッピングに基づいている。これには、図７に示すように、レイヤ１とレイヤ２への入力を直接サブサンプリングすることが含まれる。サブサンプリングには様々な形式があるが、この形式は、他の全ての入力信号によって定義された領域と、他の全ての走査ラインとに畳み込みを単に実行して、畳み込みの入力を形成する。図７は、より一般的には、任意の二次元データ配列であり得るソース画像７００を含む。畳み込みウィンドウ７０２は、畳み込みを実行するために選択された画素（又は配列要素）で畳み込みを実行するために使用される。ウィンドウ７０２では、選択された画素は、位置０，０の画素７０４である。図７の実施形態では、行インデックスｙ及び列インデックスｘの両方が偶数である各画素が、畳み込みのために選択された画素である。ソース画像７００に対するこれらの選択された画素のセットが、配列７０６に示されている。
【００４６】
畳み込み自体は、畳み込みウィンドウ７０２内の入力画像の網掛け領域によって示されるように、隣接する信号値を使用するが、畳み込み領域の位置は、レイヤ１及びレイヤ２の両方において２倍にサブサンプリングされるので、これらのレイヤの各々の出力におけるベクトル幅は、図８に示すように２倍に低減される。図８は、各ステージで処理するために利用可能な要素の行の幅の観点から、例示的なＣＮＮのレイヤ１及びレイヤ２における畳み込みの動作を示す図である。レイヤ１内では、行スタック８０２は、プロセッサに記憶されている（この場合、タイルプロセッサのデータメモリ内にある）入力画像データを表す。例示的なＣＮＮにおける畳み込みは６×６畳み込みであるため、第１レイヤの畳み込みを実行するにはｙからｙ＋５までの６個の入力行が必要である。一実施形態では、ＣＮＮ処理は、ソース画像の水平スライス上で連続的に行われ、畳み込みを実行するのに必要な数の行を一度に記憶する。このような実施形態では、記憶された画像データの上位行がもはや必要でない場合、それらは画像データの新しい行によって上書きされてもよい。同様に、畳み込みから生じる信号データは、畳み込みの次のレイヤを実行するのに必要な数の行を有する水平スライスとして保持することもできる。
【００４７】
図８の行スタック８０４は、ベクトル幅の観点から、レイヤ１の畳み込みのために選択された画素である画像データ画素の割合を示す。レイヤ１の畳み込みが、レイヤ１の行ｙ内の選択された画素上で得られると、得られた信号値はレイヤ２の入力行（ラインｙ）８０６になる。レイヤ２の次の入力行のためのスペースは、行８０６の下に示されている。これらの行は、追加の行から開始して畳み込みを実行するのに十分な入力データがレイヤ１で受け取られたときに生成される。図８の実施形態では、レイヤ２も２倍にサブサンプリングされるため、レイヤ２の畳み込みのために選択された画素である入力ラインｙの画素の割合を表す行８０８は、行８０６の半分の幅である。
【００４８】
上述したようなサブサンプリングを用いて畳み込みを実行するときのタイルプロセッサデータメモリ内のデータストレージを図９に示す。図９における列は、４つのデータメモリ９０２，９０４，９０６，９０８を表している。これらは、図４のタイルプロセッサ配列のデータメモリ４１０と同様であるが、周囲のタイルプロセッサ及びこれらの間の相互接続は、図９に示されていない。図９の実施形態において、データプロセッサを接続する命令パイプラインは左から右へ移動するので、データメモリ９０２は、命令パイプラインの先頭に最も近いデータプロセッサに存在する。データメモリの各々は、データメモリ９０２の４つのメモリ領域（例えば、９１０，９１２，９１４，９１６）に分割される。図９の各メモリ領域の左側に沿って、上部に「ＩＮ」と示され、ソース画像内のｙ、ｘ位置で参照される画像データの列が存在する。画像データ又は他の二次元配列データがタイルプロセッサに記憶される方法は、画像の水平方向に移動しながら、各水平位置の画素又は要素を連続するメモリ領域にマッピングすることによって行われる。したがって、領域９１０の画素（すなわち、第１プロセッサ９０２の第１領域）は０のｘインデックスを有し、次の領域９１２の画素は１のｘインデックスを有する等のように、データメモリのグループ全体に亘って、１つのメモリの最下部の領域から次のメモリの最上部の領域に移動する。図９の実施形態では、ソース画像は１６画素幅であり、したがってｘは０〜１５の範囲である。他のプロセッサ配列は、より多くのデータプロセッサを有することができ、データメモリも、より多くの領域に分割され得るが、領域の数は２の累乗でなければならない。
【００４９】
図９の各データメモリは、ソース画像データに加えて、実行された畳み込みによって生じた信号データを記憶する。これらの出力要素は、本明細書では特徴マップ画素と呼んでもよく、より一般化された配列処理動作のための出力要素として表すことができる。本開示で説明されるＣＮＮ実施例では、６つのレイヤ１特徴マップが存在し、その結果、選択された画素当たり６つのレイヤ１の畳み込みと、結果として得られる６つの信号値とが得られる。図９の実施形態では、表記Ｓ１１はレイヤ１、特徴マップ１から出力される信号を指し、Ｓ２２はレイヤ１、特徴マップ２からの信号出力を指す。図９に示すように、レイヤ２畳み込みからの信号出力もデータメモリに記憶される。示された画像画素データがソース画像から受け取った第１データである実施形態では、レイヤ２畳み込み出力を生成するのに十分な画像行が受け取られていない。
【００５０】
図９に示すように、６つの行の画像データが各メモリ領域に記憶され、記憶された水平画像スライスの最上行の選択された画素に対してレイヤ１の畳み込みが実行されているが、この実施形態では、タイルプロセッサに対する命令は、第１プロセッサ９０２に対して、ｙインデックスが０、ｘインデックスが０，２，４，６の第１の４つの選択された画素で開始する畳み込みを実行させる。これらの畳み込みからの信号データは、タイルプロセッサ９０２の４つの領域に順次に記憶される。この動作は、プロセッサがｘ＝１０で選択された画素から「ランアウト」するまで、タイルプロセッサに亘って継続する。畳み込みは、各方向に６つの画素のウィンドウを必要とするので、１０番目の水平画素は、この画像に対して畳み込みを実行することができる最後の画素であり、１１番目から１５番目の領域は、それらが「エプロン（apron）」に存在し、サブサンプリングがない場合でも信号データを有しないことに留意するために「ａｐｒ」という名称を有する。畳み込みは、サブサンプリングされた位置の右に５つの画素を必要とするので、タイルプロセッサ９０６，９０８は畳み込みに関与していない。より多くのタイルプロセッサを使用するより広いソース画像を有するより現実的なシナリオでは、画像のエッジにおけるエプロン効果は軽微である。しかし、２倍のサブサンプリングからのタイルプロセッサアクティビティの損失は、このようなシナリオでは、利用可能なプロセッサのほぼ半分になる。
【００５１】
タイルプロセッサのデータプロセッサは、並列に動作するように設計されており、隣接する各プロセッサ間で１クロックサイクルのオフセットで同じ命令を実行する。畳み込み演算は、ベクトル全体に亘って並列に実行されるので、図８及び図９に示すベクトル長の減少は、レイヤ２で２倍、レイヤ３及びレイヤ４で２倍の利用可能な並列性を直接減少させる。これは、レイヤ１の６回、レイヤ２の６０回の畳み込みとは対照的に、レイヤ３及びレイヤ４がより多くの合計演算（レイヤ３ではベクトル当たり合計６４０回、レイヤ４では（オブジェクトが検出されたか否かに応じて）ベクトル当たり８０回又は６４０回の合計畳み込み）を実行するので、パフォーマンスにおいて２倍を超える影響を与える。
【００５２】
畳み込み演算は、各位置で同じであり、タイル化された実装では、データメモリに固定されたデータに対して実行される。レイヤ間で信号データを相互接続又は通信するために必要なデータ通信はない。この理由から、複数のラインからのサブサンプリングされたベクトルを、サブサンプリングされたラインよりも広い単一のベクトル内に現れるように再編成することが有利である。これにより、データの再編成にいくらかのオーバーヘッドが追加されるが、各再編成演算に対してレイヤ２〜レイヤ４の多数の畳み込みを実行することができる。
【００５３】
図１０の実施形態では、レイヤ１内のデータが再編成され、垂直方向のベクトル編成により、６つのラインｙ〜ｙ＋５及びラインｙ＋２〜ｙ＋７上で並行して垂直畳み込みが行われる。これにより、同じ出力ベクトル内に２つの隣接する出力ラインが現れる。レイヤ２内で同様の動作が実行され、同じ出力ベクトル内に４つの隣接するラインが現れるレイヤ２出力が得られる。図１０の行スタック１００２は、６つの代わりに８つの画像ラインを含むことを除いて、図８のスタック８０２と同様である。単一のタイルプロセッサ反復中に２つの行（すなわち、ラインｙ及びラインｙ＋２）の畳み込みを行うために、畳み込みは、ラインｙ＋２の畳み込みを実行するのに十分なデータが存在するように、２つのラインがさらに受け取られるまで遅延される。行スタック１００４は、ラインｙ及びラインｙ＋２の両方からの選択された画素を表す。これらは、単一のタイルプロセッサ配列反復で実行されるので、反復中に並列に２倍の畳み込みが実行される。レベル１でこの再構成を行うために、画像データは、実際には１つのタイルプロセッサ領域から別のタイルプロセッサ領域に移動されないことに留意されたい。代わりに、タイルプロセッサ配列は、配列の一方の側のプロセッサが行ｙの選択された画素に畳み込みを実行し、他方のプロセッサが行ｙ＋２の選択された画素に畳み込みを実行するようにプログラムされる。ラインｙ及びｙ＋２に沿った選択された画素の畳み込みが実行される反復の後、次の反復は、行結合ラインｙ＋４及びｙ＋６において、４ライン下で開始することができる。
【００５４】
図１１は、図１０に示すレイヤ１の再構成を実行する場合のタイルプロセッサメモリ内のデータストレージの例を示す図である。図１１は、図９に示すタイルプロセッサデータメモリの同じ配列を示しているが、図１１の実施形態では、タイルプロセッサは、領域１１０２〜１１１２に記憶された結果に対してラインｙに沿って選択された画素を用いてレイヤ１の畳み込みを実行し、領域１１１４〜１１２４に記憶された結果についてラインｙ＋２に沿って選択された画素を用いてレイヤ１の畳み込みを実行するようにプログラミングされている。各メモリ領域は６つのラインではなく８つのラインの画像データを含み、メモリ領域の第１グループはソース画像のｙ＝０行に対応する信号データを有し、メモリ領域の第２グループはｙ＝２行に対応する信号データを有する。メモリ領域の左側には、（ソース画像内の）レイヤ１への入力行を指定するためのインデックスｙ１が示されており、メモリ領域の右側には、（レイヤ１の出力特徴マップの各々における）レイヤ２への入力行を指定するためのインデックスｙ２が示されている。２倍のサブサンプリングのために、レイヤ１のｙ１＋２行は、レイヤ２のｙ２＋１行になる。
【００５５】
この再編成がどのように行われるかを理解するには、再編成を行わずに、ベースラインの実装のためにデータをサブサンプルする方法を最初に理解することが有効である。これを図１２に示す。水平畳み込みは、６つの画素の範囲１２０２に亘って実行される（列毎の反復）。ベクトルに対する並列演算の場合、サブサンプルされた位置からの０〜５のオフセットでサブサンプリングすることによって入力から画素を抽出する。この図は、水平畳み込みの最初の２回の反復で３番目のサブサンプリングされた位置に対して選択された画素を強調表示（ｘ）する。垂直畳み込みは、ｙ＋０〜ｙ＋５の６つのラインの各々に亘って水平反復を繰り返すことによって達成される。複数の畳み込み（この例では６回）は、複数のカーネルを用いて、同じサブサンプルデータに適用されることに留意されたい。
【００５６】
サブサンプリングされたベクトルのサイズを２倍にするには、図１３に示すように、同様の演算がｙ及びｙ＋２の２つの水平ラインに対して実行され、第２のサブサンプリングされたラインが第１のサブサンプリングされたラインのベクトルの最後に連結される。クラスライブラリによって、割り当ての範囲マスクを用いて単一のステートメントでこれを行うことができる。これにより、水平畳み込みを同時に２つの水平ライン上で実行することができる（２つのラインが同じカーネルを使用する）。これは、連結を行うためのセットアップ時間を犠牲にして、パフォーマンスを約２倍にする。単一のベクトル再編成のために複数のカーネルが畳み込まれるため、潜在的なパフォーマンス上の利点のほとんどが実現される。
【００５７】
図１０に示すように、レイヤ１で再編成されたデータに対して畳み込みを実行すると、レイヤ２の入力において単一ベクトル内に現れる２つの隣接する出力ラインが得られる。例えば、図１０の行１００６は、レイヤ２のラインｙとレイヤ２のラインｙ＋１とを連結する。この編成は、レイヤ２内での使用には便利ではない。なぜなら、隣接するラインは、同じ位置で垂直に現れるのが望ましいのに、この編成では、垂直方向に１つおきに隣接するからである。しかしながら、サブサンプリング後に入力データをシャッフルして、レイヤ２の畳み込みへの入力を形成することにより、より良い編成を形成することができる。
【００５８】
このシャッフリング動作を図１４に示す。図１０の上部のレイヤ１の再編成とは異なり、図１４のシャッフリングは、１つのタイルプロセッサメモリ領域から別のメモリ領域へのレイヤ１の信号データの実際の移動である。このアイデアは、互いに隣接するように意図された画素が同じメモリ領域に記憶されるように、配置された次の畳み込みのための画像データを得ることである。サブサンプリングにより、４つの水平畳み込みラインをほぼ同じベクトル幅に配置することができる（畳み込みを右境界で行うことができず、出力にはいくつかの位置が表示されないため、多少小さくなる）。これを達成するために、４つの垂直ラインがサブサンプルされ、偶数ラインの場合にはベクトルの左側から、同じベクトル内で連結され、奇数ラインの場合には右側から、同じベクトル内で連結される。この動作は、全ての水平畳み込み（ｘ＋０〜ｘ＋５）と、全ての垂直畳み込み（ｙ＋０〜ｙ＋５）とに適用されることを理解されたい。しかしながら、この再編成は、レイヤ２内の１６回の畳み込みに適用されるため、再編成のオーバーヘッドにもかかわらず、純利益が再び発生する。
【００５９】
同様の再編成がレイヤ３で実行され、畳み込み操作（この場合は５×５）に適するように、入力を配置する。しかしながら、レイヤ３は、このニューラルネットワーク例ではサブサンプリングを使用しないため、図１５に示すように、連続する水平ラインが垂直方向に隣接するように、入力ベクトルを単に回転する。他のレイヤと同様に、この結果、出力の４つの隣接するサブベクトルにおいて、１つのベクトル内に連続したラインが出力される。この再編成は、更なる再編成を必要とせずに、検出及び分類のために参照ＣＮＮコードのレイヤ４に直接使用することができる。
【００６０】
上述したデータ再編成及びシャッフルを用いる最適化されたＣＮＮ実装のこの実施形態は、上述したベースラインタイルプロセッサの実行（３２，０００，０００サイクル）の約３．１倍の性能、前述した従来技術の実行（１，４００，０００，０００サイクル）の約１３７倍の性能を１０，２００，０００サイクルで実行する。図１６は、この実装のレイテンシヒストグラムを示す図である。データ再編成は、ベースライン実装に約２１，０００，０００回の転送が追加されたが、タイル配列のデータフロー実装は、レイテンシプロファイルにほとんど影響を与えずにこれらの転送をサポートする。これは、この最適化を可能にするデータ再編成を使用可能にする重要な利点である。
【００６１】
（ＣＮＮの最適化−データフロー最適化）
これまでに提示されたタイル型ＣＮＮ実装のバージョンは全て、サブサンプリング又はベクトルをより大きなものに連結するために、比較的大きなデータ移動範囲を必要とする。これは、図１７に示すように、大きなベクトルを作成する別のスタイルでは避けることができる。ベクトルを連結する代わりに、異なるラインからのベクトルの要素がインターリーブされるので、異なるラインからの要素が、畳み込みへの入力の位置で交互になる。畳み込みの出力も交互の位置にある。図１１に示すレイヤ１の再編成の場合と同様に、レイヤ１でのこのインターリーブは、タイルプロセッサが畳み込みのためのデータをフェッチする方法によって達成される。
【００６２】
このインターリーブ技術は、データ要素の小さな動きだけを必要とするという利点を有する。なぜなら、これらの要素は、ベクトル幅の約半分ではなく、近くの位置に移動するからである。また、ベクトルを連結するためにデータを大きく動かす必要も無い。図１４及び図１に示す入力シャッフルと同様の入力シャッフルを必要とするが、これは単に入力インデックスの形式が異なるだけである。図１８は、レイヤ２に対するシャッフルを示している。他のレイヤも同様のスタイルを使用する。これは、レイヤ４でオブジェクトが以前のケースとは異なる順序で検出されることを意味するが、正確性には影響しない。
【００６３】
テストされたＣＮＮ画像認識例のインターリーブされた実施形態は、７，１７０，０００サイクル（すなわち、ベースラインの場合の約４．５倍、及び、従来技術のパフォーマンスの１９５倍）で完了する。データメモリ要件もより小さくなり、以前の最適化されたバージョンでは、２５６個のレジスタと２０５個のメモリ位置（スペルレジスタの場合には８９個の位置を含む）を使用し、データフローが最適化されたバージョンでは、２０８個の（流出なし）レジスタと、１００個の（共有データのみに対する）メモリ位置が使用される。
【００６４】
図１９は、データフロー最適化の利点を示す図である。レイテンシの分布ははるかに厳しく、７サイクルを超えるアクセスは非常に少なく、ベクトルのより広い範囲へのアクセスに起因する第２のピークも無い。アクセスの総数は、これまでに示された全ての中でも最小である。転送の総数は、前の最適化の場合の５５，１００，０００に比べて３４，３００，０００である。画像フレームを処理する反復回数が少なくなるため、ベースラインの場合に必要な３７，６００，０００回の転送よりも少なくなる。
【００６５】
本明細書で提供された説明は、本発明の原理及び実施形態を例示することを意味する。上記の開示が完全に理解されると、当業者には数多くの変形及び修正が明らかになるであろう。何れの請求項も、そのような変形及び修正の全てを包含するように解釈されることが意図されている。
【図１】
0006771018.tif 000003
【図２】
0006771018.tif 000004
【図３】
0006771018.tif 000005
【図４】
0006771018.tif 000006
【図５】
0006771018.tif 000007
【図６】
0006771018.tif 000008
【図７】
0006771018.tif 000009
【図８】
0006771018.tif 000010
【図９】
0006771018.tif 000011
【図１０】
0006771018.tif 000012
【図１１】
0006771018.tif 000013
【図１２】
0006771018.tif 000014
【図１３】
0006771018.tif 000015
【図１４】
0006771018.tif 000016
【図１５】
0006771018.tif 000017
【図１６】
0006771018.tif 000018
【図１７】
0006771018.tif 000019
【図１８】
0006771018.tif 000020
【図１９】
0006771018.tif 000021