JP6750022B2 - 画像プロセッサのためのマクロi/oユニット - Google Patents

画像プロセッサのためのマクロi/oユニット Download PDF

Info

Publication number
JP6750022B2
JP6750022B2 JP2018539874A JP2018539874A JP6750022B2 JP 6750022 B2 JP6750022 B2 JP 6750022B2 JP 2018539874 A JP2018539874 A JP 2018539874A JP 2018539874 A JP2018539874 A JP 2018539874A JP 6750022 B2 JP6750022 B2 JP 6750022B2
Authority
JP
Japan
Prior art keywords
line group
line
image
image processor
processor
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
JP2018539874A
Other languages
English (en)
Other versions
JP2019509549A (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 JP2019509549A publication Critical patent/JP2019509549A/ja
Application granted granted Critical
Publication of JP6750022B2 publication Critical patent/JP6750022B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G5/00Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
    • G09G5/003Details of a display terminal, the details relating to the control arrangement of the display terminal and to the interfaces thereto
    • G09G5/006Details of the interface to the display terminal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/17Interprocessor communication using an input/output type connection, e.g. channel, I/O port
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G5/00Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
    • G09G5/02Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the way in which colour is displayed
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N1/00Scanning, transmission or reproduction of documents or the like, e.g. facsimile transmission; Details thereof
    • H04N1/32Circuits or arrangements for control or supervision between transmitter and receiver or between image input and image output device, e.g. between a still-image camera and its memory or between a still-image camera and a printer device
    • H04N1/32358Circuits or arrangements for control or supervision between transmitter and receiver or between image input and image output device, e.g. between a still-image camera and its memory or between a still-image camera and a printer device using picture signal storage, e.g. at transmitter
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2200/00Indexing scheme for image data processing or generation, in general
    • G06T2200/28Indexing scheme for image data processing or generation, in general involving image processing hardware
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G2340/00Aspects of display data processing
    • G09G2340/02Handling of images in compressed format, e.g. JPEG, MPEG
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N2201/00Indexing scheme relating to scanning, transmission or reproduction of documents or the like, and to details thereof
    • H04N2201/32Circuits or arrangements for control or supervision between transmitter and receiver or between image input and image output device, e.g. between a still-image camera and its memory or between a still-image camera and a printer device
    • H04N2201/3285Circuits or arrangements for control or supervision between transmitter and receiver or between image input and image output device, e.g. between a still-image camera and its memory or between a still-image camera and a printer device using picture signal storage, e.g. at transmitter
    • H04N2201/329Storage of less than a complete document page or image frame
    • H04N2201/3291Storage of less than a complete document page or image frame of less than a complete line of data

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Image Processing (AREA)
  • Memory System (AREA)

Description

関連事例
この出願は、2016年2月28日に出願された米国仮出願第62/300,880号「画像プロセッサのためのマクロI/Oユニット(“Macro I/O Unit For Image Processor”)」の利益を主張し、その全体をここに引用により援用する。
発明の分野
本発明は、一般に、画像処理に関し、特に、画像プロセッサのためのマクロI/Oユニットに関する。
背景
画像処理は、典型的には、アレイに編成されたピクセル値の処理を含む。ここで、空間的に編成された二次元アレイは、画像の二次元的性質を捕捉する(追加の次元は、時間(例えば二次元画像のシーケンス)およびデータタイプ(例えば色)を含み得る。典型的なケースでは、アレイ化されたピクセル値は、静止画像または動きの画像を捕捉するためにフレームのシーケンスを生成したカメラによって提供される。伝統的な画像プロセッサは、典型的には、2つの極端な側面のいずれかに分類される。
第1の極端な側面は、汎用プロセッサまたは汎用状プロセッサ(例えばベクトル命令拡張を備えた汎用プロセッサ)上で実行されるソフトウェアプログラムとして画像処理タスクを実行する。第1の極端な側面は、一般的に非常に汎用性の高いアプリケーションソフトウェア開発プラットフォームを提供するが、関連するオーバーヘッド(例えば、命令フェッチおよびデコード、オンチップおよびオフチップデータの処理、投機的実行)と組み合わされたより精細な粒子のデータ構造の使用は、究極的には、プログラムコードの実行中に、データの単位あたり、より多くのエネルギーが消費される結果となる。
第2の逆の極端な側面は、固定機能のハードワイヤード回路系をはるかに大きなデータブロックに適用する。カスタム設計された回路に直接適用される、(粒度の細かいブロックとは対照的な)より大きなデータブロックの使用は、データ単位あたりの消費電力を大幅に削減する。しかしながら、カスタム設計された固定機能回路系の使用は、一般に、プロセッサが実行することができるタスクのセットが限られる結果となる。このように、(第1の極端な側面に関連する)幅広く汎用性の高いプログラミング環境は第2の極端な側面においては欠けている。
高度に汎用性の高いアプリケーションソフトウェア開発の機会と、データ単位あたりの電力効率の向上とを両立させた技術プラットフォームは、依然として望ましいが、欠けている解決策である。
概要
画像プロセッサが記載される。画像プロセッサは、画像プロセッサによる処理のために外部メモリから入力画像データを読み出し、画像プロセッサからの出力画像データを外部メモリに書き込むI/Oユニットを備える。I/Oユニットは、複数の論理チャネルユニットを含む。各論理チャネルユニットは、外部メモリと画像プロセッサ内のそれぞれの作成構成要素または消費構成要素との間に論理チャネルを形成する。各論理チャネルユニットは、再フォーマット回路系およびアドレス指定回路系を利用するように設計される。アドレス指定回路系は、外部メモリに適用されるアドレス指定スキーム、および外部メモリとそれぞれの作成構成要素または消費構成要素との間の画像データの再フォーマットを制御する。再フォーマット回路系は再フォーマットを実行する。
装置が記載される。装置は、画像プロセッサ内における消費構成要素への論理接続を可能にするための手段を含む。装置はまた、画像データのフレームから一連の制限された幅の画像領域を読み出すための手段を含み、各画像領域はRGBフォーマットに従ってフォーマットされている。装置はまた、一連の制限された幅の画像領域を同じ色を有する画像データのブロックに再フォーマットするための手段を含む。装置はまた、同じ色を有する画像データのブロックを消費構成要素に転送するための手段を含む。
図面のリスト
以下の説明および添付の図面は、本発明の実施形態を例示するために使用される。
技術プラットフォームの様々なコンポーネントを示す。 カーネルとともに構築されたアプリケーションソフトウェアの実施形態を示す。 カーネルの構造の実施形態を示す。 カーネルの動作の実施形態を示す。 画像プロセッサハードウェアアーキテクチャの実施形態を示す。 画像データのライングループへの解析、ライングループのシートへの解析、および重なり合うステンシルを伴うシートに対して実行される操作を示す。 画像データのライングループへの解析、ライングループのシートへの解析、および重なり合うステンシルを伴うシートに対して実行される操作を示す。 画像データのライングループへの解析、ライングループのシートへの解析、および重なり合うステンシルを伴うシートに対して実行される操作を示す。 画像データのライングループへの解析、ライングループのシートへの解析、および重なり合うステンシルを伴うシートに対して実行される操作を示す。 画像データのライングループへの解析、ライングループのシートへの解析、および重なり合うステンシルを伴うシートに対して実行される操作を示す。 ステンシルプロセッサの実施形態を示す。 画像プロセッサの構成およびプログラミングの実施形態を示す。 ライングループからなる画像フレームを示す。 ラインバッファユニットの設計および動作上の実施形態を示す。 ラインバッファユニットの設計および動作上の実施形態を示す。 ラインバッファユニットの設計および動作上の実施形態を示す。 画像プロセッサのプログラマブルなレジスタ空間の実施形態を示す。 画像プロセッサのプログラマブルなレジスタ空間の実施形態を示す。 仮想的に高い動作モードを示す。 仮想的に高い動作モードを示す。 マクロI/Oユニットの実施形態を示す。 マクロI/Oユニットの実施形態を示す。 マクロI/Oユニットの実施形態の第1の能力を示す。 マクロI/Oユニットの実施形態の第1の能力を示す。 マクロI/Oユニットの実施形態の第2の能力を示す。 マクロI/Oユニットの実施形態によって実行される方法を示す図である。 コンピューティングシステムの実施形態を示す。
詳細な記載
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座標値だけなど)。
4.0マクロI/Oユニットの実施形態
図4の議論から、入力画像データを画像プロセッサに供給するために、マクロI/Oユニット405は画像データのフレームをラインバッファユニット401に渡すことを想起されたい。同様に、画像プロセッサから、処理された画像データを、なんであれ画像プロセッサを利用しているシステムリソース(例えば、アプリケーションソフトウェアプログラム、ディスプレイ、カメラなど)に供給するために、画像データの処理された出力フレームが、ラインバッファユニット401からマクロI/Oユニット405に転送される。
図11aは、マクロI/Oユニット1105の実施形態をより詳細に示す。図11aに示すように、一実施形態によれば、マクロI/Oユニット1105は、画像プロセッサ1101の外部にあるメモリ1106に結合される。ここで、例えば、外部メモリ1106は、コンピュータシステムのシステムメモリ、画像プロセッサ1101が構成部分であるかまたは他の態様で関連付けられるカメラ、グラフィックスプロセッサ、アクセラレータおよび/またはコプロセッサへのローカルメモリであってもよい。外部メモリ1106は、画像プロセッサ1101の論理自体から外部にあり、したがって画像プロセッサの内部メモリ(ラインバッファユニット401またはシート生成部403にローカルなメモリなど)とは異なる任意のメモリであると理解される。
公称動作の間、画像プロセッサ1101によって処理される画像データの入力フレームは、まず外部メモリ1106に書き込まれる。マクロI/Oユニット1105は、次いで、外部メモリ1106から画像フレームを読み出し、画像プロセッサ1101に供給する。画像プロセッサ1101がフレームの1つ以上の十分な部分を処理し終えると、マクロI/Oユニットは、処理された部分を画像プロセッサの出力として外部メモリ1006に書き込む。フレーム自体が完全に処理される前に、フレームの一部を外部メモリに書き込むことができる。
図11aは、マクロI/Oユニット1105の実施形態の高次レベルの表現を示す。図11aに見られるように、マクロI/Oユニット1105は、外部メモリ1106と、外部メモリから読み出され画像プロセッサによって処理される画像データの内部消費側、または画像プロセッサから外部メモリ1106に書き出される必要がある出力画像データの内部作成側との間の論理チャネルを確立することを各々が担ういくつかの論理チャネルユニット1110_1〜1110_Nを含むように設計される。
様々な実施形態において、そのような消費側または作成側は、ラインバッファユニットまたはステンシルプロセッサのシート生成部であってもよい。ここで、図4を再び参照すると、一実施形態では、マクロI/Oユニット405は、ネットワーク404に直接結合され、ラインバッファユニット401だけでなく、特定のステンシルプロセッサ402の任意のシート生成部403への通信も許す。様々な他の実施形態では、ネットワーク404は、マクロI/Oユニット405が、図4によって示唆されたように直接ラインバッファユニット401にではなくネットワーク404を介してラインバッファユニット401に通信するという点で、よりグローバルである。
図11bは、論理チャネルユニット1110のための論理回路設計の実施形態を示す。図11bに見られるように、論理チャネルユニット1110は、ステートマシン論理回路1111、コンテキストレジスタ空間1112、再フォーマット論理1113、入力キュー1114、出力キュー1115、および他の論理チャネルユニットへの通信チャネル1116を含む。代替的な実施形態では、再フォーマット論理1113は、図11bによって示唆されるように各チャネルがそれ自体の専用の再フォーマット論理を有するのではなく、複数の論理チャネルユニットによって共有される単一の集中型ブロックとして実装され得ることに留意されたい。説明を簡単にするために、議論の残りの部分では、集中型の再フォーマットではなく、チャネルごとの再フォーマット論理ブロックが実装されていると仮定する。
論理チャネルユニット1110が受信した画像データは、入力キュー1114に受信される。入力キュー1114にある入力データのピクセルは、多くの場合、再フォーマット論理1113によって選択的に選択され、再フォーマット論理1113は入力キュー1114の入力ピクセルがフォーマットされるものとは異なるフォーマットに従って出力キュー1115に出力データの単位を構築する。すなわち、出力データのピクセルは、典型的には、入力キュー1114における入力ピクセルがフォーマットされているものとは異なるフォーマット構造に従って出力キュー1115において編成される。
例えば、外部メモリから画像プロセッサに入力データを供給する場合、外部メモリにある入力画像データは、RGB、RGB、RGB、ピクセルデータフォーマットに従って編成され得る。しかしながら、ステンシルプロセッサは、同じ色を有するピクセルデータのシート上で動作し得る。すなわち、ステンシルプロセッサは、Rピクセルのシート、Gピクセルのシート、およびBピクセルのシート上で別々に動作し得る。このように、入力画像データを、外部メモリにおけるそのフォーマットから、ステンシルプロセッサによって利用されるフォーマットに準備するために、再フォーマット論理1113は、例えば、入力キュー1114からRピクセルを選択して、Rピクセルのブロックを出力キュー1115に構築する。十分なサイズのRピクセルのブロックが出力キュー1115に構築されると、ブロックはラインバッファユニットまたはステンシルプロセッサのシート生成部に転送される。
例えば、Rピクセルの供給が尽きて画像プロセッサ内でより深く転送された後、再フォーマット論理1113は、入力キュー1114からGピクセルのみを選択して出力キュー1115にGピクセルのブロックを構築することができる。再び、Gピクセルの供給が尽きて転送された後、再フォーマット論理1113は、入力キュー1114からBピクセルを選択して、画像プロセッサ内でより深く転送するために出力キュー1105にBピクセルのブロックを構築する。
逆に、論理チャネルユニット1110が画像プロセッサからの出力画像の外部メモリへの書き込みをサポートするために使用される逆方向では、同じピクセルタイプのブロックが入力キュー1114にロードされる。すなわち、例えば、Rピクセル、Gピクセル、およびBピクセルのブロックが、ラインバッファユニットまたはステンシルプロセッサのシート生成部から入力キュー1114で受け取られる。再フォーマット論理1113は、これらのピクセルのうちのあるものを選択して、外部メモリに書き込むために、出力キュー1115において、元のRGB、RGBフォーマット構造を有する出力ブロックを形成する。
ステートマシン論理1111は、再フォーマット論理1113の再フォーマット挙動を制御し、外部メモリにアクセスする際にどのようなアドレスおよび/またはアドレス指定スキームを使用するかを決定するとともに、外部メモリへの論理チャネルを形成する際にそれがどのラインバッファユニットまたはシート生成部と通信しているかを理解する。
様々な実施形態では、ステートマシン論理1111および再フォーマット論理1113は、専用論理回路系とともに実装される。他の実施形態では、ステートマシン論理1111および/または再フォーマット論理1113は、ステートマシン/再フォーマット機能を実装するためのプログラムコードを実行するマイクロコントローラとして実装されてもよい。さらに他の実施形態では、ステートマシン論理1111/再フォーマット論理1113は、プログラムされた専用の論理回路系の組み合わせとして実装されてもよい。専用論理回路系は、ハードワイヤードおよび/またはプログラマブル論理回路(例えば、プログラマブル論理デバイス(PLD)、フィールドプログラマブルゲートアレイ(FPGA)またはプログラマブル論理アレイ(PLA)が後者の例である)として実装することができる。
ステートマシンがその様々な責任を理解するために参照する情報本体は、コンテキストレジスタ空間1112内に保持されるが、それは、まず、例えば画像プロセッサが特定のDAGまたはパイプラインを実行するように構成されているときに、そのDAGまたはパイプラインのための適切なコンテキスト情報がロードされる。DAGまたはパイプラインの実行中のレジスタ空間1112へのその後の更新は、ステートマシン論理1111、画像プロセッサ内の他のインテリジェンス(ステンシルプロセッサ内のスカラープロセッサおよび/または画像プロセッサを用いているシステム(例えば、コンピュータ、カメラなど))によってなされてもよい。
一実施形態では、コンテキストレジスタ空間1112は、以下の情報:1)入力データを画像プロセッサに供給する場合に外部メモリから読み出されるか、または画像プロセッサから出力データを書き込む場合に外部メモリに書き込まれる画像データのフレームのベース外部メモリアドレス、2)(例えば、ピクセルの単位における幅と重量の点での)画像フレームのサイズ、3)外部メモリにおけるデータのフォーマット、4)画像プロセッサ内で使用されるデータのフォーマット、および、5)チャネルが外部メモリに論理的に結合している特定のシート生成部、ステンシルプロセッサまたはラインバッファユニットの識別、を含む。様々な実施形態では、いずれの方向のサポートされた画像データフォーマットも、考えられるものの中でとりわけ、RGB、全て1色、パックされたRAW等を含む。
図11で見られるように、論理チャネルユニット1110はまた、複数の論理チャネル間の調整を行うために他の論理チャネルの状態を理解できるように、通信リンク1116を含む。一例として、画像プロセッサに入力データを供給している論理チャネルは、画像データを最初に画像プロセッサにロードした後、出力画像の次のフレームが画像プロセッサから外部メモリに書き込まれるまで、入力画像データの次のフレームを外部メモリから画像プロセッサにロードすることを控えるように構成することができる。そのような調整がなければ、画像プロセッサの内部メモリリソースは、例えば、いくつかのDAGまたはパイプライン設計についてはオーバーランする可能性がある。
さらに、図12a、図12bおよび図13は、論理チャネルのステートマシン1111が影響を及ぼすことができる種類の処理動作のいくつかの関連する特徴をさらに詳しく説明する。図12aおよび図12bは、論理バッファユニットがより効率的に動作できるように、論理チャネルユニットによって実行可能な外部メモリの特別なアドレス指定手順に関する。
図10aおよび図10bの議論から想起されるように、ラインバッファユニットは、「仮想的に高い」モードに従って動作することができ、このモードでは、前の行からのすべてのデータが完全に転送されるまで次の行からのデータが転送されない場合、全幅ラインバッファを渡したり、または全フレーム幅を横切ってラスタ走査を行なうのではなく、全フレーム幅を横切って延びていない二次元画像領域1004_1,1004_2がラインバッファからシート生成部に順次渡される。
図12aおよび図12bは、論理チャネルユニット1110のステートマシン論理1111が、論理バッファユニットの「仮想的に高い」技術などに従ったシート生成部へのデータ転送を補完するために実現できるメモリアドレス指定スキームを示しており、先行する行からのすべてのデータが完全に転送される前に、次の行からのデータが転送される。ここで、図12aを参照すると、画像領域1201は、例えば、図10aの画像データ1004_1を含む画像データとして見ることができる。
ここで、画像フレーム1220内の画像データ1201が外部メモリから読み出され、ラインバッファユニットに渡された後、ラインバッファユニットは画像データ1004_1をシート生成部に転送する。画像データ1201をラインバッファユニットに転送するためには、メモリアドレス指定は、画像フレーム1220のデータの全行を読み取ることを控えるべきであり、むしろ、行1210の限定された区域を読み取った後、ドロップダウンして、次の下位の行1211の次の限定された区域を読み取ることに注目されたい。
プロセスは、領域1201の全てが外部メモリから読み出されて(例えば、それは、限られた区域行1212の読み取りの後に完了する)、それがラインバッファユニットに渡されることができるようになるまで継続する。画像領域1201がラインバッファユニットに渡された後、ラインバッファユニットは画像データ1004_1をシート生成部に転送する立場にある。
図12bで見られるのと同じアプローチを続けると、次の画像領域1202が、図12aおよび画像領域1201に関して上述したように、同じアドレス指定技術1210,1211,…1212に従って、外部メモリから読み出される。特別なメモリアドレス指定アプローチによって画像領域1202が外部メモリから読み出された後、画像領域1202は、ラインバッファユニットに転送され、ラインバッファユニットは、図10bの画像データ1004_2を同じシート生成部に転送する立場になる。
このように、外部メモリと論理バッファユニットとの間に存在する論理チャネルユニットは、ラインバッファユニットが画像データをシート生成部に転送するのと同様にデータをラインバッファユニットに転送することができる。ラインバッファユニットがシート生成部に入力データを供給するのと同様の方法で入力データを論理バッファユニットに供給することにより、ラインバッファユニットの全体的なスループットおよび効率が向上する。なお、論理チャネルユニットは、外部メモリからの入力データの読み出しと、ラインバッファユニットへの入力データの転送との間で、上述のような再フォーマット(例えば、RGB→全てのR、全てのG、全てのB)を行ってもよい。
図12aおよび図12bの特殊アドレス指定モードは、画像プロセッサからの出力データを外部メモリに書き込む方向にも適用することができる。ここで、シート生成部は、処理された出力画像データをラインバッファに「仮想的に高い」モードで渡すことができ、それは、次いで、ラインバッファユニットを促して、図12の領域1201,1202に近い限られた区域を有する画像データの領域を論理チャネルユニットに転送させる。それに応答して、論理チャネルユニットは、同じ特殊アドレス指定手法1210,1211、1212に従って、データを外部メモリ書き込むことになる。再び再フォーマットすることを、ラインバッファユニットからの出力画像データの受信と外部メモリへの出力画像データの書き込みとの間で、論理チャネルによって実行してもよい。
図13は、別の特殊なアドレス指定手法に関しており、例えば、ステンシルプロセッサ上で実行するカーネルが、シーケンスにおいて順序付けられたりまたは整列されているのではなく、入力フレーム内の位置において、よりランダムまたはアドホックな個々の表面領域を具体的に要求する。例えば、図13で見られるように、ステンシルプロセッサは、入力フレーム(ライングループ、仮想的に高い、またはその他)の幅を横切って順序付けられたシーケンシャルなモードでデータを要求するのではなく、画像領域1301,1302,1303および1304を順次要求し得る。ここで、各領域1301〜1304は、図12a、図12bの限定区域アドレス指定手法1210,1211,…1212を、ただしアドホック画像領域1301〜1304の範囲内で用いることによって、読み出される。したがって、外部メモリ取り出し領域の形状は構成可能にされる。
順序付けされたシーケンスではなく、アドホックでの画像領域の処理は、例えば動き補償ルーチン(画像ストリーム内の特徴が移動する)、幾何学的歪みルーチン(例えば、収集された画像データのフレームが歪む、レンズまたは他の画像収集不完全を補償するため)、および行列の乗法または転置の操作に対して、有用であり得る。
一実施形態では、アドホックアドレス指定は、マクロI/Oユニット1105内で2つの論理チャネルユニット1110を消費する。第1の論理チャネルユニットは、ステンシルプロセッサが要求している各アドホック画像領域のベース座標値を受け取る。例えば、所望の画像領域は、ステンシルプロセッサが、その領域の高さ及び幅を、その領域の左下隅のアドレスとともに識別することによって、指定されてもよい。
公称の動作が、各所望の領域が同じ幅および高さを有することを含む、と仮定すると、各所望の領域の左下隅の座標値を第1の論理チャネルユニットに転送することにより、一連のアドホック画像領域を識別することができる(例えば、まず、領域1301の左下隅の座標値が第1の論理チャネルユニットに送信され、次に領域1302の左下隅の座標値が第1の論理チャネルユニットに送信される、など)。次いで、第1の論理チャネルユニットは、受信された座標値を第2の論理チャネルユニットに(例えば、図11の通信チャネル1106を介して)転送し、それは、外部メモリから所望の領域を読み出し、再フォーマットして、要求元のステンシルプロセッサに転送する。アドホック画像領域のシーケンスがそれらの間に実質的な重なりを有し得ることに留意されたい。すなわち、第1の画像領域は、第2の画像領域も消費する同じ画像領域の大部分を消費し得る。一実施形態では、外部メモリと論理チャネルとの間にキャッシュが実装され、複数の画像領域の間で重複する画像データを保持して、同じデータに対するメモリへの複数のアクセスを回避することができる。
図14は、上述のように論理チャネルユニットによって実行可能な方法論を示す。図14で見られるように、この方法論は、画像プロセッサ内における消費構成要素への論理接続を可能にすること1401を含む。この方法はまた、画像データのフレームから一連の制限された幅の画像領域を読み出すこと1402を含み、各画像領域はRGBフォーマットに従ってフォーマットされている。この方法はまた、一連の制限された幅の画像領域を同じ色成分を有する画像データのブロックに再フォーマットすること1403を含む。この方法はまた、同じ色成分を有する画像データのブロックを消費構成要素に転送すること1404を含む。
e.実現例の実施形態
上述した様々な画像プロセッサアーキテクチャの特徴は、必ずしも従来の意味での画像処理に限定されず、したがって、画像プロセッサを再特徴付けしてもよい(またはしなくてもよい)他のアプリケーションに適用することができることを指摘することが適切である。例えば、実際のカメラ画像の処理とは対照的に、アニメーションの作成および/または生成および/またはレンダリングにおいて上述した様々な画像プロセッサアーキテクチャの特徴のいずれかが使用される場合、画像プロセッサはグラフィックス処理ユニットとして徳経づけられてもよい。さらに、上述した画像プロセッサアーキテクチャの特徴は、ビデオ処理、視覚処理、画像認識および/または機械学習などの他の技術的用途にも適用することができる。このように適用されて、画像プロセッサは、より汎用的なプロセッサ(例えば、コンピューティングシステムのCPUの一部であるか、またはその一部である)と(例えばコプロセッサとして)一体化されてもよく、またはコンピューティングシステム内のスタンドアロンプロセッサであってもよい。
上述したハードウェア設計の実施形態は、半導体チップ内において、および/または最終的に半導体製造プロセスに向けての回路設計の記述として実施することができる。後者の場合、そのような回路記述は、(例えばVHDLもしくはVerilog)レジスタ転送レベル(RTL)回路記述、ゲートレベル回路記述、トランジスタレベル回路記述もしくはマスク記述、またはそれらの様々な組み合わせの形態をとってもよい。回路記述は、典型的には、コンピュータ可読記憶媒体(例えばCD−ROMまたは他のタイプの記憶技術)上に実施される。
先のセクションから、上記の画像プロセッサは、(例えば、ハンドヘルド装置のカメラからのデータを処理するハンドヘルド装置のシステムオンチップ(SOC)の一部として)コンピュータシステム上のハードウェアで実施できることを認識することに関係する。画像プロセッサがハードウェア回路として実施される場合、画像プロセッサによって処理される画像データはカメラから直接受信されてもよいことに留意されたい。ここで、画像プロセッサは、別体のカメラの一部であってもよいし、一体化されたカメラを有するコンピューティングシステムの一部であってもよい。後者の場合、画像データは、カメラから直接、またはコンピューティングシステムのシステムメモリから受信することができる(例えば、カメラは、その画像データを画像プロセッサではなくシステムメモリに送信する)。先のセクションで説明した機能の多くは、(アニメーションをレンダリングする)グラフィックスプロセッサユニットにも適用可能であることにも留意されたい。
図15は、コンピューティングシステムの例示的な図である。以下に説明するコンピューティングシステムのコンポーネントの多くは、一体化されたカメラおよび関連する画像プロセッサ(例えば、スマートフォンまたはタブレットコンピュータなどのハンドヘルドデバイス)を有するコンピューティングシステムに適用可能である。当業者は、2つの間の範囲を容易に定めることができるであろう。
図15に見られるように、基本的なコンピューティングシステムは、中央処理ユニット1501(例えば、マルチコアプロセッサまたはアプリケーションプロセッサ上に配置された複数の汎用処理コア1515_1〜1515_Nおよびメインメモリコントローラ1517を含み得る)、システムメモリ1502、ディスプレイ1503(例えばタッチスクリーン、フラットパネル)、ローカル有線ポイントツーポイントリンク(例えばUSB)インタフェース1504、様々なネットワークI/O機能1505(イーサネット(登録商標)インタフェースおよび/またはセルラーモデムサブシステムなど)、無線ローカルエリアネットワーク(例えばWiFi)インタフェース1506、ワイヤレスポイントツーポイントリンク(例えばブルートゥース(登録商標))インタフェース1507およびグローバルポジショニングシステムインタフェース1508、様々なセンサ1509_1〜1509_N、1つ以上のカメラ1510、バッテリ1511、電力管理制御ユニット1512、スピーカおよびマイクロホン1513、ならびに音声コーダ/デコーダ1514を含んでもよい。
アプリケーションプロセッサまたはマルチコアプロセッサ1550は、そのCPU1501内における1つ以上の汎用処理コア1515、1つ以上のグラフィカル処理ユニット1516、メモリ管理機能1517(例えばメモリコントローラ)、I/O制御機能1518および画像処理ユニット1519を含んでもよい。汎用処理コア1515は、典型的には、コンピューティングシステムのオペレーティングシステムおよびアプリケーションソフトウェアを実行する。グラフィックス処理ユニット1516は、典型的には、ディスプレイ1503上に提示されるグラフィックス情報を生成するために、グラフィックス集中型機能を実行する。メモリ制御機能1517は、システムメモリ1502とインタフェースして、システムメモリ1502との間でデータの書込/読出を行う。電力管理制御ユニット1512は、システム1500の電力消費を全体的に制御する。
画像処理ユニット1519は、先のセクションで説明した画像処理ユニットの実施形態のいずれかに従って実現することができる。代替的にまたは組み合わせて、IPU1519は、GPU1516およびCPU1501のいずれかまたは両方にそのコプロセッサとして結合されてもよい。さらに、様々な実施形態では、GPU1516は、上で説明した画像プロセッサの特徴のいずれかを用いて実現することができる。
タッチスクリーンディスプレイ1503、通信インタフェース1504〜1507、GPSインタフェース1508、センサ1509、カメラ1510、およびスピーカ/マイクコーデック1513,1514の各々はすべて、適切な場合には、一体化された周辺装置(例えば1つ以上のカメラ1510)も含むコンピューティングシステム全体に対して様々な形態のI/O(入力および/または出力)として見ることができる。実現例によっては、これらのI/Oコンポーネントの様々なものは、アプリケーションプロセッサ/マルチコアプロセッサ1550上に統合されてもよく、またはアプリケーションプロセッサ/マルチコアプロセッサ1550のダイから離れて、またはそのパッケージ外に配置されてもよい。
一実施形態では、1つ以上のカメラ1510は、カメラとその視野内の対象との間の深度を測定することができる深度カメラを含む。アプリケーションプロセッサまたは他のプロセッサの汎用CPUコア(もしくはプログラムコードを実行するために命令実行パイプラインを有する他の機能ブロック)上で実行されるアプリケーションソフトウェア、オペレーティングシステムソフトウェア、デバイスドライバソフトウェアおよび/またはファームウェアは、上記の機能のいずれかを実行してもよい。
本発明の実施形態は、上述したような様々なプロセスを含むことができる。これらのプロセスは、機械実行可能命令で実施されてもよい。これらの命令は、汎用または特殊目的のプロセッサに特定のプロセスを実行させるために使用できる。代替的に、これらのプロセスは、プロセスを実行するためのハードワイヤード論理を含む特定のハードウェアコンポーネントによって、またはプログラミングされたコンピュータコンポーネントとカスタムハードウェアコンポーネントとの任意の組み合わせによって実行されてもよい。
本発明の要素はまた、機械実行可能命令を記憶するための機械可読媒体として提供されてもよい。機械可読媒体は、フロッピー(登録商標)ディスク、光ディスク、CD−ROM、および光磁気ディスク、フラッシュメモリ、ROM、RAM、EPROM、EEPROM、磁気もしくは光カード、伝搬媒体、または電子命令を記憶するのに適した他のタイプの媒体/機械可読媒体を含むが、それらに限定はされない。例えば、本発明は、搬送波または通信リンク(例えばモデムもしくはネットワーク接続)を介する他の伝搬媒体で実施されたデータ信号によって、遠隔のコンピュータ(例えばサーバ)から要求側コンピュータ(例えばクライアント)に転送され得るコンピュータプログラムとしてダウンロードすることができる。
前述の明細書では、本発明をその特定の例示的な実施形態を参照して説明した。しかしながら、特許請求の範囲に記載される本発明のより広い精神および範囲から逸脱することなく、様々な修正および変更がなされ得ることは明らかであろう。したがって、明細書および図面は、限定的ではなく例示的なものとみなされるべきである。

