JP6793162B2 - 画像プロセッサのためのラインバッファユニット - Google Patents

画像プロセッサのためのラインバッファユニット Download PDF

Info

Publication number
JP6793162B2
JP6793162B2 JP2018176186A JP2018176186A JP6793162B2 JP 6793162 B2 JP6793162 B2 JP 6793162B2 JP 2018176186 A JP2018176186 A JP 2018176186A JP 2018176186 A JP2018176186 A JP 2018176186A JP 6793162 B2 JP6793162 B2 JP 6793162B2
Authority
JP
Japan
Prior art keywords
line
line buffer
buffer interface
interface unit
unit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2018176186A
Other languages
English (en)
Other versions
JP2019053736A5 (ja
JP2019053736A (ja
Inventor
デサイ,ニーティ
メイクスナー,アルバート
ヂュー,チウリン
レッドグレイブ,ジェイソン・ルパート
シャチャム,オフェル
フィンチェルステイン,ダニエル・フレデリック
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Google LLC
Original Assignee
Google LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Google LLC filed Critical Google LLC
Publication of JP2019053736A publication Critical patent/JP2019053736A/ja
Publication of JP2019053736A5 publication Critical patent/JP2019053736A5/ja
Application granted granted Critical
Publication of JP6793162B2 publication Critical patent/JP6793162B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N25/00Circuitry of solid-state image sensors [SSIS]; Control thereof
    • H04N25/70SSIS architectures; Circuits associated therewith
    • H04N25/701Line sensors
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N5/00Details of television systems
    • H04N5/76Television signal recording
    • H04N5/91Television signal processing therefor

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Image Processing (AREA)
  • Information Transfer Systems (AREA)
  • Memory System (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Image Input (AREA)

Description

発明の分野
本発明は、一般に、画像処理に関し、特に、画像プロセッサのラインバッファ部に関する。
背景
画像処理は、典型的には、アレイに編成されたピクセル値の処理を含む。ここで、空間的に編成された二次元アレイは、画像の二次元的性質を捕捉する(追加の次元は、時間(例えば二次元画像のシーケンス)およびデータタイプ(例えば色)を含み得る。典型的なケースでは、アレイ化されたピクセル値は、静止画像または動きの画像を捕捉するためにフレームのシーケンスを生成したカメラによって提供される。伝統的な画像プロセッサは、典型的には、2つの極端な側面のいずれかに分類される。
第1の極端な側面は、汎用プロセッサまたは汎用状プロセッサ(例えばベクトル命令拡張を備えた汎用プロセッサ)上で実行されるソフトウェアプログラムとして画像処理タスクを実行する。第1の極端な側面は、一般的に非常に汎用性の高いアプリケーションソフトウェア開発プラットフォームを提供するが、関連するオーバーヘッド(例えば、命令フェッチおよびデコード、オンチップおよびオフチップデータの処理、投機的実行)と組み合わされたより精細な粒子のデータ構造の使用は、究極的には、プログラムコードの実行中に、データの単位あたり、より多くのエネルギーが消費される結果となる。
第2の逆の極端な側面は、固定機能のハードワイヤード回路系をはるかに大きなデータブロックに適用する。カスタム設計された回路に直接適用される、(粒度の細かいブロックとは対照的な)より大きなデータブロックの使用は、データ単位あたりの消費電力を大幅に削減する。しかしながら、カスタム設計された固定機能回路系の使用は、一般に、プロセッサが実行することができるタスクのセットが限られる結果となる。このように、(第1の極端な側面に関連する)幅広く汎用性の高いプログラミング環境は第2の極端な側面においては欠けている。
高度に汎用性の高いアプリケーションソフトウェア開発の機会と、データ単位あたりの電力効率の向上とを両立させた技術プラットフォームは、依然として望ましいが、欠けている解決策である。
概要
複数のラインバッファインタフェースユニットからなるラインバッファユニットを含む装置が記載される。各ラインバッファインタフェースユニットは、それぞれの作成側による1つ以上の要求を処理して、それぞれのライングループをメモリに格納し、それぞれの消費側による1つ以上の要求を処理して、メモリからそれぞれのライングループをフェッチおよび提供する。ラインバッファユニットは、異なる画像サイズに対する異なるライングループサイズがメモリに記憶可能となるように情報がライングループサイズを確立するプログラマブルな記憶空間を有する。
図面のリスト
以下の説明および添付の図面は、本発明の実施形態を例示するために使用される。
技術プラットフォームの様々なコンポーネントを示す。 カーネルとともに構築されたアプリケーションソフトウェアの実施形態を示す。 カーネルの構造の実施形態を示す。 カーネルの動作の実施形態を示す。 画像プロセッサハードウェアアーキテクチャの実施形態を示す。 画像データのライングループへの解析、ライングループのシートへの解析、および重なり合うステンシルを伴うシートに対して実行される操作を示す。 画像データのライングループへの解析、ライングループのシートへの解析、および重なり合うステンシルを伴うシートに対して実行される操作を示す。 画像データのライングループへの解析、ライングループのシートへの解析、および重なり合うステンシルを伴うシートに対して実行される操作を示す。 画像データのライングループへの解析、ライングループのシートへの解析、および重なり合うステンシルを伴うシートに対して実行される操作を示す。 画像データのライングループへの解析、ライングループのシートへの解析、および重なり合うステンシルを伴うシートに対して実行される操作を示す。 ステンシルプロセッサの実施形態を示す。 画像プロセッサの構成およびプログラミングの実施形態を示す。 ライングループからなる画像フレームを示す。 ラインバッファユニットの設計および動作上の実施形態を示す。 ラインバッファユニットの設計および動作上の実施形態を示す。 ラインバッファユニットの設計および動作上の実施形態を示す。 画像プロセッサのプログラマブルなレジスタ空間の実施形態を示す。 画像プロセッサのプログラマブルなレジスタ空間の実施形態を示す。 仮想的に高い動作モードを示す。 仮想的に高い動作モードを示す。 ラインバッファインタフェースユニットの実施形態を示す。 ラインバッファインタフェースユニットの実施形態を示す。 コンピューティングシステムの実施形態を示す。
詳細な記載
i.導入
以下の説明は、広く汎用性のあるアプリケーションソフトウェア開発環境を提供する新たな画像処理技術プラットフォームに関する多数の実施形態を記載するものであり、それは改善された電力効率を提供するために、より大きなデータのブロック(例えば、以下にさらに説明するようなライングループおよびシート)を使用する。
1.0 アプリケーションソフトウェア開発環境
a.カーネルの用途および構造
図1は、仮想画像処理環境101と、実際の画像処理ハードウェア103と、仮想処理環境101のために書かれたよりハイレベルのコードを、実際のハードウェア103が物理的に実行するオブジェクトコードに変換するためのコンパイラ102とを含む、画像プロセッサ技術プラットフォームのハイレベル図である。以下でより詳細に説明するように、仮想処理環境101は、アプリケーションの構成プロセスの容易な視覚化のために開発および調整できるアプリケーションの点で、広く汎用性が高い。開発者104によるプログラムコード開発努力が完了すると、コンパイラ102は、仮想処理環境101内で書か
れたコードを、実際のハードウェア103に対して対象とされるオブジェクトコードに変換する。
図2aは、仮想環境内で書かれたアプリケーションソフトウェアが取ることができる構造および形態の例を示す。図2aにおいて見られるように、プログラムコードは、入力画像データ201の1つ以上のフレームを処理して、入力画像データ201上で何らかの全体的な変換を行うことが期待される。変換は、開発者によって明示されたオーケストレーションされたシーケンスで入力画像データに対して動作するプログラムコード202の1つ以上のカーネルの動作によって実現される。
例えば、図2aにおいて見られるように、最初に第1のカーネルK1で各入力画像を処理することによって全体の変換が行われる。カーネルK1によって生成された出力画像は、カーネルK2によって操作される。カーネルK2によって生成された出力画像の各々は、カーネルK3_1またはK3_2によって操作され、カーネルK3_1/K3_2によって生成された出力画像は、カーネルK4によって操作される。カーネルK3_1およびK3_2は、K3ステージで並列処理を課すことによって全体の処理を高速化するように設計された同一のカーネルであってもよいし、異なるカーネルであってもよい(例えば、カーネルK3_1は第1の特定タイプの入力画像で動作し、カーネルK3_2は第2の異なるタイプの入力画像で動作する)。
このように、全体的な画像処理シーケンスが大きくなると、画像処理パイプラインまたは有向非循環グラフ(DAG)の形を取り得、開発環境は、開発されているプログラムコードのそのようなものとしての表現を実際に開発者に提示するよう備えられてもよい。カーネルは、開発者によって個々に開発されてもよく、ならびに/または任意の基礎となる技術を供給するエンティティ(実際の信号プロセッサハードウェアおよび/もしくはその設計など)および/もしくは第三者(例えば、開発環境向けに作成されたカーネルソフトウェアのベンダー)によって提供されてもよい。したがって、名目上の開発環境には、開発者がより大きな開発努力の全体的な流れを達成するために様々な方法で自由に「つなぐ」ことができるカーネルの「ライブラリ」が含まれることが期待される。そのようなライブラリの一部であると予想されるいくつかの基本的なカーネルは、以下の基本的な画像処理タスク:畳み込み、ノイズ除去、色空間変換、エッジおよびコーナー検出、シャープニング、ホワイトバランス、γ補正、トーンマッピング、行列乗算、画像レジストレーション、ピラミッド構築、ウェーブレット変換、ブロック状離散コサイン、およびフーリエ変換のうちの1つ以上を提供するようカーネルを含んでもよい。
図2bは、開発者が構想することができるカーネル203の構造の例示的な図を示す。図2bにおいて見られるように、カーネル203は、それぞれの下位プロセッサ205上で各々動作しているプログラムコード204のいくつかの並列スレッド(「スレッド」)として見ることができ、各プロセッサ205は、出力アレイ206における特定の位置(カーネルが生成している出力画像内の特定のピクセル位置など)に向けられる。簡略化のために、3つのプロセッサおよび対応するスレッドのみが図2bに示されている。様々な実施形態では、図示された各出力アレイ位置は、それ自身の専用プロセッサおよび対応するスレッドを有するであろう。すなわち、別個のプロセッサおよびスレッドを出力アレイの各ピクセルに割り当てることができる。
以下でより詳細に説明するように、様々な実施形態では、実際の基礎となるハードウェアにおいて、実行レーンのアレイおよび対応するスレッドが一致して(例えば、単一命令複数データのような態様において)動作して、現在処理中のフレームの「ライングループ」の一部のために出力画像データを生成する。ライングループは、画像フレームの連続したサイズ決め可能な部分である。様々な実施形態では、開発者は、ハードウェアがライン
グループに対して動作することを意識し得、または、開発環境は、例えば、出力フレーム内のすべてのピクセル(例えば、それ自身の専用プロセッサおよびスレッドによって生成された出力フレームにおけるすべてのピクセル)に対して別個のプロセッサおよびスレッドが存在する抽象化を提示し得る。いずれにせよ、様々な実施形態において、開発者は、各出力ピクセルについて個々のスレッドを含むようにカーネルを理解する(出力アレイが視覚化されているかどうかは、出力フレーム全体またはその一部である)。
以下でより詳細に説明するように、一実施形態では、仮想環境内で開発者に提示されるプロセッサ205は、標準(例えばRISC)オペコードをサポートするだけでなく、開発者が実行されているピクセル毎の処理を容易に視覚化することを可能にするフォーマットされたデータアクセス命令も含む命令セットアーキテクチャ(ISA)を有する。従来の数学的およびプログラム制御オペコードのISA全体と組み合わせて任意の入力アレイ位置を容易に定義/視覚化する能力は、理想的には、任意のサイズの画像表面上で実行されるべき任意の所望の機能をアプリケーションプログラム開発者が定義することを本質的に可能にする非常に汎用性の高いプログラミング環境を可能にする。例えば理想的には、任意の数学演算を任意のステンシルサイズに適用するように容易にプログラミングすることができる。
データアクセス命令に関して、一実施形態では、仮想プロセッサのISA(「仮想ISA」)は、特殊なデータロード命令および特殊なデータストア命令を含む。データロード命令は、画像データの入力アレイ内の任意の位置から読み出しできる。データストア命令は、画像データの出力アレイ内の任意の位置に書き込むことができる。後者の命令は、同じプロセッサの複数のインスタンスを異なる出力ピクセル位置に簡単に割り当てることを可能にする(各プロセッサは出力アレイ内の異なるピクセルに書き込む)。したがって、例えば、ステンシルサイズ自体(例えば、ピクセルの幅およびピクセルの高さとして表現される)を、容易にプログラマブルな特徴にすることができる。処理操作の視覚化は、特殊なロードおよびストア命令の各々が特殊な命令フォーマットを有して、更に単純化され、これにより、ターゲットアレイ位置がXおよびY座標として単純に指定される。
いずれにせよ、出力アレイ内の複数の位置各々に対して別個のプロセッサをインスタンス化することにより、プロセッサはそれぞれのスレッドを並列に実行し、例えば出力アレイ内のすべての位置に対するそれぞれの値が同時に生成される。多くの画像処理ルーチンは、典型的には、同じ出力画像の異なるピクセル上で同じ操作を実行することは注目に値する。このように、開発環境の一実施形態では、各プロセッサは同一であると推定され、同じスレッドプログラムコードを実行する。したがって、仮想化された環境は、ロックステップで同一のコードを各々実行する同一のプロセッサなどの二次元アレイからなる一種の二次元(2D)SIMDプロセッサとして見ることができる。
図3は、出力アレイ内の2つの異なるピクセル位置について同一のコードを処理している2つの仮想プロセッサのための処理環境のより詳細な例を示す。図3は、生成されている出力画像に対応する出力アレイ304を示す。ここでは、第1の仮想プロセッサがスレッド301のコードを処理して出力アレイ304の位置X1に出力値を生成し、第2の仮想プロセッサがスレッド302のコードを処理して出力アレイ304の位置X2に出力値を生成している。再び、様々な実施形態において、開発者は、出力アレイ304内の各ピクセル位置について別個のプロセッサおよびスレッドが存在することを理解するであろう(単純にするため、図3はそのうちの2つのみを示す)。しかしながら、様々な実施形態で、開発者は、(マシンのSIMDのような性質のため、)1つのプロセッサおよびスレッドに対してコードを開発するだけでよい。
当技術分野で知られているように、出力ピクセル値は、しばしば、対応する出力ピクセ
ル位置を含みそれを囲む入力アレイのピクセルを処理することによって決定される。例えば、図3からわかるように、出力アレイ304の位置X1は、入力アレイ303の位置Eに対応する。したがって、出力値X1を決定するために処理されるであろう入力アレイ303のピクセル値のステンシルは、入力値ABCDEFGHIに対応するであろう。同様に、出力値X2を決定するために処理される入力アレイピクセルのステンシルは、入力値DEFGHIJKLに対応するであろう。
図3は、出力値X1およびX2をそれぞれ計算するために使用され得るスレッド301,302の対に対する対応する仮想環境プログラムコードの例を示す。図3の例では、両方のコード対が同一であり、9つの入力アレイ値のステンシルを平均して、対応する出力値を決定する。2つのスレッドの唯一の違いは、入力アレイから呼び出される変数および書き込まれる出力アレイの位置である。具体的には、出力位置X1に書き込むスレッドは、ステンシルABCDEFGHIで動作し、出力位置X2に書き込むスレッドはステンシルDEFGHIJKLで動作する。
スレッド301,302の対からのそれぞれのプログラムコードからわかるように、各仮想プロセッサは、少なくとも内部レジスタR1およびR2を含み、少なくとも以下の命令をサポートする:1)入力アレイからR1へのLOAD(ロード)命令;2)入力アレイからR2へのLOAD命令;3)R1およびR2の内容を加算して結果をR2に入れるADD(加算)命令;4)R2内の値を即値オペランド9で除算するDIV(除算)命令;および5)スレッドの専用の出力アレイ位置にR2の内容を格納するSTORE(格納)命令。ここでもまた、図3には2つの出力アレイ位置ならびに2つのスレッドおよび対応するプロセッサしか描かれていないが、おそらく、出力アレイ内のすべての位置にこれらの機能を実行する仮想プロセッサおよび対応するスレッドを割り当てることができる。様々な実施形態では、処理環境のSIMDのような性質にしたがって、複数のスレッドが互いに独立して実行される。つまり、仮想プロセッサ間にスレッド間通信は存在しない(1つのSIMDチャネルが別のSIMDチャネルと交差しないようにしている)。
b.仮想プロセッサメモリモデル
様々な実施形態において、仮想プロセッサの関連する特徴は、それらのメモリモデルである。当該技術分野で理解されるように、プロセッサは、メモリからデータを読み出し、そのデータを操作し、新たなデータをメモリに書き戻す。メモリモデルは、プロセッサが有する、データがメモリ内に編成される方法のパースペクティブまたはビューである。一実施形態では、仮想プロセッサのメモリモデルは、入力アレイ領域および出力アレイ領域の両方を含む。スレッドの入力ピクセル値は入力アレイ領域に格納され、スレッドによって生成された出力ピクセル値は出力アレイ領域に格納される。
一実施形態では、新規なメモリアドレス指定方式を使用して、仮想プロセッサのメモリモデルの入力アレイ部分からどの特定の入力値が呼び込まれるかを規定する。具体的には、従来の線形メモリアドレスではなく、X、Y座標で所望の入力データを定義する「位置相対的」アドレス指定方式が使用される。このように、仮想プロセッサのISAのロード命令は、X成分とY成分とで入力アレイ内の特定のメモリ位置を識別する命令フォーマットを含む。このように、二次元座標系を使用して、入力アレイから読み出される入力値に対してメモリをアドレス指定する。
位置相対的メモリアドレス指定アプローチの使用は、仮想プロセッサが動作している画像の領域が、開発者にとってより容易に識別可能であることを可能にする。上記したように、従来の数学的およびプログラム制御オペコードのISA全体と組み合わせて任意の入力アレイ位置を容易に定義/視覚化する能力は、理想的には、任意のサイズの画像表面上で実行されるべき任意の所望の機能をアプリケーションプログラム開発者が容易に定義す
ることを本質的に可能にする非常に汎用性の高いプログラミング環境を可能にする。位置相対的アドレス指定方式を採用する命令のための様々な命令フォーマットの実施形態が、サポートされるISAの他の特徴の実施形態とならんで、以下により詳細に説明される。
出力アレイには、スレッドが生成を担う出力画像データが含まれる。出力画像データは、全体の画像処理シーケンスに従うディスプレイ上に提示される実際の画像データなどの最終画像データであってもよいし、全体の画像処理シーケンスの次のカーネルがその入力画像データ情報として使用する中間画像データであってもよい。ここでも、典型的には、仮想プロセッサは、同じサイクル中に出力画像データの異なるピクセル位置に書き込むので、同じ出力データ項目に対して競合しない。
一実施形態では、位置相対的アドレス指定方式は、出力アレイへの書込にも使用される。そのため、各仮想プロセッサに対するISAは、その命令フォーマットが、従来のランダムアクセスメモリアドレスではなく、二次元のX、Y座標としてメモリ内の目標とされる書込位置を規定するストア命令を含む。
2.0 ハードウェアアーキテクチャの実施形態
a.画像プロセッサハードウェアアーキテクチャおよび動作
図4は、ハードウェアで実現される画像プロセッサのためのアーキテクチャ400の実施形態を示す。画像プロセッサは、例えば、シミュレートされた環境内で仮想プロセッサ用に書かれたプログラムコードを、ハードウェアプロセッサによって実際に実行されるプログラムコードに変換するコンパイラによって対象とされてもよい。図4に示すように、アーキテクチャ400は、複数のラインバッファユニット401_1〜401_Mを含み、それらは、複数のステンシルプロセッサユニット402_1〜402_Nおよび対応するシート生成部ユニット403_1〜403_Nに、ネットワーク404(例えば、ネットワークオンチップ(NOC)(オンチップスイッチネットワーク、オンチップリングネットワークまたは他の種類のネットワークを含む))を介して相互接続される。一実施形態では、どのラインバッファユニットが、ネットワーク404を介してどのシート生成部および対応するステンシルプロセッサに接続してもよい。
一実施形態では、プログラムコードはコンパイルされ、対応するステンシルプロセッサ402にロードされて、ソフトウェア開発者によって以前に定義された画像処理動作を実行する(プログラムコードは、例えば、設計および実装に応じて、ステンシルプロセッサの関連のシート生成部403にもロードされてもよい)。少なくともいくつかの例では、画像処理パイプラインを、第1のパイプラインステージ用の第1のカーネルプログラムを第1のステンシルプロセッサ402_1にロードし、第2のパイプラインステージ用の第2のカーネルプログラムを第2のステンシルプロセッサ402_2にロードするなどして、実現することができ、第1のカーネルはパイプラインの第1ステージの機能を実行し、第2のカーネルはパイプラインの第2ステージの機能を実行し、追加の制御フロー方法がインストールされて、出力画像データをパイプラインの1つのステージからの次のステージに渡す。
他の構成では、画像プロセッサは、同じカーネルプログラムコードを動作させる2つ以上のステンシルプロセッサ402_1,402_2を有する並列マシンとして実現することができる。例えば、画像データの高密度かつ高データレートのストリームが、各々が同じ機能を実行する複数のステンシルプロセッサにわたってフレームを広げることによって処理されてもよい。
さらに他の構成では、カーネルの本質的に任意のDAGのハードウェアプロセッサへのロードを、それぞれのステンシルプロセッサをそれら自身のプログラムコードのカーネル
とともに構成し、適切な制御フローフックをハードウェアに構成して、出力画像をDAG設計における1つのカーネルから次のカーネルの入力に向けることによって、行なってもよい。
一般的なフローとして、画像データのフレームは、マクロI/Oユニット405で受信され、フレーム単位でラインバッファユニット401の1つ以上に渡される。特定のラインバッファユニットは、それの画像データのフレームを、「ライングループ」と呼ばれる画像データのより小さな領域に解析し、次いでライングループをネットワーク404を介して特定のシート生成部に渡す。ある完全な(full)単数のライングループを、例えば、フレームの複数の連続した完全な行または列のデータで構成することができる(簡単にするために、本明細書では主に連続した行と称する)。シート生成部は、画像データのライングループを「シート」と呼ばれる画像データのより小さな領域にさらに解析し、そのシートを対応するステンシルプロセッサに提示する。
単一入力の画像処理パイプラインやDAGフローの場合、一般に、入力フレームは、同じラインバッファユニット401_1に向けられ、それは、画像データをライングループに解析し、ライングループを対応するシート生成部403_1(対応するステンシルプロセッサ402_1はパイプライン/DAGにおいて第1のカーネルのコードを実行している)に向ける。ステンシルプロセッサ402_1による、それが処理するライングループでの動作が終了した後、シート生成部403_1は、出力ライングループを「下流」のラインバッファユニット401_2に送信する(ある使用例では、出力ライングループは、先に入力ライングループを送信したのと同じラインバッファ装置401_1に送り返すことができる)。
自身のそれぞれの他のシート生成部およびステンシルプロセッサ(例えば、シート生成部403_2およびステンシルプロセッサ402_2)上で実行されるパイプライン/DAGにおける次のステージ/動作を表す1つ以上の「消費側」カーネルは、下流ラインバッファユニット401_2から、第1のステンシルプロセッサ402_1によって生成された画像データを受信する。このようにして、第1のステンシルプロセッサ上で動作する「作成側」カーネルは、その出力データが、第2のステンシルプロセッサ上で動作する「消費側」カーネルに転送され、消費側カーネルは、パイプラインまたはDAG全体の設計と整合する作成側カーネルの後に次のタスクのセットを実行する。
ステンシルプロセッサ402は、画像データの複数の重なり合うステンシル上で同時に動作するように設計されている。複数の重なり合うステンシルおよびステンシルプロセッサの内部ハードウェア処理能力は、シートのサイズを効果的に決定する。ここでは、ステンシルプロセッサ402内で、実行レーンのアレイが一致して動作して、複数の重なり合うステンシルによってカバーされる画像データ表面領域を同時に処理する。
以下でより詳細に説明するように、様々な実施形態において、画像データのシートは、ステンシルプロセッサ402内において二次元レジスタアレイ構造にロードされる。シートおよび二次元レジスタアレイ構造の使用は、大量のデータを、大量のレジスタ空間に、例えば、処理タスクが実行レーンアレイによってその直後に直接データ上で実行される単一のロード動作として移動することによって、電力消費の改善を効果的に提供すると考えられている。さらに、実行レーンアレイおよび対応するレジスタアレイの使用は、容易にプログラマブル/設定可能な異なるステンシルサイズを提供する。
図5a〜図5eは、ラインバッファユニット401の解析アクティビティ、およびシート生成部ユニット403のより微細な粒子の解析アクティビティ、ならびにシート生成部403に結合されるステンシルプロセッサ402のステンシル処理アクティビティの両方
のハイレベルの実施形態を示す。
図5aは、画像データ501の入力フレームの一実施形態を示す。図5aはまた、ステンシルプロセッサが動作するように設計された3つの重なり合うステンシル502(各々3ピクセル×3ピクセルの寸法を有する)の概要を示す。各ステンシルがそれぞれ出力画像データを生成する出力ピクセルは、ベタ黒で強調表示される。簡略化のために、3つの重なり合うステンシル502は、垂直方向にのみ重なるように示されている。実際には、ステンシルプロセッサは、垂直方向および水平方向の両方に重なるステンシルを有するように設計されてもよいことを認識することが適切である。
図5aに見られるように、ステンシルプロセッサ内の垂直に重なり合うステンシル502のために、フレーム内に単一のステンシルプロセッサが動作することができる画像データの広い帯域が存在する。以下でより詳細に説明するように、一実施形態では、ステンシルプロセッサは、データを、それらの重なり合うステンシル内で、左から右への態様で、画像データにわたって処理する(そして、次のラインのセットに対して、上から下の順序で繰り返す)。このように、ステンシルプロセッサがそれらの動作を前方に進めるにつれて、ベタ黒出力ピクセルブロックの数は、水平方向に右に成長する。上述したように、ラインバッファユニット401は、ステンシルプロセッサが今後の拡張された数のサイクルにわたって動作するのに十分な入来フレームからの入力画像データのライングループを解析することを担う。ライングループの例示的な図示は、陰影領域503として示されている。一実施形態では、以下でさらに説明するように、ラインバッファユニット401は、ライングループをシート生成部との間で送受信するための異なるダイナミクスを理解することができる。例えば、「完全なグループ」と呼ばれる1つのモードによれば、画像データの完全な全幅のラインが、ラインバッファユニットとシート生成部との間で渡される。「仮想的に高い」と呼ばれる第2のモードによれば、ライングループは最初に全幅行のサブセットと共に渡される。その後、残りの行は、より小さい(全幅未満の)片で順番に渡される。
入力画像データのライングループ503がラインバッファユニットによって画定され、シート生成部ユニットに渡されると、シート生成部ユニットはさらに、ライングループを、ステンシルプロセッサのハードウェア制限に、より正確に適合する、より微細なシートに、解析する。より具体的には、以下でさらに詳細に説明するように、一実施形態では、各ステンシルプロセッサは、二次元シフトレジスタアレイからなる。二次元シフトレジスタアレイは、本質的に、画像データを実行レーンのアレイの「真下」にシフトし、シフトのパターンは、各実行レーンをそれ自身のステンシル内においてデータに対して動作させる(すなわち、各実行レーンは、それ自身の情報のステンシル上で処理して、そのステンシルの出力を生成する)。一実施形態では、シートは、二次元シフトレジスタアレイを「満たす」か、さもなければ二次元シフトレジスタアレイにロードされる入力画像データの表面領域である。
したがって、図5bに見られるように、シート生成部は、ライングループ503から最初のシート504を解析し、それをステンシルプロセッサに供給する(ここで、データのシートは、参照番号504によって全体的に識別される陰影領域に対応する)。図5cおよび図5dに示すように、ステンシルプロセッサは、重なるステンシル502をシート上で左から右へ効果的に移動させることによって、入力画像データのシートに対して動作する。図5dのように、シート内のデータから出力値を計算することができるピクセル数が使い果たされる(他のピクセル位置は、シート内の情報から決定される出力値を有することができない)。簡単にするために、画像の境界領域は無視されている。
図5eにおいて見られるように、シート生成部は次いで、ステンシルプロセッサが動作
を継続する次のシート505を提供する。ステンシルが次のシートに対して動作を開始するときのステンシルの初期位置は、(先に図5dに示されている)最初のシート上の消耗点から右への次の進行であることに留意されたい。新たなシート505で、ステンシルプロセッサが最初のシートの処理と同じ態様で新たなシートに対して動作するにつれ、ステンシルは単に右に移動し続ける。
出力ピクセル位置を取り囲むステンシルの境界領域のために、第1のシート504のデータと第2のシート505のデータとの間にいくらかの重なりがあることに留意されたい。重なりは、シート生成部が重なり合うデータを2回再送信することによって簡単に処理することができる。別の実現例では、次のシートをステンシルプロセッサに供給するために、シート生成部は、ステンシルプロセッサに新たなデータを送るだけに進んでもよく、ステンシルプロセッサは、前のシートからの重なり合うデータを再利用する。
b.ステンシルプロセッサ設計および動作
図6は、ステンシルプロセッサ600の実施形態を示す。図6において見られるように、ステンシルプロセッサは、データ計算ユニット601、スカラープロセッサ602および関連するメモリ603およびI/Oユニット604を含む。データ計算ユニット601は、実行レーンのアレイ605、二次元シフトアレイ構造606、およびアレイの特定の行または列に関連する別個のランダムアクセスメモリ607を含む。
I/Oユニット604は、シート生成部から受け取ったデータの「入力」シートをデータ計算ユニット601にロードし、ステンシルプロセッサからのデータの「出力」シートをシート生成部に格納する役割を果たす。一実施形態では、データ計算ユニット601へのシートデータのロードは、受け取ったシートを画像データの行/列に解析し、画像データの行/列を二次元シフトレジスタ構造606または実行レーンアレイの行/列のそれぞれのランダムアクセスメモリ607にロードすることを必要とする(以下でより詳細に説明する)。シートが最初にメモリ607にロードされる場合、実行レーンアレイ605内の個々の実行レーンは、適宜、ランダムアクセスメモリ607からシートデータを二次元シフトレジスタ構造606にロードすることができる(例えば、シートのデータ上での動作のすぐ前のロード命令として)。データのシートのレジスタ構造606へのロード(シート生成部からの直接的であろうとまたはメモリ607からであろうと)が完了すると、実行レーンアレイ605の実行レーンはデータに対して動作し、最終的に、完成したデータをシートとしてシート生成部に、またはランダムアクセスメモリ607に「書き戻す」。後者の場合、I/Oユニット604はランダムアクセスメモリ607からデータをフェッチして出力シートを形成し、出力シートはシート生成部に転送される。
スカラープロセッサ602は、スカラーメモリ603からステンシルプロセッサのプログラムコードの命令を読み出し、実行レーンアレイ605の実行レーンに命令を発行するプログラムコントローラ609を含む。一実施形態では、データ計算ユニット601からSIMDのような動作を実行するために、単一の同じ命令がアレイ605内のすべての実行レーンにブロードキャストされる。一実施形態では、スカラーメモリ603から読み出され、実行レーンアレイ605の実行レーンに発行される命令の命令フォーマットは、命令当たり2つ以上のオペコードを含む非常に長い命令語(VLIW)タイプのフォーマットを含む。さらなる実施形態では、VLIWフォーマットは、(以下に説明するように、一実施形態では2つ以上の従来のALU動作を指定することができる)各実行レーンのALUによって実行される数学的機能を指示するALUオペコードと、(特定の実行レーンまたは実行レーンのセットに対してメモリ操作を指示する)メモリオペコードとの両方を含む。
「実行レーン」という用語は、命令を実行することができる1つ以上の実行ユニットの
セット(例えば、命令を実行することができる論理回路系)を指す。実行レーンは、しかしながら、様々な実施形態では、単なる実行ユニットを超えた、よりプロセッサに似た機能を含むことができる。例えば、1つ以上の実行ユニットに加えて、実行レーンは、受信された命令をデコードする論理回路系、または、よりMIMDのような設計の場合、命令をフェッチおよびデコードする論理回路系を含むことができる。MIMDのようなアプローチに関しては、ここでは集中プログラム制御アプローチが主に記載されているが、より分散型のアプローチが様々な代替実施形態(例えば、アレイ605の各実行レーン内のプログラムコードおよびプログラムコントローラを含む)において実施されてもよい。
実行レーンアレイ605、プログラムコントローラ609および二次元シフトレジスタ構造606の組み合わせは、広範囲のプログラマブルな機能のための幅広く適応可能/設定可能なハードウェアプラットフォームを提供する。例えば、アプリケーションソフトウェア開発者は、個々の実行レーンが多種多様な機能を実行することができ、任意の出力アレイ位置に近接した入力画像データに容易にアクセスすることができれば、寸法(例えばステンシルサイズ)だけでなく幅広い異なる機能能力を有するカーネルをプログラミングすることができる。
実行レーンアレイ605によって操作される画像データのためのデータ記憶装置として機能することとは別に、ランダムアクセスメモリ607は、1つ以上のルックアップテーブルを保持することもできる。様々な実施形態では、1つ以上のスカラールックアップテーブルをスカラーメモリ603内でインスタンス化することもできる。
スカラールックアップは、同じルックアップテーブルからの同じインデックスからの同じデータ値を実行レーンアレイ605内の各実行レーンに渡すことを含む。様々な実施形態では、上述のVLIW命令フォーマットは、スカラープロセッサによって実行されるルックアップ動作をスカラールックアップテーブルに向けるスカラーオペコードを含むようにも拡張される。オペコードとともに使用するために指定されたインデックスは、即値オペランドでもよいし、他のデータ記憶位置からフェッチされてもよい。いずれにせよ、一実施形態では、スカラーメモリ内のスカラールックアップテーブルからのルックアップは、基本的に同じクロックサイクル中に実行レーンアレイ605内のすべての実行レーンに同じデータ値をブロードキャストすることを含む。
3.0 ラインバッファユニットの実施形態
a.ラインバッファユニット概観
上記におけるセクション1.0での議論から、様々な実施形態において、ハードウェアプラットフォーム用に書かれたプログラムコードは、その命令フォーマットが入力および出力アレイ位置、例えば、X、Y座標を特定するロードおよびストア命令を有する命令セットを含む一意的な仮想コードで書かれる。様々な実施態様において、X、Y座標情報は実際にはハードウェアプラットフォームにプログラミングされ、そのコンポーネントの様々なものによって認識/理解される。これは、例えば、X、Y座標を(例えばコンパイラ内で)異なる情報に変換することとは別である。例えば、ステンシルプロセッサ内の二次元シフトレジスタ構造の場合、X、Y座標情報はレジスタシフト移動に変換される。対照的に、ハードウェアプラットフォームの他の部分は、元はより高い仮想コードレベルで表現されるX、Y座標情報を具体的に受け取り、理解してもよい。
図7で見られるように、セクション1.0で説明したように、プログラムコード開発者は、データ位置を、X、Y座標として、特殊な命令フォーマットが仮想コードレベルにある状態で、表現する(710)。コンパイル段階の間に、仮想コードは、ハードウェアによって実際に処理されるプログラムコード(オブジェクトコード)と、ハードウェアの構成(例えばレジスタ)空間にロードされる対応する構成情報とに変換される。図7に示す
ように、一実施形態では、特定のカーネルのためのオブジェクトコードが、ステンシルプロセッサのスカラープロセッサ705のプログラム空間にロードされる。
構成プロセスの一部として、スカラープロセッサ705上で実行される構成ソフトウェアは、適切な構成情報711,712を、ステンシルプロセッサ702に結合されるシート生成部ユニット703と、ステンシルプロセッサ702のために新たなシートを生成して、ステンシルプロセッサ702によって生成された処理済みシートに対して動作するかまたはそれを受取るラインバッファユニット701との両方にロードする。ここで、一般的に、シートを依然として全体画像のX、Y座標に関して企図することができる。すなわち、一旦画像またはフレームが(例えば、行当たりのピクセル数、行数、列当たりのピクセル数および列数に関して)規定されても、画像のどの部分または位置も、依然としてX、Y座標で言及され得る。
このように、様々な実施形態では、シート生成部ユニット703およびラインバッファユニット701のいずれかまたは両方は、情報711,712が、画像またはフレームの特定の位置および/または領域(例えば、ライングループ、シート)がX、Y座標で識別される情報プラットフォームを確立するそれらのそれぞれの構成空間706,707内にある状態で、構成されている。様々な実現例/用途において、X、Y座標は、仮想コードレベルで表現される同じX、Y座標であってもよい。
このような情報の例は、例えば、ラインバッファユニット内のアクティブなライングループの数、各ライングループについての画像サイズ(例えば、4つのX、Y座標のセット(各角に1つ)またはX、Y座標の対(1つは下側のより近くの角に、もう1つは上側のより遠い角に))絶対画像幅および画像高さ、ステンシルサイズ(単一のステンシルのサイズおよび/またはステンシルプロセッサの重なり合うステンシルの領域を定義するX、Y値として表される)、シートおよび/またはライングループサイズ(例えば、画像サイズと同じ点で指定されるが、より小さい寸法を有する)などを含む。さらに、ラインバッファユニット701は、少なくともラインバッファユニット701によって管理されるライングループを書き込む作成側カーネルの数および読み取る消費側カーネルの数などの追加の構成情報でプログラミングされてもよい。画像データに関連するチャネルの数および/または寸法も、典型的には、構成情報として含まれる。
図8は、画像内でライングループを一例として定義するX、Y座標の使用を示す。ここで、N個のライングループ801_1,801_2,…801_Nが画像801内で見ることができる。図8から分かるように、各ライングループは、例えばライングループの角の点の1つ以上を規定する画像内のX、Y座標を参照することによって容易に規定することができる。したがって、様々な実施形態では、特定のライングループを規定するために使用されるライングループの名称または他のデータ構造は、そのライングループを特に識別するためにそれに関連付けられたX、Y座標位置を含むことができる。
図7を簡単に参照すると、図7は、ランタイム中、シート生成部703は、例えば、所望のデータ領域を規定するX、Y座標情報を含むことによって、ラインバッファユニット701から「次の」ライングループ(またはライングループの一部)を要求することができることを示す。図8は、画像データの完全な行のみからなる名目上「全幅」のライングループを示す。以下でさらに詳細に説明する「仮想的に高い」と呼ばれる代替構成では、ラインバッファユニット701は、最初に画像データの全幅の行としてライングループの第1の上側部分のみを通過させる。ライングループの後続の下側の行が、次いで、全幅の行よりも小さい連続した塊でシート生成部によって具体的に要求され、別個に要求される。したがって、完全なライングループを得るために、シート生成部によって複数の要求が行われる。ここで、各そのような要求は、次の下側部分に起因するX、Y座標によって次
の下側部分を規定してもよい。
図9a〜図9cは、ラインバッファユニットの実施形態900の様々な特徴を示す。図9aに示すように、ラインバッファユニットは、ライングループ903_1〜903_Nが格納されるメモリ902(例えば、スタティックまたはダイナミックランダムアクセスメモリ(SRAMまたはDRAM))を含む。図9aは、メモリ902内において特定の画像/フレームについてライングループ903_1〜903_Nを作成および消費する様々なカーネル間のアクティビティを示す。
図9aで見られるように、作成側カーネルK1は、別々の時間インスタンスP1、P2〜PNにわたって、新たなライングループをメモリ902に送信する。作成側カーネルK1は、新たなデータシートを生成するステンシルプロセッサ上で実行される。ステンシルプロセッサに結合されるシート生成部はシートを集積してライングループを形成し、ライングループをメモリ902に転送する。
また、図9aに示すように、作成側カーネルK1によって生成されたライングループ903_1〜903_Nに対して動作する2つの消費側カーネルK2、K3が存在する。ここで、消費側カーネルK2およびK3は、それぞれ時間C21およびC31で第1のライングループ903_1を受け取る。明らかに、時間C21およびC31は時間P1の後に生じる。他の制約は存在しなくてもよい。例えば、時間C21および/または時間C31は、時間P2からPNのいずれかの前または後に生じてもよい。ここで、カーネルK2およびK3のためのそれぞれのシート生成部は、それらのそれぞれのカーネルに適した時間に次のライングループを要求する。カーネルK2、K3のいずれかが時間P1の前にライングループ903_1を要求すると、ライングループ903_1が実際にメモリ902に書き込まれるまで、要求はアイドル状態にされる。多くの実現例では、作成側カーネルは、消費側カーネルとは異なるステンシルプロセッサ上で動作する。
おそらく、全てのライングループ903_1〜903_Nに対するカーネルK2およびK3の一方または両方からの要求は、時間P1の前に到着し得る。したがって、ライングループは、いつでも消費側カーネルによって要求され得る。しかしながら、消費側カーネルがライングループを要求すると、ライングループは、作成側カーネルK1がそれらを生成することができるレートを条件として、消費側カーネルに転送される。様々な実施形態では、消費側カーネルは順番にライングループを要求し、同様にそれらを順番に受け取る(カーネルK2は、ライングループ902_2〜902_Nを時間C22〜C2Nでシーケンスで受け取る)。簡略化のために、特定のライングループに対して1つの作成側カーネルしか示されていない。異なる作成側が同じライングループに書き込むことができるように様々な実施形態を設計することが考えられる(例えば、すべての作成側がライングループに書き込んでしまうまで消費側にサービスを提供することが許可されていない場合など)。
(消費側カーネルがプロセッサのDAG処理フローにおける最初のカーネルであるため)作成側カーネルが存在しない場合、画像データのフレームは、メモリ902に(例えば、ダイレクトメモリアクセス(DMA)を介して、またはカメラから)転送され、ライングループに解析されてもよい。(作成側カーネルがプロセッサの全体的なプログラムフローの最後のカーネルであるため)消費側カーネルが存在しない場合、結果のライングループを組み合わせて出力フレームを形成してもよい。
図9bは、ラインバッファユニット900全体のより詳細な実施形態を示す。議論のため、図9aのアクティビティは、図9bのラインバッファユニット900に重ね合わされる。図9bに見られるように、ラインバッファユニット900は、ラインバッファユニッ
ト回路系901に結合されるメモリ902を含む。ラインバッファユニット回路系901は、例えば、専用の論理回路系で構成することができる。ラインバッファユニット回路系901内では、メモリ902内のライングループ903_1〜903_N毎にラインバッファインタフェースユニット904_1〜904_Nが確保されている。様々な実施形態では、ラインバッファユニットが任意の時点で管理できるライングループの数の上限を設定する固定数のラインバッファインタフェースユニット904_1〜904_Nが存在する(N個より少ないライングループがアクティブである場合、対応するより少ない数のラインバッファユニットインタフェースが起動され、いつでも使用される)。
図9bに示すように、総数N個のラインバッファインタフェースユニット904がラインバッファユニット回路系901内にある状態で、ラインバッファユニット900は最大数のライングループを処理している。さらに、(ライングループサイズが設定可能なパラメータである)最大許容ライングループサイズで、メモリ902についてのおおよそのサイズを決定することができる(もちろん、ハードウェアの効率を考慮するために、より小さいメモリフットプリントを、N個の最大サイズのライングループを同時に許可しないことを犠牲にしてインスタンス化してもよい)。
各ラインバッファインタフェースユニット904_1〜904_Nは、それが処理するように割り当てられた特定のライングループに対する作成側および消費側の要求を処理する役割を担う。例えば、ラインバッファインタフェースユニット904_1は、時間P1における作成側K1からのライングループ903_1を格納するようにとの要求を処理するとともに、ライングループ903_1に対する消費側カーネルK2およびK3からの要求を処理する。前者に応答して、ラインバッファインタフェースユニット904_1はライングループ903_1をメモリ902に書き込む。後者に応答して、ラインバッファインタフェースユニット904_1は、メモリ902からのライングループ903_1のそれぞれの読出を実行し、ライングループ903_1を消費側K2およびK3に時刻C21およびC31でそれぞれ転送する。
ライングループのすべての消費側がそれらのライングループのコピーを転送された後、ラインバッファインタフェースユニットは別のライングループに割り当てられるよう「フリー」になる。例えば、ライングループ903_1がフレームのシーケンスの第1の画像フレーム内で第1のライングループを表す場合、ライングループ903_1が時間C21およびC31で消費側K2およびK3に転送された後、ラインバッファインタフェースユニット904_1が、次に、フレームのシーケンスの、次の第2の画像フレーム内で第1のライングループを処理するように割り当てられてもよい。このようにして、ラインバッファユニット回路系901はラインバッファインタフェースユニット904の「プール」を有すると見ることができ、直前のライングループが最後の消費側に供給された後に管理すべき新たなライングループが各インタフェースユニットに割り当てられる。したがって、最後の消費側にサービスを提供し、そして次のライングループを待つラインバッファインタフェースユニットの「フリープール」にインタフェースユニット繰り返し入り、およびそれから取除かれるときに、インタフェースユニットのローテーションがある。
図9cは、ローテーションの実施形態をより詳細に示す。図9cに示すように、利用可能なラインバッファインタフェースユニットは、ラインバッファユニット回路系内においてラインバッファインタフェースユニットのフリープールから選択される(910)。次いで、ラインバッファインタフェースユニットは、次いで、適切な構成情報(例えば、新たなライングループのX、Y位置情報または線形メモリアドレス等価物)を用いて構成される(911)。ここで、図9bにおいて、各ラインバッファインタフェースユニットは、そのような構成情報が保持される構成レジスタ空間905を含むことができることに留意されたい。
次いで、ラインバッファインタフェースユニットは、その新たに割り当てられたライングループについて作成側および消費側の要求を処理することに進む(912)。最後の作成側がライングループに書き込んだ後(様々な実施形態では、ライングループごとにただ1つの作成側が存在する)、最後の消費側にその作成側によって書き込まれたライングループのバージョンが提供された後、ラインバッファインタフェースユニットはフリープールに戻され、プロセスは次のライングループのために910を繰り返す。図9cの制御フローを監督するラインバッファユニット回路901内の制御論理回路系は、例示の便宜のために図9bには示されていない。
b.プログラマブルなレジスタ空間の実施形態
次のライングループの割り当ての一部としてラインバッファインタフェースユニットに提供される更新された構成情報911に関して、公称の場合、ラインバッファユニット900それ自体は、例えば、1つ以上の消費側からなる固定されたセットに供給しているわずか1つの固定された作成側の静的な構成を処理している。この場合、主要な構成情報(例えば、ライングループサイズ、消費側の数など)も静的でありがちであり、ライングループからライングループに変化しない。むしろ、ラインバッファインタフェースユニットに提供される新たな構成情報は、主に新たなライングループ(例えば、メモリ内のライングループの位置など)を識別する。しかしながら、より複雑な潜在的な構成/設計も可能である。これらのうちのいくつかは、この後より詳細に説明される。
図9dは、ラインバッファインタフェースユニットのレジスタ空間の内容(例えば、図9bのレジスタ空間905_1の内容)の実施形態を示す。いくつかのレジスタフィールドの説明がすぐ後に続く。
LB_Enableフィールド921は、本質的にラインバッファインタフェースユニットをイネーブルにし、ラインバッファインタフェースユニットをフリープールから取得するプロセスの一部として「設定」される。Num_Channelsフィールド922は、ライングループの画像データ内のチャネル数を定義する。一実施形態では、Num_Channelsフィールド922を使用して、ライングループごとのデータの総量を決定することができる。例えば、ビデオストリームは、しばしば、赤(R)ピクセルのフレームシーケンス、青(B)ピクセルのフレームシーケンス、および緑(G)ピクセルのフレームシーケンスを含む。したがって、どのライングループでも、実際には3つのライングループ分の情報(R、G、B)がある。
Num_Consumersフィールド923は、ライングループを要求する消費側の数を記述する。一実施形態では、ライングループインスタンスが、Num_Consumersフィールド923の値に等しい回数だけ送られた後、ラインバッファインタフェースユニットはフリープールに入れられる。
Row_Widthフィールド924は、ある完全なライングループの幅を(例えばピクセル数で)定義する。Row_Width924の値は、コンパイラによって提供されるX座標値として表すことができることに留意されたい。FB_Rowsフィールド926は、ある完全なライングループの高さを(例えばピクセル数で)定義する。FB_Rowsフィールド924は、コンパイラによって提供されるY座標値として表すことができることに留意されたい。
FB_Base_Addressフィールド930は、ラインバッファユニットメモリにおいてライングループの位置を定義する。「完全」ライングループモードと呼ばれる第1の動作モードでは、ある完全なサイズのライングループがメモリ内でアクセスされる(
ライングループは作成側から受け取られ、消費側にそれらのそれぞれのデータの全量を含むとして送られる)。完全ライングループモードでは、Num_Channelsフィールド922、Row_Widthフィールド924およびFB_Rowsフィールド926をFB_Addressフィールド930とともに使用して、ある完全なライングループに完全にアクセスするためにメモリに適用されるアドレスの範囲を決定することができる。さらに、これらの同じパラメータを使用して、X、Y座標でライングループを要求したシート生成部からの要求を線形メモリアドレスに「変換」することができる。
VB_Enable、VB_Rows、VB_Cols、Num_Reuse_RowsおよびVB_Base_Addressフィールド925,927,928,931は、「仮想的に高い」ライングループモードと呼ばれる別の動作モードで使用され、これについては後で詳しく説明する。
図9dは単一のラインバッファインタフェースユニットに対する構成レジスタ空間905を表示したが、図9eは全体としてラインバッファユニット回路系901のためのグローバル構成レジスタ空間907の内容の実施形態を示す。図9dのラインバッファインタフェースユニットレジスタ空間は、特定のライングループに焦点を当てているのに対して、図9eのグローバルレジスタ空間907は、同じ画像からの異なるライングループの解析、および画像の処理に関連する作成側/消費側の組み合わせに固有の他の情報の理解に焦点を当てている。
図9eにおいて見られるように、グローバルレジスタ空間の実施形態は、特定の画像に対するチャネルの数932および消費側の数933を含む。簡単にするために、図9eのレジスタ空間は、1組の作成側および消費側(例えば、DAGにおける単一のビデオストリームおよび単一の点のみ)を伴う1つの画像のみを考えている。おそらく、図9eのレジスタ空間の複数のインスタンスを割り当てて、ラインバッファユニット回路系が効果的にマルチタスクを行えるようにすることが考えられる。
マルチタスク化の第1の形態は、画像プロセッサに実装されるDAGまたはソフトウェアパイプライン内にある。ここでは、同じラインバッファユニットを、DAG内の2つの異なるノードについての、またはパイプラインの2つの異なるステージについてのライングループ化を処理するように構成することができる(すなわち、1つのラインバッファユニットが複数のステンシルプロセッサをサポートすることができる)。異なるノード/ステージは、異なる数の消費側を容易に有し得るが、多くの場合、同じ画像およびステンシルサイズ特性を有する可能性が高い。マルチタスク化の第2の形態は、同一の画像プロセッサハードウェア上に実装される複数の異なるDAGおよび/または複数の異なるパイプラインにわたる。例えば、4つのステンシルプロセッサを有する画像プロセッサは、完全に異なるステンシル寸法を伴う完全に異なる画像サイズをそれぞれ処理する2つの完全に異なる2ステージパイプラインを同時に実行し得る。
図9eの特定の実施形態に戻ると、DAG内またはパイプラインステージ間の任意の特定のノードは、画像内のチャネル数、画像サイズ、適用可能なステンシルの寸法およびライングループの消費側の数によって、ハイレベルに特徴付けることができることに留意されたい(図9eは再びライングループ当たり1つの作成側を仮定するが、おそらくは2つ以上の作成側が1つのライングループに書き込むことができ、その場合には図9eのグローバルレジスタ空間は作成側の数に対するフィールドも含むであろう)。Num_ChannelsおよびNum_Consumersフィールド932,933は、図9cの対応するフィールド922,923と本質的に同じである。
Image_SizeおよびStencil_Dimensionフィールド934,
935は、本質的に、処理される画像の寸法と、画像からそれぞれ分割されるべきライングループに対して動作するステンシルの寸法を記述する。両方のフィールド934,935は、X、Y座標値によって表現することができ、コンパイラから提供することができることに留意されたい。さらに、一実施形態では、ラインバッファ回路系ユニット(図9bには図示せず)内の制御論理回路は、Image_SizeおよびStencil_Dimensionフィールド934,935を使用して、ラインバッファインタフェースユニットが、グローバル情報が関係する作成側/消費側の組からのライングループを処理するように割り当てられているときに、バッファインタフェースユニットのレジスタ空間にロードされるラインにロードされるRow_Width924、FB_Rows926およびFB_Base_Address値930を決定する。代替的またはさらなる実施形態では、画像サイズは2つの別個の値、image_widthおよびimage_heightとして表され、それらはそれらの別個にアドレス指定可能なレジスタ空間を有してもよい。同様に、ステンシルサイズは、2つの別個の値、stencil_widthおよびstencil_heightとして表現されてもよく、それらはそれらの別個にアドレス指定可能なレジスタ空間を有してもよい。
Row_Width924は、Image_Size934情報から直接取得可能である。例えば、Image_Sizeが画像原点から最も遠いピクセル(原点が左下隅にある場合は右上角)のX、Y座標の対として表される場合、Row_WidthはX座標値として決定できる。
FB_RowsおよびFB_Base_Addressフィールド926,930は、Image_SizeおよびStencil_Dimensionフィールド934,935から決定することができる。ここで、具体的には、画像の高さ(Image_Size934のY座標値)およびステンシルの高さ(Stencil_Dimension935のY座標値)から、各ライングループの高さ(FB_Rows926)を算出することができる。ライングループの高さが分かれば、画像から解析されるライングループの数およびメモリ内における各そのようなライングループに対する開始線形アドレス(FB_Base_Address930)も決定することができる。
したがって、一実施形態では、グローバルレジスタ空間が図9eのレジスタフィールドによって特徴付けられる特定の作成側/消費側の組み合わせに対してライングループを処理するためにラインバッファユニットが割り当てられると、上述の決定はオンザフライで計算され、FB_Width924、FB_Rows926、Base_Address934の各々は、ラインバッファインタフェースユニットの特定のレジスタ空間に、直接的にコピーするNum_Channels922およびNum_Consumers923と共にロードされる。従って、論理回路系およびデータ経路は、グローバルレジスタ空間とラインバッファインタフェースユニットレジスタ空間の各インスタンスとの間に存在して、これらの決定およびデータ転送を実行してもよい。
代替の実施形態では、コンパイラは、これらの計算の各々を実行し、それにより、グローバルレジスタ空間の全てではないにしても大部分を排除する。ここで、例えば、コンパイラは、各ライングループについてBase_Address値を決定し、それらの値をラインバッファ回路系ユニット内のルックアップテーブルにロードすることができる。値は、それらの対応するライングループが構成されると、ルックアップテーブルから呼び出され、ラインバッファインタフェースユニットのレジスタ空間にロードされる。これら2つの極端なもの(ハードウェアオンザフライ対決定される静的なコンパイラ)の間の異なる組合せも実装することができる。
上記の実施形態は、レジスタ回路系(「レジスタ空間」)における構成情報の保持を強
調したが、他のまたは組み合わせられた実施形態では、構成情報をメモリ(バッファユニットメモリなど)または他のメモリもしくは情報保持回路系に保持することができる。
c.ラインバッファユニットの実施形態および完全ライングループモード対実質的に高いモード
上記の議論は、大部分は、「完全ライングループ」モードに主に向けられ、そこにおいては、ライングループは、完全な全ライングループとして言及され、シート生成部とラインバッファユニットとの間で渡される。「仮想的に高い」と呼ばれる別のモードでは、ライングループは、分離した個別のセグメントで完成される全幅の上側部分および下側部分として言及され、シート生成部間で渡される。
図10aおよび図10bは、例示的な仮想的に高いモードシーケンスの図を示す。図10aにおいて見られるように、ライングループは、最初は、全幅の行の上側部分1003および第1のより短い幅のセグメントのみを有する第1の下側部分1004_1として形成される。ライングループの最初の形成物は、作成側シート生成部によってラインバッファユニットに提供されてもよく、またはラインバッファユニットによって消費側シート生成部に提供されてもよい。
作成側の場合、ライングループは、ステンシル1002が下側部分1004_1を処理した後に形成される(おおよそのステンシル配置が図10bに見られる)。作成側ステンシルプロセッサが下側部分1004_1を処理した後、ステンシルは前方に水平に右に進む。最終的に、それらは次の下側部分1004_2を処理する。次の下側部分1004_2が完了すると、次の下側部分1004_2がシート生成部からラインバッファユニットに送られ、メモリ内において正しい位置、例えば第1の下側部分1004_1の「隣」に格納される。ライングループがラインバッファユニットメモリに完全に書き込まれるまで、プロセスは継続される。
消費側の場合、ライングループは、図10aに示すように、まずシート生成部に送られる。ステンシルプロセッサは、ライングループの第1の部分1004_1に対して動作する。第1の部分1004_1の処理の完了に近づくと、シート生成部は、次の下側部分1004_2を要求し、それはメモリからフェッチされ、ラインバッファユニットによって送られる。このプロセスは、ライングループが完全に処理されるまで続く。
作成側および消費側の両方にとって、下側部分はシート生成部によって具体的に識別されることに注目されたい。すなわち、作成側の場合および消費側の場合の両方において、下側部分1004_2はシート生成部によって具体的に識別され、ラインバッファユニットは具体的にメモリにアクセスして下側部分1004_2を格納/フェッチする。実施形態では、シート生成部は、コンパイラによって提供される情報に基づいて企図されるX、Y座標値を介して下側部分1004_2を識別する(例えば、下側部分1004_2の任意の角、下側部分1004_2のすべての4つの角、X座標値だけなど)。
図11aは、ラインバッファインタフェースユニット1104内の回路系の第1の(より単純な)実施形態を示す。図11aにおいて見られるように、ラインバッファインタフェースユニットは、アドレス変換回路系1106を含み、1つ以上のX、Y座標値によって識別されるライングループまたはその一部(図10bの下側部分1004_2など)のアイデンティティをラインバッファユニットメモリにアクセスするための線形アドレスに変換する。つまり、ライングループは、ラインバッファユニットメモリに「マッピング」されるとみなすことができる。変換回路系1106は、X、Y項でこのマッピングを本質的に理解し、それを特定の線形メモリアドレスに変換することができる。
マッピングを理解する能力は、構成レジスタ空間1105内の情報に基づいており、その実施形態は上記において図9dに示してある。ここで、Row_Width924、FB_Rows926およびFB_Base_Address931の知識により、変換ユニットはメモリにおける完全なライングループのサイズおよび位置を「理解」することができる。したがって、例えば、仮想的に高いモードでは、任意のX座標値(例えば、下側部分がライングループに対して参照される場合)またはX、Y座標位置(例えば、下側部分が画像フレームに対して参照される場合)に基づく下側部分に対する要求は、どの部分がシート生成部によって指されているかを識別するのに十分である。さらに、Vb_Rows927およびVb_Cols928は、本質的に下側部分の寸法を定義する。上側部分および下側部分の寸法を知ることにより、バッファメモリとの間でアクセスされるデータ量も容易に決定可能である。これらの同じ概念は、全幅のライングループにも適用され得る。例えば、任意の全幅のライングループは、画像内において、そのX、Y位置によって識別することができる。さらに、いくつかの実施形態では、全幅のライングループは、Xおよび/またはY座標値によって全幅のライングループのより小さい塊を参照する原子要求/応答のシーケンスを介してネットワークを通過させることができる。
また、変換回路系1106は、抽象アドレス指定モードで使用することもでき、このモードでは、Base_Address_Field931は事前設定されておらず、シート生成部はライングループを画像フレーム内においてX、Y座標として指す。この場合、変換回路系1006が、図9eのグローバルレジスタ空間の情報の一部(例えばImage_Size、Stencil_Size)に結合されているか、または他の方法でそれを通知される場合、変換回路系1106は、ライングループに関するすべての関連情報(フレーム内のそれの寸法および位置)を計算し、それを、ラインバッファユニットメモリにアクセスするために使用される線形アドレスに変換し得る。別の実施形態では、変換回路系1106は、(グローバルタイプ情報およびライングループを記述する1つ以上のX、Y座標に基づいて)Base_Address_Field値931を完全に決定し、それをそれ自身のレジスタ空間1105にロードする。
図11aのラインバッファインタフェースユニットの実施形態は、X、Y座標値がライングループを指すために使用されない(むしろ従来の線形アドレスが使用される)線形アドレス指定モードもサポートする。線形アドレス指定モードの場合、バイパス経路1140はアドレス変換回路系1106を迂回する。一実施形態では、ラインバッファインタフェースユニット入力においてどのアドレス指定モードが使用されるかにかかわらず、ラインバッファインタフェースユニットは、ラインバッファユニットメモリをアドレス指定するための標準的な線形メモリアドレスを提供する。簡単に図9bに戻って参照すると、線形アドレスはアービタに与えられる。メモリインタフェース908は、衝突するメモリアクセス要求を解決し、ラインバッファユニットメモリ902にアクセスする。
上述したように、シート生成部は、1つ以上のX、Y座標値でライングループを指すことができる。別の実施形態では、シート生成部は、完全ライングループモードにおいて次のライングループを、または実質的に高いモードにおいて次の下側部分を識別するのではなく、単に「次」に類似した要求を発行するだけである(例えば、要求は、単に、同じ完全な/仮想的に高いライングループ内の「次の」完全なライングループまたは「次の」下側部分または「次の」画像データが座標なしで指されていることを示す)。
この通信路をサポートするために、ラインバッファユニットおよび/またはラインバッファユニットインタフェースは、次のライングループ/部分が何であるかを理解するよう状態レジスタ空間を含む。図11bは、シート生成部が、単に、ライングループの「次の」下側部分を、仮想的に高いモードで、その位置をX、Y座標で指定する必要なく指すことができるようにポインタ状態情報を保持するラインバッファインタフェースユニットの
強化された実施形態を示す。ここでは、書込ポインタ1141が、作成側シート生成部によって提供された下側部分を追跡するポインタ制御論理回路系1143によって維持される。本質的に、書込ポインタ1141は、作成側が送る予定の「次の」部分の位置を記憶する。さらに、ポインタ状態情報はシート生成部がX、Y座標を指定することなく(全幅モードで)「次の」全幅のライングループのみを指すことを可能にする(なぜなら、ラインバッファインタフェースユニットは画像についての次の全幅のライングループがどこにあるかを決定することができるからである)。
一実施形態では、ポインタは、1つ以上のX、Y座標として明示され、変換回路系は、それを線形アドレスに変換する。次の部分が受け取られると、ポインタ1141はポインタ制御論理回路系1143によって更新され、受け取られたばかりの部分に続く部分を指し示す。読出ポインタ1142は同様に動作するが、別の読出ポインタが各消費側に対して保持される(便宜上、再び1つの作成側のみが仮定される)。
完全ライングループモードの場合、「次の」全幅のライングループの位置は、グローバルレジスタ情報およびグローバルレベルで保持されるポインタの同様の構成から決定可能である。
d.実現例の実施形態
上述した様々な画像プロセッサアーキテクチャの特徴は、必ずしも従来の意味での画像処理に限定されず、したがって、画像プロセッサを再特徴付けしてもよい(またはしなくてもよい)他のアプリケーションに適用することができることを指摘することが適切である。例えば、実際のカメラ画像の処理とは対照的に、アニメーションの作成および/または生成および/またはレンダリングにおいて上述した様々な画像プロセッサアーキテクチャの特徴のいずれかが使用される場合、画像プロセッサはグラフィックス処理ユニットとして徳経づけられてもよい。さらに、上述した画像プロセッサアーキテクチャの特徴は、ビデオ処理、視覚処理、画像認識および/または機械学習などの他の技術的用途にも適用することができる。このように適用されて、画像プロセッサは、より汎用的なプロセッサ(例えば、コンピューティングシステムのCPUの一部であるか、またはその一部である)と(例えばコプロセッサとして)一体化されてもよく、またはコンピューティングシステム内のスタンドアロンプロセッサであってもよい。
上述したハードウェア設計の実施形態は、半導体チップ内において、および/または最終的に半導体製造プロセスに向けての回路設計の記述として実施することができる。後者の場合、そのような回路記述は、より高い/挙動レベルの回路記述(例えばVHDL記述)もしくはより低いレベルの回路記述(例えばレジスタ転送レベル(RTL)記述、トランジスタレベル記述もしくはマスク記述)またはそれらの様々な組み合わせの形態をとってもよい。回路記述は、典型的には、コンピュータ可読記憶媒体(例えばCD−ROMまたは他のタイプの記憶技術)上に実施される。
先のセクションから、上記の画像プロセッサは、(例えば、ハンドヘルド装置のカメラからのデータを処理するハンドヘルド装置のシステムオンチップ(SOC)の一部として)コンピュータシステム上のハードウェアで実施できることを認識することに関係する。画像プロセッサがハードウェア回路として実施される場合、画像プロセッサによって処理される画像データはカメラから直接受信されてもよいことに留意されたい。ここで、画像プロセッサは、別体のカメラの一部であってもよいし、一体化されたカメラを有するコンピューティングシステムの一部であってもよい。後者の場合、画像データは、カメラから直接、またはコンピューティングシステムのシステムメモリから受信することができる(例えば、カメラは、その画像データを画像プロセッサではなくシステムメモリに送信する)。先のセクションで説明した機能の多くは、(アニメーションをレンダリングする)グ
ラフィックスプロセッサユニットにも適用可能であることにも留意されたい。
図12は、コンピューティングシステムの例示的な図である。以下に説明するコンピューティングシステムのコンポーネントの多くは、一体化されたカメラおよび関連する画像プロセッサ(例えば、スマートフォンまたはタブレットコンピュータなどのハンドヘルドデバイス)を有するコンピューティングシステムに適用可能である。当業者は、2つの間の範囲を容易に定めることができるであろう。
図12に見られるように、基本的なコンピューティングシステムは、中央処理ユニット1201(例えば、マルチコアプロセッサまたはアプリケーションプロセッサ上に配置された複数の汎用処理コア1215_1〜1215_Nおよびメインメモリコントローラ1217を含み得る)、システムメモリ1202、ディスプレイ1203(例えばタッチスクリーン、フラットパネル)、ローカル有線ポイントツーポイントリンク(例えばUSB)インタフェース1204、様々なネットワークI/O機能1205(イーサネット(登録商標)インタフェースおよび/またはセルラーモデムサブシステムなど)、無線ローカルエリアネットワーク(例えばWiFi)インタフェース1206、ワイヤレスポイントツーポイントリンク(例えばブルートゥース(登録商標))インタフェース1207およびグローバルポジショニングシステムインタフェース1208、様々なセンサ1209_1〜1209_N、1つ以上のカメラ1210、バッテリ1211、電力管理制御ユニット1212、スピーカおよびマイクロホン1213、ならびに音声コーダ/デコーダ1214を含んでもよい。
アプリケーションプロセッサまたはマルチコアプロセッサ1250は、そのCPU1201内における1つ以上の汎用処理コア1215、1つ以上のグラフィカル処理ユニット1216、メモリ管理機能1217(例えばメモリコントローラ)、I/O制御機能1218および画像処理ユニット1219を含んでもよい。汎用処理コア1215は、典型的には、コンピューティングシステムのオペレーティングシステムおよびアプリケーションソフトウェアを実行する。グラフィックス処理ユニット1216は、典型的には、ディスプレイ1203上に提示されるグラフィックス情報を生成するために、グラフィックス集中型機能を実行する。メモリ制御機能1217は、システムメモリ1202とインタフェースして、システムメモリ1202との間でデータの書込/読出を行う。電力管理制御ユニット1212は、システム1200の電力消費を全体的に制御する。
画像処理ユニット1219は、先のセクションで説明した画像処理ユニットの実施形態のいずれかに従って実現することができる。代替的にまたは組み合わせて、IPU1219は、GPU1216およびCPU1201のいずれかまたは両方にそのコプロセッサとして結合されてもよい。さらに、様々な実施形態では、GPU1216は、上で説明した画像プロセッサの特徴のいずれかを用いて実現することができる。
タッチスクリーンディスプレイ1203、通信インタフェース1204〜1207、GPSインタフェース1208、センサ1209、カメラ1210、およびスピーカ/マイクコーデック1213,1214の各々はすべて、適切な場合には、一体化された周辺装置(例えば1つ以上のカメラ1210)も含むコンピューティングシステム全体に対して様々な形態のI/O(入力および/または出力)として見ることができる。実現例によっては、これらのI/Oコンポーネントの様々なものは、アプリケーションプロセッサ/マルチコアプロセッサ1250上に統合されてもよく、またはアプリケーションプロセッサ/マルチコアプロセッサ1250のダイから離れて、またはそのパッケージ外に配置されてもよい。
一実施形態では、1つ以上のカメラ1210は、カメラとその視野内の対象との間の深
度を測定することができる深度カメラを含む。アプリケーションプロセッサまたは他のプロセッサの汎用CPUコア(もしくはプログラムコードを実行するために命令実行パイプラインを有する他の機能ブロック)上で実行されるアプリケーションソフトウェア、オペレーティングシステムソフトウェア、デバイスドライバソフトウェアおよび/またはファームウェアは、上記の機能のいずれかを実行してもよい。
本発明の実施形態は、上述したような様々なプロセスを含むことができる。これらのプロセスは、機械実行可能命令で実施されてもよい。これらの命令は、汎用または特殊目的のプロセッサに特定のプロセスを実行させるために使用できる。代替的に、これらのプロセスは、プロセスを実行するためのハードワイヤード論理を含む特定のハードウェアコンポーネントによって、またはプログラミングされたコンピュータコンポーネントとカスタムハードウェアコンポーネントとの任意の組み合わせによって実行されてもよい。
本発明の要素はまた、機械実行可能命令を記憶するための機械可読媒体として提供されてもよい。機械可読媒体は、フロッピーディスク、光ディスク、CD−ROM、および光磁気ディスク、フラッシュメモリ、ROM、RAM、EPROM、EEPROM、磁気もしくは光カード、伝搬媒体、または電子命令を記憶するのに適した他のタイプの媒体/機械可読媒体を含むが、それらに限定はされない。例えば、本発明は、搬送波または通信リンク(例えばモデムもしくはネットワーク接続)を介する他の伝搬媒体で実施されたデータ信号によって、遠隔のコンピュータ(例えばサーバ)から要求側コンピュータ(例えばクライアント)に転送され得るコンピュータプログラムとしてダウンロードすることができる。
前述の明細書では、本発明をその特定の例示的な実施形態を参照して説明した。しかしながら、特許請求の範囲に記載される本発明のより広い精神および範囲から逸脱することなく、様々な修正および変更がなされ得ることは明らかであろう。したがって、明細書および図面は、限定的ではなく例示的なものとみなされるべきである。

