詳細な記載
i.はじめに
以下では、電力効率を向上するために大きなブロックのデータ(例えば、以下でさらに説明するようなライングループおよびシート)を使用して、幅広く汎用性の高いアプリケーションソフトウェア開発環境を提供する、新しい画像処理技術プラットフォームに関する多くの実施形態について説明する。
1.0 ハードウェアアーキテクチャの実施形態
a. 画像プロセッサハードウェアアーキテクチャおよび動作
図1は、ハードウェアで実現される画像プロセッサのためのアーキテクチャ100の実施形態を示す。画像プロセッサは、例えば、シミュレートされた環境内で仮想プロセッサ用に書かれたプログラムコードを、ハードウェアプロセッサによって実際に実行されるプログラムコードに変換するコンパイラによって対象とされてもよい。図1に示すように、アーキテクチャ100は、複数のラインバッファユニット101_1〜101_M(以下、「ラインバッファ」、「ラインバッファユニット」など)を含み、それらは、複数のステンシルプロセッサユニット102_1〜102_N(以下、「ステンシルプロセッサ」、「ステンシルプロセッサユニット」、「画像処理コア」、「コア」など)および対応するシート生成部ユニット103_1〜103_N(以下、「シート生成部」、「シート生成部ユニット」など)に、ネットワーク104(例えば、ネットワークオンチップ(NOC)(オンチップスイッチネットワーク、オンチップリングネットワークまたは他の種類のネットワークを含む))を介して相互接続される。一実施形態では、どのラインバッファユニットが、ネットワーク104を介してどのシート生成部および対応するステンシルプロセッサに接続してもよい。
一実施形態では、プログラムコードはコンパイルされ、対応するステンシルプロセッサ102にロードされて、ソフトウェア開発者によって以前に定義された画像処理動作を実行する(プログラムコードは、例えば、設計および実装に応じて、ステンシルプロセッサの関連のシート生成部103にもロードされてもよい)。少なくともいくつかの例では、画像処理パイプラインを、第1のパイプラインステージ用の第1のカーネルプログラムを第1のステンシルプロセッサ102_1にロードし、第2のパイプラインステージ用の第2のカーネルプログラムを第2のステンシルプロセッサ102_2にロードするなどして、実現することができ、第1のカーネルはパイプラインの第1ステージの機能を実行し、第2のカーネルはパイプラインの第2ステージの機能を実行し、追加の制御フロー方法がインストールされて、出力画像データをパイプラインの1つのステージから次のステージに渡す。
他の構成では、画像プロセッサは、同じカーネルプログラムコードを動作させる2つ以上のステンシルプロセッサ102_1,102_2を有する並列マシンとして実現することができる。例えば、画像データの高密度かつ高データレートのストリームが、各々が同じ機能を実行する複数のステンシルプロセッサにわたってフレームを広げることによって処理されてもよい。
さらに他の構成では、カーネルの本質的に任意の(DAG)のハードウェアプロセッサへのロードを、それぞれのステンシルプロセッサをそれら自身のプログラムコードのカーネルとともに構成し、適切な制御フローフックをハードウェアに構成して、出力画像をDAG設計における1つのカーネルから次のカーネルの入力に向けることによって、行なってもよい。
一般的なフローとして、画像データのフレームは、マクロI/Oユニット105で受信され、フレーム単位でラインバッファユニット101の1つ以上に渡される。特定のラインバッファユニットは、それの画像データのフレームを、「ライングループ」と呼ばれる画像データのより小さな領域に解析し、次いでライングループをネットワーク104を介して特定のシート生成部に渡す。ある完全な(full)単数のライングループを、例えば、フレームの複数の連続した完全な行または列のデータで構成することができる(簡潔にするために、本明細書では主に連続した行と称する)。シート生成部は、画像データのライングループを「シート」と呼ばれる画像データのより小さな領域にさらに解析し、そのシートを対応するステンシルプロセッサに提示する。
単一入力の画像処理パイプラインやDAGフローの場合、一般に、入力フレームは、同じラインバッファユニット101_1に向けられ、それは、画像データをライングループに解析し、ライングループをシート生成部103_1(対応するステンシルプロセッサ102_1はパイプライン/DAGにおいて第1のカーネルのコードを実行している)に向ける。ステンシルプロセッサ102_1による、それが処理するライングループでの動作が終了した後、シート生成部103_1は、出力ライングループを「下流」のラインバッファユニット101_2に送信する(ある使用例では、出力ライングループは、先に入力ライングループを送信したのと同じラインバッファユニット101_1に送り返すことができる)。
自身のそれぞれの他のシート生成部およびステンシルプロセッサ(例えば、シート生成部103_2およびステンシルプロセッサ102_2)上で実行されるパイプライン/DAGにおける次のステージ/動作を表す1つ以上の「消費側」カーネルは、下流ラインバッファユニット101_2から、第1のステンシルプロセッサ102_1によって生成された画像データを受信する。このようにして、第1のステンシルプロセッサ上で動作する「作成側」カーネルは、その出力データが、第2のステンシルプロセッサ上で動作する「消費側」カーネルに転送され、消費側カーネルは、パイプラインまたはDAG全体の設計と整合する作成側カーネルの後に次のタスクのセットを実行する。
ステンシルプロセッサ102は、画像データの複数の重なり合うステンシル上で同時に動作するように設計されている。複数の重なり合うステンシルおよびステンシルプロセッサの内部ハードウェア処理能力は、シートのサイズを効果的に決定する。ここでは、ステンシルプロセッサ102内で、実行レーンのアレイが一致して動作して、複数の重なり合うステンシルによってカバーされる画像データ表面領域を同時に処理する。]以下でより詳細に説明するように、様々な実施形態において、画像データのシートは、ステンシルプロセッサユニット102内において二次元レジスタアレイ構造にロードされる。シートおよび二次元レジスタアレイ構造の使用は、多量のデータを、多量のレジスタ空間に、例えば、処理タスクが実行レーンアレイによってその直後に直接データ上で実行される単一のロード動作として移動することによって、電力消費を効果的に改善すると考えられている。さらに、実行レーンアレイおよび対応するレジスタアレイの使用は、容易にプログラマブル/設定可能な異なるステンシルサイズを提供する。
図2a〜図2eは、ラインバッファユニット101の解析アクティビティ、およびシート生成部ユニット103のより微細な粒子の解析アクティビティ、ならびにシート生成部ユニット103に結合されるステンシルプロセッサ102のステンシル処理アクティビティの両方のハイレベルの実施形態を示す。
図2aは、画像データ201の入力フレームの一実施形態を示す。図2aはまた、ステンシルプロセッサが動作するように設計された3つの重なり合うステンシル202(各ステンシルは3ピクセル×3ピクセルの寸法を有する)の概要を示す。各ステンシルがそれぞれ出力画像データを生成する出力ピクセルは、ベタ黒で強調表示される。簡潔にするために、3つの重なり合うステンシル202は、垂直方向にのみ重なるように示されている。実際には、ステンシルプロセッサは、垂直方向および水平方向の両方に重なっているステンシルを有するように設計されてもよいことを認識することが適切である。
図2aに見られるように、ステンシルプロセッサ内の垂直に重なり合うステンシル202のために、フレーム内に単一のステンシルプロセッサが動作することができる画像データの広い帯域が存在する。以下でより詳細に説明するように、一実施形態では、ステンシルプロセッサは、データを、それらの重なり合うステンシル内で、左から右への態様で、画像データにわたって処理する(そして、次のラインのセットに対して、上から下の順序で繰り返す)。このように、ステンシルプロセッサがそれらの動作を前方に進めるにつれて、ベタ黒出力ピクセルブロックの数は、水平方向に右に成長する。上述したように、ラインバッファユニット101は、ステンシルプロセッサが今後の拡張された数のサイクルにわたって動作するのに十分な入来フレームからの入力画像データのライングループを解析することを担う。ライングループの例示的な図示は、陰影領域203として示されている。一実施形態では、以下でさらに説明するように、ラインバッファユニット101は、ライングループをシート生成部との間で送受信するための異なるダイナミクスを理解することができる。例えば、「完全なグループ」と呼ばれる1つのモードによれば、画像データの完全な全幅のラインが、ラインバッファユニットとシート生成部との間で渡される。「仮想的に高い」と呼ばれる第2のモードによれば、ライングループは最初に全幅行のサブセットと共に渡される。その後、残りの行は、より小さい(全幅未満の)片で順番に渡される。
入力画像データのライングループ203がラインバッファユニットによって画定され、シート生成部ユニットに渡されると、シート生成部ユニットはさらに、ライングループを、ステンシルプロセッサのハードウェア制限に、より正確に適合する、より微細なシートに、解析する。より具体的には、以下でさらに詳細に説明するように、一実施形態では、各ステンシルプロセッサは、二次元シフトレジスタアレイからなる。二次元シフトレジスタアレイは、本質的に、画像データを実行レーンのアレイの「真下」にシフトし、シフトのパターンは、各実行レーンをそれ自身のステンシル内においてデータに対して動作させる(すなわち、各実行レーンは、それ自身の情報のステンシル上で処理して、そのステンシルの出力を生成する)。一実施形態では、シートは、二次元シフトレジスタアレイを「満たす」か、そうでなければ二次元シフトレジスタアレイにロードされる入力画像データの表面領域である。
したがって、図2bに見られるように、シート生成部は、ライングループ203から最初のシート204を解析し、それをステンシルプロセッサに供給する(ここで、例示的なデータのシートは、参照番号204によって全体的に識別される5×5陰影領域に対応する)。図2cおよび図2dに示すように、ステンシルプロセッサは、重なっているステンシル202をシート上で左から右へ効果的に移動させることによって、入力画像データのシートに対して動作する。図2dのように、シート内のデータから出力値を計算することができるピクセル数(色が濃くなった3×3アレイにおける9個)が使い果たされる(他のピクセル位置は、シート内の情報から決定される出力値を有することができない)。簡単にするために、画像の境界領域は無視されている。
図2eにおいて見られるように、シート生成部は次いで、ステンシルプロセッサが動作を継続する次のシート205を提供する。ステンシルが次のシートに対して動作を開始するときのステンシルの初期位置は、(先に図2dに示されている)最初のシート上の消耗点から右への次の進行であることに留意されたい。新たなシート205で、ステンシルプロセッサが最初のシートの処理と同じ態様で新たなシートに対して動作するにつれ、ステンシルは単に右に移動し続ける。
出力ピクセル位置を取り囲むステンシルの境界領域のために、第1のシート204のデータと第2のシート205のデータとの間にいくらかの重なりがあることに留意されたい。重なりは、シート生成部が重なり合うデータを2回再送信することによって簡単に処理することができる。別の実現例では、次のシートをステンシルプロセッサに供給するために、シート生成部は、ステンシルプロセッサに新たなデータを送るだけに進んでもよく、ステンシルプロセッサは、前のシートからの重なり合うデータを再利用する。
b.ステンシルプロセッサ設計および動作
図3aは、ステンシルプロセッサユニットアーキテクチャ300の実施形態を示す。図3aにおいて見られるように、ステンシルプロセッサは、データ計算ユニット301、スカラープロセッサ302および関連するメモリ303およびI/Oユニット304を含む。データ計算ユニット301は、実行レーンのアレイ305、二次元シフトアレイ構造306、およびアレイの特定の行または列に関連する別個のそれぞれのランダムアクセスメモリ307を含む。
I/Oユニット304は、シート生成部から受け取ったデータの「入力」シートをデータ計算ユニット301にロードし、ステンシルプロセッサからのデータの「出力」シートをシート生成部に格納する役割を果たす。一実施形態では、データ計算ユニット301へのシートデータのロードは、受け取ったシートを画像データの行/列に解析し、画像データの行/列を二次元シフトレジスタ構造306または実行レーンアレイの行/列のそれぞれのランダムアクセスメモリ307にロードすることを必要とする(以下でより詳細に説明する)。シートが最初にメモリ307にロードされる場合、実行レーンアレイ305内の個々の実行レーンは、適宜、ランダムアクセスメモリ307からシートデータを二次元シフトレジスタ構造306にロードすることができる(例えば、シートのデータ上での動作のすぐ前のロード命令として)。データのシートのレジスタ構造306へのロード(シート生成部からの直接的であろうとまたはメモリ307からであろうと)が完了すると、実行レーンアレイ305の実行レーンはデータに対して動作し、最終的に、完成したデータをシートとしてシート生成部に、またはランダムアクセスメモリ307に「書き戻す」。実行レーンがランダムアクセスメモリ907に書き戻す場合、I/Oユニット304はランダムアクセスメモリ307からデータをフェッチして出力シートを形成し、出力シートはシート生成部に転送される。
スカラープロセッサ302は、スカラーメモリ303からステンシルプロセッサのプログラムコードの命令を読み出し、実行レーンアレイ305の実行レーンに命令を発行するプログラムコントローラ309を含む。一実施形態では、データ計算ユニット301から単一命令複数データ(SIMD)のような動作を実行するために、単一の同じ命令がアレイ305内のすべての実行レーンにブロードキャストされる。一実施形態では、スカラーメモリ303から読み出され、実行レーンアレイ305の実行レーンに発行される命令の命令フォーマットは、命令当たり2つ以上のオペコードを含む非常に長い命令語(VLIW)タイプのフォーマットを含む。さらなる実施形態では、VLIWフォーマットは、(以下に説明するように、一実施形態では2つ以上の従来のALU動作を指定することができる)各実行レーンのALUによって実行される数学的機能を指示するALUオペコードと、(特定の実行レーンまたは実行レーンのセットに対してメモリ操作を指示する)メモリオペコードとの両方を含む。
「実行レーン」という用語は、命令を実行することができる1つ以上の実行ユニットのセット(例えば、命令を実行することができる論理回路系)を指す。実行レーンは、しかしながら、様々な実施形態では、単なる実行ユニットを超えた、よりプロセッサに似た機能を含むことができる。例えば、1つ以上の実行ユニットに加えて、実行レーンは、受信された命令をデコードする論理回路系、または、より複数命令複数データ(MIMD)のような設計の場合、命令をフェッチおよびデコードする論理回路系も含むことができる。MIMDのようなアプローチに関しては、ここでは集中プログラム制御アプローチが主に記載されているが、より分散型のアプローチが様々な代替実施形態(例えば、アレイ305の各実行レーン内のプログラムコードおよびプログラムコントローラを含む)において実施されてもよい。
実行レーンアレイ305、プログラムコントローラ309および二次元シフトレジスタ構造306の組み合わせは、広範囲のプログラマブルな機能のための幅広く適応可能/設定可能なハードウェアプラットフォームを提供する。例えば、アプリケーションソフトウェア開発者は、個々の実行レーンが多種多様な機能を実行することができ、任意の出力アレイ位置に近接した入力画像データに容易にアクセスすることができれば、寸法(例えば、ステンシルサイズ)だけでなく幅広い異なる機能能力を有するカーネルをプログラミングすることができる。
実行レーンアレイ305によって操作される画像データのためのデータ記憶装置として機能することとは別に、ランダムアクセスメモリ307は、1つ以上のルックアップテーブルを保持することもできる。様々な実施形態では、1つ以上のスカラールックアップテーブルをスカラーメモリ303内でインスタンス化することもできる。ルックアップテーブルは、例えば、異なるアレイ場所に関するフィルタまたは変形係数を得るために、複雑な機能(例えば、ガンマカーブ、サイン、コサイン)を実現するために、画像処理タスクによって用いられることが多く、ルックアップテーブルは、入力された指標値などに関する機能出力を提供する。ここでは、SIMD画像処理シーケンスは、同じクロックサイクルの間に同じルックアップテーブルのルックアップを行うことが多いと予想される。同様に、1つ以上の定数テーブルを、スカラーメモリ303に記憶することができる。ここでは、例えば、異なる実行レーンは同じクロックサイクルで同じ変数または他の値を必要とすることが予想される(例えば、全画像に適用される特定の乗数)。したがって、定数ルックアップテーブルへのアクセスによって、同じスカラー値は実行レーンの各々に戻る。ルックアップテーブルは、典型的には、指標値でアクセスされる。
スカラールックアップは、同じルックアップテーブルからの同じインデックスからの同じデータ値を実行レーンアレイ305内の各実行レーンに渡すことを含む。様々な実施形態では、上述のVLIW命令フォーマットは、スカラープロセッサによって実行されるルックアップ動作をスカラールックアップテーブルに向けるスカラーオペコードを含むようにも拡張される。オペコードとともに使用するために指定されたインデックスは、即値オペランドでもよいし、他のデータ記憶位置からフェッチされてもよい。いずれにせよ、一実施形態では、スカラーメモリ内のスカラールックアップテーブルからのルックアップは、基本的に同じクロックサイクル中に実行レーンアレイ305内のすべての実行レーンに同じデータ値をブロードキャストすることを含む。ルックアップテーブルの使用および動作に関する追加の詳細は、以下でさらに説明する。
図3bは、上述のVLIW命令ワードの実施形態を要約したものである。図3bにおいて見られるように、VLIW命令ワードフォーマットは、3つの別個の命令、すなわち、1)スカラープロセッサによって実行されるスカラー命令351、2)実行レーンアレイ内でそれぞれのALUによってSIMD方式でブロードキャストされ実行されるALU命令352、および3)部分的SIMD方式でブロードキャストされ実行されるメモリ命令353に対するフィールドを含む(例えば、実行レーンアレイ内において同じ行に沿った実行レーンが同じランダムアクセスメモリを共有する場合、異なる行の各々からの1つの実行レーンが実際に命令を実行する(メモリ命令353のフォーマットは、各行からのどの実行レーンが命令を実行するかを識別するオペランドを含むことができる)。
1つ以上の即値オペランドに対するフィールド354も含まれる。命令351,352,353のどれが、どの即値オペランド情報を用いるかは命令フォーマットで識別されてもよい。命令351,352,353の各々は、また、それ自身のそれぞれの入力オペランドおよび結果情報(例えば、ALU演算用のローカルレジスタならびにメモリアクセス命令用のローカルレジスタおよびメモリアドレス)を含む。一実施形態では、スカラー命令351は、実行レーンアレイ内の実行レーンが他の2つの命令352,353のいずれかを実行する前にスカラープロセッサによって実行される。すなわち、VLIWワードの実行は、スカラー命令351が実行される第1のサイクルと、続いて他の命令352,353が実行されてもよい第2のサイクルとを含む。(様々な実施形態では、命令352,353は並列して実行されてもよい)。
一実施形態では、スカラープロセッサ302によって実行されるスカラー命令は、シートをデータ計算ユニット301のメモリもしくは2Dシフトレジスタ306からロードまたはそれに格納するようシート生成部103に発行されるコマンドを含む。ここで、シート生成部の動作は、ラインバッファユニット101の動作またはスカラープロセッサ302によって発行されたコマンドをシート生成部103が完了するのに要するサイクル数のプレランタイムの理解を妨げる他の変数に依存し得る。したがって、一実施形態では、スカラー命令351がシート生成部103に発行されるべきコマンドに対応するか、そうでなければコマンドをシート生成部103に発行させるVLIWワードは、他の2つの命令フィールド352,353に無操作(NOOP)命令も含む。次に、プログラムコードは、シート生成部がデータ計算ユニットに対するそのロードまたはデータ計算ユニットからのその格納を完了するまで、命令フィールド352,353についてNOOP命令のループに入る。ここで、シート生成部にコマンドを発行すると、スカラープロセッサは、シート生成部がコマンドの完了時にリセットするインターロックレジスタのビットをセットしてもよい。NOOPループの間、スカラープロセッサはインターロックビットのビットを監視する。スカラープロセッサが、シート生成部がそのコマンドを完了したことを検出すると、通常の実行が再び開始される。
図4は、データ計算ユニット401の一実施形態を示す。図4において見られるように、データ計算ユニット401は、二次元シフトレジスタアレイ構造406「の上に」論理的に位置決めされる実行レーンのアレイ405を含む。上述したように、様々な実施形態では、シート生成部によって提供される画像データのシートが二次元シフトレジスタ406にロードされる。その後、実行レーンは、レジスタ構造406からのシートデータに対して動作する。
実行レーンアレイ405およびシフトレジスタ構造406は、互いに対して適所に固定される。しかし、シフトレジスタアレイ406内のデータは、戦略的かつ調整された態様でシフトして、実行レーンアレイ内の各実行レーンがデータ内で異なるステンシルを処理するようにする。したがって、各実行レーンは、生成されている出力シートにおいて異なるピクセルに対する出力画像値を決定する。図4のアーキテクチャから、実行レーンアレイ405が垂直に近接する実行レーンおよび水平に近接する実行レーンを含むので、重なり合うステンシルが垂直に配置されるだけでなく水平にも配置されることは明らかである。
データ計算ユニット401のいくつかの注目すべきアーキテクチャ上の特徴には、実行レーンアレイ405よりも広い寸法を有するシフトレジスタ構造406が含まれる。すなわち、実行レーンアレイ405の外側にレジスタ409の「ハロー」が存在する。ハロー409は、実行レーンアレイの2つの側に存在するように示されているが、実現例に応じて、実行レーンアレイ405の2つ未満(1つ)またはそれ以上(3つまたは4つ)の側に存在してもよい。ハロー405は、データが実行レーン405の「下に」シフトしているときに、実行レーンアレイ405の境界の外側にこぼれ出るデータのための「スピルオーバ」空間を提供する働きをする。単純なケースとして、実行レーンアレイ405の右端を中心とする5×5のステンシルは、ステンシルの最も左側のピクセルが処理されるとき、さらに右側に4つのハローレジスタ位置を必要とすることになる。図面を簡単にするために、図4は、名目上の実施形態において、どちらの側(右、底)のレジスタでも水平方向接続および垂直方向接続の両方を有するであろうとき、ハローの右側のレジスタを、水平方向シフト接続を有するだけとして、およびハローの底側のレジスタを、垂直方向シフト接続を有するだけとして示す。
アレイの各行および/もしくは各列またはその一部分に結合されるランダムアクセスメモリ407によって追加のスピルオーバールームが提供される(例えば、ランダムアクセスメモリは、4つの実行レーン行状と2つの実行レーン列状にまたがる実行レーンアレイの「領域」に割り当てられてもよい。簡略化のために、アプリケーションの残りの部分は、主に、行および/または列に基づく割り当てスキームを指す)。ここで、実行レーンのカーネル動作が、それが(一部の画像処理ルーチンが必要とする場合がある)二次元シフトレジスタアレイ406の外にあるピクセル値を処理することを必要とする場合、画像データの面は、例えばハロー領域409からランダムアクセスメモリ407にさらにこぼれ出ることができる。例えば、ハードウェアが実行レーンアレイの右端の実行レーンの右側にわずか4つの記憶素子のハロー領域を含む場合の6×6ステンシルを考える。この場合、ステンシルを完全に処理するために、データをハロー409の右端からさらに右側にシフトする必要があるであろう。ハロー領域409の外側にシフトされたデータは、ランダムアクセスメモリ407にこぼれ出る。ランダムアクセスメモリ407および図3のステンシルプロセッサの他の適用例を以下でさらに説明する。
図5aないし図5kは、上述のように実行レーンアレイ「の下で」二次元シフトレジスタアレイ内で画像データがシフトされる態様の実施例を示す。図5aにおいて見られるように、二次元シフトアレイのデータ内容は第1のアレイ507に示され、実行レーンアレイはフレーム505によって示される。また、実行レーンアレイ内の2つの近隣の実行レーン510が簡略化して示されている。この簡単な図示510では、各実行レーンは、シフトレジスタからデータを受け付け、ALU出力からデータを受け付け(例えば、サイクルにわたってアキュムレータとして動作する)、または出力データを出力先に書き込むことができるレジスタR1を含む。
各実行レーンはまた、ローカルレジスタR2において、二次元シフトアレイにおけるそれ「の下の」内容が利用可能である。したがって、R1は実行レーンの物理レジスタであり、R2は二次元シフトレジスタアレイの物理レジスタである。実行レーンは、R1および/またはR2によって提供されるオペランドに対して動作可能なALUを含む。さらに詳細に後述するように、一実施形態では、シフトレジスタは、実際にはアレイ位置ごとに複数の(ある「深さ」の)記憶/レジスタ素子で実現されるが、シフト動作は記憶素子の1つの面に限られる(例えば、記憶素子の1つの面のみがサイクルごとにシフトすることができる)。図5aないし図5kは、それぞれの実行レーンから結果のXを格納するために使用されるとしてこれらのより深いレジスタ位置の1つを示している。例示を容易にするために、より深い結果のレジスタは、その対応するレジスタR2の下ではなく、その横に図示されている。
図5a〜図5kは、実行レーンアレイ505内に示された実行レーン位置511の対に中心位置が整列された2つのステンシルの計算に焦点を当てている。例示を容易にするために、実行レーン510の対は、実際には、以下の例によれば、それらが垂直方向の近隣実行レーンである場合に、水平方向の近隣実行レーンとして図示されている。
図5aで最初に見られるように、実行レーン511はそれらの中央のステンシル位置上に中心を配される。図5bは、両方の実行レーン511によって実行されるオブジェクトコードを示す。図11bにおいて見られるように、両方の実行レーン511のプログラムコードは、シフトレジスタアレイ507内のデータを、1つの位置だけ下にシフトさせ、1つの位置だけ右にシフトさせる。これにより、両方の実行レーン511がそれらのそれぞれのステンシルの左上隅に整列される。次に、プログラムコードは、(R2において)それらのそれぞれの位置にあるデータをR1にロードさせる。
図5cに示すように、次にプログラムコードは、実行レーン511の対に、シフトレジスタアレイ507内のデータを1単位だけ左にシフトさせ、各実行レーンのそれぞれの位置の右の値を各実行レーンの位置にシフトさせる。R1の値(以前の値)は、次いで、(R2における)実行レーンの位置にシフトした新しい値とともに加算される。結果はR1に書き込まれる。図5dで見られるように、図5cについて上述したのと同じプロセスが繰り返され、結果のR1に対して、今度は上側実行レーンにおける値A+B+C、および下側実行レーンにおけるF+G+H値を含ませるようにする。この時点で、両方の実行レーン511はそれらのそれぞれのステンシルの上側の行を処理している。(左側に存在する場合には)実行レーンアレイ505の左側でハロー領域に、またはハロー領域が存在しない場合にはランダムアクセスメモリにこぼれ出ることは、実行レーンアレイ505の左側には存在しないことに注目されたい。
図5eに示すように、次に、プログラムコードは、シフトレジスタアレイ内のデータを1単位だけ上にシフトさせ、両方の実行レーン511をそれらのそれぞれのステンシルの中間行の右端に整列される。両方の実行レーン511のレジスタR1は、現在、ステンシルの最上行および中間行の一番右の値の合計を含む。図5fおよび図5gは、両方の実行レーンのステンシルの中間行にわたって左方向に移動する継続的な進行を示す。累積加算は、図5gの処理の終了時に、両方の実行レーン511がそれらのそれぞれのステンシルの最上行の値と中間行の値との合計を含むように、継続する。
図5hは、各実行レーンをそれの対応するステンシルの最下行に整列させる別のシフトを示す。図5iおよび図5jは、両方の実行レーンのステンシルの過程にわたって処理を完了するための継続的なシフトを示す。図5kは、各実行レーンをデータアレイにおいてそれの正しい位置に整列させ、その結果をそこに書き込むための追加のシフトを示す。
図5a〜図5kの例では、シフト動作のためのオブジェクトコードは、(X、Y)座標で表されるシフトの方向および大きさを識別する命令フォーマットを含むことができることに留意されたい。例えば、1つの位置分の上方向シフトのためのオブジェクトコードは、オブジェクトコードでSHIFT0,+1として表現されてもよい。別の例として、1つの位置分の右方向へのシフトは、オブジェクトコードでSHIFT+1,0として表現されてもよい。様々な実施形態では、より大きい大きさのシフトも、オブジェクトコードで指定することができる(例えば、SHIFT0,+2)。ここで、2Dシフトレジスタハードウェアが1サイクルにつき1つの位置だけしかシフトをサポートしない場合、命令は機械によって複数のサイクル実行を要求するように解釈されてもよく、または2Dシフトレジスタハードウェアは、1サイクルにつき2つ以上の位置分シフトをサポートするように設計されてもよい。後者の実施形態はより詳細にさらに下に記載される。
図6は、アレイ実行レーンおよびシフトレジスタ構造の単位セルの別のより詳細な図を示す(ハロー領域のレジスタは、対応する実行レーンを含まない)。実行レーンおよび実行レーンアレイの各位置に関連するレジスタ空間は、一実施形態では、実行レーンアレイの各ノードで、図6に示す回路系をインスタンス化することによって実施される。図6に示すように、単位セルは、4つのレジスタR1〜R4からなるレジスタファイル602に結合される実行レーン601を含む。任意のサイクルの間、実行レーン601は、レジスタR0〜R4のいずれかから読み書きすることができる。2つの入力オペランドを必要とする命令の場合、実行レーンはR0〜R4のいずれかからオペランドの両方を取り出すことができる。
一実施形態では、二次元シフトレジスタ構造は、近隣のレジスタファイル間のシフトが同じ方向にあるように(例えば、すべての実行レーンは左にシフトする、すべての実行レーンは右にシフトするなど)、それの近隣のレジスタファイルが入力マルチプレクサ604を介する場合に、単一のサイクルの間に、レジスタR1〜R3のいずれか(ただ)1つの内容が、出力マルチプレクサ603を介してその近隣のレジスタファイルの1つにシフト「アウト」され、対応するものからシフト「イン」される内容でレジスタR1〜R3のいずれか(ただ)1つの内容が置き換えられることによって、実現される。同じレジスタがその内容がシフトアウトされて同じサイクルでシフトインされる内容で置き換えられるのが一般的であるかもしれないが、マルチプレクサ構成603,604は、同じサイクル中に同じレジスタファイル内で異なるシフトソースおよびシフトターゲットレジスタを可能にする。
図6に示すように、シフトシーケンスの間、実行レーンは、内容をそのレジスタファイル602からその左、右、上および下の近隣のレジスタファイルにシフトアウトする。同じシフトシーケンスと関連して、実行レーンは、さらに、内容をその左、右、上および下の近隣のレジスタファイルの特定のものからそれのレジスタファイルにシフトする。再び、シフトアウトターゲットおよびシフトインソースは、すべての実行レーンについて同じシフト方向と整合しなければならない(例えば、シフトアウトが右隣に対する場合、シフトインは左隣からでなければならない)。
一実施形態では、1サイクルにつき1つの実行レーンにつき1つのレジスタの内容だけをシフトすることが許されるが、他の実施形態では、2つ以上のレジスタの内容をシフトイン/アウトすることが許されてもよい。例えば、図6に示されたマルチプレクサ回路系603,604の第2の例が図6の設計に組み込まれる場合、同じサイクルの間に2つのレジスタの内容がシフトアウト/インされてもよい。もちろん、1つのレジスタの内容だけがサイクルごとにシフトされることが許される実施形態では、数学的演算間のシフトのためにより多くのクロックサイクルを消費することによって、複数のレジスタからのシフトが数学的演算間に起こってもよい(例えば、2つのレジスタの内容が、数学的演算間で2つのシフト演算を消費することによって数学的演算間でシフトされてもよい)。
実行レーンのレジスタファイルのすべての内容未満がシフトシーケンス中にシフトアウトされる場合、各実行レーンのシフトアウトされないレジスタの内容は適所に残る(シフトしない)ことに留意されたい。したがって、シフトインされる内容と置き換えられないシフトされない内容は、シフトサイクルにわたって実行レーンにローカルに維持される。各実行レーンで見られるメモリユニット(「M」)は、データを、実行レーンアレイ内の実行レーンの行および/または列に関連付けられるランダムアクセスメモリ空間からロードまたはそれに格納するために使用される。ここで、Mユニットは、実行レーンの自身のレジスタ空間からロードまたはそれに格納できないデータをロード/格納するためによく使用されるという点で、標準的なMユニットとして機能する。様々な実施形態では、Mユニットの主な動作は、ローカルレジスタからメモリにデータを書き込み、メモリからデータを読み出してそれをローカルレジスタに書き込むことである。
ハードウェア実行レーン601のALUユニットによってサポートされる命令セットアーキテクチャ(ISA)オペコードに関して、様々な実施形態において、ハードウェアALUによってサポートされる数学的オペコードは、仮想実行レーンによってサポートされる数学的オペコード(例えば、ADD、SUB、MOV、MUL、MAD、ABS、DIV、SHL、SHR、MIN/MAX、SEL、AND、OR、XOR、NOT)と一体的に結び付けられる(例えば実質的に同じである)。上述のように、メモリアクセス命令は、実行レーン601によって実行され、データをそれらの関連付けられるランダムアクセスメモリからフェッチまたはそれに格納することができる。さらに、ハードウェア実行レーン601は、シフト演算命令(右、左、上、下)をサポートし、二次元シフトレジスタ構造内でデータをシフトする。上述したように、プログラム制御命令は主にステンシルプロセッサのスカラープロセッサによって実行される。
2.0 ランタイム効率を向上するためのプログラムコード変形
詳細に説明したように、画像プロセッサに関して開発されているアプリケーションソフトウェアは、本明細書ではカーネルと呼ばれる、より小さくより精細なソフトウェアプログラムを指向性のある非巡回グラフなどのより大きな全体構造にまとめることで定義可能である。この定義は、一般に、異なるカーネルを、多数の「作成側」カーネルがそれらの出力画像データを1つ以上の「消費側」カーネルに供給する特定のデータフローパターンに結合することを含む。少なくとも1つのカーネルは、アプリケーションソフトウェアプログラムが動作を行う全入力画像を受信し、典型的には、カーネルのうち1つが、アプリケーションソフトウェアの全出力画像を生成する。
その後、各カーネルは特定のステンシルプロセッサにマッピングされる。各ステンシルプロセッサは、関連するシート生成部を有し、関連するシート生成部は、その関連するステンシルプロセッサのカーネルが動作を行う画像データを受取る。様々な実施形態では、画像データは、シート生成部によってラインのグループで受信される。例えば、シート生成部は、入力画像フレームの全幅にわたる多数の行として画像データを受信し得る。その後、シート生成部は、ステンシルプロセッサに提供され最終的にステンシルプロセッサの2次元シフトレジスタアレイにロードされる、画像データの2次元「シート」を形成する。
様々な実施形態では、シート生成部は、シート生成部の機能を実現するために、専用ハードウェア論理回路系(例えば、特定用途向け集積回路(ASIC)論理回路系)、プログラマブル論理回路系(例えば、フィールドプログラマブルゲートアレイ論理回路系)、埋込みプロセッサ論理回路系、またはこれらの組み合わせで実現される。専用ハードウェア論理回路系は(もしあれば)、アプリケーションソフトウェアのコンパイルプロセスによって生成された情報でセットされ、このアプリケーションソフトウェアは、シート生成部に、シート生成部が関連するステンシルプロセッサにマッピングされるカーネルの、カーネルに関するシート生成動作を行わせる。プログラマブル論理回路系は(もしあれば)、アプリケーションソフトウェアのコンパイルプロセスによって生成された情報でプログラムされ、このアプリケーションソフトウェアは、プログラマブル論理回路系に、シート生成部の関連するステンシルプロセッサにマッピングされたステンシルプロセッサに対して実行するカーネルに関するシート生成部機能を実現させる。埋込みプロセッサ回路系には(もしあれば)、アプリケーションソフトウェアのコンパイルプロセスによって生成されたプログラムコードが設けられており、このアプリケーションソフトウェアは、埋込みプロセッサによって実行されると、埋込みプロセッサに、シート生成部の関連するステンシルプロセッサにマッピングされたステンシルプロセッサに対して実行するカーネルに関するシート生成部機能を実現させる。また、ステンシルプロセッサのスカラープロセッサは、様々なシート生成動作タスクを行うように、手伝うように、そうでなければこれらと関連するように、プログラム可能である。同じ種類の回路の実現の可能性および関連するコンパイルされたプログラムコードおよび/または情報が、ラインバッファユニットについて存在してもよい。
したがって、アプリケーションソフトウェア開発プロセスは、カーネルを特定のステンシルプロセッサにマッピングすることを含むだけでなく、カーネルのためにシート生成動作を行うために使用される、関連設定情報および/またはプログラムコードの生成も含む。
様々なアプリケーションソフトウェアプログラム開発環境では、アプリケーションソフトウェアプログラムのハイレベル記述の受付け、ならびに、これに応じた、低レベルプログラムコード(たとえば、オブジェクトコード)および画像プロセッサによる実行についての関連設定情報の生成を担うコンパイラが、アプリケーションソフトウェアにおける様々な非効率を認識し、非効率を改善する、そうでなければ非効率を削減するためにコンパイルされているプログラムコードを変更する。変更されているプログラムコードは、プログラムコード、および/または1つ以上のシート生成部に関する設定情報、および/またはそれらによって与えられるカーネル、および/またはラインバッファユニットでもよい。
図7aは、第1の潜在的な非効率に関する図である。図7aに見られるように、入力画像701が、例えば、ラインバッファユニットによって送られた複数のライングループとして、シート生成部によって受信される。図7aに見られるように、入力画像は、例えば、シート生成部が結合されるステンシルプロセッサ上で実行されるカーネルK1によって処理される前に、シート生成部によってダウンサンプリングされる(702)。または、カーネルK1は、ダウンサンプリングを行うようにプログラムされてもよい。
様々な実施形態では、当然のことながら、ステンシルプロセッサは、ステンシルプロセッサの実行レーンアレイと同じ寸法を有する出力画像シートを作成する。例えば、実行レーンアレイ寸法が16ピクセル×16ピクセルである実施形態では、ステンシルプロセッサのカーネルプログラムコードK1の構造は、デフォルトで最初に16ピクセル×16ピクセルの出力画像シートの作成になっている。
ステンシルプロセッサは、ダウンサンプリングされた入力画像からその実行レーンアレイと同じ寸法の出力シートを生成するように構成される場合、大量のバッファリング空間が必要である。例えば、図7aを参照すると、ステンシルプロセッサの2次元シフトレジスタアレイへのロードのために16ピクセル×16ピクセルダウンサンプルシート703を作成するように、ダウンサンプリング702がシート生成部によって行われる場合、シート生成部は、カーネルK1による消費に関して16ピクセル×16ピクセルのダウンサンプル入力画像703を形成するように、32ピクセル×32ピクセルの入力画像701をキューに入れる必要がある。そのようなキューイングに必要な大量のメモリを割り当てることは、一種の非効率である。
したがって、一実施形態では、コンパイラが図7bに示すようなアプリケーションソフトウェアプログラム(例えば、任意の関連する設定情報を含む)を再構築する。具体的には、コンパイラは、カーネルK1が完全に使用されているその実行レーンアレイで動作しないように、プログラムコードを構築する。本例を続けると、カーネルK1はその代わりに、カーネルK1に8ピクセル×8ピクセルの出力シート704bを生成させる8ピクセル×8ピクセルの入力シート703b上で動作するように設計されている。
カーネルK1をより小さな8ピクセル×8ピクセルの入力シート703b上で動作するように構成することによって、ダウンサンプリング動作702bは(例えば、シート生成部によって行われるように)、図7aの入力画像データ701aと比べて半分の量の入力画像データ701bをキューに入れる必要があるだけである。ここで、図1aの入力画像データ701aは32行の画像データに対応するが、これとは対照的に、図7bの入力画像データ701bは、わずか16行の入力画像データに対応する。わずか16行の入力画像データ701bでは、ダウンサンプリング動作702bは、画像の全幅にまたがる8ピクセル×8ピクセルの入力シート703bの一続きを生成する2:1ダウンサンプリングを行うことが可能である。
図8aおよび図8bは、アップサンプリングがカーネルK1の出力画像データ801に対して行われ、その後、K1の消費側カーネルK2によって画像データに対して実行される前に同じ量だけダウンサンプリングが行われる、他の非効率を示す図である。ここで、図8aに見られるように、作成側カーネルK1は、出力シートA0〜A3の一続き801を生成する。その後、効果的にK1の出力のアップサンプリングを行うように、これらの出力シート801の画像データはインターリーブされる。すなわち、図8aに見られるように、例えば、K1の消費側カーネルK2によって消費される前に、一時的にK1の出力データをキューに入れるラインバッファ802に格納されたアップサンプリングされたK1出力803の一番上の出力ラインを形成するように、出力シートA0〜A3の各々の一番上のラインがインターリーブされる。様々な実施形態では、アップサンプリングは、K1、K1が実行するステンシルプロセッサに結合されたシート生成部、またはK1がその出力を送るライン802バッファのいずれかによって行われてもよい。
図8bに見られるように、K1の出力を消費するカーネルK2に関する入力処理は、K1の出力がアップサンプリングされた同じ係数でその入力のダウンサンプリングを行うように構成される。したがって、K2に適切なサイズの入力データを与えるプロセスは、K1の出力に対して行われたアップサンプリングプロセスの反転を必要とする。すなわち、図8bを参照すると、ラインバッファ802内のインターリーブされた待機データ803は、最終的には、K1によって当初形成された出力画像A0〜A3を改良するために、デインターリーブされる。ダウンサンプリングは、ラインバッファ802、K2が実行するステンシルプロセッサに結合されたシート生成部、またはK2それ自体のいずれかによって実行されてもよい。
一実施形態では、コンパイラは、作成側カーネルの出力を消費するカーネル(複数のそのようなカーネルを含むこともある)に関して、作成側カーネルのアップサンプリングされた出力が同じ係数で(例えば、1:2アップサンプリングおよび2:1ダウンサンプリング)ダウンサンプリングされるときを認識するように設計されている。それに応じて、コンパイラはさらに、消費側データパスに対する作成側に沿ったアップサンプリングおよびダウンサンプリングの双方を削除できるように、開発されているプログラムコードを再構成する。この解決策が図8cに示されている。ここで、K1のアップサンプリングされていない出力は、K1とK2との接続の間で結合されたラインバッファ802において単にキューに入れられている。その後、アップサンプリングされていないK1出力は、ダウンサンプリングを行うことなくK2に直接与えられる。したがって、図8aのアップサンプリング動作と図8bのダウンサンプリング動作との双方が避けられる。
図9aおよび図9bは、例えば、多成分出力画像の場合に生じ得る他の非効率に関する図である。従来技術で知られているように、デジタル画像は複数の成分(例えば、RGB、YUVなど)を有し得る。様々なアプリケーションソフトウェアプログラムを、異なるデータのプレーンとして異なる成分を処理するように設計/構成してもよい。ここでは、例えば、完全な出力画像901を、作成側カーネルK1によって、第1の成分(R)のみで構成されたデータの1つ以上のシートを生成すること、第2の成分(G)のみで構成されたデータの1つ以上のシートを生成すること、および第3の成分(B)のみで構成されたデータの1つ以上のシートを生成することによって、完全に生成可能である。様々な実施形態では、作成側カーネルと消費側カーネルとの間で渡されている画像の全てのデータを、同じラインバッファ902においてキューに入れることが自然である、または、標準的なデフォルトである。それゆえ、図9aは、同じラインバッファユニット902においてキューに入れられている3つの成分901全ての画像データを示す図である。
しかしながら、例えば大きな出力画像の場合、同じラインバッファユニットの3つの成分全ての画像データを格納することは、大量のラインバッファメモリリソースを極度に使用することがある、そうでなければ、消費することがある。それゆえ一実施形態では、図9aを参照すると、アプリケーションソフトウェアプログラムのコンパイルを行っているコンパイラが自動的に、多成分画像の異なる成分の格納がラインバッファメモリリソースを極度に使用しているときを認識する。例えば、コンパイルプログラムは、画像の格納および転送を行うために最初に定量のバッファメモリリソースを割り当ててもよい、または、転送されるべきデータのサイズおよび/または量に関連した量のバッファメモリリソースを割当ててもよい、ならびに、割当てを考慮して、自動的に割当てられた量が不十分である、もしくはある最大閾値に達すると判断してもよい。他のアプローチでは、コンパイルプロセスは、アプリケーションソフトウェアプログラムをシミュレートすること、および、ラインバッファユニットがボトルネックであると認識すること(例えば、作成側カーネルによって生成されたライングループを格納するメモリスペースを有していないことがある、または、消費側カーネルからの要求の読取りに応じるための帯域幅を有していない)を含んでもよい。それに応じて、コンパイルプロセスは自動的に、作成側K1カーネルの出力画像データの異なる成分が異なるラインバッファユニットにおいてキューに入れられるように、アプリケーションソフトウェアプログラムを変更する、および/または、画像プロセッサを再設定する。ここで、図9bは、異なるラインバッファユニット902_1,902_2,および902_3においてそれぞれキューに入れられているR、G、およびB画像データを示す図である。
図9bの解決策は、作成側K1カーネルが多くの消費者を有する場合にも使用可能である。この場合、図9aのデフォルトの解決策が採用されると、ただ1つの入力画像の全ての情報を受信するために、多数の消費者がラインバッファから複数回ロード/読出しを行わなければならなくなると、画像データ901の全ての成分を格納しているただ1つのラインバッファユニットは、システムボトルネックになることがある。それゆえ、一実施形態では、各ラインバッファが同じ成分タイプについてのデータを保持するたけである、図9bのアプローチを採用する。検討中の例では、これによって、一つのラインバッファリソースに対して消費者によって行われた読出し要求が、図9aのデフォルトアプローチと比較して66%減少する。すなわち、図9bのラインバッファユニット902_1,902_2,902_3の各々は、図9aのラインバッファユニット902の消費側読出し負荷の33%をサポートするだけでよい。作成側カーネルの、画像データのラインバッファリソースへの書込み動作についても、同様に需要を減少させる効果が生じる。
図9bのアプローチが非効率を減少し得る他の状況は、特定の消費者が成分のサブセットを消費するだけであるかどうかである。例えば、極端な場合、一人の消費者がR成分を消費し、他の消費者がG成分を消費し、他の消費者がG成分を消費する。この場合、各々の異なる消費者は、異なるデータパスに沿って(異なるラインバッファユニット接続を通じて)異なる成分に基づくデータフローを合理化する、それ自体の専用ラインバッファソースで構成される。対照的に、図9aのアプローチが用いられる場合、異なる成分に基づくデータフローは、図9aのラインバッファ902のただ1つの地点において集束する。この場合、他の成分を転送しているラインバッファユニット901における多量の書込み/読出し動作によって、1つの成分のデータフローはストールすることがある。
図10aおよび図10bは、ただ一人の消費者からのラインバッファリソースダウンストリームの拡散に基づく他の効率の改善を示す図である。ここでは、あまりに多くの消費者が存在すると、ただ1つの作成側カーネルの出力画像データを転送するために、複数のラインバッファユニットの使用が要求されることがある。図10aは、4つの異なる消費者K2〜K5がただ1つのラインバッファユニット1002からのただ1つの作成側K1カーネルの出力を消費している、潜在的な非効率を示す図である。また、ただ1つのラインバッファユニット1002は、全ての消費者がそれを消費するまでキューに入れられたデータをパージできないため、ボトルネックになることがある。この場合、ラインバッファユニット1002からの全体のデータフローは、最低でその最も遅い消費者の入力レートまで低下する。さらに、ラインバッファユニット1002は、ラインバッファユニット1002のリソースを圧倒し得る多数の消費者をサポートすることを考えて、読出し要求の重負荷を受取る。
したがって、図10bに示すように、消費者K2,K3の第1のサブセットが第1のラインバッファユニット1002_1に割当てられ、消費者K4,K5の第2のサブセットが第2のラインバッファユニット1002_2に割当てられる。作成側カーネルK1の出力画像ストリームが、ラインバッファユニット1002_1,1002_2の双方に与えられる。全消費者の負荷を複数のラインバッファユニットリソース1002_2,1002_2の間で拡散することによって、(図10aのアプローチと比較して)任意の特定のラインバッファユニットリソースに対する全需要が低減されやすくなる。また、コンパイラは、より遅い入力レートの消費側カーネルのより遅い消費レートによってより早い消費側カーネルがストールすることがないように、より速い入力ストリームの消費側カーネルに同じラインバッファユニットを与える(および/または、より遅い入力ストリーム消費側カーネルに異なるラインバッファユニットを与える)ことが可能である。
図11aは、DAGとして設計されたアプリケーションソフトウェアプログラム(またはそのコンポーネント)から生じ得る「分割および結合」非効率を示す図である。図11aにおいて見られるように、ソースカーネルK1の出力は、2つの異なる消費側カーネルK2およびK3に与えられる。さらに、カーネルK3は、カーネルK2の出力を消費する。カーネルK1の出力からのカーネルK3の二重依存は、ランタイム計算非効率およびモデリング/設計非効率を生じることがある。ランタイム非効率に関して、LB2ラインバッファ1102_2は、大量のK1の出力データをキューに入れるために、きわめて大きくされなければならないことがある。通常、カーネルK3は、ほぼカーネルK3がLB2 1102_2からの次のライングループと一緒に処理するLB3 1002_3からの次のライングループが利用可能になるまで、LB2 1102_2に次のライングループを要求しない。K2での伝搬遅延が大きい可能性があるため、LB2 1102_2はきわめて大きくなることがある。LB2 1102_2内のデータが消費される準備が整ったときと、カーネルK2からカーネルK3への同胞入力データがLB3 1102_3において利用可能になるときとの間の前述の不一致によって、アプリケーションソフトウェアの設計中のモデリングまたは最適化プロセスがより困難になる場合がある。
図11bは、コンパイラが分割および結合構造にパイプライン構造を強制する解決策を示す図である。ここでは、図11aのK2カーネルは、本来のK2カーネルと、単にLB1 1102_1からのコンテンツを消費しそれをLB4 1102_4に転送する負荷/格納アルゴリズム1103とを含む異なるカーネルK2’に拡張されている。重要なことに、負荷/格納アルゴリズム1103が、K1からの本来の出力データがK3によって消費される準備が整うときと、K2からの出力データがLB3 1102_3においてK3によって消費される準備が整うときとの間の不一致を削除するK1からの未処理のストリームに対して、伝播遅延を引き起こす可能性がある。
図3aの議論から、様々な実施形態において、スカラーメモリ303をルックアップテーブルまたは定数テーブルを保持するように構成してもよいことを振り返る。特定の適用例では、カーネルによって処理される入力画像データは、(例えば、様々な入力データに動作を行うソースカーネルによって生成されるような)可変な情報ではなく、固定定数である。例としては、例えば、レンズ表面にわたって異なるかなり大きな粒子サイズを有する領域について、レンズに関する補正値が記録されるシェーディング補正が挙げられる。かなり大きな粒度は、低解像度画像データに対応する(記録されたデータが、各エントリが異なる粒子に対応する異なるエントリとして実現される場合、記録されたデータは多くのエントリを含まない)。
画像プロセッサがレンズを含むカメラからの画像を処理している場合、これらの記録された補正値のうち1つは、実行レーンアレイによって処理されている画像領域に対応する。したがって、記録された値は、入力値として各実行レーンに適用される。この意味で、レンズ補正値は、ルックアップテーブルまたは定数テーブルと同様に実現される。さらに、補正値の実現に必要なデータの全量が制限された状態で、補正値は大量のメモリスペースを消費することはない。したがって、図12に見られるように、様々な実施形態では、固定された、かつ、スカラーメモリ1203内に収まるぐらい小さな入力画像データ1210が、(例えば、アプリケーションソフトウェアの初期構成としてスカラーメモリ1203にロードされ)、ランタイム中にルックアップテーブルまたは定数テーブルとして(例えば、ソースカーネルによって生成されラインバッファユニットを通じてカーネルに与えられるのではなく)、ステンシルプロセッサの実行レーンアレイ上で実行するカーネルによって参照される。
図13aは、ラインバッファユニットおよび/またはシート生成部においてキューに入れられている大量のデータにつながる可能性のある、他のランタイムの問題を示す図である。ここで、図13aは、例えばラインバッファユニットから提供された後でシート生成部においてキューに入れられる3つのライングループ1301,1302,1303を示す図である。例の目的で、ライングループ1301,1302,1303の各々が16行の画像データを含み、シート生成部の対応するステンシルプロセッサの実行レーンアレイの寸法1305も16ピクセル×16ピクセルであると仮定する。さらに、実行レーンアレイの周囲の4ピクセルの広さの境界を形成するハロー領域をサポートするように、2次元シフトレジスタアレイの寸法1306が24ピクセル×24ピクセルであると仮定する。少なくともこのような状況では、自然な構成は、16行の実行レーンアレイ1305を16行の特定のライングループに整列させることである。すなわち、シート生成部は、特定のライングループ上で中央に揃えられたシートを形成する。図13aは、実行レーン1305が第2のライングループ1302の高さにわたって動作するように整列された、このようなアプローチを示す図である。
問題は、図13aに示すように、ハロー1306の存在によって、2次元シフトレジスタアレイに与えられる完全なシートが、第1のライングループ1301の低い領域および第3のライングループ1303の高い領域からのデータを必要とすることである(ハロー領域は、これらのライングループも覆う)。したがって、一実施形態では、図13bに見られるように、最小限の数のライングループが実物大のシートを形成するために存在する必要があるように、整列が変更される。この例では、図13bの整列は、2つのライングループ1301,1302のみが実物大のシートを形成するためにシート生成部内に存在する必要があるように、4つのピクセル値によって、図13aの整列に対してシフトアップされている。そうすることによって、 シート生成部で(およびおそらくラインバッファでも)必要とされるメモリスペースは少ないのみならず、シートは、処理を始めるために3つのラインバッファを待つのではなく、処理を始めるために2つのライングループを待つだけでよい。
図14は、1データレーンにつき複数のピクセルを含む入力画像データ、言い換えると、複数のピクセルを含むシート生成部のカーネルによって処理されるべきデータの基本単位が与えられたカーネルについて、入力プロセスとしてシート生成部によって行われるデインターリーブプロセスに関する図である。一例として、図14は、例えばBayerパターンフォーマットにおいて異なる着色ピクセルのモザイク1401を含むように構成されるような、シート生成部によって受信される入力画像のピクセルを示す図である。ここでは、入力画像は、ラインバッファユニットによって提供されるライングループとしてシート生成部によって受信される。したがって、例えば、シート生成部によって受信される各ライングループの各行は、R,GおよびBピクセルを含む。ここでは、入力画像のデータの基本単位は、1つのRピクセル、1つのBピクセル、および2つのGピクセルを含む4つのピクセルからなる単位セル1402を含む。
シート生成部は、受信された入力画像構造1401からのシートを単に直接解析するのではなく(これによって、Bayerパターンを有するシートが作成される)、4つの異なる種類のシートを含むカーネルに関して、新しい入力構造1403を生成するように、入力画像データ構造1401に対してデインタリーブプロセスを行う。すなわち、図14に見られるように、新しい入力構造1403は、1)入力画像のRピクセルからのみ構成される、またはこれからのみ生じるシート、2)単位セル入力画像の単位セルの同じ第1の位置に設けられたGピクセルからのみ構成される、またはこれからのみ生じるシート、3)単位セル入力画像の単位セルの同じ第2の位置に設けられたGピクセルからのみ構成される、またはこれからのみ生じるシート、4)入力画像のBピクセルからのみ構成される、またはこれからのみ生じるシートを含む。これらのシートは、入力画像ピクセルからのみ構成されてもよい、または、例えば、異なる色が存在する入力画像の場所に値を補間することによって、アップサンプリングされてもよい。
その後、新しく構築されたシートは、シート生成部の関連するカーネルに提供される。このカーネルは、新しく構成されたシートを処理し、シート生成部に戻される同じ構造1403(1シートにつき1色)の出力シートを生成する。その後、シート生成部は、単色の構造1403に対してインターリーブ処理を行って、混色の単位セルを含む本来の構造1401を有する消費について、出力画像を生成する。
様々な実施形態では、上述のラインバッファまたはラインバッファユニットは、より一般的には、作成側カーネルと消費側カーネルとの間の画像データの格納および転送を行うバッファとして特徴づけることができる。すなわち、様々な実施形態では、バッファは、必ずしもライングループをキューに入れる必要はない。さらに、画像プロセッサのハードウェアプラットフォームは、関連するメモリリソースを有する複数のラインバッファユニットを含んでもよく、1つ以上のラインバッファは、ただ1つのラインバッファユニットから動作するように構成可能である。すなわち、ハードウェアのただ1つのラインバッファユニットは、異なる作成側/消費側カーネルの対間の異なる画像データフローの格納および転送を行うように構成可能である。
図15は、上述の方法を示す図である。この方法は、バッファが作成側カーネルから1つ以上の消費側カーネルに転送される画像データの格納および転送を行う、画像処理ソフトウェアデータフローを構築すること(1501)を含む。この方法は、バッファが画像データの格納および転送に十分なリソースを有していないと認識すること(1502)も含む。この方法は、画像データを作成側カーネルから1つ以上の消費側カーネルに転送中に画像データの格納および転送を行う複数のバッファを含むように、画像処理ソフトウェアデータフローを変更すること(1503)も含む。
3.0 低レベルプログラムコードの構造
図16は、開発者が非効率を特定する必要がないように、および/または、最初から変形を書く必要がないように、プログラマがハイレベル画像処理機能を設計し、アプリケーション開発環境がセクション2.0の上述の変形のいずれか/全てを提供する、プリランタイム開発環境を示す図である。
ここでは、開発環境は、自動的に上述の非効率のいずれかを認識し、例えば非効率(環境開発が、そこに含まれるように開発されているプログラムコードのスキャンを行う)の記述および(非効率が発見されない場合に強要される)対応する修正を含むライブラリ1601を参照することによって、対応する変形上の改善を自動的に強要する。すなわち、開発環境は、自動的により多くの効率的なプロセスを(例えば、コンパイルプロセスの一部として)行うライブラリ1601からのプログラムコードのインサートを行う、そうでなければ、プログラムコードを変更して、非効率なコードを非効率に対する修正を含む新しいコードに取り替える。
このように、上述の動作を行うプログラムコードまたはその代替の実施形態は、よりハイレベルのプログラムコードまたはより低レベルのオブジェクトコードで表現可能である。様々な実施形態では、よりハイレベルの仮想命令セットアーキテクチャ(ISA)コードが、メモリがx、yアドレス座標を有すると読出すと、動作が行われるべきデータ値を指定する一方で、オブジェクトコードは、これらのデータアクセスを2次元シフトレジスタ動作として(上述のシフト動作のいずれかまたは同様の実施形態として)認識可能である。
コンパイラは、開発環境のx、y読出しを、指定されたオブジェクトコードである2次元シフトレジスタの対応するシフトに変換可能である(例えば、x、y座標(+2、+2)を有する開発環境における読出しは、左へ2スペース、および、下へ2スペースのシフトとしてオブジェクトコードにおいて実現可能である)。環境によって、開発者は、これらのレベル(または、例えば、単により高いISAレベル)の双方への可視性を有してもよい。さらに他の実施形態では、そのようなあらかじめ書込まれたルーチンは、プリランタイムではなくランタイム中に(例えば、ジャストインタイムコンパイラによって)呼び出されてもよい。
4.0 おわりに
先のセクションは、セクション1.0で説明された画像プロセッサが、(例えば、携帯デバイスのカメラからのデータを処理する携帯デバイスのシステムオンチップ(SOC)の一部として)コンピュータシステム上のハードウェアで具体化可能であると認識することが適切である。
上述した様々な画像プロセッサアーキテクチャの特徴は、必ずしも従来の意味での画像処理に限定されず、したがって、画像プロセッサを再特徴付けしてもよい(またはしなくてもよい)他のアプリケーションに適用することができると指摘することが適切である。例えば、実際のカメラ画像の処理とは対照的に、アニメーションの作成および/または生成および/またはレンダリングにおいて上述した様々な画像プロセッサアーキテクチャの特徴のいずれかが使用される場合、画像プロセッサはグラフィックス処理ユニットとして特徴付けられてもよい。さらに、上述した画像プロセッサアーキテクチャの特徴は、ビデオ処理、視覚処理、画像認識および/または機械学習などの他の技術的用途にも適用することができる。このように適用されて、画像プロセッサは、より汎用的なプロセッサ(例えば、コンピューティングシステムのCPUであるか、またはその一部である)と(例えば、コプロセッサとして)一体化されてもよく、またはコンピューティングシステム内のスタンドアロンプロセッサであってもよい。
上述したハードウェア設計の実施形態は、半導体チップ内において、および/または最終的に半導体製造プロセスに向けての回路設計の記述として実施することができる。後者の場合、そのような回路記述は、(例えば、VHDLまたはVerilog)レジスタ転送レベル(RTL)回路記述、ゲートレベル回路記述、トランジスタレベル回路記述もしくはマスク記述またはそれらの様々な組み合わせの形態をとってもよい。回路記述は、典型的には、コンピュータ可読記憶媒体(例えば、CD−ROMまたは他のタイプの記憶技術)上に実施される。
先のセクションから、上記の画像プロセッサは、(例えば、携帯デバイスのカメラからのデータを処理する携帯デバイスのシステムオンチップ(SOC)の一部として)コンピュータシステム上のハードウェアで実施できることを認識することに関係する。画像プロセッサがハードウェア回路として実施される場合、画像プロセッサによって処理される画像データはカメラから直接受信されてもよいことに留意されたい。ここで、画像プロセッサは、別体のカメラの一部であってもよいし、一体化されたカメラを有するコンピューティングシステムの一部であってもよい。後者の場合、画像データは、カメラから直接、またはコンピューティングシステムのシステムメモリから受信することができる(例えば、カメラは、その画像データを画像プロセッサではなくシステムメモリに送信する)。先のセクションで説明した機能の多くは、(アニメーションをレンダリングする)グラフィックスプロセッサユニットにも適用可能であることにも留意されたい。
図17は、コンピューティングシステムの例示的な図である。以下に説明するコンピューティングシステムのコンポーネントの多くは、一体化されたカメラおよび関連する画像プロセッサ(例えば、スマートフォンまたはタブレットコンピュータなどの携帯デバイス)を有するコンピューティングシステムに適用可能である。当業者は、2つの間の範囲を容易に定めることができるであろう。
図17に見られるように、基本的なコンピューティングシステムは、中央処理ユニット1701(例えば、マルチコアプロセッサまたはアプリケーションプロセッサ上に配置された複数の汎用処理コア1715_1〜1715_Nおよびメインメモリコントローラ1717を含み得る)、システムメモリ1702、ディスプレイ1703(例えばタッチスクリーン、フラットパネル)、ローカル有線ポイントツーポイントリンク(例えばUSB)インタフェース1704、様々なネットワークI/O機能1705(イーサネット(登録商標)インタフェースおよび/またはセルラーモデムサブシステムなど)、無線ローカルエリアネットワーク(例えば、WiFi)インタフェース1706、ワイヤレスポイントツーポイントリンク(例えば、ブルートゥース(登録商標))インタフェース1707およびグローバルポジショニングシステムインタフェース1708、様々なセンサ1709_1〜1709_N、1つ以上のカメラ1710、バッテリ1711、電力管理制御ユニット1712、スピーカおよびマイクロホン1713、ならびに音声コーダ/デコーダ1714を含んでもよい。
アプリケーションプロセッサまたはマルチコアプロセッサ1750は、そのCPU1701内における1つ以上の汎用処理コア1715、1つ以上のグラフィカル処理ユニット1716、メモリ管理機能1717(例えば、メモリコントローラ)、I/O制御機能1718および画像処理ユニット1719を含んでもよい。汎用処理コア1715は、典型的には、コンピューティングシステムのオペレーティングシステムおよびアプリケーションソフトウェアを実行する。グラフィックス処理ユニット1716は、典型的には、例えばディスプレイ1703上に提示されるグラフィックス情報を生成するために、グラフィックス集中型機能を実行する。メモリ制御機能1717は、システムメモリ1702とインタフェースして、システムメモリ1702との間でデータの書込/読出を行う。電力管理制御ユニット1724は、システム1700の電力消費を全体的に制御する。
画像処理ユニット1719は、先のセクションで詳細に説明した画像処理ユニットの実施形態のいずれかに従って実現することができる。代替的にまたは組み合わせて、IPU1719は、GPU1716およびCPU1701のいずれかまたは両方にそのコプロセッサとして結合されてもよい。さらに、様々な実施形態では、GPU1716は、詳細に説明した画像プロセッサの特徴のいずれかを用いて実現することができる。
タッチスクリーンディスプレイ1703、通信インタフェース1704〜1707、GPSインタフェース1708、センサ1709、カメラ1710、およびスピーカ/マイクコーデック1713,1714の各々はすべて、適切な場合には、一体化された周辺装置(例えば、1つ以上のカメラ1710)も含むコンピューティングシステム全体に対して様々な形態のI/O(入力および/または出力)として見ることができる。実現例によっては、これらのI/Oコンポーネントの様々なものは、アプリケーションプロセッサ/マルチコアプロセッサ1750上に統合されてもよく、またはアプリケーションプロセッサ/マルチコアプロセッサ1750のダイから離れて、またはそのパッケージ外に配置されてもよい。
一実施形態では、1つ以上のカメラ1710は、カメラとその視野内の対象との間の深度を測定することができる深度カメラを含む。アプリケーションプロセッサまたは他のプロセッサの汎用CPUコア(もしくはプログラムコードを実行するために命令実行パイプラインを有する他の機能ブロック)上で実行されるアプリケーションソフトウェア、オペレーティングシステムソフトウェア、デバイスドライバソフトウェアおよび/またはファームウェアは、上記の機能のいずれかを実行してもよい。ここでは、図17のコンピューティングシステムの多くのコンポーネントは、上述の変形のいずれか/全てを行うコンパイラを含む、図16のアプリケーション開発環境に対応するプログラムコードを実行する高性能コンピューティングシステム(例えば、サーバ)内に存在してもよい。
本発明の実施形態は、上述したような様々なプロセスを含むことができる。これらのプロセスは、機械実行可能命令で実施されてもよい。これらの命令は、汎用または特殊目的のプロセッサに特定のプロセスを実行させるために使用できる。代替的に、これらのプロセスは、プロセスを実行するためのハードワイヤード論理を含む特定のハードウェアコンポーネントによって、またはプログラミングされたコンピュータコンポーネントとカスタムハードウェアコンポーネントとの任意の組み合わせによって実行されてもよい。
本発明の要素はまた、機械実行可能命令を記憶するための機械可読媒体として提供されてもよい。機械可読媒体は、フロッピー(登録商標)ディスク、光ディスク、CD−ROM、および光磁気ディスク、フラッシュメモリ、ROM、RAM、EPROM、EEPROM、磁気もしくは光カード、伝搬媒体、または電子命令を記憶するのに適した他のタイプの媒体/機械可読媒体を含むが、それらに限定はされない。例えば、要素は、搬送波または通信リンク(例えば、モデムもしくはネットワーク接続)を介する他の伝搬媒体で実施されたデータ信号によって、遠隔のコンピュータ(例えば、サーバ)から要求側コンピュータ(例えば、クライアント)に転送され得るコンピュータプログラムとしてダウンロードすることができる。
前述の明細書では、特定の実施形態の例を説明した。しかしながら、特許請求の範囲に記載される本発明のより広い精神および範囲から逸脱することなく、様々な修正および変更がなされ得ることは明らかであろう。したがって、明細書および図面は、限定的ではなく例示的なものとみなされるべきである。
いくつかの例について以下で説明する。
例1:プログラムコードを含む機械可読記憶媒体であって、プログラムコードは、コンピューティングシステムによって処理されると、コンピューティングシステムに方法を実行させ、方法は、
a)バッファが作成側カーネルから1つ以上の消費側カーネルに転送される画像データの格納および転送を行う、画像処理ソフトウェアデータフローを構築することと、
b)バッファが画像データの格納および転送を行うために十分なリソースを有していないと認識することと、
c)画像データを作成側カーネルから1つ以上の消費側カーネルに転送中に画像データの格納および転送を行う複数のバッファを含むように、画像処理ソフトウェアデータフローを修正することとを含む、機械可読記憶媒体。
例2:方法はさらに、画像データの異なる部分が作成側カーネルから複数のバッファのうち異なるバッファに送られるように、画像処理ソフトウェアデータフローを変更することを含む、例1に記載の機械可読記憶媒体。
例3:異なる部分は、画像データの異なる色成分に対応する、例2に記載の機械可読記憶媒体。
例4:方法はさらに、同じ画像データが作成側カーネルから複数のバッファのうち第1および第2のバッファに送られるように、画像処理ソフトウェアデータフローを変更することを含む、前述の例の少なくとも1つに記載の機械可読記憶媒体。
例5:変更することはさらに、1つ以上の消費側カーネルのうち第1の消費側カーネルに与えるように、複数のバッファのうち第1のバッファを構成することと、1つ以上の消費側カーネルのうち第2の消費側カーネルに与えるように、複数のバッファのうち第2のバッファを構成することとを含む、例4に記載の機械可読記憶媒体。
例6:方法はさらに、
画像処理ソフトウェアデータフローは係数で画像のアップサンプリングを行ってアップサンプリングされた画像を形成すると認識することと、
画像処理ソフトウェアデータフローはアップサンプリングされた画像のダウンサンプリングを当該係数で行うと認識することと、
画像のアップサンプリングおよびアップサンプリングされた画像のダウンサンプリングを、画像処理ソフトウェアデータフローから削除することを含む、前述の例の少なくとも1つに記載の機械可読記憶媒体。
例7:方法はさらに、
画像処理ソフトウェアデータフローの分割及び結合パターンを認識することと、
分割および結合パターンを削除するために、画像処理ソフトウェアデータフローを一連のステージとして再構築することとを含む、前述の例の少なくとも1つに記載の機械可読記憶媒体。
例8:複数のステンシルプロセッサユニットおよび/または少なくとも1つの対応するシート生成部ユニットに相互接続された複数のラインバッファユニットを有するアーキテクチャ上で動作するように構成された、前述の例の少なくとも1つに記載の機械可読記憶媒体。
例9:ステンシル、特に重なっているステンシルを処理するように構成された、前述の例の少なくとも1つに記載の機械可読記憶媒体。
例10:実行レーンアレイよりも広い寸法を有するシフトレジスタ構造を含むデータ計算ユニット上で動作するように構成された、特に、レジスタが実行レーンアレイの外側にある、前述の例の少なくとも1つに記載の機械可読記憶媒体。
例11:プログラムコードを含む機械可読記憶媒体であって、プログラムコードは、コンピューティングシステムによって処理されると、コンピューティングシステムに方法を実行させ、方法は、
プログラムコードのカーネルによって処理される画像のダウンサンプルが行われると認識することを含み、プログラムコードのカーネルは、画像プロセッサの画像処理コア上で実行され、画像処理コアは2次元実行レーンアレイを含み、方法はさらに、
実行レーンアレイの全ての実行レーンよりも少ない実行レーンで画像を処理して、画像のダウンサンプリングをサポートするために使用されるメモリリソースの消費を低減するように、カーネルの動作を構築することを含む、機械可読記憶媒体。
例12:画像プロセッサは画像処理コアを含む複数の画像処理コアを含み、複数の画像処理コアのうち1つは、定数情報を格納する関連メモリを有し、方法はさらに、
定数入力画像を格納するように関連メモリを構成することを含み、定数入力画像は、関連メモリを有する複数の画像処理コアのうち当該1つに対して実行されるプログラムコードのそれぞれのカーネルによって処理される、例11に記載の機械可読記憶媒体。
例13:画像プロセッサは画像処理コアを含む複数の画像処理コアを含み、複数の画像処理コアのうち1つに関する入力画像データは、画像データのラインのグループとして受信され、方法はさらに、
入力画像領域が最小限の数のラインのグループと重なるように、1つの画像処理コアが動作する入力画像領域を整列させる、例11または12に記載の機械可読記憶媒体。
例14:画像プロセッサは画像処理コアを含む複数の画像処理コアを含み、複数の画像処理コアのうち1つに関する入力画像データは、1つの画像処理コアが動作を行うデータ単位につき複数のピクセルからなるモザイクを含み、方法はさらに、
入力画像を、1つの画像処理コアによって処理される前にデインタリーブされるように構成することと、
1つの画像処理コアによって生成された出力画像データを、データ単位につき複数のピクセルからなるモザイクにインターリーブされるように構成することとを含む、例11〜13の少なくとも1つに記載の機械可読媒体。
例15:複数のステンシルプロセッサユニットおよび/または少なくとも1つの対応するシート生成部ユニットに相互接続された複数のラインバッファユニットを有するアーキテクチャ上で動作するように構成された、例11から14の少なくとも1つに記載の機械可読記憶媒体。
例16:ステンシル、特に重なっているステンシルを処理するように構成された、例11〜15の少なくとも1つに記載の機械可読記憶媒体。
例17:実行レーンアレイよりも広い寸法を有するシフトレジスタ構造を含むデータ計算ユニット上で動作するように構成された、特に、レジスタが実行レーンアレイの外側にある、例11から16の少なくとも1つに記載の機械可読記憶媒体。
例18:コンピューティングシステムであって、
1つ以上の汎用処理コアと、
システムメモリと、
システムメモリと1つ以上の汎用処理コアとの間で結合されたメモリコントローラと、
プログラムコードを含む記憶媒体とを備え、プログラムコードは、コンピューティングシステムによって処理されると、コンピューティングシステムに方法を実行させ、方法は、
a)バッファが作成側カーネルから1つ以上の消費側カーネルに転送される画像データの格納および転送を行う、画像処理ソフトウェアデータフローを構築することと、
b)バッファが画像データの格納および転送を行うために十分なリソースを有していないと認識することと、
c)画像データを作成側カーネルから1つ以上の消費側カーネルに転送中に画像データの格納および転送を行う複数のバッファを含むように、画像処理ソフトウェアデータフローを変更することとを含む、コンピューティングシステム。
例19:方法はさらに、画像データの異なる部分が作成側カーネルから複数のバッファのうち異なるバッファに送られるように、画像処理ソフトウェアデータフローを変更することを含む、例18に記載のコンピューティングシステム。
例20:異なる部分は、画像データの異なる色成分に対応する、例19に記載のコンピューティングシステム。
例21:方法はさらに、同じ画像データが作成側カーネルから複数のバッファのうち第1および第2のバッファに送られるように、画像処理ソフトウェアデータフローを変更することを含む、例18〜20の少なくとも1つに記載のコンピューティングシステム。
例22:変更することはさらに、1つ以上の消費側カーネルのうち第1のカーネルに与えるように、複数のバッファのうち第1のバッファを構成することと、1つ以上の消費側カーネルのうち第2の消費側カーネルに与えるように、複数のバッファのうち第2のバッファを構成することとを含む、例18〜21の少なくとも1つに記載のコンピューティングシステム。
例23:コンパイリングすることはさらに、
画像処理ソフトウェアデータフローは係数で画像のアップサンプリングを行ってアップサンプリングされた画像を形成すると認識することと、
画像処理ソフトウェアデータフローはアップサンプリングされた画像のダウンサンプリングを当該係数で行うと認識することと、
画像のアップサンプリングおよびアップサンプリングされた画像のダウンサンプリングを、画像処理ソフトウェアデータフローから削除することとを含む、例18〜22の少なくとも1つに記載のコンピューティングシステム。
例24:コンパイリングすることはさらに、
画像処理ソフトウェアデータフローの分割及び結合パターンを認識することと、
分割および結合パターンを削除するために、画像処理ソフトウェアデータフローを一連のステージとして再構築することとを備える、例18〜23の少なくとも1つに記載のコンピューティングシステム。
例25:バッファは、画像データのラインの転送グループを格納する、例18〜24の少なくとも1つに記載のコンピューティングシステム。
例26:バッファは画像プロセッサのラインバッファユニットで実現され、画像プロセッサは、ラインバッファユニットと、プログラムコードの作成側カーネルとプログラムコードの1つ以上の消費側カーネルとをそれぞれ実行する複数の処理コアとの間で結合されたネットワークを含む、例18〜25の少なくとも1つに記載のコンピューティングシステム。
例27:複数のステンシルプロセッサユニットおよび/または少なくとも1つの対応するシート生成部ユニットに相互接続された複数のラインバッファユニットを有するアーキテクチャを有するプロセッサを備える、例18〜26の少なくとも1つに記載のコンピューティングシステム。
例28:ステンシル、特に重なっているステンシルを処理するように構成された、例18〜27の少なくとも1つに記載のコンピューティングシステム。
例29:実行レーンアレイよりも広い寸法を有するシフトレジスタ構造を有するデータ計算ユニットを備え、特に、レジスタが実行レーンアレイの外側にある、例18〜28の少なくとも1つに記載のコンピューティングシステム。