Claims (15)

  1. 画像プロセッサであって、
    各々が、2次元シフトレジスタアレイ構造をそれぞれ有する1つ以上のステンシルプロセッサと、
    シート生成部と、
    前記画像プロセッサによる処理のために外部メモリから入力画像データを読み出し、前記画像プロセッサからの出力画像データを前記外部メモリに書き込むように構成されるI/Oユニットを備え、
    前記I/Oユニットは、複数の論理チャネルユニットを含み、
    各論理チャネルユニットは、
    前記外部メモリに格納されるライングループの一部に対応するアドレスを生成するよう構成されるアドレス指定回路と、
    前記外部メモリから読み出された再フォーマットされたバージョンのデータを生成するよう構成される再フォーマット回路とを含み、
    各論理チャネルユニットは、前記外部メモリと前記画像プロセッサ内のそれぞれのラインバッファとの間に論理チャネルを形成するように構成され、
    各論理チャネルユニットは、前記外部メモリに格納された再フォーマットされたそれぞれのライングループの再フォーマットされた一部を前記画像プロセッサのラインバッファに与えるように構成され、
    前記アドレス指定回路を用いて、前記外部メモリに格納された前記ライングループの一部にそれぞれ対応するアドレスを生成することを含み、前記生成することは、前記ライングループと同じ幅を有する前記ライングループの第1の全幅領域に対応するアドレスを生成することと、前記ライングループの複数の後続の領域にそれぞれ対応するアドレスを繰り返し生成することとを含み、
    前記複数の後続の領域の各後続の領域は、前記ライングループよりも狭い幅を有し、さらに、
    前記再フォーマット回路を用いて、複数の異なるそれぞれの色フォーマットにおけるそれぞれのライングループの各部分の再フォーマットされたバージョンを含む再フォーマットされた画像データを生成することと、
    前記再フォーマットされた画像データを前記ラインバッファに与えることとを含み、
    前記画像プロセッサの前記シート生成部は、前記ラインバッファから、前記1つ以上の内部のステンシルプロセッサのうちのある内部のステンシルプロセッサの2次元シフトレジスタアレイ構造のそれぞれの異なる空間に、前記ライングループの各後続の領域のそれぞれが異なる再フォーマットされたバージョンを有する複数のシートをロードするように構成される、画像プロセッサ。
  2. 各論理チャネルユニットは、前記画像プロセッサの前記シート生成部が前記ラインバッファから各後続の領域を繰り返し消費するにつれて、前記複数の後続の領域を繰り返し読み出して前記ラインバッファに与える、請求項1記載の画像プロセッサ。
  3. 前記シート生成部は、前記ラインバッファから各後続の領域を繰り返し消費するよう構成され、
    各々がデータを有する画像データのシートを前記ライングループの前記第1の全幅領域および前記ライングループの後続の領域の両方から生成することと、各生成された画像データのシートを前記画像プロセッサの前記1つ以上の内部のステンシルプロセッサの1つに与えることとを含む、請求項2記載の画像プロセッサ。
  4. 前記再フォーマット回路は、複数の異なる色フォーマットの各々において前記ライングループの各後続の領域の複数の再フォーマットされたバージョンを生成するように入力キューから繰り返し読み出しを行うように構成される、請求項記載の画像プロセッサ。
  5. 各論理チャネルユニットは、ステートマシンを含み、
    前記ステートマシンは、各ライングループの各全幅領域と各ライングループの各後続の領域との間における読出の順序付けを制御する、請求項1記載の画像プロセッサ。
  6. コンピューティングシステムであって、
    1つ以上の汎用プロセッサと、
    外部メモリと、
    前記外部メモリと結合されたメモリコントローラと、
    画像プロセッサとを備え、
    前記画像プロセッサは、
    各々が、2次元シフトレジスタアレイ構造をそれぞれ有する1つ以上のステンシルプロセッサと、
    シート生成部と、
    前記画像プロセッサによる処理のために前記外部メモリから入力画像データを読み出し、前記画像プロセッサからの出力画像データを前記外部メモリに書き込むように構成されるI/Oユニットとを備え、
    前記I/Oユニットは、複数の論理チャネルユニットを含み、
    各論理チャネルユニットは、
    前記外部メモリに格納されるライングループの一部に対応するアドレスを生成するよう構成されるアドレス指定回路と、
    前記外部メモリから読み出された再フォーマットされたバージョンのデータを生成するよう構成される再フォーマット回路とを含み、
    各論理チャネルユニットは、前記外部メモリと前記画像プロセッサ内のそれぞれのラインバッファとの間に論理チャネルを形成するように構成され、
    各論理チャネルユニットは、前記外部メモリに格納された再フォーマットされたそれぞれのライングループの再フォーマットされた一部を前記画像プロセッサのラインバッファに与えるように構成され、
    前記アドレス指定回路を用いて、前記外部メモリに格納された前記ライングループの一部にそれぞれ対応するアドレスを生成することを含み、前記生成することは、前記ライングループと同じ幅を有する前記ライングループの第1の全幅領域に対応するアドレスを生成することと、前記ライングループの複数の後続の領域にそれぞれ対応するアドレスを繰り返し生成することとを含み、
    前記複数の後続の領域の各後続の領域は、前記ライングループよりも狭い幅を有し、さらに、
    前記再フォーマット回路を用いて、複数の異なるそれぞれの色フォーマットにおけるそれぞれのライングループの各部分の再フォーマットされたバージョンを含む再フォーマットされた画像データを生成することと、
    前記再フォーマットされた画像データを前記ラインバッファに与えることとを含み、
    前記画像プロセッサの前記シート生成部は、前記ラインバッファから、前記1つ以上の内部のステンシルプロセッサのうちのある内部のステンシルプロセッサの2次元シフトレジスタアレイ構造のそれぞれの異なる空間に、前記ライングループの各後続の領域のそれぞれが異なる再フォーマットされたバージョンを有する複数のシートをロードするように構成される、コンピューティングシステム
  7. 各論理チャネルユニットは、前記画像プロセッサの前記シート生成部が前記ラインバッファから各後続の領域を繰り返し消費するにつれて、前記複数の後続の領域を繰り返し読み出して前記ラインバッファに与える、請求項6記載のコンピューティングシステム
  8. 前記シート生成部は、前記ラインバッファから各後続の領域を繰り返し消費するよう構成され、
    各々がデータを有する画像データのシートを前記ライングループの前記第1の全幅領域および前記ライングループの後続の領域の両方から生成することと、各生成された画像データのシートを前記画像プロセッサの前記1つ以上の内部のステンシルプロセッサの1つに与えることとを含む、請求項7記載のコンピューティングシステム
  9. 前記再フォーマット回路は、複数の異なる色フォーマットの各々において前記ライングループの各後続の領域の複数の再フォーマットされたバージョンを生成するように入力キューから繰り返し読み出しを行うように構成される、請求項6記載のコンピューティングシステム。
  10. 前記外部メモリの少なくとも一部は、前記コンピューティングシステムのシステムメモリ内に設けられる、請求項6記載のコンピューティングシステム
  11. 画像プロセッサによって実行される方法であって、
    前記画像プロセッサは、2次元シフトレジスタアレイ構造を各々が有する1つ以上の内部のステンシルプロセッサを含み、前記方法は、
    前記画像プロセッサのI/Oユニットの複数の論理チャネルユニットのうちのある論理チャネルユニットによって、外部メモリと前記画像プロセッサ内のラインバッファとの間に論理チャネルを形成することと、
    前記論理チャネルユニットによって、アドレス指定回路を用いて、前記外部メモリに格納されたライングループの一部にそれぞれ対応するアドレスを生成することとを備え、前記生成することは、前記ライングループと同じ幅を有する前記ライングループの第1の全幅領域に対応するアドレスを生成することと、前記ライングループの複数の後続の領域にそれぞれ対応するアドレスを生成することとを含み、
    前記複数の後続の領域の各後続の領域は、前記ライングループよりも狭い幅を有し、前記方法はさらに、
    前記論理チャネルユニットの再フォーマット回路を用いて、複数の異なるそれぞれの色フォーマットにおける前記ライングループの各部分の再フォーマットされたバージョンを含む再フォーマットされた画像データを生成することと、
    前記再フォーマットされた画像データを前記ラインバッファに与えることと、
    前記画像プロセッサのシート生成部の前記ラインバッファから、前記1つ以上のステンシルプロセッサのうちのある内部のステンシルプロセッサの2次元シフトレジスタアレイ構造のそれぞれの異なる空間に、前記ライングループの各後続の領域のそれぞれが異なる再フォーマットされたバージョンを有する複数のシートをロードすることとを備える、方法。
  12. 各論理チャネルユニットは、前記画像プロセッサの前記シート生成部が前記ラインバッファから各後続の領域を繰り返し消費するにつれて、前記複数の後続の領域を繰り返し読み出して前記ラインバッファに与える、請求項11記載の方法。
  13. 前記シート生成部によって、前記ラインバッファから各後続の領域を繰り返し消費することをさらに備え、前記繰り返し消費することは、
    各々がデータを有する画像データのシートを前記ライングループの前記第1の全幅領域および前記ライングループの後続の領域の両方から生成することと、
    各生成された画像データのシートを前記画像プロセッサの前記1つ以上の内部のステンシルプロセッサの1つに与えることとを含む、請求項12記載の方法。
  14. 前記論理チャネルユニットの前記再フォーマット回路によって、複数の異なる色フォーマットの各々において前記ライングループの各後続の領域の複数の再フォーマットされたバージョンを生成するように、入力キューから繰り返し読み出しを行うことをさらに備える、請求項11記載の方法。
  15. 各論理チャネルユニットのステートマシンによって、各ライングループの各全幅領域と各ライングループの各後続の領域との間における読出の順序付けを制御することをさらに備える、請求項11記載の方法
