(57)【特許請求の範囲】
【請求項１】
画像処理プロセッサであって、
プログラムコードを実行するように構成された複数の処理コアと、
処理コア間で連結されたリングネットワークとを備え、前記リングネットワークは、前記処理コアの第１セットを連結する第１構成と、前記処理コアの前記第１セットおよび前記処理コアの第２セットを連結する第２構成とを提供し、前記第１構成および前記第２構成は、連続するシーケンスで各処理コアにネットワークアドレスを割り当て、前記第１構成および前記第２構成は、前記処理コアの第１セットに含まれる各処理コアに同一のネットワークアドレスを割り当て、前記リングネットワークを囲むように前記処理コアに割り当てられる前記ネットワークアドレスは、前記連続するシーケンスとは異なり、
前記第１構成において、前記複数の処理コアは、第１プログラムのオブジェクトコードを実行し、
前記第２構成において、前記複数の処理コアは、前記第１プログラムを含む第２プログラムのオブジェクトコードを実行し、
前記第２プログラムのオブジェクトコードは、前記第１プログラムのオブジェクトコードのコピーを含む、画像処理プロセッサ。
【請求項２】
前記画像処理プロセッサは、前記第１構成および前記第２構成を設定するためのレジスタ空間を備える、請求項１に記載の画像処理プロセッサ。
【請求項３】
前記リングネットワークは、マルチプレクサのセットの第１チャネルの選択によって、前記リングネットワーク上のさらなるノードを含めることを前記リングネットワークに許可させ、前記マルチプレクサのセットの第２チャネルの選択によって、前記さらなるノードを前記リングネットワークに排除させるよう、前記マルチプレクサのセットを含む、請求項１または２に記載の画像処理プロセッサ。
【請求項４】
前記マルチプレクサのセットは、マルチプレクサのペアを含む、請求項３に記載の画像処理プロセッサ。
【請求項５】
前記処理コアは、各々、実行レーンアレイと２次元シフトレジスタアレイとを備える、請求項１〜４のいずれか１項に記載の画像処理プロセッサ。
【請求項６】
前記画像処理プロセッサのアーキテクチャは、少なくとも１つのラインバッファ、少なくとも１つのシート生成部、および／または少なくとも１つのステンシル生成部を備える、請求項１〜５のいずれか１項に記載の画像処理プロセッサ。
【請求項７】
ステンシル、特に、重なり合うステンシルを処理するように構成される、請求項１〜６のいずれか１項に記載の画像処理プロセッサ。
【請求項８】
実行レーンアレイよりも幅広い次元を有する、特に、前記実行レーンアレイの外側にレジスタが存在するシフトレジスタ構造を含むデータ演算部上で動作するように構成される、請求項１〜７のいずれか１項に記載の画像処理プロセッサ。
【請求項９】
前記複数の処理コアによってそれぞれ行われる複数の処理の間の関係は、有向非巡回グラフとして定義される、請求項１〜８のいずれか１項に記載の画像処理プロセッサ。
【請求項１０】
プログラムコードを含むプログラムであって、前記プログラムコードは、コンピューティングシステムによって処理されると、方法を実行させ、前記方法は、
第１プログラムをプロセッサの第１構成上で実行するためのオブジェクトコードの第１インスタンスを前記第１プログラムをコンパイルすることによって構成するステップを含み、前記プロセッサは、複数のコアと内部ネットワークとを有し、前記プロセッサの前記第１構成の前記内部ネットワークは、第１の数の前記コアを通信可能に連結することを可能にするように構成され、前記方法は、さらに、
前記第１プログラムを含む第２プログラムを前記プロセッサの第２構成上で実行するための前記オブジェクトコードの第２インスタンスを前記第１インスタンスのコピーを利用して構成するステップを含み、前記プロセッサの前記第２構成の前記内部ネットワークは、第２の数のコアを通信可能に連結することを可能にするように構成され、前記プロセッサの前記第１構成および前記プロセッサの前記第２構成上で同じ位置にあるコアは、同じネットワークアドレスを有する、プログラム。
【請求項１１】
前記オブジェクトコードの前記第１インスタンスおよび前記オブジェクトコードの前記第２インスタンスは、前記プロセッサおよび前記プロセッサの前記第２インスタンスのそれぞれ異なるコア上で実行される、請求項１０に記載のプログラム。
【請求項１２】
前記オブジェクトコードの前記第１インスタンスおよび前記第２インスタンスは、それぞれ異なるコアをベースアドレスからのオフセットとしてアドレス指定する、請求項１０または１１に記載のプログラム。
【請求項１３】
前記オブジェクトコードの前記第１インスタンスおよび前記第２インスタンスを構成するステップは、前記第１インスタンスおよび前記第２インスタンスにそれぞれ異なるベースアドレスを設定するステップを含む、請求項１０〜１２のいずれか１項に記載のプログラム。
【請求項１４】
前記オブジェクトコードの前記第１インスタンスおよび前記第２インスタンスのうちの一方は、より大きなアプリケーション内のコードのより小さいコンポーネントとして個々のプロセッサ上で実行され、前記より大きなアプリケーションは、別のプログラムのオブジェクトコードインスタンスを前記オブジェクトコードの前記第１インスタンスおよび前記第２インスタンスのうちの前記一方と組み合わせることによって構成される、請求項１０〜１３のいずれか１項に記載のプログラム。
【請求項１５】
前記オブジェクトコードの前記第１インスタンスおよび前記第２インスタンスのうちの前記一方に対する他方は、スタンドアロンアプリケーションとして個々のプロセッサ上で実行される、請求項１４に記載のプログラム。
【請求項１６】
前記方法は、
前記プロセッサとは異なる数のコアを有する別のプロセッサ上で実行するための前記オブジェクトコードの第３インスタンスを構成するステップをさらに含む、請求項１０〜１５のいずれか１項に記載のプログラム。
【請求項１７】
前記方法は、少なくとも１つのラインバッファ、少なくとも１つのシート生成部、および／または少なくとも１つのステンシル生成部から構成される画像処理プロセッサのアーキテクチャ上で動作する、請求項１０〜１６のいずれか１項に記載のプログラム。
【請求項１８】
前記方法は、さらに、ステンシル、特に、重なり合うステンシルを処理するステップを含む、請求項１０〜１７のいずれか１項に記載のプログラム。
【請求項１９】
前記方法は、実行レーンアレイよりも幅広い次元を有する、特に、前記実行レーンアレイの外側にレジスタが存在するシフトレジスタ構造を含むデータ演算部上で動作する、請求項１０〜１８のいずれか１項に記載のプログラム。
【請求項２０】
前記複数のコアによってそれぞれ行われる複数の処理の間の関係は、有向非巡回グラフとして定義される、請求項１０〜１９のいずれか１項に記載のプログラム。
【請求項２１】
コンピューティングシステムであって、
プロセッサと、
システムメモリと、
前記システムメモリと前記プロセッサとの間に配置されたシステムメモリコントローラと、
プログラムコードを含んだ非一時的な機械読み取り可能な記憶媒体とを備え、前記プログラムコードは、前記コンピューティングシステムによって処理されると、方法を実行させ、前記方法は、
第１プログラムを前記プロセッサの第１構成上で実行するためのオブジェクトコードの第１インスタンスを前記第１プログラムをコンパイルすることによって構成するステップを含み、前記プロセッサは、複数のコアと内部ネットワークとを有し、前記プロセッサの前記第１構成の前記内部ネットワークは、第１の数の前記コアを通信可能に連結することを可能にするように構成され、前記方法は、さらに、
前記第１プログラムを含む第２プログラムを前記プロセッサの第２構成上で実行するための前記オブジェクトコードの第２インスタンスを前記第１インスタンスのコピーを利用して構成するステップをさらに含み、前記プロセッサの前記第２構成の前記内部ネットワークは、第２の数のコアを通信可能に連結することを可能にするように構成され、前記プロセッサの前記第１構成および前記プロセッサの前記第２構成上で同じ位置にあるコアは、同じネットワークアドレスを有する、コンピューティングシステム。
【請求項２２】
前記オブジェクトコードの前記第１インスタンスおよび前記オブジェクトコードの前記第２インスタンスは、前記プロセッサおよび前記プロセッサの前記第２インスタンスのそれぞれ異なるコア上で実行される、請求項２１に記載のコンピューティングシステム。
【請求項２３】
前記オブジェクトコードの前記第１インスタンスおよび前記第２インスタンスは、それぞれ異なるコアをベースアドレスからのオフセットとしてアドレス指定する、請求項２１または２２に記載のコンピューティングシステム。
【請求項２４】
前記オブジェクトコードの前記第１インスタンスおよび前記第２インスタンスを構成するステップは、前記第１インスタンスおよび前記第２インスタンスにそれぞれ異なるベースアドレスを設定するステップを含む、請求項２１〜２３のいずれか１項に記載のコンピューティングシステム。
【請求項２５】
前記オブジェクトコードの前記第１インスタンスおよび前記第２インスタンスのうちの一方は、より大きなアプリケーション内のコードのより小さいコンポーネントとして、個々のプロセッサ上で実行され、前記より大きなアプリケーションは、別のプログラムのオブジェクトコードインスタンスを前記オブジェクトコードの前記第１インスタンスおよび前記第２インスタンスのうちの前記一方と組み合わせることによって構成される、請求項２１〜２４のいずれか１項に記載のコンピューティングシステム。
【請求項２６】
前記オブジェクトコードの前記第１インスタンスおよび前記第２インスタンスのうちの前記一方に対する他方は、スタンドアロンアプリケーションとして個々のプロセッサ上で実行される、請求項２５に記載のコンピューティングシステム。
【請求項２７】
前記プロセッサおよび前記プロセッサの前記第２インスタンスは、画像処理プロセッサである、請求項２１〜２６のいずれか１項に記載のコンピューティングシステム。
【請求項２８】
少なくとも１つのラインバッファ、少なくとも１つのシート生成部、および／または少なくとも１つのステンシル生成部を含むアーキテクチャを有する画像処理プロセッサを備える、請求項２１〜２７のいずれか１項に記載のコンピューティングシステム。
【請求項２９】
ステンシル、特に、重なり合うステンシルを処理するように構成される、請求項２１〜２８のいずれか１項に記載のコンピューティングシステム。
【請求項３０】
実行レーンアレイよりも幅広い次元を有する、特に、前記実行レーンアレイの外側にレジスタが存在するシフトレジスタ構造を含むデータ演算部を備える、請求項２１〜２９のいずれか１項に記載のコンピューティングシステム。
【請求項３１】
前記複数のコアによってそれぞれ行われる複数の処理の間の関係は、有向非巡回グラフとして定義される、請求項２１〜２９のいずれか１項に記載のコンピューティングシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
発明の分野
本発明の分野は、全体的に、コンピューティングサイエンスに関し、より具体的には、設定可能な数のアクティブなコアを有する画像処理プロセッサおよびサポートする内部ネットワークに関する。
【背景技術】
【０００２】
背景
画像処理には、通常、アレイに編成された画素値の処理が伴う。ここで、空間的に編成された２次元アレイは、画像の２次元の特性をキャプチャする（さらなる次元として、時間（たとえば、一続きの２次元画像）およびデータ型（たとえば、色）を含み得る）。通常のシナリオでは、配列された画素値は、静止画像または動きを撮影するための一続きのフレームを生成したカメラによって提供される。従来の画像処理プロセッサは、通常、両極端に分かれる。
【０００３】
第１の極端な側面として、汎用プロセッサまたは汎用のようなプロセッサ（たとえば、ベクトル命令が強化された汎用プロセッサ）上で実行されるソフトウェアプログラムとして、画像処理タスクが実行される。第１の極端は、通常、高度の多目的アプリケーションソフトウェア開発プラットフォームを提供するが、細粒度のデータ構造を、関連するオーバーヘッド（たとえば、命令フェッチおよびデコード、オンチップデータおよびオフチップデータの処理、投機的実行）と組み合わせて利用することによって、最終的には、プログラムコードの実行時にデータの単位当たりに消費されるエネルギーの量が多くなってしまう。
【０００４】
正反対の第２の極端の側面として、より大きな単位のデータに、固定機能結線回路が適用される。カスタム設計された回路に直接適用される（細粒度とは対照的な）より大きな単位のデータを利用することによって、データの単位当たりの消費電力が大幅に抑えられる。しかしながら、カスタム設計された固定関数回路を利用することによって、一般に、プロセッサが実行できるタスクのセットが限られてしまう。このように、第２の極端な側面では、（第１の極端な側面に関連する）広く多目的なプログラミング環境がない。
【０００５】
高度の多目的アプリケーションソフトウェア開発機会およびデータの単位当たりの電力効率の向上を可能にするテクノロジープラットフォームが依然として望まれているが、いまだ解決策が見つかっていない。
【発明の概要】
【課題を解決するための手段】
【０００６】
概要
方法を説明する。この方法は、プロセッサ上で実行するためのオブジェクトコードの第１インスタンスを構成するステップを含む。プロセッサは、複数のコアと、内部ネットワークとを有する。内部ネットワークは、第１の数のコアを通信可能に連結することを可能にする第１構成で構成される。また、方法は、プロセッサの第２インスタンス上で実行するためのオブジェクトコードの第２インスタンスを構成するステップを含む。プロセッサの第２インスタンスの内部ネットワークは、異なる数のコアを通信可能に連結することを可能にする第２構成で構成され、プロセッサおよびプロセッサの第２インスタンス上で同じ位置にあるコアは、第１構成および第２構成についてそれぞれ同じネットワークアドレスを有する。また、上記方法を可能にするように設計された内部ネットワークを有するプロセッサについても説明する。
【０００７】
以下の説明および添付の図面を用いて、本発明の実施形態を説明する。
【図面の簡単な説明】
【０００８】
【図１】ステンシルプロセッサのアーキテクチャのハイレベルビューを示す図である。
【図２】画像処理プロセッサのアーキテクチャをより詳細に示した図である。
【図３】画像処理プロセッサのアーキテクチャをさらに詳細に示した図である。
【図４】画像処理プロセッサが実行できるアプリケーションソフトウェアプログラムを示す図である。
【図５】設定可能な数のアクティブなコアサポートするように構成されたネットワークリングを有する図３の画像処理プロセッサを示す図である。
【図６ａ】それぞれ異なる数のアクティブなコアを有して構成される図５の画像処理プロセッサを示す図である。
【図６ｂ】それぞれ異なる数のアクティブなコアを有して構成される図５の画像処理プロセッサを示す図である。
【図６ｃ】それぞれ異なる数のアクティブなコアを有して構成される図５の画像処理プロセッサを示す図である。
【図６ｄ】それぞれ異なる数のアクティブなコアを有して構成される図５の画像処理プロセッサを示す図である。
【図７】プロセッサ構成方法を示した図である。
【図８ａ】画像データをライングループに解析すること、ライングループをシートに解析すること、および重なり合うステンシルを有するシートに対して行う動作を示した図である。
【図８ｂ】画像データをライングループに解析すること、ライングループをシートに解析すること、および重なり合うステンシルを有するシートに対して行う動作を示した図である。
【図８ｃ】画像データをライングループに解析すること、ライングループをシートに解析すること、および重なり合うステンシルを有するシートに対して行う動作を示した図である。
【図８ｄ】画像データをライングループに解析すること、ライングループをシートに解析すること、および重なり合うステンシルを有するシートに対して行う動作を示した図である。
【図８ｅ】画像データをライングループに解析すること、ライングループをシートに解析すること、および重なり合うステンシルを有するシートに対して行う動作を示した図である。
【図９ａ】ステンシルプロセッサの実施形態を示す図である。
【図９ｂ】ステンシルプロセッサの命令語の実施形態を示した図である。
【図１０】ステンシルプロセッサ内のデータ演算部の実施形態を示す図である。
【図１１ａ】重なり合うステンシルを有する隣接する出力画素値のペアを判定するための２次元シフトアレイおよび実行レーンアレイの使用例を示した図である。
【図１１ｂ】重なり合うステンシルを有する隣接する出力画素値のペアを判定するための２次元シフトアレイおよび実行レーンアレイの使用例を示した図である。
【図１１ｃ】重なり合うステンシルを有する隣接する出力画素値のペアを判定するための２次元シフトアレイおよび実行レーンアレイの使用例を示した図である。
【図１１ｄ】重なり合うステンシルを有する隣接する出力画素値のペアを判定するための２次元シフトアレイおよび実行レーンアレイの使用例を示した図である。
【図１１ｅ】重なり合うステンシルを有する隣接する出力画素値のペアを判定するための２次元シフトアレイおよび実行レーンアレイの使用例を示した図である。
【図１１ｆ】重なり合うステンシルを有する隣接する出力画素値のペアを判定するための２次元シフトアレイおよび実行レーンアレイの使用例を示した図である。
【図１１ｇ】重なり合うステンシルを有する隣接する出力画素値のペアを判定するための２次元シフトアレイおよび実行レーンアレイの使用例を示した図である。
【図１１ｈ】重なり合うステンシルを有する隣接する出力画素値のペアを判定するための２次元シフトアレイおよび実行レーンアレイの使用例を示した図である。
【図１１ｉ】重なり合うステンシルを有する隣接する出力画素値のペアを判定するための２次元シフトアレイおよび実行レーンアレイの使用例を示した図である。
【図１１ｊ】重なり合うステンシルを有する隣接する出力画素値のペアを判定するための２次元シフトアレイおよび実行レーンアレイの使用例を示した図である。
【図１１ｋ】重なり合うステンシルを有する隣接する出力画素値のペアを判定するための２次元シフトアレイおよび実行レーンアレイの使用例を示した図である。
【図１２】統合型実行レーンアレイおよび２次元シフトアレイの単位セルの実施形態を示す図である。
【図１３】例示的なコンピューティングシステムを示す図である。
【発明を実施するための形態】
【０００９】
詳細な説明
１．０  ユニークな画像処理プロセッサのアーキテクチャ
当技術分野において周知であるように、プログラムコードを実行するための基本的な回路構成は、実行ステージと、レジスタ空間とを含む。実行ステージは、命令を実行するための実行部を含んでいる。実行される命令のための入力オペランドがレジスタ空間から実行ステージに提供される。実行ステージが命令を実行することによって生成される結果は、レジスタ空間に書き戻される。
【００１０】
従来のプロセッサ上でのソフトウェアスレッドの実行には、実行ステージによる、一連の命令の順次実行が伴う。最も一般的には、１つの入力オペランドセットから１つの結果が生成されると言う意味では、演算は、「スカラー」である。しかしながら、「ベクトル」プロセッサの場合、実行ステージによる命令の実行によって、入力オペランドのベクトルから結果のベクトルが生成されることになる。
【００１１】
図１は、２次元シフトレジスタアレイ１０２に連結された実行レーン（ｅｘｅｃｉｔｉｏｎ  ｌａｎｅ）１０１のアレイを含むユニークな画像処理プロセッサのアーキテクチャ１００のハイレベルビューを示す図である。ここで、実行レーンアレイに含まれる各実行レーンは、プロセッサ１００がサポートする命令セットを実行するために必要な実行部を含んだ離散実行ステージとして見ることができる。様々な実施形態では、プロセッサが２次元ＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）プロセッサとして動作するよう、各実行レーンは、同じマシンサイクルで実行する同じ命令を受け付ける。
【００１２】
各実行レーンは、２次元シフトレジスタアレイ１０２内の対応する位置に専用のレジスタ空間を有する。たとえば、隅にある実行レーン１０３は、隅にあるシフトレジスタ位置１０４に専用のレジスタ空間を有し、隅にある実行レーン１０５は、隅にあるシフトレジスタ位置１０６に専用のレジスタ空間を有する。
【００１３】
これに加えて、前のマシンサイクル時に別の実行レーンのレジスタ空間にあった値を各実行レーンが自分のレジスタ空間から直接操作できるよう、シフトレジスタアレイ１０２はコンテンツをシフトさせることができる。たとえば、ａ＋１水平シフトによって、各実行レーンのレジスタ空間に、その左端の隣接するレジスタ空間から値を受け付けさせる。水平軸に沿って左右両方向に値をシフトさせ、垂直軸に沿って上下両方向に値をシフトさせることができる機能のおかげで、プロセッサは、画像データのステンシルを効率よく処理することができる。
【００１４】
ここで、当技術分野において周知であるように、ステンシルとは、基本的データ単位として利用される画像表面領域のスライスである。たとえば、出力画像の特定の画素位置の新しい値が、この特定の画素位置が中心にある入力画像の領域の画素値の平均として算出されてもよい。たとえば、ステンシルが縦に３画素、横に３画素の大きさを有している場合、特定の画素位置は、３×３画素アレイの中央の画素に対応してもよく、３×３画素アレイ内の９つすべての画素の平均が算出されてもよい。
【００１５】
図１のプロセッサ１００の様々な動作の実施形態によると、実行レーンアレイ１０１の各実行レーンは、出力画像の特定の位置の画素値を算出する役割を果たす。よって、上記３×３ステンシルを平均する例で引き続き説明すると、入力画素データ、およびシフトレジスタ内の８つのシフト演算からなる調整されたシフトシーケンスを初期ロードした後、実行レーンアレイに含まれる各実行レーンは、対応する画素位置についての平均を算出するのに必要な９つすべての画素値をローカルレジスタ空間に受け付けさせる。つまり、プロセッサは、たとえば、隣接する出力画像の画素位置の中心に存在する複数の重なり合うステンシルを同時に処理することができる。図１のプロセッサのアーキテクチャは、特に画像ステンシルの処理に長けているので、ステンシルプロセッサとも称され得る。
【００１６】
図２は、複数のステンシルプロセッサ２０２＿１〜２０２＿Ｎを有する画像処理プロセッサのアーキテクチャ２００の実施形態を示した図である。図２に見られるように、アーキテクチャ２００は、ネットワーク２０４（たとえば、オンチップスイッチネットワーク、オンチップリングネットワークまたはその他の種類のネットワークを含むＮＯＣ（Ｎｅｔｗｏｒｋ  Ｏｎ  Ｃｈｉｐ））を通して複数のステンシルプロセッサユニット２０２＿１〜２０２＿Ｎおよび対応するシート生成部２０３＿１〜２０３＿Ｎと互いに接続された複数のラインバッファ部２０１＿１〜２０１＿Ｍを含む。実施形態では、いずれのラインバッファ部２０１＿１〜２０１＿Ｍも、ネットワーク２０４を通していずれのシート生成部２０３＿１〜２０３＿Ｎおよび対応するステンシルプロセッサ２０２＿１〜２０２＿Ｎに接続してもよい。
【００１７】
プログラムコードがコンパイルされ、対応するステンシルプロセッサ２０２上にロードされて、ソフトウェア開発者が以前に定義した画像処理演算が実行される（また、プログラムコードは、たとえば、設計および実装に応じて、ステンシルプロセッサの関連するシート生成部２０３にロードされてもよい）。このように、各ステンシルプロセッサ２０２＿１〜２０２＿Ｎは、処理コア、プロセッサコア、コアなどと、より一般的にみなされてもよく、画像処理プロセッサ全体は、マルチコア画像処理プロセッサとみなされてもよい。少なくともいくつかの例では、第１のパイプラインステージ用の第１カーネルプログラムを第１のステンシルプロセッサ２０２＿１にロードし、第２のパイプラインステージ用の第２のカーネルプログラムを第２のステンシルプロセッサ２０２＿２にロードするなどして画像処理パイプラインが実現されてもよく、たとえば、第１カーネルがパイプラインの第１のステージの関数を実行し、第２カーネルがパイプラインの第２のステージの関数を実行し、パイプラインのあるステージからパイプラインの次のステージに出力画像データを渡すためのさらなる制御フロー方法がインストールされる。
【００１８】
その他の構成では、画像処理プロセッサは、同じカーネルプログラムコードを動作させる２つ以上のステンシルプロセッサ２０２＿１、２０２＿２を有する並列マシンとして実現されてもよい。たとえば、高密度かつ高データ転送速度の画像データストリームを、各々が同じ関数を実行する複数のステンシルプロセッサ間にフレームを分散させることによって処理してもよい。
【００１９】
さらに他の構成では、カーネルの本質的にいずれの有向非巡回グラフ（ＤＡＧ：Ｄｉｒｅｃｔｅｄ  Ａｃｙｃｌｉｃ  Ｇｒａｐｈ）も、それぞれのステンシルプロセッサを自身のプログラムコードのカーネルで構成し、ＤＡＧ設計において、あるカーネルからの出力画像を次のカーネルの入力に向けるよう適切な制御フローフックをハードウェアに構成することによって、画像処理プロセッサ上にロードされてもよい。
【００２０】
一般的なフローとして、画像データのフレームは、マクロ入出力部２０５によって受け付けられ、フレーム単位でラインバッファ部２０１のうちの１つ以上に渡される。特定のラインバッファ部は、画像データのそのフレームを、「ライングループ」と呼ばれる、画像データよりも小さな領域に解析し、その後、当該ライングループを、ネットワーク２０４を通して特定のシート生成部に渡す。完全または「でき上がった」１つのライングループは、たとえば、複数の連続した完全な行または列からなるフレームのデータで構成されてもよい（わかりやすくするために、本明細書では、主に、連続した行を例に用いる）。シート生成部は、さらに、画像データのライングループを、「シート」と呼ばれる、画像データのさらに小さな領域に解析し、このシートを対応するステンシルプロセッサに提示する。
【００２１】
１つの入力を有する画像処理パイプラインまたはＤＡＧフローの場合、一般に、入力フレームは、同じラインバッファ部２０１＿１に向けられ、ラインバッファ部２０１＿１は、画像データをライングループに解析し、これらのライングループをシート生成部２０３＿１に向ける。シート生成部２０３＿１の対応するステンシルプロセッサ２０２＿１は、パイプライン／ＤＡＧにおいて第１カーネルのコードを実行している。ステンシルプロセッサ２０２＿１が処理するライングループに対する処理が完了すると、シート生成部２０３＿１は、出力ライングループを「下流」ラインバッファ部２０１＿２に送る（ユースケースによっては、出力ライングループは、入力ライングループを以前に送った同じラインバッファ部２０１＿１に送り返してもよい）。
【００２２】
次に、自身の各々のその他のシート生成部およびステンシルプロセッサ（たとえば、シート生成部２０３＿２およびステンシルプロセッサ２０２＿２）上で実行されるパイプライン／ＤＡＧにおける次のステージ／演算を表す１つ以上の「コンシューマ」カーネルが、第１のステンシルプロセッサ２０２＿１によって生成された画像データを下流ラインバッファ部２０１＿２から受け取る。このように、第１のステンシルプロセッサ上で動作する「プロデューサ」カーネルが、第２のステンシルプロセッサ上で動作する「コンシューマ」カーネルに出力データを転送する。第２のステンシルプロセッサでは、コンシューマカーネルが、パイプラインまたはＤＡＧ全体の設計と整合性のあるプロデューサカーネルの後に次のタスクセットを実行する。
【００２３】
図１で上述したように、各ステンシルプロセッサ２０２＿１〜２０２＿Ｎは、画像データの複数の重なり合うステンシルを同時に処理するように設計されている。複数の重なり合うステンシルおよびステンシルプロセッサの内蔵ハードウェア処理能力によって、シートのサイズが効果的に決定される。ここでも、上述したように、任意のステンシルプロセッサ２０２＿１〜２０２＿Ｎ内で、実行レーンのアレイが一斉に動作し、複数の重なり合うステンシルで覆われた画像データ表面領域を同時に処理する。
【００２４】
これに加えて、様々な実施形態では、ステンシルプロセッサ２０２の対応する（たとえば、ローカルの）シート生成部２０３によって、当該ステンシルプロセッサの２次元シフトレジスタアレイに画像データのシートがロードされる。シートおよび２次元シフトレジスタアレイ構造の使用によって、たとえば、実行レーンアレイによってその直後に大量のデータに対して直接実行される処理タスクを用いた１つのロード動作として当該データを大量のレジスタ空間に移動することによって、消費電力の改善が効果的に可能になると考えられている。これに加えて、実行レーンアレイおよび対応するレジスタアレイの使用によって、簡単にプログラム可能／構成可能なそれぞれ異なるステンシルサイズが可能になる。ラインバッファ部、シート生成部、およびステンシルプロセッサの動作について、より詳細を下記のセクション３．０でさらに説明する。
【００２５】
図３は、図２の画像処理プロセッサの特定のハードウェア実装の実施形態をより詳細に示した図である。図３に見られるように、図２のネットワーク２０４は、ラインバッファ部３０１とシート生成部／ステンシルプロセッサコア３０２との各交点に４×４ネットワークノード３１４を有するリングトポロジー３０４で実現される。わかりやすくするために、図３は、ラインバッファ部３０１＿４とシート生成部／ステンシルプロセッサコア３０２＿４との間に存在するネットワークノード３１４のみをラベル付けしている。
【００２６】
ここで、シート生成部／ステンシルプロセッサコア３０２＿１〜３０２＿８の各々がステンシルプロセッサおよび対応するシート生成部の両方を含んでいることが分かる。わかりやすくするために、以下、シート生成部／ステンシルプロセッサコア３０２＿１〜３０２＿８の各々を、単に、ステンシルプロセッサコアまたはコアと称す。８つのラインバッファ部３０１＿１〜３０１＿８および８つのコア３０２＿１〜４０２＿８を図３の特定の実施形態に図示しているが、異なる数のラインバッファ部および／またはコアを有する異なるアーキテクチャが可能であると理解すべきである。リングトポロジー以外のネットワークトポロジーも可能である。
【００２７】
図３の画像処理プロセッサに関して、リングネットワーク３０４によって、（１）入出力部３０５が入力データを任意のラインバッファ部３０１＿１〜３０１＿８（または、任意のコア３０２＿１〜３０２＿８）に渡すことができ、（２）任意のラインバッファ部３０１＿１〜３０１＿８が任意のコア３０２＿１〜３０２＿８にライングループを転送することができ、（３）任意のコア３０２＿１〜３０２＿８がその出力データを任意のラインバッファ部３０１＿１〜３０１＿８に渡すことができ、（４）任意のラインバッファ部３０１＿１〜３０１＿８が、画像処理プロセッサの出力データを入出力部３０５に渡すことができる。このように、異なるソフトウェアカーネルをロードする豊富なオプションおよび内部ネットワーク構成が可能である。つまり、理論上は、プロセッサの様々なコア３０２上で実行される複数のカーネルから構成されるソフトウェアアプリケーションのいずれについても、任意のコアに任意のカーネルをロードすることができ、ラインバッファ部のいずれも、任意のコアに入出力データをソース入力し、任意のコアから入出力データをシンク出力するように構成できる。
【００２８】
図４は、図３の画像処理プロセッサ上にロードされ得る、例示的なアプリケーションソフトウェアプログラムまたはその一部を示した図である。図４に見られるように、プログラムコードを実行して入力画像データ４０１の１つ以上のフレームを処理し、何らかの全変換をこの入力画像データ４０１に対して実行してもよい。変換は、入力画像データ上でアプリケーションソフトウェア開発者が明示するうまく組み立てられたシーケンスで動作するプログラムコード４０２の１つ以上のカーネルの動作で実現される。
【００２９】
図４の例では、全変換は、まず、第１カーネルＫ１を用いて各入力画像を処理することによって生じる。次に、カーネルＫ１によって生成された出力画像は、カーネルＫ２によって処理される。次に、カーネルＫ２によって生成された出力画像の各々は、カーネルＫ３＿１またはＫ３＿２によって処理され、次に、カーネル（複数可）Ｋ３＿１／Ｋ３＿２によって生成された出力画像は、カーネルＫ４によって処理される。図３の特定の例では、カーネルＫ３＿１およびＫ３＿２は、たとえば、異なる画像処理演算を行う異なるカーネルであってもよい（たとえば、カーネルＫ３＿１は、第１の特定の種類の入力画像を処理し、カーネルＫ３＿２は、第２の異なる種類の入力画像を処理する）。
【００３０】
わかりやすくするために、４つのカーネルＫ１〜Ｋ４のみを図示している。図３の画像処理プロセッサハードウェアアーキテクチャ実装を参照すると、各カーネルが異なるステンシルプロセッサ上で動作するという基本的な構成において、考えられるところでは、プロセッサのコア３０２のすべてが対応するカーネル（図４の４つのカーネルのフローは、図３のプロセッサのコアのうちの半数しか利用していない）を有する前に、カーネルＫ４からさらに４つのカーネルが生じてもよいことが分かる。
【００３１】
２．０  設定可能な数のコアを有する画像処理プロセッサ、およびサポートする内部ネットワーク
図５は、リングネットワークの実装形態およびネットワークリング上の各ノードに割り当てられる特定のアドレスをより詳細に示した、図３の画像処理プロセッサ５００の実施形態を示す図である。図５に見られるように、リングネットワークは、マルチプレクサのペア５０６＿１、５０６＿２、および５０６＿３を含み、異なる数のプロセッサのコア５０２＿１〜５０２＿８を使用可能にしている。ここで、画像処理プロセッサ５００は、たとえば、異なるネットワーク構成（たとえば、後述する構成のうちのいずれか／すべて）のうちの特定の１つのネットワーク構成を実施または実現するようにマルチプレクサのチャネル選択値を判断する構成レジスタ空間（図５において図示せず）を含んでもよい。図５に見られるように、マルチプレクサのペアのＡチャネルが選択された場合、リングは、引き続き前進して次のプロセッサコアのペアにつながる。対照的に、マルチプレクサのペアのＢチャネルが選択された場合、リングは、次のプロセッサコアのペアを遮断するよう、「短絡する」。
【００３２】
図６ａ〜図６ｄは、図５の画像処理プロセッサを用いて実現可能な異なるリングネットワークおよび異なる数のアクティブなプロセッサコア構成を示す図である。
【００３３】
図６ａは、マルチプレクサのペア５０６＿１のＢチャネルが選択された構成に対応し、この選択によって、ノード１（処理コア５０２＿１のリング上の位置に対応する）とノード２（処理コア５０２＿２のリング上の位置に対応する）との間で直接の論理接続が効果的に形成される。図５および図６ａに見られるように、マルチプレクサのペア５０６＿１のＢチャネルを選択することによって、処理コア５０２＿３、５０２＿５、５０２＿７、５０２＿８、５０２＿６、および５０２＿４がリングネットワークから効果的に遮断される。このように、リングネットワークは、入出力部５０５と、処理コア５０２＿１および５０２＿２とだけを連結する。この特定の構成は、たとえば、画像処理プロセッサ５００上で実行するアプリケーションソフトウェアプログラムが１つまたは２つのカーネルしか含まない場合に選択されてもよい。この場合、２つ以下の処理コアが有効化される（コア５０２＿１およびコア５０２＿２）。その他のコア５０２＿３、５０２＿５、５０２＿７、５０２＿８、５０２＿６、および５０２＿４を、たとえば、非アクティブな低電力状態にして、画像処理プロセッサの全体の消費電力を下げてもよい。
【００３４】
図６ｂは、マルチプレクサのペア５０６＿１のＡチャネルが選択され、かつ、マルチプレクサのペア５０６＿２のＢチャネルが選択された構成に対応する。この特定のマルチプレクサ構成によって、コア５０２＿１と５０２＿２とを連結するだけでなく、コア５０２＿３と５０２＿４とも連結するよう、リングが図６ａの構成よりも広がる。ここで、ノード３（処理コア５０２＿３のリング上の位置に対応する）とノード４（処理コア５０２＿４のリング上の位置に対応する）との間に直接の論理接続が形成される。図５および図６ｂに見られるように、マルチプレクサのペア５０６＿１のＡチャネルおよびマルチプレクサのペア５０６＿２のＢチャネルの選択によって、処理コア５０２＿５、５０２＿７、５０２＿８、および５０２＿６がリングネットワークから効果的に遮断される。このように、リングネットワークは、入出力部５０５と、処理コア５０２＿１、５０２＿２、５０２＿３、および５０２＿４とだけを連結する。
【００３５】
この特定の構成は、たとえば、画像処理プロセッサ５００上で実行するアプリケーションソフトウェアプログラムが３つまたは４つのカーネルしか含まない場合に選択されてもよい。この場合、４つ以下の処理コアが有効化される（コア５０２＿１、５０２＿２、５０２＿３、および５０２＿４）。その他のコア５０２＿５、５０２＿７、５０２＿８、および５０２＿６を、たとえば、非アクティブな低電力状態にして、画像処理プロセッサの全体の消費電力を下げてもよい。
【００３６】
図６ｃは、マルチプレクサのペア５０６＿１および５０６＿２のＡチャネルが選択され、かつ、マルチプレクサのペア５０６＿３のＢチャネルが選択された構成に対応する。この特定のマルチプレクサ構成によって、コア５０２＿１と、５０２＿２と、５０２＿３と、５０２＿４とを連結するだけでなく、コア５０２＿５と５０２＿６とを連結するよう、リングが図６ｂの構成よりも広がる。ここで、ノード５（処理コア５０２＿５のリング上の位置に対応する）とノード６（処理コア５０２＿６のリング上の位置に対応する）との間に直接の論理接続が形成される。図５および図６ｃに見られるように、マルチプレクサのペア５０６＿１および５０６＿２のＡチャネルならびにマルチプレクサのペア５０６＿３のＢチャネルの選択によって、処理コア５０２＿７および５０２＿８がリングネットワークから効果的に遮断される。このように、リングネットワークは、入出力部５０５と、処理コア５０２＿１、５０２＿２、５０２＿３、５０２＿４、５０２＿５、および５０２＿６とを連結する。
【００３７】
この特定の構成は、たとえば、画像処理プロセッサ５００上で実行するアプリケーションソフトウェアプログラムが５つまたは６つのカーネルのみを含む場合に選択されてもよい。この場合、６つ以下の処理コアが有効化される（コア５０２＿１、５０２＿２、５０２＿３、５０２＿４、５０２＿５、および５０２＿６）。その他のコア５０２＿７および５０２＿８を、たとえば、非アクティブな低電力状態にして、画像処理プロセッサの全体の消費電力を下げてもよい。
【００３８】
図６ｄは、マルチプレクサのペア５０６＿１、５０６＿２、および５０６＿３のＡチャネルが選択された構成に対応する。この特定のマルチプレクサ構成によって、入出力部５０５とコア５０２＿１、５０２＿２、５０２＿３、５０２＿４、５０２＿５、５０２＿６、５０２＿７、および５０２＿８のすべてとを連結するよう、リングが図６ｂの構成よりも広がる。ここで、ノード７（処理コア５０２＿７のリング上の位置に対応する）とノード８（処理コア５０２＿８のリング上の位置に対応する）との間の結線接続によって、リングの右端が形成される。この特定の構成は、たとえば、画像処理プロセッサ５００上で実行するアプリケーションソフトウェアプログラムが７つまたは８つのカーネルを含む場合に選択されてもよい。
【００３９】
図５のプロセッサのネットワークリング設計の別の関連する特徴として、異なるネットワークノードに対するアドレス値の割り当ての一意の取り決めがある。ここで、図３を再び少し参照すると、図３のプロセッサ３００は、例によってリングを囲むようにノードに一続きの番号を付けていることが分かる。しかしながら、図５のリングネットワーク上のネットワークアドレスの割り当ては、図３の従来手法とは異なり、いずれのアクティブなネットワーク構成上の数値アドレスも、リング上で有効になるように設定されるコアの数に関係なく、途切れず連続したままである。
【００４０】
つまり、図６ａの構成が選択された場合、リング上のアクティブな数値アドレスは、アドレス０、１、および２を含む。対照的に、図６ｂの構成が選択された場合、リング上のアクティブな数値アドレスは、アドレス０、１、２、３、および４を含む。さらに、図６ｃの構成が選択された場合、リング上のアクティブな数値アドレスは、アドレス０、１、２、３、４、５、および６を含む。最後に、図６ｄの構成が選択された場合、リング上のアクティブな数値アドレスは、アドレス０、１、２、３、４、５、６、７、および８を含む。
【００４１】
このようにネットワークアドレスを取り決めることは、アプリケーションソフトウェアソースコードを複数の異なる最下位のオブジェクトコード（バイナリコードとも称する）のインスタンスに再コンパイルすることを、たとえ設定された異なる数のアクティブなプロセッサコアおよび対応して異なる基礎となるリングネットワーク構成を有する異なるソフトウェアアプリケーション間でこのような最下位のコードが再利用されている場合でも、回避するのに役立ち得る。ここで、様々な環境において、たとえば、実際のハードウェアプロセッサ内の任意のコアに理論上マッピングできる論理アドレスを用いて、通信の宛先であるカーネルをアプリケーションソフトウェアプログラムのソースコードレベルで識別する。しかしながら、ソースコードが下位のオブジェクトまたはバイナリコードにコンパイルされた場合、論理アドレスは、プロセッサ上の特定のハードウェアコアのＩＤに変換される（すなわち、リングネットワーク上の特定のアドレスのうちの１つ）。
【００４２】
たとえば、入出力部が入力データをカーネルＫ１に送り、カーネルＫ１がその出力データをカーネルＫ２に送る、２つのカーネルＫ１およびＫ２を使用するアプリケーションソフトウェアプログラムを考える。ソースコードを下位のオブジェクトコードにコンパイルした後、カーネルＫ１がとりわけコア５０２＿１上で実行するように割り当てられ、カーネルＫ２がとりわけコア５０２＿２上で実行するように割り当てられると想定する。このように、いずれのオブジェクトコードの通信も、カーネルＫ１に送られる通信用の１というネットワークアドレスを含み、カーネルＫ２に送られる通信用の２というネットワークアドレス含むことになる。
【００４３】
リング周りのネットワークノードアドレス割り当てのユニークな取り決めによって、最下位のプログラムコードのこの特定のインスタンスは、図６ａの２つのコアプロセッサ構成上で動作可能なだけでなく、図６ｂ、図６ｃ、および図６ｄのその他のプロセッサコア構成の各々でも動作可能である。このように、カーネルＫ１およびＫ２を含むアプリケーションソフトウェアプログラムのソースコードがそれぞれ異なるオブジェクトコードインスタンスに再コンパイルされる必要がないので、アプリケーションソフトウェアプログラムは、画像処理プロセッサ構成６ａ、６ｂ、６ｄ、６ｅのうちの異なる構成上で実行することを目的とされる。再コンパイルする必要がなくなるので、アプリケーションソフトウェア開発および／または構築の効率向上が可能になる。
【００４４】
つまり、オブジェクトコードレベルでのプログラムコードの再利用をさらに容易に実現し、および／または、オブジェクトコードのインスタンスをより大きなオブジェクトコードアプリケーションにプラグ可能なコンポーネントとして使用してアプリケーションソフトウェアの構築をオブジェクトコードレベルで達成することができる。前述のカーネルＫ１およびＫ２を有するアプリケーションソフトウェアプログラムが処理ＯＰ１を実行する例を考える。ＯＰ１は、スタンドアロンプログラムとしてだけでなく、たとえば、自身の一意の処理タスクを有するその他のいくつかの処理の前に実行されるフロントエンドの処理として有意に使用される。わかりやすくするために、次のその他３つの処理が存在すると想定する。（１）２つのカーネルを用いて実施されるＯＰ２（たとえば、Ｋ３およびＫ４）、（２）３つのカーネル（たとえば、Ｋ３、Ｋ４、およびＫ５）を用いて実施されるＯＰ３、および（３）５つのカーネル（たとえば、Ｋ３、Ｋ４、Ｋ５、Ｋ６、およびＫ７）を用いて実施されるＯＰ４。
【００４５】
ここで、フロントエンドの処理ＯＰ１がオブジェクトコードインスタンスにコンパイルされ、カーネルＫ２がその出力データを（たとえば、ネットワークノード０の入出力部５０５ではなく）ネットワークノード３のコア５０２＿３に送るアプリケーションソフトウェア開発環境を考える。これに加えて、後続の処理ＯＰ２、ＯＰ３、およびＯＰ４が、以下のようにオブジェクトコードインスタンスにコンパイルされると想定する。（１）ＯＰ２、ＯＰ３、およびＯＰ４の第１（入力、Ｋ３）カーネルおよび第２（Ｋ４）カーネルがコア５０２＿３および５０２＿４上でそれぞれ動作し、（２）ＯＰ３およびＯＰ４の第３（Ｋ５）カーネルがコア５０２＿５上で動作し、（３）ＯＰ４の第４（Ｋ６）カーネルおよび第５（Ｋ７）カーネルがコア５０２＿６および５０２＿７上でそれぞれ動作する。
【００４６】
この場合、コンパイルされたフロントエンドのＯＰ１インスタンスは、コンパイルされたＯＰ２、ＯＰ３、およびＯＰ３のオブジェクトコードインスタンスのそれぞれのうちのいずれかとそのままオブジェクトコードレベルで組み合わされ得、次の３つの別個のすぐに実行可能なアプリケーションソフトウェアプログラムが作成される。（１）ＯＰ１＋ＯＰ２に対応する第１のアプリケーションソフトウェアプログラム、（２）ＯＰ１＋ＯＰ３に対応する第２のアプリケーションソフトウェアプログラム、および（３）ＯＰ１＋ＯＰ４に対応する第３のアプリケーションソフトウェアプログラム。
【００４７】
ここで、ＯＰ１のオブジェクトコードインスタンスをＯＰ２、ＯＰ３、およびＯＰ４オブジェクトコードインスタンスの各々と別個に組み合わせて３つの異なるオブジェクトコードレベルのアプリケーションを作成することができるだけでなく、４つのコアを用いる第１のアプリケーションソフトウェアプログラム（ＯＰ１＋ＯＰ２）を図６ｂのプロセッサ構成で動作するように構成でき、５つのコアを用いる第２のアプリケーションソフトウェアプログラム（ＯＰ１＋ＯＰ３）を図６ｃのプロセッサ構成で動作するように構成でき、７つのコアを用いる第３のアプリケーションソフトウェアプログラム（ＯＰ１＋ＯＰ４）を図６ｄのプロセッサ構成で動作するように構成できることが分かる。
【００４８】
よって、ＯＰ１のオブジェクトコードインスタンスを他のオブジェクトコードインスタンスと組み合わせてより大きな作業オブジェクトコードレベルのアプリケーションを作成できるだけでなく、異なるアプリケーションをもたらす組合せが、異なる数のアクティブなハードウェアコアおよび対応して異なる内部リングネットワーク構成を有する異なるプロセッサ構成を必要とすることになったとしても、ＯＰ１のオブジェクトコードインスタンスをこのように組み合わせることができる。つまり、異なるプロセッサ構成間でプロセッサ内の内部ネットワークが異なっていても、対象ハードウェアプロセッサに含まれるアクティブなコアの構成／数とは無関係なオブジェクトコードレベルでプログラムコード構築を達成することができる。
【００４９】
さらには、抽象的なカーネル識別子をオブジェクトコードレベルで使用することで、任意のオブジェクトコードプログラムをより大きなオブジェクトコードレベル構築に容易にプラグインでき、かつ、異なるプロセッサコア上で実行するように構成することができる。たとえば、以下のように想定する。コンパイルされた上述のＯＰ３のオブジェクトコードインスタンスが（１）その第１カーネル（上述したＫ３）を入力変数＝ＢＡＳＥを用いて識別し、（２）その第２カーネル（上述したＫ４）を識別子＝ＢＡＳＥ＋１を用いて識別し、（３）その第３カーネル（上述したＫ５）を識別子＝ＢＡＳＥ＋２を用いて識別する。この場合、上述した第２（ＯＰ１＋ＯＰ３）アプリケーションと合わせて利用するためのＯＰ３のオブジェクトコードの構成は、ＢＡＳＥ＝３と設定することによって簡単明瞭になる。
【００５０】
また、単に、ＢＡＳＥ＝１と設定することによって、ＯＰ３オブジェクトコードの同一インスタンスをスタンドアロン動作に容易に再利用することができる。その後、ＯＰ３の第１カーネルをコア５０２＿１上で実行させ、その第２コアを正しいカーネルを用いてコア５０２＿２上で動作させて、ネットワークリング上でカーネルを通信する。よって、入力変数／構成情報（ＢＡＳＥ）の単純な変更によって、（上述した第２アプリケーション（ＯＰ１＋ＯＰ３）用に）オブジェクトコードレベルのＯＰ３の同一インスタンスを図６ｃのプロセッサ構成で容易に動作させる、または、図６ａのプロセッサ構成でスタンドアロンアプリケーションとして動作させることができる。
【００５１】
このように、オブジェクトレベルプログラム内のそれぞれ異なるカーネルをそれらのネットワークアドレスのオフセットで識別することで、オブジェクトレベルプログラムの同一インスタンスをそれぞれ異なるプロセッサ構成に容易にマッピングすることができる。なぜならば、プロセッサ構成が異なるとリング上のノード数も変化するが、プロセッサのネットワークリング上の一意のアドレス指定パターンがこれらのオフセットの意味を本質的に保存するからである。このように、多くの状況において、たとえば、各プログラムの関数を新しく使用する度に、または、異なる基礎となるプロセッサ構成ごとに同じソースコードレベルからオブジェクトコードの新しいインスタンスをコンパイルするのではなく、プログラムのオブジェクトコードインスタンスが作成されると、その同一コピーは、多くの異なるアプリケーションおよび対応する構成のために「プラグイン」として再利用することができる。
【００５２】
また、オブジェクトコードインスタンスをより大きなオブジェクトコード構築にプラグインするための機能は、入力ストリームの送信元アドレスおよび／または出力ストリームの宛先アドレスがそれぞれの入力変数としてオブジェクトコードレベルで指定される場合、向上する。たとえば、ここでもＯＰ３を例として用いると、上述した第２（ＯＰ１＋ＯＰ３）アプリケーションにＯＰ３を利用し、ＢＡＳＥ＝３である場合、ＯＰ３のための入力データの送信元を識別するさらなる入力変数ＩＮをＩＮ＝２と設定してもよい（コア５０２＿２上で実行されるＯＰ１のＫ２は、ＯＰ１＋ＯＰ３アプリケーション用のその入力データをＯＰ３に送る）。ＯＰ３がその出力情報を送信する先を識別する宛先を別の変数ＯＵＴを用いて指定してもよく、ＯＵＴ＝０と設定される（その出力データをＯＰ１＋ＯＰ３アプリケーションで使用する場合、ＯＰ３は、入出力部５０５に送る）。上述したように、これらの設定では、ＯＰ３のオブジェクトコードインスタンスは、図６ｃの構成に設定されたプロセッサを有するＯＰ１＋ＯＰ２アプリケーション内で動作することができる。
【００５３】
ＯＰ３オブジェクトコードの同じインスタンスのコピーをスタンドアロン動作に再利用するためには、入力構成情報は、ＩＮ＝ＯＵＴ＝０およびＢＡＳＥ＝１）と設定するだけでよい。この構成では、ＯＰ３がその入力データを入出力部５０５から受け付け、その出力データを入出力部５０５に送ることになる。また、この構成では、ＯＰ３インスタンスは、図６ａのプロセッサ構成で動作することができる。このように、ＯＰ３コードの同一インスタンスは、異なる内部ネットワークリング構成を含む基礎となるプロセッサ構成とは本質的に無関係である。
【００５４】
よって、アプリケーションソフトウェア開発環境全体は、利用／再利用されることの多い基本の処理関数を実行するように書かれたより細い粒度のアプリケーションソフトウェアプログラムのソースコードレベルでの開発を含み得る。より細い粒度のソースコードアプリケーションは、それぞれのオブジェクトコードインスタンスにコンパイルされる。次に、オブジェクトコードインスタンスは、必要であればコピーされ、他のオブジェクトコードインスタンスのコピーと組み合わされてより大きく、かつ、より包括的かつ実行可能なオブジェクトコードレベルのアプリケーションを形成する。
【００５５】
それぞれ異なるハードウェアプラットフォームが異なる数のコアを有して存在する場合、さらなる効率化を実現できる。ここで、図６ａ〜図６ｄに関連した上記説明は、８コアープラットフォームが２つ、４つ、６つ、または８つのアクティブなコアを有して構成され得る、８つのコアを有する１つのハードウェアプラットフォームを対象としていた。ここでも、たとえば、２つのカーネルのオブジェクトコードレベルプログラム（たとえば、ＯＰ１）は、ＯＰ１プログラムの新しいオブジェクトコードインスタンスを再コンパイルしなくても、これらの構成のうちのいずれの構成上でも動作し得ることを示した。
【００５６】
この汎用性は、さらには、たとえば、次から構成されるプロダクトラインにも及び得る。（１）２つのアクティブなコアからなる１つの構成をサポートする、２つのコアのみから構成される第１のハードウェアプラットフォーム、（２）２つのアクティブなコアからなる第１構成と４つのアクティブなコアからなる第２構成とをサポートする、４つのコアから構成される第２のハードウェアプラットフォーム、（３）２つのコアをサポートする第１構成と、４つのコアをサポートする第２構成と、６つのコアをサポートする第３構成とをサポートする、６つのコアから構成される第３のハードウェアプラットフォーム、および（４）図６ａ〜図６ｄで上述した４つの異なる構成をサポートする、８つのコアから構成される第４のハードウェアプラットフォーム。
【００５７】
２つのカーネルを用いるオブジェクトコードレベルプログラムＯＰ１は、上記（４）のハードウェアプラットフォームの４つの構成の各々の上で動作可能であると詳細に上述した。しかしながら、上記（１）、（２）、および（３）のハードウェアプラットフォームがネットワークノードを本明細書に記載のように列挙するように設計されている場合、上記（４）のハードウェアプラットフォームの４つの構成すべての上で動作可能なオブジェクトコードレベルプログラムＯＰ１は、次のいずれの構成上でも動作可能になる。（ｉ）上記（３）のハードウェアプラットフォームの３つの異なる構成、（ｉｉ）上記（２）のハードウェアプラットフォームの２つの異なる構成、および（ｉｉｉ）上記（１）のハードウェアプラットフォーム。このように、コードの再利用機能は、同じハードウェアプラットフォームのそれぞれ異なる構成だけでなく、それぞれ異なるハードウェアプラットフォームのそれぞれ異なる構成にも及ぶ。上述したように、コードは、スタンドアロンであり得、他のオブジェクトコードレベルプログラムと組み合わされていることもあり得る。
【００５８】
図７は、上述した方法を示す図である。図７に見られるように、この方法は、プロセッサ上で実行するためのオブジェクトコードの第１インスタンスを構成するステップを含み、プロセッサは、複数のコアと、内部ネットワークとを有し、内部ネットワークは、第１の数のコアを通信可能に連結することを可能にする第１構成で構成されている（７０１）。また、方法は、プロセッサの第２インスタンス上で実行するためのオブジェクトコードの第２インスタンスを構成するステップも含み、プロセッサの第２インスタンスの個々の内部ネットワークは、異なる数のコアを通信可能に連結することを可能にする第２構成で構成され、プロセッサおよびプロセッサの第２インスタンス上で同じ位置にあるコアは、第１構成および第２構成のそれぞれに対して同じネットワークアドレスを有する（７０２）。
【００５９】
上述した発想は図５の特定のプロセッサに限定されないことを認識することが適切である。ここで、たとえば、異なる数の処理コア、さらには、異なる種類の内部ネットワークトポロジーを有する他のプロセッサが本明細書に記載の教示を利用してもよい。つまり、他のネットワークトポロジー（たとえば、交換接続ネットワーク）が異なる内部ネットワーク構成間で送信元ノード／宛先ノードの物理アドレスを保持するように設計されてもよく、および／または当該異なる内部ネットワーク構成間で物理アドレスを途切れず連続したままにしてもよい。
【００６０】
３．０  画像処理プロセッサ実装の実施形態
図８ａ〜図８ｅ〜図１２は、上述した画像処理プロセッサおよび関連するステンシルプロセッサの様々な実施形態のより詳細な動作および設計を提供する図である。ライングループをステンシルプロセッサの関連するシート生成部にラインバッファ部が送るという図２の説明を思い返すと、図８ａ〜図８ｅは、ラインバッファ部２０１の解析アクティビティ、シート生成部２０３の細粒度の解析アクティビティ、およびシート生成部２０３に連結されるステンシルプロセッサ７０２のステンシル処理アクティビティの実施形態をハイレベルで示す図である。
【００６１】
図８ａは、画像データ８０１の入力フレームの実施形態を示した図である。また、図８ａは、ステンシルプロセッサが処理するように設計された、３つの重なり合うステンシル８０２（各々の寸法は、３画素×３画素である）の輪郭も示している。各ステンシルが出力画像データを生成する出力画素を、黒い実線で強調表示している。わかりやすくするために、３つの重なり合うステンシル８０２は、垂直方向にのみ重なり合うよう示されている。ステンシルプロセッサは、実際には、垂直方向および水平方向の両方に重なり合うステンシルを有するように設計されてもよいことを認識することが適切である。
【００６２】
ステンシルプロセッサ内でステンシル８０２が縦に重なり合っているために、図８ａに見られるように、フレーム内に１つのステンシルプロセッサが処理できる幅広い帯状の画像データが存在する。より詳細は以下に説明するが、実施形態では、ステンシルプロセッサは、重なり合うステンシル内のデータを、画像データの端から端まで左から右へ処理する（次に、上から下の順に、次のラインセットに対して繰り返す）。よって、ステンシルプロセッサがこの動作で前進を続けると黒い実線の出力画素ブロックの数が水平右方向に増える。上述したように、ラインバッファ部２０１は、ステンシルプロセッサが今後の多くの周期数にわたって処理するのに十分な受信フレームからの入力画像データのライングループを、解析する役割を果たす。ライングループの例を、影付き領域８０３として示している。実施形態では、ラインバッファ部２０１は、シート生成部にライングループを送信／シート生成部からライングループを受信するためのそれぞれ異なる力学を理解できる。たとえば、「グループ全体」と称するあるモードによると、画像データの完全な全幅のラインがラインバッファ部とシート生成部との間で渡される。「実質上縦長」と称する第２モードによると、最初に１つのライングループが全幅の行のサブセットとともに渡される。その後、残りの行がより小さい（全幅未満の）一部として順番に渡される。
【００６３】
入力画像データのライングループ８０３がラインバッファ部によって規定されてシート生成部に渡されると、シート生成部は、さらに、このライングループを、ステンシルプロセッサのハードウェア制約により正確に適合するより細かいシートに解析する。より具体的には、より詳細は以下にさらに説明するが、実施形態では、各ステンシルプロセッサは、２次元シフトレジスタアレイから構成される。２次元シフトレジスタアレイは、本質的に、画像データを実行レーンのアレイの「下」にシフトさせる。シフトパターンは、各実行レーンに、レーン自身の個々のステンシル内のデータを処理させる（つまり、各実行レーンは、自身の情報のステンシルを処理し、そのステンシルの出力を生成する）。実施形態では、シートは、２次元シフトレジスタアレイを「埋める」または２次元シフトレジスタアレイにロードされる入力画像データの表面領域である。
【００６４】
より詳細はさらに後述するが、様々な実施形態では、実際には、任意の周期でシフトさせることができる２次元レジスタデータから構成されるレイヤは、複数ある。便宜上、本明細書のほとんどでは、単に、用語「２次元シフトレジスタ」などを用いて、シフトさせることができる２次元レジスタデータから構成される１つ以上のこのようなレイヤを有する構造を指す。
【００６５】
よって、図８ｂに見られるように、シート生成部は、ライングループ８０３からの最初のシート８０４を解析し、ステンシルプロセッサに提供する（ここで、データのシートは、参照番号８０４で全体的に識別される陰影領域に対応する）。図８ｃおよび図８ｄに見られるように、ステンシルプロセッサは、重なり合うステンシル８０２を入力画像データのシートの左から右へ効果的に移動することによってシートを処理する。図８ｄの時点では、シート内のデータから出力値を算出できる画素数はなくなっている（他の画素位置はシート内の情報から決定される出力値を有し得るものはない）。わかりやすくするために、画像の境界領域は無視している。
【００６６】
図８ｅに見られるように、次に、シート生成部は、ステンシルプロセッサに引き続き処理させるために次のシート８０５を提供する。なお、次のシートに対する処理を開始するときのステンシルの初期位置は、第１シートの画素数がなくなっている箇所から右隣に進んだ場所である（すでに図８ｄで示したように）ことが分かる。新しいシート８０５では、ステンシルプロセッサが第１シートの処理と同じ方法でこの新しいシートを処理するにつれて、ステンシルは、右に移動し続けるだけである。
【００６７】
なお、出力画素位置を囲むステンシルの境界領域のために、第１シート８０４のデータと第２シート８０５のデータとの間に重なりがある。この重なりは、シート生成部が重なり合うデータを２回再送信するだけで処理できる。別の実装形態では、次のシートをステンシルプロセッサに送るために、シート生成部は、新しいデータをステンシルプロセッサに送るだけであってもよく、ステンシルプロセッサは、重なり合うデータを前のシートから再利用する。
【００６８】
図９は、ステンシルプロセッサのアーキテクチャ９００の実施形態を示す図である。図９に見られるように、ステンシルプロセッサは、データ演算部９０１と、スカラープロセッサ９０２および関連するメモリ９０３と、入出力部９０４とを備える。データ演算部９０１は、実行レーン９０５のアレイと、２次元シフトアレイ構造９０６と、アレイの特定の行または列に対応付けられた別個のＲＡＭ９０７とを含む。
【００６９】
入出力部９０４は、シート生成部から受け付けたデータの「入力」シートをデータ演算部９０１にロードして、ステンシルプロセッサからのデータの「出力」シートをシート生成部に格納する役割を果たす。実施形態では、シートデータをデータ演算部９０１にロードすることは、受け付けたシートを画像データの行／列に解析し、画像データの行／列を２次元シフトレジスタ構造９０６または実行レーンアレイ（より詳細は後述する）の行／列のＲＡＭ９０７のそれぞれにロードすることを伴う。シートがメモリ９０７に最初にロードされた場合、実行レーンアレイ９０５内の個々の実行レーンは、適宜、シートデータをＲＡＭ９０７から２次元シフトレジスタ構造９０６にロードしてもよい（たとえば、シートのデータの処理をする直前のロード命令として）。データのシートのレジスタ構造９０６へのロードが完了すると（シート生成部から直接であろうと、メモリ９０７からであろうと）、実行レーンアレイ９０５に含まれる実行レーンが当該データを処理し、最終的には、仕上がったデータをシートとしてシート生成部またはＲＡＭ９０７に直接「書き戻す」。後者の場合、入出力部９０４がデータをＲＡＭ９０７からフェッチして出力シートを形成し、その後、出力シートはシート生成部に転送される。
【００７０】
スカラープロセッサ９０２は、プログラムコントローラ９０９を含む。プログラムコントローラ９０９は、ステンシルプロセッサのプログラムコードの命令をスカラーメモリ９０３から読み出し、実行レーンアレイ９０５に含まれる実行レーンにこの命令を発行する。実施形態では、１つの同じ命令がアレイ９０５内のすべての実行レーンに一斉送信され、データ演算部９０１がＳＩＭＤのような動作を行う。実施形態では、スカラーメモリ９０３から読み出されて実行レーンアレイ９０５の実行レーンに発行される命令の命令フォーマットは、命令あたり２つ以上のオペコードを含むＶＬＩＷ（Ｖｅｒｙ−Ｌｏｎｇ−Ｉｎｓｔｒｕｃｔｉｏｎ−Ｗｏｒｄ）型フォーマットを含む。さらなる実施形態では、ＶＬＩＷフォーマットは、（後述するが、実施形態では、２つ以上の従来のＡＬＵ演算を指定し得る）各実行レーンのＡＬＵによって実行される数学関数を指示するＡＬＵオペコード、および（特定の実行レーンまたは特定の実行レーンセットのメモリ操作を指示する）メモリオペコードの両方を含む。
【００７１】
用語「実行レーン」とは、１つの命令を実行可能な１つ以上の実行部からなるセットを指す（たとえば、命令を実行できる論理回路）。しかしながら、実行レーンは、様々な実施形態では、ただの実行部ではなく、よりプロセッサのような機能を含み得る。たとえば、１つ以上の実行部以外に、実行レーンは、受け付けた命令をデコードする論理回路、または、よりＭＩＭＤのような設計の場合、命令をフェッチおよびデコードする論理回路を含んでもよい。ＭＩＭＤのような手法に関しては、本明細書では集中プログラム制御手法について詳細を説明したが、様々な別の実施形態では、より分散した手法が実施されてもよい（アレイ９０５の各実行レーン内にプログラムコードとプログラムコントローラとを含むなど）。
【００７２】
実行レーンアレイ９０５と、プログラムコントローラ９０９と、２次元シフトレジスタ構造９０６とを組み合わせることによって、広範囲のプログラム可能な機能のための広く受け容れられる／構成可能なハードウェアプラットフォームがもたらされる。たとえば、個々の実行レーンが広く多様な機能を実行でき、かつ、任意の出力アレイ位置に近接した入力画像データに容易にアクセスできるならば、アプリケーションソフトウェア開発者は、広範囲にわたる異なる機能能力および寸法（たとえば、ステンシルサイズ）を有するカーネルをプログラミングすることができる。
【００７３】
実行レーンアレイ９０５によって処理されている画像データ用のデータストアとして機能すること以外に、ＲＡＭ９０７は、１つ以上のルックアップテーブルを保持してもよい。様々な実施形態では、１つ以上のスカラールックアップテーブルもスカラーメモリ９０３内でインスタンス化されてもよい。
【００７４】
スカラー検索では、同じインデックスからの同じルックアップテーブルからの同じデータ値を実行レーンアレイ９０５内の実行レーンの各々に渡すことを伴う。様々な実施形態では、スカラープロセッサによって行われるスカラールックアップテーブルの検索動作を指示するスカラーオペコードも含むよう、上述したＶＬＩＷ命令フォーマットが拡大される。オペコードとともに使用するために指定されるインデックスは、即値オペランドであってもよく、または、他のデータ記憶位置からフェッチされてもよい。いずれにせよ、実施形態では、スカラーメモリ内のスカラールックアップテーブルの検索は、本質的に、同じクロック周期の間に実行レーンアレイ９０５内のすべての実行レーンに同じデータ値を一斉送信することを伴う。ルックアップテーブルの使用および操作のより詳細は、以下でさらに説明する。
【００７５】
図９ｂは、上述したＶＬＩＷ命令語の実施形態（複数可）を要約した図である。図９ｂに見られるように、ＶＬＩＷ命令語フォーマットは、次の３つの別個の命令に対するフィールドを含む。（１）スカラープロセッサによって実行されるスカラー命令９５１、（２）実行レーンアレイ内のそれぞれのＡＬＵによってＳＩＭＤ式で一斉送信および実行されるＡＬＵ命令９５２、（３）部分ＳＩＭＤ式で一斉送信および実行されるメモリ命令９５３（たとえば、実行レーンアレイの同じ行にある実行レーンが同じＲＡＭを共有する場合、異なる行の各々からの１つの実行レーンが実際に命令を実行する（メモリ命令９５３のフォーマットは、各行のどの実行レーンが命令を実行するのかを識別するオペランドを含んでもよい）。
【００７６】
１つ以上の即値オペランド用のフィールド９５４も含まれていてもよい。命令９５１、９５２、９５３のうちのいずれがどの即値オペランド情報を使用するかは、命令フォーマットで識別されてもよい。また、命令９５１、９５２、９５３の各々は、自身の入力オペランドおよび結果情報も含む（たとえば、ＡＬＵ演算のためのローカルレジスタ、ならびにメモリアクセス命令のためのローカルレジスタおよびメモリアドレス）。実施形態では、スカラー命令９５１は、実行レーンアレイ内の実行レーンがその他２つの命令９５２、９５３を実行する前に、スカラープロセッサによって実行される。つまり、ＶＬＩＷ語の実行は、スカラー命令９５１が実行される第１周期を含み、その次にその他の命令９５２、９５３が実行され得る第２周期を含む（なお、様々な実施形態では、命令９５２および９５３は、並列で実行されてもよい）。
【００７７】
実施形態では、スカラープロセッサによって実行されるスカラー命令は、データ演算部のメモリまたは２Ｄシフトレジスタからシートをロードする／データ演算部のメモリまたは２Ｄシフトレジスタにシートを格納するためにシート生成部に発行されるコマンドを含む。ここで、シート生成部の動作は、ラインバッファ部の動作、または、スカラープロセッサが発行したコマンドをシート生成部が完了させるのにかかる周期の数を実行時前に理解することを防ぐその他の変数によって異なり得る。このように、実施形態では、シート生成部に発行されるコマンドにスカラー命令９５１が対応するまたはスカラー命令９５１がコマンドをシート生成部に対して発行させるＶＬＩＷ語は、いずれも、その他の２つの命令フィールド９５２、９５３にＮＯＯＰ（ｎｏ−ｏｐｅｒａｔｉｏｎ）命令も含む。次に、シート生成部がデータ演算部へのロード／データ演算部からの格納を完了するまで、プログラムコードは、命令フィールド９５２、９５３のＮＯＯＰ命令のループに入る。ここで、シート生成部にコマンドを発行すると、スカラープロセッサは、コマンドが完了するとシート生成部がリセットするインターロックレジスタのビットを設定してもよい。ＮＯＯＰループの間、スカラープロセッサは、インターロックビットのビットを監視する。シート生成部がそのコマンドを完了したことをスカラープロセッサが検出すると、通常の実行が再び開始される。
【００７８】
図１０は、データ演算コンポーネント１００１の実施形態を示す図である。図１０に見られるように、データ演算コンポーネント１００１は、２次元シフトレジスタアレイ構造１００６の「上方」に論理的に位置する実行レーンのアレイ１００５を含む。上述したように、様々な実施形態では、シート生成部が提供する画像データのシートが２次元シフトレジスタ１００６にロードされる。次に、実行レーンがレジスタ構造１００６からのシートデータを処理する。
【００７９】
実行レーンアレイ１００５およびシフトレジスタ構造１００６は、互いに対して定位置に固定されている。しかしながら、シフトレジスタアレイ１００６内のデータは、効果的かつ調整された方法でシフトし、実行レーンアレイに含まれる各実行レーンにデータ内の異なるステンシルを処理させる。このように、各実行レーンは、生成された出力シートに含まれる異なる画素の出力画像値を判断する。図１０のアーキテクチャから、実行レーンアレイ１００５が上下に隣接する実行レーンおよび左右に隣接する実行レーンを含むので、重なり合うステンシルは、縦方向だけでなく、横方向にも配置されていることは明らかである。
【００８０】
データ演算部１００１のいくつかの注目すべきアーキテクチャ上の特徴として、シフトレジスタ構造１００６の寸法は、実行レーンアレイ１００５よりも広い。つまり、実行レーンアレイ１００５の外側にレジスタ１００９の「ハロー（ｈａｌｏ）」が存在する。ハロー１００９は、実行レーンアレイの２つの側面に存在するように図示されているが、実装によっては、ハローは、実行レーンアレイ１００５のより少ない（１つ）またはより多い（３つまたは４つの）側面に存在してもよい。ハロー１００５は、実行レーン１００５の「下」をデータがシフトすると実行レーンアレイ１００５の境界の外側にこぼれ出るデータの「スピルオーバ」空間を提供する役割を果たす。簡単な例として、ステンシルの左端の画素が処理されると、実行レーンアレイ１００５の右端の中心にある５×５ステンシルは、さらに右側に４つのハローレジスタ位置を必要とすることになる。図をわかりやすくするために、図１０は、標準的な実施形態において、いずれの側面（右、下）のレジスタも横接続および縦接続の両方を有し得るとき、ハローの右側のレジスタを横方向にのみシフト接続していると示し、ハローの下側のレジスタを縦方向にのみシフト接続していると示している。様々な実施形態では、ハロー領域は、画像処理命令を実行するための対応する実行レーン論理を含まない（たとえば、ＡＬＵは存在しない）。しかしながら、個々のハローレジスタ位置がメモリから個々にデータをロードし、データをメモリに格納できるよう、個々のメモリアクセスユニット（Ｍ）がハロー領域位置の各々に存在する。
【００８１】
アレイの各行および／または各列、またはそれらの一部に連結されたさらなるスピルオーバ空間がＲＡＭ１００７によって提供される（たとえば、行方向に４つの実行レーン、列方向に２つの実行レーンにまたがる実行レーンアレイの「領域」に１つのＲＡＭが割り当てられてもよい）。わかりやすくするために、残りの明細書では、主に、行ベースおよび／または列ベースの割り当て方式について言及する）。ここで、実行レーンのカーネル動作は、２次元シフトレジスタアレイ１００６の外側の画素値を処理する必要がある場合、（いくつかの画像処理ルーチンが必要とし得る）、画像データの面は、たとえば、ハロー領域１００９からＲＡＭ１００７にさらにこぼれ出る（スピルオーバする）ことができる。たとえば、実行レーンアレイの右端の実行レーンの右側に４つのストレージ要素のみから構成されるハロー領域をハードウェアが含む、６×６ステンシルを考える。この場合、ステンシルを完全に処理するためには、データは、さらに右にシフトされてハロー１００９の右端からはみ出る必要がある。ハロー領域１００９の外にシフトされるデータは、その後、ＲＡＭ１００７にこぼれ出る。ＲＡＭ１００７および図９のステンシルプロセッサのその他の適用例をさらに以下に説明する。
【００８２】
図１１ａ〜図１１ｋは、上述したように実行レーンアレイの「下」の２次元シフトレジスタアレイ内で画像データがシフトされる方法の例を説明する図である。図１１ａに見られるように、２次元シフトアレイのデータコンテンツが第１アレイ１１０７に図示され、実行レーンアレイがフレーム１１０５によって図示されている。また、実行レーンアレイ内の２つの隣接する実行レーン１１１０を簡略化して図示している。この単純化した図示１１１０では、各実行レーンは、シフトレジスタからデータを受け付ける、（たとえば、周期間の累算器として動作するための）ＡＬＵ出力からデータを受け付ける、または、出力データを出力先に書き込むことができるレジスタＲ１を含む。
【００８３】
また、各実行レーンは、その「下」に、ローカルレジスタＲ２において、利用可能なコンテンツを２次元シフトアレイに有する。よって、Ｒ１は、実行レーンの物理レジスタであるのに対して、Ｒ２は、２次元シフトレジスタアレイの物理レジスタである。実行レーンは、Ｒ１および／またはＲ２が提供するオペランドを処理できるＡＬＵを含む。より詳細はさらに後述するが、実施形態では、シフトレジスタは、実際には、アレイ位置当たり複数のストレージ／レジスタ要素（の「深度」）を有して実装されるがシフトアクティビティは、ストレージ要素の１つの面に限られる（たとえば、ストレージ要素の１つの面のみが周期ごとにシフトできる）。図１１ａ〜１１ｋは、これらの深度がより深いレジスタ位置のうちの１つを、それぞれの実行レーンからの結果Ｘを格納するのに用いられているものとして図示している。図をわかりやすくするために、深度がより深い結果レジスタは、対応するレジスタＲ２の下ではなく、横に並べて図示されている。
【００８４】
図１１ａ〜１１ｋは、実行レーンアレイ内に図示された実行レーン位置１１１１のペアと中央位置が揃えられた２つのステンシルの算出に焦点を当てている。図をわかりやすくするために、実行レーン１１１０のペアは、実際には下記の例によると縦方向に隣接している場合に、横方向に隣接していると図示されている。
【００８５】
最初に、図１１ａに見られるように、実行レーンは、その中央のステンシル位置の中心に位置決めされる。図１１ｂは、両方の実行レーンによって実行されるオブジェクトコードを示す図である。図１１ｂに見られるように、両方の実行レーンのプログラムコードによって、シフトレジスタアレイ内のデータは、位置を下に１つシフトし、位置を右に１つシフトさせられる。これによって、両方の実行レーンがそれぞれのステンシルの左上隅に揃えられる。次に、プログラムコードは、（Ｒ２において）それぞれの位置にあるデータをＲ１にロードさせる。
【００８６】
図１１ｃに見られるように、次に、プログラムコードは、実行レーンのペアに、シフトレジスタアレイ内のデータを１単位だけ左にシフトさせ、これによって、各実行レーンのそれぞれの位置の右にある値が、各実行レーンの位置にシフトされる。次に、（Ｒ２における）実行レーンの位置までシフトされた新しい値がＲ１の値（前の値）に加算される。その結果がＲ１に書き込まれる。図１１ｄに見られるように、図１１ｃで説明したのと同じ処理が繰り返され、これによって、結果Ｒ１は、ここで、上部実行レーンにおいて値Ａ＋Ｂ＋Ｃを含み、下部実行レーンにおいてＦ＋Ｇ＋Ｈを含む。この時点で、両方の実行レーンは、それぞれのステンシルの上側の行を処理済みである。なお、データは、実行レーンアレイの左側のハロー領域（左側に存在する場合）にこぼれ出るが、ハロー領域が実行レーンアレイの左側に存在しない場合はＲＡＭにこぼれ出る。
【００８７】
図１１ｅに見られるように、次に、プログラムコードは、シフトレジスタアレイ内のデータを１単位だけ上にシフトさせ、これによって、両方の実行レーンがそれぞれのステンシルの中央行の右端に揃えられる。両方の実行レーンのレジスタＲ１は、現在、ステンシルの最上行および中央行の右端の値の総和を含む。図１１ｆおよび図１１ｇは、両方の実行レーンのステンシルの中央行を左方向に移動する続きの進行を説明する図である。図１１ｇの処理の終わりに両方の実行レーンがそれぞれのステンシル最上行および中央行の値の総和を含むよう、累積加算が続く。
【００８８】
図１１ｈは、各実行レーンを対応するステンシルの最下行に揃えるための別のシフトを示す図である。図１１ｉおよび図１１ｊは、両方の実行レーンのステンシルに対する処理を完了するための、続きのシフト処理を示す図である。図１１ｋは、データ配列において各実行レーンをその正しい位置に揃えて結果をそこに書き込むためのさらなるシフト処理を示す図である。
【００８９】
なお、図１１ａ〜図１１ｋの例では、シフト演算用のオブジェクトコードは、（Ｘ，Ｙ）座標で表されるシフトの方向および大きさを識別する命令フォーマットを含んでもよい。たとえば、位置を１つ上にシフトさせるためのオブジェクトコードは、ＳＨＩＦＴ０、＋１というオブジェクトコードで表されてもよい。別の例として、位置を右に１つシフトすることは、ＳＨＩＦＴ＋１、０というオブジェクトコードで表現されてもよい。また、様々な実施形態では、より大きなシフトも、オブジェクトコード（たとえば、ＳＨＩＦＴ０、＋２）で指定されてもよい。ここで、２Ｄシフトレジスタハードウェアが周期あたり位置１つ分のシフトしかサポートしない場合、命令は、マシンによって、複数周期の実行を必要とすると解釈されてもよく、または、周期あたり位置２つ分以上のシフトをサポートするよう２Ｄシフトレジスタハードウェアが設計されてもよい。後者の実施形態をより詳細にさらに後述する。
【００９０】
図１２は、実行レーンおよび対応するシフトレジスタ構造（ハロー領域のレジスタは、対応する実行レーンを含まないが、様々な実施形態のメモリを含む）の単位セルをより詳細に示す別の図である。実行レーン、および実行レーンアレイの各位置に対応付けられたレジスタ空間は、実施形態では、図１２に見られる回路を実行レーンアレイの各ノードにおいてインスタンス化することによって実現される。図１２に見られるように、単位セルは、４つのレジスタＲ２〜Ｒ５から構成されるレジスタファイル１２０２に連結された実行レーン１２０１を含む。いずれの周期の間も、実行レーン１２０１は、レジスタＲ１〜Ｒ５のうちのいずれかから読み出されたり、書き込まれたりしてもよい。２つの入力オペランドを必要とする命令については、実行レーンは、両方のオペランドをＲ１〜Ｒ５のうちのいずれかから取り出してもよい。
【００９１】
実施形態では、２次元シフトレジスタ構造は、１つの周期の間、レジスタＲ２〜Ｒ４のうちのいずれか１つ（のみ）のコンテンツを出力マルチプレクサ１２０３を通してその隣接するレジスタのレジスタファイルのうちの１つにシフト「アウト」させ、隣接するレジスタ間のシフトが同じ方向になるよう、レジスタＲ２〜Ｒ４のうちのいずれか１つ（のみ）のコンテンツを対応するレジスタファイルから入力マルチプレクサ１２０４を通してシフト「イン」されるコンテンツと置き換えることによって実現される（たとえば、すべての実行レーンが左にシフトする、すべての実行レーンが右にシフトする、など）。同じレジスタのコンテンツがシフトアウトされて、同じ周期上でシフトされるコンテンツと置き換えられることは一般的であり得るが、マルチプレクサ配列１２０３、１２０４は、同じ周期の間、同じレジスタファイル内で異なるシフト元および異なるシフト対象のレジスタを可能にする。
【００９２】
図１２に示すように、シフトシーケンスの間、実行レーンは、そのレジスタファイル１２０２からその左隣、右隣、上隣、および下隣の各々にコンテンツをシフトアウトすることになることが分かる。同じシフトシーケンスと連動して、実行レーンは、そのレジスタファイルに左隣、右隣、上隣、および下隣のうちの特定のレジスタファイルからコンテンツをシフトする。ここでも、シフトアウトする対象およびシフトインする元は、すべての実行レーンについて同じシフト方向に一致しなければならない（たとえば、右隣にシフトアウトする場合、シフトインは左隣からでなければならない）。
【００９３】
一実施形態において、周期あたり実行レーン１つにつき１つのレジスタのコンテンツのみをシフトさせることが可能であるが、その他の実施形態は、２つ以上のレジスタのコンテンツをシフトイン／アウトさせることが可能であってもよい。たとえば、図１２に見られるマルチプレクサ回路１２０３、１２０４の第２インスタンスが図１２の設計に組み込まれている場合、同じ周期で２つのレジスタのコンテンツをシフトアウト／インしてもよい。当然、周期ごとに１つのレジスタのコンテンツのみをシフトさせることができる実施形態では、数値演算間のシフトのためにより多くのクロック周期を消費することによって複数のレジスタからのシフトが数値演算間で生じてもよい（たとえば、数値演算間の２つのシフト演算を消費することによって２つのレジスタのコンテンツが当該数値演算間でシフトされてもよい）。
【００９４】
なお、シフトシーケンス時に実行レーンのレジスタファイルのすべてのコンテンツよりも少ない数のコンテンツがシフトアウトされた場合、各実行レーンのシフトアウトされなかったレジスタのコンテンツは、所定の位置に留まっている（シフトしない）ことが分かる。このように、シフトインされたコンテンツに置き換えられないシフトされなかったコンテンツは、いずれも、シフト周期にわたって、実行レーンにローカルに留まる。各実行レーンに見られるメモリユニット（「Ｍ」）を使用して、実行レーンアレイ内の実行レーンの行および／または列に対応付けられたランダムアクセスメモリ空間からデータをロード／またはそれに格納する。ここで、Ｍユニットは、標準Ｍユニットとして機能し、標準Ｍユニットは、実行レーン自体のレジスタ空間からロード／またはそれに格納できないデータをロード／格納するために利用される場合が多い。様々な実施形態では、Ｍユニットの主な動作は、ローカルレジスタからのデータをメモリに書き込み、メモリからデータを読み出してローカルレジスタに書き込むことである。
【００９５】
ハードウェア実行レーン１２０１のＡＬＵ装置がサポートするＩＳＡオペコードに関して、様々な実施形態では、ハードウェアＡＬＵがサポートする数値演算オペコードは、（たとえば、ＡＤＤ、ＳＵＢ、ＭＯＶ、ＭＵＬ、ＭＡＤ、ＡＢＳ、ＤＩＶ、ＳＨＬ、ＳＨＲ、ＭＩＮ／ＭＡＸ、ＳＥＬ、ＡＮＤ、ＯＲ、ＸＯＲ、ＮＯＴ）を含む。先ほど記載したように、実行レーン１２０１によって、関連するＲＡＭからデータをフェッチ／当該ＲＡＭにデータを格納するためのメモリアクセス命令が実行され得る。これに加えて、ハードウェア実行レーン１２０１は、２次元シフトレジスタ構造内でデータをシフトさせるためのシフト演算命令（右、左、上、下）をサポートする。上述したように、プログラム制御命令は、主に、ステンシルプロセッサのスカラープロセッサによって実行される。
【００９６】
４．０  実装の実施形態
上述した様々な画像処理プロセッサのアーキテクチャの特徴は、必ずしも従来の意味での画像処理に限られないため、画像処理プロセッサを新たに特徴付け得る（または、させ得ない）その他のアプリケーションに適用してもよいことを指摘することが適切である。たとえば、上述した様々な画像処理プロセッサのアーキテクチャの特徴のうちのいずれかが、実際のカメラ画像の処理とは対照的に、アニメーションの作成ならびに／または生成および／もしくは描画に使用される場合、画像処理プロセッサは、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）として特徴付けられてもよい。これに加えて、上述した画像処理プロセッサアーキテクチャの特徴を、映像処理、ビジョンプロセッシング、画像認識および／または機械学習など、その他の技術用途に適用してもよい。このように適用すると、画像処理プロセッサは、（たとえば、コプロセッサとして）、（たとえば、コンピューティングシステムのＣＰＵ：Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔまたはその一部である）より汎用的なプロセッサと統合されてもよく、または、コンピューティングシステム内のスタンドアロン型のプロセッサであってもよい。
【００９７】
上述したハードウェア設計の実施形態は、半導体チップ内に実施されてもよく、および／または、最終的に半導体製造プロセスに向けての回路設計の記述として実施されてもよい。後者の場合、このような回路記述は、（たとえば、ＶＨＤＬまたはＶｅｒｉｌｏｇ）レジスタ転送レベル（ＲＴＬ：Ｒｅｇｉｓｔｅｒ  Ｔｒａｎｓｆｅｒ  Ｌｅｖｅｌ）回路記述、ゲートレベル回路記述、トランジスタレベル回路記述もしくはマスク記述、またはそれらの様々な組合せなどの形態をとり得る。回路記述は、通常、コンピュータ読み取り可能な記憶媒体（ＣＤ−ＲＯＭまたはその他の種類のストレージ技術など）上に実施される。
【００９８】
先のセクションから、後述する画像処理プロセッサをコンピュータシステム上のハードウェアで（たとえば、ハンドヘルド端末のカメラからのデータを処理するハンドヘルド端末のＳＯＣ（Ｓｙｓｔｅｍ  Ｏｎ  Ｃｈｉｐ）の一部として）実施してもよいことを認識することが適切である。なお、画像処理プロセッサがハードウェア回路として実施された場合、画像処理プロセッサによって処理される画像データをカメラから直接受け付けてもよいことが分かる。ここで、画像処理プロセッサは、単品カメラの一部、またはカメラを内蔵したコンピューティングシステムの一部であってもよい。後者の場合、カメラからまたはコンピューティングシステムのシステムメモリから画像データを直接受け付けてもよい（たとえば、カメラは、その画像データを、画像処理プロセッサではなくシステムメモリに送る）。また、先のセクションに記載の特徴の多くは、（アニメーションを描画する）ＧＰＵに適用可能である。
【００９９】
図１３は、コンピューティングシステムの例示的な図である。上述したコンピューティングシステムの構成要素のうちの多くは、内蔵カメラおよび関連する画像処理プロセッサ（たとえば、スマートフォンまたはタブレットコンピュータなどのハンドヘルド端末）を有するコンピューティングシステムに適用可能である。当業者は、これら２つの違いを容易に明確にするであろう。これに加えて、図１３のコンピューティングシステムは、ワークステーションまたはスーパーコンピュータなどの高性能なコンピューティングシステムの多くの特徴も含んでいる。
【０１００】
図１３に見られるように、基本的なコンピューティングシステムは、ＣＰＵ１３０１（たとえば、マルチコアプロセッサまたはアプリケーションプロセッサ上に配置された複数の汎用処理コア１３１５＿１〜１３１５＿Ｎおよびメインメモリコントローラ１３１７を含んでもよい）と、システムメモリ１３０２と、ディスプレイ１３０３（たとえば、タッチスクリーン、フラットパネル）と、ローカル有線ポイントツーポイントリンク（たとえば、ＵＳＢ）インタフェース１３０４と、様々なネットワーク入出力機能部１３０５（Ｅｔｈｅｒｎｅｔ（登録商標）インタフェースおよび／またはセルラーモデムサブシステムなど）と、無線ローカルエリアネットワーク（たとえば、ＷｉＦｉ）インタフェース１３０６と、無線ポイントツーポイントリンク（たとえば、Ｂｌｕｅｔｏｏｔｈ（登録商標））インタフェース１３０７およびＧＰＳ（Ｇｌｏｂａｌ  Ｐｏｓｉｔｉｏｎｉｎｇ  Ｓｙｓｔｅｍ）インタフェース１３０８と、様々なセンサ１３０９＿１〜１３０９＿Ｎと、１つ以上のカメラ１３１０と、バッテリー１３１１と、電力管理制御部１３１２と、スピーカ／マイクロフォン１３１３と、オーディオコーダ／デコーダ１３１４とを含んでもよい。
【０１０１】
アプリケーションプロセッサまたはマルチコアプロセッサ１３５０は、そのＣＰＵ１２０１内に１つ以上の汎用処理コア１３１５を含み、１つ以上のＧＰＵ１３１６、メモリ管理機能部１３１７（たとえば、メモリコントローラ）、入出力制御機能部１３１８、および画像処理部１３１９を含んでもよい。汎用処理コア１３１５は、通常、コンピューティングシステムのオペレーティングシステムおよびアプリケーションソフトウェアを実行する。ＧＰＵ１３１６は、通常、グラフィックスを多く使う機能を実行して、たとえば、ディスプレイ１３０３上に提示されるグラフィックス情報を生成する。メモリ制御機能部１３１７は、システムメモリ１３０２とインタフェース接続され、システムメモリ１３０２にデータを書き込む／システムメモリ１３０２からデータを読み出す。電力管理制御部１３１２は、一般に、システム１３００の消費電力を制御する。
【０１０２】
画像処理部１３１９は、先のセクションで詳細に上述した画像処理部の実施形態のいずれかに従って実現されてもよい。これに加えて、またはこれと組み合わせて、ＩＰＵ１３１９がＧＰＵ１３１６およびＣＰＵ１３０１のいずれかまたは両方に、そのコプロセッサとして連結されてもよい。これに加えて、様々な実施形態では、ＧＰＵ１３１６は、詳細に上述した画像処理プロセッサの特徴のいずれかを有して実現されてもよい。画像処理部１３１９は、詳細に上述したようなアプリケーションソフトウェアを有して構成されてもよい。これに加えて、図１３のコンピューティングシステムなどのコンピューティングシステムは、プログラムコードを実行して、上述したアプリケーションソフトウェア開発を実施してもよい。
【０１０３】
タッチスクリーンディスプレイ１３０３、通信インタフェース１３０４〜１３０７、ＧＰＳインタフェース１３０８、センサ１３０９、カメラ１３１０、およびスピーカ／マイクロフォンコーデック１３１３、１３１４の各々は、すべて、内蔵型周辺機器（たとえば、１つ以上のカメラ１３１０）も適宜備えたコンピュータシステム全体に対する様々な形態のＩ／Ｏ（入力部および／または出力部）として見ることができる。実装形態によっては、これらのＩ／Ｏコンポーネントのうちの様々なＩ／Ｏコンポーネントがアプリケーションプロセッサ／マルチコアプロセッサ１３５０上に集積されてもよく、ダイからずれて配置、またはアプリケーションプロセッサ／マルチコアプロセッサ１３５０のパッケージの外に配置されてもよい。
【０１０４】
実施形態では、１つ以上のカメラ１３１０は、カメラと視野に存在するオブジェクトとの間の奥行きを測定可能な深度カメラを含む。アプリケーションプロセッサまたはその他のプロセッサの汎用ＣＰＵコア（または、プログラムコードを実行するための命令実行パイプラインを有するその他の機能ブロック）上で実行されるアプリケーションソフトウェア、オペレーティングシステムソフトウェア、デバイスドライバソフトウェア、および／またはファームウェアが、上述した機能のいずれかを実行してもよい。
【０１０５】
本発明の実施形態は、上述した様々な処理を含んでもよい。処理は、機械によって実行可能な命令に含まれてもよい。命令を用いて、汎用プロセッサまたは特定用途向けプロセッサに特定の処理を実行させることができる。これに代えて、これらの処理は、処理を実行するための結線ロジックおよび／またはプログラム可能なロジックを含んだ専用のハードウェア部品によって実行されてもよく、プログラムを組み込まれたコンピュータ構成要素とカスタムハードウェア部品との任意の組み合わせによって実行されてもよい。
【０１０６】
また、本発明の要素は、機械によって実行可能な命令を格納するための機械読み取り可能な媒体として提供されてもよい。機械読み取り可能な媒体は、フロッピー（登録商標）ディスク、光ディスク、ＣＤ−ＲＯＭ、および光磁気ディスク、ＦＬＡＳＨメモリ、ＲＯＭ、ＲＡＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭ、磁気カードまたは光カード、電子命令を格納するのに適した伝播媒体またはその他の種類の媒体／機械読み取り可能な媒体などがあり得るが、これらに限定されない。たとえば、本発明は、コンピュータプログラムとしてダウンロードされてもよく、コンピュータプログラムは、搬送波またはその他の伝播媒体に含んだデータ信号として、通信リンク（たとえば、モデムまたはネットワーク接続）を介してリモートコンピュータ（たとえば、サーバ）から要求元コンピュータ（たとえば、クライアント）に転送され得る。
【０１０７】
上記の明細書において、具体的、例示的な実施形態を用いて本発明を説明したが、特許請求の範囲に記載の本発明のより広義の趣旨および範囲から逸脱することなく、様々な変形、変更を行ってもよいことは明らかであろう。したがって、明細書および図面は、厳密ではなく、例示的であるとみなされるべきである。
【０１０８】
以下に、いくつかの例を記載する。
（例１）画像処理プロセッサであって、
複数の処理コアと、
処理コア間で連結されたリングネットワークとを備え、リングネットワークは、処理コアの第１セットを連結する第１構成と、処理コアの第１セットおよび処理コアの第２セットを連結する第２構成とを提供し、第１構成および第２構成は、連続するシーケンスで各処理コアにネットワークアドレスを割り当て、第１構成および第２構成は、処理コアの第１セットに含まれる各処理コアに同一のネットワークアドレスを割り当て、リングを囲むように処理コアに割り当てられるネットワークアドレスは、連続するシーケンスとは異なる、画像処理プロセッサ。
【０１０９】
（例２）画像処理プロセッサは、第１構成および第２構成を設定するためのレジスタ空間を備える、例１に記載のプロセッサ。
【０１１０】
（例３）リングネットワークは、マルチプレクサのセットの第１チャネルの選択によって、リング上のさらなるノードを含めることをリングネットワークに許可させ、マルチプレクサのセットの第２チャネルの選択によって、さらなるノードをリングネットワークに排除させるよう、マルチプレクサのセットを含む、例１または２に記載のプロセッサ。
【０１１１】
（例４）マルチプレクサのセットは、マルチプレクサのペアを含む、例３に記載のプロセッサ。
【０１１２】
（例５）処理コアは、プログラムコードを実行する、先行する例のうちの少なくとも１つに記載のプロセッサ。
【０１１３】
（例６）処理コアは、各々、実行レーンアレイと２次元シフトレジスタアレイとを備える、先行する例のうちの少なくとも１つに記載のプロセッサ。
【０１１４】
（例７）画像処理プロセッサのアーキテクチャは、少なくとも１つのラインバッファ、少なくとも１つのシート生成部、および／または少なくとも１つのステンシル生成部を備える、先行する例のうちの少なくとも１つに記載のプロセッサ。
【０１１５】
（例８）ステンシル、特に、重なり合うステンシルを処理するように構成される、先行する例のうちの少なくとも１つに記載のプロセッサ。
【０１１６】
（例９）実行レーンアレイよりも幅広い次元を有する、特に、実行レーンアレイの外側にレジスタが存在するシフトレジスタ構造を含むデータ演算部上で動作するように構成される、先行する例のうちの少なくとも１つに記載のプロセッサ。
【０１１７】
（例１０）プログラムコードを含む非一時的な機械読み取り可能な記憶媒体であって、プログラムコードは、コンピューティングシステムによって処理されると、方法を実行させ、方法は、
プロセッサ上で実行するためのオブジェクトコードの第１インスタンスを構成するステップを含み、プロセッサは、複数のコアと内部ネットワークとを有し、内部ネットワークは、第１の数のコアを通信可能に連結することを可能にする第１構成で構成され、方法は、さらに、
プロセッサの第２インスタンス上で実行するためのオブジェクトコードの第２インスタンスを構成するステップを含み、プロセッサの第２インスタンスの内部ネットワークは、異なる数のコアを通信可能に連結することを可能にする第２構成で構成され、プロセッサおよびプロセッサの第２インスタンス上で同じ位置にあるコアは、第１構成および第２構成に対して同じネットワークアドレスを有する、非一時的な機械読み取り可能な記憶媒体。
【０１１８】
（例１１）オブジェクトコードの第１インスタンスおよびオブジェクトコードの第２インスタンスは、プロセッサおよびプロセッサの第２インスタンスのそれぞれ異なるコア上で実行される、例１０に記載の非一時的な機械読み取り可能な媒体。
【０１１９】
（例１２）オブジェクトコードの第１インスタンスおよび第２インスタンスは、それぞれ異なるコアをベースアドレスからのオフセットとしてアドレス指定する、例１０または１１に記載の非一時的な機械読み取り可能な媒体。
【０１２０】
（例１３）オブジェクトコードの第１インスタンスおよび第２インスタンスを構成するステップは、第１インスタンスおよび第２インスタンスにそれぞれ異なるベースアドレスを設定するステップを含む、例１０〜１２のうちの少なくとも１つに記載の非一時的な機械読み取り可能な媒体。
【０１２１】
（例１４）オブジェクトコードの第１インスタンスおよび第２インスタンスのうちの一方は、より大きなアプリケーション内のコードのより小さいコンポーネントとして個々のプロセッサ上で実行され、より大きなアプリケーションは、別のプログラムのオブジェクトコードインスタンスをオブジェクトコードの第１インスタンスおよび第２インスタンスのうちの一方と組み合わせることによって構成される、例１０〜１３のうちの少なくとも１つに記載の非一時的な機械読み取り可能な媒体。
【０１２２】
（例１５）オブジェクトコードの第１インスタンスおよび第２インスタンスのうちの他方は、スタンドアロンアプリケーションとして個々のプロセッサ上で実行される、例１０〜１４のうちの少なくとも１つに記載の非一時的な機械読み取り可能な媒体。
【０１２３】
（例１６）方法は、
プロセッサとは異なる数のコアを有する別のプロセッサ上で実行するためのオブジェクトコードの第３インスタンスを構成するステップをさらに含む、例１０〜１５のうちの少なくとも１つに記載の非一時的な機械読み取り可能な媒体。
【０１２４】
（例１７）方法は、少なくとも１つのラインバッファ、少なくとも１つのシート生成部、および／または少なくとも１つのステンシル生成部から構成される画像処理プロセッサのアーキテクチャ上で動作する、例１０〜１６のうちの少なくとも１つに記載の非一時的な機械読み取り可能な媒体。
【０１２５】
（例１８）ステンシル、特に、重なり合うステンシルを処理するように構成される、例１０〜１７のうちの少なくとも１つに記載の非一時的な機械読み取り可能な媒体。
【０１２６】
（例１９）実行レーンアレイよりも幅広い次元を有する、特に、実行レーンアレイの外側にレジスタが存在するシフトレジスタ構造を含むデータ演算部上で動作するように構成される、例１０〜１８のうちの少なくとも１つに記載の非一時的な機械読み取り可能な媒体。
【０１２７】
（例２０）コンピューティングシステムであって、
複数の処理コアと、
システムメモリと、
システムメモリと複数の処理コアとの間に配置されたシステムメモリコントローラと、
プログラムコードを含んだ非一時的な機械読み取り可能な記憶媒体とを備え、プログラムコードは、コンピューティングシステムによって処理されると、方法を実行させ、方法は、
プロセッサ上で実行するためのオブジェクトコードの第１インスタンスを構成するステップを含み、プロセッサは、複数のコアと内部ネットワークとを有し、内部ネットワークは、第１の数のコアを通信可能に連結することを可能にする第１構成で構成され、方法は、さらに、
プロセッサの第２インスタンス上で実行するためのオブジェクトコードの第２インスタンスを構成するステップをさらに含み、プロセッサの第２インスタンスの内部ネットワークは、異なる数のコアを通信可能に連結することを可能にする第２構成で構成され、プロセッサおよびプロセッサの第２インスタンス上で同じ位置にあるコアは、第１構成および第２構成のそれぞれに対して同じネットワークアドレスを有する、コンピューティングシステム。
【０１２８】
（例２１）オブジェクトコードの第１インスタンスおよびオブジェクトコードの第２インスタンスは、プロセッサおよびプロセッサの第２インスタンスのそれぞれ異なるコア上で実行される、例２０に記載のコンピューティングシステム。
【０１２９】
（例２２）オブジェクトコードの第１インスタンスおよび第２インスタンスは、それぞれ異なるコアをベースアドレスからのオフセットとしてアドレス指定する、例２０または２１に記載のコンピューティングシステム。
【０１３０】
（例２３）オブジェクトコードの第１インスタンスおよび第２インスタンスを構成するステップは、第１インスタンスおよび第２インスタンスにそれぞれ異なるベースアドレスを設定するステップを含む、例２０〜２２のうちの少なくとも１つに記載のコンピューティングシステム。
【０１３１】
（例２４）オブジェクトコードの第１インスタンスおよび第２インスタンスのうちの一方は、より大きなアプリケーション内のコードのより小さいコンポーネントとして、個々のプロセッサ上で実行され、より大きなアプリケーションは、別のプログラムのオブジェクトコードインスタンスをオブジェクトコードの第１インスタンスおよび第２インスタンスのうちの一方と組み合わせることによって構成される、例２０〜２３のうちの少なくとも１つに記載のコンピューティングシステム。
【０１３２】
（例２５）オブジェクトコードの第１インスタンスおよび第２インスタンスのうちの他方は、スタンドアロンアプリケーションとして個々のプロセッサ上で実行される、例２０〜２４のうちの少なくとも１つに記載のコンピューティングシステム。
【０１３３】
（例２６）プロセッサおよびプロセッサの第２インスタンスは、画像処理プロセッサである、例２０〜２５のうちの少なくとも１つに記載のコンピューティングシステム。
【０１３４】
（例２７）少なくとも１つのラインバッファ、少なくとも１つのシート生成部、および／または少なくとも１つのステンシル生成部を含むアーキテクチャを有する画像処理プロセッサを備える、例２０〜２６のうちの少なくとも１つに記載のコンピューティングシステム。
【０１３５】
（例２８）ステンシル、特に、重なり合うステンシルを処理するように構成される、例２０〜２７のうちの少なくとも１つに記載のコンピューティングシステム。
【０１３６】
（例２９）実行レーンアレイよりも幅広い次元を有する、特に、実行レーンアレイの外側にレジスタが存在するシフトレジスタ構造を含むデータ演算部を備える、例２０〜１８のうちの少なくとも１つに記載の非一時的な機械読み取り可能な媒体。
【図１】
0006967597.tif 000002
【図２】
0006967597.tif 000003
【図３】
0006967597.tif 000004
【図４】
0006967597.tif 000005
【図５】
0006967597.tif 000006
【図６ａ】
0006967597.tif 000007
【図６ｂ】
0006967597.tif 000008
【図６ｃ】
0006967597.tif 000009
【図６ｄ】
0006967597.tif 000010
【図７】
0006967597.tif 000011
【図８ａ】
0006967597.tif 000012
【図８ｂ】
0006967597.tif 000013
【図８ｃ】
0006967597.tif 000014
【図８ｄ】
0006967597.tif 000015
【図８ｅ】
0006967597.tif 000016
【図９ａ】
0006967597.tif 000017
【図９ｂ】
0006967597.tif 000018
【図１０】
0006967597.tif 000019
【図１１ａ】
0006967597.tif 000020
【図１１ｂ】
0006967597.tif 000021
【図１１ｃ】
0006967597.tif 000022
【図１１ｄ】
0006967597.tif 000023
【図１１ｅ】
0006967597.tif 000024
【図１１ｆ】
0006967597.tif 000025
【図１１ｇ】
0006967597.tif 000026
【図１１ｈ】
0006967597.tif 000027
【図１１ｉ】
0006967597.tif 000028
【図１１ｊ】
0006967597.tif 000029
【図１１ｋ】
0006967597.tif 000030
【図１２】
0006967597.tif 000031
【図１３】
0006967597.tif 000032