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