特許第6967597号(P6967597)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ グーグル インコーポレイテッドの特許一覧

特許6967597設定可能な数のアクティブなコアを有する画像処理プロセッサおよびサポートする内部ネットワーク
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6967597
(24)【登録日】2021年10月27日
(45)【発行日】2021年11月17日
(54)【発明の名称】設定可能な数のアクティブなコアを有する画像処理プロセッサおよびサポートする内部ネットワーク
(51)【国際特許分類】
   G06F 15/173 20060101AFI20211108BHJP
   G06T 1/20 20060101ALI20211108BHJP
   G06F 9/38 20060101ALI20211108BHJP
【FI】
   G06F15/173 673
   G06T1/20 B
   G06F9/38 370C
   G06F9/38 310J
   G06F15/173 683C
【請求項の数】31
【全頁数】36
(21)【出願番号】特願2019-543927(P2019-543927)
(86)(22)【出願日】2018年1月12日
(65)【公表番号】特表2020-519979(P2020-519979A)
(43)【公表日】2020年7月2日
(86)【国際出願番号】US2018013582
(87)【国際公開番号】WO2018208339
(87)【国際公開日】20181115
【審査請求日】2019年11月25日
(31)【優先権主張番号】15/594,502
(32)【優先日】2017年5月12日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】502208397
【氏名又は名称】グーグル エルエルシー
【氏名又は名称原語表記】Google LLC
(74)【代理人】
【識別番号】110001195
【氏名又は名称】特許業務法人深見特許事務所
(72)【発明者】
【氏名】レッドグレイブ,ジェイソン・ルパート
(72)【発明者】
【氏名】メイクスナー,アルバート
(72)【発明者】
【氏名】キム,ジ
(72)【発明者】
【氏名】シャチャム,オフェル
【審査官】 井上 宏一
(56)【参考文献】
【文献】 特開平07−253954(JP,A)
【文献】 特開2012−252490(JP,A)
【文献】 特開2006−093937(JP,A)
【文献】 米国特許出願公開第2016/0316107(US,A1)
【文献】 特開平06−290159(JP,A)
【文献】 特開2004−252508(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 15/173
G06T 1/20
G06F 9/38
(57)【特許請求の範囲】
【請求項1】
画像処理プロセッサであって、
プログラムコードを実行するように構成された複数の処理コアと、
処理コア間で連結されたリングネットワークとを備え、前記リングネットワークは、前記処理コアの第1セットを連結する第1構成と、前記処理コアの前記第1セットおよび前記処理コアの第2セットを連結する第2構成とを提供し、前記第1構成および前記第2構成は、連続するシーケンスで各処理コアにネットワークアドレスを割り当て、前記第1構成および前記第2構成は、前記処理コアの第1セットに含まれる各処理コアに同一のネットワークアドレスを割り当て、前記リングネットワークを囲むように前記処理コアに割り当てられる前記ネットワークアドレスは、前記連続するシーケンスとは異なり、
前記第1構成において、前記複数の処理コアは、第1プログラムのオブジェクトコードを実行し、
前記第2構成において、前記複数の処理コアは、前記第1プログラムを含む第2プログラムのオブジェクトコードを実行し、
前記第2プログラムのオブジェクトコードは、前記第1プログラムのオブジェクトコードのコピーを含む、画像処理プロセッサ。
【請求項2】
前記画像処理プロセッサは、前記第1構成および前記第2構成を設定するためのレジスタ空間を備える、請求項1に記載の画像処理プロセッサ。
【請求項3】
前記リングネットワークは、マルチプレクサのセットの第1チャネルの選択によって、前記リングネットワーク上のさらなるノードを含めることを前記リングネットワークに許可させ、前記マルチプレクサのセットの第2チャネルの選択によって、前記さらなるノードを前記リングネットワークに排除させるよう、前記マルチプレクサのセットを含む、請求項1または2に記載の画像処理プロセッサ。
【請求項4】
前記マルチプレクサのセットは、マルチプレクサのペアを含む、請求項3に記載の画像処理プロセッサ。
【請求項5】
前記処理コアは、各々、実行レーンアレイと2次元シフトレジスタアレイとを備える、請求項1〜のいずれか1項に記載の画像処理プロセッサ。
【請求項6】
前記画像処理プロセッサのアーキテクチャは、少なくとも1つのラインバッファ、少なくとも1つのシート生成部、および/または少なくとも1つのステンシル生成部を備える、請求項1〜のいずれか1項に記載の画像処理プロセッサ。
【請求項7】
ステンシル、特に、重なり合うステンシルを処理するように構成される、請求項1〜のいずれか1項に記載の画像処理プロセッサ。
【請求項8】
実行レーンアレイよりも幅広い次元を有する、特に、前記実行レーンアレイの外側にレジスタが存在するシフトレジスタ構造を含むデータ演算部上で動作するように構成される、請求項1〜のいずれか1項に記載の画像処理プロセッサ。
【請求項9】
前記複数の処理コアによってそれぞれ行われる複数の処理の間の関係は、有向非巡回グラフとして定義される、請求項1〜8のいずれか1項に記載の画像処理プロセッサ。
【請求項10】
プログラムコードを含むプログラムであって、前記プログラムコードは、コンピューティングシステムによって処理されると、方法を実行させ、前記方法は、
第1プログラムをプロセッサの第1構成上で実行するためのオブジェクトコードの第1インスタンスを前記第1プログラムをコンパイルすることによって構成するステップを含み、前記プロセッサは、複数のコアと内部ネットワークとを有し、前記プロセッサの前記第1構成の前記内部ネットワークは、第1の数の前記コアを通信可能に連結することを可能にするように構成され、前記方法は、さらに、
前記第1プログラムを含む第2プログラムを前記プロセッサの第2構成上で実行するための前記オブジェクトコードの第2インスタンスを前記第1インスタンスのコピーを利用して構成するステップを含み、前記プロセッサの前記第2構成の前記内部ネットワークは、第2の数のコアを通信可能に連結することを可能にするように構成され、前記プロセッサの前記第1構成および前記プロセッサの前記第2構成上で同じ位置にあるコアは、同じネットワークアドレスを有する、プログラム。
【請求項11】
前記オブジェクトコードの前記第1インスタンスおよび前記オブジェクトコードの前記第2インスタンスは、前記プロセッサおよび前記プロセッサの前記第2インスタンスのそれぞれ異なるコア上で実行される、請求項10に記載のプログラム。
【請求項12】
前記オブジェクトコードの前記第1インスタンスおよび前記第2インスタンスは、それぞれ異なるコアをベースアドレスからのオフセットとしてアドレス指定する、請求項10または11に記載のプログラム。
【請求項13】
前記オブジェクトコードの前記第1インスタンスおよび前記第2インスタンスを構成するステップは、前記第1インスタンスおよび前記第2インスタンスにそれぞれ異なるベースアドレスを設定するステップを含む、請求項10〜12のいずれか1項に記載のプログラム。
【請求項14】
前記オブジェクトコードの前記第1インスタンスおよび前記第2インスタンスのうちの一方は、より大きなアプリケーション内のコードのより小さいコンポーネントとして個々のプロセッサ上で実行され、前記より大きなアプリケーションは、別のプログラムのオブジェクトコードインスタンスを前記オブジェクトコードの前記第1インスタンスおよび前記第2インスタンスのうちの前記一方と組み合わせることによって構成される、請求項10〜13のいずれか1項に記載のプログラム。
【請求項15】
前記オブジェクトコードの前記第1インスタンスおよび前記第2インスタンスのうちの前記一方に対する他方は、スタンドアロンアプリケーションとして個々のプロセッサ上で実行される、請求項14に記載のプログラム。
【請求項16】
前記方法は、
前記プロセッサとは異なる数のコアを有する別のプロセッサ上で実行するための前記オブジェクトコードの第3インスタンスを構成するステップをさらに含む、請求項10〜15のいずれか1項に記載のプログラム。
【請求項17】
前記方法は、少なくとも1つのラインバッファ、少なくとも1つのシート生成部、および/または少なくとも1つのステンシル生成部から構成される画像処理プロセッサのアーキテクチャ上で動作する、請求項10〜16のいずれか1項に記載のプログラム。
【請求項18】
前記方法は、さらに、ステンシル、特に、重なり合うステンシルを処理するステップを含む、請求項10〜17のいずれか1項に記載のプログラム。
【請求項19】
前記方法は、実行レーンアレイよりも幅広い次元を有する、特に、前記実行レーンアレイの外側にレジスタが存在するシフトレジスタ構造を含むデータ演算部上で動作する、請求項10〜18のいずれか1項に記載のプログラム。
【請求項20】
前記複数のコアによってそれぞれ行われる複数の処理の間の関係は、有向非巡回グラフとして定義される、請求項10〜19のいずれか1項に記載のプログラム。
【請求項21】
コンピューティングシステムであって、
プロセッサと、
システムメモリと、
前記システムメモリと前記プロセッサとの間に配置されたシステムメモリコントローラと、
プログラムコードを含んだ非一時的な機械読み取り可能な記憶媒体とを備え、前記プログラムコードは、前記コンピューティングシステムによって処理されると、方法を実行させ、前記方法は、
第1プログラムを前記プロセッサの第1構成上で実行するためのオブジェクトコードの第1インスタンスを前記第1プログラムをコンパイルすることによって構成するステップを含み、前記プロセッサは、複数のコアと内部ネットワークとを有し、前記プロセッサの前記第1構成の前記内部ネットワークは、第1の数の前記コアを通信可能に連結することを可能にするように構成され、前記方法は、さらに、
前記第1プログラムを含む第2プログラムを前記プロセッサの第2構成上で実行するための前記オブジェクトコードの第2インスタンスを前記第1インスタンスのコピーを利用して構成するステップをさらに含み、前記プロセッサの前記第2構成前記内部ネットワークは、第2の数のコアを通信可能に連結することを可能にするように構成され、前記プロセッサの前記第1構成および前記プロセッサの前記第2構成上で同じ位置にあるコアは、同じネットワークアドレスを有する、コンピューティングシステム。
【請求項22】
前記オブジェクトコードの前記第1インスタンスおよび前記オブジェクトコードの前記第2インスタンスは、前記プロセッサおよび前記プロセッサの前記第2インスタンスのそれぞれ異なるコア上で実行される、請求項21に記載のコンピューティングシステム。
【請求項23】
前記オブジェクトコードの前記第1インスタンスおよび前記第2インスタンスは、それぞれ異なるコアをベースアドレスからのオフセットとしてアドレス指定する、請求項21または22に記載のコンピューティングシステム。
【請求項24】
前記オブジェクトコードの前記第1インスタンスおよび前記第2インスタンスを構成するステップは、前記第1インスタンスおよび前記第2インスタンスにそれぞれ異なるベースアドレスを設定するステップを含む、請求項2123のいずれか1項に記載のコンピューティングシステム。
【請求項25】
前記オブジェクトコードの前記第1インスタンスおよび前記第2インスタンスのうちの一方は、より大きなアプリケーション内のコードのより小さいコンポーネントとして、個々のプロセッサ上で実行され、前記より大きなアプリケーションは、別のプログラムのオブジェクトコードインスタンスを前記オブジェクトコードの前記第1インスタンスおよび前記第2インスタンスのうちの前記一方と組み合わせることによって構成される、請求項2124のいずれか1項に記載のコンピューティングシステム。
【請求項26】
前記オブジェクトコードの前記第1インスタンスおよび前記第2インスタンスのうちの前記一方に対する他方は、スタンドアロンアプリケーションとして個々のプロセッサ上で実行される、請求項25に記載のコンピューティングシステム。
【請求項27】
前記プロセッサおよび前記プロセッサの前記第2インスタンスは、画像処理プロセッサである、請求項2126のいずれか1項に記載のコンピューティングシステム。
【請求項28】
少なくとも1つのラインバッファ、少なくとも1つのシート生成部、および/または少なくとも1つのステンシル生成部を含むアーキテクチャを有する画像処理プロセッサを備える、請求項2127のいずれか1項に記載のコンピューティングシステム。
【請求項29】
ステンシル、特に、重なり合うステンシルを処理するように構成される、請求項2128のいずれか1項に記載のコンピューティングシステム。
【請求項30】
実行レーンアレイよりも幅広い次元を有する、特に、前記実行レーンアレイの外側にレジスタが存在するシフトレジスタ構造を含むデータ演算部を備える、請求項2129のいずれか1項に記載のコンピューティングシステム。
【請求項31】
前記複数のコアによってそれぞれ行われる複数の処理の間の関係は、有向非巡回グラフとして定義される、請求項21〜29のいずれか1項に記載のコンピューティングシステム。
【発明の詳細な説明】
【技術分野】
【0001】
発明の分野
本発明の分野は、全体的に、コンピューティングサイエンスに関し、より具体的には、設定可能な数のアクティブなコアを有する画像処理プロセッサおよびサポートする内部ネットワークに関する。
【背景技術】
【0002】
背景
画像処理には、通常、アレイに編成された画素値の処理が伴う。ここで、空間的に編成された2次元アレイは、画像の2次元の特性をキャプチャする(さらなる次元として、時間(たとえば、一続きの2次元画像)およびデータ型(たとえば、色)を含み得る)。通常のシナリオでは、配列された画素値は、静止画像または動きを撮影するための一続きのフレームを生成したカメラによって提供される。従来の画像処理プロセッサは、通常、両極端に分かれる。
【0003】
第1の極端な側面として、汎用プロセッサまたは汎用のようなプロセッサ(たとえば、ベクトル命令が強化された汎用プロセッサ)上で実行されるソフトウェアプログラムとして、画像処理タスクが実行される。第1の極端は、通常、高度の多目的アプリケーションソフトウェア開発プラットフォームを提供するが、細粒度のデータ構造を、関連するオーバーヘッド(たとえば、命令フェッチおよびデコード、オンチップデータおよびオフチップデータの処理、投機的実行)と組み合わせて利用することによって、最終的には、プログラムコードの実行時にデータの単位当たりに消費されるエネルギーの量が多くなってしまう。
【0004】
正反対の第2の極端の側面として、より大きな単位のデータに、固定機能結線回路が適用される。カスタム設計された回路に直接適用される(細粒度とは対照的な)より大きな単位のデータを利用することによって、データの単位当たりの消費電力が大幅に抑えられる。しかしながら、カスタム設計された固定関数回路を利用することによって、一般に、プロセッサが実行できるタスクのセットが限られてしまう。このように、第2の極端な側面では、(第1の極端な側面に関連する)広く多目的なプログラミング環境がない。
【0005】
高度の多目的アプリケーションソフトウェア開発機会およびデータの単位当たりの電力効率の向上を可能にするテクノロジープラットフォームが依然として望まれているが、いまだ解決策が見つかっていない。
【発明の概要】
【課題を解決するための手段】
【0006】
概要
方法を説明する。この方法は、プロセッサ上で実行するためのオブジェクトコードの第1インスタンスを構成するステップを含む。プロセッサは、複数のコアと、内部ネットワークとを有する。内部ネットワークは、第1の数のコアを通信可能に連結することを可能にする第1構成で構成される。また、方法は、プロセッサの第2インスタンス上で実行するためのオブジェクトコードの第2インスタンスを構成するステップを含む。プロセッサの第2インスタンスの内部ネットワークは、異なる数のコアを通信可能に連結することを可能にする第2構成で構成され、プロセッサおよびプロセッサの第2インスタンス上で同じ位置にあるコアは、第1構成および第2構成についてそれぞれ同じネットワークアドレスを有する。また、上記方法を可能にするように設計された内部ネットワークを有するプロセッサについても説明する。
【0007】
以下の説明および添付の図面を用いて、本発明の実施形態を説明する。
【図面の簡単な説明】
【0008】
図1】ステンシルプロセッサのアーキテクチャのハイレベルビューを示す図である。
図2】画像処理プロセッサのアーキテクチャをより詳細に示した図である。
図3】画像処理プロセッサのアーキテクチャをさらに詳細に示した図である。
図4】画像処理プロセッサが実行できるアプリケーションソフトウェアプログラムを示す図である。
図5】設定可能な数のアクティブなコアサポートするように構成されたネットワークリングを有する図3の画像処理プロセッサを示す図である。
図6a】それぞれ異なる数のアクティブなコアを有して構成される図5の画像処理プロセッサを示す図である。
図6b】それぞれ異なる数のアクティブなコアを有して構成される図5の画像処理プロセッサを示す図である。
図6c】それぞれ異なる数のアクティブなコアを有して構成される図5の画像処理プロセッサを示す図である。
図6d】それぞれ異なる数のアクティブなコアを有して構成される図5の画像処理プロセッサを示す図である。
図7】プロセッサ構成方法を示した図である。
図8a】画像データをライングループに解析すること、ライングループをシートに解析すること、および重なり合うステンシルを有するシートに対して行う動作を示した図である。
図8b】画像データをライングループに解析すること、ライングループをシートに解析すること、および重なり合うステンシルを有するシートに対して行う動作を示した図である。
図8c】画像データをライングループに解析すること、ライングループをシートに解析すること、および重なり合うステンシルを有するシートに対して行う動作を示した図である。
図8d】画像データをライングループに解析すること、ライングループをシートに解析すること、および重なり合うステンシルを有するシートに対して行う動作を示した図である。
図8e】画像データをライングループに解析すること、ライングループをシートに解析すること、および重なり合うステンシルを有するシートに対して行う動作を示した図である。
図9a】ステンシルプロセッサの実施形態を示す図である。
図9b】ステンシルプロセッサの命令語の実施形態を示した図である。
図10】ステンシルプロセッサ内のデータ演算部の実施形態を示す図である。
図11a】重なり合うステンシルを有する隣接する出力画素値のペアを判定するための2次元シフトアレイおよび実行レーンアレイの使用例を示した図である。
図11b】重なり合うステンシルを有する隣接する出力画素値のペアを判定するための2次元シフトアレイおよび実行レーンアレイの使用例を示した図である。
図11c】重なり合うステンシルを有する隣接する出力画素値のペアを判定するための2次元シフトアレイおよび実行レーンアレイの使用例を示した図である。
図11d】重なり合うステンシルを有する隣接する出力画素値のペアを判定するための2次元シフトアレイおよび実行レーンアレイの使用例を示した図である。
図11e】重なり合うステンシルを有する隣接する出力画素値のペアを判定するための2次元シフトアレイおよび実行レーンアレイの使用例を示した図である。
図11f】重なり合うステンシルを有する隣接する出力画素値のペアを判定するための2次元シフトアレイおよび実行レーンアレイの使用例を示した図である。
図11g】重なり合うステンシルを有する隣接する出力画素値のペアを判定するための2次元シフトアレイおよび実行レーンアレイの使用例を示した図である。
図11h】重なり合うステンシルを有する隣接する出力画素値のペアを判定するための2次元シフトアレイおよび実行レーンアレイの使用例を示した図である。
図11i】重なり合うステンシルを有する隣接する出力画素値のペアを判定するための2次元シフトアレイおよび実行レーンアレイの使用例を示した図である。
図11j】重なり合うステンシルを有する隣接する出力画素値のペアを判定するための2次元シフトアレイおよび実行レーンアレイの使用例を示した図である。
図11k】重なり合うステンシルを有する隣接する出力画素値のペアを判定するための2次元シフトアレイおよび実行レーンアレイの使用例を示した図である。
図12】統合型実行レーンアレイおよび2次元シフトアレイの単位セルの実施形態を示す図である。
図13】例示的なコンピューティングシステムを示す図である。
【発明を実施するための形態】
【0009】
詳細な説明
1.0 ユニークな画像処理プロセッサのアーキテクチャ
当技術分野において周知であるように、プログラムコードを実行するための基本的な回路構成は、実行ステージと、レジスタ空間とを含む。実行ステージは、命令を実行するための実行部を含んでいる。実行される命令のための入力オペランドがレジスタ空間から実行ステージに提供される。実行ステージが命令を実行することによって生成される結果は、レジスタ空間に書き戻される。
【0010】
従来のプロセッサ上でのソフトウェアスレッドの実行には、実行ステージによる、一連の命令の順次実行が伴う。最も一般的には、1つの入力オペランドセットから1つの結果が生成されると言う意味では、演算は、「スカラー」である。しかしながら、「ベクトル」プロセッサの場合、実行ステージによる命令の実行によって、入力オペランドのベクトルから結果のベクトルが生成されることになる。
【0011】
図1は、2次元シフトレジスタアレイ102に連結された実行レーン(execition lane)101のアレイを含むユニークな画像処理プロセッサのアーキテクチャ100のハイレベルビューを示す図である。ここで、実行レーンアレイに含まれる各実行レーンは、プロセッサ100がサポートする命令セットを実行するために必要な実行部を含んだ離散実行ステージとして見ることができる。様々な実施形態では、プロセッサが2次元SIMD(Single Instruction Multiple Data)プロセッサとして動作するよう、各実行レーンは、同じマシンサイクルで実行する同じ命令を受け付ける。
【0012】
各実行レーンは、2次元シフトレジスタアレイ102内の対応する位置に専用のレジスタ空間を有する。たとえば、隅にある実行レーン103は、隅にあるシフトレジスタ位置104に専用のレジスタ空間を有し、隅にある実行レーン105は、隅にあるシフトレジスタ位置106に専用のレジスタ空間を有する。
【0013】
これに加えて、前のマシンサイクル時に別の実行レーンのレジスタ空間にあった値を各実行レーンが自分のレジスタ空間から直接操作できるよう、シフトレジスタアレイ102はコンテンツをシフトさせることができる。たとえば、a+1水平シフトによって、各実行レーンのレジスタ空間に、その左端の隣接するレジスタ空間から値を受け付けさせる。水平軸に沿って左右両方向に値をシフトさせ、垂直軸に沿って上下両方向に値をシフトさせることができる機能のおかげで、プロセッサは、画像データのステンシルを効率よく処理することができる。
【0014】
ここで、当技術分野において周知であるように、ステンシルとは、基本的データ単位として利用される画像表面領域のスライスである。たとえば、出力画像の特定の画素位置の新しい値が、この特定の画素位置が中心にある入力画像の領域の画素値の平均として算出されてもよい。たとえば、ステンシルが縦に3画素、横に3画素の大きさを有している場合、特定の画素位置は、3×3画素アレイの中央の画素に対応してもよく、3×3画素アレイ内の9つすべての画素の平均が算出されてもよい。
【0015】
図1のプロセッサ100の様々な動作の実施形態によると、実行レーンアレイ101の各実行レーンは、出力画像の特定の位置の画素値を算出する役割を果たす。よって、上記3×3ステンシルを平均する例で引き続き説明すると、入力画素データ、およびシフトレジスタ内の8つのシフト演算からなる調整されたシフトシーケンスを初期ロードした後、実行レーンアレイに含まれる各実行レーンは、対応する画素位置についての平均を算出するのに必要な9つすべての画素値をローカルレジスタ空間に受け付けさせる。つまり、プロセッサは、たとえば、隣接する出力画像の画素位置の中心に存在する複数の重なり合うステンシルを同時に処理することができる。図1のプロセッサのアーキテクチャは、特に画像ステンシルの処理に長けているので、ステンシルプロセッサとも称され得る。
【0016】
図2は、複数のステンシルプロセッサ202_1〜202_Nを有する画像処理プロセッサのアーキテクチャ200の実施形態を示した図である。図2に見られるように、アーキテクチャ200は、ネットワーク204(たとえば、オンチップスイッチネットワーク、オンチップリングネットワークまたはその他の種類のネットワークを含むNOC(Network On Chip))を通して複数のステンシルプロセッサユニット202_1〜202_Nおよび対応するシート生成部203_1〜203_Nと互いに接続された複数のラインバッファ部201_1〜201_Mを含む。実施形態では、いずれのラインバッファ部201_1〜201_Mも、ネットワーク204を通していずれのシート生成部203_1〜203_Nおよび対応するステンシルプロセッサ202_1〜202_Nに接続してもよい。
【0017】
プログラムコードがコンパイルされ、対応するステンシルプロセッサ202上にロードされて、ソフトウェア開発者が以前に定義した画像処理演算が実行される(また、プログラムコードは、たとえば、設計および実装に応じて、ステンシルプロセッサの関連するシート生成部203にロードされてもよい)。このように、各ステンシルプロセッサ202_1〜202_Nは、処理コア、プロセッサコア、コアなどと、より一般的にみなされてもよく、画像処理プロセッサ全体は、マルチコア画像処理プロセッサとみなされてもよい。少なくともいくつかの例では、第1のパイプラインステージ用の第1カーネルプログラムを第1のステンシルプロセッサ202_1にロードし、第2のパイプラインステージ用の第2のカーネルプログラムを第2のステンシルプロセッサ202_2にロードするなどして画像処理パイプラインが実現されてもよく、たとえば、第1カーネルがパイプラインの第1のステージの関数を実行し、第2カーネルがパイプラインの第2のステージの関数を実行し、パイプラインのあるステージからパイプラインの次のステージに出力画像データを渡すためのさらなる制御フロー方法がインストールされる。
【0018】
その他の構成では、画像処理プロセッサは、同じカーネルプログラムコードを動作させる2つ以上のステンシルプロセッサ202_1、202_2を有する並列マシンとして実現されてもよい。たとえば、高密度かつ高データ転送速度の画像データストリームを、各々が同じ関数を実行する複数のステンシルプロセッサ間にフレームを分散させることによって処理してもよい。
【0019】
さらに他の構成では、カーネルの本質的にいずれの有向非巡回グラフ(DAG:Directed Acyclic Graph)も、それぞれのステンシルプロセッサを自身のプログラムコードのカーネルで構成し、DAG設計において、あるカーネルからの出力画像を次のカーネルの入力に向けるよう適切な制御フローフックをハードウェアに構成することによって、画像処理プロセッサ上にロードされてもよい。
【0020】
一般的なフローとして、画像データのフレームは、マクロ入出力部205によって受け付けられ、フレーム単位でラインバッファ部201のうちの1つ以上に渡される。特定のラインバッファ部は、画像データのそのフレームを、「ライングループ」と呼ばれる、画像データよりも小さな領域に解析し、その後、当該ライングループを、ネットワーク204を通して特定のシート生成部に渡す。完全または「でき上がった」1つのライングループは、たとえば、複数の連続した完全な行または列からなるフレームのデータで構成されてもよい(わかりやすくするために、本明細書では、主に、連続した行を例に用いる)。シート生成部は、さらに、画像データのライングループを、「シート」と呼ばれる、画像データのさらに小さな領域に解析し、このシートを対応するステンシルプロセッサに提示する。
【0021】
1つの入力を有する画像処理パイプラインまたはDAGフローの場合、一般に、入力フレームは、同じラインバッファ部201_1に向けられ、ラインバッファ部201_1は、画像データをライングループに解析し、これらのライングループをシート生成部203_1に向ける。シート生成部203_1の対応するステンシルプロセッサ202_1は、パイプライン/DAGにおいて第1カーネルのコードを実行している。ステンシルプロセッサ202_1が処理するライングループに対する処理が完了すると、シート生成部203_1は、出力ライングループを「下流」ラインバッファ部201_2に送る(ユースケースによっては、出力ライングループは、入力ライングループを以前に送った同じラインバッファ部201_1に送り返してもよい)。
【0022】
次に、自身の各々のその他のシート生成部およびステンシルプロセッサ(たとえば、シート生成部203_2およびステンシルプロセッサ202_2)上で実行されるパイプライン/DAGにおける次のステージ/演算を表す1つ以上の「コンシューマ」カーネルが、第1のステンシルプロセッサ202_1によって生成された画像データを下流ラインバッファ部201_2から受け取る。このように、第1のステンシルプロセッサ上で動作する「プロデューサ」カーネルが、第2のステンシルプロセッサ上で動作する「コンシューマ」カーネルに出力データを転送する。第2のステンシルプロセッサでは、コンシューマカーネルが、パイプラインまたはDAG全体の設計と整合性のあるプロデューサカーネルの後に次のタスクセットを実行する。
【0023】
図1で上述したように、各ステンシルプロセッサ202_1〜202_Nは、画像データの複数の重なり合うステンシルを同時に処理するように設計されている。複数の重なり合うステンシルおよびステンシルプロセッサの内蔵ハードウェア処理能力によって、シートのサイズが効果的に決定される。ここでも、上述したように、任意のステンシルプロセッサ202_1〜202_N内で、実行レーンのアレイが一斉に動作し、複数の重なり合うステンシルで覆われた画像データ表面領域を同時に処理する。
【0024】
これに加えて、様々な実施形態では、ステンシルプロセッサ202の対応する(たとえば、ローカルの)シート生成部203によって、当該ステンシルプロセッサの2次元シフトレジスタアレイに画像データのシートがロードされる。シートおよび2次元シフトレジスタアレイ構造の使用によって、たとえば、実行レーンアレイによってその直後に大量のデータに対して直接実行される処理タスクを用いた1つのロード動作として当該データを大量のレジスタ空間に移動することによって、消費電力の改善が効果的に可能になると考えられている。これに加えて、実行レーンアレイおよび対応するレジスタアレイの使用によって、簡単にプログラム可能/構成可能なそれぞれ異なるステンシルサイズが可能になる。ラインバッファ部、シート生成部、およびステンシルプロセッサの動作について、より詳細を下記のセクション3.0でさらに説明する。
【0025】
図3は、図2の画像処理プロセッサの特定のハードウェア実装の実施形態をより詳細に示した図である。図3に見られるように、図2のネットワーク204は、ラインバッファ部301とシート生成部/ステンシルプロセッサコア302との各交点に4×4ネットワークノード314を有するリングトポロジー304で実現される。わかりやすくするために、図3は、ラインバッファ部301_4とシート生成部/ステンシルプロセッサコア302_4との間に存在するネットワークノード314のみをラベル付けしている。
【0026】
ここで、シート生成部/ステンシルプロセッサコア302_1〜302_8の各々がステンシルプロセッサおよび対応するシート生成部の両方を含んでいることが分かる。わかりやすくするために、以下、シート生成部/ステンシルプロセッサコア302_1〜302_8の各々を、単に、ステンシルプロセッサコアまたはコアと称す。8つのラインバッファ部301_1〜301_8および8つのコア302_1〜402_8を図3の特定の実施形態に図示しているが、異なる数のラインバッファ部および/またはコアを有する異なるアーキテクチャが可能であると理解すべきである。リングトポロジー以外のネットワークトポロジーも可能である。
【0027】
図3の画像処理プロセッサに関して、リングネットワーク304によって、(1)入出力部305が入力データを任意のラインバッファ部301_1〜301_8(または、任意のコア302_1〜302_8)に渡すことができ、(2)任意のラインバッファ部301_1〜301_8が任意のコア302_1〜302_8にライングループを転送することができ、(3)任意のコア302_1〜302_8がその出力データを任意のラインバッファ部301_1〜301_8に渡すことができ、(4)任意のラインバッファ部301_1〜301_8が、画像処理プロセッサの出力データを入出力部305に渡すことができる。このように、異なるソフトウェアカーネルをロードする豊富なオプションおよび内部ネットワーク構成が可能である。つまり、理論上は、プロセッサの様々なコア302上で実行される複数のカーネルから構成されるソフトウェアアプリケーションのいずれについても、任意のコアに任意のカーネルをロードすることができ、ラインバッファ部のいずれも、任意のコアに入出力データをソース入力し、任意のコアから入出力データをシンク出力するように構成できる。
【0028】
図4は、図3の画像処理プロセッサ上にロードされ得る、例示的なアプリケーションソフトウェアプログラムまたはその一部を示した図である。図4に見られるように、プログラムコードを実行して入力画像データ401の1つ以上のフレームを処理し、何らかの全変換をこの入力画像データ401に対して実行してもよい。変換は、入力画像データ上でアプリケーションソフトウェア開発者が明示するうまく組み立てられたシーケンスで動作するプログラムコード402の1つ以上のカーネルの動作で実現される。
【0029】
図4の例では、全変換は、まず、第1カーネルK1を用いて各入力画像を処理することによって生じる。次に、カーネルK1によって生成された出力画像は、カーネルK2によって処理される。次に、カーネルK2によって生成された出力画像の各々は、カーネルK3_1またはK3_2によって処理され、次に、カーネル(複数可)K3_1/K3_2によって生成された出力画像は、カーネルK4によって処理される。図3の特定の例では、カーネルK3_1およびK3_2は、たとえば、異なる画像処理演算を行う異なるカーネルであってもよい(たとえば、カーネルK3_1は、第1の特定の種類の入力画像を処理し、カーネルK3_2は、第2の異なる種類の入力画像を処理する)。
【0030】
わかりやすくするために、4つのカーネルK1〜K4のみを図示している。図3の画像処理プロセッサハードウェアアーキテクチャ実装を参照すると、各カーネルが異なるステンシルプロセッサ上で動作するという基本的な構成において、考えられるところでは、プロセッサのコア302のすべてが対応するカーネル(図4の4つのカーネルのフローは、図3のプロセッサのコアのうちの半数しか利用していない)を有する前に、カーネルK4からさらに4つのカーネルが生じてもよいことが分かる。
【0031】
2.0 設定可能な数のコアを有する画像処理プロセッサ、およびサポートする内部ネットワーク
図5は、リングネットワークの実装形態およびネットワークリング上の各ノードに割り当てられる特定のアドレスをより詳細に示した、図3の画像処理プロセッサ500の実施形態を示す図である。図5に見られるように、リングネットワークは、マルチプレクサのペア506_1、506_2、および506_3を含み、異なる数のプロセッサのコア502_1〜502_8を使用可能にしている。ここで、画像処理プロセッサ500は、たとえば、異なるネットワーク構成(たとえば、後述する構成のうちのいずれか/すべて)のうちの特定の1つのネットワーク構成を実施または実現するようにマルチプレクサのチャネル選択値を判断する構成レジスタ空間(図5において図示せず)を含んでもよい。図5に見られるように、マルチプレクサのペアのAチャネルが選択された場合、リングは、引き続き前進して次のプロセッサコアのペアにつながる。対照的に、マルチプレクサのペアのBチャネルが選択された場合、リングは、次のプロセッサコアのペアを遮断するよう、「短絡する」。
【0032】
図6a〜図6dは、図5の画像処理プロセッサを用いて実現可能な異なるリングネットワークおよび異なる数のアクティブなプロセッサコア構成を示す図である。
【0033】
図6aは、マルチプレクサのペア506_1のBチャネルが選択された構成に対応し、この選択によって、ノード1(処理コア502_1のリング上の位置に対応する)とノード2(処理コア502_2のリング上の位置に対応する)との間で直接の論理接続が効果的に形成される。図5および図6aに見られるように、マルチプレクサのペア506_1のBチャネルを選択することによって、処理コア502_3、502_5、502_7、502_8、502_6、および502_4がリングネットワークから効果的に遮断される。このように、リングネットワークは、入出力部505と、処理コア502_1および502_2とだけを連結する。この特定の構成は、たとえば、画像処理プロセッサ500上で実行するアプリケーションソフトウェアプログラムが1つまたは2つのカーネルしか含まない場合に選択されてもよい。この場合、2つ以下の処理コアが有効化される(コア502_1およびコア502_2)。その他のコア502_3、502_5、502_7、502_8、502_6、および502_4を、たとえば、非アクティブな低電力状態にして、画像処理プロセッサの全体の消費電力を下げてもよい。
【0034】
図6bは、マルチプレクサのペア506_1のAチャネルが選択され、かつ、マルチプレクサのペア506_2のBチャネルが選択された構成に対応する。この特定のマルチプレクサ構成によって、コア502_1と502_2とを連結するだけでなく、コア502_3と502_4とも連結するよう、リングが図6aの構成よりも広がる。ここで、ノード3(処理コア502_3のリング上の位置に対応する)とノード4(処理コア502_4のリング上の位置に対応する)との間に直接の論理接続が形成される。図5および図6bに見られるように、マルチプレクサのペア506_1のAチャネルおよびマルチプレクサのペア506_2のBチャネルの選択によって、処理コア502_5、502_7、502_8、および502_6がリングネットワークから効果的に遮断される。このように、リングネットワークは、入出力部505と、処理コア502_1、502_2、502_3、および502_4とだけを連結する。
【0035】
この特定の構成は、たとえば、画像処理プロセッサ500上で実行するアプリケーションソフトウェアプログラムが3つまたは4つのカーネルしか含まない場合に選択されてもよい。この場合、4つ以下の処理コアが有効化される(コア502_1、502_2、502_3、および502_4)。その他のコア502_5、502_7、502_8、および502_6を、たとえば、非アクティブな低電力状態にして、画像処理プロセッサの全体の消費電力を下げてもよい。
【0036】
図6cは、マルチプレクサのペア506_1および506_2のAチャネルが選択され、かつ、マルチプレクサのペア506_3のBチャネルが選択された構成に対応する。この特定のマルチプレクサ構成によって、コア502_1と、502_2と、502_3と、502_4とを連結するだけでなく、コア502_5と502_6とを連結するよう、リングが図6bの構成よりも広がる。ここで、ノード5(処理コア502_5のリング上の位置に対応する)とノード6(処理コア502_6のリング上の位置に対応する)との間に直接の論理接続が形成される。図5および図6cに見られるように、マルチプレクサのペア506_1および506_2のAチャネルならびにマルチプレクサのペア506_3のBチャネルの選択によって、処理コア502_7および502_8がリングネットワークから効果的に遮断される。このように、リングネットワークは、入出力部505と、処理コア502_1、502_2、502_3、502_4、502_5、および502_6とを連結する。
【0037】
この特定の構成は、たとえば、画像処理プロセッサ500上で実行するアプリケーションソフトウェアプログラムが5つまたは6つのカーネルのみを含む場合に選択されてもよい。この場合、6つ以下の処理コアが有効化される(コア502_1、502_2、502_3、502_4、502_5、および502_6)。その他のコア502_7および502_8を、たとえば、非アクティブな低電力状態にして、画像処理プロセッサの全体の消費電力を下げてもよい。
【0038】
図6dは、マルチプレクサのペア506_1、506_2、および506_3のAチャネルが選択された構成に対応する。この特定のマルチプレクサ構成によって、入出力部505とコア502_1、502_2、502_3、502_4、502_5、502_6、502_7、および502_8のすべてとを連結するよう、リングが図6bの構成よりも広がる。ここで、ノード7(処理コア502_7のリング上の位置に対応する)とノード8(処理コア502_8のリング上の位置に対応する)との間の結線接続によって、リングの右端が形成される。この特定の構成は、たとえば、画像処理プロセッサ500上で実行するアプリケーションソフトウェアプログラムが7つまたは8つのカーネルを含む場合に選択されてもよい。
【0039】
図5のプロセッサのネットワークリング設計の別の関連する特徴として、異なるネットワークノードに対するアドレス値の割り当ての一意の取り決めがある。ここで、図3を再び少し参照すると、図3のプロセッサ300は、例によってリングを囲むようにノードに一続きの番号を付けていることが分かる。しかしながら、図5のリングネットワーク上のネットワークアドレスの割り当ては、図3の従来手法とは異なり、いずれのアクティブなネットワーク構成上の数値アドレスも、リング上で有効になるように設定されるコアの数に関係なく、途切れず連続したままである。
【0040】
つまり、図6aの構成が選択された場合、リング上のアクティブな数値アドレスは、アドレス0、1、および2を含む。対照的に、図6bの構成が選択された場合、リング上のアクティブな数値アドレスは、アドレス0、1、2、3、および4を含む。さらに、図6cの構成が選択された場合、リング上のアクティブな数値アドレスは、アドレス0、1、2、3、4、5、および6を含む。最後に、図6dの構成が選択された場合、リング上のアクティブな数値アドレスは、アドレス0、1、2、3、4、5、6、7、および8を含む。
【0041】
このようにネットワークアドレスを取り決めることは、アプリケーションソフトウェアソースコードを複数の異なる最下位のオブジェクトコード(バイナリコードとも称する)のインスタンスに再コンパイルすることを、たとえ設定された異なる数のアクティブなプロセッサコアおよび対応して異なる基礎となるリングネットワーク構成を有する異なるソフトウェアアプリケーション間でこのような最下位のコードが再利用されている場合でも、回避するのに役立ち得る。ここで、様々な環境において、たとえば、実際のハードウェアプロセッサ内の任意のコアに理論上マッピングできる論理アドレスを用いて、通信の宛先であるカーネルをアプリケーションソフトウェアプログラムのソースコードレベルで識別する。しかしながら、ソースコードが下位のオブジェクトまたはバイナリコードにコンパイルされた場合、論理アドレスは、プロセッサ上の特定のハードウェアコアのIDに変換される(すなわち、リングネットワーク上の特定のアドレスのうちの1つ)。
【0042】
たとえば、入出力部が入力データをカーネルK1に送り、カーネルK1がその出力データをカーネルK2に送る、2つのカーネルK1およびK2を使用するアプリケーションソフトウェアプログラムを考える。ソースコードを下位のオブジェクトコードにコンパイルした後、カーネルK1がとりわけコア502_1上で実行するように割り当てられ、カーネルK2がとりわけコア502_2上で実行するように割り当てられると想定する。このように、いずれのオブジェクトコードの通信も、カーネルK1に送られる通信用の1というネットワークアドレスを含み、カーネルK2に送られる通信用の2というネットワークアドレス含むことになる。
【0043】
リング周りのネットワークノードアドレス割り当てのユニークな取り決めによって、最下位のプログラムコードのこの特定のインスタンスは、図6aの2つのコアプロセッサ構成上で動作可能なだけでなく、図6b、図6c、および図6dのその他のプロセッサコア構成の各々でも動作可能である。このように、カーネルK1およびK2を含むアプリケーションソフトウェアプログラムのソースコードがそれぞれ異なるオブジェクトコードインスタンスに再コンパイルされる必要がないので、アプリケーションソフトウェアプログラムは、画像処理プロセッサ構成6a、6b、6d、6eのうちの異なる構成上で実行することを目的とされる。再コンパイルする必要がなくなるので、アプリケーションソフトウェア開発および/または構築の効率向上が可能になる。
【0044】
つまり、オブジェクトコードレベルでのプログラムコードの再利用をさらに容易に実現し、および/または、オブジェクトコードのインスタンスをより大きなオブジェクトコードアプリケーションにプラグ可能なコンポーネントとして使用してアプリケーションソフトウェアの構築をオブジェクトコードレベルで達成することができる。前述のカーネルK1およびK2を有するアプリケーションソフトウェアプログラムが処理OP1を実行する例を考える。OP1は、スタンドアロンプログラムとしてだけでなく、たとえば、自身の一意の処理タスクを有するその他のいくつかの処理の前に実行されるフロントエンドの処理として有意に使用される。わかりやすくするために、次のその他3つの処理が存在すると想定する。(1)2つのカーネルを用いて実施されるOP2(たとえば、K3およびK4)、(2)3つのカーネル(たとえば、K3、K4、およびK5)を用いて実施されるOP3、および(3)5つのカーネル(たとえば、K3、K4、K5、K6、およびK7)を用いて実施されるOP4。
【0045】
ここで、フロントエンドの処理OP1がオブジェクトコードインスタンスにコンパイルされ、カーネルK2がその出力データを(たとえば、ネットワークノード0の入出力部505ではなく)ネットワークノード3のコア502_3に送るアプリケーションソフトウェア開発環境を考える。これに加えて、後続の処理OP2、OP3、およびOP4が、以下のようにオブジェクトコードインスタンスにコンパイルされると想定する。(1)OP2、OP3、およびOP4の第1(入力、K3)カーネルおよび第2(K4)カーネルがコア502_3および502_4上でそれぞれ動作し、(2)OP3およびOP4の第3(K5)カーネルがコア502_5上で動作し、(3)OP4の第4(K6)カーネルおよび第5(K7)カーネルがコア502_6および502_7上でそれぞれ動作する。
【0046】
この場合、コンパイルされたフロントエンドのOP1インスタンスは、コンパイルされたOP2、OP3、およびOP3のオブジェクトコードインスタンスのそれぞれのうちのいずれかとそのままオブジェクトコードレベルで組み合わされ得、次の3つの別個のすぐに実行可能なアプリケーションソフトウェアプログラムが作成される。(1)OP1+OP2に対応する第1のアプリケーションソフトウェアプログラム、(2)OP1+OP3に対応する第2のアプリケーションソフトウェアプログラム、および(3)OP1+OP4に対応する第3のアプリケーションソフトウェアプログラム。
【0047】
ここで、OP1のオブジェクトコードインスタンスをOP2、OP3、およびOP4オブジェクトコードインスタンスの各々と別個に組み合わせて3つの異なるオブジェクトコードレベルのアプリケーションを作成することができるだけでなく、4つのコアを用いる第1のアプリケーションソフトウェアプログラム(OP1+OP2)を図6bのプロセッサ構成で動作するように構成でき、5つのコアを用いる第2のアプリケーションソフトウェアプログラム(OP1+OP3)を図6cのプロセッサ構成で動作するように構成でき、7つのコアを用いる第3のアプリケーションソフトウェアプログラム(OP1+OP4)を図6dのプロセッサ構成で動作するように構成できることが分かる。
【0048】
よって、OP1のオブジェクトコードインスタンスを他のオブジェクトコードインスタンスと組み合わせてより大きな作業オブジェクトコードレベルのアプリケーションを作成できるだけでなく、異なるアプリケーションをもたらす組合せが、異なる数のアクティブなハードウェアコアおよび対応して異なる内部リングネットワーク構成を有する異なるプロセッサ構成を必要とすることになったとしても、OP1のオブジェクトコードインスタンスをこのように組み合わせることができる。つまり、異なるプロセッサ構成間でプロセッサ内の内部ネットワークが異なっていても、対象ハードウェアプロセッサに含まれるアクティブなコアの構成/数とは無関係なオブジェクトコードレベルでプログラムコード構築を達成することができる。
【0049】
さらには、抽象的なカーネル識別子をオブジェクトコードレベルで使用することで、任意のオブジェクトコードプログラムをより大きなオブジェクトコードレベル構築に容易にプラグインでき、かつ、異なるプロセッサコア上で実行するように構成することができる。たとえば、以下のように想定する。コンパイルされた上述のOP3のオブジェクトコードインスタンスが(1)その第1カーネル(上述したK3)を入力変数=BASEを用いて識別し、(2)その第2カーネル(上述したK4)を識別子=BASE+1を用いて識別し、(3)その第3カーネル(上述したK5)を識別子=BASE+2を用いて識別する。この場合、上述した第2(OP1+OP3)アプリケーションと合わせて利用するためのOP3のオブジェクトコードの構成は、BASE=3と設定することによって簡単明瞭になる。
【0050】
また、単に、BASE=1と設定することによって、OP3オブジェクトコードの同一インスタンスをスタンドアロン動作に容易に再利用することができる。その後、OP3の第1カーネルをコア502_1上で実行させ、その第2コアを正しいカーネルを用いてコア502_2上で動作させて、ネットワークリング上でカーネルを通信する。よって、入力変数/構成情報(BASE)の単純な変更によって、(上述した第2アプリケーション(OP1+OP3)用に)オブジェクトコードレベルのOP3の同一インスタンスを図6cのプロセッサ構成で容易に動作させる、または、図6aのプロセッサ構成でスタンドアロンアプリケーションとして動作させることができる。
【0051】
このように、オブジェクトレベルプログラム内のそれぞれ異なるカーネルをそれらのネットワークアドレスのオフセットで識別することで、オブジェクトレベルプログラムの同一インスタンスをそれぞれ異なるプロセッサ構成に容易にマッピングすることができる。なぜならば、プロセッサ構成が異なるとリング上のノード数も変化するが、プロセッサのネットワークリング上の一意のアドレス指定パターンがこれらのオフセットの意味を本質的に保存するからである。このように、多くの状況において、たとえば、各プログラムの関数を新しく使用する度に、または、異なる基礎となるプロセッサ構成ごとに同じソースコードレベルからオブジェクトコードの新しいインスタンスをコンパイルするのではなく、プログラムのオブジェクトコードインスタンスが作成されると、その同一コピーは、多くの異なるアプリケーションおよび対応する構成のために「プラグイン」として再利用することができる。
【0052】
また、オブジェクトコードインスタンスをより大きなオブジェクトコード構築にプラグインするための機能は、入力ストリームの送信元アドレスおよび/または出力ストリームの宛先アドレスがそれぞれの入力変数としてオブジェクトコードレベルで指定される場合、向上する。たとえば、ここでもOP3を例として用いると、上述した第2(OP1+OP3)アプリケーションにOP3を利用し、BASE=3である場合、OP3のための入力データの送信元を識別するさらなる入力変数INをIN=2と設定してもよい(コア502_2上で実行されるOP1のK2は、OP1+OP3アプリケーション用のその入力データをOP3に送る)。OP3がその出力情報を送信する先を識別する宛先を別の変数OUTを用いて指定してもよく、OUT=0と設定される(その出力データをOP1+OP3アプリケーションで使用する場合、OP3は、入出力部505に送る)。上述したように、これらの設定では、OP3のオブジェクトコードインスタンスは、図6cの構成に設定されたプロセッサを有するOP1+OP2アプリケーション内で動作することができる。
【0053】
OP3オブジェクトコードの同じインスタンスのコピーをスタンドアロン動作に再利用するためには、入力構成情報は、IN=OUT=0およびBASE=1)と設定するだけでよい。この構成では、OP3がその入力データを入出力部505から受け付け、その出力データを入出力部505に送ることになる。また、この構成では、OP3インスタンスは、図6aのプロセッサ構成で動作することができる。このように、OP3コードの同一インスタンスは、異なる内部ネットワークリング構成を含む基礎となるプロセッサ構成とは本質的に無関係である。
【0054】
よって、アプリケーションソフトウェア開発環境全体は、利用/再利用されることの多い基本の処理関数を実行するように書かれたより細い粒度のアプリケーションソフトウェアプログラムのソースコードレベルでの開発を含み得る。より細い粒度のソースコードアプリケーションは、それぞれのオブジェクトコードインスタンスにコンパイルされる。次に、オブジェクトコードインスタンスは、必要であればコピーされ、他のオブジェクトコードインスタンスのコピーと組み合わされてより大きく、かつ、より包括的かつ実行可能なオブジェクトコードレベルのアプリケーションを形成する。
【0055】
それぞれ異なるハードウェアプラットフォームが異なる数のコアを有して存在する場合、さらなる効率化を実現できる。ここで、図6a〜図6dに関連した上記説明は、8コアープラットフォームが2つ、4つ、6つ、または8つのアクティブなコアを有して構成され得る、8つのコアを有する1つのハードウェアプラットフォームを対象としていた。ここでも、たとえば、2つのカーネルのオブジェクトコードレベルプログラム(たとえば、OP1)は、OP1プログラムの新しいオブジェクトコードインスタンスを再コンパイルしなくても、これらの構成のうちのいずれの構成上でも動作し得ることを示した。
【0056】
この汎用性は、さらには、たとえば、次から構成されるプロダクトラインにも及び得る。(1)2つのアクティブなコアからなる1つの構成をサポートする、2つのコアのみから構成される第1のハードウェアプラットフォーム、(2)2つのアクティブなコアからなる第1構成と4つのアクティブなコアからなる第2構成とをサポートする、4つのコアから構成される第2のハードウェアプラットフォーム、(3)2つのコアをサポートする第1構成と、4つのコアをサポートする第2構成と、6つのコアをサポートする第3構成とをサポートする、6つのコアから構成される第3のハードウェアプラットフォーム、および(4)図6a〜図6dで上述した4つの異なる構成をサポートする、8つのコアから構成される第4のハードウェアプラットフォーム。
【0057】
2つのカーネルを用いるオブジェクトコードレベルプログラムOP1は、上記(4)のハードウェアプラットフォームの4つの構成の各々の上で動作可能であると詳細に上述した。しかしながら、上記(1)、(2)、および(3)のハードウェアプラットフォームがネットワークノードを本明細書に記載のように列挙するように設計されている場合、上記(4)のハードウェアプラットフォームの4つの構成すべての上で動作可能なオブジェクトコードレベルプログラムOP1は、次のいずれの構成上でも動作可能になる。(i)上記(3)のハードウェアプラットフォームの3つの異なる構成、(ii)上記(2)のハードウェアプラットフォームの2つの異なる構成、および(iii)上記(1)のハードウェアプラットフォーム。このように、コードの再利用機能は、同じハードウェアプラットフォームのそれぞれ異なる構成だけでなく、それぞれ異なるハードウェアプラットフォームのそれぞれ異なる構成にも及ぶ。上述したように、コードは、スタンドアロンであり得、他のオブジェクトコードレベルプログラムと組み合わされていることもあり得る。
【0058】
図7は、上述した方法を示す図である。図7に見られるように、この方法は、プロセッサ上で実行するためのオブジェクトコードの第1インスタンスを構成するステップを含み、プロセッサは、複数のコアと、内部ネットワークとを有し、内部ネットワークは、第1の数のコアを通信可能に連結することを可能にする第1構成で構成されている(701)。また、方法は、プロセッサの第2インスタンス上で実行するためのオブジェクトコードの第2インスタンスを構成するステップも含み、プロセッサの第2インスタンスの個々の内部ネットワークは、異なる数のコアを通信可能に連結することを可能にする第2構成で構成され、プロセッサおよびプロセッサの第2インスタンス上で同じ位置にあるコアは、第1構成および第2構成のそれぞれに対して同じネットワークアドレスを有する(702)。
【0059】
上述した発想は図5の特定のプロセッサに限定されないことを認識することが適切である。ここで、たとえば、異なる数の処理コア、さらには、異なる種類の内部ネットワークトポロジーを有する他のプロセッサが本明細書に記載の教示を利用してもよい。つまり、他のネットワークトポロジー(たとえば、交換接続ネットワーク)が異なる内部ネットワーク構成間で送信元ノード/宛先ノードの物理アドレスを保持するように設計されてもよく、および/または当該異なる内部ネットワーク構成間で物理アドレスを途切れず連続したままにしてもよい。
【0060】
3.0 画像処理プロセッサ実装の実施形態
図8a〜図8e〜図12は、上述した画像処理プロセッサおよび関連するステンシルプロセッサの様々な実施形態のより詳細な動作および設計を提供する図である。ライングループをステンシルプロセッサの関連するシート生成部にラインバッファ部が送るという図2の説明を思い返すと、図8a〜図8eは、ラインバッファ部201の解析アクティビティ、シート生成部203の細粒度の解析アクティビティ、およびシート生成部203に連結されるステンシルプロセッサ702のステンシル処理アクティビティの実施形態をハイレベルで示す図である。
【0061】
図8aは、画像データ801の入力フレームの実施形態を示した図である。また、図8aは、ステンシルプロセッサが処理するように設計された、3つの重なり合うステンシル802(各々の寸法は、3画素×3画素である)の輪郭も示している。各ステンシルが出力画像データを生成する出力画素を、黒い実線で強調表示している。わかりやすくするために、3つの重なり合うステンシル802は、垂直方向にのみ重なり合うよう示されている。ステンシルプロセッサは、実際には、垂直方向および水平方向の両方に重なり合うステンシルを有するように設計されてもよいことを認識することが適切である。
【0062】
ステンシルプロセッサ内でステンシル802が縦に重なり合っているために、図8aに見られるように、フレーム内に1つのステンシルプロセッサが処理できる幅広い帯状の画像データが存在する。より詳細は以下に説明するが、実施形態では、ステンシルプロセッサは、重なり合うステンシル内のデータを、画像データの端から端まで左から右へ処理する(次に、上から下の順に、次のラインセットに対して繰り返す)。よって、ステンシルプロセッサがこの動作で前進を続けると黒い実線の出力画素ブロックの数が水平右方向に増える。上述したように、ラインバッファ部201は、ステンシルプロセッサが今後の多くの周期数にわたって処理するのに十分な受信フレームからの入力画像データのライングループを、解析する役割を果たす。ライングループの例を、影付き領域803として示している。実施形態では、ラインバッファ部201は、シート生成部にライングループを送信/シート生成部からライングループを受信するためのそれぞれ異なる力学を理解できる。たとえば、「グループ全体」と称するあるモードによると、画像データの完全な全幅のラインがラインバッファ部とシート生成部との間で渡される。「実質上縦長」と称する第2モードによると、最初に1つのライングループが全幅の行のサブセットとともに渡される。その後、残りの行がより小さい(全幅未満の)一部として順番に渡される。
【0063】
入力画像データのライングループ803がラインバッファ部によって規定されてシート生成部に渡されると、シート生成部は、さらに、このライングループを、ステンシルプロセッサのハードウェア制約により正確に適合するより細かいシートに解析する。より具体的には、より詳細は以下にさらに説明するが、実施形態では、各ステンシルプロセッサは、2次元シフトレジスタアレイから構成される。2次元シフトレジスタアレイは、本質的に、画像データを実行レーンのアレイの「下」にシフトさせる。シフトパターンは、各実行レーンに、レーン自身の個々のステンシル内のデータを処理させる(つまり、各実行レーンは、自身の情報のステンシルを処理し、そのステンシルの出力を生成する)。実施形態では、シートは、2次元シフトレジスタアレイを「埋める」または2次元シフトレジスタアレイにロードされる入力画像データの表面領域である。
【0064】
より詳細はさらに後述するが、様々な実施形態では、実際には、任意の周期でシフトさせることができる2次元レジスタデータから構成されるレイヤは、複数ある。便宜上、本明細書のほとんどでは、単に、用語「2次元シフトレジスタ」などを用いて、シフトさせることができる2次元レジスタデータから構成される1つ以上のこのようなレイヤを有する構造を指す。
【0065】
よって、図8bに見られるように、シート生成部は、ライングループ803からの最初のシート804を解析し、ステンシルプロセッサに提供する(ここで、データのシートは、参照番号804で全体的に識別される陰影領域に対応する)。図8cおよび図8dに見られるように、ステンシルプロセッサは、重なり合うステンシル802を入力画像データのシートの左から右へ効果的に移動することによってシートを処理する。図8dの時点では、シート内のデータから出力値を算出できる画素数はなくなっている(他の画素位置はシート内の情報から決定される出力値を有し得るものはない)。わかりやすくするために、画像の境界領域は無視している。
【0066】
図8eに見られるように、次に、シート生成部は、ステンシルプロセッサに引き続き処理させるために次のシート805を提供する。なお、次のシートに対する処理を開始するときのステンシルの初期位置は、第1シートの画素数がなくなっている箇所から右隣に進んだ場所である(すでに図8dで示したように)ことが分かる。新しいシート805では、ステンシルプロセッサが第1シートの処理と同じ方法でこの新しいシートを処理するにつれて、ステンシルは、右に移動し続けるだけである。
【0067】
なお、出力画素位置を囲むステンシルの境界領域のために、第1シート804のデータと第2シート805のデータとの間に重なりがある。この重なりは、シート生成部が重なり合うデータを2回再送信するだけで処理できる。別の実装形態では、次のシートをステンシルプロセッサに送るために、シート生成部は、新しいデータをステンシルプロセッサに送るだけであってもよく、ステンシルプロセッサは、重なり合うデータを前のシートから再利用する。
【0068】
図9は、ステンシルプロセッサのアーキテクチャ900の実施形態を示す図である。図9に見られるように、ステンシルプロセッサは、データ演算部901と、スカラープロセッサ902および関連するメモリ903と、入出力部904とを備える。データ演算部901は、実行レーン905のアレイと、2次元シフトアレイ構造906と、アレイの特定の行または列に対応付けられた別個のRAM907とを含む。
【0069】
入出力部904は、シート生成部から受け付けたデータの「入力」シートをデータ演算部901にロードして、ステンシルプロセッサからのデータの「出力」シートをシート生成部に格納する役割を果たす。実施形態では、シートデータをデータ演算部901にロードすることは、受け付けたシートを画像データの行/列に解析し、画像データの行/列を2次元シフトレジスタ構造906または実行レーンアレイ(より詳細は後述する)の行/列のRAM907のそれぞれにロードすることを伴う。シートがメモリ907に最初にロードされた場合、実行レーンアレイ905内の個々の実行レーンは、適宜、シートデータをRAM907から2次元シフトレジスタ構造906にロードしてもよい(たとえば、シートのデータの処理をする直前のロード命令として)。データのシートのレジスタ構造906へのロードが完了すると(シート生成部から直接であろうと、メモリ907からであろうと)、実行レーンアレイ905に含まれる実行レーンが当該データを処理し、最終的には、仕上がったデータをシートとしてシート生成部またはRAM907に直接「書き戻す」。後者の場合、入出力部904がデータをRAM907からフェッチして出力シートを形成し、その後、出力シートはシート生成部に転送される。
【0070】
スカラープロセッサ902は、プログラムコントローラ909を含む。プログラムコントローラ909は、ステンシルプロセッサのプログラムコードの命令をスカラーメモリ903から読み出し、実行レーンアレイ905に含まれる実行レーンにこの命令を発行する。実施形態では、1つの同じ命令がアレイ905内のすべての実行レーンに一斉送信され、データ演算部901がSIMDのような動作を行う。実施形態では、スカラーメモリ903から読み出されて実行レーンアレイ905の実行レーンに発行される命令の命令フォーマットは、命令あたり2つ以上のオペコードを含むVLIW(Very−Long−Instruction−Word)型フォーマットを含む。さらなる実施形態では、VLIWフォーマットは、(後述するが、実施形態では、2つ以上の従来のALU演算を指定し得る)各実行レーンのALUによって実行される数学関数を指示するALUオペコード、および(特定の実行レーンまたは特定の実行レーンセットのメモリ操作を指示する)メモリオペコードの両方を含む。
【0071】
用語「実行レーン」とは、1つの命令を実行可能な1つ以上の実行部からなるセットを指す(たとえば、命令を実行できる論理回路)。しかしながら、実行レーンは、様々な実施形態では、ただの実行部ではなく、よりプロセッサのような機能を含み得る。たとえば、1つ以上の実行部以外に、実行レーンは、受け付けた命令をデコードする論理回路、または、よりMIMDのような設計の場合、命令をフェッチおよびデコードする論理回路を含んでもよい。MIMDのような手法に関しては、本明細書では集中プログラム制御手法について詳細を説明したが、様々な別の実施形態では、より分散した手法が実施されてもよい(アレイ905の各実行レーン内にプログラムコードとプログラムコントローラとを含むなど)。
【0072】
実行レーンアレイ905と、プログラムコントローラ909と、2次元シフトレジスタ構造906とを組み合わせることによって、広範囲のプログラム可能な機能のための広く受け容れられる/構成可能なハードウェアプラットフォームがもたらされる。たとえば、個々の実行レーンが広く多様な機能を実行でき、かつ、任意の出力アレイ位置に近接した入力画像データに容易にアクセスできるならば、アプリケーションソフトウェア開発者は、広範囲にわたる異なる機能能力および寸法(たとえば、ステンシルサイズ)を有するカーネルをプログラミングすることができる。
【0073】
実行レーンアレイ905によって処理されている画像データ用のデータストアとして機能すること以外に、RAM907は、1つ以上のルックアップテーブルを保持してもよい。様々な実施形態では、1つ以上のスカラールックアップテーブルもスカラーメモリ903内でインスタンス化されてもよい。
【0074】
スカラー検索では、同じインデックスからの同じルックアップテーブルからの同じデータ値を実行レーンアレイ905内の実行レーンの各々に渡すことを伴う。様々な実施形態では、スカラープロセッサによって行われるスカラールックアップテーブルの検索動作を指示するスカラーオペコードも含むよう、上述したVLIW命令フォーマットが拡大される。オペコードとともに使用するために指定されるインデックスは、即値オペランドであってもよく、または、他のデータ記憶位置からフェッチされてもよい。いずれにせよ、実施形態では、スカラーメモリ内のスカラールックアップテーブルの検索は、本質的に、同じクロック周期の間に実行レーンアレイ905内のすべての実行レーンに同じデータ値を一斉送信することを伴う。ルックアップテーブルの使用および操作のより詳細は、以下でさらに説明する。
【0075】
図9bは、上述したVLIW命令語の実施形態(複数可)を要約した図である。図9bに見られるように、VLIW命令語フォーマットは、次の3つの別個の命令に対するフィールドを含む。(1)スカラープロセッサによって実行されるスカラー命令951、(2)実行レーンアレイ内のそれぞれのALUによってSIMD式で一斉送信および実行されるALU命令952、(3)部分SIMD式で一斉送信および実行されるメモリ命令953(たとえば、実行レーンアレイの同じ行にある実行レーンが同じRAMを共有する場合、異なる行の各々からの1つの実行レーンが実際に命令を実行する(メモリ命令953のフォーマットは、各行のどの実行レーンが命令を実行するのかを識別するオペランドを含んでもよい)。
【0076】
1つ以上の即値オペランド用のフィールド954も含まれていてもよい。命令951、952、953のうちのいずれがどの即値オペランド情報を使用するかは、命令フォーマットで識別されてもよい。また、命令951、952、953の各々は、自身の入力オペランドおよび結果情報も含む(たとえば、ALU演算のためのローカルレジスタ、ならびにメモリアクセス命令のためのローカルレジスタおよびメモリアドレス)。実施形態では、スカラー命令951は、実行レーンアレイ内の実行レーンがその他2つの命令952、953を実行する前に、スカラープロセッサによって実行される。つまり、VLIW語の実行は、スカラー命令951が実行される第1周期を含み、その次にその他の命令952、953が実行され得る第2周期を含む(なお、様々な実施形態では、命令952および953は、並列で実行されてもよい)。
【0077】
実施形態では、スカラープロセッサによって実行されるスカラー命令は、データ演算部のメモリまたは2Dシフトレジスタからシートをロードする/データ演算部のメモリまたは2Dシフトレジスタにシートを格納するためにシート生成部に発行されるコマンドを含む。ここで、シート生成部の動作は、ラインバッファ部の動作、または、スカラープロセッサが発行したコマンドをシート生成部が完了させるのにかかる周期の数を実行時前に理解することを防ぐその他の変数によって異なり得る。このように、実施形態では、シート生成部に発行されるコマンドにスカラー命令951が対応するまたはスカラー命令951がコマンドをシート生成部に対して発行させるVLIW語は、いずれも、その他の2つの命令フィールド952、953にNOOP(no−operation)命令も含む。次に、シート生成部がデータ演算部へのロード/データ演算部からの格納を完了するまで、プログラムコードは、命令フィールド952、953のNOOP命令のループに入る。ここで、シート生成部にコマンドを発行すると、スカラープロセッサは、コマンドが完了するとシート生成部がリセットするインターロックレジスタのビットを設定してもよい。NOOPループの間、スカラープロセッサは、インターロックビットのビットを監視する。シート生成部がそのコマンドを完了したことをスカラープロセッサが検出すると、通常の実行が再び開始される。
【0078】
図10は、データ演算コンポーネント1001の実施形態を示す図である。図10に見られるように、データ演算コンポーネント1001は、2次元シフトレジスタアレイ構造1006の「上方」に論理的に位置する実行レーンのアレイ1005を含む。上述したように、様々な実施形態では、シート生成部が提供する画像データのシートが2次元シフトレジスタ1006にロードされる。次に、実行レーンがレジスタ構造1006からのシートデータを処理する。
【0079】
実行レーンアレイ1005およびシフトレジスタ構造1006は、互いに対して定位置に固定されている。しかしながら、シフトレジスタアレイ1006内のデータは、効果的かつ調整された方法でシフトし、実行レーンアレイに含まれる各実行レーンにデータ内の異なるステンシルを処理させる。このように、各実行レーンは、生成された出力シートに含まれる異なる画素の出力画像値を判断する。図10のアーキテクチャから、実行レーンアレイ1005が上下に隣接する実行レーンおよび左右に隣接する実行レーンを含むので、重なり合うステンシルは、縦方向だけでなく、横方向にも配置されていることは明らかである。
【0080】
データ演算部1001のいくつかの注目すべきアーキテクチャ上の特徴として、シフトレジスタ構造1006の寸法は、実行レーンアレイ1005よりも広い。つまり、実行レーンアレイ1005の外側にレジスタ1009の「ハロー(halo)」が存在する。ハロー1009は、実行レーンアレイの2つの側面に存在するように図示されているが、実装によっては、ハローは、実行レーンアレイ1005のより少ない(1つ)またはより多い(3つまたは4つの)側面に存在してもよい。ハロー1005は、実行レーン1005の「下」をデータがシフトすると実行レーンアレイ1005の境界の外側にこぼれ出るデータの「スピルオーバ」空間を提供する役割を果たす。簡単な例として、ステンシルの左端の画素が処理されると、実行レーンアレイ1005の右端の中心にある5×5ステンシルは、さらに右側に4つのハローレジスタ位置を必要とすることになる。図をわかりやすくするために、図10は、標準的な実施形態において、いずれの側面(右、下)のレジスタも横接続および縦接続の両方を有し得るとき、ハローの右側のレジスタを横方向にのみシフト接続していると示し、ハローの下側のレジスタを縦方向にのみシフト接続していると示している。様々な実施形態では、ハロー領域は、画像処理命令を実行するための対応する実行レーン論理を含まない(たとえば、ALUは存在しない)。しかしながら、個々のハローレジスタ位置がメモリから個々にデータをロードし、データをメモリに格納できるよう、個々のメモリアクセスユニット(M)がハロー領域位置の各々に存在する。
【0081】
アレイの各行および/または各列、またはそれらの一部に連結されたさらなるスピルオーバ空間がRAM1007によって提供される(たとえば、行方向に4つの実行レーン、列方向に2つの実行レーンにまたがる実行レーンアレイの「領域」に1つのRAMが割り当てられてもよい)。わかりやすくするために、残りの明細書では、主に、行ベースおよび/または列ベースの割り当て方式について言及する)。ここで、実行レーンのカーネル動作は、2次元シフトレジスタアレイ1006の外側の画素値を処理する必要がある場合、(いくつかの画像処理ルーチンが必要とし得る)、画像データの面は、たとえば、ハロー領域1009からRAM1007にさらにこぼれ出る(スピルオーバする)ことができる。たとえば、実行レーンアレイの右端の実行レーンの右側に4つのストレージ要素のみから構成されるハロー領域をハードウェアが含む、6×6ステンシルを考える。この場合、ステンシルを完全に処理するためには、データは、さらに右にシフトされてハロー1009の右端からはみ出る必要がある。ハロー領域1009の外にシフトされるデータは、その後、RAM1007にこぼれ出る。RAM1007および図9のステンシルプロセッサのその他の適用例をさらに以下に説明する。
【0082】
図11a〜図11kは、上述したように実行レーンアレイの「下」の2次元シフトレジスタアレイ内で画像データがシフトされる方法の例を説明する図である。図11aに見られるように、2次元シフトアレイのデータコンテンツが第1アレイ1107に図示され、実行レーンアレイがフレーム1105によって図示されている。また、実行レーンアレイ内の2つの隣接する実行レーン1110を簡略化して図示している。この単純化した図示1110では、各実行レーンは、シフトレジスタからデータを受け付ける、(たとえば、周期間の累算器として動作するための)ALU出力からデータを受け付ける、または、出力データを出力先に書き込むことができるレジスタR1を含む。
【0083】
また、各実行レーンは、その「下」に、ローカルレジスタR2において、利用可能なコンテンツを2次元シフトアレイに有する。よって、R1は、実行レーンの物理レジスタであるのに対して、R2は、2次元シフトレジスタアレイの物理レジスタである。実行レーンは、R1および/またはR2が提供するオペランドを処理できるALUを含む。より詳細はさらに後述するが、実施形態では、シフトレジスタは、実際には、アレイ位置当たり複数のストレージ/レジスタ要素(の「深度」)を有して実装されるがシフトアクティビティは、ストレージ要素の1つの面に限られる(たとえば、ストレージ要素の1つの面のみが周期ごとにシフトできる)。図11a〜11kは、これらの深度がより深いレジスタ位置のうちの1つを、それぞれの実行レーンからの結果Xを格納するのに用いられているものとして図示している。図をわかりやすくするために、深度がより深い結果レジスタは、対応するレジスタR2の下ではなく、横に並べて図示されている。
【0084】
図11a〜11kは、実行レーンアレイ内に図示された実行レーン位置1111のペアと中央位置が揃えられた2つのステンシルの算出に焦点を当てている。図をわかりやすくするために、実行レーン1110のペアは、実際には下記の例によると縦方向に隣接している場合に、横方向に隣接していると図示されている。
【0085】
最初に、図11aに見られるように、実行レーンは、その中央のステンシル位置の中心に位置決めされる。図11bは、両方の実行レーンによって実行されるオブジェクトコードを示す図である。図11bに見られるように、両方の実行レーンのプログラムコードによって、シフトレジスタアレイ内のデータは、位置を下に1つシフトし、位置を右に1つシフトさせられる。これによって、両方の実行レーンがそれぞれのステンシルの左上隅に揃えられる。次に、プログラムコードは、(R2において)それぞれの位置にあるデータをR1にロードさせる。
【0086】
図11cに見られるように、次に、プログラムコードは、実行レーンのペアに、シフトレジスタアレイ内のデータを1単位だけ左にシフトさせ、これによって、各実行レーンのそれぞれの位置の右にある値が、各実行レーンの位置にシフトされる。次に、(R2における)実行レーンの位置までシフトされた新しい値がR1の値(前の値)に加算される。その結果がR1に書き込まれる。図11dに見られるように、図11cで説明したのと同じ処理が繰り返され、これによって、結果R1は、ここで、上部実行レーンにおいて値A+B+Cを含み、下部実行レーンにおいてF+G+Hを含む。この時点で、両方の実行レーンは、それぞれのステンシルの上側の行を処理済みである。なお、データは、実行レーンアレイの左側のハロー領域(左側に存在する場合)にこぼれ出るが、ハロー領域が実行レーンアレイの左側に存在しない場合はRAMにこぼれ出る。
【0087】
図11eに見られるように、次に、プログラムコードは、シフトレジスタアレイ内のデータを1単位だけ上にシフトさせ、これによって、両方の実行レーンがそれぞれのステンシルの中央行の右端に揃えられる。両方の実行レーンのレジスタR1は、現在、ステンシルの最上行および中央行の右端の値の総和を含む。図11fおよび図11gは、両方の実行レーンのステンシルの中央行を左方向に移動する続きの進行を説明する図である。図11gの処理の終わりに両方の実行レーンがそれぞれのステンシル最上行および中央行の値の総和を含むよう、累積加算が続く。
【0088】
図11hは、各実行レーンを対応するステンシルの最下行に揃えるための別のシフトを示す図である。図11iおよび図11jは、両方の実行レーンのステンシルに対する処理を完了するための、続きのシフト処理を示す図である。図11kは、データ配列において各実行レーンをその正しい位置に揃えて結果をそこに書き込むためのさらなるシフト処理を示す図である。
【0089】
なお、図11a〜図11kの例では、シフト演算用のオブジェクトコードは、(X,Y)座標で表されるシフトの方向および大きさを識別する命令フォーマットを含んでもよい。たとえば、位置を1つ上にシフトさせるためのオブジェクトコードは、SHIFT0、+1というオブジェクトコードで表されてもよい。別の例として、位置を右に1つシフトすることは、SHIFT+1、0というオブジェクトコードで表現されてもよい。また、様々な実施形態では、より大きなシフトも、オブジェクトコード(たとえば、SHIFT0、+2)で指定されてもよい。ここで、2Dシフトレジスタハードウェアが周期あたり位置1つ分のシフトしかサポートしない場合、命令は、マシンによって、複数周期の実行を必要とすると解釈されてもよく、または、周期あたり位置2つ分以上のシフトをサポートするよう2Dシフトレジスタハードウェアが設計されてもよい。後者の実施形態をより詳細にさらに後述する。
【0090】
図12は、実行レーンおよび対応するシフトレジスタ構造(ハロー領域のレジスタは、対応する実行レーンを含まないが、様々な実施形態のメモリを含む)の単位セルをより詳細に示す別の図である。実行レーン、および実行レーンアレイの各位置に対応付けられたレジスタ空間は、実施形態では、図12に見られる回路を実行レーンアレイの各ノードにおいてインスタンス化することによって実現される。図12に見られるように、単位セルは、4つのレジスタR2〜R5から構成されるレジスタファイル1202に連結された実行レーン1201を含む。いずれの周期の間も、実行レーン1201は、レジスタR1〜R5のうちのいずれかから読み出されたり、書き込まれたりしてもよい。2つの入力オペランドを必要とする命令については、実行レーンは、両方のオペランドをR1〜R5のうちのいずれかから取り出してもよい。
【0091】
実施形態では、2次元シフトレジスタ構造は、1つの周期の間、レジスタR2〜R4のうちのいずれか1つ(のみ)のコンテンツを出力マルチプレクサ1203を通してその隣接するレジスタのレジスタファイルのうちの1つにシフト「アウト」させ、隣接するレジスタ間のシフトが同じ方向になるよう、レジスタR2〜R4のうちのいずれか1つ(のみ)のコンテンツを対応するレジスタファイルから入力マルチプレクサ1204を通してシフト「イン」されるコンテンツと置き換えることによって実現される(たとえば、すべての実行レーンが左にシフトする、すべての実行レーンが右にシフトする、など)。同じレジスタのコンテンツがシフトアウトされて、同じ周期上でシフトされるコンテンツと置き換えられることは一般的であり得るが、マルチプレクサ配列1203、1204は、同じ周期の間、同じレジスタファイル内で異なるシフト元および異なるシフト対象のレジスタを可能にする。
【0092】
図12に示すように、シフトシーケンスの間、実行レーンは、そのレジスタファイル1202からその左隣、右隣、上隣、および下隣の各々にコンテンツをシフトアウトすることになることが分かる。同じシフトシーケンスと連動して、実行レーンは、そのレジスタファイルに左隣、右隣、上隣、および下隣のうちの特定のレジスタファイルからコンテンツをシフトする。ここでも、シフトアウトする対象およびシフトインする元は、すべての実行レーンについて同じシフト方向に一致しなければならない(たとえば、右隣にシフトアウトする場合、シフトインは左隣からでなければならない)。
【0093】
一実施形態において、周期あたり実行レーン1つにつき1つのレジスタのコンテンツのみをシフトさせることが可能であるが、その他の実施形態は、2つ以上のレジスタのコンテンツをシフトイン/アウトさせることが可能であってもよい。たとえば、図12に見られるマルチプレクサ回路1203、1204の第2インスタンスが図12の設計に組み込まれている場合、同じ周期で2つのレジスタのコンテンツをシフトアウト/インしてもよい。当然、周期ごとに1つのレジスタのコンテンツのみをシフトさせることができる実施形態では、数値演算間のシフトのためにより多くのクロック周期を消費することによって複数のレジスタからのシフトが数値演算間で生じてもよい(たとえば、数値演算間の2つのシフト演算を消費することによって2つのレジスタのコンテンツが当該数値演算間でシフトされてもよい)。
【0094】
なお、シフトシーケンス時に実行レーンのレジスタファイルのすべてのコンテンツよりも少ない数のコンテンツがシフトアウトされた場合、各実行レーンのシフトアウトされなかったレジスタのコンテンツは、所定の位置に留まっている(シフトしない)ことが分かる。このように、シフトインされたコンテンツに置き換えられないシフトされなかったコンテンツは、いずれも、シフト周期にわたって、実行レーンにローカルに留まる。各実行レーンに見られるメモリユニット(「M」)を使用して、実行レーンアレイ内の実行レーンの行および/または列に対応付けられたランダムアクセスメモリ空間からデータをロード/またはそれに格納する。ここで、Mユニットは、標準Mユニットとして機能し、標準Mユニットは、実行レーン自体のレジスタ空間からロード/またはそれに格納できないデータをロード/格納するために利用される場合が多い。様々な実施形態では、Mユニットの主な動作は、ローカルレジスタからのデータをメモリに書き込み、メモリからデータを読み出してローカルレジスタに書き込むことである。
【0095】
ハードウェア実行レーン1201のALU装置がサポートするISAオペコードに関して、様々な実施形態では、ハードウェアALUがサポートする数値演算オペコードは、(たとえば、ADD、SUB、MOV、MUL、MAD、ABS、DIV、SHL、SHR、MIN/MAX、SEL、AND、OR、XOR、NOT)を含む。先ほど記載したように、実行レーン1201によって、関連するRAMからデータをフェッチ/当該RAMにデータを格納するためのメモリアクセス命令が実行され得る。これに加えて、ハードウェア実行レーン1201は、2次元シフトレジスタ構造内でデータをシフトさせるためのシフト演算命令(右、左、上、下)をサポートする。上述したように、プログラム制御命令は、主に、ステンシルプロセッサのスカラープロセッサによって実行される。
【0096】
4.0 実装の実施形態
上述した様々な画像処理プロセッサのアーキテクチャの特徴は、必ずしも従来の意味での画像処理に限られないため、画像処理プロセッサを新たに特徴付け得る(または、させ得ない)その他のアプリケーションに適用してもよいことを指摘することが適切である。たとえば、上述した様々な画像処理プロセッサのアーキテクチャの特徴のうちのいずれかが、実際のカメラ画像の処理とは対照的に、アニメーションの作成ならびに/または生成および/もしくは描画に使用される場合、画像処理プロセッサは、GPU(Graphics Processing Unit)として特徴付けられてもよい。これに加えて、上述した画像処理プロセッサアーキテクチャの特徴を、映像処理、ビジョンプロセッシング、画像認識および/または機械学習など、その他の技術用途に適用してもよい。このように適用すると、画像処理プロセッサは、(たとえば、コプロセッサとして)、(たとえば、コンピューティングシステムのCPU:Central Processing Unitまたはその一部である)より汎用的なプロセッサと統合されてもよく、または、コンピューティングシステム内のスタンドアロン型のプロセッサであってもよい。
【0097】
上述したハードウェア設計の実施形態は、半導体チップ内に実施されてもよく、および/または、最終的に半導体製造プロセスに向けての回路設計の記述として実施されてもよい。後者の場合、このような回路記述は、(たとえば、VHDLまたはVerilog)レジスタ転送レベル(RTL:Register Transfer Level)回路記述、ゲートレベル回路記述、トランジスタレベル回路記述もしくはマスク記述、またはそれらの様々な組合せなどの形態をとり得る。回路記述は、通常、コンピュータ読み取り可能な記憶媒体(CD−ROMまたはその他の種類のストレージ技術など)上に実施される。
【0098】
先のセクションから、後述する画像処理プロセッサをコンピュータシステム上のハードウェアで(たとえば、ハンドヘルド端末のカメラからのデータを処理するハンドヘルド端末のSOC(System On Chip)の一部として)実施してもよいことを認識することが適切である。なお、画像処理プロセッサがハードウェア回路として実施された場合、画像処理プロセッサによって処理される画像データをカメラから直接受け付けてもよいことが分かる。ここで、画像処理プロセッサは、単品カメラの一部、またはカメラを内蔵したコンピューティングシステムの一部であってもよい。後者の場合、カメラからまたはコンピューティングシステムのシステムメモリから画像データを直接受け付けてもよい(たとえば、カメラは、その画像データを、画像処理プロセッサではなくシステムメモリに送る)。また、先のセクションに記載の特徴の多くは、(アニメーションを描画する)GPUに適用可能である。
【0099】
図13は、コンピューティングシステムの例示的な図である。上述したコンピューティングシステムの構成要素のうちの多くは、内蔵カメラおよび関連する画像処理プロセッサ(たとえば、スマートフォンまたはタブレットコンピュータなどのハンドヘルド端末)を有するコンピューティングシステムに適用可能である。当業者は、これら2つの違いを容易に明確にするであろう。これに加えて、図13のコンピューティングシステムは、ワークステーションまたはスーパーコンピュータなどの高性能なコンピューティングシステムの多くの特徴も含んでいる。
【0100】
図13に見られるように、基本的なコンピューティングシステムは、CPU1301(たとえば、マルチコアプロセッサまたはアプリケーションプロセッサ上に配置された複数の汎用処理コア1315_1〜1315_Nおよびメインメモリコントローラ1317を含んでもよい)と、システムメモリ1302と、ディスプレイ1303(たとえば、タッチスクリーン、フラットパネル)と、ローカル有線ポイントツーポイントリンク(たとえば、USB)インタフェース1304と、様々なネットワーク入出力機能部1305(Ethernet(登録商標)インタフェースおよび/またはセルラーモデムサブシステムなど)と、無線ローカルエリアネットワーク(たとえば、WiFi)インタフェース1306と、無線ポイントツーポイントリンク(たとえば、Bluetooth(登録商標))インタフェース1307およびGPS(Global Positioning System)インタフェース1308と、様々なセンサ1309_1〜1309_Nと、1つ以上のカメラ1310と、バッテリー1311と、電力管理制御部1312と、スピーカ/マイクロフォン1313と、オーディオコーダ/デコーダ1314とを含んでもよい。
【0101】
アプリケーションプロセッサまたはマルチコアプロセッサ1350は、そのCPU1201内に1つ以上の汎用処理コア1315を含み、1つ以上のGPU1316、メモリ管理機能部1317(たとえば、メモリコントローラ)、入出力制御機能部1318、および画像処理部1319を含んでもよい。汎用処理コア1315は、通常、コンピューティングシステムのオペレーティングシステムおよびアプリケーションソフトウェアを実行する。GPU1316は、通常、グラフィックスを多く使う機能を実行して、たとえば、ディスプレイ1303上に提示されるグラフィックス情報を生成する。メモリ制御機能部1317は、システムメモリ1302とインタフェース接続され、システムメモリ1302にデータを書き込む/システムメモリ1302からデータを読み出す。電力管理制御部1312は、一般に、システム1300の消費電力を制御する。
【0102】
画像処理部1319は、先のセクションで詳細に上述した画像処理部の実施形態のいずれかに従って実現されてもよい。これに加えて、またはこれと組み合わせて、IPU1319がGPU1316およびCPU1301のいずれかまたは両方に、そのコプロセッサとして連結されてもよい。これに加えて、様々な実施形態では、GPU1316は、詳細に上述した画像処理プロセッサの特徴のいずれかを有して実現されてもよい。画像処理部1319は、詳細に上述したようなアプリケーションソフトウェアを有して構成されてもよい。これに加えて、図13のコンピューティングシステムなどのコンピューティングシステムは、プログラムコードを実行して、上述したアプリケーションソフトウェア開発を実施してもよい。
【0103】
タッチスクリーンディスプレイ1303、通信インタフェース1304〜1307、GPSインタフェース1308、センサ1309、カメラ1310、およびスピーカ/マイクロフォンコーデック1313、1314の各々は、すべて、内蔵型周辺機器(たとえば、1つ以上のカメラ1310)も適宜備えたコンピュータシステム全体に対する様々な形態のI/O(入力部および/または出力部)として見ることができる。実装形態によっては、これらのI/Oコンポーネントのうちの様々なI/Oコンポーネントがアプリケーションプロセッサ/マルチコアプロセッサ1350上に集積されてもよく、ダイからずれて配置、またはアプリケーションプロセッサ/マルチコアプロセッサ1350のパッケージの外に配置されてもよい。
【0104】
実施形態では、1つ以上のカメラ1310は、カメラと視野に存在するオブジェクトとの間の奥行きを測定可能な深度カメラを含む。アプリケーションプロセッサまたはその他のプロセッサの汎用CPUコア(または、プログラムコードを実行するための命令実行パイプラインを有するその他の機能ブロック)上で実行されるアプリケーションソフトウェア、オペレーティングシステムソフトウェア、デバイスドライバソフトウェア、および/またはファームウェアが、上述した機能のいずれかを実行してもよい。
【0105】
本発明の実施形態は、上述した様々な処理を含んでもよい。処理は、機械によって実行可能な命令に含まれてもよい。命令を用いて、汎用プロセッサまたは特定用途向けプロセッサに特定の処理を実行させることができる。これに代えて、これらの処理は、処理を実行するための結線ロジックおよび/またはプログラム可能なロジックを含んだ専用のハードウェア部品によって実行されてもよく、プログラムを組み込まれたコンピュータ構成要素とカスタムハードウェア部品との任意の組み合わせによって実行されてもよい。
【0106】
また、本発明の要素は、機械によって実行可能な命令を格納するための機械読み取り可能な媒体として提供されてもよい。機械読み取り可能な媒体は、フロッピー(登録商標)ディスク、光ディスク、CD−ROM、および光磁気ディスク、FLASHメモリ、ROM、RAM、EPROM、EEPROM、磁気カードまたは光カード、電子命令を格納するのに適した伝播媒体またはその他の種類の媒体/機械読み取り可能な媒体などがあり得るが、これらに限定されない。たとえば、本発明は、コンピュータプログラムとしてダウンロードされてもよく、コンピュータプログラムは、搬送波またはその他の伝播媒体に含んだデータ信号として、通信リンク(たとえば、モデムまたはネットワーク接続)を介してリモートコンピュータ(たとえば、サーバ)から要求元コンピュータ(たとえば、クライアント)に転送され得る。
【0107】
上記の明細書において、具体的、例示的な実施形態を用いて本発明を説明したが、特許請求の範囲に記載の本発明のより広義の趣旨および範囲から逸脱することなく、様々な変形、変更を行ってもよいことは明らかであろう。したがって、明細書および図面は、厳密ではなく、例示的であるとみなされるべきである。
【0108】
以下に、いくつかの例を記載する。
(例1)画像処理プロセッサであって、
複数の処理コアと、
処理コア間で連結されたリングネットワークとを備え、リングネットワークは、処理コアの第1セットを連結する第1構成と、処理コアの第1セットおよび処理コアの第2セットを連結する第2構成とを提供し、第1構成および第2構成は、連続するシーケンスで各処理コアにネットワークアドレスを割り当て、第1構成および第2構成は、処理コアの第1セットに含まれる各処理コアに同一のネットワークアドレスを割り当て、リングを囲むように処理コアに割り当てられるネットワークアドレスは、連続するシーケンスとは異なる、画像処理プロセッサ。
【0109】
(例2)画像処理プロセッサは、第1構成および第2構成を設定するためのレジスタ空間を備える、例1に記載のプロセッサ。
【0110】
(例3)リングネットワークは、マルチプレクサのセットの第1チャネルの選択によって、リング上のさらなるノードを含めることをリングネットワークに許可させ、マルチプレクサのセットの第2チャネルの選択によって、さらなるノードをリングネットワークに排除させるよう、マルチプレクサのセットを含む、例1または2に記載のプロセッサ。
【0111】
(例4)マルチプレクサのセットは、マルチプレクサのペアを含む、例3に記載のプロセッサ。
【0112】
(例5)処理コアは、プログラムコードを実行する、先行する例のうちの少なくとも1つに記載のプロセッサ。
【0113】
(例6)処理コアは、各々、実行レーンアレイと2次元シフトレジスタアレイとを備える、先行する例のうちの少なくとも1つに記載のプロセッサ。
【0114】
(例7)画像処理プロセッサのアーキテクチャは、少なくとも1つのラインバッファ、少なくとも1つのシート生成部、および/または少なくとも1つのステンシル生成部を備える、先行する例のうちの少なくとも1つに記載のプロセッサ。
【0115】
(例8)ステンシル、特に、重なり合うステンシルを処理するように構成される、先行する例のうちの少なくとも1つに記載のプロセッサ。
【0116】
(例9)実行レーンアレイよりも幅広い次元を有する、特に、実行レーンアレイの外側にレジスタが存在するシフトレジスタ構造を含むデータ演算部上で動作するように構成される、先行する例のうちの少なくとも1つに記載のプロセッサ。
【0117】
(例10)プログラムコードを含む非一時的な機械読み取り可能な記憶媒体であって、プログラムコードは、コンピューティングシステムによって処理されると、方法を実行させ、方法は、
プロセッサ上で実行するためのオブジェクトコードの第1インスタンスを構成するステップを含み、プロセッサは、複数のコアと内部ネットワークとを有し、内部ネットワークは、第1の数のコアを通信可能に連結することを可能にする第1構成で構成され、方法は、さらに、
プロセッサの第2インスタンス上で実行するためのオブジェクトコードの第2インスタンスを構成するステップを含み、プロセッサの第2インスタンスの内部ネットワークは、異なる数のコアを通信可能に連結することを可能にする第2構成で構成され、プロセッサおよびプロセッサの第2インスタンス上で同じ位置にあるコアは、第1構成および第2構成に対して同じネットワークアドレスを有する、非一時的な機械読み取り可能な記憶媒体。
【0118】
(例11)オブジェクトコードの第1インスタンスおよびオブジェクトコードの第2インスタンスは、プロセッサおよびプロセッサの第2インスタンスのそれぞれ異なるコア上で実行される、例10に記載の非一時的な機械読み取り可能な媒体。
【0119】
(例12)オブジェクトコードの第1インスタンスおよび第2インスタンスは、それぞれ異なるコアをベースアドレスからのオフセットとしてアドレス指定する、例10または11に記載の非一時的な機械読み取り可能な媒体。
【0120】
(例13)オブジェクトコードの第1インスタンスおよび第2インスタンスを構成するステップは、第1インスタンスおよび第2インスタンスにそれぞれ異なるベースアドレスを設定するステップを含む、例10〜12のうちの少なくとも1つに記載の非一時的な機械読み取り可能な媒体。
【0121】
(例14)オブジェクトコードの第1インスタンスおよび第2インスタンスのうちの一方は、より大きなアプリケーション内のコードのより小さいコンポーネントとして個々のプロセッサ上で実行され、より大きなアプリケーションは、別のプログラムのオブジェクトコードインスタンスをオブジェクトコードの第1インスタンスおよび第2インスタンスのうちの一方と組み合わせることによって構成される、例10〜13のうちの少なくとも1つに記載の非一時的な機械読み取り可能な媒体。
【0122】
(例15)オブジェクトコードの第1インスタンスおよび第2インスタンスのうちの他方は、スタンドアロンアプリケーションとして個々のプロセッサ上で実行される、例10〜14のうちの少なくとも1つに記載の非一時的な機械読み取り可能な媒体。
【0123】
(例16)方法は、
プロセッサとは異なる数のコアを有する別のプロセッサ上で実行するためのオブジェクトコードの第3インスタンスを構成するステップをさらに含む、例10〜15のうちの少なくとも1つに記載の非一時的な機械読み取り可能な媒体。
【0124】
(例17)方法は、少なくとも1つのラインバッファ、少なくとも1つのシート生成部、および/または少なくとも1つのステンシル生成部から構成される画像処理プロセッサのアーキテクチャ上で動作する、例10〜16のうちの少なくとも1つに記載の非一時的な機械読み取り可能な媒体。
【0125】
(例18)ステンシル、特に、重なり合うステンシルを処理するように構成される、例10〜17のうちの少なくとも1つに記載の非一時的な機械読み取り可能な媒体。
【0126】
(例19)実行レーンアレイよりも幅広い次元を有する、特に、実行レーンアレイの外側にレジスタが存在するシフトレジスタ構造を含むデータ演算部上で動作するように構成される、例10〜18のうちの少なくとも1つに記載の非一時的な機械読み取り可能な媒体。
【0127】
(例20)コンピューティングシステムであって、
複数の処理コアと、
システムメモリと、
システムメモリと複数の処理コアとの間に配置されたシステムメモリコントローラと、
プログラムコードを含んだ非一時的な機械読み取り可能な記憶媒体とを備え、プログラムコードは、コンピューティングシステムによって処理されると、方法を実行させ、方法は、
プロセッサ上で実行するためのオブジェクトコードの第1インスタンスを構成するステップを含み、プロセッサは、複数のコアと内部ネットワークとを有し、内部ネットワークは、第1の数のコアを通信可能に連結することを可能にする第1構成で構成され、方法は、さらに、
プロセッサの第2インスタンス上で実行するためのオブジェクトコードの第2インスタンスを構成するステップをさらに含み、プロセッサの第2インスタンスの内部ネットワークは、異なる数のコアを通信可能に連結することを可能にする第2構成で構成され、プロセッサおよびプロセッサの第2インスタンス上で同じ位置にあるコアは、第1構成および第2構成のそれぞれに対して同じネットワークアドレスを有する、コンピューティングシステム。
【0128】
(例21)オブジェクトコードの第1インスタンスおよびオブジェクトコードの第2インスタンスは、プロセッサおよびプロセッサの第2インスタンスのそれぞれ異なるコア上で実行される、例20に記載のコンピューティングシステム。
【0129】
(例22)オブジェクトコードの第1インスタンスおよび第2インスタンスは、それぞれ異なるコアをベースアドレスからのオフセットとしてアドレス指定する、例20または21に記載のコンピューティングシステム。
【0130】
(例23)オブジェクトコードの第1インスタンスおよび第2インスタンスを構成するステップは、第1インスタンスおよび第2インスタンスにそれぞれ異なるベースアドレスを設定するステップを含む、例20〜22のうちの少なくとも1つに記載のコンピューティングシステム。
【0131】
(例24)オブジェクトコードの第1インスタンスおよび第2インスタンスのうちの一方は、より大きなアプリケーション内のコードのより小さいコンポーネントとして、個々のプロセッサ上で実行され、より大きなアプリケーションは、別のプログラムのオブジェクトコードインスタンスをオブジェクトコードの第1インスタンスおよび第2インスタンスのうちの一方と組み合わせることによって構成される、例20〜23のうちの少なくとも1つに記載のコンピューティングシステム。
【0132】
(例25)オブジェクトコードの第1インスタンスおよび第2インスタンスのうちの他方は、スタンドアロンアプリケーションとして個々のプロセッサ上で実行される、例20〜24のうちの少なくとも1つに記載のコンピューティングシステム。
【0133】
(例26)プロセッサおよびプロセッサの第2インスタンスは、画像処理プロセッサである、例20〜25のうちの少なくとも1つに記載のコンピューティングシステム。
【0134】
(例27)少なくとも1つのラインバッファ、少なくとも1つのシート生成部、および/または少なくとも1つのステンシル生成部を含むアーキテクチャを有する画像処理プロセッサを備える、例20〜26のうちの少なくとも1つに記載のコンピューティングシステム。
【0135】
(例28)ステンシル、特に、重なり合うステンシルを処理するように構成される、例20〜27のうちの少なくとも1つに記載のコンピューティングシステム。
【0136】
(例29)実行レーンアレイよりも幅広い次元を有する、特に、実行レーンアレイの外側にレジスタが存在するシフトレジスタ構造を含むデータ演算部を備える、例20〜18のうちの少なくとも1つに記載の非一時的な機械読み取り可能な媒体。
図1
図2
図3
図4
図5
図6a
図6b
図6c
図6d
図7
図8a
図8b
図8c
図8d
図8e
図9a
図9b
図10
図11a
図11b
図11c
図11d
図11e
図11f
図11g
図11h
図11i
図11j
図11k
図12
図13