説明

多重プロセッサを用いて状態情報を失わずにビデオ及び/又はグラフィクスデータを処理するための方法、システム及び装置

【解決手段】
方法、システム及び装置は、第1のグラフィクス処理回路及び第2のグラフィクス処理回路の組み合わせを用いるビデオ及び/又はグラフィクスデータの処理であって第1及び第2のグラフィクス処理回路の間で処理を転送する間に状態情報を喪失することのない処理を提供する。処理されるべきビデオ及び/又はグラフィクスデータは、例えば、ホストプロセッサ等のプロセッサ上で実行中のアプリケーションによって供給され得る。1つの例においては、装置は複数の単一命令多重データ(SIMD)実行ユニットを含む少なくとも1つのGPUを含む。GPUはネイティブ機能コードモジュールを実行するように動作する。装置はまた、第1のGPU上の複数のSIMD実行ユニットと同じプログラミングモデルを有する複数のSIMD実行ユニットを含む少なくとも第2のGPUを含む。更に、第1及び第2のGPUは同じネイティブ機能コードモジュールを実行するように動作する。ネイティブ機能コードモジュールは、現在の動作モードから所望の動作モードへの移行が望ましい(例えば一方のGPUは停止され他方のGPUは開始される)旨のホストプロセッサ等の第1のプロセッサからの通知に応答して、少なくとも第1のGPUに少なくとも第2のGPUのための状態情報を提供させる。第2のGPUは、第1のGPUによって提供される状態情報を取得すると共に同じネイティブ機能コードモジュールを介して状態情報を用いて第1のGPUが中止した処理を継続するように動作する。第1のプロセッサは、少なくとも第1の及び少なくとも第2のGPUに動作可能に結合される。