Claims (16)

  1. デバイスであって、
    複数のラインバッファインタフェースユニットと、
    複数のライングループに分割された画像データを格納するよう構成されたメモリユニットとを備え、
    前記デバイスは、前記複数のライングループのそれぞれのライングループに対する読出および書込要求を管理するよう、各ラインバッファインタフェースユニットを割当てるように構成され、
    各ラインバッファインタフェースユニットは、作成側コンポーネントから書込要求を受信し、前記書込要求に対応する前記メモリユニット内の書込位置を特定し、前記書込要求に従って前記メモリユニット内の前記書込位置にデータを格納するように構成され、
    各ラインバッファインタフェースユニットは、1つ以上の消費側コンポーネントから読出要求を受信し、前記読出要求に対応する前記メモリユニット内の読出位置を特定し、前記読出要求に従って前記メモリユニット内の前記読出位置に格納されたデータを提供するよう構成され
    あるラインバッファインタフェースユニットが、特定のライングループについて1つ以上の消費側コンポーネントからのすべての未処理の読出要求を完了すると、前記デバイスは、異なるライングループに対する読出および書込要求を管理するよう、前記あるラインバッファインタフェースユニットを再割り当てするよう構成され、
    各ラインバッファインタフェースユニットは、前記各ラインバッファインタフェースユニットが割当てられるライングループのプロパティを表すデータを格納するように構成された専用のプログラマブルなユニット構成空間を有し、
    あるラインバッファインタフェースユニットが第1のライングループから第2のライングループに再割り当てされると、前記デバイスは、前記第2のライングループのプロパティを表すよう、前記あるラインバッファインタフェースユニットの前記プログラマブルなユニット構成空間内のデータを更新する、デバイス。
  2. 前記プログラマブルなユニット構成空間内の前記データは、前記ラインバッファインタフェースユニットが同時にサービスすることができる最大数の消費側コンポーネント、前記ライングループの行幅、または前記ライングループの前記メモリユニットにおけるベース線形アドレスを表す、請求項に記載のデバイス。
  3. 前記デバイスは、画像データが前記メモリユニットに格納された画像の全体のサイズを表すデータを格納するように構成されたプログラマブルなグローバル構成空間を有する、請求項またはに記載のデバイス。
  4. 前記プログラマブルなグローバル構成空間は、複数のアクティブなラインバッファインタフェースユニットを表すデータを格納するように構成される、請求項に記載のデバイス。
  5. 前記デバイスは、前記プログラマブルなユニット構成空間内の1つ以上のデータ値を、前記デバイスのプログラマブルなグローバル構成空間内の1つ以上のデータ値から動的に計算するように構成される、請求項に記載のデバイス。
  6. 前記デバイスは、前記プログラマブルなグローバル構成空間の画像サイズおよびステンシル寸法要素から前記プログラマブルなユニット構成空間内の複数の完全なライングループの行またはライングループベースアドレスを計算するように構成される、請求項に記載のデバイス。
  7. 各ラインバッファインタフェースユニットは、値の対を前記メモリユニット内の線形アドレスに変換するように構成された変換回路系を有する、請求項1〜のいずれか1項に記載のデバイス。
  8. 各ラインバッファインタフェースユニットは、次の読出要求で提供されるべきライングループの現在または次のセグメントに対してポインタを維持するよう構成される、請求項1〜のいずれか1項に記載のデバイス。
  9. 複数のラインバッファインタフェースユニットと、複数のライングループに分割された画像データを格納するメモリユニットとを有するデバイスが、前記複数のライングループのそれぞれのライングループに対する読出および書込要求を管理するよう、各ラインバッファインタフェースユニットを割当てることと、
    前記複数のラインバッファインタフェースユニットのうちの特定のラインバッファインタフェースユニットが、前記デバイスの作成側コンポーネントから書込要求を受信することと、
    前記特定のラインバッファインタフェースユニットが、前記書込要求に対応する前記メモリユニット内の書込位置を特定することと、
    前記特定のラインバッファインタフェースユニットが、前記書込要求に従って前記メモリユニット内の前記書込位置にデータを格納することと、
    前記特定のラインバッファインタフェースユニットが、前記デバイスの1つ以上の消費側コンポーネントから読出要求を受信することと、
    前記特定のラインバッファインタフェースユニットが、前記読出要求に対応する前記メモリユニット内の読出位置を特定することと、
    前記特定のラインバッファインタフェースユニットが、前記読出要求に従って前記メモリユニット内の前記読出位置に格納されたデータを提供すること
    あるラインバッファインタフェースユニットが特定のライングループに対する1つ以上の消費側コンポーネントからのすべての未処理の読出要求を完了した、という指示を前記デバイスが受信することと、
    これに応答して、前記デバイスが、異なるライングループに対する読出および書込要求を管理するよう、前記あるラインバッファインタフェースユニットを再割り当てすることとを備え
    各ラインバッファインタフェースユニットは、前記各ラインバッファインタフェースユニットが割当てられるライングループのプロパティを表すデータを格納するように構成された専用のプログラマブルなユニット構成空間を有し、
    前記ラインバッファインタフェースユニットを再割り当てすることは、前記デバイスが、前記異なるライングループのプロパティを表すよう、前記ラインバッファインタフェースユニットの前記プログラマブルなユニット構成空間内のデータを更新することを含む、方法。
  10. 前記プログラマブルなユニット構成空間内の前記データは、前記ラインバッファインタフェースユニットが同時にサービスすることができる最大数の消費側コンポーネント、前記ライングループの行幅、または前記ライングループの前記メモリユニットにおけるベース線形アドレスを表す、請求項に記載の方法。
  11. 前記デバイスは、画像データが前記メモリユニットに格納された画像の全体のサイズを表すデータを格納するように構成されたプログラマブルなグローバル構成空間を有する、請求項または10に記載の方法。
  12. 前記プログラマブルなグローバル構成空間は、複数のアクティブなラインバッファインタフェースユニットを表すデータを格納するように構成される、請求項11に記載の方法。
  13. 前記デバイスが、前記プログラマブルなユニット構成空間内の1つ以上のデータ値を、前記デバイスのプログラマブルなグローバル構成空間内の1つ以上のデータ値から動的に計算することをさらに備える、請求項に記載の方法。
  14. 前記デバイスが、前記プログラマブルなグローバル構成空間の画像サイズおよびステンシル寸法要素から前記プログラマブルなユニット構成空間内の複数の完全なライングループの行またはライングループベースアドレスを計算することをさらに備える、請求項13に記載の方法。
  15. 各ラインバッファインタフェースユニットは変換回路系を有し、前記特定のラインバッファインタフェースユニットの変換回路系が、値の対を前記メモリユニット内の線形アドレスに変換することをさらに備える、請求項14のいずれか1項に記載の方法。
  16. 前記特定のラインバッファインタフェースユニットが、次の読出要求で提供されるべきライングループの現在または次のセグメントに対してポインタを維持することをさらに備える、請求項15のいずれか1項に記載の方法。
