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