JP2018539874A 2016-02-28 2016-12-29 画像プロセッサのためのマクロi/oユニット Active JP6750022B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201662300880P 2016-02-28 2016-02-28
US62/300,880 2016-02-28
US15/389,168 2016-12-22
US15/389,168 US10380969B2 (en) 2016-02-28 2016-12-22 Macro I/O unit for image processor
PCT/US2016/069215 WO2017146817A1 (en) 2016-02-28 2016-12-29 Macro i/o unit for image processor

Publications (2)

Publication Number Publication Date
JP2019509549A JP2019509549A (ja) 2019-04-04
JP6750022B2 true JP6750022B2 (ja) 2020-09-02

Family

ID=57861271

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018539874A Active JP6750022B2 (ja) 2016-02-28 2016-12-29 画像プロセッサのためのマクロi/oユニット

Country Status (9)

Country Link
US (3) US10380969B2 (ja)
EP (1) EP3420526A1 (ja)
JP (1) JP6750022B2 (ja)
KR (1) KR102072145B1 (ja)
CN (1) CN107133016B (ja)
DE (2) DE202016107470U1 (ja)
GB (2) GB2551412B (ja)
TW (3) TWI650013B (ja)
WO (1) WO2017146817A1 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10503689B2 (en) * 2017-05-15 2019-12-10 Google Llc Image processor I/O unit
US11386644B2 (en) * 2017-10-17 2022-07-12 Xilinx, Inc. Image preprocessing for generalized image processing
KR102502526B1 (ko) * 2018-04-16 2023-02-23 에밀 바덴호르스트 프로세서 및 프로세서 작동 방법
CN110782387B (zh) * 2018-07-30 2023-09-22 阿里巴巴(中国)有限公司 图像处理方法、装置、图像处理器及电子设备