JP2018176186A 2015-04-23 2018-09-20 画像プロセッサのためのラインバッファユニット Active JP6793162B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/694,712 2015-04-23
US14/694,712 US9756268B2 (en) 2015-04-23 2015-04-23 Line buffer unit for image processor

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2017550919A Division JP6408717B2 (ja) 2015-04-23 2016-03-31 画像プロセッサのためのラインバッファユニット

Publications (3)

Publication Number Publication Date
JP2019053736A JP2019053736A (ja) 2019-04-04
JP2019053736A5 JP2019053736A5 (ja) 2019-05-16
JP6793162B2 true JP6793162B2 (ja) 2020-12-02

Family

ID=55754441

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2017550919A Active JP6408717B2 (ja) 2015-04-23 2016-03-31 画像プロセッサのためのラインバッファユニット
JP2018176186A Active JP6793162B2 (ja) 2015-04-23 2018-09-20 画像プロセッサのためのラインバッファユニット

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP2017550919A Active JP6408717B2 (ja) 2015-04-23 2016-03-31 画像プロセッサのためのラインバッファユニット

Country Status (7)

Country Link
US (4) US9756268B2 (ja)
EP (1) EP3286723B1 (ja)
JP (2) JP6408717B2 (ja)
KR (1) KR102013404B1 (ja)
CN (1) CN107533751B (ja)
DE (1) DE112016001866T5 (ja)
WO (1) WO2016171869A1 (ja)

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9749548B2 (en) 2015-01-22 2017-08-29 Google Inc. Virtual linebuffers for image signal processors
US9756268B2 (en) 2015-04-23 2017-09-05 Google Inc. Line buffer unit for image processor
GB2539461B (en) * 2015-06-16 2020-01-08 Canon Kk Image data encapsulation
US9830150B2 (en) 2015-12-04 2017-11-28 Google Llc Multi-functional execution lane for image processor
US10313641B2 (en) 2015-12-04 2019-06-04 Google Llc Shift register with reduced wiring complexity
US10387988B2 (en) 2016-02-26 2019-08-20 Google Llc Compiler techniques for mapping program code to a high performance, power efficient, programmable image processing hardware platform
US10204396B2 (en) 2016-02-26 2019-02-12 Google Llc Compiler managed memory for image processor
US10380969B2 (en) 2016-02-28 2019-08-13 Google Llc Macro I/O unit for image processor
US10699362B2 (en) * 2016-06-23 2020-06-30 Intel Corporation Divergent control flow for fused EUs
US10546211B2 (en) 2016-07-01 2020-01-28 Google Llc Convolutional neural network on programmable two dimensional image processor
US20180005059A1 (en) 2016-07-01 2018-01-04 Google Inc. Statistics Operations On Two Dimensional Image Processor
US20180007302A1 (en) 2016-07-01 2018-01-04 Google Inc. Block Operations For An Image Processor Having A Two-Dimensional Execution Lane Array and A Two-Dimensional Shift Register
US20180005346A1 (en) 2016-07-01 2018-01-04 Google Inc. Core Processes For Block Operations On An Image Processor Having A Two-Dimensional Execution Lane Array and A Two-Dimensional Shift Register
US10489199B2 (en) * 2017-05-12 2019-11-26 Google Llc Program code transformations to improve image processor runtime efficiency
US10467056B2 (en) 2017-05-12 2019-11-05 Google Llc Configuration of application software on multi-core image processor
US10430919B2 (en) 2017-05-12 2019-10-01 Google Llc Determination of per line buffer unit memory allocation
US10503689B2 (en) * 2017-05-15 2019-12-10 Google Llc Image processor I/O unit
US10489878B2 (en) * 2017-05-15 2019-11-26 Google Llc Configurable and programmable image processor unit
US10657617B1 (en) * 2018-11-26 2020-05-19 GM Global Technology Operations LLC Method and apparatus for memory access management for data processing
US11221976B2 (en) * 2019-01-25 2022-01-11 Microchip Technology Incorporated Allocation of buffer interfaces for moving data, and related systems, methods and devices
CN111506520B (zh) 2020-07-01 2020-09-22 腾讯科技(深圳)有限公司 一种地址生成的方法、相关装置以及存储介质