【発明の詳細な説明】
【技術分野】
【0001】
本開示は多重プロセッサを用いてビデオ及び/又はグラフィクスデータを処理するための方法、システム及び装置に関し、より特定的には第1のグラフィクス処理回路及び第2のグラフィクス処理回路の組み合わせを用いてビデオ及び/又はグラフィクスデータを処理することに関する。
【背景技術】
【0002】
典型的なコンピュータアーキテクチャにおいては、プロセッサ上で実行中のアプリケーションから処理されるべきビデオ及び/又はグラフィクスデータは、集積化グラフィクス処理回路、ディスクリートグラフィクス処理回路、又は集積化グラフィクス処理回路及びディスクリートグラフィクス処理回路の何らかの組み合わせのいずれかによって処理され得る。集積化グラフィクス処理回路は、一般的に、ホストプロセッサシステムバスに接続されるブリッジ回路へと集積化され、このブリッジ回路は「ノースブリッジ(Northbridge)」として知られている。一方、ディスクリートグラフィクス処理回路は、典型的には、AGP、PCI、PCIエクスプレス(PCI Express)又は任意の他の適切な規格等の相互接続規格を利用する相互接続を介してノースブリッジに接続される外部グラフィクス処理ユニットである。概してディスクリートグラフィクス処理回路は集積化グラフィクス処理回路に比べて優れた性能を提供するが、より大きな電力を消費するものでもある。従って、性能を最適化し又は電力消費を最小にするために、集積化処理回路とディスクリート処理回路の間でビデオ及び/又はグラフィクス処理負担を切り換えることが知られている。
【0003】
図1は、提案されている従来技術として、集積化処理回路とディスクリート処理回路の間でビデオ及び/又はグラフィクス処理負担を切り換えることが可能なコンピュータシステム100を一般的に示している。図示されるように、少なくとも1つのホストプロセッサ102、例えばCPU又は任意の他の処理デバイスが、ホストプロセッサシステムバス106を介してノースブリッジ回路104に接続され、またシステムバス124を介してシステムメモリ122に接続される。幾つかの形態においては、必要に応じて多重ホストプロセッサ102があることがある。また幾つかの形態においては、システムメモリはホストプロセッサ102ではなくノースブリッジ104に接続されることがある。ホストプロセッサ102は、例えばX86実行ユニット等の複数の順序外実行ユニット(out-of-order execution units)108を含み得る。順序外アーキテクチャ、例えばホストプロセッサ102内に実装されるアーキテクチャは、並列に実行され得る独立の命令を識別する。
【0004】
ホストプロセッサ102は、ソフトウエアドライバ110を含む種々のソフトウエアプログラムを実行するように動作可能である。ソフトウエアドライバ110は、ホストプロセッサ102と集積化グラフィクス処理ユニット112及びディスクリートグラフィクス処理ユニット114の両方との間をインタフェースする。例えば、ソフトウエアドライバ110は、ディスプレイ116上にオブジェクトを描画するための情報を受信し、オブジェクトに関連付けられる所定の基本パラメータを計算し、そしてこれらのパラメータを更なる処理のために集積化グラフィクス処理ユニット112及びディスクリートグラフィクス処理ユニット114へ供給することができる。
【0005】
ノースブリッジ104は、ビデオ及び/又はグラフィクスデータを処理する(例えば画素をレンダリングする(render pixels))ように動作し、またディスプレイ116に接続されている。集積化グラフィクス処理ユニットを利用する既知のノースブリッジ回路の例としては、アドバンスト・マイクロ・デバイセズ・インク(Advanced Micro Devices, Inc.)によって販売されているAMD’s780シリーズがある。集積化GPU112は複数のシェーダユニット(shader units)118を含む。複数のシェーダユニット118のうちの各シェーダユニットは、特定のシェーディング機能、例えばビデオ及び/又はグラフィクスデータへの頂点シェーディング、幾何学的シェーディング又は画素シェーディング、を行う役割を担うプログラム可能シェーダである。システムメモリ122は集積化GPU112に関連付けられるフレームバッファ120を含む。フラームバッファ120は、ディスプレイ116画面上に表示されるべき全ての画素に対する色値を表すデータを記憶する全体システムメモリ122の割り当てられた量のメモリである。1つの形態においては、ホストCPU102及びノースブリッジ104は、単一のパッケージ/ダイ126上に集積化され得る。ノースブリッジ104は、例えば周辺バス130を介してサウスブリッジ(Southbridge)128に結合される。サウスブリッジ128は、コンピューティングシステム100の入力/出力機能の全てを制御するブリッジ回路である。
【0006】
ディスクリートGPU114は、例えばPCIエクスプレスバス等の適切なバス132を介してノースブリッジ104(又は集積化パッケージ/ダイ126)に結合される。ディスクリートGPU114は、複数のシェーダユニット119を含み、また非システムメモリ136に接続される。非システムメモリ136(例えば「ビデオ」又は「ローカル」メモリ)は、ディスクリートGPU114に関連付けられるフレームバッファ121を含み、またシステムバス124とは異なるバスを介してアクセスされる。非システムメモリ136は、ディスクリートGPU114に対してオンチップ又はオフチップであり得る。ディスクリートGPUに関連付けられるフレームバッファ121は、集積化GPUに関連付けられるフレームバッファ120と同様のアーキテクチャ及び動作を有するが、非システムメモリ136の割り当てられた量のメモリ内に存在する。ディスクリートGPU上に配置されるシェーダユニット119は、上述した集積化GPU上に配置されるシェーダユニット118と同様に動作する。しかし、幾つかの形態においては、集積化GPU112上よりも更に多くのシェーダユニット119がGPU114上にあるであろうし、これによりディスクリートGPU114は例えば集積化GPU112よりも高速にビデオ及び/又はグラフィクスデータを処理することができる。当業者であれば、この例示的な構成においてディスクリートコンポーネントとして示される構成及び機能は、組み合わされた構成又はコンポーネントとして実装され得ることを認識するはずである。他の変形、修正及び追加が検討される。
【0007】
動作において、コンピューティングシステム100は、集積化GPU112、ディスクリートGPU114又はこれらの何らかの組み合わせを利用してグラフィクスデータ処理を達成することができる。例えば、1つの形態(以下「集積化動作モード」)においては、コンピューティングシステム100のための全てのグラフィクスデータ処理を達成するために集積化GPU112が利用され得る。この形態は、ディスクリートGPU114を完全に遮断すると共に、グラフィクスデータ処理を達成するためにより電力費用のかからない集積化GPU112に頼ることによって、電力消費を最小化する。別の形態(以下「ディスクリート動作モード」)においては、コンピューティングシステム100のための全てのグラフィクスデータ処理を達成するためにディスクリートGPU114が用いられ得る。この形態は、全てのグラフィクス処理負担を達成するために、より強力なディスクリートGPU114にのみ頼ることによって、集積化動作モードよりもグラフィクス処理性能を高める。最後に、1つの形態(以下「協力動作モード」)においては、グラフィクス処理を達成するために、集積化GPU112及びディスクリートGPU114の両方が同時に利用され得る。この形態は、グラフィクス処理負担を全うするために集積化GPU112及びディスクリートGPU114の両方に頼ることによって、ディスクリート動作モードよりもグラフィクスデータ処理性能を改善する。コンピューティングシステム100と同様なプラットフォーム設計を採用している商業的なシステムの例としては、アドバンスト・マイクロ・デバイセズ・インクからのATI_Hybrid_CrossFireX(商標)技術及びATI_PowerXpress(商標)技術並びにNVIDIA(登録商標)コーポレーションからのHybrid_SLI(登録商標)技術が挙げられる。
【発明の概要】
【発明が解決しようとする課題】
【0008】
しかし、コンピューティングシステム100において示されるのと同様の設計を採用する既存のコンピューティングシステムは、幾つかの欠点を抱えている。例えば、これらの設計は、コンピューティングシステム100が1つの動作モード(例えば集積化動作モード)から別の動作モード(例えばディスクリート動作モード)へと移行するときに状態情報の喪失を生じさせることがある。状態情報とは、例えばシェーダユニットによって用いられる任意の情報であって、各シェーダユニットがビデオ及び/又はグラフィクスデータストリームをどのように処理するのかを制御する情報のことをいう。例えば、画素シェーダによって用いられる状態情報は、画素シェーダプログラム、画素シェーダ定数、レンダリング対象情報(render target information)、グラフィカル動作パラメータ等を含み得る。更に、状態情報は、GPUについての識別情報、例えばコンピューティングシステムのメモリ空間におけるGPUの物理アドレスやビデオ及び/又はグラフィクスデータを処理するために利用されているGPUのモデル、を含む。
【0009】
既存のコンピューティングシステム100が1つの動作モードから別の動作モードへと移行するとき、状態情報が破壊されることがある。従って、既存のコンピューティングシステム100は、多くの場合に、ビデオ及び/又はグラフィクス処理負担がGPU間で切り換わるときにアプリケーションを正確に動作させるために、この状態情報を再生成する特定のソフトウエアサポートを必要とする。状態情報のこの破壊及び再生成は、コンピューティングシステム処理資源を無用に占有してしまい、そして1つの動作モードから別の動作モードへの切り換えを遅らせてしまう。例えば、既存のコンピューティングシステム100が1つの動作モード(例えば集積化モード)から別の動作モード(例えばディスクリートモード)へと切り換わるためには、何秒かを要するであろう。動作モード間での切り換えにおけるこの遅延はまた、ディスプレイ画面116上での不所望なフラッシュ(flash)を生じさせる可能性がある。
【0010】
既存のコンピューティングシステム100はまた、協力動作モードに構成される場合にグラフィクス処理を最適化することができない。例えば、これらのコンピューティングシステムにおいては、両GPU間で並列にグラフィクス及び/又はビデオ処理を行うために、しばしば、より強力なディスクリートGPU114の処理能力をより強力でない集積化GPU112の処理能力に制限する必要がある。これは「最小公分母(least common denominator)」手法を表し、この場合ディスクリートGPU114の全処理能力は十分に活用されない。
【0011】
そこで、状態情報を喪失することなしに且つ長い切り換え時間を伴うことなしに、集積化動作モード、ディスクリート動作モード及び協力動作モードの間で切り換わることが可能な改良されたコンピューティングシステムに対する必要性が存在する。また、協力動作モードにおいてディスクリートGPUの処理能力を最大化することができるコンピューティングシステムに対する必要性がある。
【図面の簡単な説明】
【0012】
本発明は、以下の図面と共に下記の説明を考慮して更に容易に理解されるはずであり、図面において同様の参照番号は同様の要素を表す。
【0013】
【図1】図1は集積化及びディスクリート両方のビデオ及び/又はグラフィクス処理回路を含む従来のコンピューティングシステムの例を一般的に示すブロック図である。
【0014】
【図2】図2は本開示において説明される1つの例に従うコンピューティングシステムを一般的に示すブロック図である。
【0015】
【図3】図3は本開示において説明される1つの例に従う汎用実行ユニットを一般的に示すブロック図である。
【0016】
【図4】図4はコンピューティングシステム内で多重プロセッサを用いて状態情報を喪失することなしにビデオ及び/又はグラフィクスデータを処理するための方法の1つの例を示すフローチャートである。
【0017】
【図5】図5はコンピューティングシステム内で多重プロセッサを用いて状態情報を喪失することなしにビデオ及び/又はグラフィクスデータを処理するための方法の別の例を示すフローチャートである。
【発明を実施するための形態】
【0018】
概して、開示される方法、システム及び装置は、第1のグラフィクス処理回路及び第2のグラフィクス処理回路の組み合わせを用いるビデオ及び/又はグラフィクスデータの処理であって第1及び第2のグラフィクス処理回路の間で処理を転送する間に状態情報を喪失することのない処理を提供する。処理されるべきビデオ及び/又はグラフィクスデータは、例えば、ホストプロセッサ等のプロセッサ上で実行中のアプリケーションによって供給され得る。1つの例においては、装置は複数の単一命令多重データ(single instruction multiple data)(SIMD)実行ユニットを含む少なくとも1つのGPUを含む。GPUはネイティブ機能コードモジュールを実行するように動作する。装置はまた、第1のGPU上の複数のSIMD実行ユニットと同じプログラミングモデルを有する複数のSIMD実行ユニットを含む少なくとも第2のGPUを含む。更に、第1及び第2のGPUは同じネイティブ機能コードモジュールを実行するように動作する。ネイティブ機能コードモジュールは、現在の動作モードから所望の動作モードへの移行が望ましい(例えば一方のGPUは停止され他方のGPUは開始される)旨のホストプロセッサ等の第1のプロセッサからの通知に応答して、少なくとも第1のGPUに少なくとも第2のGPUのための状態情報を提供させる。第2のGPUは、第1のGPUによって提供される状態情報を取得すると共に同じネイティブ機能コードモジュールを介して状態情報を用いて第1のGPUが中止した処理を継続するように動作する。
【0019】
1つの例においては、開示されるGPUは、拡張された命令セットを用いるスカラープロセッサとは対照的に、単一命令多重データ(SIMD)プロセッサの形態にあるベクタープロセッサである。開示されるGPUは、多重SIMDエンジンと、SIMDプロセッサのための状態情報を記憶するために用いられる汎用SIMDレジスタセットと、を含んでいてよい。当該技術分野において知られているように、同じ命令が異なるSIMDエンジン上で実行され得る。開示されるGPUは、当該技術分野において知られているように、C++をネイティブに実行するタイプであってよい。
【0020】
別の例においては、コンピューティングシステムは、少なくとも1つのGPU及び少なくとも第2のGPUに結合される1つ以上のホストCPU等のプロセッサを含む。この例においては、少なくとも1つのGPU及び少なくとも第2のGPUのいずれかによって作成される又はこれら両方によって同時に作成される画素を表示するように動作するディスプレイが存在する。
【0021】
別の例においては、少なくとも第2のGPUに関連付けられるネイティブ機能コードモジュールは、画素レンダリング命令を少なくとも第2のGPU上の複数のSIMD実行ユニットにわたって均等に分散させることによって、少なくとも第2のGPUによりレンダリングされ得る画素の数を最適化するように動作する。別の実施形態においては、少なくとも1つのGPUに関連付けられるネイティブ機能コードモジュールは、画素レンダリング命令を少なくとも1つのGPU上の複数の汎用実行ユニットにわたって均等に分散させることによって、少なくとも1つのGPUによりレンダリングされ得る画素の数を最適化するように動作する。
【0022】
1つの例においては、少なくとも第2のGPUに関連付けられるネイティブ機能コードモジュールは、少なくとも第2のGPU上の複数のSIMD実行ユニット上での実行のために、少なくとも1つのGPU上の複数のSIMD実行ユニット内の汎用レジスタセットから状態情報を取得する。別の例においては、少なくとも1つのGPUに関連付けられるネイティブ機能コードモジュールは、少なくとも1つのGPU上の複数のSIMD実行ユニット上での実行のために、少なくとも第2のGPU上の複数のSIMD実行ユニット内の汎用レジスタセットから状態情報を取得する。ここで、状態情報を取得することは、当該状態情報をリトリーブすること(retrieving)又は提供された当該状態情報を有することを備えていてよい。
【0023】
別の例においては、ホストプロセッサは、コンピューティングシステムを集積化動作モードからディスクリート動作モードへ及びその逆に移行させる制御ドライバを実行するように動作する。1つの例においては、制御ドライバは、プロセッサ割り込み(例えばホストCPU割り込み)を有効にして現在の動作モードから所望の動作モードへの及びその逆の移行を開始する。更に別の例においては、コンピューティングシステムを現在の動作モードから所望の動作モードへ移行させることは、現在の動作モードに関連付けられるGPU上の複数のSIMD実行ユニット内の汎用レジスタセットから所望の動作モードに関連付けられるGPU上で実行中のネイティブ機能コードモジュールによってアクセス可能なメモリ内のロケーションへ状態情報を転送することを含む。
【0024】
本開示はまた、コンピューティングシステム内の多重プロセッサを用いてビデオ及び/又はグラフィクスデータを処理するための方法を提供する。1つの例においては、方法は、現在の動作モードに関連付けられる第1のGPUによる画素のレンダリングを停止することと、現在の動作モードに関連付けられる状態情報を第2のGPUによってアクセス可能なロケーション内に保存することと、を含む。この例においては、方法は更に、所望の動作モードに関連付けられる少なくとも第2のGPUによる画素のレンダリングを当該保存された状態情報を用いて再開することを含む。1つの例においては、画素レンダリング命令を特定の動作モードに関連付けられる複数の汎用実行ユニットにわたって均等に分散させることによって、特定の動作モードでレンダリングされ得る画素の数が最適化される。別の例においては、方法は、コンピューティングシステムが現在の動作モードから所望の動作モードへ移行されるべき旨を決定することを更に含む。別の例においては、状態情報は、第1のGPUによる画素のレンダリングを停止することに応答して、現在の動作モードに関連付けられる汎用レジスタセット内に保存される。更に別の例においては、方法はまた、当該保存された状態情報を現在の動作モードに関連付けられる汎用レジスタセットからメモリロケーションへコピーすることと、続いてメモリロケーションから当該保存された状態情報を取得することと、を含む。別の例においては、コンピューティングシステムが現在の動作モードから所望の動作モードへ移行されるべき旨の決定は、ユーザ入力、コンピューティング電力消費要求、及び/又はグラフィカル性能要求に基づく。
【0025】
本開示はまた、実行されるときに1つ以上のプロセッサに本開示の方法を実施させる実行可能な命令を備えるコンピュータ可読媒体を提供する。1つの例においては、実行可能な命令を備えるコンピュータ可読媒体は、本開示の装置を製造するために集積回路製造システムによって実行されてよい。
【0026】
本開示はまた、現在の動作モードに関連付けられる画素のレンダリングを停止するように動作するグラフィクス処理回路(GPU)を含む集積回路を提供する。この例においては、GPUはまた、現在の動作モードに関連付けられる状態情報を第2のGPUによる使用のためにアクセス可能なロケーション内に保存するように動作する。1つの例においては、上述のGPUは、第2のGPUによって以前にレンダリングされようとしていた画素のレンダリングを、第2のGPUによって保存された状態情報を用い且つ現在の動作モードから所望の動作モードへの移行に応答して、再開するように動作する。
【0027】
数ある利点の中でも、開示される方法、システム及び装置は、状態情報を喪失することなしに且つ長い切り換え時間を伴うことなしに、集積化動作モード、ディスクリート動作モード及び協力動作モードの間での切り換えを提供する。開示される方法、システム及び装置はまた、動作モード切り換えの間におけるディスプレイ画面上での不所望なフラッシュの出現を軽減する。更に、開示される方法、システム及び装置は、協力動作モードにおけるディスクリートGPUの処理能力を最大化する。他の利点は当業者によって認識されるはずである。
【0028】
実施形態の以下の説明は実際上は単に例示的なものであり、開示、その応用又は使用を限定することは全く意図されていない。図2はコンピューティングシステム200の1つの例を示しており、限定はされないが、例えば、サーバコンピュータ、ワークステーション、デスクトップPC、ノートブックPC、パーソナルデジタルアシスタント、カメラ、携帯電話機又は任意の他の適切な画像ディスプレイシステムにおけるコンピューティングシステムが例示される。コンピューティングシステム200は1つ以上のプロセッサ202(例えば限定はされないがマイクロプロセッサ、DSP又は中央処理ユニット等の共有に係る、専用の又は一連のプロセッサ)を含む。少なくとも1つのプロセッサ202(例えば「ホストプロセッサ」又は「ホストCPU」)は、典型的にはノースブリッジであるブリッジ回路204にシステムバス206を介して接続される。ホストプロセッサ202はまた、システムバス224を介してシステムメモリ222に接続される。システムメモリ222は、リードオンリメモリ(ROM)、ランダムアクセスメモリ(RAM)、電気的に消去可能なプログラム可能リードオンリメモリ(EE−PROM)又は任意の他の適切なデジタル記憶媒体、等の揮発性/不揮発性メモリ要素の任意の組み合わせであってよい。システムメモリ222は、状態情報228を記憶するように動作可能であり、またGPU210に関連付けられるフレームバッファ218を含む。フラームバッファ218は、ディスプレイ238画面上に表示されるべき全ての画素に対する色値を表すデータを記憶する全体システムメモリ222の割り当てられた量のメモリである。1つの実施形態においては、ホストプロセッサ202及びノースブリッジ204は、単一のパッケージ/ダイ226上に集積化され得る。
【0029】
ホストプロセッサ202(例えばAMD_64又はX86ベースのプロセッサ)は、制御ドライバ208を含む種々のソフトウエアプログラムを実行するように動作する。制御ドライバ208は、ホストプロセッサ202と集積化グラフィクス処理ユニット210及びディスクリートグラフィクス処理ユニット212の両方との間をインタフェースする。後で更に詳細に論じられるように、制御ドライバ208は、例えばホストプロセッサ割り込みを有効にすることによって、1つの動作モードから別の動作モードへの移行の信号を送るように動作する。制御ドライバ208はまた、処理されるべきビデオ及び/又はグラフィクスデータを、ホストプロセッサ202上で実行中のアプリケーションから第1のGPU及び/又は第2のGPUへと更なる処理のために分散させる。例示のみを目的として集積化GPU及びディスクリートGPUの例が用いられることになるが、GPUは、スタンドアローンチップであってよく、他の機能と組み合わされてよく、又は必要に応じて任意の適切な形態にあってよい。図2は集積化GPU210及びディスクリートGPU212を示す。
【0030】
この例では、ノースブリッジ204は、ビデオ及び/又はグラフィクスデータ、例えばホストプロセッサ202上で実行中のアプリケーションから受信されるデータ、を処理するように構成される集積化グラフィクス処理ユニット210を含み、またディスプレイ238に接続される。ビデオ及び/又はグラフィクスデータを処理することは、例えばディスプレイ238画面上での表示のために画素をレンダリングすることを含み得る。当該分野で知られているように、ディスプレイ238は、一体型ディスプレイ又は外部ディスプレイ、例えば陰極線管(CRT)、液晶ディスプレイ(LCD)、発光ダイオード(LED)ディスプレイ又は任意の他の適切なディスプレイ、を備えていてよい。いずれにしても、ディスプレイ238は、集積化GPU210、ディスクリートGPU212、又はこれらの両方によって生成される画素を表示するように動作する。更に当業者によって理解されるであろうように、「GPU」の用語は、ディスクリートの又は集積化された(例えばホストプロセッサと同じ基板上に集積化された)1つ以上のコアを有するグラフィクス処理ユニットを含み得る。
【0031】
GPU210は、ネイティブ機能コードモジュール214及び複数の汎用実行ユニット216を含む。ネイティブ機能コードモジュール214は、例えば、汎用実行ユニット216の少なくとも1つ(例えばSIMD実行ユニットのa)によってGPU210上で実行される記憶された実行可能命令データである。ネイティブ機能コードモジュール214は、実行ユニット300に、ビデオ及び/又はグラフィクスデータにシェーディング動作(shading operations)を実施するために利用可能なできるだけ多くの他の汎用実行ユニット216を動的に活用させる。ネイティブ機能コードモジュール214は、入ってくる作業負荷(即ち例えばホストプロセッサ202上で実行中のアプリケーションからもたらされる処理されるべきビデオ及び/又はグラフィクスデータ)を解析すること、入ってくる作業負荷を処理するためにどの汎用実行ユニットが利用可能であるのかを解析すること、及び入ってくる作業負荷を利用可能な汎用実行ユニットの間で分散させること、によって、実行ユニット300が上述の機能を達成するようにする。例えば、全てに満たない汎用実行ユニット216が処理のために利用可能である場合、処理に利用可能な汎用実行ユニットにわたって均等に作業負荷が分散させられる。次いで、追加的な汎用実行ユニット216が利用可能になるにつれて(例えばそれらが先に割り当てられた作業負荷の処理を終了したことを理由として)、ネイティブ機能コードモジュール214を実行中の実行ユニット300は、GPU210によってレンダリングされ得る画素の数を最適化するように、より多くの一連の汎用実行ユニットに当該作業負荷を割り当てる。また、処理されるべきビデオ及び/又はグラフィクスデータは特に画素レンダリング命令を含んでいるので、ネイティブ機能コードモジュール214は、GPU210(又は別のディスクリートGPU212)上の複数の汎用実行ユニット216にわたって画素レンダリング命令を均等に分散させることによって、GPU210(又は別の例ではディスクリートGPU212)によりレンダリングされ得る画素の数を最適化させる。
【0032】
汎用実行ユニット216は、1つの実施形態においては、単一命令多重データ(SIMD)プロセッサを有するプログラム可能実行ユニットである。これらの汎用実行ユニット216は、頂点及びテクスチャ(vertices and textures)を操作する等のシェーディング機能を行うように動作する。更に、汎用実行ユニット216は、ネイティブ機能コードモジュール214を実行するように動作する。汎用実行ユニット216はまた、同様のレジスタ及びプログラミングモデル、例えばAMD64プログラミングモデルを共有する。従って汎用実行ユニット216は、例えばC++等の同じ命令セット言語を使用可能である。しかし、当業者であれば、他の適切なプログラミングモデル及び/又は命令セット言語が同様に採用され得ることを認識するはずである。
【0033】
次に図3を参照すると、複数の汎用実行ユニット216の単一の汎用実行ユニット300が例示されている。例えば、図3は汎用実行ユニット#1の詳細図を示している。汎用実行ユニット#2〜#Nは汎用実行ユニット#1と同じアーキテクチャを共有するので、汎用実行ユニット#1の詳細図は汎用実行ユニット#2〜#Nに同様に適用される。更に、複数の汎用実行ユニット216は、必要に応じた数の個々の汎用実行ユニット300から構成されてよい。しかし、1つの実施形態においては、GPU212上にあるよりも少ない個々の汎用実行ユニット300がGPU210上に存在するであろう。その場合にも、ディスクリートGPU212上の汎用実行ユニット216は、GPU210上の汎用実行ユニット216と同じレジスタ及びプログラミングモデル並びに命令セット言語を共有するであろうし、また同じネイティブ機能コードモジュール214を実行するように同様に動作する。
【0034】
各汎用実行ユニット300は、SIMDエンジン304と通信する命令ポインタ302を含む。各SIMDエンジン304は汎用レジスタセット308と通信する。各汎用レジスタセット308は、例えば状態情報228等のデータとアドレスとの両方を記憶するように動作する。例えば状態情報は、データ上の命令に追従する例えば汎用レジスタセット308内へ書き込まれるデータ値を備える。状態情報228は、例えば、汎用実行ユニット216によって用いられる任意の情報を参照してよく、これにより各汎用実行ユニット300がビデオ及び/又はグラフィクスデータストリームをどのように処理するのかが制御される。例えば、画素シェーディングを実行する汎用実行ユニット300によって用いられる状態情報は、画素シェーダプログラム、画素シェーダ定数、レンダリング目標情報、グラフィカル動作パラメータ等を含み得る。更に、状態情報228は、GPU(例えばGPU210又はディスクリートGPU212)についての識別情報、例えばコンピューティングシステムのメモリ空間におけるGPUの物理アドレスやビデオ及び/又はグラフィクスデータを処理するために利用されているGPUのモデル、を含む。
【0035】
各汎用実行ユニット300内のSIMDエンジン304は、例えばALU306等の複数の論理ユニットを含む。各ALU306は、それが受け取るビデオ及び/又はグラフィクスデータに対して種々の数学的動作を行うように動作する。命令ポインタ302は、ネイティブ機能コードモジュール214が状態情報228を取得することができ且つそれに従いビデオ及び/又はグラフィクス処理負担を複数の汎用実行ユニット216に割り当てることができるように、状態情報228(例えばビデオ及び/又はグラフィクスデータに対して行われるべき命令)が配置されるメモリ内のロケーションを識別するように動作する。
【0036】
図2を再び参照すると、ノースブリッジ204(又は1つの実施形態においては集積化された単一パッケージ/ダイ226)は、例えば専用バス234を介してサウスブリッジ232に結合される。ノースブリッジ204は更に、例えばPCIエクスプレスバス等の適切なバス236を介してディスクリートGPU212に結合される。ディスクリートGPU212は、GPU210上のネイティブ機能コードモジュール214と同じネイティブ機能コードモジュール214を含む。更に、ディスクリートGPU212は、GPU210上の汎用実行ユニット216と同じレジスタ及びプログラミングモデル(例えばAMD64等)並びに命令セット言語(例えばC++)を共有する汎用実行ユニット216を含む。しかし、前述したように、1つの実施形態においては、GPU210上に見られるよりもはるかに多い個々の汎用実行ユニット300がディスクリートGPU212上にある。従ってこの実施形態においては、ネイティブ機能コードモジュール214は、ディスクリートGPU212上のはるかに多数の個々の汎用実行ユニット300に作業負荷を割り当てることができるので、ディスクリートGPU212は、GPU210よりもかなり高速に作業負担を処理することになる。ディスクリートGPU212は更に非システムメモリ230に接続される。非システムメモリ230は、システムメモリ222内に記憶された状態情報228等の状態情報228を記憶するように動作し、また上述したフレームバッファ218と同様に動作するフレームバッファ219を含む。非システムメモリ230は、例えば、リードオンリメモリ(ROM)、ランダムアクセスメモリ(RAM)、電気的に消去可能なプログラム可能リードオンリメモリ(EE−PROM)又は任意の他の適切なデジタル記憶媒体、等の揮発性/不揮発性メモリ要素の任意の組み合わせであってよい。
【0037】
図4は多重プロセッサを用いて状態情報を喪失することなしにビデオ及び/又はグラフィクスデータを処理するための方法の1つの例を示す。ステップ400では、コンピューティングシステム200が現在の動作モードから所望の動作モードへ移行すべき旨の決定がなされる。この決定は、例えば、動作モードの変更を要求するユーザ入力、コンピューティングシステム電力消費要求、グラフィカル性能要求、又は他の適切な因子に基づいていてよい。1つの例においては、ホストプロセッサ202は、制御ドライバ208の制御の下で決定をなす。しかし、この動作は任意の適切な要素によって行われてよい。現在の動作モード及び所望の動作モードは、例えば、集積化動作モード、ディスクリート動作モード又は協力動作モードを含んでいてよい。
【0038】
ステップ402では、現在の動作モードに関連付けられる第1のGPUによって達成されつつある画素のレンダリングが停止され、そして状態情報は現在の動作モードに関連付けられる汎用レジスタセット内に保存される。ここで、レンダリングは、例えばアプリケーションからの描画コマンドに基づくディスプレイのためにビデオを処理し又は画素を生成することを含み得る。状態情報228は、例えば、現在の動作モードに関連付けられる第1のGPU上の複数の汎用実行ユニット216内の汎用レジスタセット308内に保存されてよい。ステップ402の動作は、以下の例を通して更に説明され得る。現在の動作モードが集積化動作モードであった(即ちグラフィクス処理はGPU210上でのみ達成されつつあった)場合には、状態情報228は、GPU210上の汎用実行ユニット216の汎用レジスタセット308内に保存されたことになる。現在の動作モードがディスクリート動作モードであった場合には、状態情報228は、ディスクリートGPU212上の汎用実行ユニット216の汎用レジスタセット308内に保存されたことになる。また、現在の動作モードに関連付けられるGPUによる画素のレンダリングの停止は、制御ドライバ208がホストプロセッサ202への割り込みを有効にすることによって開始されてよい。このように、1つの動作モードから別の動作モードへのコンピューティングシステム200の移行を開始するために、制御ドライバ208が用いられ得る。
【0039】
ステップ404では、現在の動作モードに関連付けられる汎用レジスタセット内に保存された状態情報228がメモリロケーションへコピーされる。例えば集積化動作モードからディスクリート動作モードへ移行する場合、状態情報228は、GPU210上の汎用実行ユニット216の汎用レジスタセット308から非システムメモリ230へコピーされることになる。逆にディスクリート動作モードから集積化動作モードへ移行する場合、状態情報228は、GPU212上の汎用実行ユニット216の汎用レジスタセット308からシステムメモリ222へコピーされることになる。ホストプロセッサ202は、現在の動作モードに関連付けられる汎用レジスタセットからメモリへの状態情報228の転送(例えばコピー)を行うように動作する。このようにして状態情報228を転送することによって、図1に示されるコンピューティングシステム100等の従来のコンピューティングシステムには不可避的に伴っていた状態情報の破壊及び再作成の必要性が排除される。現在の動作モードに関連付けられる汎用レジスタセットは、同一のレジスタセット構成を共有するという意味において、所望の動作モードの汎用レジスタセットに対応する(例えばレジスタは両GPUセットにおいて同一である)。
【0040】
ステップ406では、保存された状態情報228がメモリロケーションから取得される。このことは、例えば、ネイティブ機能コードモジュール214がシステムメモリ222又は非システムメモリ230のいずれかから状態情報228を要求すること又は状態情報228を提供されることによって達成されてよい。例えば集積化動作モードからディスクリート動作モードへ移行する場合、ステップ406において、GPU212上で実行中のネイティブ機能コードモジュールは、状態情報228を非システムメモリから取得することになる(非システムメモリには状態情報228がGPU210上の汎用実行ユニット216の汎用レジスタセット308から転送されていた)。
【0041】
ステップ408では、所望の動作モードに関連付けられる少なくとも第2のGPUが画素のレンダリングを再開する。所望の動作モードに関連付けられる少なくとも第2のGPUは、先行する動作モードに関連付けられる第1のGPUが中止した画素のレンダリングを正確に受け継ぐことになる。ディスクリートGPU212及びGPU210の両方の汎用実行ユニット216が同じレジスタ及びプログラミングモデル並びに命令セット言語を共有し且つ同一のネイティブ機能コードモジュール214を実行するので、この本質的に継ぎ目のない移行が可能である。
【0042】
図5はコンピューティングシステム内で多重プロセッサを用いてビデオ及び/又はグラフィクスデータを処理するための方法の別の例を示している。この例においては、状態情報は汎用レジスタセット内には保存されない。ステップ500では、現在の動作モードに関連付けられる第1のGPUによる画素のレンダリングが中止され、また現在の動作モードに関連付けられる状態情報は第2のGPUによってアクセス可能なロケーションに保存される。この例では、状態情報はオンチップの又はオフチップの任意の適切なメモリ内に保存されてよく、任意の適切なメモリは、限定はされないが、専用のレジスタセット、システムメモリ、非システムメモリ、フレームバッファメモリ等を含む。ステップ502では、所望の動作モードに関連付けられる少なくとも第2のGPUが、保存された状態情報を用いることによって、画素のレンダリングが再開される。
【0043】
つまり、1つの例においては、GPU(例えばGPU210)は、現在の動作モードに関連付けられる画素のレンダリングを停止すると共に現在の動作モードに関連する状態情報228を第2のGPU(例えばディスクリートGPU212)による使用のためにアクセス可能なロケーション内に保存するように動作する。例えば、現在の動作モードから所望の動作モードへの移行に応答して、GPU(例えばGPU210)は、オフチップである別のGPU(例えばGPU212)によってアクセス可能なロケーション内に状態情報を保存するように動作する。この動作は、例えばGPU212の観点からも適用可能である。
【0044】
数ある利点の中でも、開示される方法、システム及び装置は、状態情報を喪失することなしに且つ長い切り換え時間を伴うことなしに、集積化動作モード、ディスクリート動作モード及び協力動作モードの間での切り換えを提供する。開示される方法、システム及び装置はまた、動作モード切り換えの間におけるディスプレイ画面上での不所望なフラッシュの出現を軽減する。更に、開示される方法、システム及び装置は、協力動作モードにおけるディスクリートGPUの処理能力を最大化する。他の利点は当業者によって認識されるはずである。
【0045】
また、限定はされないが例えばCDROM、RAM、他の形態のROM、ハードドライブ、分散型メモリ等のコンピュータ可読メモリに記憶される実行可能な命令に基づき集積回路を作り出す集積回路設計システム(例えばワークステーション)が知られている。命令は、限定はされないが例えばハードウエア記述子言語又は他の適切な言語等の任意の適切な言語によって表現されてよい。従って、ここに説明される回路はまた、そのようなシステムによって集積回路として製造されてよい。例えば、コンピュータ可読媒体に記憶される命令を用いて集積回路を作り出すことができ、命令は、実行されるときに、集積回路設計システムに集積回路を作り出すことをさせ、集積回路は、コンピューティングシステムが現在の動作モードから所望の動作モードへ移行するべきであることを決定し、現在の動作モードに関連付けられる第1のGPUによる画素のレンダリングを停止すると共に現在の動作モードに関連付けられる汎用レジスタセット内に状態情報を保存し、そして当該保存された状態情報を現在の動作モードに関連付けられる汎用レジスタセットから所望の動作モードに関連付けられる少なくとも第2のGPUによってアクセス可能なメモリロケーションへコピーするように動作する。ここに説明される他の動作を行う論理を有する集積回路もまた適切に製造され得る。
【0046】
上述の詳細な説明及びそこに説明される例は、例示及び説明を目的とし且つ限定によってではなく提示されてきた。従って、本開示は、上に開示され且つここに特許請求される基本的な原理の精神及び範囲内に含まれる任意の及び全ての修正、変形及び均等なものを網羅することが考慮される。