Family Cites Families (88)

* 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
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
US5162788A (en) * 1989-06-16 1992-11-10 Apple Computer, Inc. Chunky planar data packing apparatus and method for a video memory
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 ソニー株式会社 画像データ処理装置および画像データ処理方法
US5671440A (en) 1994-08-08 1997-09-23 Eastman Kodak Company Color image data reorientation and format conversion system
US5612693A (en) 1994-12-14 1997-03-18 International Business Machines Corporation Sliding window data compression using a toroidal bit shift register
US5736988A (en) * 1995-12-04 1998-04-07 Silicon Graphics, Inc. Apparatus and method for accelerated tiled data retrieval
US5960211A (en) * 1995-12-15 1999-09-28 Hughes Aircraft Data formatting method and apparatus for a data processing array
US6049859A (en) 1996-01-15 2000-04-11 Siemens Aktiengesellschaft Image-processing processor
US5892962A (en) 1996-11-12 1999-04-06 Lucent Technologies Inc. FPGA-based processor
JPH10271299A (ja) * 1997-03-27 1998-10-09 Ricoh Co Ltd デジタル複合機
US5943040A (en) * 1997-06-27 1999-08-24 Sun Microsystems, Inc. Graphical image reformatting
US6466265B1 (en) 1998-06-22 2002-10-15 Eastman Kodak Company Parallel output architectures for CMOS active pixel sensors
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
JP4489305B2 (ja) 1999-03-16 2010-06-23 浜松ホトニクス株式会社 高速視覚センサ装置
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
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
AU2003221680A1 (en) 2002-04-09 2003-10-27 The Research Foundation Of State University Of New York 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
JP4284501B2 (ja) 2003-03-28 2009-06-24 セイコーエプソン株式会社 画像データ縮小装置、マイクロコンピュータ及び電子機器
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
JP2006013701A (ja) 2004-06-23 2006-01-12 Seiko Epson Corp 表示コントローラ、電子機器及び画像データ供給方法
JP4219887B2 (ja) 2004-12-28 2009-02-04 富士通マイクロエレクトロニクス株式会社 画像処理装置及び画像処理方法
JP4111192B2 (ja) 2004-12-28 2008-07-02 セイコーエプソン株式会社 メモリコントローラ、表示コントローラ及びメモリ制御方法
US20100122105A1 (en) 2005-04-28 2010-05-13 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
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
US8094552B1 (en) * 2005-11-03 2012-01-10 Seagate Technology Llc Adaptive buffer for frame based storage communications protocols
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
US7595805B2 (en) 2006-04-11 2009-09-29 Qualcomm Incorporated Techniques to facilitate use of small line buffers for processing of small or large images
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
US20080244222A1 (en) 2007-03-30 2008-10-02 Intel Corporation Many-core processing using virtual processors
JP4389976B2 (ja) 2007-06-29 2009-12-24 ブラザー工業株式会社 画像処理装置および画像処理プログラム
US20090015850A1 (en) 2007-07-13 2009-01-15 Kenneth Edward Smith Rapid loading of interleaved RGB data into SSE registers
KR101036596B1 (ko) 2007-09-05 2011-05-24 가부시키가이샤 시마쓰세사쿠쇼 고체촬상소자 및 그 구동방법
JP5461533B2 (ja) 2008-05-30 2014-04-02 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド ローカル及びグローバルのデータ共有
US20090319007A1 (en) 2008-06-20 2009-12-24 Mcnulty Jr James F Shocking device having a time-based monitoring and recording circuit
JP4999791B2 (ja) 2008-06-30 2012-08-15 キヤノン株式会社 情報処理装置、その制御方法、及びプログラム
JP5339824B2 (ja) 2008-09-08 2013-11-13 キヤノン株式会社 画像形成装置およびその制御方法
US8456480B2 (en) 2009-01-14 2013-06-04 Calos Fund Limited Liability Company Method for chaining image-processing functions on a SIMD processor
KR101572879B1 (ko) 2009-04-29 2015-12-01 삼성전자주식회사 병렬 응용 프로그램을 동적으로 병렬처리 하는 시스템 및 방법
US20110055495A1 (en) 2009-08-28 2011-03-03 Qualcomm Incorporated Memory Controller Page Management Devices, Systems, and Methods
US8700877B2 (en) 2009-09-25 2014-04-15 Nvidia Corporation Address mapping for a parallel thread processor
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
US8595428B2 (en) 2009-12-22 2013-11-26 Intel Corporation Memory controller functionalities to support data swizzling
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
US8751771B2 (en) 2010-09-29 2014-06-10 Nvidia Corporation Efficient implementation of arrays of structures on SIMT and SIMD architectures
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
JP5875530B2 (ja) 2011-01-31 2016-03-02 株式会社ソシオネクスト プログラム生成装置、プログラム生成方法、プロセッサ装置及びマルチプロセッサシステム
JP5884037B2 (ja) 2011-03-16 2016-03-15 パナソニックIpマネジメント株式会社 データ処理装置、データ処理方法及びデータ共有システム
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 晨星半導體股份有限公司 影像處理裝置與影像處理方法
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
US8954992B2 (en) 2013-03-15 2015-02-10 Lenovo Enterprise Solutions (Singapore) Pte. Ltd. Distributed and scaled-out network switch and packet processing
US9098924B2 (en) 2013-07-15 2015-08-04 Nvidia Corporation Techniques for optimizing stencil buffers
US9749548B2 (en) 2015-01-22 2017-08-29 Google Inc. Virtual linebuffers for image signal processors
US10291813B2 (en) 2015-04-23 2019-05-14 Google Llc Sheet generator for image processor
US9785423B2 (en) 2015-04-23 2017-10-10 Google Inc. Compiler for translating between a virtual image processor instruction set architecture (ISA) and target hardware having a two-dimensional shift array structure
US9756268B2 (en) 2015-04-23 2017-09-05 Google Inc. Line buffer unit for image processor
US9965824B2 (en) 2015-04-23 2018-05-08 Google Llc Architecture for high performance, power efficient, programmable image processing
US9769356B2 (en) 2015-04-23 2017-09-19 Google Inc. Two dimensional shift array for image processor
US9772852B2 (en) 2015-04-23 2017-09-26 Google Inc. Energy efficient processor core architecture for image processor
US10095479B2 (en) 2015-04-23 2018-10-09 Google Llc Virtual image processor instruction set architecture (ISA) and memory model and exemplary target hardware having a two-dimensional shift array structure
US10297003B2 (en) * 2015-09-21 2019-05-21 Qualcomm Incorporated Efficient saving and restoring of context information for context switches

