(57)【要約】  方法が記載されており、上記方法は、実行レーンのアレイと二次元シフトレジスタとを有する画像プロセッサ上で畳み込みニューラルネットワーク層を実行するステップを含む。上記二次元シフトレジスタは、ローカルなそれぞれのレジスタ空間を上記実行レーンに提供する。上記畳み込みニューラルネットワークを実行するステップは、画像データの三次元ブロックの画像データの面を上記二次元シフトレジスタにロードするステップを含む。上記畳み込みニューラルネットワークを実行するステップは、係数値のアレイを用いて上記画像データの面の二次元畳み込みを実行するステップも含み、上記二次元畳み込みを実行するステップは、上記実行レーン内でそれぞれのピクセルおよび係数値を同時に乗算して、部分積のアレイを生成するステップと、上記実行レーン内で、上記部分積と、上記画像データ内の様々なステンシルのために上記二次元レジスタ内に維持されている部分積のそれぞれの累積とを同時に合計するステップと、上記二次元シフトレジスタアレイ内で内容をシフトすることによって上記実行レーン内で上記二次元畳み込みのための値の整列を行うステップと、をシーケンシャルに実行することによって行われる。
2019522291.tif 000002
【特許請求の範囲】
【請求項１】
方法であって、
実行レーンのアレイと二次元シフトレジスタとを有する画像プロセッサ上で畳み込みニューラルネットワーク層を実行するステップを備え、前記二次元シフトレジスタは、ローカルなそれぞれのレジスタ空間を前記実行レーンに提供し、前記畳み込みニューラルネットワークを実行するステップは、
ａ）画像データの三次元ブロックの画像データの面を前記二次元シフトレジスタにロードするステップと、
ｂ）係数値のアレイを用いて前記画像データの面の二次元畳み込みを実行するステップとを備え、前記二次元畳み込みを実行するステップは、
前記実行レーン内でそれぞれのピクセルおよび係数値を同時に乗算して、部分積のアレイを生成するステップと、
前記実行レーン内で、前記部分積と、前記画像データ内の様々なステンシルのために前記二次元レジスタ内に維持されている部分積のそれぞれの累積とを同時に合計するステップと、
前記二次元シフトレジスタアレイ内で内容をシフトすることによって前記実行レーン内で前記二次元畳み込みのための値の整列を行うステップと、をシーケンシャルに実行することによって行われる、方法。
【請求項２】
前記画像データの面および係数の次のアレイで上記のａ）およびｂ）を繰り返すステップをさらに備え、前記係数値のアレイは、前記畳み込みニューラルネットワーク層のための第１の係数セットからの面であり、前記係数値の次のアレイは、前記畳み込みニューラルネットワーク層のための第２の係数セットからの面である、請求項１に記載の方法。
【請求項３】
プログラムコードを格納した機械可読記憶媒体であって、前記プログラムコードは、実行レーンのアレイとローカルなそれぞれのレジスタ空間を前記実行レーンに提供する二次元シフトレジスタとを有する画像プロセッサによって処理されると、方法を実行させ、前記方法は、
畳み込みニューラルネットワークを実行するステップを備え、前記畳み込みニューラルネットワークを実行するステップは、
ａ）画像データの三次元ブロックの画像データの面を前記二次元シフトレジスタにロードするステップと、
ｂ）係数値のアレイを用いて前記画像データの面の二次元畳み込みを実行するステップと、を実行することによって行われ、前記二次元畳み込みを実行するステップは、
前記実行レーン内でそれぞれのピクセルおよび係数値を同時に乗算して、部分積のアレイを生成するステップと、
前記実行レーン内で、前記部分積と、前記画像データ内の様々なステンシルのために前記二次元レジスタ内に維持されている部分積のそれぞれの累積とを同時に合計するステップと、
前記二次元シフトレジスタアレイ内で内容をシフトすることによって前記実行レーン内で前記二次元畳み込みのための値の整列を行うステップと、をシーケンシャルに実行することによって行われる、機械可読記憶媒体。
【請求項４】
前記方法は、前記画像データの面および係数の次のアレイで上記のａ）およびｂ）を繰り返すステップをさらに備え、前記係数値のアレイは、前記畳み込みニューラルネットワーク層のための第１の係数セットからの面であり、前記係数値の次のアレイは、前記畳み込みニューラルネットワーク層のための第２の係数セットからの面である、請求項３に記載の機械可読記憶媒体。
【請求項５】
前記は、同じ係数セットから生成された中間面を前記実行レーンにローカルに蓄積するステップをさらに備える、請求項４に記載の機械可読記憶媒体。
【請求項６】
前記画像データは、前記画像データと１）前記第１の係数セットからの前記面との間で実行される二次元畳み込みと、前記画像データと２）前記第２の係数セットからの前記面との間で実行される二次元畳み込みとの間では、前記実行レーンにローカルに維持される、請求項３または４に記載の機械可読記憶媒体。
【請求項７】
前記同時に乗算するステップは、前記二次元シフトレジスタ内の画像データに対して同じ係数値を同時に乗算するステップをさらに備える、請求項３〜６のいずれか１項に記載の機械可読記憶媒体。
【請求項８】
前記値の整列を行うステップは、前記画像データに次の係数値を乗算する前に前記二次元シフトレジスタ内の画像データをシフトするステップを備える、請求項３〜７のいずれか１項に記載の機械可読記憶媒体。
【請求項９】
前記画像プロセッサは、各々がそれぞれの実行レーンアレイと二次元シフトレジスタとを有する複数のステンシルプロセッサを備え、前記画像プロセッサは、前記畳み込みニューラルネットワーク層の異なる係数セットを有する異なるステンシルプロセッサ上で同じ画像データを実行するように構成される、請求項３〜８のいずれか１項に記載の機械可読記憶媒体。
【請求項１０】
前記画像プロセッサは、各々がそれぞれの実行レーンアレイと二次元シフトレジスタとを有する複数のステンシルプロセッサを備え、前記画像プロセッサは、異なるステンシルプロセッサ上の異なる画像データを用いて前記異なるステンシルプロセッサ上で前記畳み込みニューラルネットワークの同じ係数セットを実行するように構成される、請求項３〜８のいずれか１項に記載の機械可読記憶媒体。
【請求項１１】
前記異なる画像データは、画像データの三次元ブロックの異なるブロックの複数の面を備える、請求項１０に記載の機械可読記憶媒体。
【請求項１２】
前記画像プロセッサは、前記畳み込みニューラルネットワーク層からの出力を、前記画像プロセッサによって算出される次の畳み込みニューラルネットワーク層のための入力として使用するように構成される、請求項３〜１１のいずれか１項に記載の機械可読記憶媒体。
【請求項１３】
前記画像プロセッサは、前記画像データが前記畳み込みニューラルネットワーク層の処理と第２の畳み込みニューラルネットワーク層の処理との間では前記実行レーンにローカルのままである状態で、前記畳み込みニューラルネットワーク層および前記第２の畳み込みニューラルネットワーク層を多重化するように構成される、請求項３〜１１のいずれか１項に記載の機械可読媒体。
【請求項１４】
装置であって、
ｉ）実行レーンのアレイと二次元シフトレジスタとを備える画像プロセッサを備え、前記二次元シフトレジスタは、それぞれのローカルなレジスタ空間を前記実行レーンに提供し、前記装置はさらに、
ｉｉ）格納されたプログラムコードを含む機械可読記憶媒体を備え、前記プログラムコードは、前記実行レーンのアレイによって実行されると、方法を実行させ、前記方法は、
畳み込みニューラルネットワークを実行するステップを備え、前記畳み込みニューラルネットワークを実行するステップは、
ａ）画像データの三次元ブロックの画像データの面を前記二次元シフトレジスタにロードするステップと、
ｂ）係数値のアレイを用いて前記画像データの面の二次元畳み込みを実行するステップと、を実行することによって行われ、前記二次元畳み込みを実行するステップは、
前記実行レーン内でそれぞれのピクセルおよび係数値を同時に乗算して、部分積のアレイを生成するステップと、
前記実行レーン内で、前記部分積と、前記画像データ内の様々なステンシルのために前記二次元レジスタ内に維持されている部分積のそれぞれの累積とを同時に合計するステップと、
前記二次元シフトレジスタアレイ内で内容をシフトすることによって前記実行レーン内で前記二次元畳み込みのための値の整列を行うステップと、をシーケンシャルに実行することによって行われる、装置。
【請求項１５】
前記画像プロセッサは、各々がそれぞれの実行レーンアレイと二次元シフトレジスタとを有する複数のステンシルプロセッサを備え、前記画像プロセッサは、前記畳み込みニューラルネットワーク層の異なる係数セットを有する異なるステンシルプロセッサ上で同じ画像データを実行するように構成される、請求項１４に記載の装置。
【請求項１６】
前記画像プロセッサは、各々がそれぞれの実行レーンアレイと二次元シフトレジスタとを有する複数のステンシルプロセッサを備え、前記画像プロセッサは、異なるステンシルプロセッサ上の異なる画像データを用いて前記異なるステンシルプロセッサ上で前記畳み込みニューラルネットワークの同じ係数セットを実行するように構成される、請求項１４に記載の装置。
【請求項１７】
前記異なる画像データは、画像データの三次元ブロックの異なるブロックの複数の面を備える、請求項１６に記載の装置。
【請求項１８】
前記画像プロセッサは、前記畳み込みニューラルネットワーク層からの出力を、前記画像プロセッサによって算出される次の畳み込みニューラルネットワーク層のための入力として使用するように構成される、請求項１４〜１７のいずれか１項に記載の装置。
【請求項１９】
前記画像プロセッサは、前記画像データが前記畳み込みニューラルネットワーク層の処理と第２の畳み込みニューラルネットワーク層の処理との間では前記実行レーンにローカルのままである状態で、前記畳み込みニューラルネットワーク層および前記第２の畳み込みニューラルネットワーク層を多重化するように構成される、請求項１４〜１７のいずれか１項に記載の装置。
【請求項２０】
前記画像プロセッサおよび機械可読記憶媒体は、コンピューティングシステムの一部である、請求項１４〜１９のいずれか１項に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
分野
本明細書は、一般に、画像処理に関し、特に、二次元画像プロセッサ上の畳み込みニューラルネットワークに関する。
【背景技術】
【０００２】
背景
画像処理は、典型的には、アレイに編成されたピクセル値の処理を含む。ここで、空間的に編成された二次元アレイは、画像の二次元的性質を捕捉する（追加の次元は、時間（例えば二次元画像のシーケンス）およびデータタイプ（例えば色）を含み得る）。典型的なケースでは、アレイ化されたピクセル値は、静止画像または動きの画像を捕捉するためにフレームのシーケンスを生成したカメラによって提供される。伝統的な画像プロセッサは、典型的には、２つの極端な側面のいずれかに分類される。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
第１の極端な側面は、汎用プロセッサまたは汎用状プロセッサ（例えばベクトル命令拡張を備えた汎用プロセッサ）上で実行されるソフトウェアプログラムとして画像処理タスクを実行する。第１の極端な側面は、一般的に非常に汎用性の高いアプリケーションソフトウェア開発プラットフォームを提供するが、関連するオーバーヘッド（例えば、命令フェッチおよびデコード、オンチップおよびオフチップデータの処理、投機的実行）と組み合わされたより精細な粒子のデータ構造の使用は、究極的には、プログラムコードの実行中に、データの単位あたり、より多くのエネルギーが消費される結果となる。
【０００４】
第２の逆の極端な側面は、固定機能のハードワイヤード回路系をはるかに大きなデータブロックに適用する。カスタム設計された回路に直接適用される、（粒度の細かいブロックとは対照的な）より大きなデータブロックの使用は、データ単位あたりの消費電力を大幅に削減する。しかしながら、カスタム設計された固定機能回路系の使用は、一般に、プロセッサが実行することができるタスクのセットが限られる結果となる。このように、（第１の極端な側面に関連する）幅広く汎用性の高いプログラミング環境は第２の極端な側面においては欠けている。
【０００５】
高度に汎用性の高いアプリケーションソフトウェア開発の機会と、データ単位あたりの電力効率の向上とを両立させた技術プラットフォームは、依然として望ましいが、欠けている解決策である。
【課題を解決するための手段】
【０００６】
概要
方法が記載されており、上記方法は、実行レーンのアレイと二次元シフトレジスタとを有する画像プロセッサ上で畳み込みニューラルネットワーク層を実行するステップを含む。上記二次元シフトレジスタは、ローカルなそれぞれのレジスタ空間を上記実行レーンに提供する。上記畳み込みニューラルネットワークを実行するステップは、画像データの三次元ブロックの画像データの面を上記二次元シフトレジスタにロードするステップを含む。上記畳み込みニューラルネットワークを実行するステップは、係数値のアレイを用いて上記画像データの面の二次元畳み込みを実行するステップも含み、上記二次元畳み込みを実行するステップは、上記実行レーン内でそれぞれのピクセルおよび係数値を同時に乗算して、部分積のアレイを生成するステップと、上記実行レーン内で、上記部分積と、上記画像データ内の様々なステンシルのために上記二次元レジスタ内に維持されている部分積のそれぞれの累積とを同時に合計するステップと、上記二次元シフトレジスタアレイ内で内容をシフトすることによって上記実行レーン内で上記二次元畳み込みのための値の整列を行うステップと、をシーケンシャルに実行することによって行われる。
【０００７】
また、装置が記載されており、上記装置は、実行レーンのアレイと二次元シフトレジスタとを有する画像プロセッサ上で畳み込みニューラルネットワーク層を実行するための手段を有する。上記二次元シフトレジスタは、ローカルなそれぞれのレジスタ空間を上記実行レーンに提供する。上記畳み込みニューラルネットワークを実行するための手段は、画像データの三次元ブロックの画像データの面を上記二次元シフトレジスタにロードするための手段を含む。上記畳み込みニューラルネットワークを実行するための手段は、係数値のアレイを用いて上記画像データの面の二次元畳み込みを実行するための手段も含み、上記二次元畳み込みを実行するための手段は、上記実行レーン内でそれぞれのピクセルおよび係数値を同時に乗算して、部分積のアレイを生成することと、上記実行レーン内で、上記部分積と、上記画像データ内の様々なステンシルのために上記二次元レジスタ内に維持されている部分積のそれぞれの累積とを同時に合計することと、上記二次元シフトレジスタアレイ内で内容をシフトすることによって上記実行レーン内で上記二次元畳み込みのための値の整列を行うことと、をシーケンシャルに実行することによって行われる。
【０００８】
図面のリスト
以下の説明および添付の図面は、様々な実施形態を例示するために使用される。
【図面の簡単な説明】
【０００９】
【図１】画像プロセッサハードウェアアーキテクチャの実施形態を示す。
【図２ａ】画像データのライングループへの解析、ライングループのシートへの解析、および重なり合うステンシルでシート上で実行される操作を示す。
【図２ｂ】画像データのライングループへの解析、ライングループのシートへの解析、および重なり合うステンシルでシート上で実行される操作を示す。
【図２ｃ】画像データのライングループへの解析、ライングループのシートへの解析、および重なり合うステンシルでシート上で実行される操作を示す。
【図２ｄ】画像データのライングループへの解析、ライングループのシートへの解析、および重なり合うステンシルでシート上で実行される操作を示す。
【図２ｅ】画像データのライングループへの解析、ライングループのシートへの解析、および重なり合うステンシルでシート上で実行される操作を示す。
【図３ａ】ステンシルプロセッサの実施形態を示す。
【図３ｂ】命令フォーマットの実施形態を示す図である。
【図４】ステンシルプロセッサ内のデータ計算ユニットの一実施形態を示す図である。
【図５ａ】二次元シフトアレイおよび実行レーンアレイを使用して、重なり合うステンシルで近隣の出力ピクセル値の対を決定する例を示す。
【図５ｂ】二次元シフトアレイおよび実行レーンアレイを使用して、重なり合うステンシルで近隣の出力ピクセル値の対を決定する例を示す。
【図５ｃ】二次元シフトアレイおよび実行レーンアレイを使用して、重なり合うステンシルで近隣の出力ピクセル値の対を決定する例を示す。
【図５ｄ】二次元シフトアレイおよび実行レーンアレイを使用して、重なり合うステンシルで近隣の出力ピクセル値の対を決定する例を示す。
【図５ｅ】二次元シフトアレイおよび実行レーンアレイを使用して、重なり合うステンシルで近隣の出力ピクセル値の対を決定する例を示す。
【図５ｆ】二次元シフトアレイおよび実行レーンアレイを使用して、重なり合うステンシルで近隣の出力ピクセル値の対を決定する例を示す。
【図５ｇ】二次元シフトアレイおよび実行レーンアレイを使用して、重なり合うステンシルで近隣の出力ピクセル値の対を決定する例を示す。
【図５ｈ】二次元シフトアレイおよび実行レーンアレイを使用して、重なり合うステンシルで近隣の出力ピクセル値の対を決定する例を示す。
【図５ｉ】二次元シフトアレイおよび実行レーンアレイを使用して、重なり合うステンシルで近隣の出力ピクセル値の対を決定する例を示す。
【図５ｊ】二次元シフトアレイおよび実行レーンアレイを使用して、重なり合うステンシルで近隣の出力ピクセル値の対を決定する例を示す。
【図５ｋ】二次元シフトアレイおよび実行レーンアレイを使用して、重なり合うステンシルで近隣の出力ピクセル値の対を決定する例を示す。
【図６】統合された実行レーンアレイおよび二次元シフトアレイのための単位セルの実施形態を示す図である。
【図７】３Ｄ畳み込みを示す。
【図８】ＣＮＮ層を示す。
【図９ａ】画像係数面を用いた３Ｄ畳み込みを示す。
【図９ｂ】対応する係数セットを用いた画像データに相当する２つの３×３ステンシルの２Ｄ畳み込みを示す。
【図１０ａ】画像面と係数面を有する係数セットとを用いたＣＮＮ層の実行を示す。
【図１０ｂ】画像面と係数面を有する係数セットとを用いたＣＮＮ層の実行を示す。
【図１０ｃ】画像面と係数面を有する係数セットとを用いたＣＮＮ層の実行を示す。
【図１０ｄ】画像面と係数面を有する係数セットとを用いたＣＮＮ層の実行を示す。
【図１０ｅ】画像面と係数面を有する係数セットとを用いたＣＮＮ層の実行を示す。
【図１０ｆ】画像面と係数面を有する係数セットとを用いたＣＮＮ層の実行を示す。
【図１０ｇ】画像面と係数面を有する係数セットとを用いたＣＮＮ層の実行を示す。
【図１０ｈ】画像面と係数面を有する係数セットとを用いたＣＮＮ層の実行を示す。
【図１０ｉ】画像面と係数面を有する係数セットとを用いたＣＮＮ層の実行を示す。
【図１０ｊ】画像面と係数面を有する係数セットとを用いたＣＮＮ層の実行を示す。
【図１１ａ】二次元シフトレジスタを有する画像プロセッサによる２つの３×３ステンシルのための二次元畳み込みを示す。
【図１１ｂ】二次元シフトレジスタを有する画像プロセッサによる２つの３×３ステンシルのための二次元畳み込みを示す。
【図１１ｃ】二次元シフトレジスタを有する画像プロセッサによる２つの３×３ステンシルのための二次元畳み込みを示す。
【図１１ｄ】二次元シフトレジスタを有する画像プロセッサによる２つの３×３ステンシルのための二次元畳み込みを示す。
【図１１ｅ】二次元シフトレジスタを有する画像プロセッサによる２つの３×３ステンシルのための二次元畳み込みを示す。
【図１１ｆ】二次元シフトレジスタを有する画像プロセッサによる２つの３×３ステンシルのための二次元畳み込みを示す。
【図１１ｇ】二次元シフトレジスタを有する画像プロセッサによる２つの３×３ステンシルのための二次元畳み込みを示す。
【図１１ｈ】二次元シフトレジスタを有する画像プロセッサによる２つの３×３ステンシルのための二次元畳み込みを示す。
【図１１ｉ】二次元シフトレジスタを有する画像プロセッサによる２つの３×３ステンシルのための二次元畳み込みを示す。
【図１１ｊ】二次元シフトレジスタを有する画像プロセッサによる２つの３×３ステンシルのための二次元畳み込みを示す。
【図１２】第１画像プロセッサＣＮＮ層構成を示す。
【図１３】第２画像プロセッサＣＮＮ層構成を示す。
【図１４】第３画像プロセッサＣＮＮ層構成を示す。
【図１５】画像プロセッサ上での複数のＣＮＮ層の多重化に関する。
【図１６】画像プロセッサ上でＣＮＮ層を実行する方法を示す。
【図１７】コンピューティングシステムを示す。
【発明を実施するための形態】
【００１０】
詳細な記載
ａ．画像プロセッサハードウェアアーキテクチャおよび動作
図１は、ハードウェアで実現される画像プロセッサのためのアーキテクチャ１００の実施形態を示す。画像プロセッサは、例えば、シミュレートされた環境内で仮想プロセッサ用に書かれたプログラムコードを、ハードウェアプロセッサによって実際に実行されるプログラムコードに変換するコンパイラによって対象とされてもよい。図１に示すように、アーキテクチャ１００は、複数のラインバッファユニット１０１＿１〜１０１＿Ｍ（以下、「ラインバッファ」、「ラインバッファユニット」など）を含み、それらは、複数のステンシルプロセッサユニット１０２＿１〜１０２＿Ｎ（以下、「ステンシルプロセッサ」、「ステンシルプロセッサユニット」など）および対応するシート生成部ユニット１０３＿１〜１０３＿Ｎ（以下、「シート生成部」、「シート生成部ユニット」など）に、ネットワーク１０４（例えば、ネットワークオンチップ（ＮＯＣ）（オンチップスイッチネットワーク、オンチップリングネットワークまたは他の種類のネットワークを含む））を介して相互接続される。一実施形態では、どのラインバッファユニットが、ネットワーク１０４を介してどのシート生成部および対応するステンシルプロセッサに接続してもよい。
【００１１】
一実施形態では、プログラムコードはコンパイルされ、対応するステンシルプロセッサ１０２にロードされて、ソフトウェア開発者によって以前に定義された画像処理動作を実行する（プログラムコードは、例えば、設計および実装に応じて、ステンシルプロセッサの関連のシート生成部１０３にもロードされてもよい）。少なくともいくつかの例では、画像処理パイプラインを、第１のパイプラインステージ用の第１のカーネルプログラムを第１のステンシルプロセッサ１０２＿１にロードし、第２のパイプラインステージ用の第２のカーネルプログラムを第２のステンシルプロセッサ１０２＿２にロードするなどして、実現することができ、第１のカーネルはパイプラインの第１ステージの機能を実行し、第２のカーネルはパイプラインの第２ステージの機能を実行し、追加の制御フロー方法がインストールされて、出力画像データをパイプラインの１つのステージから次のステージに渡す。
【００１２】
他の構成では、画像プロセッサは、同じカーネルプログラムコードを動作させる２つ以上のステンシルプロセッサ１０２＿１，１０２＿２を有する並列マシンとして実現することができる。例えば、画像データの高密度かつ高データレートのストリームが、各々が同じ機能を実行する複数のステンシルプロセッサにわたってフレームを広げることによって処理されてもよい。
【００１３】
さらに他の構成では、カーネルの本質的に任意の有向非巡回グラフ（ＤＡＧ）のハードウェアプロセッサへのロードを、それぞれのステンシルプロセッサをそれら自身のプログラムコードのカーネルとともに構成し、適切な制御フローフックをハードウェアに構成して、出力画像をＤＡＧ設計における１つのカーネルから次のカーネルの入力に向けることによって、行なってもよい。
【００１４】
一般的なフローとして、画像データのフレームは、マクロＩ／Ｏユニット１０５で受信され、フレーム単位でラインバッファユニット１０１の１つ以上に渡される。特定のラインバッファユニットは、それの画像データのフレームを、「ライングループ」と呼ばれる画像データのより小さな領域に解析し、次いでライングループをネットワーク１０４を介して特定のシート生成部に渡す。ある完全な（ｆｕｌｌ）単数のライングループを、例えば、フレームの複数の連続した完全な行または列のデータで構成することができる（簡潔にするために、本明細書では主に連続した行と称する）。シート生成部は、画像データのライングループを「シート」と呼ばれる画像データのより小さな領域にさらに解析し、そのシートを対応するステンシルプロセッサに提示する。
【００１５】
単一入力の画像処理パイプラインやＤＡＧフローの場合、一般に、入力フレームは、同じラインバッファユニット１０１＿１に向けられ、それは、画像データをライングループに解析し、ライングループをシート生成部１０３＿１（対応するステンシルプロセッサ１０２＿１はパイプライン／ＤＡＧにおいて第１のカーネルのコードを実行している）に向ける。ステンシルプロセッサ１０２＿１による、それが処理するライングループでの動作が終了した後、シート生成部１０３＿１は、出力ライングループを「下流」のラインバッファユニット１０１＿２に送信する（ある使用例では、出力ライングループは、先に入力ライングループを送信したのと同じラインバッファユニット１０１＿１に送り返すことができる）。
【００１６】
自身のそれぞれの他のシート生成部およびステンシルプロセッサ（例えば、シート生成部１０３＿２およびステンシルプロセッサ１０２＿２）上で実行されるパイプライン／ＤＡＧにおける次のステージ／動作を表す１つ以上の「消費側」カーネルは、下流ラインバッファユニット１０１＿２から、第１のステンシルプロセッサ１０２＿１によって生成された画像データを受信する。このようにして、第１のステンシルプロセッサ上で動作する「作成側」カーネルは、その出力データが、第２のステンシルプロセッサ上で動作する「消費側」カーネルに転送され、消費側カーネルは、パイプラインまたはＤＡＧ全体の設計と整合する作成側カーネルの後に次のタスクのセットを実行する。
【００１７】
ステンシルプロセッサ１０２は、画像データの複数の重なり合うステンシル上で同時に動作するように設計されている。複数の重なり合うステンシルおよびステンシルプロセッサの内部ハードウェア処理能力は、シートのサイズを効果的に決定する。ここでは、ステンシルプロセッサ１０２内で、実行レーンのアレイが一致して動作して、複数の重なり合うステンシルによってカバーされる画像データ表面領域を同時に処理する。
【００１８】
以下でより詳細に説明するように、様々な実施形態において、画像データのシートは、ステンシルプロセッサユニット１０２内において二次元レジスタアレイ構造にロードされる。シートおよび二次元レジスタアレイ構造の使用は、大量のデータを、大量のレジスタ空間に、例えば、処理タスクが実行レーンアレイによってその直後に直接データ上で実行される単一のロード動作として移動することによって、電力消費の改善を効果的に提供すると考えられている。さらに、実行レーンアレイおよび対応するレジスタアレイの使用は、容易にプログラマブル／設定可能な異なるステンシルサイズを提供する。
【００１９】
図２ａ〜図２ｅは、ラインバッファユニット１０１の解析アクティビティ、およびシート生成部ユニット１０３のより微細な粒子の解析アクティビティ、ならびにシート生成部ユニット１０３に結合されるステンシルプロセッサ１０２のステンシル処理アクティビティの両方のハイレベルの実施形態を示す。
【００２０】
図２ａは、画像データ２０１の入力フレームの一実施形態を示す。図２ａはまた、ステンシルプロセッサが動作するように設計された３つの重なり合うステンシル２０２（各ステンシルは３ピクセル×３ピクセルの寸法を有する）の概要を示す。各ステンシルがそれぞれ出力画像データを生成する出力ピクセルは、ベタ黒で強調表示される。簡潔にするために、３つの重なり合うステンシル２０２は、垂直方向にのみ重なるように示されている。実際には、ステンシルプロセッサは、垂直方向および水平方向の両方に重なるステンシルを有するように設計されてもよいことを認識することが適切である。
【００２１】
図２ａに見られるように、ステンシルプロセッサ内の垂直に重なり合うステンシル２０２のために、フレーム内に単一のステンシルプロセッサが動作することができる画像データの広い帯域が存在する。以下でより詳細に説明するように、一実施形態では、ステンシルプロセッサは、データを、それらの重なり合うステンシル内で、左から右への態様で、画像データにわたって処理する（そして、次のラインのセットに対して、上から下の順序で繰り返す）。このように、ステンシルプロセッサがそれらの動作を前方に進めるにつれて、ベタ黒出力ピクセルブロックの数は、水平方向に右に成長する。上述したように、ラインバッファユニット１０１は、ステンシルプロセッサが今後の拡張された数のサイクルにわたって動作するのに十分な入来フレームからの入力画像データのライングループを解析することを担う。ライングループの例示的な図示は、陰影領域２０３として示されている。一実施形態では、ラインバッファユニット１０１は、ライングループをシート生成部との間で送受信するための異なるダイナミクスを理解することができる。例えば、「完全なグループ」と呼ばれる１つのモードによれば、画像データの完全な全幅のラインが、ラインバッファユニットとシート生成部との間で渡される。「仮想的に高い」と呼ばれる第２のモードによれば、ライングループは最初に全幅行のサブセットと共に渡される。その後、残りの行は、より小さい（全幅未満の）片で順番に渡される。
【００２２】
入力画像データのライングループ２０３がラインバッファユニットによって画定され、シート生成部ユニットに渡されると、シート生成部ユニットはさらに、ライングループを、ステンシルプロセッサのハードウェア制限に、より正確に適合する、より微細なシートに、解析する。より具体的には、以下でさらに詳細に説明するように、一実施形態では、各ステンシルプロセッサは、二次元シフトレジスタアレイからなる。二次元シフトレジスタアレイは、本質的に、画像データを実行レーンのアレイの「真下」にシフトし、シフトのパターンは、各実行レーンをそれ自身のステンシル内においてデータに対して動作させる（すなわち、各実行レーンは、それ自身の情報のステンシル上で処理して、そのステンシルの出力を生成する）。一実施形態では、シートは、二次元シフトレジスタアレイを「満たす」か、さもなければ二次元シフトレジスタアレイにロードされる入力画像データの表面領域である。
【００２３】
以下でより詳細に説明するように、様々な実施形態では、実際には、任意のサイクルでシフト可能な二次元レジスタデータの複数の層が存在する。便宜上、本記載の多くは、「二次元シフトレジスタ」などの用語を、シフト可能な二次元レジスタデータの１つ以上のそのような層を有する構造を指すために単純に使用する。
【００２４】
したがって、図２ｂに見られるように、シート生成部は、ライングループ２０３から最初のシート２０４を解析し、それをステンシルプロセッサに供給する（ここで、データのシートは、参照番号２０４によって全体的に識別される５×５陰影領域に対応する）。図２ｃおよび図２ｄに示すように、ステンシルプロセッサは、重なるステンシル２０２をシート上で左から右へ効果的に移動させることによって、入力画像データのシートに対して動作する。図２ｄのように、シート内のデータから出力値を計算することができるピクセル数（色が濃くなった３×３アレイにおける９個）が使い果たされる（他のピクセル位置は、シート内の情報から決定される出力値を有することができない）。簡単にするために、画像の境界領域は無視されている。
【００２５】
図２ｅにおいて見られるように、シート生成部は次いで、ステンシルプロセッサが動作を継続する次のシート２０５を提供する。ステンシルが次のシートに対して動作を開始するときのステンシルの初期位置は、（先に図２ｄに示されている）最初のシート上の消耗点から右への次の進行であることに留意されたい。新たなシート２０５で、ステンシルプロセッサが最初のシートの処理と同じ態様で新たなシートに対して動作するにつれ、ステンシルは単に右に移動し続ける。
【００２６】
出力ピクセル位置を取り囲むステンシルの境界領域のために、第１のシート２０４のデータと第２のシート２０５のデータとの間にいくらかの重なりがあることに留意されたい。重なりは、シート生成部が重なり合うデータを２回再送信することによって簡単に処理することができる。別の実現例では、次のシートをステンシルプロセッサに供給するために、シート生成部は、ステンシルプロセッサに新たなデータを送るだけに進んでもよく、ステンシルプロセッサは、前のシートからの重なり合うデータを再利用する。
【００２７】
ｂ．ステンシルプロセッサ設計および動作
図３ａは、ステンシルプロセッサユニットアーキテクチャ３００の実施形態を示す。図３ａにおいて見られるように、ステンシルプロセッサは、データ計算ユニット３０１、スカラープロセッサ３０２および関連するメモリ３０３およびＩ／Ｏユニット３０４を含む。データ計算ユニット３０１は、実行レーンのアレイ３０５、二次元シフトアレイ構造３０６、およびアレイの特定の行または列に関連する別個のそれぞれのランダムアクセスメモリ３０７を含む。
【００２８】
Ｉ／Ｏユニット３０４は、シート生成部から受け取ったデータの「入力」シートをデータ計算ユニット３０１にロードし、ステンシルプロセッサからのデータの「出力」シートをシート生成部に格納する役割を果たす。一実施形態では、データ計算ユニット３０１へのシートデータのロードは、受け取ったシートを画像データの行／列に解析し、画像データの行／列を二次元シフトレジスタ構造３０６または実行レーンアレイの行／列のそれぞれのランダムアクセスメモリ３０７にロードすることを必要とする（以下でより詳細に説明する）。シートが最初にメモリ３０７にロードされる場合、実行レーンアレイ３０５内の個々の実行レーンは、適宜、ランダムアクセスメモリ３０７からシートデータを二次元シフトレジスタ構造３０６にロードすることができる（例えば、シートのデータ上での動作のすぐ前のロード命令として）。データのシートのレジスタ構造３０６へのロード（シート生成部からの直接的であろうとまたはメモリ３０７からであろうと）が完了すると、実行レーンアレイ３０５の実行レーンはデータに対して動作し、最終的に、完成したデータをシートとしてシート生成部に、またはランダムアクセスメモリ３０７に「書き戻す」。実行レーンがランダムアクセスメモリ９０７に書き戻す場合、Ｉ／Ｏユニット３０４はランダムアクセスメモリ３０７からデータをフェッチして出力シートを形成し、出力シートはシート生成部に転送される。
【００２９】
スカラープロセッサ３０２は、スカラーメモリ３０３からステンシルプロセッサのプログラムコードの命令を読み出し、実行レーンアレイ３０５の実行レーンに命令を発行するプログラムコントローラ３０９を含む。一実施形態では、データ計算ユニット３０１から単一命令複数データ（ＳＩＭＤ）のような動作を実行するために、単一の同じ命令がアレイ３０５内のすべての実行レーンにブロードキャストされる。一実施形態では、スカラーメモリ３０３から読み出され、実行レーンアレイ３０５の実行レーンに発行される命令の命令フォーマットは、命令当たり２つ以上のオペコードを含む非常に長い命令語（ＶＬＩＷ）タイプのフォーマットを含む。さらなる実施形態では、ＶＬＩＷフォーマットは、（以下に説明するように、一実施形態では２つ以上の従来のＡＬＵ動作を指定することができる）各実行レーンのＡＬＵによって実行される数学的機能を指示するＡＬＵオペコードと、（特定の実行レーンまたは実行レーンのセットに対してメモリ操作を指示する）メモリオペコードとの両方を含む。
【００３０】
「実行レーン」という用語は、命令を実行することができる１つ以上の実行ユニットのセット（例えば、命令を実行することができる論理回路系）を指す。実行レーンは、しかしながら、様々な実施形態では、単なる実行ユニットを超えた、よりプロセッサに似た機能を含むことができる。例えば、１つ以上の実行ユニットに加えて、実行レーンは、受信された命令をデコードする論理回路系、または、より複数命令複数データ（ＭＩＭＤ）のような設計の場合、命令をフェッチおよびデコードする論理回路系も含むことができる。ＭＩＭＤのようなアプローチに関しては、ここでは集中プログラム制御アプローチが主に記載されているが、より分散型のアプローチが様々な代替実施形態（例えば、アレイ３０５の各実行レーン内のプログラムコードおよびプログラムコントローラを含む）において実施されてもよい。
【００３１】
実行レーンアレイ３０５、プログラムコントローラ３０９および二次元シフトレジスタ構造３０６の組み合わせは、広範囲のプログラマブルな機能のための幅広く適応可能／設定可能なハードウェアプラットフォームを提供する。例えば、アプリケーションソフトウェア開発者は、個々の実行レーンが多種多様な機能を実行することができ、任意の出力アレイ位置に近接した入力画像データに容易にアクセスすることができれば、寸法（例えばステンシルサイズ）だけでなく幅広い異なる機能能力を有するカーネルをプログラミングすることができる。
【００３２】
実行レーンアレイ３０５によって操作される画像データのためのデータ記憶装置として機能することとは別に、ランダムアクセスメモリ３０７は、１つ以上のルックアップテーブルを保持することもできる。様々な実施形態では、１つ以上のスカラールックアップテーブルをスカラーメモリ３０３内でインスタンス化することもできる。
【００３３】
スカラールックアップは、同じルックアップテーブルからの同じインデックスからの同じデータ値を実行レーンアレイ３０５内の各実行レーンに渡すことを含む。様々な実施形態では、上述のＶＬＩＷ命令フォーマットは、スカラープロセッサによって実行されるルックアップ動作をスカラールックアップテーブルに向けるスカラーオペコードを含むようにも拡張される。オペコードとともに使用するために指定されたインデックスは、即値オペランドでもよいし、他のデータ記憶位置からフェッチされてもよい。いずれにせよ、一実施形態では、スカラーメモリ内のスカラールックアップテーブルからのルックアップは、基本的に同じクロックサイクル中に実行レーンアレイ３０５内のすべての実行レーンに同じデータ値をブロードキャストすることを含む。ルックアップテーブルの使用および動作に関する追加の詳細は、以下でさらに説明する。
【００３４】
図３ｂは、上述のＶＬＩＷ命令ワードの実施形態を要約したものである。図３ｂにおいて見られるように、ＶＬＩＷ命令ワードフォーマットは、３つの別個の命令、すなわち、１）スカラープロセッサによって実行されるスカラー命令３５１、２）実行レーンアレイ内でそれぞれのＡＬＵによってＳＩＭＤ方式でブロードキャストされ実行されるＡＬＵ命令３５２、および３）部分的ＳＩＭＤ方式でブロードキャストされ実行されるメモリ命令３５３に対するフィールドを含む（例えば、実行レーンアレイ内において同じ行に沿った実行レーンが同じランダムアクセスメモリを共有する場合、異なる行の各々からの１つの実行レーンが実際に命令を実行する（メモリ命令３５３のフォーマットは、各行からのどの実行レーンが命令を実行するかを識別するオペランドを含むことができる）。
【００３５】
１つ以上の即値オペランドに対するフィールド３５４も含まれる。命令３５１，３５２，３５３のどれが、どの即値オペランド情報を用いるかは命令フォーマットで識別されてもよい。命令３５１，３５２，３５３の各々は、また、それ自身のそれぞれの入力オペランドおよび結果情報（例えば、ＡＬＵ演算用のローカルレジスタならびにメモリアクセス命令用のローカルレジスタおよびメモリアドレス）を含む。一実施形態では、スカラー命令３５１は、実行レーンアレイ内の実行レーンが他の２つの命令３５２，３５３のいずれかを実行する前にスカラープロセッサによって実行される。すなわち、ＶＬＩＷワードの実行は、スカラー命令３５１が実行される第１のサイクルと、続いて他の命令３５２，３５３が実行されてもよい第２のサイクルとを含む。（様々な実施形態では、命令３５２，３５３は並列して実行されてもよい）。
【００３６】
一実施形態では、スカラープロセッサ３０２によって実行されるスカラー命令は、シートをデータ計算ユニット３０１のメモリもしくは２Ｄシフトレジスタ３０６からロードまたはそれに格納するようシート生成部１０３に発行されるコマンドを含む。ここで、シート生成部の動作は、ラインバッファユニット１０１の動作またはスカラープロセッサ３０２によって発行されたコマンドをシート生成部１０３が完了するのに要するサイクル数のプレランタイムの理解を妨げる他の変数に依存し得る。したがって、一実施形態では、スカラー命令３５１がシート生成部１０３に発行されるべきコマンドに対応するか、さもなければコマンドをシート生成部１０３に発行させるＶＬＩＷワードは、他の２つの命令フィールド３５２，３５３に無操作（ＮＯＯＰ）命令も含む。次に、プログラムコードは、シート生成部がデータ計算ユニットに対するそのロードまたはデータ計算ユニットからのその格納を完了するまで、命令フィールド３５２，３５３についてＮＯＯＰ命令のループに入る。ここで、シート生成部にコマンドを発行すると、スカラープロセッサは、シート生成部がコマンドの完了時にリセットするインターロックレジスタのビットをセットしてもよい。ＮＯＯＰループの間、スカラープロセッサはインターロックビットのビットを監視する。スカラープロセッサが、シート生成部がそのコマンドを完了したことを検出すると、通常の実行が再び開始される。
【００３７】
図４は、データ計算ユニット４０１の一実施形態を示す。図４において見られるように、データ計算ユニット４０１は、二次元シフトレジスタアレイ構造４０６「の上に」論理的に位置決めされる実行レーンのアレイ４０５を含む。上述したように、様々な実施形態では、シート生成部によって提供される画像データのシートが二次元シフトレジスタ４０６にロードされる。実行レーンは、レジスタ構造４０６からのシートデータに対して動作する。
【００３８】
実行レーンアレイ４０５およびシフトレジスタ構造４０６は、互いに対して適所に固定される。しかし、シフトレジスタアレイ４０６内のデータは、戦略的かつ調整された態様でシフトして、実行レーンアレイ内の各実行レーンがデータ内で異なるステンシルを処理するようにする。したがって、各実行レーンは、生成されている出力シートにおいて異なるピクセルに対する出力画像値を決定する。図４のアーキテクチャから、実行レーンアレイ４０５が垂直に近接する実行レーンおよび水平に近接する実行レーンを含むので、重なり合うステンシルが垂直に配置されるだけでなく水平にも配置されることは明らかである。
【００３９】
データ計算ユニット４０１のいくつかの注目すべきアーキテクチャ上の特徴には、実行レーンアレイ４０５よりも広い寸法を有するシフトレジスタ構造４０６が含まれる。すなわち、実行レーンアレイ４０５の外側にレジスタ４０９の「ハロー」が存在する。ハロー４０９は、実行レーンアレイの２つの側に存在するように示されているが、実現例に応じて、実行レーンアレイ４０５の２つ未満（１つ）またはそれ以上（３つまたは４つ）の側に存在してもよい。ハロー４０５は、データが実行レーン４０５の「下に」シフトしているときに、実行レーンアレイ４０５の境界の外側にこぼれ出るデータのための「スピルオーバ」空間を提供する働きをする。単純なケースとして、実行レーンアレイ４０５の右端を中心とする５×５のステンシルは、ステンシルの最も左側のピクセルが処理されるとき、さらに右側に４つのハローレジスタ位置を必要とすることになる。図面を簡単にするために、図４は、名目上の実施形態において、どちらの側（右、底）のレジスタでも水平方向接続および垂直方向接続の両方を有するであろうとき、ハローの右側のレジスタを、水平方向シフト接続を有するだけとして、およびハローの底側のレジスタを、垂直方向シフト接続を有するだけとして示す。
【００４０】
アレイの各行および／もしくは各列またはその一部分に結合されるランダムアクセスメモリ４０７によって追加のスピルオーバールームが提供される（例えば、ランダムアクセスメモリは、４つの実行レーン行状と２つの実行レーン列状にまたがる実行レーンアレイの「領域」に割り当てられてもよい。簡略化のために、アプリケーションの残りの部分は、主に、行および／または列に基づく割り当てスキームを指す）。ここで、実行レーンのカーネル動作が、それが（一部の画像処理ルーチンが必要とする場合がある）二次元シフトレジスタアレイ４０６の外にあるピクセル値を処理することを必要とする場合、画像データの面は、例えばハロー領域４０９からランダムアクセスメモリ４０７にさらにこぼれ出ることができる。例えば、ハードウェアが実行レーンアレイの右端の実行レーンの右側にわずか４つの記憶素子のハロー領域を含む場合の６Ｘ６ステンシルを考える。この場合、ステンシルを完全に処理するために、データをハロー４０９の右端からさらに右側にシフトする必要があるであろう。ハロー領域４０９の外側にシフトされたデータは、ランダムアクセスメモリ４０７にこぼれ出る。ランダムアクセスメモリ４０７および図３のステンシルプロセッサの他の適用例を以下でさらに説明する。
【００４１】
図５ａないし図５ｋは、上述のように実行レーンアレイ「の下で」二次元シフトレジスタアレイ内で画像データがシフトされる態様の実施例を示す。図５ａにおいて見られるように、二次元シフトアレイのデータ内容は第１のアレイ５０７に示され、実行レーンアレイはフレーム５０５によって示される。また、実行レーンアレイ内の２つの近隣の実行レーン５１０が簡略化して示されている。この簡単な図示５１０では、各実行レーンは、シフトレジスタからデータを受け付け、ＡＬＵ出力からデータを受け付け（例えば、サイクルにわたってアキュムレータとして動作する）、または出力データを出力先に書き込むことができるレジスタＲ１を含む。
【００４２】
各実行レーンはまた、ローカルレジスタＲ２において、二次元シフトアレイにおけるそれ「の下の」内容が利用可能である。したがって、Ｒ１は実行レーンの物理レジスタであり、Ｒ２は二次元シフトレジスタアレイの物理レジスタである。実行レーンは、Ｒ１および／またはＲ２によって提供されるオペランドに対して動作可能なＡＬＵを含む。さらに詳細に後述するように、一実施形態では、シフトレジスタは、実際にはアレイ位置ごとに複数の（ある「深さ」の）記憶／レジスタ素子で実現されるが、シフト動作は記憶素子の１つの面に限られる（例えば、記憶素子の１つの面のみがサイクルごとにシフトすることができる）。図５ａないし図５ｋは、それぞれの実行レーンから結果のＸを格納するために使用されるとしてこれらのより深いレジスタ位置の１つを示している。例示を容易にするために、より深い結果のレジスタは、その対応するレジスタＲ２の下ではなく、その横に図示されている。
【００４３】
図５ａ〜図５ｋは、実行レーンアレイ５０５内に示された実行レーン位置５１１の対に中心位置が整列された２つのステンシルの計算に焦点を当てている。例示を容易にするために、実行レーン５１０の対は、実際には、以下の例によれば、それらが垂直方向の近隣実行レーンである場合に、水平方向の近隣実行レーンとして図示されている。
【００４４】
図５ａで最初に見られるように、実行レーン５１１はそれらの中央のステンシル位置上に中心を配される。図５ｂは、両方の実行レーン５１１によって実行されるオブジェクトコードを示す。図５ｂにおいて見られるように、両方の実行レーン５１１のプログラムコードは、シフトレジスタアレイ５０７内のデータを、１つの位置だけ下にシフトさせ、１つの位置だけ右にシフトさせる。これにより、両方の実行レーン５１１がそれらのそれぞれのステンシルの左上隅に整列される。次に、プログラムコードは、（Ｒ２において）それらのそれぞれの位置にあるデータをＲ１にロードさせる。
【００４５】
図５ｃに示すように、次にプログラムコードは、実行レーン５１１の対に、シフトレジスタアレイ５０７内のデータを１単位だけ左にシフトさせ、各実行レーンのそれぞれの位置の右の値を各実行レーンの位置にシフトさせる。Ｒ１の値（以前の値）は、次いで、（Ｒ２における）実行レーンの位置にシフトした新しい値とともに加算される。結果はＲ１に書き込まれる。図５ｄで見られるように、図５ｃについて上述したのと同じプロセスが繰り返され、結果のＲ１に対して、今度は上側実行レーンにおける値Ａ＋Ｂ＋Ｃ、および下側実行レーンにおけるＦ＋Ｇ＋Ｈ値を含ませるようにする。この時点で、両方の実行レーン５１１はそれらのそれぞれのステンシルの上側の行を処理している。（左側に存在する場合には）実行レーンアレイ５０５の左側でハロー領域に、またはハロー領域が存在しない場合にはランダムアクセスメモリにこぼれ出ることは、実行レーンアレイ５０５の左側には存在しないことに注目されたい。
【００４６】
図５ｅに示すように、次に、プログラムコードは、シフトレジスタアレイ内のデータを１単位だけ上にシフトさせ、両方の実行レーン５１１をそれらのそれぞれのステンシルの中間行の右端に整列される。両方の実行レーン５１１のレジスタＲ１は、現在、ステンシルの最上行および中間行の一番右の値の合計を含む。図５ｆおよび図５ｇは、両方の実行レーンのステンシルの中間行にわたって左方向に移動する継続的な進行を示す。累積加算は、図５ｇの処理の終了時に、両方の実行レーン５１１がそれらのそれぞれのステンシルの最上行の値と中間行の値との合計を含むように、継続する。
【００４７】
図５ｈは、各実行レーンをそれの対応するステンシルの最下行に整列させる別のシフトを示す。図５ｉおよび図５ｊは、両方の実行レーンのステンシルの過程にわたって処理を完了するための継続的なシフトを示す。図５ｋは、各実行レーンをデータアレイにおいてそれの正しい位置に整列させ、その結果をそこに書き込むための追加のシフトを示す。
【００４８】
図５ａ〜図５ｋの例では、シフト動作のためのオブジェクトコードは、（Ｘ、Ｙ）座標で表されるシフトの方向および大きさを識別する命令フォーマットを含むことができることに留意されたい。例えば、１つの位置分の上方向シフトのためのオブジェクトコードは、オブジェクトコードでＳＨＩＦＴ０，＋１として表現されてもよい。別の例として、１つの位置分の右方向へのシフトは、オブジェクトコードでＳＨＩＦＴ＋１，０として表現されてもよい。様々な実施形態では、より大きい大きさのシフトも、オブジェクトコードで指定することができる（例えば、ＳＨＩＦＴ０，＋２）。ここで、２Ｄシフトレジスタハードウェアが１サイクルにつき１つの位置だけしかシフトをサポートしない場合、命令は機械によって複数のサイクル実行を要求するように解釈されてもよく、または２Ｄシフトレジスタハードウェアは、１サイクルにつき２つ以上の位置分シフトをサポートするように設計されてもよい。後者の実施形態はより詳細にさらに下に記載される。
【００４９】
図６ａは、アレイ実行レーンおよびシフトレジスタ構造の単位セルの別のより詳細な図を示す（ハロー領域のレジスタは、対応する実行レーンを含まない）。実行レーンおよび実行レーンアレイの各位置に関連するレジスタ空間は、一実施形態では、実行レーンアレイの各ノードで、図６ａに示す回路系をインスタンス化することによって実施される。図６ａに示すように、単位セルは、４つのレジスタＲ２〜Ｒ５からなるレジスタファイル６０２に結合される実行レーン６０１を含む。任意のサイクルの間、実行レーン６０１は、レジスタＲ１〜Ｒ５のいずれかから読み書きすることができる。２つの入力オペランドを必要とする命令の場合、実行レーンはＲ１〜Ｒ５のいずれかからオペランドの両方を取り出すことができる。
【００５０】
一実施形態では、二次元シフトレジスタ構造は、近隣のレジスタファイル間のシフトが同じ方向にあるように（例えば、すべての実行レーンは左にシフトする、すべての実行レーンは右にシフトするなど）、それの近隣のレジスタファイルが入力マルチプレクサ６０４を介する場合に、単一のサイクルの間に、レジスタＲ２〜Ｒ４のいずれか（ただ）１つの内容が、出力マルチプレクサ６０３を介してその近隣のレジスタファイルの１つにシフト「アウト」され、対応するものからシフト「イン」される内容でレジスタＲ２〜Ｒ４のいずれか（ただ）１つの内容が置き換えられることによって、実現される。同じレジスタがその内容がシフトアウトされて同じサイクルでシフトインされる内容で置き換えられるのが一般的であるかもしれないが、マルチプレクサ構成６０３，６０４は、同じサイクル中に同じレジスタファイル内で異なるシフトソースおよびシフトターゲットレジスタを可能にする。
【００５１】
図６ａに示すように、シフトシーケンスの間、実行レーンは、内容をそのレジスタファイル６０２からその左、右、上および下の近隣のレジスタファイルにシフトアウトする。同じシフトシーケンスと関連して、実行レーンは、さらに、内容をその左、右、上および下の近隣のレジスタファイルの特定のものからそれのレジスタファイルにシフトする。再び、シフトアウトターゲットおよびシフトインソースは、すべての実行レーンについて同じシフト方向と整合しなければならない（例えば、シフトアウトが右隣に対する場合、シフトインは左隣からでなければならない）。
【００５２】
一実施形態では、１サイクルにつき１つの実行レーンにつき１つのレジスタの内容だけをシフトすることが許されるが、他の実施形態では、２つ以上のレジスタの内容をシフトイン／アウトすることが許されてもよい。例えば、図６ａに示されたマルチプレクサ回路系６０３，６０４の第２の例が図６ａの設計に組み込まれる場合、同じサイクルの間に２つのレジスタの内容がシフトアウト／インされてもよい。もちろん、１つのレジスタの内容だけがサイクルごとにシフトされることが許される実施形態では、数学的演算間のシフトのためにより多くのクロックサイクルを消費することによって、複数のレジスタからのシフトが数学的演算間に起こってもよい（例えば、２つのレジスタの内容が、数学的演算間で２つのシフト演算を消費することによって数学的演算間でシフトされてもよい）。
【００５３】
実行レーンのレジスタファイルのすべての内容未満がシフトシーケンス中にシフトアウトされる場合、各実行レーンのシフトアウトされないレジスタの内容は適所に残る（シフトしない）ことに留意されたい。したがって、シフトインされる内容と置き換えられないシフトされない内容は、シフトサイクルにわたって実行レーンにローカルに維持される。各実行レーンで見られるメモリユニット（「Ｍ」）は、データを、実行レーンアレイ内の実行レーンの行および／または列に関連付けられるランダムアクセスメモリ空間からロードまたはそれに格納するために使用される。ここで、Ｍユニットは、実行レーンの自身のレジスタ空間からロードまたはそれに格納できないデータをロード／格納するためによく使用されるという点で、標準的なＭユニットとして機能する。様々な実施形態では、Ｍユニットの主な動作は、ローカルレジスタからメモリにデータを書き込み、メモリからデータを読み出してそれをローカルレジスタに書き込むことである。
【００５４】
ハードウェア実行レーン６０１のＡＬＵユニットによってサポートされるＩＳＡオペコードに関して、様々な実施形態において、ハードウェアＡＬＵによってサポートされる数学的オペコードは、仮想実行レーンによってサポートされる数学的オペコード（例えば、ＡＤＤ、ＳＵＢ、ＭＯＶ、ＭＵＬ、ＭＡＤ、ＡＢＳ、ＤＩＶ、ＳＨＬ、ＳＨＲ、ＭＩＮ／ＭＡＸ、ＳＥＬ、ＡＮＤ、ＯＲ、ＸＯＲ、ＮＯＴ）と一体的に結び付けられる（例えば実質的に同じである）。上述のように、メモリアクセス命令は、実行レーン６０１によって実行され、データをそれらの関連付けられるランダムアクセスメモリからフェッチまたはそれに格納することができる。さらに、ハードウェア実行レーン６０１は、シフト演算命令（右、左、上、下）をサポートし、二次元シフトレジスタ構造内でデータをシフトする。上述したように、プログラム制御命令は主にステンシルプロセッサのスカラープロセッサによって実行される。
【００５５】
ｃ．画像プロセッサ上の畳み込みニューラルネットワーク（ＣＮＮ）の実現例
図７は、三次元（３Ｄ）畳み込みのグラフィック描写を示す。当該技術分野において公知であるように、３Ｄ畳み込みを使用して、例えば画像処理アプリケーション、マシンビジョンアプリケーション、物体認識アプリケーションおよび／または機械学習アプリケーションのための畳み込みニューラルネットワーク（ＣＮＮ）を実現することができる。図７に見られるように、三次元畳み込みは、画像データ７０１の三次元ブロックおよび係数７０２の三次元ブロックを「畳み込む」。ここで、係数７０２の三次元ブロックは、画像データ７０１内の同じサイズのブロックにわたって畳み込まれて、結果の表面領域７０３を生成する。
【００５６】
実際には、画像データ７０１および係数データ７０２は、情報の三次元マトリックスとして実現される。すなわち、画像データ７０１は、ピクセルデータの三次元マトリックスとして実現されてもよく、係数データ７０２は、係数値の三次元マトリックスとして実現されてもよい。３Ｄ畳み込みを実行するために、三次元ドット積が計算され、それによって、係数と同じ寸法を有する画像データ７０１のより小さな三次元部分（より小さな部分７０５など）におけるピクセルには、それぞれ、係数７０２の三次元マトリックス内の同じ位置に位置決めされた係数が乗算される。
【００５７】
次に、個々の乗算の各々からの部分積を加算して、ドット積の結果に対応する単一値（スカラー）を生成する。スカラー結果は、畳み込まれた画像データ７０１内のより小さな領域の位置に対応する位置の結果アレイ７０３に位置する。例えば、係数７０２を用いたより小さな部分７０５の畳み込みにより、結果の表面７０３内の位置７０４に位置するスカラーが生成される。同様に、係数７０２を用いたより小さな部分７０７（図面を簡単にするために、その最上面のみを見ることができる）の畳み込みにより、結果の領域７０３内の位置７０６に位置決めされるスカラー値が生成される。
【００５８】
このように、係数７０２を乗算される画像データの各々の異なるより小さな部分について異なるスカラー値が生成され、異なるスカラーの各々は、結果の表面領域７０３内にそれぞれの位置を有する。３Ｄ畳み込みの実現例の様々な実施形態の詳細については、さらに詳細に後述する。
【００５９】
ＣＮＮ層は、典型的には、画像データのブロック当たり複数の３Ｄ畳み込みを含む。より具体的には、ＣＮＮ層は、典型的には、画像データの単一のブロックを用いて畳み込まれる係数の複数のブロックを含む。図８は、そのようなＣＮＮ層の一例を示す。ここでは、画像データの同じブロック８０１が係数の複数のブロック８０２＿１〜８０２＿Ｎを用いて畳み込まれて、Ｎ個の結果の表面領域８０３＿１〜８０３＿Ｎを生成する。したがって、全体の結果８０３は、三次元ブロック８０３がＮ個の結果面を有するものとして見なすことができる。様々な処理アプリケーションでは、三次元結果ブロック８０３は、次のＣＮＮ計算のための入力画像ブロックとして使用される。図８の処理は、単一のＣＮＮ層の処理に対応する。完全なＣＮＮは、複数のそのようなＣＮＮ層の実行から算出することができる。
【００６０】
図９ａおよび図９ｂは、３Ｄ畳み込みの実施形態を示す。図９ａを参照して、画像データのブロック９０１（図８における画像データのブロック８０１に対応する）は、画像データの複数の面から構成されるものとして見なすことができる。すなわち、画像データのブロック９０１は、ｚ軸に沿った第１の深さ位置における第１の面９０１＿１、ｚ軸に沿った第２の深さ位置における第２の面９０１＿２など…およびｚ軸に沿ったＭ番目の深さ位置におけるＭ番目の面９０１＿Ｍから構成されるものとして見なすことができる。実際には、ｚ軸に沿った各レベルまたは深さは、画像データの異なる「チャネル」に対応し得る。例えば、Ｍ＝３である場合、第１の面のレベル９０１＿１は赤色（Ｒ）データに対応してもよく、第２の面のレベル９０１＿２は緑色（Ｇ）データに対応してもよく、第３の面のレベル９０１＿３は青色（Ｂ）データに対応してもよい。
【００６１】
同様に、係数のブロック９０２＿１（図８における係数の第１のブロック８０２＿１に対応する）も、Ｍ「深さ」ｚ軸位置に沿った係数データのＭ個の面から構成されるものとして見なすことができる。３Ｄ畳み込みは、Ｍ回の二次元（２Ｄ）畳み込みの合計として計算される。ここで、同じ深さレベルに沿って存在する画像データおよび係数は、２Ｄ畳み込み演算で畳み込まれて、当該深さレベルの中間結果面を生成する。
【００６２】
例えば、画像データ面９０１＿１および係数面９０２＿１＿１の第１の２Ｄ畳み込みを実行して第１の中間結果面Ｐ１＿１を生成し、画像データ面９０１＿２および係数面９０２＿１＿２の第２の２Ｄ畳み込みを実行して第２の中間結果面Ｐ１＿２を生成するなど…、画像データ面９０１＿Ｍおよび係数面９０２＿１＿ＭのＭ番目の２Ｄ畳み込みを実行してＭ番目の中間結果面Ｐ１＿Ｍを生成する。次に、中間面Ｐ１＿１〜Ｐ１＿Ｍを整列させた態様で加算して（９１０）（中間面アレイの同じ位置のスカラー値を加算する）、結果のアレイ９０３＿１を生成する。結果のアレイ９０３＿１は、図８における結果のアレイ８０３＿１に対応する。
【００６３】
図９ｂは、画像および係数データの各ｚ軸深さレベルにおいて実行され得る２Ｄ畳み込みの例示的な実施形態を示す。図９ｂは、同じ面内の画像データのより小さな部分に対応するデータの１２個の隣接ピクセル（Ａ〜Ｌ）を示す。画像データと同じ面レベルに存在する係数の面（ａ１〜ａ９）も示されている。係数データをステンシル位置９５０と整列させるときに実行される演算９４０は、当該面レベルの中間面において単一のスカラー結果Ｓ＿Ｐ１を生成する。一方、係数データをステンシル位置９５１と整列させるときに実行される演算９４１は、当該面レベルの中間面において単一のスカラー結果Ｓ＿Ｐ２を生成する。
【００６４】
演算９４０および９４１の各々は、大規模乗加算演算として特徴付けることができる（９回の乗算および８回の加算が実行される）ことに留意されたい。ステンシル位置９５０，９５１が互いに隣接しているので、スカラー結果Ｓ＿Ｐ１およびＳ＿Ｐ２は、結果の中間面内で互いに隣接して位置することになる。ここで、ステンシル位置は、画像データの面全体の表面領域にわたって「スライド」し、各々の固有のステンシル位置によって定義される対応する「乗加算」演算は、中間面において固有の結果値を生成する。中間面内における結果値の互いに対する位置は、それらを生成したステンシルの相対位置によって定義される。
【００６５】
図９ａに戻って、Ｍ個の中間面Ｐ１＿１〜Ｐ１＿Ｍを合計して（９１０）、結果面９０３＿１を生成する。図９ａの計算は、全ての係数セットが計算されるまで、毎回異なる係数セットでＮ回繰り返される。すなわち、図８および図９ａおよび図９ｂから得られるように、図９ａおよび図９ｂの演算は、結果面８０３＿１〜８０３＿Ｎを生成するように係数セット８０２＿１〜８０２＿Ｎの各々についてＮ回実行される。
【００６６】
図１０ａ〜図１０ｊは、本明細書の先のセクションで説明したアーキテクチャ特徴を有する画像プロセッサ上でのＣＮＮ層の計算に関連する。ここで、読者は、図１０ａ〜図１０ｊだけでなく図４も参照する。先のセクションで説明したように、ステンシルプロセッサは、二次元実行レーンアレイ４０５および対応する二次元シフトレジスタアレイ４０６を有してもよい。以下の説明から明らかであるように、図１０ａ〜図１０ｊの手法は、画像データがステンシルプロセッサの中に／から外に切り換えられる回数を最小化しながらステンシルプロセッサの二次元処理性を利用することを目指すものである。
【００６７】
図１０ａは、画像データの第１の面１００１＿１の１枚以上のシートがステンシルプロセッサのローカルメモリ４０７にロードされる初期セットアップ段階を示す。例示を容易にするために、図１０ａは、画像面の全てのシートがステンシルプロセッサのＲＡＭにロードされることを提案しているが、動作時には、シート生成部が完全な画像面１００１＿１を受け取り、当該画像面をシートに解析し、シートをステンシルプロセッサのＲＡＭ４０７に適宜供給する（例えば、前のシート上での処理の完了時または完了前に次のシートがＲＡＭにロードされる）より段階的なアプローチがとられてもよい。また、係数セット１００２＿１〜１００２＿Ｎの全てではないとしても、少なくとも第１の係数セット１００２＿１がステンシルプロセッサＲＡＭ４０７にロードされる。ここで、比較点として、図１０の画像データ面１００１＿１は図９の画像データ面９０１＿１に対応し、図１０の係数セット１００２＿１は図９の係数セット９０２＿１に対応する。さらなる比較点として、図１０の係数セット１００２＿１〜１００２＿Ｎは、図８の係数セット８０２＿１〜８０２＿Ｎに対応する。
【００６８】
画像データの第１の面１００１＿１および第１の係数セット１００２＿１がステンシルプロセッサＲＡＭ４０７にロードされると、システムは、図９ｂに関連して上記した２Ｄ畳み込みを実行する準備が整う。図１０ｂは、画像データ１００１＿１が係数データ１００２＿１＿１（図９ａの係数データ９０２＿１＿１に対応する）を用いて畳み込まれる畳み込みを示す。２Ｄ畳み込みは、画像データの１枚以上のシートをステンシルプロセッサＲＡＭから画像プロセッサの二次元レジスタ構造にロードすることを含む。次に、２Ｄ畳み込み自体が実行され、中間面Ｐ１＿１がもたらされる。２Ｄ畳み込みを実際にどのようにして実行できるかについてのより完璧な説明は、図１１ａ〜図１１ｆに関連して以下でさらに行われる。
【００６９】
第１の画像面１００１＿１が第１の係数面１００２＿１を用いて畳み込まれると、機械は、演算の次のシーケンスを開始する準備が整う。ここで、図９ａに示される一連の演算が順番に実行される場合、画像面９０１＿１をステンシルプロセッサＲＡＭから外に切り換えることおよび画像面９０１＿２をステンシルプロセッサＲＡＭの中に切り換えることが必要であろう。その後、図８および図９ａを参照して、係数セット８０２＿２〜８０２＿Ｎのうちのいずれか／全てを用いて実行される２Ｄ畳み込みのために、画像面９０１＿１をステンシルプロセッサＲＡＭの中に再び切り換える必要があろうということに留意されたい。したがって、場合によっては、画像面９０１＿１をステンシルプロセッサＲＡＭの中に／から外にＮ回切り換える必要があるだろう。図９ａによって提案されている厳密な処理順序をたどるのではなく、ステンシルプロセッサの中への画像データの同じ面の切り換えおよびステンシルプロセッサから外への画像データの同じ面の切り換えが行ったり来たりすることを排除するために、その代わりに、画像データの面は、一旦ステンシルプロセッサＲＡＭにロードされると、ＣＮＮ層の全ての係数セットを処理するために使用されるまでそこにとどまる。
【００７０】
したがって、図１０ｃに示されるように、プロセスの次のシーケンスは、同じ画像面１００１＿１を次の係数セットにおける第１の面を用いて畳み込むというものである。そのようなものとして、図１０ｃは、画像面１００１＿１および係数面１００２＿２＿１（第２の係数セットにおける第１の面）で２Ｄ畳み込みが実行されることを示す。結果は、第２の係数セットＰ２＿１のための第１の中間面である。処理シーケンスは、同じ初期の画像面１００１＿１を係数の各々の第１の面を用いて畳み込み続ける。図１０ｄは、初期の画像面１００１＿１を含む最後の２Ｄ畳み込みシーケンスを示す。ここで、２Ｄ畳み込みは、Ｎ番目の係数セット１００２＿Ｎの最上面１００２＿Ｎ＿１を用いて実行され、Ｎ番目の係数セットＰＮ＿１のための第１の中間結果面を生成する。
【００７１】
図１０ｄの演算の完了後、初期の画像面１００１＿１は、使い果たされており、ステンシルプロセッサＲＡＭから外に切り換えられる（または、例えば廃棄されさえする）ことができる。したがって、図９ａを簡単に参照して、次のレベルの画像データ９０１＿２をここでステンシルプロセッサＲＡＭの中に切り換えることができる。図１０ｅは、前の画像データ面１００１＿１がステンシルプロセッサＲＡＭから外に切り換えられ（それがもはやステンシルプロセッサＲＡＭに存在しないことを示すために、その輪郭は陰影線で描かれている）、次の画像面１００１＿２がステンシルプロセッサＲＡＭの中に切り換えられている（それが現在はステンシルプロセッサＲＡＭ内に存在することを示すために、その輪郭は実線で描かれている）新たなシステム状態を示す。
【００７２】
図１０ｆは、第１の係数セット１００２＿１における第２のレベルの係数１００２＿１＿２を用いた新たな第２の画像面１００１＿２の２Ｄ畳み込みを示す。当該畳み込みの結果は、第１の係数セット１００２＿１のための第２の中間面Ｐ１＿２である。図１０ｇは、第２の係数セット１００２＿２のための第２の中間結果層Ｐ２＿２を生成する、係数セット１００２＿２における第２のレベルの係数１００２＿２＿２を用いた画像面１００１＿２の次の畳み込みを示す。図１０ｈは、Ｎ番目の係数セット１００２＿２のための第２の中間結果層ＰＮ＿２を生成する、係数セット１００２＿Ｎにおける第２のレベルの係数１００２＿Ｎ＿２を用いた画像面１００１＿２の最後の畳み込みを示す。
【００７３】
第２の画像面１００１＿２が使い果たされた後、第１および第２の画像面について上記したように、第３の画像面がロードされて処理される。次に、各画像面は、連続して同様に処理される。図１０ｉは、最後の中間結果面ＰＮ＿Ｍを生成する、最後の係数セット１００２＿Ｎのための最下位レベルの係数１００２＿Ｎ＿Ｍを用いた最後の画像面１００１＿Ｍのための最後の２Ｄ畳み込みを示す。この時点で、全ての係数セットのための全ての中間面が計算されている。図１０ｊは、各係数セットについて最終結果面を生成するための、特定の係数セットについての全ての中間面の合計を示し、最終結果面は、さらにはＣＮＮ層の結果に対応する。すなわち、図９ａの合計９１０は、Ｎ個の係数セットの各々について実行される。したがって、結果面１００３＿１〜１００３＿Ｎの各々は、図８の結果面８０３＿１〜８０３＿Ｎに対応する。
【００７４】
一実施形態では、機械は、各中間面を別々に格納してからそれらを合計するのではなく、「中間面累計和」を続けることによって１０ｊの加算を実行する。例えば、図１０ａおよび図１０ｆを参照して、中間面Ｐ１＿２が作成された直後に中間面Ｐ１＿２が中間面Ｐ１＿１に加算される。結果として生じる面Ｐ１＿１およびＰ１＿２の合計は、例えばステンシルプロセッサユニットの内部に格納される。第１の係数セット内の第３の面１００２＿１＿３（図示せず）を用いた第３の画像面の２Ｄ畳み込みの結果として中間面Ｐ１＿３（これも図示せず）が作成されると、Ｐ１＿１／Ｐ１＿２合計結果がその後呼び戻されて、中間面Ｐ１＿３に加算される。結果は、再び格納され、中間面Ｐ１＿４の作成後に中間面Ｐ１＿４に加算するために呼び戻されることになる。同様の処理は、他の係数セットの中間面にも適用される。累計和および中間面のｘ，ｙ次元が二次元シフトレジスタアレイの次元よりも大きい場合、合計は、累計和および次の中間面をシートに解析し、当該シートを例えばシート単位での処理のために二次元シフトレジスタアレイにロードすることによって実行することができるということに留意されたい。
【００７５】
図１１ａ〜図１１ｊは、３×３ステンシルサイズのために２Ｄ畳み込みを実行する実施形態を記載している。さらに詳細に後述するように、他のステンシルサイズも可能である。図１１ａを参照して、画像データＡ〜Ｒが二次元シフトレジスタにロードされる。図１１ａは、画像データに相当する２つのステンシル１１０１，１１０２を示す。簡潔にするために、図１１ａ〜図１１ｆｊの記載は、図１１ａに示されるようにピクセル位置ＨおよびＫにおいて出力結果を生成するステンシル１１０１，１１０２のための２Ｄ畳み込みに焦点を当てている。しかしながら、各ピクセル位置を中心とする異なるステンシルが存在し、図１１ａ〜図１１ｊに関連して説明する２Ｄ畳み込みプロセスがこのようなピクセル位置ごとに畳み込み結果を同時に生成することを認識することは重要である。
【００７６】
図１１ａを参照して、２Ｄ畳み込みを実行するために、各画像データステンシル内にそれぞれに位置するピクセルを係数値１１０３に乗算する必要がある。すなわち、ピクセル値ＡおよびＤの両方に係数ａ１が乗算され、その理由は、両方のそのようなピクセル値およびａ１がステンシルの左上隅に位置しているからである。ピクセル値ＣおよびＦの両方に係数ａ３が乗算され、その理由は、両方のそのようなピクセル値および係数がステンシルの右上隅に位置しているからである。２Ｄ畳み込み結果は、ピクセル値および対応する係数の９個の部分積全ての合計である。さらに詳細に後述するように、一実施形態では、部分積の合計は、９個のサイクルにわたって行われる。
【００７７】
図３ｂの説明から、様々な実施形態では、ステンシルプロセッサは、即値オペランドを含むスカラー命令を全ての実行レーンに対して発行することができるということを思い起こされたい。一実施形態では、２Ｄ畳み込みは、一連のスカラー乗加算命令を発行することによって実行され、係数は、即値オペランドとして命令語に含まれる。
【００７８】
図１１ｂを参照して、第１のサイクル中に、中間オペランドとして係数ａ５を有するスカラー命令が発行される。当該命令を実行する際、係数ａ５に画像データアレイの中のあらゆるピクセル値が乗算され、結果は、その対応する実行レーン内のピクセル値にローカルなレジスタ空間に格納される。再び、ピクセル位置ＨおよびＫを中心とする一対のステンシル１１０１，１１０２のみを参照して、係数ａ５にＨおよびＫが乗算される。部分積Ｈ×ａ５は、ステンシル１１０１（現在のところピクセル値Ｈを有している）の中心のピクセル位置１１２１における実行レーンレジスタ空間にローカルに格納される。部分積Ｋ×ａ５は、ステンシル１１０２（現在のところピクセル値Ｋを有している）の中心のピクセル位置１１２２における実行レーンレジスタ空間にローカルに格納される。ここで、ステンシル１１０１および１１０２の周囲の境界およびそれらの中のピクセル位置は、各ピクセル位置に専用のＡＬＵおよびローカルレジスタ空間を含むハードウェアの固定領域として見なすことができることに留意されたい。すなわち、ステンシル１１０１および１１０２内の各ピクセルは、各々が専用のＡＬＵ実行ユニットおよび専用のローカルレジスタ空間を有するハードウェア実行レーンとして見なすことができる。
【００７９】
図１１ｃを参照して、第２のサイクル中に、二次元シフトレジスタアレイ内の画像データを１単位だけ右にシフトさせるための第１のシフト命令が実行され、中間オペランドとして係数ａ４を有する次のスカラー乗加算命令が発行される。第２の命令を実行する際、係数ａ４に画像データアレイの中のあらゆるピクセル値が乗算され、結果は、その対応する実行レーン内のピクセル値にローカルなレジスタ空間に格納される。再び、ここではピクセル位置ＧおよびＪを中心とする一対のステンシル１１０１，１１０２のみを参照して、係数ａ４にＧおよびＪが乗算される。部分積Ｇ×ａ４は、ステンシル１１０１の中心（すなわち、値Ｈ×ａ５を含むピクセル位置１１２１）の実行レーンレジスタ空間におけるローカルに格納された値に加算され、結果Ｓ＿Ｈは、同じレジスタ空間に書き戻される。部分積Ｊ×ａ４は、ステンシル１１０２の中心（すなわち、現在のところ値Ｋ×ａ５を有しているピクセル位置１１２２）の実行レーンレジスタ空間におけるローカルに格納された値に加算され、結果Ｓ＿Ｋは、同じレジスタ空間に書き戻される。
【００８０】
図１１ｄを参照して、第３のサイクル中に、二次元シフトレジスタアレイ内の画像データを１単位だけ下にシフトさせるための第１のシフト命令が実行され、中間オペランドとして係数ａ１を有する次のスカラー乗加算命令が発行される。第２の命令を実行する際、係数ａ１に画像データアレイの中のあらゆるピクセル値が乗算され、結果は、その対応する実行レーン内のピクセル値にローカルなレジスタ空間に格納される。再び、ここではピクセル位置ＡおよびＤを中心とする一対のステンシル１１０１，１１０２のみを参照して、係数ａ１にＡおよびＤを乗算する。部分積Ａ×ａ１は、ステンシル１１０１（図１１ｃからの値Ｓ＿Ｈを含む）の中心の実行レーンレジスタ空間におけるローカルに格納された値に加算され、結果Ｓ＿Ｈは、同じレジスタ空間に書き戻される。部分積Ｄ×ａ１は、ステンシル１１０２（図１１ｃからの値Ｓ＿Ｋを含む）の中心の実行レーンレジスタ空間におけるローカルに格納された値に加算され、結果Ｓ＿Ｋは、同じレジスタ空間に書き戻される。
【００８１】
図１１ｅ〜図１１ｊは、まだ係数を乗算されていない新たなピクセル値をステンシルの中心に配置する対応するシフトを各々が有する６個以上のそのようなサイクルを示す。図１１ｊの最後のサイクルが実行された後、２Ｄ畳み込みの結果は、各ステンシルの中心のローカルレジスタ空間に存在する（ステンシル１１０１の値Ｓ＿Ｈおよびステンシル１１０２の値Ｓ＿Ｋ）。
【００８２】
上記の説明は、ＣＮＮ層全体が同じステンシルプロセッサ上で実行されるアプローチに向けられていたが、他のアプローチは、複数のステンシルプロセッサにわたってＣＮＮ層の実行を並列処理しようとしてもよい（図８がＣＮＮ層に関連付けられた計算の実施形態を示していることを思い起こされたい）。例えば、図８および図１２を参照して、Ｎがステンシルプロセッサの数未満である場合、各ステンシルプロセッサは、それ自身の３Ｄ畳み込みを割り当てられてもよい（すなわち、各ステンシルプロセッサは、それ自身の固有の係数セットを用いて３Ｄ畳み込みを実行する）。したがって、各ステンシルプロセッサは、同じ画像データを受け取るが、異なる係数セットを用いてそれを畳み込む。この場合、図９ａによって提案される順序付けを各ステンシルプロセッサにおいてたどることができる（すなわち、各ステンシルプロセッサは、単一の係数セットに対して画像データの各面を畳み込む）。Ｎがステンシルプロセッサの数よりも大きくても、例えば各ステンシルプロセッサに２つ以上の固有の係数セットを処理させることによって、ＣＮＮ層の実行を依然として分散させる／並列処理することができる。
【００８３】
図１３に示されるさらに別の並列処理アプローチでは、入力画像データの異なる面が異なるステンシルプロセッサに固有に割り当てられる。各ステンシルプロセッサは、例えば全ての係数セットに適切な面レベルでロードされる。例えば、第１の（最も高い）画像データ面を処理するように割り当てられたステンシルプロセッサ１３０２＿１は、Ｎ個全ての係数セットの第１の（最も高い）面を受け取る。次に、ステンシルプロセッサは、図１０ｂ〜図１０ｄの演算の実行に進むが、同時に、第２の（次に低い）画像面を処理するように割り当てられた別のステンシルプロセッサ１３０２＿２が図１０ｆ〜図１０ｈの畳み込みを実行する。このアプローチでは、同じ係数セットについての中間合計面は、複数のステンシルプロセッサにわたって分散されることになり、その後、整列された合計を行って当該係数セットについて特定の結果面を生成するために同一のステンシルプロセッサに移動させるべきである。ここでは、異なるステンシルプロセッサが異なる係数セットについての異なる結果面を同時に計算することができる。このアプローチの拡張機能では、（例えば、画像データ面の数がステンシルプロセッサの数を超える場合）画像データの２つ以上の面が任意の特定のステンシルプロセッサに割り当てられてもよい。
【００８４】
図１４に示されるさらに別のアプローチでは、各ステンシルプロセッサは、結果面の特定の領域のみで動作するように割り当てられ得る。例えば、第１のステンシルプロセッサ１４０２＿１は、画像面表面領域の第１の象限で動作し、第２のステンシルプロセッサ１４０２＿２は、画像面表面領域の第２の象限で動作し、第３のステンシルプロセッサ１４０２＿３は、画像面表面領域の第３の象限で動作し、第４のステンシルプロセッサ１４０２＿４は、画像面表面領域の第４の象限で動作する。各ステンシルプロセッサは、ＣＮＮ層全体を実行するが、画像全体の表面領域の１／４で実行する。最終的な結果面は、関連付けられたステンシルプロセッサが処理した正確な象限において隣接した適切な結果面を「適合させる」ことによって実現される。図１４は、画像が４つの象限に分類される１つのタイプの実施形態のみを示す。他の構成は、４つ未満の固有の表面（例えば、二等分）またはそれ以上の固有の表面領域（例えば、９個、１６個など）を有していてもよい。異なる画像セクション間のいかなる重複する入力も、２つ以上のステンシルプロセッサに送られるべきである。
【００８５】
さらに他の構成では、各々がＮ個の係数セットを有する２つ以上のＣＮＮ層が単一のステンシルプロセッサ上で実行されてもよい。一実施形態では、単一のステンシルプロセッサ上での複数のＣＮＮ層の実行は、複数のＣＮＮ層間で時間多重化を行うことによって実行されてもよい。図１５は、２つの異なるＣＮＮ層が同一のステンシルプロセッサ上で多重化されている単純な例を示す。ここでは、入力画像データ１５０１＿１の第１の面がステンシルプロセッサＲＡＭにロードされる。次に、ステンシルプロセッサは、第１のＣＮＮ層のための係数セット１５０２＿１〜１５０２＿Ｎの各々についての適切な面を有する画像データ１５０１＿１の２Ｄ畳み込みの実行に進む。結果の中間面は、上記のように、動作中のサムアキュムレータにおいて合計される。
【００８６】
第１のＣＮＮ層のための最後の係数セット１５０２＿Ｎが畳み込まれて、その中間面がアキュムレータに加算された後、次のＣＮＮ層が処理される。すなわち、画像データ面１５０１＿１は、ステンシルプロセッサのアクティブな文脈から切り換えられるのではなく、その代わりに第２のＣＮＮ層のための係数セット１５１２＿１〜１５１２＿Ｎの適切なそれぞれの層とともに使用され続ける。第２のＣＮＮ層のための中間面は、第１のＣＮＮ層のためのアキュムレータとは別のアキュムレータに蓄積される。第２の係数セット１５１２＿１〜１５１２＿Ｎの適切なそれぞれの面が処理された後、画像データのための次の画像面がステンシルプロセッサの文脈に切り換えられ、プロセスは繰り返すが、両方の係数セットについて異なるそれぞれの面で繰り返す。
【００８７】
さらに別のアプローチでは、第１のＣＮＮのための出力は、第２のＣＮＮのための入力として直接供給される。例えば、係数セット１５０２についての中間面の合計は、係数セット１５１２を有するステンシルプロセッサによって実行される次の後続のＣＮＮのための入力画像面を生成する。
【００８８】
さらに他の構成では、（異なる画像上でのＣＮＮを画像プロセッサによって同時に実行できるように）異なる独立した画像が異なるステンシルプロセッサに割り当てられてもよい。
【００８９】
先の説明では３×３ステンシルサイズが強調されたが、一実施形態では、複数の３Ｄステンシル（例えば、１×１×Ｍ、３×３×Ｍ、５×５×Ｍおよび７×７×Ｍ）を（例えば、画像プロセッサの構成レジスタ空間および／またはコンパイルされたプログラムコードを介して）サポートするように機械が設計される。
【００９０】
上記の乗算および加算演算は、浮動小数点表記で算出されてもよいが、他の実施形態では、それは固定小数点整数表記で算出されてもよい。さらに、固定整数表記は、低精度（例えば、８ビット以下（５ビットなど））である場合もあれば、高精度である場合もある。低精度固定整数は、多くの用途にとって画質を損なうことなくより時間／エネルギ効率がよいと理解されている。
【００９１】
様々な実施形態では、実行可能なプログラムコードは、サイクル当たり２回の乗加算（ＭＡＤ）を実現するために単一のＡＬＵレーン上で２回（例えば、８ビット）のＭＡＤを実行するように構築される。一実施形態では、ＡＬＵレーンハードウェアは、２回の８ビット単位の乗算（すなわち、４つの８ビット入力オペランド）を実行し、次に２つの１６ビット積と３２ビットアキュムレータとを加算して、１サイクルにおいて３２ビット和を生成する。ここで、アキュムレータは、乗算結果に加算される３２ビット入力オペランドに対応し、合計結果は、出力「アキュムレータ」レジスタに書き込まれる。ここで、乗算は両方とも、出力面内の同じピクセルについてなされると想定されるため、加算することができる。４つの８ビット入力オペランドは、同じ入力画像面からの２つの入力および２つの係数値から構成される。
【００９２】
代替的な実施形態では、各ＡＬＵレーンは、サイクル当たり２回のＭＡＤを実現するためにデュアル８ビット乗加算をサポートするように設計される。すなわち、ハードウェアは、第１の８ビット×８ビット乗算および結果の１６ビットアキュムレータへの１６ビット入力オペランドとの結果の合計を実行し、別の第２の８ビット×８ビット乗算および別の１６ビットアキュムレータへの別の１６ビット入力オペランドとの結果の合計を実行する。しかし、１６ビットアキュムレータは、単一のサイクルにおいて（例えば、フル８ビット入力被乗数で）飽和することが起こり得て、これは、サイクルごとに３２ビットアキュムレータへの転送を必要とし、全体レートを概してサイクル当たり１回のＭＡＤに減少させる可能性がある。
【００９３】
飽和ヒットを回避するために、より低い解像度の入力被乗数データが使用されてもよい。例えば、一対の６ビット×６ビット乗算が実行されてもよく、それぞれの結果は、それぞれの異なる１６ビット入力オペランドを有する別々のそれぞれの１６ビットアキュムレータに合計される。より低い解像度の入力被乗数は、１６ビットアキュムレータの飽和および対応する３２ビットアキュムレータへの転送の前に複数のサイクルを必要とする。例えば、飽和は１６サイクルごとに起こり得る。１６サイクルごとの飽和の場合、１７番目のサイクルごとにデュアル１６ビットアキュムレータが加算されてもよく、１８番目のサイクルごとに、直前のデュアルアキュムレータ合計の結果が動作中の３２ビットアキュムレータに加算されてもよい。一実施形態では、ハードウェアは、単一のサイクルにおいて３２ビットアキュムレータへのアキュムレータ合計および加算を実行するように設計されてもよい。様々な実施形態では、このようなより低い精度のアプローチは、サイクル当たり１．８回の乗加算を実現することができるであろう。
【００９４】
（例えば、８ビット以上の入力被乗数データを有する）より高い精度のアプリケーションは、サイクル当たり約１回のＭＡＤが実行される状態で３２ビット入力合計オペランドおよびアキュムレータ結果を使用するように設計され得る。そうすることにより、低精度のアプローチと同様に、相当数のサイクルの実行後までだけアキュムレータの飽和が回避される。例えば、１２ビットの入力被乗数画像データの場合、３２ビットアキュムレータが飽和する前に、単一のＭＡＤが２５６サイクル実行される。
【００９５】
図１６は、実行レーンのアレイと二次元シフトレジスタとを有する画像プロセッサ上で畳み込みニューラルネットワーク層を実行するステップ（１６０１）を含む方法を示す。二次元シフトレジスタは、ローカルなそれぞれのレジスタ空間を実行レーンに提供する。畳み込みニューラルネットワークを実行するステップは、画像データの三次元ブロックの画像データの面を二次元シフトレジスタにロードするステップ（１６０２）を含む。また、畳み込みニューラルネットワークを実行するステップは、係数値のアレイを用いて画像データの面の二次元畳み込みを実行するステップ（１６０３）を含み、二次元畳み込みを実行するステップは、実行レーン内でそれぞれのピクセルおよび係数値を同時に乗算して、部分積のアレイを生成するステップと、実行レーン内で、部分積と、画像データ内の様々なステンシルのために二次元レジスタ内に維持されている部分積のそれぞれの累積とを同時に合計するステップと、二次元シフトレジスタアレイ内で内容をシフトすることによって実行レーン内で二次元畳み込みのための値の正確な整列を行うステップと、をシーケンシャルに実行することによって行われる。
【００９６】
ｄ．実現例の実施形態
上述した様々な画像プロセッサアーキテクチャの特徴は、必ずしも従来の意味での画像処理に限定されず、したがって、画像プロセッサを再特徴付けしてもよい（またはしなくてもよい）他のアプリケーションに適用することができることを指摘することが適切である。例えば、実際のカメラ画像の処理とは対照的に、アニメーションの作成および／または生成および／またはレンダリングにおいて上述した様々な画像プロセッサアーキテクチャの特徴のいずれかが使用される場合、画像プロセッサはグラフィックス処理ユニットとして特徴付けられてもよい。さらに、上述した画像プロセッサアーキテクチャの特徴は、ビデオ処理、視覚処理、画像認識および／または機械学習などの他の技術的用途にも適用することができる。このように適用されて、画像プロセッサは、より汎用的なプロセッサ（例えば、コンピューティングシステムのＣＰＵであるか、またはその一部である）と（例えばコプロセッサとして）一体化されてもよく、またはコンピューティングシステム内のスタンドアロンプロセッサであってもよい。
【００９７】
上述したハードウェア設計の実施形態は、半導体チップ内において、および／または最終的に半導体製造プロセスに向けての回路設計の記述として実施することができる。後者の場合、そのような回路記述は、（例えばＶＨＤＬまたはＶｅｒｉｌｏｇ）レジスタ転送レベル（ＲＴＬ）回路記述、ゲートレベル回路記述、トランジスタレベル回路記述もしくはマスク記述またはそれらの様々な組み合わせの形態をとってもよい。回路記述は、典型的には、コンピュータ可読記憶媒体（例えばＣＤ−ＲＯＭまたは他のタイプの記憶技術）上に実施される。
【００９８】
先のセクションから、上記の画像プロセッサは、（例えば、ハンドヘルド装置のカメラからのデータを処理するハンドヘルド装置のシステムオンチップ（ＳＯＣ）の一部として）コンピュータシステム上のハードウェアで実施できることを認識することに関係する。画像プロセッサがハードウェア回路として実施される場合、画像プロセッサによって処理される画像データはカメラから直接受信されてもよいことに留意されたい。ここで、画像プロセッサは、別体のカメラの一部であってもよいし、一体化されたカメラを有するコンピューティングシステムの一部であってもよい。後者の場合、画像データは、カメラから直接、またはコンピューティングシステムのシステムメモリから受信することができる（例えば、カメラは、その画像データを画像プロセッサではなくシステムメモリに送信する）。先のセクションで説明した機能の多くは、（アニメーションをレンダリングする）グラフィックスプロセッサユニットにも適用可能であることにも留意されたい。
【００９９】
図１７は、コンピューティングシステムの例示的な図である。以下に説明するコンピューティングシステムのコンポーネントの多くは、一体化されたカメラおよび関連する画像プロセッサ（例えば、スマートフォンまたはタブレットコンピュータなどのハンドヘルドデバイス）を有するコンピューティングシステムに適用可能である。当業者は、２つの間の範囲を容易に定めることができるであろう。
【０１００】
図１７に見られるように、基本的なコンピューティングシステムは、中央処理ユニット１７０１（例えば、マルチコアプロセッサまたはアプリケーションプロセッサ上に配置された複数の汎用処理コア１７１５＿１〜１７１５＿Ｎおよびメインメモリコントローラ１７１７を含み得る）、システムメモリ１７０２、ディスプレイ１７０３（例えばタッチスクリーン、フラットパネル）、ローカル有線ポイントツーポイントリンク（例えばＵＳＢ）インタフェース１７０４、様々なネットワークＩ／Ｏ機能１７０５（イーサネット（登録商標）インタフェースおよび／またはセルラーモデムサブシステムなど）、無線ローカルエリアネットワーク（例えばＷｉＦｉ）インタフェース１７０６、ワイヤレスポイントツーポイントリンク（例えばブルートゥース（登録商標））インタフェース１７０７およびグローバルポジショニングシステムインタフェース１７０８、様々なセンサ１７０９＿１〜１７０９＿Ｎ、１つ以上のカメラ１７１０、バッテリ１７１１、電力管理制御ユニット１７１２、スピーカおよびマイクロホン１７１３、ならびに音声コーダ／デコーダ１７１４を含んでもよい。
【０１０１】
アプリケーションプロセッサまたはマルチコアプロセッサ１７５０は、そのＣＰＵ１７０１内における１つ以上の汎用処理コア１７１５、１つ以上のグラフィカル処理ユニット１７１６、メモリ管理機能１７１７（例えばメモリコントローラ）、Ｉ／Ｏ制御機能１７１８および画像処理ユニット１７１９を含んでもよい。汎用処理コア１７１５は、典型的には、コンピューティングシステムのオペレーティングシステムおよびアプリケーションソフトウェアを実行する。グラフィックス処理ユニット１７１６は、典型的には、例えばディスプレイ１７０３上に提示されるグラフィックス情報を生成するために、グラフィックス集中型機能を実行する。メモリ制御機能１７１７は、システムメモリ１７０２とインタフェースして、システムメモリ１７０２との間でデータの書込／読出を行う。電力管理制御ユニット１７１２は、システム１７００の電力消費を全体的に制御する。
【０１０２】
画像処理ユニット１７１９は、先のセクションで説明した画像処理ユニットの実施形態のいずれかに従って実現することができる。代替的にまたは組み合わせて、ＩＰＵ１７１９は、ＧＰＵ１７１６およびＣＰＵ１７０１のいずれかまたは両方にそのコプロセッサとして結合されてもよい。さらに、様々な実施形態では、ＧＰＵ１７１６は、上で説明した画像プロセッサの特徴のいずれかを用いて実現することができる。
【０１０３】
タッチスクリーンディスプレイ１７０３、通信インタフェース１７０４〜１７０７、ＧＰＳインタフェース１７０８、センサ１７０９、カメラ１７１０、およびスピーカ／マイクコーデック１７１３，１７１４の各々はすべて、適切な場合には、一体化された周辺装置（例えば１つ以上のカメラ１７１０）も含むコンピューティングシステム全体に対して様々な形態のＩ／Ｏ（入力および／または出力）として見ることができる。実現例によっては、これらのＩ／Ｏコンポーネントの様々なものは、アプリケーションプロセッサ／マルチコアプロセッサ１７５０上に統合されてもよく、またはアプリケーションプロセッサ／マルチコアプロセッサ１７５０のダイから離れて、またはそのパッケージ外に配置されてもよい。
【０１０４】
一実施形態では、１つ以上のカメラ１７１０は、カメラとその視野内の対象との間の深度を測定することができる深度カメラを含む。アプリケーションプロセッサまたは他のプロセッサの汎用ＣＰＵコア（もしくはプログラムコードを実行するために命令実行パイプラインを有する他の機能ブロック）上で実行されるアプリケーションソフトウェア、オペレーティングシステムソフトウェア、デバイスドライバソフトウェアおよび／またはファームウェアは、上記の機能のいずれかを実行してもよい。
【０１０５】
本発明の実施形態は、上述したような様々なプロセスを含むことができる。これらのプロセスは、機械実行可能命令で実施されてもよい。これらの命令は、汎用または特殊目的のプロセッサに特定のプロセスを実行させるために使用できる。代替的に、これらのプロセスは、プロセスを実行するためのハードワイヤード論理を含む特定のハードウェアコンポーネントによって、またはプログラミングされたコンピュータコンポーネントとカスタムハードウェアコンポーネントとの任意の組み合わせによって実行されてもよい。
【０１０６】
本発明の要素はまた、機械実行可能命令を記憶するための機械可読媒体として提供されてもよい。機械可読媒体は、フロッピー（登録商標）ディスク、光ディスク、ＣＤ−ＲＯＭ、および光磁気ディスク、フラッシュメモリ、ＲＯＭ、ＲＡＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭ、磁気もしくは光カード、伝搬媒体、または電子命令を記憶するのに適した他のタイプの媒体／機械可読媒体を含むが、それらに限定はされない。例えば、要素は、搬送波または通信リンク（例えばモデムもしくはネットワーク接続）を介する他の伝搬媒体で実施されたデータ信号によって、遠隔のコンピュータ（例えばサーバ）から要求側コンピュータ（例えばクライアント）に転送され得るコンピュータプログラムとしてダウンロードすることができる。
【０１０７】
前述の明細書では、特定の例示的な実施形態を説明した。しかしながら、特許請求の範囲に記載される本発明のより広い精神および範囲から逸脱することなく、様々な修正および変更がなされ得ることは明らかであろう。したがって、明細書および図面は、限定的ではなく例示的なものとみなされるべきである。
【図１】
2019522291.tif 000003
【図２ａ】
2019522291.tif 000004
【図２ｂ】
2019522291.tif 000005
【図２ｃ】
2019522291.tif 000006
【図２ｄ】
2019522291.tif 000007
【図２ｅ】
2019522291.tif 000008
【図３ａ】
2019522291.tif 000009
【図３ｂ】
2019522291.tif 000010
【図４】
2019522291.tif 000011
【図５ａ】
2019522291.tif 000012
【図５ｂ】
2019522291.tif 000013
【図５ｃ】
2019522291.tif 000014
【図５ｄ】
2019522291.tif 000015
【図５ｅ】
2019522291.tif 000016
【図５ｆ】
2019522291.tif 000017
【図５ｇ】
2019522291.tif 000018
【図５ｈ】
2019522291.tif 000019
【図５ｉ】
2019522291.tif 000020
【図５ｊ】
2019522291.tif 000021
【図５ｋ】
2019522291.tif 000022
【図６】
2019522291.tif 000023
【図７】
2019522291.tif 000024
【図８】
2019522291.tif 000025
【図９ａ】
2019522291.tif 000026
【図９ｂ】
2019522291.tif 000027
【図１０ａ】
2019522291.tif 000028
【図１０ｂ】
2019522291.tif 000029
【図１０ｃ】
2019522291.tif 000030
【図１０ｄ】
2019522291.tif 000031
【図１０ｅ】
2019522291.tif 000032
【図１０ｆ】
2019522291.tif 000033
【図１０ｇ】
2019522291.tif 000034
【図１０ｈ】
2019522291.tif 000035
【図１０ｉ】
2019522291.tif 000036
【図１０ｊ】
2019522291.tif 000037
【図１１ａ】
2019522291.tif 000038
【図１１ｂ】
2019522291.tif 000039
【図１１ｃ】
2019522291.tif 000040
【図１１ｄ】
2019522291.tif 000041
【図１１ｅ】
2019522291.tif 000042
【図１１ｆ】
2019522291.tif 000043
【図１１ｇ】
2019522291.tif 000044
【図１１ｈ】
2019522291.tif 000045
【図１１ｉ】
2019522291.tif 000046
【図１１ｊ】
2019522291.tif 000047
【図１２】
2019522291.tif 000048
【図１３】
2019522291.tif 000049
【図１４】
2019522291.tif 000050
【図１５】
2019522291.tif 000051
【図１６】
2019522291.tif 000052
【図１７】
2019522291.tif 000053
【手続補正書】
【提出日】令和1年6月18日(2019.6.18)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
方法であって、
実行レーンのアレイと二次元シフトレジスタとを有する画像プロセッサ上で畳み込みニューラルネットワーク層を実行するステップを備え、前記二次元シフトレジスタは、ローカルなそれぞれのレジスタ空間を前記実行レーンに提供し、前記畳み込みニューラルネットワークを実行するステップは、
ａ）画像データの三次元ブロックの画像データの面を前記二次元シフトレジスタにロードするステップと、
ｂ）係数値のアレイを用いて前記画像データの面の二次元畳み込みを実行するステップとを備え、前記二次元畳み込みを実行するステップは、
前記実行レーン内でそれぞれのピクセルおよび係数値を同時に乗算して、部分積のアレイを生成するステップと、
前記実行レーン内で、前記部分積と、前記画像データ内の様々なステンシルのために前記二次元レジスタ内に維持されている部分積のそれぞれの累積とを同時に合計するステップと、
前記二次元シフトレジスタアレイ内で内容をシフトすることによって前記実行レーン内で前記二次元畳み込みのための値の整列を行うステップと、をシーケンシャルに実行することによって行われる、方法。
【請求項２】
前記画像データの面および係数の次のアレイで上記のａ）およびｂ）を繰り返すステップをさらに備え、前記係数値のアレイは、前記畳み込みニューラルネットワーク層のための第１の係数セットからの面であり、前記係数値の次のアレイは、前記畳み込みニューラルネットワーク層のための第２の係数セットからの面である、請求項１に記載の方法。
【請求項３】
プログラムであって、前記プログラムは、実行レーンのアレイとローカルなそれぞれのレジスタ空間を前記実行レーンに提供する二次元シフトレジスタとを有する画像プロセッサによって処理されると、方法を実行させ、前記方法は、
畳み込みニューラルネットワークを実行するステップを備え、前記畳み込みニューラルネットワークを実行するステップは、
ａ）画像データの三次元ブロックの画像データの面を前記二次元シフトレジスタにロードするステップと、
ｂ）係数値のアレイを用いて前記画像データの面の二次元畳み込みを実行するステップと、を実行することによって行われ、前記二次元畳み込みを実行するステップは、
前記実行レーン内でそれぞれのピクセルおよび係数値を同時に乗算して、部分積のアレイを生成するステップと、
前記実行レーン内で、前記部分積と、前記画像データ内の様々なステンシルのために前記二次元レジスタ内に維持されている部分積のそれぞれの累積とを同時に合計するステップと、
前記二次元シフトレジスタアレイ内で内容をシフトすることによって前記実行レーン内で前記二次元畳み込みのための値の整列を行うステップと、をシーケンシャルに実行することによって行われる、プログラム。
【請求項４】
前記方法は、前記画像データの面および係数の次のアレイで上記のａ）およびｂ）を繰り返すステップをさらに備え、前記係数値のアレイは、前記畳み込みニューラルネットワーク層のための第１の係数セットからの面であり、前記係数値の次のアレイは、前記畳み込みニューラルネットワーク層のための第２の係数セットからの面である、請求項３に記載のプログラム。
【請求項５】
前記方法は、同じ係数セットから生成された中間面を前記実行レーンにローカルに蓄積するステップをさらに備える、請求項４に記載のプログラム。
【請求項６】
前記画像データは、前記画像データと１）前記第１の係数セットからの前記面との間で実行される二次元畳み込みと、前記画像データと２）前記第２の係数セットからの前記面との間で実行される二次元畳み込みとの間では、前記実行レーンにローカルに維持される、請求項３または４に記載のプログラム。
【請求項７】
前記同時に乗算するステップは、前記二次元シフトレジスタ内の画像データに対して同じ係数値を同時に乗算するステップをさらに備える、請求項３〜６のいずれか１項に記載のプログラム。
【請求項８】
前記値の整列を行うステップは、前記画像データに次の係数値を乗算する前に前記二次元シフトレジスタ内の画像データをシフトするステップを備える、請求項３〜７のいずれか１項に記載のプログラム。
【請求項９】
前記画像プロセッサは、各々がそれぞれの実行レーンアレイと二次元シフトレジスタとを有する複数のステンシルプロセッサを備え、前記画像プロセッサは、前記畳み込みニューラルネットワーク層の異なる係数セットを有する異なるステンシルプロセッサ上で同じ画像データを実行するように構成される、請求項３〜８のいずれか１項に記載のプログラム。
【請求項１０】
前記画像プロセッサは、各々がそれぞれの実行レーンアレイと二次元シフトレジスタとを有する複数のステンシルプロセッサを備え、前記画像プロセッサは、異なるステンシルプロセッサ上の異なる画像データを用いて前記異なるステンシルプロセッサ上で前記畳み込みニューラルネットワークの同じ係数セットを実行するように構成される、請求項３〜８のいずれか１項に記載のプログラム。
【請求項１１】
前記異なる画像データは、画像データの三次元ブロックの異なるブロックの複数の面を備える、請求項１０に記載のプログラム。
【請求項１２】
前記画像プロセッサは、前記畳み込みニューラルネットワーク層からの出力を、前記画像プロセッサによって算出される次の畳み込みニューラルネットワーク層のための入力として使用するように構成される、請求項３〜１１のいずれか１項に記載のプログラム。
【請求項１３】
前記画像プロセッサは、前記画像データが前記畳み込みニューラルネットワーク層の処理と第２の畳み込みニューラルネットワーク層の処理との間では前記実行レーンにローカルのままである状態で、前記畳み込みニューラルネットワーク層および前記第２の畳み込みニューラルネットワーク層を多重化するように構成される、請求項３〜１１のいずれか１項に記載のプログラム。
【請求項１４】
装置であって、
ｉ）実行レーンのアレイと二次元シフトレジスタとを備える画像プロセッサを備え、前記二次元シフトレジスタは、それぞれのローカルなレジスタ空間を前記実行レーンに提供し、前記装置はさらに、
ｉｉ）格納されたプログラムコードを含む機械可読記憶媒体を備え、前記プログラムコードは、前記実行レーンのアレイによって実行されると、方法を実行させ、前記方法は、
畳み込みニューラルネットワークを実行するステップを備え、前記畳み込みニューラルネットワークを実行するステップは、
ａ）画像データの三次元ブロックの画像データの面を前記二次元シフトレジスタにロードするステップと、
ｂ）係数値のアレイを用いて前記画像データの面の二次元畳み込みを実行するステップと、を実行することによって行われ、前記二次元畳み込みを実行するステップは、
前記実行レーン内でそれぞれのピクセルおよび係数値を同時に乗算して、部分積のアレイを生成するステップと、
前記実行レーン内で、前記部分積と、前記画像データ内の様々なステンシルのために前記二次元レジスタ内に維持されている部分積のそれぞれの累積とを同時に合計するステップと、
前記二次元シフトレジスタアレイ内で内容をシフトすることによって前記実行レーン内で前記二次元畳み込みのための値の整列を行うステップと、をシーケンシャルに実行することによって行われる、装置。
【請求項１５】
前記画像プロセッサは、各々がそれぞれの実行レーンアレイと二次元シフトレジスタとを有する複数のステンシルプロセッサを備え、前記画像プロセッサは、前記畳み込みニューラルネットワーク層の異なる係数セットを有する異なるステンシルプロセッサ上で同じ画像データを実行するように構成される、請求項１４に記載の装置。
【請求項１６】
前記画像プロセッサは、各々がそれぞれの実行レーンアレイと二次元シフトレジスタとを有する複数のステンシルプロセッサを備え、前記画像プロセッサは、異なるステンシルプロセッサ上の異なる画像データを用いて前記異なるステンシルプロセッサ上で前記畳み込みニューラルネットワークの同じ係数セットを実行するように構成される、請求項１４に記載の装置。
【請求項１７】
前記異なる画像データは、画像データの三次元ブロックの異なるブロックの複数の面を備える、請求項１６に記載の装置。
【請求項１８】
前記画像プロセッサは、前記畳み込みニューラルネットワーク層からの出力を、前記画像プロセッサによって算出される次の畳み込みニューラルネットワーク層のための入力として使用するように構成される、請求項１４〜１７のいずれか１項に記載の装置。
【請求項１９】
前記画像プロセッサは、前記画像データが前記畳み込みニューラルネットワーク層の処理と第２の畳み込みニューラルネットワーク層の処理との間では前記実行レーンにローカルのままである状態で、前記畳み込みニューラルネットワーク層および前記第２の畳み込みニューラルネットワーク層を多重化するように構成される、請求項１４〜１７のいずれか１項に記載の装置。
【請求項２０】
前記画像プロセッサおよび機械可読記憶媒体は、コンピューティングシステムの一部である、請求項１４〜１９のいずれか１項に記載の装置。
【国際調査報告】
2019522291.tif 000054
2019522291.tif 000055
2019522291.tif 000056