JP5525175B2 - 複数のハードウェア・ドメイン、データ・タイプ、およびフォーマットの処理を統合し抽象化するフレームワーク - Google Patents

複数のハードウェア・ドメイン、データ・タイプ、およびフォーマットの処理を統合し抽象化するフレームワーク Download PDF

Info

Publication number
JP5525175B2
JP5525175B2 JP2009093554A JP2009093554A JP5525175B2 JP 5525175 B2 JP5525175 B2 JP 5525175B2 JP 2009093554 A JP2009093554 A JP 2009093554A JP 2009093554 A JP2009093554 A JP 2009093554A JP 5525175 B2 JP5525175 B2 JP 5525175B2
Authority
JP
Japan
Prior art keywords
image
media
processing
processing unit
image processing
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
JP2009093554A
Other languages
English (en)
Other versions
JP2010020755A (ja
Inventor
マイケル・エイド
シャイレンドラ・マトゥール
ダニエル・ビュードリー
マシュー・ラマール
レイ・タイス
Original Assignee
アビッド テクノロジー インコーポレイテッド
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 アビッド テクノロジー インコーポレイテッド filed Critical アビッド テクノロジー インコーポレイテッド
Publication of JP2010020755A publication Critical patent/JP2010020755A/ja
Application granted granted Critical
Publication of JP5525175B2 publication Critical patent/JP5525175B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • 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

Description

(関連出願に対する相互引用)
本願は、2008年4月8日に出願した仮出願第61/123,463号および61/123,549号の、35U.S.C.§199(e)に基づく優先権およびその恩恵を主張する。
従来技術
ポスト制作ソフトウェア・アプリケーションおよび画像処理ソフトウェア・アプリケーションは、そのビデオ効果の処理を加速するために、カスタム・ハードウェアおよび包括的ハードウェアを増々利用することができるようになっている。新たに導入された技術によって提供される処理の高速化を利用することは、シネマおよびテレビジョン・コンテンツが向上し続けるに連れて、一層重要性を増しつつある。ブルー・レイ・ディスク・プレーヤを備えた高品位家庭用シアター・システムが日用品となっている一方で、2Kまたは4Kラインもの解像度を有するディジタル・シネマ投影が普及しつつある。これは、モーション・ピクチャおよび放送制作パイプライン全体における必要なデータ処理増大という代償によってなされている。画像およびビデオ処理システムは、このようなメディアを扱うために、その性能を拡大(scale up)していく必要がある。
メディア処理システムに利用可能な包括的ハードウェアの中には、Intel系プラットフォーム用のSSE2、およびApple Macintosh・プラットフォーム用のAltivec、市販のワークステーションに慣例的に実装されている複数のグラフィックス処理ユニット(GPU)、およびIntel Corporation(インテル社)からのLarrabeeのような、その他の特殊ハードウェアのように、種々のホストCPU技術がある。コンピュータ・ゲーム市場は、GPUを日用品にするのを促進した。これらのGPUは、同じ価格帯の中央処理ユニット(CPU)よりも算術処理能力が遥かに高い。GPUは、固有の画像レンダリング並列性を利用して、特にゲーム・アプリケーションにおいて制御指向CPUを凌駕する。
ゲームおよび画像処理アプリケーション用の画像レンダリングは、同様のプロセスを伴う。GPU上の汎用計算(GPGPU)と呼ばれる、発展途上の研究分野では、画像処理を含む種々の問題にGPUを用いる技法を探求する。しかしながら、既存のGPU加速画像処理システムは、CまたはC++のような汎用プログラミング言語を用いて、開発者が容易にプログラミングすることができない。現在のGPU加速画像処理システムは、GPUコンポーネント、レンダリング・パイプライン、およびレンダリングAPIの込み入った知識を必要とする。
また、市販のプラットフォーム、オペレーティング・システム、グラフィックス・カード、およびシェーダ言語(shader language)に対するビデオ処理の必要性に向けて直接的に目標を定めたGPUプログラミング・サービスが一般に欠如している。ビデオ処理要件は、主に、ホストとGPUメモリとの間における高帯域幅転送要件、およびビデオ系視覚効果の処理に必要な特定の処理フォーマットおよびタイプを扱うその他のサービスによって特徴付けられる。
新たな技術が頻繁に導入されることによって、ソフトウェア・コーディングの複雑さが増大する。新たな技術が提供することができる性能加速を利用するためには、ソフトウェアが、用いられる特定のハードウェア・タイプおよびモデル、オペレーティング・システム、ならびにプラットフォームに密接に繋がれている必要がある。これが意味するのは、同じアプリケーションを異なるハードウェアおよびシステム構成上で最適に走らせるためには、複数のバージョンのコードが必要となるということである。
新たに導入されたハードウェアを用いる際、従前からの手法では、ソフトウェアを走らせようとする各新技術に特定的な個々の低レベル・ライブラリを開発していた。これらのライブラリは、特定のハードウェアおよびオペレーティング・システムに専用であり、高度に最適化されている。これらは、それら自体のプロトコルおよび特殊性(particularities)を有し、目標のハードウェアによって大きく影響されることが多いプログラミング・モデルを採用する。このため、ハードウェアの発展に合わせてアプリケーション・ソフトウェアを維持することが困難になり、新たなビデオ効果のような、新たなソフトウェア・アプリケーションの迅速な開発が阻害される。また、クライアント・アプリケーションにおいて大幅な変更を必要とせずに新たなハードウェア実行ドメインを採用することが妨げられる。
一旦ハードウェア特定低レベル・ライブラリを開発し、デバッグし、そして最適化すると、アプリケーション開発者およびユーザは、これらの円熟したライブラリの強さ(strength)を組み合わせようとする。これは、通常、種々のライブラリのデータ構造およびコードの一部を統一することによって遂行する。しかしながら、このために、既にデバッグしてあるソフトウェアが不安定になる可能性がある。
概して言えば、本発明は、ライブラリ自体に対する修正や、新たなハードウェア上で走る低レベル・ライブラリに基づく機構(feature)を提供するクライアント・アプリケーションに対する修正を必要とせずに、標準的な共通インターフェースを通じてアクセスする低レベル・ライブラリ能力およびハードウェア実行ドメインのホスティング、統合、および拡張を容易に行うことを可能にする、効率的にポータブルな実行ドメイン不可知フレームワーク(agnostic framework)を特徴とする。
一形態では、フレームワークは、ポータブルな、プラットフォームおよびオペレーティング・システム不可知な、コンポーネントを基本とするアーキテクチャ(例えば、コンポーネント処理ライブラリ)を含み、プラグイン・フォーマットでありプラグイン・ハードウェア・ドメインに位置する画像ラスタまたはグラフィックス・オブジェクトのような、プラグイン・メディア・オブジェクトを処理するツールボックスの上に、調和するインターフェースの集合体を設ける。ハードウェア・ドメインは、コンピュータRAM、ビデオRAM(VRAM)、オンボードGPUメモリ、およびカスタム・ハードウェアと関連付けられるメモリを含む。処理フレームワークをCPL(コンポーネント処理ライブラリ)と呼び、アプリケーション・ソフトウェアの開発および実行双方のためのフレームワークとしての役割を果たす。
別の形態では、本発明は、異なるプラットフォーム、オペレーティング・システム、グラフィックス・カード、およびシェーダ言語の範囲に対する透明なホスティング、ならびにGPUに基づく効果の高速実行を可能にする、画像およびビデオ処理プログラミング・サービスを特徴とする。このサービスは、加速化画像処理を遂行するために、現行のコンピュータ・システムのコンポーネントとして、カスタムに供給されるGPUに組み入れる。本発明によるフレームワークを用いて、空間的、時間的および機能的画像処理の加速化を達成する。また、本フレームワークは、画素毎に画素シェーディング機能を指定する能力も特徴とし、コンピュータ・システム上にある必要な数だけの画素シェーダを同時に利用し、可能であれば基礎になるプログラムのアルゴリズムに基づくベクトル・マス加速(vector math acceleration)も活用する。
概して言えば、別の形態においては、本発明は、複数の実行ドメインと、当該複数の実行ドメインの1つに関連付けられたメモリとを備えているメディア処理システムを特徴とし、メモリは、複数の実行ドメインの1つによって読み取り可能な命令を備えており、これらの命令を複数の実行ドメインの1つ上で実行すると、メディア処理機能を遂行する命令を受け入れさせ、メディア処理機能と関連付けるメディア・オブジェクトを受け入れさせ、メディア・オブジェクトは、当該メディア・オブジェクトのタイプ、メディア・オブジェクトのフォーマット、およびメディア・オブジェクトと関連付けられているハードウェア・ドメインを指定する属性でラップされている。更に、実行ドメインの少なくとも1つに、メディア・オブジェクト上でメディア処理機能を遂行させ、このメディア処理機能を遂行するための命令は、メディア・オブジェクトと関連付けられているハードウェア・ドメインには依存しない形態で表現されている。本発明の実施形態には、以下の特徴の1つ以上が含まれる。
メディア処理機能を遂行するための命令は、メディア・オブジェクト・タイプおよび/またはメディア・オブジェクト・フォーマットには依存しない形態で表現されている。複数の実行ドメインはCPUおよびGPUを含み、福数の実行ドメインの1つはCPUである。メディア処理機能とは画像効果のことであり、メディア・オブジェクトのタイプはラスタ画像である。画像効果は、ディゾルブ、色補正、テキストの挿入、および動き効果のうち1つを含む。メディア処理機能は、画像効果であり、メディア・オブジェクト・タイプはグラフィックス・オブジェクトである。複数の実行ドメインの各々は、下位命令ライブラリと関連付けられており、実行ドメインの1つと関連付けられている下位ライブラリの少なくとも部分集合は、実行ドメインの別の1つと関連付けられている下位ライブラリの対応する部分集合とは互換性がない。本システムは、メディア処理機能とメディア・オブジェクトと関連付けられているメディア・オブジェクト・タイプ、メディア・オブジェクト・フォーマット、および実行ドメインの少なくとも1つとの間における不一致を識別し、メディア・オブジェクトのタイプを別のタイプに変換すること、またはメディア・オブジェクトのフォーマットを別のフォーマットに変換すること、または別のハードウェア・ドメインをメディア・オブジェクトと関連付けることのいずれかによって、識別した不一致を解消する。
メディア・オブジェクトの属性は、容認可能な属性集合の中の1つであり、容認可能な属性集合は、新たなメディア・オブジェクト・タイプ、新たなメディア・オブジェクト・フォーマット、および新たな関連するハードウェア・ドメインのうち少なくとも1つを有する新たな属性を含むように増強することができ、命令を書き直すまたはコンパイルし直す必要はない。メディア・オブジェクトを複数の部分に分割し、第1実行ドメインを第2実行ドメインに接続するデータ・バスを通じてこれらの部分を順次送出し、一度にこれらの部分の1つ上においてメディア処理機能を実行する。命令は複数の処理ユニットを備えており、メディア処理機能は、複数の処理ユニットのうち少なくとも1つの第1処理ユニットを実行することによって遂行され、複数の処理ユニットのうち第2処理ユニットをコールする。命令は、コール先の処理ユニットからスレッドを生成し(spawning)、処理ユニットがメディア・オブジェクトに対してメディア処理機能を実行し続ける間に、このスレッドを非同期で実行することを伴う。
概して言えば、更に別の形態では、本発明は、メディア処理方法を特徴とし、メディア処理機能を実行するための命令を受け入れるステップと、メディア処理機能と関連付けられるメディア・オブジェクトを受け入れるステップであって、メディア・オブジェクトは、当該メディア・オブジェクトのタイプ、メディア・オブジェクトのフォーマット、およびメディア・オブジェクトと関連付けられているハードウェア・ドメインを指定する属性によってラップする、ステップと、複数の実行ドメインの少なくとも1つに、メディア処理機能をメディア・オブジェクト上で実行させるステップであって、メディア処理機能を実行する命令は、メディア・オブジェクトと関連付けられているハードウェア・ドメインには依存しない形式で表現されている、ステップとを含む。
概して言えば、更に別の形態において、本発明は画像処理システムを特徴とし、中央処理ユニット(CPU)と、グラフィックス処理ユニット(GPU)と、CPUと関連付けられているメモリとを備えており、メモリはCPUによって読み取り可能な命令を備えており、これらの命令をCPUによって実行すると、当該CPUに、画像処理機能を実行する命令を受け入れさせ、画像処理機能と関連付ける画像を受け入れさせ、画像を、当該画像のフォーマットおよび画像と関連付けられているハードウェア・ドメインを指定する属性でラップし、GPUに、画像上で画像処理機能を実行させ、画像処理機能を実行する命令は、画像と関連付けられているハードウェア・ドメインには依存しない形態で表現されている。
概して言えば、別の形態において、本発明は画像処理方法を特徴とし、CPU上で走るクライアント・アプリケーションから、画像処理機能を実行する命令を受け入れるステップと、クライアント・アプリケーションから、画像処理機能と関連付ける画像の指示を受け入れるステップと、画像を、当該画像のフォーマットおよび画像と関連付けられているハードウェア・ドメインを指定する属性でラップするステップと、GPUに、画像上で画像処理機能を実行させるステップであって、画像処理機能を実行する命令を、画像と関連付けられているハードウェア・ドメインには依存しない形態で表現する、ステップとを備えている。
また、前述の方法は、以下の特徴のうち1つ以上も含む。GPUは、関連するシェーダ言語を有し、画像処理機能を実行する命令は、シェーダ言語には依存しない形態で表現されている。命令の実行は、CPU上で走るオペレーティング・システムによって制御し、画像処理機能を実行する命令は、オペレーティング・システムには依存しない形態で表現されている。GPUは、画像レンダリング・データ・バッファを含み、画像レンダリング・バッファのタイプは、テクスチャ、フレーム・バッファ・オブジェクト、マルチ・サンプル・レンダ・バッファ、リード専用画素バッファ・オブジェクト、ライト専用画素バッファ・オブジェクト、およびリード−ライト画素バッファ・オブジェクトのうちの少なくとも1つであり、画像は、画像レンダリング・バッファのタイプには依存しない形態で表現されている。GPUは、画像レンダリング・テクスチャ・パラメータを含み、画像レンダリング・テクスチャ・パラメータは、色空間、画素深さおよび画素範囲のうち少なくとも1つを備えており、画像は、画像レンダリング・テクスチャ・パラメータには依存しない形態で表現されている。GPUに画像上において画像処理機能を実行させることは、多重パス実行を含み、CPU上に適時にコンパイルしたマルチパス画素プログラムをキャッシュし、画素プログラムを部分的にコンパイルし、ならびに部分的にコンパイルした画素プログラムをキャッシュし読み出す。CPUは、メモリと関連付けられており、CPUは、メモリの一部を、画像データを格納するために割り当て、GPUに画像上において画像処理機能を実行させることは、メモリの新たな部分を画像を格納するために割り当てずに、メモリの割り当てた部分をリサイクルすることを含む。画像は、8ビットRGB色空間画像、8ビットYCC色空間画像、または8ビットYCCA画像として表され、GPUに画像上において画像処理機能を実行させる際、画像をBGRAテクスチャにパックすることを含む。画像処理機能を実行する命令は、画像を表すために用いられる色空間および/または画素深さ、および/または画素範囲には依存しない形態で表現されており、および/または画像を格納するために用いられるメモリ・レイアウトおよびパッキングには依存しない形態で表現されている。GPUに画像上において画像処理機能を実行させる際、GPU上における処理スレッドの非同期の実行を伴う。
図1は、メディア処理システムを実装するための計算構成例のブロック図である。 図2は、ポータブルな開発および実行フレームワークを組み込んだメディア処理システムのソフトウェア・レイヤを示す図である。 図3は、ポータブルなフレームワーク内における処理ユニットの図である。 図4は、ポータブルな開発および実行フレームワークを組み込んだ画像処理システムのブロック図である。 図5は、ポータブルな開発および実行フレームワークを用いたビデオ処理アプリケーションの一例の流れ図である。
本発明を実施することができる計算構成例100を図1に示す。計算構成100は、汎用コンピュータおよび/またはワークステーションにおいて見られる複数の電子コンポーネントを備えている。例えば、計算構成100は、1つ以上の中央処理ユニット(CPU)102、104、CPU102、104がアクセスすることができ、ホスト・メモリまたは単にRAMと呼ばれる、ランダム・アクセス・メモリ106、1つ以上のグラフィカル処理ユニット(GPU)108、110、GPUがアクセスすることができ、GPUメモリまたはVRAM112と呼ばれる、カスタムの企業固有ハードウェアおよびランダム・アクセス・メモリを備えることができる。また、この構成は、ディスク114(磁気ディスク、ソリッド・ステート・ディスク、即ち、RAMディスク)や、追加の記憶および処理エレメントも含むことができる。
計算構成100は、マルチタスキング・オペレーティング・システム、O/S116、およびGPUドライバ118を含む。O/S116は、PC上で走るMicrosoft Windows(登録商標)、MacPPC/MacIntel上で走るApple社のOS/X、およびLinuxを含む、一般的なオペレーティング・システムの1つを含む。O/S116は、ドライバ、上位API OpenGL(MacおよびLinux用)のようなAPI、およびDirectX(Microsoft)のような、クライアント・プログラム、ならびにメディア処理ソフトウェアのようなアプリケーション、例えば、Avid Media Composerをホストする。
上位APIは、GPU上のソフトウェア・レイヤとしての役割を果たし、プログラムが特定の処理およびレンダリング・ジョブをそれに送出させる。「3D API」という用語は、この文書では、「上位API」と総合交換可能に用いられる。上位APIは、ジェオメトリ(geometries)、テクスチャ、およびシェーダ・プログラム(shader program)のハードウェア上への「押し出し」(pushing)を許容し、更にユーザが彼らの上位シェーダ言語プログラムを、下位のハードウェアが認識できるハードウェア特定命令にコンパイル/拡張することを可能にする。
図2を参照すると、記載している実施形態は、ポータブルな開発および実行フレームワーク202を特徴とし、このフレームワーク202は、メディア・オブジェクトのハードウェア実行ドメイン、データ構造タイプ、およびデータ構造フォーマットの抽象化を含む。設けられる抽象化は、低レベル・ライブラリ204a〜204fに属する、本来互換性がないアルゴリズムの集合上にあり、ライブラリ204a〜204fの各々は特定のハードウェア・ドメインに特定的である。フレームワーク202は、種々のデータ・ドメイン、ハードウェア実行ドメイン、データ・タイプ、およびフォーマット間における、処理ユニット、変換器、およびCPLレイヤ216内部に実装されているユーティリティを通じた相互作用を可能にする。CPLレイヤ216は、画像処理コンポーネント206、グラフィックス処理コンポーネント208、変換器210、およびユーティリティ212を含む。これらの処理コンポーネントの各々は、共通のデータ・オブジェクト構造214を用いて作動する。
開発および実行フレームワーク202をコンポーネント化したため、その固有性により、ホストしたメディア・オブジェクトの処理可能範囲を広げることができる。これによって、新たなメディア・タイプ、フォーマット、およびハードウェア・ドメインに合わせたプラグイン・アーキテクチャが可能になる。また、メディア・オブジェクトをそのネーティブなタイプ、フォーマットまたは計算ドメインにおいて処理するように最適化して、ホストしたアルゴリズム・インプリメンテーション(implementations)の集合も拡張する。これらのアルゴリズムは、外部低レベル・ライブラリに収容してもよい。
ポータブル開発および実行フレームワーク202は、ライブラリ自体の修正を必要とせずに、既存の低レベル・ライブラリ204a〜204fのアルゴリズムのホスティングを可能にする。低レベル・ライブラリ204a〜204fは、それらのデータおよび処理アルゴリズムを同じパイプラインの中で用いることができるように、統一することもできる。低レベル・ライブラリ資源のマルチスレッド型利用は、CPLレイヤ216として反映される、ステートレス・クラス実行レイヤを通じて行われる。
ポータブル開発および実行フレームワーク202は、ライブラリ・インプリメンテーションには関係なくアルゴリズムを設定し、制御し、データに対して実行するために、標準化したインターフェース集合を設ける。更に、その全てのパラメータおよびプロパティを扱い、スクリプティング・システムを通じて使い易くするための標準的な構造も設ける。
ポータブル開発および実行フレームワーク202は、クライアント・アプリケーション・レイヤ218によって呼び出す。記載している実施形態では、クライアント・アプリケーションは効果220、222、および224をメディア・オブジェクトに適用することを含むメディア処理アプリケーションを含む。クライアント・アプリケーションを実行するとき、特に効果が要求されるとき、クライアント・アプリケーションはフレームワーク202とインターフェースして、利用可能なハードウェア・ドメインの資源を呼び出す。フレームワーク202は、特定のメディア・オブジェクト上において要求されたアルゴリズムの実行には、どのドメインが適しているか判断することができる。しかしながら、クライアント・アプリケーションは、ユーザが選択したハードウェア・ドメイン上で実行を強行することを許容する。加えて、クライアント・アプリケーションは、複雑なパイプラインの完全なカプセル化を達成するために、他の処理ユニット内における、それ自体の処理ユニットの再利用を許容する。
フレームワーク202が設けるハードウェア・ドメイン抽象化は、当該ドメインの処理機能を、それと関連のあるストレージおよび企業固有フォーマット(proprietary format)と共に束に纏める。例えば、ハードウェア・ドメインは、メディア・オブジェクトに割り当てられるディスク型、RAM型、またはGPUメモリ型データ・バッファ、およびバッファがどこに割り当てられているか認識しこれらのドメインに位置するデータに対して動作するように最適化されている実行コードを参照することができる。
これより、先に言及したポータブル性および低レベル・ライブラリ独立性の利点を達成するために、開発および実行フレームワーク202に実装する抽象化について説明する。記載する実施形態では、フレームワーク202をコンポーネント処理レイヤ(CPL)と呼ぶ。
データの抽象化
フレームワーク202内では、データの抽象化を容易にする、コンポーネント・データ(CData)と呼ばれる、ラッパ(wrapper)をメディア・オブジェクトに供給する。記載している実施形態では、CDataラッパ(以下では、単にCDataと呼ぶ)は、三部属性、即ち、データ・タイプ、データ・フォーマット、およびデータ・ドメインを通じて、ラッパ内部における特定的な各データ構造の記述を可能にする。データ・タイプは、CDataによってホストされるデータ構造の種類を記述する。データ・タイプの例には、ラスタ画像、曲線、メッシュ、他のタイプのパラメータ・メディア・オブジェクト、オーディオ、またはテキストが含まれる。データ・フォーマットは、CDataによってホストされるデータ構造のフォーマットを記述する。例えば、データ・タイプがラスタ画像である場合、データ・フォーマットは、空間解像度、アスペクト比、色空間、および時間的フレーム・レートを指定するフォーマットを含む。データ・タイプが曲線である場合、データ・フォーマットは、その曲線が線形、または四分円、または立体曲線のどれか指定するフォーマットを含む。データ・タイプがオーディオである場合、フォーマットはMP3、WAVなどを含み、データ・タイプがテキストである場合、フォーマットは、HTML、ワード(Word)、XML等を含む。データ・ドメインは、メディア・オブジェクト・データの主要ハードウェア・ドメインを含み、それに割り当てられたバッファ、および/またはメディア・オブジェクト上で処理機能の実行を引き受けるハードウェアであってもよい。データ・ドメインの例には、CPU、GPU、セル・プロセッサ、Intel CorporationからのLarrabee GPUが含まれる。
各CDataには、名称(ストリング)で参照して、プロパティを当てはめることができる。各プロパティは、スカラー、ストリング、データ・ブロック、または別のCDataというような、特定のタイプを有する。CDataコンポーネントを通じて、ユーザはもっと高いレベルでメディア・オブジェクト(即ち、低レベル)データ構造を操作することができる。何故なら、そのインプリメンテーションの詳細は、標準的なCDataインターフェースの背後に隠されているからである。
処理の抽象化
低ライブラリ動作およびアルゴリズムを、フレームワーク202の標準的実行パラダイムにホストする。この標準的実行パラダイムは、処理ユニット(PU)と呼ばれるスレッド安全構造(thread-safe construct)を特徴とする。実行パスに必要とされるパラメータは、CContextオブジェクトと呼ばれるオブジェクトを通じて取り扱われる。CContextは、入力/出力パラメータを含むPU状態情報、ならびに所望の実行ドメイン、データ・タイプ、およびデータ・フォーマットを保持するオブジェクトである。記載している実施形態では、クライアント218がCContextを作成し初期化して、ここではPU FXと呼ぶインターフェースを通じて、この状態情報をPUに受け渡す。何故なら、記載している実施形態では、クライアント・アプリケションはビデオ効果(FX)を実施するためにフレームワーク202を用いるからである。しかしながら、インターフェースはビデオ効果に限定されるのではなく、PU FXインターフェースを用いてクライアント・アプリケーションから別の機能をコールすることもできる。
処理の抽象化は、外部PUおよび内部PUを含む。外部PUは、種々の低レベル・ライブラリの中にあるハードウェア特定アルゴリズムを実施する1つ以上の内部PUを互いに結束するために用いられる。各内部PUは、1つ以上のCData属性に対して関連する動作を実施する低レベルのライブラリ特定コードを収容する。例えば、ぼけ処理(blur operation)は、2つの別個のライブラリの中にある2つのハードウェア特定インプリメンテーションを有する場合があり、一方がCPUのため、他方がGPUのためにある。外部PUがぼけ処理を取り扱う場合、2つの内部PU、即ち、CPUぼけを取り扱うPUとGPUぼけを取り扱うPUとを論理的に結束する。別の実施形態では、CDataラッパの概念を用いる代わりに、ポータブルなフレームワークがメディア・オブジェクトをその属性と関連付けることを可能にする別の仕方で、メディア・タイプ、フォーマット、およびドメイン情報をメディア・オブジェクトに添付することによって、メディア・オブジェクト・データの抽象化を実行する。
外部PUは、所与の動作を伝えるために必要なCContextに関するパラメータの標準的な集合を定める。各内部PUは、CContextを通じて送信される標準的なパラメータ集合を、目標とする下位ライブラリに適した形態で受け渡すことを責務とする。内部PUは、CPLレイヤ126内部に実装され、要求されたドメイン、データ・タイプ、およびデータ・フォーマット(即ち、三部CData属性)に応じてタスクを実行するために必要な下位ライブラリ・コールを実行する。外部PUは、非同期実行や、ホストした処理に関する情報等を受け渡すためのコンパイラ・インターフェースのような、動作実行の種々の形態を制御するために用いられる共通の標準的インターフェースの集合を有する。以下に、図3と関連付けて、PUおよびメディア処理システム100のその他のコンポーネントとの相互作用について説明する。
CPLフレームワーク202は、個々のメディア・オブジェクトを置くために、1つの統一座標(または基準)システムを定める。CPLメディア・オブジェクトは、位置およびサイズ・プロパティ、または位置、サイズ、および距離プロパティを有し、この一意の座標システムに関して位置付けられる。内部PUは、CPL座標システムからの位置、サイズ、および距離情報を、特定の下位ライブラリ(例えば、IL、Gk、...)座標システムに変換する。
フル・メディア処理システム・パイプラインの一例は、種々の動作を実施する数個の外部PUと、外部PUに対する入力および/または出力としての役割を果たす数個のCDataと、種々の実行のパラメータを格納するために用いられる数個のCContextとを含む。
場合によっては、PUが複数(multiple)の個々のPUで構成され、既存のフレームワークからより複雑な動作を構築できるようにすることもある。PU内における個々の動作のグラフを抽出するためにインターフェースを設け、こうしてCPLクライアントに内部PUのグラフを露出する。例えば、キーヤ効果(keyer effect)は複数の効果段階、プレブラー(pre-blur)、キーイング、ポストブラー(post-blur)、拡大縮小(grow-shrink)、形状、および組成で構成される。CPLフレームワーク202は、クライアント218によって用いられる1つのキーヤPUを定め、このPUが粒度の高いPUのグラフを含む。これは、形状PUを供給する拡大縮小PUを供給するブラーPUを供給するキーPUを供給するブラーPUで構成され、最終的に組成PUを供給する。キーヤPUに対する1回のクライアント・コールによって、この実行パイプライン全体が行われる。これの方が、アプリケーション・プログラマにとって使い易い。何故なら、必要な効果コール回数が減少し、抽象化のレベルが高められるからである。クライアントに利用可能な内部で使用するPUのグラフを作ることによって、クライアント・アプリケーション、例えば、メディア・プレーヤは、グラフ・エレメントPUレベルで必要なハードウェア資源を取り決める(negotiate)ことが可能になる。
CPLフレームワークは、これら3つの属性に対する処理コードが入手可能であることを条件に、特定のフォーマットおよびメディア・タイプに対して特定のドメイン上における特定のPUの実行を強制するために、ユーザがCContextを通じて実行ドメインを指定することを可能にする。
GPUに対するような、大きなアップロードおよびダウンロードの不利(penalty)を有するハードウェア・ドメイン上における競合を抑えるために、そしていずれの特定のCData属性について可能であればいつでも、PUの実行を順次行う。この順次実行は、通例、ハードウェア・ドメインに特定的であり、目標ハードウェアの並列性およびパイプライン処理特性を考慮に入れている。データは、空間的および時間的に並べる(tile)ことができる。入力および出力は、自動的にCPLフレームワーク・コアによって、更に小さいチャンク(chunk)に分割され、次いで同時または順次ハードウェアにアップロードされ、PUに供給され、入力に挿入するためにダウンロードされる。これには、PUがデータ・サイズに対するハードウェア特定制限を回避することができるという、追加の便益がある。
競合制限およびデータ・サイズに対するハードウェア特定制限の回避の実現は、次のように進められる。広義の用語を用いると、CPL実行のパスは、入力ドメインから実行ドメインへのデータのアップロードから開始し、この後に実行ドメインに対するデータ処理段階が続き、この後に実行ドメインから目標ドメインへのダウンロードが続く。入力/出力ドメインが実行ドメインと一致する場合、アップロードおよびダウンロード・ステップは設けられない。アップローディング/ダウンローディングが必要なときには、ドメイン毎に変化するデータ転送時間の負担を負うことになる。処理の性質によっては、このレイテンシ期間が、当該ドメインに位置するデータを処理するために必要な時間よりも遥かに大きくなる可能性がある。競合を制限しないと、PUは、(1)入力データ集合全体のアップロードを開始し、(2)転送が完了するのを待ち、(3)処理を開始し、(4)処理が完了するのを待ち、(5)出力データ集合全体のダウンロードを開始し、(6)転送が終了するのを待つことになる。対照的に、競合を制限すると、CPLは、ドメイン支援同時転送および実行を利用することにより、入力および出力データをより小さなチャンクに分割し、それらのサイズの方が小さいことから、データ集合全体よりもアップロードおよびダウンロードが速く行われ、このプロセスを加速する。実行シーケンスは、(1)チャンク#1を開始し、この動作の完了を待ち、(2)チャンク#1の処理を開始し、チャンク#2のアップロードを開始し、これら2つの動作の完了を待ち、(3)チャンク#1のダウンロードを開始し、チャンク#2の処理を開始し、チャンク#3のアップロードを開始し、これら3つの動作の完了を待ち、(4)チャンク#2のダウンロードを開始し、チャンク#3の処理を開始し、チャンク#4のダウンロードを開始し、これら3つの動作の完了を待ち、(5)処理するチャンクがなくなるまで以上のことを続ける。しかるべきチャンク・サイズを用いれば、目標ドメインのハードウェアは連続的にデータを処理しており、その間にその次のデータ集合をアップロードし、以前の結果をダウンロードする。
このように、CPLにおいて順次処理することにより、2つの便益が得られる。最初に、同時転送および実行を支援するドメインに対するアップロード/ダウンロード・レイテンシの影響を抑えることにより、システム性能向上が得られる。最初のチャンクをアップロードするとき(そしてまだ何も処理するものがないとき)、および最後のチャンクをダウンロードするとき(そして他の処理するものがないとき)にのみ、残留アイドル時間が発生する。第2に、入力データ集合が大き過ぎて実行ドメインのメモリに収まらない場合、またはその現行の仕様を超過する場合でも、目標ドメイン上で使用される資源はCDataパラメータ当たり3チャンクを超えることは決してないので、これらの入力データ集合を処理することができる。
変換の抽象化
変換は、特殊な外部PUの集合として実施する。これらは、1つのCData属性から他の何らかのCData属性に変換するために用いられる内部PU集合を結束する。変換は、変換する対象を用いて外部処理ユニットをコールすることによって、明示的に呼び出すことができ、または予期しなかった属性のCDataが外部PUに入力として与えられたときには暗示的に呼び出すことができる。不一致があったときはいつでも、CPLフレームワーク・コアによる要求に応じて、自動変換を行い、与えられたパラメータを常にPUが理解できることを保証する(要求駆動型実行)。
CPL開発者によって新しい属性または新しいPUがCPLフレームワークに追加されたとき、既存の属性インスタンスのための入力および出力変換器は新たな処理ユニットおよび新たな属性を、現存する集合に統合する。これによって、新たな属性および処理ユニット間における相互運用性を可能にする。例えば、ILは主(RAM)メモリに配置しなければならないIDSImage型(kind)のデータに対して動作する。IL−GPUは、GPUと関連のあるメモリであるVRAMに配置する必要があるIDSGPUImage型にフォーマットされたデータに対して動作する。変換器は、自動的に、データを一方のドメイン(この例では、IL/CPU RAM/IDSImage)から他方(例えば、IL GPU/GPU VRAM/IDSGPUImage)に変換する。
種々のオブジェクトにおいて見られるパラメータおよびプロパティには、文字列の名称が付けられている(string-named)ことによって、スクリプティング・エンジンによる容易なインターフェース処理が可能となる。
CPLフレームワーク202と関連のあるオブジェクトは、外部ライブラリ連結を必要としない個々のコンポーネントとして開発される。CPLプロトコルは、フレームワーク202内部にあるPUと、種々の利用可能な実行および記憶ハードウェア・ドメインに特定的な低レベル・ライブラリとの間にあるインターフェースを通じて実施される。CPL開発者は、新たな低レベルライブラリを、集合、新たなデータ・タイプ、新たなPUに追加することができ、更にCPLフレームワークを用いるクライアント・アプリケーションを変更することなく新たなインプリメンテーションを追加することによって、既に存在するPUを拡張することができる。
再度図2を参照すると、CPLレイヤ216は、クライアント・アプリケーション218と、ドメイン特定のメディア処理に用いられる低レベル・ライブラリ204a〜204fとの間にある中間レイヤを表す。記載している実施形態では、CPLレイヤ216は、CPLデータ・オブジェクト214、即ち、開発および実行フレームワーク202全体を通じて用いられるデータ・オブジェクトと、データ・オブジェクト上で有意な動作を実行するオブジェクト集合を含み、正しく定められているインターフェースによって制御される関数コールと同等の機能を有するCPL PUとで構成されている。CPL PUは、全体的にCPL::IP206で示す画像処理ユニットと、全体的にCPL::GP208で示すグラフィックス処理ユニットと、ドメイン、タイプ、およびフォーマット変換を実施するCPL::変換器210で示す変換器と、ディスプレイ・ドライバのような、CPL::Utils212で示すユーティリティとを含む。
クライアント・アプリケーション218は、下位ライブラリ204a〜204fのいずれに対しても直接的な連結を必要としない。CPLフレームワーク202の主要な特徴の1つは、その中にホストされているオブジェクトはプラットフォームにいは依存しないことである。オブジェクトは均一なコンポーネント・フォーマット(CF)に準拠しており、各コンポーネントはCFプラグインとして実施される。新たなオブジェクトまたは新たなドメイン・インプリメンテーションは、新たなプラグイン・ファイルを計算システム上にあるしかるべきフォルダ内に単に追加するだけで、クライアントに利用可能にすることができる。
CP::データ・オブジェクト214は、データの関連するハードウェア・ドメイン、タイプ(例えば、ラスタ、パラメトリック形状)、およびフォーマット(オブジェクト・タイプに結束され、呈示されるデータの品質に関する情報を含む)を抽象化して、データを一意に表すために用いられる。CPL::データ・オブジェクト214は、ドメイン特定下位ライブラリ102a〜102fにおいて定められるデータ・オブジェクトのいずれにも、それを取り巻くラッパとしての機能を果たす。CPL::IP206およびCPL::GP208PUの各々は、しかるべきCPL::データ・オブジェクト214であればいずれでも受け入れる。フレームワーク202は、代理設計パターンを用いる要求駆動型実行を考慮している。例えば、ラスタは、画素が要求されるまで作成されず、連接動作によって発生する。
図3を参照すると、個々のPU300は、外部PU302および数個の内部PU304とで構成されている。PU300は、CPL処理ユニットからの画像PU(CPL::IP206)またはグラフィックスPU(CPL::GP208)の集合の一部材であり、CPL::データ・オブジェクト124に対してグラフィックおよび画像処理を行う処理オブジェクトを表す。PU300は、任意の数の入力CPL::データ・オブジェクト(ファイル・リーダPUのように、ソースPUについては0を含む)を取り込み、任意の数の出力CPL::データ・オブジェクトを生成する(出力表示を発生するPUのような、シンクPU(sink PU)については0を含む)。PU300は、ステートレス・オブジェクトであり、クライアントがそれに受け渡した実行コンテキストの中に、その内部またはコンテキスト状態を格納する。記載している実施形態では、PU300はFXインターフェース306およびコンパイラ・インターフェース308を露出する。FXインターフェース306は、クライアント・アプリケーション218とインターフェースする。クライアント・アプリケーション218は、例えば、メディア・プレーヤである。FXインターフェース306を用いて、クライアント・アプリケーション218は、特定のタイプの目標メディア・オブジェクトや、目標メディア・オブジェクトを表す/格納する際のフォーマットや、効果を実行しようとするハードウェアには依存しない命令を用いて、ビデオ効果(FX)のようなメディア処理機能を実行するために必要な1つ以上のPUを呼び出す。
記載している実施形態では、FXインターフェース306は、(i)入力および出力CPL::データ・オブジェクトの指定、(ii)入力パラメータの指定、(iii)特定の実行ドメインを強制するか否か、(iv)特定の実行タイプおよびフォーマットを強制するか否かを含み、必要であれば、利用可能な変換器を利用する。これらの代わりにまたはこれらに加えて、他のパラメータを指定することもできる。
コンパイラ・インターフェース308は、PU300が、支援する実行ドメイン、データ・オブジェクト・タイプ、およびフォーマットを含む、それに利用可能な能力を問い合わせることを可能にする。また、そのPUに対して好ましい実行ドメイン、タイプ、およびフォーマットも問い合わせる。コンパイラ・インターフェース308を通じて入手した情報によって、PU300はホストCPU、GPU、あるいはセル・プロセッサまたはLarrabee GPUのような、カスタム・グラフィックス処理デバイスのようなその他のハードウェアのような、それに利用可能なハードウェア資源の使用を最適化することができる。また、コンパイラ・インターフェースを通じて供給される情報によって、PU300は、データ・オブジェクトがクライアント・アプリケーション218の順次的機能ユニットを伝わっていく方法を適正に取り決めることが可能となる。例えば、メディア・プレーヤ・アプリケーションの場合、PU300は、コデック、効果、変換器、およびディスプレイのような、種々のプレーヤ・ノードにオブジェクトを通過させることを、確実に可能にする。記載している実施形態では、コンパイラはCPLレイヤ216内にある。
PU300は、ドメイン特定ライブラリをコールする内部処理ユニット312a〜dに、インターフェース310a〜dを通じた低レベル・ライブラリ204a〜fへのコールを供給する。例えば、GPUインターフェース310aは、外部PU302をGPU108(図1参照)をコールする内部PU312aとインターフェースさせ、GPU画像ライブラリIL−GPU204b(図2参照)およびGPUグラフィックス・ライブラリGk−GPU204eの双方を呼び出すことができる。同様に、インターフェース310bは、外部PU302を、CPU画像ライブラリIL204aおよびCPUグラフィックス・ライブラリGk204dをコールする内部PU312bにインターフェースする。他の下位インターフェースも、どの追加ドメインがメディア処理システム100に利用可能かに応じて、PU300に利用可能となる。例えば、外部PU302および内部PU312c間のインターフェース310cは、Avid Technology社のNitrisシステムがある場合に利用可能となり、PU300はNitris画像ライブラリIL−DLE204cとインターフェースすることが可能になる。同様に、インターフェース310dは、セル・プロセッサがあれば利用可能となり、外部PU302は、セル・プロセッサをコールすることができる内部PU312をコールすることが可能になる。加えて、他のインターフェースも利用可能になれば、PU300は、ディスク・ドライブのようなその他のドメインと、パーザ・ライブラリ204fを通じて相互作用することが可能になる。
CPL::IP PU206は、画像処理動作を実行し、主にラスタ画像であるメディア・オブジェクトを取り扱う。CPL:IP PUの例には、色補正、ぼけ、および形状に基づく光沢(matte)調節が含まれる。CPL::GP PU208は、幾何学およびその他のグラフィックス動作を行い、主にパラメータ表現による曲線、表面、および立体であるメディア・オブジェクトを取り扱う。CPL::GP PUの例には、絵文字発生器や形状変形が含まれる。
PUの実行は、CData属性、即ち、指定されたデータ・ドメイン、タイプ、およびフォーマットに基づく実行属性に応じて進む。実行属性は、クライアント218によって強制されるか、またはPU自体が自動的に決定する。特定の実行属性を強制するために、クライアント218は、クライアント218およびCPLレイヤ216間のインターフェースを用いて、コンテキストから所望のドメイン、タイプ、およびフォーマットを返す。例えば、クライアント218またはPUは、PUの同期実行を強制することができ、その場合、メソッドはブロッキング(blocking)であり、あるいは非同期実行を強制することができ、その場合メソッドは非ブロッキング(non-blocking)である。実行を非同期にするためには、クライアント218は「コールバック助言」をコンテキスト・オブジェクトCContextを通じて戻す。
ある種のドメインでは、入力メディア・オブジェクトをより小さなチャンクに分圧することが必要な場合や、有利な場合もあり得る。例えば、CPUがラスタ・メディア・オブジェクト全体を一度で処理できる広大なメモリを有していても、GPUの方がメモリ制約が大きく、ラスタ全体を取り扱うことができない場合がある。この問題を克服するために、タイル分割(tiled)実行モデルが必要となる。開発フレームワーク202は、クライアントからは隠されている自動タイリング・メカニズムを提供する。自動タイリング・メカニズムは、入力オブジェクトをタイル状にして、PUに供給し、次いで意図する出力を出力タイルから構成し直す。このメカニズムは、現在用いられているハードウェア構成およびドメインに応じて個別に作成する。
タイル型実行モデルは、マルチ・スレッディングを必要としない。しかしながら、特定のドメインにおいて、バッファ転送および実行を並列に実行することが許される場合、フレームワーク202はこの特徴を利用する。処理を更に小さな実行ブロックに分割し並列化することによるマルチ・スレッディングは、CPLフレームワーク・レベルではなく、マルチ・スレッダ・ブロック226によって図2に示すように、クライアント・レベルにおいて管理する。マルチ・スレッド様式でPUにコールするのは、クライアントの責務である。場合によっては、この目的のために、コールされるPUの対象領域およびフィールド・マスキング機能を呼び出すことができる。これを行うためには、CPLを意識したマルチ・スレッダ・サービスへのアクセスを、クライアント・アプリケーション218に供給する。これらのサービスは、実行する動作、用いられるドメインおよびフォーマット、ならびに許可される並列タスクの数、スレッドの一群の指定、スレッド親和性(affinity)および優先度のような、クライアントが供給する追加の指令に基づいて、PUコールをいかにしてマルチ・スレッド処理またはパイプライン処理するかを決定する。
CPL::変換器210は、特殊化したPUであり、三部属性(タイプ、フォーマット、ドメイン)を有するCPL::データ(Cdataオブジェクト)を入力として取り込み、これを異なる属性を有する指定の出力CDataオブジェクトに変換する。変換器210は、メディア・オブジェクトを1つのタイプから別のタイプへ、1つのフォーマットから別のフォーマットへ、そして1つのドメインから別のドメインに変換する。場合によっては、変換器PUが順次行うのではなく、1回のステップでメディア・オブジェクト属性の3つのコンポーネントの内1つよりも多いコンポーネントを変換する場合もある。タイプ変換器は、曲線、表面、およびボリューム(volume)のような、パラメータで定めたグラフィックス・オブジェクトを、例えば、シーン・レンダラ(scene renderer)が用いるような、ラスタ画像に変換するラスタライザを含む。逆に、「シンセサイザ」型変換器は、ラスタ画像を、例えば、マジック・ワンド(magic-wand)におけるような、パラメータで定めたオブジェクトに変換する。フォーマット変換器は、画像フォーマット変換器を含み、例えば、YCC画像をRGB画像に変換する。ドメイン変換器の一例では、GPUと関連のあるメディア・オブジェクトを、CPUホストと関連のあるメディア・オブジェクトに変換する。変換器210は、分散したユーティリティ・ルーチン集合として実装するのではなく、CPLフレームワーク202の内部に統合する。
CPLユーティリティPU212は、ライン・ツールTo()や矩形ツールRec()のような原始的描画ツール、ならびにファイルに対する単純なリーダおよびライタを含む。これらのPUは、主に検査の目的で利用される。
下位ライブラリ102a〜fは、下位ツールボックスを備えており、これらは種々のドメインおよびプラットフォーム特定画像およびグラフィック処理を実施する。記載している実施形態では、利用可能な下位ライブラリには、CPU102上のラスタ/画像処理機能(IL204a)、CPU102上のグラフィック処理(Gk204d)、GPU108上のラスタ/画像処理(IL−GPU204b)、GPU108上のグラフィック処理(Gk−GPU204e)、およびディスク118上に位置するまたはこれに出力するメディア・オブジェクトの処理(パーザ204f)を実施するライブラリが含まれる。
各下位ライブラリは、総じて互いに依存しない。これらが収容するオブジェクト・タイプ、これらが実施する抽象化のレベル、およびそのシンタックス間には互換性がないと考えればよい。
これより、GPU108および110のような、グラフィックス処理ハードウェア・ドメインのために主に開発されたハードウェアを用いることによる加速化画像処理の推移および実行を容易にするフレームワーク202の用途について更に詳しく説明する。画像処理は、メディア・プレーヤ、エディタ、または画像処理システムのような、画像処理機能を含むサービス・クライアント・アプリケーション218を必要とする。先に展開した概念を用いて、記載している実施形態はこのような加速化画像処理を、ここではGPGPU処理と呼ぶ、1つ以上のGPU上で、ラスタ画像またはグラフィックス・オブジェクトに対応するCDataタイプとGPUに対応する実行ドメインとを有するメディア・オブジェクトのために実施する。CPLレイヤ216は、DirectXおよびOpenGLのような上位画像処理API、あるいはPinnacle 3D-ServerまたはApple Core Imageライブラリのような現在利用可能ないずれの技術に対しても、GPGPU抽象化を可能にする。
図4を参照すると、CPL抽象化レイヤ216は、GPGPUサブレイヤ404および3Dレンダリング・レイヤ406を通じて、GPU上でクライアント画像処理システム402を実装する。GPGPUサブレイヤ404は、画素、ベクトル、およびデータ処理のためにGPUを使い易くする。3Dレンダリング・サブレイヤ406は、GPU上で3Dシーンをレンダリングするために、3D APIを抽象化する。レイヤ404および406は、OpenGL410、DirectX412、コア画像414、および3D−サーバ416、ならびにその他の企業固有のAPIまたは公開APIの部分集合で構成することもできる。図示の実施形態では、下位ライブラリは、Microsoft Corp.からのWindows(登録商標)オペレーティング・システムを走らせるPC(418、422)、およびMac OS Xのような、Apple Inc.,が提供するオペレーティング・システム(420、424)を含む、市販のパーソナル・コンピュータ・プラットフォームによってホストされるGPU上に実装されている。
先に論じたように、フレームワーク202は、ビデオ効果220、222、および224(図2参照)が、CPU102、オペレーティング・システム116、およびグラフィックス・ハードウェア108、110を含むメディア処理システムの処理システム100の選択には依存しないことを可能にする。GPGPU処理を実行するために、フレームワーク202は主にGPU108を画素処理エンジンとして用いて、GPU上のラスタ下位ライブラリおよびグラフィックス下位ライブラリの部分集合を、それぞれ、IL−GPU204bおよびGk−GPU204eとして実装する。GPUのGk 3Dレンダリング能力も利用することができ、その結果光と影を伴う高品質のレンダリングが得られる。GPGPUレイヤ404および3Dレンダリング・レイヤ406。
また、フレームワーク202は、GPU加速画像処理システムも提供する。このシステムは、テクスチャ、フレーム・バッファ・オブジェクト、マルチ・サンプル・レンダ・バッファ、およびリード専用/ライト専用/リード−ライト画素バッファ・オブジェクト(即ち、多くの異なる画像レンダリング・データ・バッファ)を1つの画像インターフェースに抽象化する。加えて、フレームワーク202は、画像レンダリング・テクスチャ・パラメータを、色空間、画素深さ、画素範囲を含む1つの画像インターフェースに抽象化する。
記載している実施形態では、8ビット・テクスチャの転送を最適化する。当然そして遺物(legacy)の問題のために、GPUドライバは8ビットBGRAフォーマットを直接転送する。他の8ビット・フォーマット全ては、最初に、CPU上でBGRAフォーマットへの変換段階で処理され、その後でネーティブに(native fashion)転送される。記載している実施形態では、GPUドライバを「騙して」、RGB、YCC、またはネーティブ、BGRAテクスチャのような別のフォーマットのいずれであれ、他の8ビット・テクスチャ・フォーマットを受け入れさせる。これによって、低速CPU変換段階の迂回が可能になる。このような、GPU上を「そのまま」転送される画像データにアクセスするために、GPU上に格納されているシェーダ・プログラムは、本当のソース・データ・フォーマットを知らされており種々のチャネルがアクセスされている際に実行中にこれらをその正しい位置にアンスクランブルする小さなソフトウェア・レイヤを用いる。これはGPU自体上で実行されるので、変換を取り扱うためにドライバを利用する標準的な内蔵変換方法よりもはるかに速く実行する。この転送最適化は、8ビット・テクスチャのみに適用する。何故なら、16ビット浮動小数点のような、更に大きなフォーマットの方が遅れて開発されたのであり、遺物のインプリメンテーションや慣例による影響を受けないので、ネーティブにRGBAに転送されるからである。
GPU加速化画像処理システムは、RGBA画像データを、ホスト−GPUメモリ間転送およびGPU処理に最適なフォーマットにパックすることができる。8ビット・データのホスト−GPU間転送に最適な内部フォーマットはBGRAであり、一方他の全てのデータ・タイプのホスト−GPU間転送に最適な内部フォーマットはRGBAである。一実施形態では、8ビットRGB色空間画像の全てをBGRAテクスチャにパックする。画素チャネル・レイアウト変換レイヤは、画素プログラムの全てをラップ(wrap)して、これらのプログラムが画素をRGBAとしてアクセスし書き込むことができるようにする。このレイヤは、GPUテクスチャにおける正しいチャネルにアクセスするために、リード/ライト動作を変換する。
一実施形態では、GPU加速化画像処理システムは、YCC画像を、ホスト−GPUメモリ間転送およびGPU処理に最適なフォーマットにパックする。この場合、8ビット・データ用内部フォーマットはBGRAであり、8ビットYCC色空間画像をBGRAテクスチャにパックし、その他の全てのデータ・タイプ用の内部フォーマットはRGBAである。他のYCC色空間画像は全て、RGBAテクスチャにパックする。画素色空間変換レイヤは、画素プログラムをラップして、このプログラムが画素をRGBAデータとしてアクセスし書き込むことができるようにする。CPLレイヤ216は、実行中に色空間変換を行うために、リード/ライト動作を変換する。
別の実施形態では、GPU加速化画像処理システムは、別個のアルファ・チャネルのYCC画像を(YCCA)、ホストからGPUへのメモリ転送に最適なフォーマットでパックし、8ビット・データ用BGRAを用いたGPU処理は、全ての8ビットYCCA色空間画像をBGRAテクスチャにパックし、他の全てのデータ・タイプにはRGBAを用いる。他のYCCA色空間画像はRGBAテクスチャにパックされ、一方アルファ・チャネルのパッキングは、矩形領域をテクスチャの右側に添付することによって行う。このようにして、YCCA画像をホストからGPUへの転送に最適な1つのテクスチャに格納する。アルファ・チャネルを水平にパックすることには、テクスチャ・メモリ空間を浪費しない利点があり、アルファ・チャネルの空間解像度を、クロミナンス・チャネルの空間解像度と異ならせることができる。
本システムは、適時にコンパイルしたマルチ・パス画素プログラムを、インテリジェントな部分的プログラム・コンパイル、キャッシング、およびパス毎の読み出しによってキャッシュすることができる。
本システムは、GPUデータ・バッファ・タイプの各々を、メモリ・プールを用いてリサイクルする。プール内に収容されるバッファ・タイプは、いずれのフォーマットのテクスチャも、リード専用/ライト専用/リード・ライト画素バッファ・オブジェクト、フレーム・バッファ・オブジェクト、およびマルチ・サンプル・レンダ・バッファを含む。GPUバッファのリサイクルは、バッファを割り当てそして割り当てを解除するよりも遥かに速い。システムがビデオ処理を実行しているとき、バッファのリサイクルによって、VRAM112の断片化を回避するという便益が追加される。
別の実施形態では、GPU加速化画像処理システムは、色空間(RGB、YCC601、YCC709)、画素深さ(8ビット、16ビット、32ビット、整数/浮動小数点/符号なし)、画素範囲(ビデオ・レベル、グラフィック・レベル、正規化浮動レベル)、および/またはメモリ・レイアウトおよびパッキング(RGB、RGBA、BGRA、422、444、分離アルファ(separate alpha)、上から下/下から上)の自動取扱を設ける。
また、GPU加速化画像処理システムは、アルゴリズムに対する自動マスキング・サービスも提供することができ、別個のマスク画像を用いた処理画素マスキング動作、ライト・フィールド(奇数/偶数ライン)マスキング、処理チャネル・マスキング(赤−緑−青−および/またはアルファ)マスキング、および/または対象領域マスキングを含む。
また、本システムは、ホストからGPUメモリへの転送およびGPUからホスト・メモリへの転送の改善を、複数の表示構成、および使い易い画素プログラム−C++機能オブジェクト結束メカニズムによって達成する。
種々の実施形態では、フレームワーク202は、以下のデータ構造および機能を、画像処理アプリケーションの開発者に、計算構成100に接続されているユーザ・インターフェース120を通じて提供する。開発者にメモリ割り当ておよび所有権(ホストまたはGPU上)を定義および/または管理させる画像機能、テクスチャ、リード専用画素バッファ・オブジェクト、ライト専用画素バッファ・オブジェクト、リード−ライト画素バッファ、オブジェクト、フレーム・バッファ・オブジェクト、および複数のサンプル・レンダ・バッファ・オブジェクトを含む多くの種類のGPUバッファへのインターフェース、RGB、YCC601、およびYCC709のような色空間、8ビット、16ビット、32ビット、整数/符号付き浮動小数点/符号なしのような画素深さ、ビデオ・レベル、グラフィック・レベル、および正規化浮動レベルのような画素範囲、ならびにRGB、RGBA、BGRA、422、444、分離アルファ、上から下/下から上を含むメモリ・レイアウトおよびパッキング。また、このフレームワークは、画像プール機能も提供し、各バッファを割り当てそして割り当てを解除するよりも高速なバッファのリサイクル、および計算構成100におけるGPUバッファのいずれのリサイクルをも含む高速画像リサイクルを開発者に定義および/または管理させる。
フレームワーク202は、画素プログラムを書くことができるC型言語、画素プログラムを、複数の入力および出力を有するアルゴリズムをサポートし、更に入力を有さないソース・アルゴリズムをサポートする単純なC++機能オブジェクトに結束するベーク・クラスを提供することができる。また、このフレームワークは、再利用のためにC++関数オブジェクトを保持するためのライブラリ、ならびに画素プログラムの適時コンパイル、既にコンパイルしたプログラム、多重パス画素プログラムのハッシングおよび高速読み取りを容易にする画素プログラム・キャッシュも特徴とする。パスとは、画像の一部または全体に対する何らかの画素動作の実行であり、適時コンパイルおよびキャッシュは、キャッシュの粒土が単一パスであるパス・レベルにおいて実行する。
種々の実施形態において、フレームワーク202はいずれの処理動作に対する自動マスキング・サービスも提供することができ、別個のマスク画像を用いた処理画素マスキング動作、ライト・フィールド(奇数/偶数ライン)マスキング、処理チャネル・マスキング(例えば、赤−緑−青−および/またはアルファ)、および/または対象領域マスキングを含む。また、画像をホスト・メモリからGPUメモリに、そしてGPUメモリからホスト・メモリに転送する機能の最適化、およびフレームワーク画像のリアル・タイム表示のためのウィンドウ・インターフェースも提供する。
フレームワーク202内部では、GPUを用いる処理ユニットをアクティブ・オブジェクトとすることができる。したがって、開発者は、このオブジェクトをコールして非ブロッキング様式で作業を実行するプログラムを作成することができる。コール元プログラムは、他のタスクを進め、処理ユニット内部で実行が進む間に、将来値を保持することができる。最終同期点が発生し、結果を一緒に送り出さなければならないとき、ブロッキング様式で将来値にアクセスすることができ、データを併合することができる。処理ユニットは、GPU108、110の1つまたはその他のドメインのような、特定の種類のハードウェアとのその親和性を公開する能力を有し、所与の作業単位を片づけつつ、どのハードウェアを用いるべきかに関する判断を行うのに役立つ。
フレームワーク202とインターフェースする開発者は、新たな画像処理アルゴリズムを書き、それを既存のアプリケーションに統合したり、または既存の画像処理ルーチンを再利用することができる。フレームワーク202は、目標ハードウェア・ドメイン、データ・タイプ、およびデータ・フォーマット毎に、新たなアルゴリズムを異なるバージョンで書く必要性を未然に防ぐ。これによって、新たな機能をクライアント218に追加するのに必要な時間を短縮し、コストを削減して、デバッグおよび互換性の問題を軽減する。
図5は、クライアント218と下位ライブラリIL−GPU204bとの間における、GPUフレームワーク・レイヤ502を通じたデータの流れおよび実行を示す。GPUフレームワーク・レイヤ502は、GPUドメインに要求が発行されたときに、CPUレイヤ216内部におけるPUからのコールを受け取る。更に具体的には、図5は、クライアント・アプリケーション218およびインターフェースとIL−GPU内に実装されているエレメントとの間における画素データの流れ、画像の割り当て、C++関数コール、ならびに画素プログラム・コードを示す。太めの矢印は画素データの流れを示し、破線の矢印はメモリ割り当てを追跡し、太い破線の矢印は、IL−GPUとの全動作、即ち、GPUにデータをアップロードし、プログラムを実行し、出力をCPUにダウンロードする動作を遂行するために必要となるC++関数コールを示す。破線は、プログラムがどこに位置するか、そしてどこで実行が要求されるかを示す。
クライアント・アプリケーション218のために新たな画像処理アルゴリズムを実装するために、開発者はOpenGL GLSLおよびDirect3D HLSL間の相違を抽象化するコンパイラ・マクロを有するC型シェーダ言語を用いて、処理パス毎に別個の画素プログラム504を書く。新たなC++関数オブジェクト・クラス506は、主要画素プロセッサのベース・クラスから導出され、処理パス毎に画素プログラム・コードを戻す1つの関数を実装する。
主要画素プロセッサのベース・クラスは、入力画像508、出力画像510、対象領域のパラメータ、およびマスキング・パラメータを含むクライアント・アプリケーション・パラメータを受け入れる。実行時に、主要画素プロセッサのベース・クラスは、新たなアルゴリズムを実施するC++関数オブジェクトの実行時に、以下のアクションを適時に実行する。(1)処理パス毎に、画素プログラム・キャッシュ512をチェックして、当該画素プログラム・パスが既にコンパイルされているか否か調べ、コンパイルされていない場合、(a)コードを検索して、導出されたクラスから、新たなアルゴリズムを実装する各処理パス求め、(b)入力および出力画像画素深さ、画素範囲、色空間およびメモリ・レイアウトに応じて、自動変換機能を画素プログラムに添付し、自動変換機能は、コンパイルが成功するために画素を読み取り書き込むための新たな画素プログラムにおいてコールされるフック(hook)であり、(c)クライアント・アプリケーション・パラメータに応じて自動画素マスキング動作を画素プログラムに添付し、(d)画素プログラムのコンパイルのためにOpenGLドライバにコードを送り、(e)コンパイルしたプログラムを画素プログラム・キャッシュ510に格納する。(2)入力テクスチャを、レンダリングのためのソース・テクスチャとして結束する。(3)また、出力テクスチャをOpenGLフレーム・バッファ(レンダ目標と言っても分かる)として結束する。(4)処理パス毎に、OpenGLによって1つまたは多くのテクスチャを施した矩形のレンダリングを開始する。レンダリングは、直前のステップにおいて画素プログラム・キャッシュから得た画素プログラムを用いて実行する。対象領域に対するクライアント・アプリケーション・パラメータが、矩形およびOpenGLビューポートのサイズを決定する。
新たなアルゴリズムを実装するC++関数オブジェクトは、OpenGLテクスチャをラップする画像を受け付けるだけである。正規画像をシステムのホスト・メモリからビデオ・メモリにおけるOpenGLテクスチャに変換する手段のために、他の関数が用意されている。
GPU実行時コンポーネント(ILGPU204b)は、前述のC++関数オブジェクトをコールすることができるように、以下のサービスを提供する。(1)(a)C++関数に対する入力および出力として用いられるテクスチャ、(b)GPUからホストへの高速転送のためのリード専用画素バッファ・オブジェクト、(c)ホストからGPUへの高速転送のためのライト専用画素バッファ・オブジェクト、(d)多種多様なホスト・バッファのためのリード−ライト画素バッファ・オブジェクト、(e)クライアント・アプリケーションに露出されない、出力用テクスチャと組み合わせてフレームワークが用いる、フレーム・バッファ・オブジェクト、および(f)クライアント・アプリケーションに露出されない、エリアシング防止用にフレームワークが用いる、複数のサンプル・レンダ・バッファ・オブジェクトを含む、種々のタイプのバッファのためのメモリ割り当て機能。(2)(a)画素深さ、範囲、色空間、およびメモリ・レイアウト、(b)BGRAのような8ビット・データ配列、およびRGBAのようなその他のデータ・タイプの配列を含む最適テクスチャ・チャネル配列を用いた、書き込み専用画素バッファ・オブジェクト・ホスト・メモリ−GPUテクスチャ・メモリ間転送、(c)GPUテクスチャ・メモリからリード専用画素バッファ・オブジェクト・ホスト・メモリ、および(d)同時に発生する変換および転送によって、1つの関数によって設けられるメモリ割り当て機能(前述の点(1)において説明した)の種々の組み合わせの単一機能における画像転送および変換。GPUによってネーティブにサポートされる画素フォーマットには、レンダリング・パスは不要である。1回のレンダリング・パスは、変換機能によって自動的に実行され、GPU上において実際の変換算術処理を遂行する。これは、CPUよりも遥かに速くこれらの動作を実行する。
フレームワーク502は、メモリ・プール514を、前述の割り当て機能が用いる背景サービスとして提供する。これは、バッファをそのサイズおよびタイプに応じて、使用済みバッファおよびリサイクル準備完了バッファの2つのリストにハッシュする(hash)ことによって動作する。割り当て機能は、リサイクル準備完了バッファが利用可能な場合、メモリ・プールからバッファを読み出す。割り当て解除機能は、バッファをリサイクル準備完了バッファ・リストにつけ加える。
メモリ・プール514は、以下の技法によって、ビデオ処理用途における割り当て機能の性能を向上させる。しかるべきときはいつでも、ビデオ処理アプリケーション218は、同じサイズの画像を再利用し、フレームワーク502が画像バッファをリサイクルすることを可能にすることによって、OpenGL標準的割り当て機能と比較して、約2桁割り当てを高速化する。加えて、メモリ・プールはクライアント・アプリケーション218に、ビデオ・メモリを管理するための問い合わせ機能も提供する。更に、メモリ・プールはメモリ断片化の問題を軽減する。
以上、実施形態例について説明したが、以上のことは例示に過ぎず限定ではなく、一例として呈示したに過ぎないことは、当業者には明白なはずである。複数の変更やその他の実施形態も、当業者の範囲内のことであり、本発明の範囲に該当するものとして想定している。

Claims (52)

  1. メディア処理システムであって、
    ホスト中央処理ユニット(CPU)と、
    複数の実行ドメインと、
    モリと
    を備えており、前記メモリは前記ホスト中央処理ユニットによって読み取り可能な命令を含み、前記ホスト中央処理ユニットによって前記命令が実行されると、前記ホスト中央処理ユニットにメディア処理ユニットを実現させ、該メディア処理ユニットが
    インターフェースであって、
    メディア処理機能を実行するための命令を受
    前記メディア処理機能が実行されるべき対象のメディア・オブジェクトの記述を受、前記メディア・オブジェクトの前記記述は、メディア・オブジェクトのタイプ、メディア・オブジェクトのフォーマット、およびメディア・オブジェクトの位置を指定す
    ためのクライアント・メディア処理アプリケーションを備えたインターフェースと、
    下位の命令の複数のライブラリを備えた複数のインターフェースであって、下位の命令の前記複数のライブラリの各々が、前記複数の実行ドメインの内の対応する1つによって実行可能である、複数のインターフェースと、
    を含み
    前記メディア処理ユニットは、前記クライアント・メディア処理アプリケーションを備えたインターフェースを介して、前記メディア処理機能を実行する命令とメディア・オブジェクトの記述とを受けたとき、前記複数の実行ドメインの内の選択された少なくとも1つの実行ドメインに、前記選択された少なくとも1つの実行ドメインに対応する前記下位の命令の複数のライブラリの内の少なくとも1つのライブラリから下位の命令を呼び出すことによって、前記メディア・オブジェクトに対し前記メディア処理機能を実行させ、前記メディア処理機能を実行する前記命令は、前記複数の実行ドメインには依存しない形態で表現される、
    メディア処理システム。
  2. 請求項1記載のメディア処理システムにおいて、前記メディア処理機能を実行する前記命令は、前記メディア・オブジェクト・タイプには依存しない形態で表現される、メディア処理システム。
  3. 請求項1記載のメディア処理システムにおいて、前記メディア処理機能を実行する前記命令は、前記メディア・オブジェクト・フォーマットには依存しない形態で表現される、メディア処理システム。
  4. 請求項1記載のメディア処理システムにおいて、前記複数の実行ドメインは、中央処理ユニット(CPU)と、グラフィックス処理ユニット(GPU)とを含む、メディア処理システム。
  5. 請求項1記載のメディア処理システムにおいて、前記メディア処理機能は、画像効果であり、前記メディア・オブジェクトの前記タイプはラスタ画像である、メディア処理システム。
  6. 請求項記載のメディア処理システムにおいて、前記画像効果は、ディゾルブ、色補正、テキスト挿入、および動き効果のうち1つを含む、メディア処理システム。
  7. 請求項1記載のメディア処理システムにおいて、前記メディア処理機能は画像効果であり、前記メディア・オブジェクト・タイプはグラフィックス・オブジェクトである、メディア処理システム。
  8. 請求項1記載のメディア処理システムにおいて前記実行ドメインの1つと関連付けられた下位ライブラリの命令の少なくとも部分集合が、前記複数の実行ドメインの別の1つと関連付けられた下位ライブラリの対応する命令の部分集合と互換性がない、メディア処理システム。
  9. 請求項1記載のメディア処理システムであって、更に命令を含み、該命令は、前記ホスト中央処理ユニットによって実行されると、前記メディア処理ユニットに
    前記メディア処理機能と前記メディア・オブジェクト・タイプ、メディア・オブジェクト・フォーマット、およびメディア・オブジェクトの位置のうちの少なくとも1つとの間における不一致を識別させ、
    前記メディア・オブジェクトの前記タイプを別のタイプに変換すること、または前記メディア・オブジェクトの前記フォーマットを別のフォーマットに変換すること、または記メディア・オブジェクトの別の位置と関連付けることのいずれかによって、前記識別した不一致を解消させる、
    ことができるようにする、メディア処理システム。
  10. 請求項1記載のメディア処理システムにおいて、前記メディア・オブジェクトの前記記述は、既存の記述の集合の中の1つであり、前記既存の記述の集合は、新たなメディア・オブジェクト・タイプ、新たなメディア・オブジェクト・フォーマット、および新たな位置のうち少なくとも1つを有する新たな記述を含むように増強することができ、前記メディア処理機能を実行する前記命令は、該命令を書き直し又はコンパイルし直す必要なく、前記新しい記述を有するメディア・オブジェクトに対し前記メディア処理機能を実行させることができる、メディア処理システム。
  11. 請求項1記載のメディア処理システムであって、更に命令を含み、該命令が、前記ホスト中央処理ユニットによって実行されると、前記メディア処理ユニットに、前記メディア・オブジェクトを複数の部分に分割させ、1実行ドメインを第2実行ドメインに接続するデータ・バスを通じて前記部分を順次送出させ、一度に前記部分の1つ前記メディア処理機能を実行させ、メディア処理システム。
  12. 請求項1記載のメディア処理システムにおいて、前記メディア処理機能を実行する前記命令は複数の処理ユニットを備えており、前記メディア処理機能は、前記複数の処理ユニットのうち少なくとも1つの第1処理ユニットを実行することによって遂行され、前記複数の処理ユニットのうち前記少なくとも1つの第1処理ユニットは、前記複数の実行ドメインのうち第1実行ドメイン上で実行されると、前記複数の処理ユニットのうち第2処理ユニットをコールする、メディア処理システム。
  13. 請求項1記載のメディア処理システムにおいて、前記メディア処理機能を実行する前記命令は複数の処理ユニットを備えており、前記メディア処理機能の遂行は、前記複数の処理ユニットの1つをコールし、コールされた処理ユニットからスレッドを生成することを含み、前記コールされた処理ユニットが前記メディア・オブジェクトに対して前記メディア処理機能を実行し続けている間、前記スレッドが非同期で実行される、メディア処理システム。
  14. メディア・オブジェクトを処理するメディア・オブジェクト処理方法であって、
    前記メディア・オブジェクトに対しメディア処理機能を実行するための命令をクライアント・アプリケーションから受け入れるステップと、
    前記メディア・オブジェクトの記述を受け入れるステップであって、前記メディア・オブジェクトの前記記述は、前記メディア・オブジェクトのタイプ、前記メディア・オブジェクトのフォーマット、および前記メディア・オブジェクト位置を指定するステップと、
    前記複数の実行ドメインの選択された少なくとも1つに、前記メディア処理機能を前記メディア・オブジェクトに対し、前記複数の実行ドメインの内の前記選択された1つに関連した下位の命令を呼び出すことによって実行させるステップであって、前記クライアント・アプリケーションからの前記命令は、複数の実行ドメインには依存しない形態で表現される、ステップと、
    含む、メディア・オブジェクト処理方法。
  15. 請求項14記載の方法において、メディア処理機能を実行する前記クライアント・アプリケーションからの前記命令は、前記メディア・オブジェクト・タイプには依存しない形態で表現される、方法。
  16. 請求項14記載の方法において、メディア処理機能を実行する前記クライアント・アプリケーションからの前記命令は、前記メディア・オブジェクト・フォーマットには依存しない形態で表現される、方法。
  17. 請求項14記載の方法において、前記複数の実行ドメインは、中央処理ユニット(CPU)と、グラフィックス処理ユニット(GPU)とを含む、方法。
  18. 請求項14記載の方法において、前記メディア処理機能は、画像効果であり、前記メディア・オブジェクトの前記タイプはラスタ画像である、方法。
  19. 請求項18記載の方法において、前記画像効果は、ディゾルブ、色補正、テキスト挿入、および動き効果のうちの1つを含む、方法。
  20. 請求項14記載の方法において、前記メディア処理機能は画像効果であり、前記メディア・オブジェクト・タイプはグラフィックス・オブジェクトである、方法。
  21. 請求項14記載の方法において、前記複数の実行ドメインの各々は、下位命令ライブラリと関連付けられており、前記実行ドメインの1つと関連付けられた下位ライブラリの命令の少なくとも部分集合が、前記複数の実行ドメインの別の1つと関連付けられた下位ライブラリの命令の対応する部分集合と互換性がない、方法。
  22. 請求項14記載の方法であって、更に、
    前記メディア処理機能と、記メディア・オブジェクト・タイプ、メディア・オブジェクト・フォーマット、およびメディア・オブジェクトの位置のうちの少なくとも1つとの間における不一致を識別するステップと、
    前記メディア・オブジェクトの前記タイプを別のタイプに変換すること、または前記メディア・オブジェクトの前記フォーマットを別のフォーマットに変換すること、または別の位置を前記メディア・オブジェクトと関連付けることのいずれかによって、前記識別した不一致を解消するステップと、
    を含む、方法。
  23. 請求項14記載の方法において、前記メディア・オブジェクトの前記記述は、既存の記述の集合の中の1つであり、前記既存の記述の集合は、既存の記述の前記集合の内の1つでない新たな記述を含むように増強され、前記メディア処理機能を実行する前記命令は、前記命令を書き直し又はコンパイルし直す必要なく、前記新たな記述を有するメディア・オブジェクトに対し前記メディア処理機能を実行させることができる、方法。
  24. 請求項14記載の方法であって、更に、
    前記メディア・オブジェクトを複数の部分に分割するステップと、
    前記第1実行ドメインを第2実行ドメインに接続するデータ・バスを通じて前記部分を順次送出するステップと、
    一度に前記部分の1つ前記メディア処理機能を実行するステップと、
    含む、方法。
  25. 請求項14記載の方法において、前記クライアント・アプリケーションからの前記命令は複数の処理ユニットのうち第1処理ユニットに対するコールを含み、前記複数の処理ユニットの各々は、対応するメディア処理機能を実行することと関連付けられた命令の集合であり、前記複数の処理ユニットのうち前記第1処理ユニットは、前記複数の処理ユニットのうち第2処理ユニットをコールする、方法。
  26. 画像処理システムであって、
    ホスト中央処理ユニット(CPU)と、
    メディア処理中央処理ユニットと、
    グラフィックス処理ユニット(GPU)と、
    モリと、
    含み
    該メモリは前記ホスト中央処理ユニットによって読み取り可能な命令を含み、該命令は、前記ホスト中央処理ユニットによって実行されると、該ホスト中央処理ユニットにメディア処理ユニットを実現させ、該メディア処理ユニットが
    インターフェースであって、
    画像処理機能を実行する命令を受
    前記画像処理機能が実行されるべき対象の画像の記述を受、前記画像の前記記述は、該画像のフォーマットおよび該画像の位置を指定する
    ためのクライアント・メディア処理アプリケーションを備えたインターフェースと、
    下位の命令の複数のライブラリを備えた複数のインターフェースであって、前記下位の命令の複数のライブラリが、メディア処理中央処理ユニットおよびグラフィックス処理ユニットの内の対応する1つによって実行可能である、複数のインターフェースと、
    を含み、
    前記メディア処理ユニットは、前記クライアント・メディア処理アプリケーションを備えたインターフェースを介して、前記メディア処理機能を実行する命令とメディア・オブジェクトの記述とを受けたとき、前記メディア処理中央処理ユニットおよび前記グラフィックス処理ユニットの内の選択された少なくとも1つに、前記メディア処理中央処理ユニットおよび前記グラフィックス処理ユニットの内の前記選択された少なくとも1つに対応する前記下位の命令の複数のライブラリの内の少なくとも1つのライブラリから下位の命令を呼び出すことによって、前記画像に対し前記画像処理機能を実行させ、前記画像処理機能を実行する命令は、前記メディア処理中央処理ユニットおよび前記グラフィックス処理ユニットには依存しない形態で表現される、画像処理システム。
  27. 請求項26記載の画像処理システムにおいて、前記グラフィックス処理ユニットは、関連するシェーダ言語を有し、前記画像処理機能を実行する命令は、前記シェーダ言語には依存しない形態で表現される、画像処理システム。
  28. 請求項26記載の画像処理システムにおいて、メディア処理機能を実行する前記命令の実行は、前記ホスト中央処理ユニット上で走るオペレーティング・システムによって制御され、前記画像処理機能を実行する命令は、前記オペレーティング・システムには依存しない形態で表現される、画像処理システム。
  29. 請求項26記載の画像処理システムにおいて、前記グラフィックス処理ユニットは、画像レンダリング・データ・バッファを含み、該画像レンダリング・データ・バッファは、テクスチャ、フレーム・バッファ・オブジェクト、マルチ・サンプル・レンダ・バッファ、リード専用画素バッファ・オブジェクト、ライト専用画素バッファ・オブジェクト、およびリード−ライト画素バッファ・オブジェクトのうち少なくとも1つを含み、前記画像は、前記画像レンダリング・バッファには依存しない形態で表現される、画像処理システム。
  30. 請求項26記載の画像処理システムにおいて、前記グラフィックス処理ユニットは、画像レンダリング・テクスチャ・パラメータを含み、該画像レンダリング・テクスチャ・パラメータは、色空間、画素深さおよび画素範囲のうち少なくとも1つを含み、前記画像は、前記画像レンダリング・テクスチャ・パラメータには依存しない形態で表現される、画像処理システム。
  31. 請求項26記載の画像処理システムにおいて、前記グラフィックス処理ユニットに前記画像上において前記画像処理機能を実行させることは、多重パス実行と、前記ホスト中央処理ユニット上に適時にコンパイルしたマルチパス画素プログラムをキャッシュすること、前記画素プログラムを部分的にコンパイルすること、ならびに前記部分的にコンパイルされた画素プログラムをキャッシュし取り出すことを含む、画像処理システム。
  32. 請求項26記載の画像処理システムにおいて、前記ホスト中央処理ユニットは、前記メモリの一部を、画像データを格納するために割り当て、前記グラフィックス処理ユニットに前記画像前記画像処理機能を実行させることは、前記メモリの新たな部分を前記画像を格納するために割り当てずに、前記メモリの割り当てた部分をリサイクルすることを含む、画像処理システム。
  33. 請求項26記載の画像処理システムにおいて、前記画像は、8ビットRGB色空間画像として表され、前記ホスト中央処理ユニットに前記画像前記画像処理機能を実行させることは、前記画像をBGRAテクスチャにパックすることを含む、画像処理システム。
  34. 請求項26記載の画像処理システムにおいて、前記画像は、8ビットYCC色空間画像として表され、前記ホスト中央処理ユニットに前記画像上において前記画像処理機能を実行させることは、前記画像をBGRAテクスチャにパックすることを含む、画像処理システム。
  35. 請求項26記載の画像処理システムにおいて、前記画像は、別個のアルファ・チャネルを有する8ビットYCC色空間画像(YCCA)として表され、前記グラフィックス処理ユニットに前記画像前記画像処理機能を実行させることは、前記画像をBGRAテクスチャにパックすることを含む、画像処理システム。
  36. 請求項26記載の画像処理システムにおいて、前記画像処理機能を実行する前記命令は、前記画像を表すために用いられる色空間には依存しない形態で表現される、画像処理システム。
  37. 請求項26記載の画像処理システムにおいて、前記画像処理機能を実行する前記命令は、前記画像を表現するために用いられる画素深さには依存しない形態で表現される、画像処理システム。
  38. 請求項26記載の画像処理システムにおいて、前記画像処理機能を実行する前記命令は、前記画像を表現するために用いられる画素範囲には依存しない形態で表現される、画像処理システム。
  39. 請求項26記載の画像処理システムにおいて、前記画像処理機能を実行する命令は、前記画像を格納するために用いられるメモリ・レイアウトおよびパッキングには依存しない形態で表現される、画像処理システム。
  40. 画像処理方法であって、
    第1のCPU上で走るクライアント・アプリケーションから、画像処理機能を実行する命令を受け入れるステップと、
    前記クライアント・アプリケーションから、前記画像処理機能と関連付けられる画像の指示を受け入れるステップであって、前記画像が、前記画像のフォーマットおよび前記画像の位置を指定する属性に関連付けられた、ステップと、
    第2のCPUとGPUのうちの選択された1つに、前記第2のCPUと前記GPUのうちの前記選択された1つと関連した命令を呼び出すことによって、前記画像に対し前記画像処理機能を実行させるステップであって、前記クライアント・アプリケーションからの前記命令は、前記第2のCPUと前記GPUには依存しない形態で表現される、ステップと、
    含む、画像処理方法。
  41. 請求項40記載の画像処理方法において、前記GPUは、関連するシェーダ言語を有し、前記画像処理機能を実行する前記命令は、前記シェーダ言語には依存しない形態で表現される、画像処理方法。
  42. 請求項40記載の画像処理方法において、前記命令の実行は、前記第1のCPU上で走るオペレーティング・システムによって制御され、前記画像処理機能を実行する前記命令は、前記オペレーティング・システムには依存しない形態で表現される、画像処理方法。
  43. 請求項40記載の画像処理方法において、前記GPUは、画像レンダリング・データ・バッファを含み、該画像レンダリング・データ・バッファのタイプは、テクスチャ、フレーム・バッファ・オブジェクト、マルチ・サンプル・レンダ・バッファ、リード専用画素バッファ・オブジェクト、ライト専用画素バッファ・オブジェクト、およびリード−ライト画素バッファ・オブジェクトのうちの1つであり、前記画像は、前記画像レンダリング・バッファの前記タイプには依存しない形態で表現される、画像処理方法。
  44. 請求項40記載の画像処理方法において、前記GPUは、画像レンダリング・テクスチャ・パラメータを含み、該画像レンダリング・テクスチャ・パラメータは、色空間、画素深さおよび画素範囲のうち少なくとも1つを備えており、前記画像は、前記画像レンダリング・テクスチャ・パラメータには依存しない形態で表現される、画像処理方法。
  45. 請求項40記載の画像処理方法において、前記GPUに前記画像前記画像処理機能を実行させることは、多重パス実行と、前記CPU上に適時にコンパイルしたマルチパス画素プログラムをキャッシュすること、前記画素プログラムを部分的にコンパイルすること、ならびに前記部分的にコンパイルされた画素プログラムをキャッシュし取り出すことを含む、画像処理方法。
  46. 請求項40記載の画像処理方法において、前記第1のCPUは、メモリと関連付けられており、前記第1のCPUは、前記メモリの一部を、画像データを格納するために割り当て、前記GPUに前記画像前記画像処理機能を実行させることは、前記メモリの新たな部分を前記画像を格納するために割り当てずに、前記メモリの割り当てた部分をリサイクルすることを含む、画像処理方法。
  47. 請求項40記載の画像処理方法において、前記画像は、8ビットRGB色空間画像、8ビットYCC色空間画像、および別個のアルファ・チャネルを有する8ビットYCC色空間画像のうちの1つとして表され、前記GPUに前記画像前記画像処理機能を実行させることは、前記画像をBGRAテクスチャにパックすることを含む、画像処理方法。
  48. 請求項40記載の画像処理方法において、前記画像処理機能を実行する前記命令は、前記画像を表すために用いられる色空間には依存しない形態で表現される、画像処理方法。
  49. 請求項40記載の画像処理方法において、前記画像処理機能を実行する前記命令は、前記画像を表現するために用いられる画素深さには依存しない形態で表現される、画像処理方法。
  50. 請求項40記載の画像処理方法において、前記画像処理機能を実行する前記命令は、前記画像を表現するために用いられる画素範囲には依存しない形態で表現される、画像処理方法。
  51. 請求項40記載の画像処理方法において、前記画像処理機能を実行する前記命令は、前記画像を格納するために用いられるメモリ・レイアウトおよびパッキングには依存しない形態で表現される、画像処理方法。
  52. 請求項40記載の画像処理方法において、前記GPUに前記画像前記画像処理機能を実行させることは、前記GPU上における処理スレッドの非同期の実行を含む、画像処理方法。
JP2009093554A 2008-04-08 2009-04-08 複数のハードウェア・ドメイン、データ・タイプ、およびフォーマットの処理を統合し抽象化するフレームワーク Active JP5525175B2 (ja)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US12346308P 2008-04-08 2008-04-08
US12354908P 2008-04-08 2008-04-08
US61/123,549 2008-04-08
US61/123,463 2008-04-08

Publications (2)

Publication Number Publication Date
JP2010020755A JP2010020755A (ja) 2010-01-28
JP5525175B2 true JP5525175B2 (ja) 2014-06-18

Family

ID=40887920

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009093554A Active JP5525175B2 (ja) 2008-04-08 2009-04-08 複数のハードウェア・ドメイン、データ・タイプ、およびフォーマットの処理を統合し抽象化するフレームワーク

Country Status (3)

Country Link
US (2) US8358313B2 (ja)
EP (1) EP2141651B1 (ja)
JP (1) JP5525175B2 (ja)

Families Citing this family (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9849372B2 (en) * 2012-09-28 2017-12-26 Sony Interactive Entertainment Inc. Method and apparatus for improving efficiency without increasing latency in emulation of a legacy application title
US8358313B2 (en) 2008-04-08 2013-01-22 Avid Technology, Inc. Framework to integrate and abstract processing of multiple hardware domains, data types and format
US8910083B2 (en) * 2009-11-10 2014-12-09 Blackberry Limited Multi-source picture viewer for portable electronic device
US9323438B2 (en) 2010-07-15 2016-04-26 Apple Inc. Media-editing application with live dragging and live editing capabilities
US9645866B2 (en) * 2010-09-20 2017-05-09 Qualcomm Incorporated Inter-processor communication techniques in a multiple-processor computing platform
CN102754070A (zh) * 2010-09-26 2012-10-24 联发科技(新加坡)私人有限公司 基于多个命令执行视频处理的方法及相关视频处理电路
US9099161B2 (en) 2011-01-28 2015-08-04 Apple Inc. Media-editing application with multiple resolution modes
US11747972B2 (en) 2011-02-16 2023-09-05 Apple Inc. Media-editing application with novel editing tools
US9997196B2 (en) 2011-02-16 2018-06-12 Apple Inc. Retiming media presentations
US9195501B2 (en) 2011-07-12 2015-11-24 Qualcomm Incorporated Instruction culling in graphics processing unit
US20130107289A1 (en) * 2011-10-28 2013-05-02 Microsoft Corporation Rasterization of printing data
JP5331192B2 (ja) * 2011-11-07 2013-10-30 株式会社スクウェア・エニックス・ホールディングス 描画サーバ、センタサーバ、符号化装置、制御方法、符号化方法、プログラム、及び記録媒体
US9542168B2 (en) 2011-11-10 2017-01-10 Microsoft Technology Licensing Llc Hostable compiler utilizing type information from a host application
US8941670B2 (en) * 2012-01-17 2015-01-27 Microsoft Corporation Para-virtualized high-performance computing and GDI acceleration
US11013993B2 (en) 2012-09-28 2021-05-25 Sony Interactive Entertainment Inc. Pre-loading translated code in cloud based emulated applications
US20140268240A1 (en) * 2013-03-13 2014-09-18 Rampage Systems Inc. System And Method For The Accelerated Screening Of Digital Images
CN104392408B (zh) * 2014-10-20 2019-04-16 贵阳语玩科技有限公司 一种展现图像的系统及方法
US9161006B1 (en) * 2014-12-05 2015-10-13 Kamcord, Inc. Systems and methods for efficient screen capture
US9792663B2 (en) 2014-12-15 2017-10-17 Microsoft Technology Licensing, Llc User-defined command buffer formats supporting data-parallel translation
US10719303B2 (en) 2015-06-07 2020-07-21 Apple Inc. Graphics engine and environment for encapsulating graphics libraries and hardware
US9779468B2 (en) * 2015-08-03 2017-10-03 Apple Inc. Method for chaining media processing
US10515430B2 (en) 2015-11-03 2019-12-24 International Business Machines Corporation Allocating device buffer on GPGPU for an object with metadata using access boundary alignment
US10628296B1 (en) 2016-04-04 2020-04-21 Omni Ai, Inc. Data composite for efficient memory transfer in a behavorial recognition system
CN107818069B (zh) * 2016-09-12 2021-10-01 阿里巴巴集团控股有限公司 数据处理方法及系统
US10564715B2 (en) 2016-11-14 2020-02-18 Google Llc Dual-path foveated graphics pipeline
US10262387B2 (en) * 2016-11-14 2019-04-16 Google Llc Early sub-pixel rendering
US10489877B2 (en) * 2017-04-24 2019-11-26 Intel Corporation Compute optimization mechanism
CN108965364B (zh) * 2017-05-22 2021-06-11 杭州海康威视数字技术股份有限公司 资源配置方法、装置及系统
CN110163790A (zh) * 2018-06-11 2019-08-23 腾讯科技(深圳)有限公司 图像处理方法、装置、系统、存储介质和计算机设备
US10635439B2 (en) * 2018-06-13 2020-04-28 Samsung Electronics Co., Ltd. Efficient interface and transport mechanism for binding bindless shader programs to run-time specified graphics pipeline configurations and objects
US11119771B2 (en) 2018-09-28 2021-09-14 University Of South Florida Computing 2-body statistics on graphics processing units (GPUs)
US11029915B1 (en) 2019-12-30 2021-06-08 Avid Technology, Inc. Optimizing audio signal networks using partitioning and mixer processing graph recomposition
US20220147320A1 (en) * 2020-11-09 2022-05-12 Vizzio Technologies Pte Ltd Highly parallel processing system
US20230082839A1 (en) * 2021-09-10 2023-03-16 Adobe Inc. Rendering scalable raster content

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2312818B (en) * 1994-12-22 1999-11-03 Apple Computer Three-dimensional graphics rendering system
US5774126A (en) * 1995-11-27 1998-06-30 Microsoft Corporation Method and apparatus for dynamically changing the color depth of objects displayed in a computer system
KR100920320B1 (ko) * 2000-02-19 2009-10-07 디지맥 코포레이션 워터마크 인코더 및 디코더를 작동시키는 소프트웨어
AU2001247457A1 (en) * 2000-03-18 2001-10-03 Digimarc Corporation Transmarking, watermark embedding functions as rendering commands, and feature-based watermarking of multimedia signals
US20020184401A1 (en) * 2000-10-20 2002-12-05 Kadel Richard William Extensible information system
EP1359773B1 (en) * 2002-04-15 2016-08-24 Microsoft Technology Licensing, LLC Facilitating interaction between video renderers and graphics device drivers
US20050140672A1 (en) * 2003-02-18 2005-06-30 Jeremy Hubbell Shader editor and compiler
US7885469B2 (en) * 2006-05-22 2011-02-08 Microsoft Corporation Encoded high dynamic range textures
US8860752B2 (en) * 2006-07-13 2014-10-14 Apple Inc. Multimedia scripting
JP4257925B2 (ja) * 2006-08-24 2009-04-30 シャープ株式会社 画像処理方法、画像処理装置、原稿読取装置、画像形成装置、コンピュータプログラム及び記録媒体
US8358313B2 (en) 2008-04-08 2013-01-22 Avid Technology, Inc. Framework to integrate and abstract processing of multiple hardware domains, data types and format

Also Published As

Publication number Publication date
EP2141651A2 (en) 2010-01-06
US8982138B2 (en) 2015-03-17
US20090251475A1 (en) 2009-10-08
US8358313B2 (en) 2013-01-22
EP2141651A3 (en) 2012-03-28
US20130127883A1 (en) 2013-05-23
EP2141651B1 (en) 2018-06-13
JP2010020755A (ja) 2010-01-28

Similar Documents

Publication Publication Date Title
JP5525175B2 (ja) 複数のハードウェア・ドメイン、データ・タイプ、およびフォーマットの処理を統合し抽象化するフレームワーク
US10949177B2 (en) Method and system of a command buffer between a CPU and GPU
US7750913B1 (en) System and method for implementing graphics processing unit shader programs using snippets
JP5043921B2 (ja) グラフィックオペレーションのための高レベルプログラムインターフェース
US20100214301A1 (en) VGPU: A real time GPU emulator
KR101732288B1 (ko) 스프라이트 그래픽 렌더링 시스템
JP5242771B2 (ja) 混合精度命令実行を伴うプログラマブルストリーミングプロセッサ
US8797336B2 (en) Multi-platform image processing framework
KR101130407B1 (ko) 향상된 그래픽 파이프라인을 제공하는 시스템 및 방법
US8339404B2 (en) System for improving utilization of GPU resources
CN108701368B (zh) 用于经实施例化的几何结构的更有效的光线跟踪方法和装置
US11227425B2 (en) Emulation of geometry shaders and stream output using compute shaders
US20140354658A1 (en) Shader Function Linking Graph
TW201719571A (zh) 經由渲染命令串流器之僅關於位置的著色器背景提交
CN111408138A (zh) 基于游戏引擎的渲染方法、装置及电子设备
TW201724010A (zh) 對於具有較寬單指令多資料(simd)執行寬度之3d管線增加執行緒酬載的技術
Tolo Multi-gpu rendering with vulkan api
CN111796812A (zh) 图像渲染的方法、装置、电子设备及计算机可读存储介质
CN114827186A (zh) 云应用处理方法和系统
US7444583B2 (en) Standard graphics specification and data binding
Browning et al. 3D Graphics Programming
Bleiweiss Shading Compilers
Sutherland et al. Chapter 14: 3D Graphics Programming
Angel et al. Modern OpenGL programming

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120405

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130813

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130822

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20131122

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20131127

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140221

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140411

R150 Certificate of patent or registration of utility model

Ref document number: 5525175

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250