Also Published As

Publication number Publication date
US10504480B2 (en) 2019-12-10
DE202016107470U1 (de) 2017-06-30
TWI702840B (zh) 2020-08-21
DE102016125846A1 (de) 2017-08-31
JP2019509549A (ja) 2019-04-04
CN107133016B (zh) 2021-03-30
KR20180100362A (ko) 2018-09-10
GB201622425D0 (en) 2017-02-15
TW201735650A (zh) 2017-10-01
US10380969B2 (en) 2019-08-13
WO2017146817A1 (en) 2017-08-31
US20200160809A1 (en) 2020-05-21
US20170256230A1 (en) 2017-09-07
GB201910667D0 (en) 2019-09-11
TW201921955A (zh) 2019-06-01
GB2577959B (en) 2020-10-07
EP3420526A1 (en) 2019-01-02
TW202112140A (zh) 2021-03-16
GB2551412A (en) 2017-12-20
TWI650013B (zh) 2019-02-01
GB2551412B (en) 2019-09-04
US20170249921A1 (en) 2017-08-31
CN107133016A (zh) 2017-09-05
KR102072145B1 (ko) 2020-01-31
TWI745084B (zh) 2021-11-01
US10733956B2 (en) 2020-08-04
GB2577959A (en) 2020-04-15

Similar Documents

Publication Publication Date Title
JP6793162B2 (ja) 画像プロセッサのためのラインバッファユニット
JP6858239B2 (ja) プログラムコードを、高性能で電力効率の良いプログラマブルな画像処理ハードウェアプラットフォームにマッピングするためのコンパイラ技法
JP7202987B2 (ja) 高性能で、電力効率の良い、プログラマブルな画像処理のためのアーキテクチャ
US10733956B2 (en) Macro I/O unit for image processor

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20181004

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20181004

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20190722

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190903

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20191203

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: 20200714

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200812

R150 Certificate of patent or registration of utility model

Ref document number: 6750022

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250