【特許請求の範囲】
【請求項1】
第1のプロセッサと、前記第1のプロセッサに動作可能に結合される少なくとも第1のGPUと、前記第1のプロセッサに動作可能に接続される少なくとも第2のGPUと、を備えるコンピューティングシステムであって、
前記少なくとも第1のGPUは第1の複数の単一命令多重データ(SIMD)実行ユニットを備え、前記少なくとも第1のGPUは、現在の動作モードから所望の動作モードへの移行が望ましい旨の前記第1のプロセッサからの通知に応答して前記少なくとも第1のGPUに前記少なくとも第2のGPUのための状態情報を提供させるネイティブ機能コードモジュールを実行するように動作し、
前記少なくとも第2のGPUは前記少なくとも第1のGPU上の前記複数のSIMD実行ユニットと同じプログラミングモデルを有する第2の複数の単一命令多重データ(SIMD)実行ユニットを備え、前記少なくとも第2のGPUは、前記少なくとも第1のGPUと同じネイティブ機能コードモジュールを実行するように動作し且つ前記少なくとも第1のGPUによって提供される前記状態情報を取得すると共に前記同じネイティブ機能コードモジュールを介して前記状態情報を用いて処理を継続するように動作するコンピューティングシステム。
【請求項2】
前記少なくとも第2のGPUに関連付けられる前記ネイティブ機能コードモジュールは、画素レンダリング命令を前記少なくとも第2のGPU上の前記複数のSIMD実行ユニットにわたって均等に分散させることによって、前記少なくとも第2のGPUによりレンダリングされ得る画素の数を最適化するように動作する請求項1のコンピューティングシステム。
【請求項3】
前記少なくとも第1のGPUに関連付けられる前記ネイティブ機能コードモジュールは、画素レンダリング命令を前記少なくとも第1のGPU上の前記複数のSIMD実行ユニットにわたって均等に分散させることによって、前記少なくとも第1のGPUによりレンダリングされ得る画素の数を最適化するように動作する請求項1のコンピューティングシステム。
【請求項4】
前記少なくとも第2のGPUに関連付けられる前記ネイティブ機能コードモジュールは、前記少なくとも第2のGPU上の前記複数のSIMD実行ユニット上での実行のために、前記少なくとも第1のGPU上の前記複数のSIMD実行ユニット内の汎用レジスタセットから状態情報を取得する請求項1のコンピューティングシステム。
【請求項5】
前記少なくとも第1のGPUに関連付けられる前記ネイティブ機能コードモジュールは、前記少なくとも第1のGPU上の前記複数のSIMD実行ユニット上での実行のために、前記少なくとも第2のGPU上の前記複数のSIMD実行ユニット内の汎用レジスタセットから状態情報を取得する請求項1のコンピューティングシステム。
【請求項6】
前記ホストプロセッサは、前記コンピューティングシステムを現在の動作モードから所望の動作モードへ及びその逆に移行させる制御ドライバを実行するように動作する請求項1のコンピューティングシステム。
【請求項7】
前記制御ドライバはプロセッサ割り込みを有効にして前記現在の動作モードから前記所望の動作モードへの及びその逆の移行を開始する請求項6のコンピューティングシステム。
【請求項8】
前記コンピューティングシステムを現在の動作モードから所望の動作モードへ移行させることは、前記現在の動作モードに関連付けられるGPU上の前記複数のSIMD実行ユニット内の汎用レジスタセットから前記所望の動作モードに関連付けられるGPU上で実行中の前記ネイティブ機能コードモジュールによってアクセス可能なメモリ内のロケーションへ状態情報を転送することを備える請求項6のコンピューティングシステム。
【請求項9】
前記ホストプロセッサ及び前記少なくとも第1のGPUの両方は、同じチップパッケージ又は同じダイの少なくとも1つの上で具現化される請求項1のコンピューティングシステム。
【請求項10】
各SIMD実行ユニットは、
状態情報を記憶するメモリ内のロケーションを指し示すように動作する命令ポインタと、
メモリ内の前記ロケーションからリトリーブされる状態情報を実行するように動作する少なくとも1つのALUを備えるSIMDエンジンと、
状態情報を記憶するように動作する少なくとも1つの汎用レジスタセットと、を備える請求項1のコンピューティングシステム。
【請求項11】
前記少なくとも第1又は第2のGPUのいずれか又は両方によって生成される画素を表示するように動作する少なくとも1つのディスプレイを更に備える請求項1のコンピューティングシステム。
【請求項12】
コンピューティングシステム内の多重プロセッサを用いてビデオ及び/又はグラフィクスデータを処理するための方法であって、
現在の動作モードに関連付けられる第1のGPUによる画素のレンダリングを停止すると共に前記現在の動作モードに関連付けられる状態情報を第2のGPUによってアクセス可能なロケーション内に保存することと、
所望の動作モードに関連付けられる少なくとも第2のGPUによる画素のレンダリングを当該保存された状態情報を用いて再開することと、を備える方法。
【請求項13】
画素レンダリング命令を特定の動作モードに関連付けられる複数の汎用実行ユニットにわたって均等に分散させることによって、前記特定の動作モードでレンダリングされ得る画素の数を最適化することを更に備える請求項12の方法。
【請求項14】
前記コンピューティングシステムが現在の動作モードから所望の動作モードへ移行されるべき旨を決定することを更に備える請求項12の方法。
【請求項15】
前記状態情報は、第1のGPUによる画素のレンダリングを停止することに応答して、前記現在の動作モードに関連付けられる汎用レジスタセット内に保存される請求項12の方法。
【請求項16】
前記保存された状態情報を前記現在の動作モードに関連付けられる前記汎用レジスタセットからメモリロケーションへコピーすることと、
前記メモリロケーションから前記保存された状態情報を取得することと、を更に備える請求項15の方法。
【請求項17】
前記コンピューティングシステムが現在の動作モードから所望の動作モードへ移行されるべき旨の決定は、
ユーザ入力、
コンピューティングシステム電力消費要求、又は
グラフィカル性能要求、の少なくとも1つに基づく請求項12の方法。
【請求項18】
前記現在の動作モードに関連付けられるGPUによる画素の前記レンダリングを停止することは、ホストプロセッサへの割り込みを有効にすることによって開始される請求項12の方法。
【請求項19】
少なくとも第1のGPU及び少なくとも第2のGPUを備える装置であって、
前記少なくとも第1のGPUは第1の複数の汎用実行ユニットを備え、前記少なくとも第1のGPUは、前記少なくとも第1のGPUに前記少なくとも第2のGPUのための状態情報を提供させるネイティブ機能コードモジュールを実行するように動作し、
前記少なくとも第2のGPUは前記少なくとも第1のGPU上の前記複数の汎用実行ユニットと同じプログラミングモデルを有する第2の複数の汎用実行ユニットを備え、前記少なくとも第2のGPUは、前記少なくとも第1のGPUと同じネイティブ機能コードモジュールを実行するように動作し且つ前記少なくとも第1のGPUによって提供される前記状態情報を取得すると共に前記同じネイティブ機能コードモジュールを介して前記状態情報を用いて処理を継続するように動作する装置。
【請求項20】
前記少なくとも第1のGPU及び前記少なくとも第2のGPUに動作可能に結合される第1のプロセッサを更に備え、前記第1のプロセッサは、保管された状態情報の、前記少なくとも第1のGPU又は前記少なくとも第2のGPUのいずれかの現在の動作モードに関連付けられる前記複数の汎用実行ユニット内の汎用レジスタから、所望の動作モードに関連付けられる前記少なくとも第1のGPU又は前記少なくとも第2のGPUのいずれか上で実行中の前記ネイティブ機能コードモジュールによってアクセス可能なメモリロケーションへのコピーを制御するように動作する請求項19の装置。
【請求項21】
実行可能な命令を備えるコンピュータ可読媒体であって、前記命令は実行されるときに1つ以上のプロセッサに、
コンピューティングシステムが現在の動作モードから所望の動作モードへ移行されるべき旨を決定することと、
前記現在の動作モードに関連付けられる第1のGPUによる画素のレンダリングを停止すると共に前記現在の動作モードに関連付けられる汎用レジスタセット内に状態情報を保存することと、
当該保存された状態情報を前記現在の動作モードに関連付けられる前記汎用レジスタセットから前記所望の動作モードに関連付けられる少なくとも第2のGPUによってアクセス可能なメモリロケーションへコピーすることと、をさせるコンピュータ可読媒体。
【請求項22】
実行可能な命令を備えるコンピュータ可読媒体であって、前記命令は、集積回路製造システムによって実行されるときに、前記集積回路製造システムに少なくとも第1のGPU及び少なくとも第2のGPUを製造させ、
前記少なくとも第1のGPUは、各々がネイティブ機能コードモジュールを実行するように動作する複数の単一命令多重データ(SIMD)実行ユニットを備え、
前記少なくとも第2のGPUは、前記少なくとも第1のGPU上の前記複数のSIMD実行ユニットと同じプログラミングモデルを有する複数の単一命令多重データ(SIMD)実行ユニットを備え、前記少なくとも第2のGPUは、前記少なくとも第1のGPUと同じネイティブ機能コードモジュールを実行するように動作するコンピュータ可読媒体。
【請求項23】
現在の動作モードに関連付けられる画素のレンダリングを停止するように動作すると共に前記現在の動作モードに関連付けられる状態情報を第2のGPUによる使用のためにアクセス可能なロケーション内に保存するように動作するグラフィクス処理回路(GPU)を備える集積回路。
【請求項24】
前記GPUは、第2のGPUによって以前にレンダリングされようとしていた画素のレンダリングを、現在の動作モードから所望の動作モードへの移行に応答して前記第2のGPUによって保存された状態情報を用いて再開するように動作する請求項23の集積回路。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate


【公表番号】特表2013−521581(P2013−521581A)
【公表日】平成25年6月10日(2013.6.10)
【国際特許分類】
【出願番号】特願2012−556240(P2012−556240)
【出願日】平成23年3月3日(2011.3.3)
【国際出願番号】PCT/US2011/027019
【国際公開番号】WO2011/109613
【国際公開日】平成23年9月9日(2011.9.9)
【出願人】(508301087)エーティーアイ・テクノロジーズ・ユーエルシー (68)
【氏名又は名称原語表記】ATI TECHNOLOGIES ULC
【住所又は居所原語表記】One Commerce Valley Drive East, Markham, Ontario, L3T 7X6 Canada
【Fターム(参考)】