Family Cites Families (92)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4445177A (en) 1981-05-22 1984-04-24 Data General Corporation Digital data processing system utilizing a unique arithmetic logic unit for handling uniquely identifiable addresses for operands and instructions
US4835712A (en) 1986-04-14 1989-05-30 Pixar Methods and apparatus for imaging volume data with shading
JP2554255B2 (ja) 1987-03-23 1996-11-13 旭光学工業株式会社 フイルタリング装置
EP0293701B1 (en) 1987-06-01 1994-08-10 Applied Intelligent Systems, Inc. Parallel neighborhood processing system and method
US4935894A (en) 1987-08-31 1990-06-19 Motorola, Inc. Multi-processor, multi-bus system with bus interface comprising FIFO register stocks for receiving and transmitting data and control information
US5253308A (en) 1989-06-21 1993-10-12 Amber Engineering, Inc. Massively parallel digital image data processor using pixel-mapped input/output and relative indexed addressing
WO1994009595A1 (en) 1991-09-20 1994-04-28 Shaw Venson M Method and apparatus including system architecture for multimedia communications
JP3482660B2 (ja) 1993-09-08 2003-12-22 ソニー株式会社 画像データ処理装置および画像データ処理方法
US5612693A (en) 1994-12-14 1997-03-18 International Business Machines Corporation Sliding window data compression using a toroidal bit shift register
DE59607143D1 (de) 1996-01-15 2001-07-26 Infineon Technologies Ag Prozessor zur bildverarbeitung
US6031573A (en) 1996-10-31 2000-02-29 Sensormatic Electronics Corporation Intelligent video information management system performing multiple functions in parallel
US5892962A (en) 1996-11-12 1999-04-06 Lucent Technologies Inc. FPGA-based processor
JP3593439B2 (ja) 1997-06-09 2004-11-24 株式会社日立製作所 画像処理装置
US6148111A (en) * 1998-04-27 2000-11-14 The United States Of America As Represented By The Secretary Of The Navy Parallel digital image compression system for exploiting zerotree redundancies in wavelet coefficients
US6366289B1 (en) * 1998-07-17 2002-04-02 Microsoft Corporation Method and system for managing a display image in compressed and uncompressed blocks
US6587158B1 (en) 1998-07-23 2003-07-01 Dvdo, Inc. Method and apparatus for reducing on-chip memory in vertical video processing
US7010177B1 (en) 1998-08-27 2006-03-07 Intel Corporation Portability of digital images
JP2000251065A (ja) 1999-03-02 2000-09-14 Fuji Xerox Co Ltd 画像処理装置
US6757019B1 (en) * 1999-03-13 2004-06-29 The Board Of Trustees Of The Leland Stanford Junior University Low-power parallel processor and imager having peripheral control circuitry
US6970196B1 (en) 1999-03-16 2005-11-29 Hamamatsu Photonics K.K. High-speed vision sensor with image processing function
JP3922859B2 (ja) 1999-12-28 2007-05-30 株式会社リコー 画像処理装置、画像処理方法およびその方法をコンピュータに実行させるプログラムを記録したコンピュータ読み取り可能な記録媒体
US6745319B1 (en) 2000-02-18 2004-06-01 Texas Instruments Incorporated Microprocessor with instructions for shuffling and dealing data
US6728862B1 (en) 2000-05-22 2004-04-27 Gazelle Technology Corporation Processor array and parallel data processing methods
US6728722B1 (en) * 2000-08-28 2004-04-27 Sun Microsystems, Inc. General data structure for describing logical data spaces
US6986025B2 (en) 2001-06-11 2006-01-10 Broadcom Corporation Conditional execution per lane
JP3559021B2 (ja) * 2001-10-31 2004-08-25 株式会社リコー データ変換装置,画像処理装置およびデータ変換方法
US7286717B2 (en) 2001-10-31 2007-10-23 Ricoh Company, Ltd. Image data processing device processing a plurality of series of data items simultaneously in parallel
JP4146654B2 (ja) * 2002-02-28 2008-09-10 株式会社リコー 画像処理回路、複合画像処理回路、および、画像形成装置
US9170812B2 (en) 2002-03-21 2015-10-27 Pact Xpp Technologies Ag Data processing system having integrated pipelined array data processor
WO2003088033A1 (en) 2002-04-09 2003-10-23 University Of Rochester Multiplier-based processor-in-memory architectures for image and graphics processing
WO2004021176A2 (de) 2002-08-07 2004-03-11 Pact Xpp Technologies Ag Verfahren und vorrichtung zur datenverarbeitung
GB2395299B (en) * 2002-09-17 2006-06-21 Micron Technology Inc Control of processing elements in parallel processors
US7225301B2 (en) 2002-11-22 2007-05-29 Quicksilver Technologies External memory controller node
JP2004215242A (ja) * 2002-12-16 2004-07-29 Ricoh Co Ltd データ処理装置,画像処理装置および画像形成装置
GB2398446B (en) 2003-02-12 2006-06-07 Snell & Wilcox Ltd Image processing
US20060044576A1 (en) 2004-07-30 2006-03-02 Kabushiki Kaisha Toshiba Apparatus for image processing
US7667764B2 (en) 2004-06-04 2010-02-23 Konica Minolta Holdings, Inc. Image sensing apparatus
JP4219887B2 (ja) * 2004-12-28 2009-02-04 富士通マイクロエレクトロニクス株式会社 画像処理装置及び画像処理方法
US7581851B2 (en) 2005-01-03 2009-09-01 Jessica Wang Scented lighting devices and systems, and methods for making the same
EP1877927B1 (en) 2005-04-28 2011-03-30 The University Court of the University of Edinburgh Reconfigurable instruction cell array
US7882339B2 (en) 2005-06-23 2011-02-01 Intel Corporation Primitives to enhance thread-level speculation
JP2007034887A (ja) * 2005-07-29 2007-02-08 Matsushita Electric Ind Co Ltd ハイレベル合成コンパイラ用のシフトレジスタファイルを自動生成するための方法および装置
JP2007067917A (ja) 2005-08-31 2007-03-15 Matsushita Electric Ind Co Ltd 画像データ処理装置
US7602974B2 (en) * 2005-10-21 2009-10-13 Mobilic Technology (Cayman) Corp. Universal fixed-pixel-size ISP scheme
FR2895103B1 (fr) 2005-12-19 2008-02-22 Dxo Labs Sa Procede et systeme de traitement de donnees numeriques
US7802073B1 (en) 2006-03-29 2010-09-21 Oracle America, Inc. Virtual core management
US7834873B2 (en) 2006-08-25 2010-11-16 Intel Corporation Display processing line buffers incorporating pipeline overlap
US20080111823A1 (en) 2006-11-13 2008-05-15 Faraday Technology Corp. Graphics processing system
EP1927949A1 (en) 2006-12-01 2008-06-04 Thomson Licensing Array of processing elements with local registers
US8321849B2 (en) 2007-01-26 2012-11-27 Nvidia Corporation Virtual architecture and instruction set for parallel thread computing
JP2008192038A (ja) 2007-02-07 2008-08-21 Mitsubishi Electric Corp 画像前処理装置
US20080244222A1 (en) 2007-03-30 2008-10-02 Intel Corporation Many-core processing using virtual processors
US8068114B2 (en) 2007-04-30 2011-11-29 Advanced Micro Devices, Inc. Mechanism for granting controlled access to a shared resource
JP4389976B2 (ja) 2007-06-29 2009-12-24 ブラザー工業株式会社 画像処理装置および画像処理プログラム
JP2009021459A (ja) 2007-07-13 2009-01-29 Fuji Xerox Co Ltd 面発光型半導体レーザの駆動方法および光伝送モジュール
US8599208B2 (en) * 2007-08-15 2013-12-03 Nvidia Corporation Shared readable and writeable global values in a graphics processor unit pipeline
EP2192765B1 (en) 2007-09-05 2015-11-11 Tohoku University Solid-state image sensor and drive method for the same
JP4917561B2 (ja) 2008-03-18 2012-04-18 株式会社リコー 画像処理装置
KR101474478B1 (ko) 2008-05-30 2014-12-19 어드밴스드 마이크로 디바이시즈, 인코포레이티드 로컬 및 글로벌 데이터 공유
JP4999791B2 (ja) 2008-06-30 2012-08-15 キヤノン株式会社 情報処理装置、その制御方法、及びプログラム
US8456480B2 (en) 2009-01-14 2013-06-04 Calos Fund Limited Liability Company Method for chaining image-processing functions on a SIMD processor
US8332794B2 (en) 2009-01-22 2012-12-11 Taiwan Semiconductor Manufacturing Company, Ltd. Circuits and methods for programmable transistor array
KR101572879B1 (ko) 2009-04-29 2015-12-01 삼성전자주식회사 병렬 응용 프로그램을 동적으로 병렬처리 하는 시스템 및 방법
US8626810B2 (en) 2009-05-15 2014-01-07 Texas Instruments Incorporated Method and system for finite impulse response (FIR) digital filtering
US20110055495A1 (en) 2009-08-28 2011-03-03 Qualcomm Incorporated Memory Controller Page Management Devices, Systems, and Methods
US8976195B1 (en) 2009-10-14 2015-03-10 Nvidia Corporation Generating clip state for a batch of vertices
US8436857B2 (en) 2009-10-20 2013-05-07 Oracle America, Inc. System and method for applying level of detail schemes
JP5185242B2 (ja) 2009-12-04 2013-04-17 株式会社東芝 コンパイル装置
US8595428B2 (en) 2009-12-22 2013-11-26 Intel Corporation Memory controller functionalities to support data swizzling
US8896668B2 (en) * 2010-04-05 2014-11-25 Qualcomm Incorporated Combining data from multiple image sensors
US8749667B2 (en) 2010-08-02 2014-06-10 Texas Instruments Incorporated System and method for maintaining maximum input rate while up-scaling an image vertically
US8508612B2 (en) * 2010-09-30 2013-08-13 Apple Inc. Image signal processor line buffer configuration for processing ram image data
US8797323B2 (en) 2011-01-18 2014-08-05 Intel Corporation Shadowing dynamic volumetric media
CN103339604B (zh) 2011-01-31 2016-10-26 株式会社索思未来 程序生成装置、程序生成方法、处理器装置以及多处理器系统
US9092267B2 (en) 2011-06-20 2015-07-28 Qualcomm Incorporated Memory sharing in graphics processing unit
US20130027416A1 (en) 2011-07-25 2013-01-31 Karthikeyan Vaithianathan Gather method and apparatus for media processing accelerators
JP5742651B2 (ja) 2011-10-15 2015-07-01 コニカミノルタ株式会社 画像処理装置、連携方法および連携プログラム
JP5746100B2 (ja) 2011-12-27 2015-07-08 京セラドキュメントソリューションズ株式会社 画像形成装置
US8823736B2 (en) 2012-01-20 2014-09-02 Intel Corporation Graphics tiling architecture with bounding volume hierarchies
US10244246B2 (en) 2012-02-02 2019-03-26 Texas Instruments Incorporated Sub-pictures for pixel rate balancing on multi-core platforms
US9235769B2 (en) 2012-03-15 2016-01-12 Herta Security, S.L. Parallel object detection method for heterogeneous multithreaded microarchitectures
TWI520598B (zh) * 2012-05-23 2016-02-01 晨星半導體股份有限公司 影像處理裝置與影像處理方法
US8953882B2 (en) 2012-05-31 2015-02-10 Apple Inc. Systems and methods for determining noise statistics of image data
US20140019486A1 (en) 2012-07-13 2014-01-16 Amitava Majumdar Logic Content Processing for Hardware Acceleration of Multi-Pattern Search
US9232139B2 (en) 2012-07-24 2016-01-05 Apple Inc. Image stabilization using striped output transformation unit
US9378181B2 (en) 2012-11-09 2016-06-28 Intel Corporation Scalable computing array
US9058673B2 (en) 2013-03-15 2015-06-16 Oracle International Corporation Image mosaicking using a virtual grid
US8954992B2 (en) 2013-03-15 2015-02-10 Lenovo Enterprise Solutions (Singapore) Pte. Ltd. Distributed and scaled-out network switch and packet processing
US9477999B2 (en) * 2013-09-20 2016-10-25 The Board Of Trustees Of The Leland Stanford Junior University Low power programmable image processor
US9684944B2 (en) 2015-01-16 2017-06-20 Intel Corporation Graph-based application programming interface architectures with node-based destination-source mapping for enhanced image processing parallelism
US9749548B2 (en) 2015-01-22 2017-08-29 Google Inc. Virtual linebuffers for image signal processors
US9756268B2 (en) 2015-04-23 2017-09-05 Google Inc. Line buffer unit for image processor

Also Published As

Publication number Publication date
JP2018513476A (ja) 2018-05-24
US10638073B2 (en) 2020-04-28
KR20170125392A (ko) 2017-11-14
KR102013404B1 (ko) 2019-08-22
US10321077B2 (en) 2019-06-11
US20200275040A1 (en) 2020-08-27
CN107533751A (zh) 2018-01-02
US20170257585A1 (en) 2017-09-07
US9756268B2 (en) 2017-09-05
US20160316157A1 (en) 2016-10-27
DE112016001866T5 (de) 2018-01-25
JP2019053736A (ja) 2019-04-04
EP3286723A1 (en) 2018-02-28
US11190718B2 (en) 2021-11-30
CN107533751B (zh) 2020-10-27
JP6408717B2 (ja) 2018-10-17
US20190327433A1 (en) 2019-10-24
EP3286723B1 (en) 2020-10-07
WO2016171869A1 (en) 2016-10-27

Similar Documents

Publication Publication Date Title
JP6793162B2 (ja) 画像プロセッサのためのラインバッファユニット
JP6858239B2 (ja) プログラムコードを、高性能で電力効率の良いプログラマブルな画像処理ハードウェアプラットフォームにマッピングするためのコンパイラ技法
JP7202987B2 (ja) 高性能で、電力効率の良い、プログラマブルな画像処理のためのアーキテクチャ
US10216487B2 (en) Virtual image processor instruction set architecture (ISA) and memory model and exemplary target hardware having a two-dimensional shift array structure
JP6750022B2 (ja) 画像プロセッサのためのマクロi/oユニット

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190328

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190328

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20200630

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20200707

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20201005

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20201013

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20201109

R150 Certificate of patent or registration of utility model

Ref document number: 6793162

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250