(57)【要約】  １つまたは複数の並列化モードを使用してイメージ処理の並列化を改善するための方法およびシステムが提供され、この方法およびシステムにおいては、イメージが１つまたは複数のグラフィック処理装置によって少なくとも１つのコンピュータスクリーン上に表示される。グラフィックコマンドを発行するためのソフトウェアアプリケーションが提供され、グラフィックコマンドを実施するために使用されるデータを保存するためのグラフィックライブラリが提供される。ハードウェアハブをコントロールし、コンピュータのオペレーションシステムおよびグラフィックライブラリと対話し、データストリームのリアルタイムな分析を実行して、そこからイメージのフレームを生成し、それぞれのＧＰＵの並列化モードを決定し、そしてデータストリームまたはその一部をそれぞれのＧＰＵへ転送するためのソフトウェアハブドライバが提供される。ＧＰＵがグラフィックライブラリと対話できるようにするためのＧＰＵドライバが提供され、ソフトウェアモジュールとハードウェアハブの間を相互接続するためのＩ／Ｏモジュールが提供される。グラフィックコマンドおよびデータストリームまたはその一部は、それぞれのフレームごとに、複数のＧＰＵの間において、ハードウェアハブによって、イメージ内におけるそれらの相対的な複雑度に従って分散され、その複雑度は、ソフトウェアハブドライバによって定義される。ソフトウェアハブドライバはまた、少なくとも１つのＧＰＵから得られる出力を使用して、表示用として１つのグラフィックス出力を合成し、その一方で、必要とされる場合は常に、それぞれのフレームごとに並列化モードを切り替える。
2007512613.tif 000002
【特許請求の範囲】
【請求項１】
１つまたは複数の並列化モードを使用してイメージ処理の並列化を改善するためのシステムにおいて、前記イメージが１つまたは複数のグラフィック処理装置によって少なくとも１つのコンピュータスクリーン上に表示されるシステムであって、少なくとも、
ａ．グラフィックコマンドを発行するための１つまたは複数のソフトウェアアプリケーションと、
ｂ．前記グラフィックコマンドを実施するために使用されるデータを保存するための１つまたは複数のグラフィックライブラリと、
ｃ．ハードウェアハブをコントロールし、前記コンピュータのオペレーションシステムおよび前記グラフィックライブラリと対話し、データストリームのリアルタイムな分析を実行して、そこから前記イメージのフレームを生成し、それぞれのＧＰＵの前記並列化モードを決定し、そして前記データストリームまたはその一部をそれぞれのＧＰＵへ転送するための１つまたは複数のソフトウェアハブドライバと、
ｄ．前記ＧＰＵが前記グラフィックライブラリと対話できるようにするための１つまたは複数のＧＰＵドライバと、
ｅ．前記ソフトウェアモジュールと前記ハードウェアハブの間を相互接続するための少なくとも１つのＩ／Ｏモジュールとを含み、
前記ハードウェアハブが、それぞれのフレームごとに、前記複数のＧＰＵの間において、グラフィックコマンドおよび前記データストリームまたはその一部を、前記イメージ内におけるそれらの相対的な複雑度に従って分散させ、前記複雑度が前記ソフトウェアハブドライバによって定義され、少なくとも１つのＧＰＵから得られる出力を使用して、表示用として１つのグラフィックス出力を合成し、その一方で、必要とされる場合は常に、前記それぞれのフレームごとに前記並列化モードを切り替えるシステム。
【請求項２】
前記並列化が、オブジェクト分割モードに、もしくはイメージ分割モードに、または時分割モードに、あるいはそれらの任意の組合せに基づく請求項１に記載のシステム。
【請求項３】
前記ハードウェアハブが、少なくとも前記データストリームの処理された部分から１つの完全なフレームを作成するための少なくとも１つの合成ユニットを含む請求項１に記載のシステム。
【請求項４】
前記ハードウェアハブが、少なくとも１つのハブルータを含み、このハブルータが、前記オブジェクト分割モードで、もしくは前記イメージ分割モードで、または前記時分割モードで、あるいはそれらの任意の組合せで動作している間に、多角形のデータをルーティングし、グラフィックコマンドストリームをルーティングし、ピクセルデータをルーティングし、合成の結果をルーティングする請求項２に記載のシステム。
【請求項５】
前記ハードウェアハブが、前記Ｉ／Ｏモジュール内の前記ソフトウェアハブドライバからコマンドを受け取るための少なくとも１つのコントロールユニットを含む請求項１に記載のシステム。
【請求項６】
前記ハードウェアハブが、１つのメモリユニットを含み、このメモリユニットが、１つまたは複数のＧＰＵの中間処理結果と、合成のために必要とされるデータとを保存し、前記処理されたデータを表示用として転送する請求項１に記載のシステム。
【請求項７】
前記ソフトウェアハブドライバが、
ａ．ＯＳインターフェースおよびユーティリティによって、標準グラフィックライブラリからの前記グラフィックコマンドを傍受するオペレーションと、
ｂ．前記ＯＳインターフェースおよびユーティリティによって、グラフィックコマンドを前記ＧＰＵドライバへ転送および作成するオペレーションと、
ｃ．前記ＯＳインターフェースおよびユーティリティによって、前記ハードウェアハブ、レジストリ、およびインストールのオペレーションをコントロールするオペレーションと、
ｄ．状態モニタリングを使用している間に、入力グラフィックコマンドストリームに基づいて前記複数のＧＰＵにわたってグラフィックマシンの状態の一貫性を維持するオペレーションと、
ｅ．アプリケーションおよびグラフィックリソースの分析を使用している間に、実行されるアプリケーションのグラフィックコンテキストにおけるグラフィックの負荷および過負荷のタイプを見積もるオペレーションと、
ｆ．アプリケーションおよびグラフィックリソースの分析を使用している間に、グラフィックコマンドストリームおよび時間の測定に基づく前記ＧＰＵの負荷のバランスに関する負荷の見積もりを行うオペレーションと、
ｇ．アプリケーションおよびグラフィックリソースの分析を使用している間に、前記負荷のバランスに関してそれぞれのＧＰＵから受け取ったフィードバックに従って複数のＧＰＵの間における負荷の配分を調整するオペレーションと、
ｈ．現時点での並列化モードに従ってグラフィック機能内での操作を実行するオペレーションと、
ｉ．分散されたグラフィック機能をコントロールし、その一方で前記現時点での並列化モードに従って前記グラフィックコマンドおよび前記データストリームを変更するオペレーションとを実行することができる請求項１に記載のシステム。
【請求項８】
１つまたは複数の並列化モードを使用してイメージ処理の並列化を改善する方法において、前記イメージが１つまたは複数のグラフィック処理装置によって少なくとも１つのコンピュータスクリーン上に表示される方法であって、少なくとも、
ａ．グラフィックコマンドを発行するための１つまたは複数のソフトウェアアプリケーションを提供するステップと、
ｂ．前記グラフィックコマンドを実施するために使用されるデータを保存するための１つまたは複数のグラフィックライブラリを提供するステップと、
ｃ．ハードウェアハブをコントロールし、前記コンピュータのオペレーションシステムおよび前記グラフィックライブラリと対話し、データストリームのリアルタイムな分析を実行して、そこから前記イメージのフレームを生成し、それぞれのＧＰＵの前記並列化モードを決定し、そして前記データストリームまたはその一部をそれぞれのＧＰＵへ転送するための１つまたは複数のソフトウェアハブドライバを提供するステップと、
ｄ．前記ＧＰＵが前記グラフィックライブラリと対話できるようにするための１つまたは複数のＧＰＵドライバを提供するステップと、
ｅ．前記ソフトウェアモジュールと前記ハードウェアハブの間を相互接続するための少なくとも１つのＩ／Ｏモジュールを提供するステップと、
ｆ．それぞれのフレームごとに、前記複数のＧＰＵの間において、かつ前記ハードウェアハブによって、グラフィックコマンドおよび前記データストリームまたはその一部を、前記イメージ内におけるそれらの相対的な複雑度に従って分散させ、前記複雑度が前記ソフトウェアハブドライバによって定義され、少なくとも１つのＧＰＵから得られる出力を使用して、表示用として１つのグラフィックス出力を合成し、その一方で、必要とされる場合は常に、前記それぞれのフレームごとに前記並列化モードを切り替えるステップとを含む方法。
【請求項９】
前記並列化モードがオブジェクト分割の並列化モードであり、
ａ．それぞれのフレームごとに、グラフィックオペレーションおよび多角形のデータのストリームを生成するステップと、
ｂ．複数のＧＰＵの間において分散させるために、前記ソフトウェアハブドライバによって前記多角形のデータおよびグラフィックコマンドをマークするステップと、
ｃ．前記マークされたデータを前記ハードウェアハブに送信するステップと、
ｄ．前記マークされたデータを、前記ハブルータを介して前記複数のＧＰＵへ分散させるステップと、
ｅ．ＧＰＵによって前記データをレンダリングするステップと、
ｆ．複数のフレームバッファから前記データを検索し、前記検索されたデータを、前記ハブルータを介して前記合成ユニットへ転送するステップと、
ｇ．前記複数のフレームバッファのコンテンツを単一のフレームバッファへと合成するステップと、
ｈ．前記単一のフレームバッファのコンテンツを表示用として少なくとも１つの指定のＧＰＵへ転送するステップとが実行される請求項８に記載の方法。
【請求項１０】
前記並列化モードがイメージ分割の並列化モードであり、
ａ．前記ソフトウェアハブドライバによって前記スクリーンを複数の部分へさらに分割し、別々のビューポートを複数のＧＰＵに割り当てるステップと、
ｂ．前記多角形のデータおよびグラフィックコマンドの全体を前記ハブルータへ移動するステップと、
ｃ．前記多角形のデータおよびグラフィックコマンドの全体を複数のＧＰＵに送信し、それぞれのＧＰＵが、同じデータを受信するステップと、
ｄ．ＧＰＵによって前記データをレンダリングするステップと、
ｅ．前記複数のフレームバッファ内に保存されている前記コンテンツの一部を、完全なイメージの作成のためにハードウェアハブ内の合成ユニットへ転送するステップと、
ｆ．前記イメージを表示用として少なくとも１つの指定のＧＰＵへ転送するステップとが実行される請求項８に記載の方法。
【請求項１１】
前記並列化モードが時分割の並列化モードであり、
ａ．レンダリングのために多角形の全体を前記複数のＧＰＵのそれぞれに転送するステップと、
ｂ．ソフトウェアハブドライバによって前記多角形のデータおよびグラフィックコマンドの全体をすべてのＧＰＵにリダイレクトし、その一方でそれらの間で切り替えを行うステップと、
ｃ．ＧＰＵによって前記データをレンダリングするステップと、
ｄ．レンダリングされたデータを、前記ハブルータを介して少なくとも１つのＧＰＵから転送するステップと、
ｅ．結果として生じた前記フレームバッファのコンテンツを、表示用としてハブルータを介して少なくとも１つの指定のＧＰＵにリダイレクトするステップとが実行される請求項８に記載の方法。
【請求項１２】
複数のＧＰＵの間における多角形の前記分散が、
ａ．複数のＧＰＵの間においてデータのブロックを分散させるステップと、
ｂ．それぞれのグラフィックオペレーションをブロッキングモードに関してテストし、そこにおいて１つまたは複数の並列化モードが実行されるステップと、
ｃ．ブロッキングではない通常のパスにおけるデータを少なくとも１つの指定のＧＰＵにリダイレクトするステップと、
ｄ．ブロッキングオペレーションが検出されるまでステップ（ｂ）および（ｃ）を繰り返すステップと、
ｅ．
ｅ．１．レンダリングを終了して、それぞれのＧＰＵ内で内部のパイプラインをクリーンアップするためにフラッシュオペレーションを実行し、
ｅ．２．前記複数のフレームバッファの前記コンテンツを単一のフレームバッファへとマージするために合成オペレーションを実行し、
ｅ．３．前記単一のフレームバッファをすべてのＧＰＵに返信する
というシーケンスによって複数のＧＰＵを同期化するステップと、
ｆ．スワップオペレーションが検出された場合は常に、前記合成された完全なフレームを１つまたは複数の指定のＧＰＵ以外のすべてのＧＰＵにおいて終了し、前記１つまたは複数の指定のＧＰＵによってそのイメージを表示するステップと、
ｇ．前記ブロッキングモードがアクティブであり、かつ前記スワップオペレーションが検出されない限り、すべてのＧＰＵによって同じデータを処理するステップと、
ｈ．前記ブロッキングモードがアクティブでない場合は常に、複数のＧＰＵによって、指定されたデータの処理を続けるステップとによって実行される請求項８に記載の方法。
【請求項１３】
前記並列化が、オブジェクト分割モードに、もしくはイメージ分割モードに、または時分割モードに、あるいはそれらの任意の組合せに基づく請求項８に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、３−Ｄ（ｔｈｒｅｅ−ｄｉｍｅｎｓｉｏｎａｌ）多重グラフィック処理のための方法およびシステムに関する。より詳細には、本発明は、ＧＰＵ（Ｇｒａｐｈｉｃ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）によるイメージ処理の並列化を、時分割方法、イメージ分割方法、およびオブジェクト分割方法という３つの並列化方法の統合されたフレームワークに基づいて改善するための方法およびシステムに関する。
【０００２】
定義、頭字語、および略語
本明細書を通じて、下記の定義が採用される。
ＧＰＵ：ＧＰＵ（Ｇｒａｐｈｉｃ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）に類似しており、ＧＰＵは、主として３−Ｄ関数を計算するために使用されるシングルチッププロセッサである。これは、ライティング効果、オブジェクトの変形、および３−Ｄの動きなどのタスクを含む。これらは、数学的に負荷の大きいタスクであり、あるいはＣＰＵに多くの負担をかけることになるが、専用のＧＰＵは、３−Ｄの計算の大部分を処理することができるため、コンピュータがこれらのタスクをより効率的に、そしてもちろんより速く実行する上で役に立つ。
【０００３】
多角形：３−Ｄグラフィックス内の多角形は、二次元のプリミティブであり、３−Ｄの複雑なグラフィカルオブジェクトの生成および表示を可能にする。多角形は、オブジェクトの面であり、Ｎ個の頂点から構成される。実際には多角形は、閉じられた平面図形であり、３つ以上の線分によって画定される。
【０００４】
フレームバッファ：ＦＢ（Ｆｒａｍｅ  Ｂｕｆｆｅｒ）は、１つのイメージのコンテンツをピクセルごとに保存するバッファである。一般にメモリのその部分は、表示用としてモニタに送信される完全なビットマップイメージを保持するために確保される。通常ではフレームバッファは、ビデオアダプタ上のメモリチップ内に格納される。しかし場合によっては、ビデオチップセットは、マザーボードの設計内に統合され、フレームバッファは、一般的なメインメモリ内に格納される。
【０００５】
オブジェクト合成ユニット：複数の三次元のラスタを最終的なイメージへと再合成する。マージされたデータは、ピクセルの深みの値に基づいて３−Ｄスペース内のビューアにとって最も近いピクセルのために分解される。この新しい方法は、自律的で連合的な決定に基づいて、あらゆるフレームの複雑性のために複数のＧＰＵを使用できるようにする。
【０００６】
ディスプレイリスト：ディスプレイリストは、多角形および属性などのグラフィックなプリミティブのリストを通じた３−Ｄシーンの記述である。ディスプレイリストは、迅速なイメージ検索のための中間のイメージストレージを提供する。
【０００７】
頂点アレイ：頂点アレイは、３−Ｄシーンを記述する頂点のアレイである。頂点アレイは、迅速なイメージ検索のための中間のイメージストレージを提供する。
アルファブレンディング：アルファブレンディングは、透明性あるいは不透明性のレベルなど、グラフィックな情報が表示される方法をコントロールする。
【背景技術】
【０００８】
三次元のグラフィックパイプラインアーキテクチャは、ＣＰＵ、バス、ＧＰＵの頂点処理およびＧＰＵのフラグメント（ピクセル）処理というセグメント化されたステージへと分割される。所与のパイプラインは、上記のステージのうちの１つの最も弱いリンクと同程度に強いだけであり、したがって主要なネックが、全体的なスループットを決定する。パフォーマンスを高めることが、ネックを減らすあるいはなくすために必要とされるすべてである。主要なネックは、アプリケーションに強く依存する。両極端な事例は、多くの多角形（頂点）を特徴とするＣＡＤ（Ｃｏｍｐｕｔｅｒ  Ａｉｄｅｄ  Ｄｅｓｉｇｎ）のようなアプリケーションと、多角形の総数は少ないがフラグメントアクティビティ（たとえばテクスチャリング）の負荷が大きいビデオゲームアプリケーションである。前者にとっては、頂点処理がネックであり、その一方で後者にとっては、フラグメントがネックである。双方とも、ＰＣバス上で頻繁に妨害される。多くのアプリケーションには、これらの特徴が混在しており、これらのネックは、単一のフレームの基準上で、両極端の間で不規則に入れ替わる可能性がある。
【０００９】
ＧＰＵのパフォーマンスを改善するための唯一の方法は、ネックを解消する方法のうちの１つに従って複数のＧＰＵを並列化することによる。複数のＧＰＵを使用してグラフィックデータをレンダリングするための２つの主要な方法がある。これらの方法は、時分割（タイムドメインの合成）とイメージ分割（スクリーンスペースの合成）とを含み、時分割においては、それぞれのＧＰＵは、次の連続したフレームをレンダリングし、イメージ分割においては、それぞれのＧＰＵは、それぞれのフレームのピクセルのサブセットをレンダリングする。３つめの方法は、さほど一般的ではなく、オブジェクト分割（多角形の分解）方法である。
【００１０】
時分割方法においては、それぞれのＧＰＵは、次の連続したフレームをレンダリングする。これは、それぞれのＧＰＵにフレーム全体をレンダリングさせるという短所を有する。したがって、それぞれのフレームがレンダリングされるスピードは、単一のＧＰＵのレンダリング速度に制限される。複数のＧＰＵは、より高いフレームレートを可能にするが、ユーザの入力に対するシステムの応答時間（待ち時間）において遅延が生じることがある。これが生じるのは、任意の所与の時点において、１つのＧＰＵのみが、レンダリングされるフレームの表示に従事する間、ＧＰＵのそれぞれは、１つのシーケンス内の一連のフレームのうちの１つをレンダリングする過程にあるためである。高いフレームレートを維持するために、システムは、シーケンスを通じて信号サイクルを最初に受け取った特定のＧＰＵが、そのレンダリングされるフレームの表示に再び従事するまで、ユーザの入力を遅らせる。実際の応用例においては、この条件は、１つのシステム内で使用されるＧＰＵの数を制限する役割を果たす。大きなデータセットの場合、それぞれのＧＰＵがすべてのデータにアクセスできなければならないという事実のために、別のネックが存在する。これは、大きなデータセットの複数のコピーオペレーションを維持すること、または単一のコピーオペレーションにアクセスする際の可能性のあるコンフリクトのいずれかを必要とする。
【００１１】
イメージ分割方法は、スクリーンをＮ個のＧＰＵの間において分割し、それによってそれぞれのＧＰＵは、そのイメージの１／Ｎを表示する。多角形のセットの全体は、処理用としてそれぞれのＧＰＵに転送されるが、ピクセルの処理は、ウィンドウのサイズまで大幅に縮小される。イメージ分割には、待ち時間の問題はないが、大きなデータセットに伴う同様のネックがあり、これは、それぞれのＧＰＵが、そのＧＰＵに割り当てられたスクリーンの部分の範囲内にどのグラフィック要素が収まるかを決定するためにデータベースの全体を点検しなければならないことによる。イメージ分割方法は、ピクセル処理の負荷が大きいアプリケーションに適する。
【００１２】
オブジェクト分割方法は、複数のＧＰＵの間におけるデータサブセットの分散に基づく。データサブセットは、ＧＰＵパイプライン内にレンダリングされ、フラグメント（サブイメージピクセル）のＦＢ（Ｆｒａｍｅ  Ｂｕｆｆｅｒ）に変換される。複数のＦＢのサブイメージをマージ（合成）して、表示される最終的なイメージを生成しなければならない。オブジェクト分割は、大量の多角形から構成される非常に複雑なデータの単一フレームのレベル上での並列のレンダリングを実行する。入力データは、多角形のレベルにおいて分解され、ピクセルのレベルにおいて再合成される。専用のドライバが、アプリケーションによって生成されるデータストリームをすべてのＧＰＵの間においてインテリジェントに分散させる。ＧＰＵによって生成されるラスタは、最終的なラスタへと合成され、ディスプレイへ移動される。オブジェクト分割方法は、大量の幾何学的なデータをレンダリングする必要のあるアプリケーションに非常に適する。これらは通常、ＣＡＤ、デジタルコンテンツの作成、および類似のビジュアルシミュレーションアプリケーションであり、これらは「ビューア」とみなされており、これは、データが事前に設計されており、それによってスペース内におけるそれらの三次元の位置が、ユーザの対話式のコントロール下にはないことを意味している。しかしユーザは、実際にはビューアの位置、ビューの方向、およびグラフィックデータのスケールに対する対話式のコントロールを有する。ユーザは、データのサブセットの選択、およびそれがレンダリングされる方法に対するコントロールを有することもできる。これは、基礎をなすデータのイメージのライティング、彩色、透明性、およびその他の視覚的特性の効果を操作することを含む。
【００１３】
上記の応用例においては、データは、通常ではディスプレイリストまたは頂点アレイにおける大量の幾何学的なエンティティから構成されるため、非常に複雑になる傾向がある。したがって単一のフレームの構築時間は、非常に長くなる傾向があり（たとえば、通常では２千万個の多角形に対して０．５秒）、ひいては全体的なシステムパフォーマンスが遅くなる。
【００１４】
したがって、ＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）バス上の大きなトラフィックにさらされながらも最良のシステムパフォーマンスを保証することができるシステムを提供する必要性がある。
【発明の開示】
【発明が解決しようとする課題】
【００１５】
本発明の１つの目的は、複数のＧＰＵを並列化することによってＧＰＵの増幅された強度を提供することである。
本発明の別の目的は、単一のフレームの構築時間によって全体的なシステムの反応が遅くなることのないシステムを提供することである。
【００１６】
本発明のさらに別の目的は、頂点処理およびフラグメント処理のグラフィックパイプラインのネックが透過的かつインテリジェントに解決されるシステムおよび方法を提供することである。
【００１７】
本発明のさらに別の目的は、高いスケーラビリティおよび限りないシーンの複雑性を有するシステムおよび方法を提供することである。
本発明のさらに別の目的は、データの分解によって課される困難を克服するプロセスを提供することであり、それは、複数のＧＰＵの間におけるデータとグラフィックコマンドとのパーティションである。
【００１８】
本発明のさらに別の目的は、状態マシンとしてのグラフィックライブラリの基本的な機能を保持してグラフィックの標準に準拠する、データとグラフィックコマンドとのインテリジェントな分解のための方法およびシステムを提供することである。
【００１９】
本発明のその他の目的および利点は、説明が進むにつれて明らかになるであろう。
【課題を解決するための手段】
【００２０】
本発明は、１つまたは複数の並列化モードを使用してイメージ処理の並列化を改善するためのシステムを対象とし、このシステムにおいては、イメージが１つまたは複数のグラフィック処理装置によって少なくとも１つのコンピュータスクリーン上に表示され、このシステムは、
グラフィックコマンドを発行するための１つまたは複数のソフトウェアアプリケーションと、
グラフィックコマンドを実施するために使用されるデータを保存するための１つまたは複数のグラフィックライブラリと、
ハードウェアハブをコントロールし、コンピュータのオペレーションシステムおよびグラフィックライブラリと対話し、データストリームのリアルタイムな分析を実行して、そこからイメージのフレームを生成し、それぞれのＧＰＵの並列化モードを決定し、そしてデータストリームまたはその一部をそれぞれのＧＰＵへ転送するための１つまたは複数のソフトウェアハブドライバと、
ＧＰＵがグラフィックライブラリと対話できるようにするための１つまたは複数のＧＰＵドライバと、
ソフトウェアモジュールとハードウェアハブの間を相互接続するための少なくとも１つのＩ／Ｏモジュールとを含み、
ハードウェアハブは、それぞれのフレームごとに、複数のＧＰＵの間において、グラフィックコマンドおよびデータストリームまたはその一部を、イメージ内におけるそれらの相対的な複雑度に従って分散させ、その複雑度を定義し、ソフトウェアハブドライバはまた、少なくとも１つのＧＰＵから得られる出力を使用して、表示用として１つのグラフィックス出力を合成し、その一方で、必要とされる場合は常に、それぞれのフレームごとに並列化モードを切り替える。
【００２１】
並列化は、オブジェクト分割モードに、もしくはイメージ分割モードに、または時分割モードに、あるいはそれらの任意の組合せに基づく。ハードウェアハブは、データストリームの処理された部分から１つの完全なフレームを作成するための合成ユニットを含む。ハードウェアハブはハブルータを含み、このハブルータは、オブジェクト分割モードで、もしくはイメージ分割モードで、または時分割モードで、あるいはそれらの任意の組合せで動作している間に、多角形のデータをルーティングし、グラフィックコマンドストリームをルーティングし、ピクセルデータをルーティングし、合成の結果をルーティングする。ハードウェアハブは、Ｉ／Ｏモジュール内のソフトウェアハブドライバからコマンドを受け取るためのコントロールユニットを含む。ハードウェアハブはメモリユニットを含み、このメモリユニットは、１つまたは複数のＧＰＵの中間処理結果と、合成のために必要とされるデータとを保存し、その処理されたデータを表示用として転送する。
【００２２】
ソフトウェアハブドライバは、
ＯＳインターフェースおよびユーティリティによって、標準グラフィックライブラリからのグラフィックコマンドを傍受するオペレーションと、
ＯＳインターフェースおよびユーティリティによって、グラフィックコマンドをＧＰＵドライバへ転送および作成するオペレーションと、
ＯＳインターフェースおよびユーティリティによって、ハードウェアハブ、レジストリ、およびインストールのオペレーションをコントロールするオペレーションと、
状態モニタリングを使用している間に、入力グラフィックコマンドストリームに基づいて複数のＧＰＵにわたってグラフィックマシンの状態の一貫性を維持するオペレーションと、
アプリケーションおよびグラフィックリソースの分析を使用している間に、実行されるアプリケーションのグラフィックコンテキストにおけるグラフィックの負荷および過負荷のタイプを見積もるオペレーションと、
アプリケーションおよびグラフィックリソースの分析を使用している間に、グラフィックコマンドストリームおよび時間の測定に基づくＧＰＵの負荷のバランスに関する負荷の見積もりを行うオペレーションと、
アプリケーションおよびグラフィックリソースの分析を使用している間に、負荷のバランスに関してそれぞれのＧＰＵから受け取ったフィードバックに従って複数のＧＰＵの間における負荷の配分を調整するオペレーションと、
その時点での並列化モードに従ってグラフィック機能内での操作を実行するオペレーションと、
分散されたグラフィック機能をコントロールし、その一方でその時点での並列化モードに従ってグラフィックコマンドおよびデータストリームを修正するオペレーションとを実行できることが好ましい。
【００２３】
本発明は、１つまたは複数の並列化モードを使用してイメージ処理の並列化を改善する方法を対象とし、この方法においては、イメージが１つまたは複数のグラフィック処理装置によって少なくとも１つのコンピュータスクリーン上に表示される。グラフィックコマンドを発行するためのソフトウェアアプリケーションが提供され、グラフィックコマンドを実施するために使用されるデータを保存するためのグラフィックライブラリが提供される。ハードウェアハブをコントロールし、コンピュータのオペレーションシステムおよびグラフィックライブラリと対話し、データストリームのリアルタイムな分析を実行して、そこからイメージのフレームを生成し、それぞれのＧＰＵの並列化モードを決定し、そしてデータストリームまたはその一部をそれぞれのＧＰＵへ転送するためのソフトウェアハブドライバが提供される。ＧＰＵがグラフィックライブラリと対話できるようにするためのＧＰＵドライバが提供され、ソフトウェアモジュールとハードウェアハブの間を相互接続するためのＩ／Ｏモジュールが提供される。グラフィックコマンドおよびデータストリームまたはその一部は、それぞれのフレームごとに、複数のＧＰＵの間において、ハードウェアハブによって、イメージ内におけるそれらの相対的な複雑度に従って分散され、その複雑度は、ソフトウェアハブドライバによって定義される。ソフトウェアハブドライバはまた、少なくとも１つのＧＰＵから得られる出力を使用して、表示用として１つのグラフィックス出力を合成し、その一方で、必要とされる場合は常に、それぞれのフレームごとに並列化モードを切り替える。
【００２４】
並列化モードがオブジェクト分割の並列化モードである場合は常に、
それぞれのフレームごとに、グラフィックオペレーションおよび多角形のデータのストリームを生成するステップと、
複数のＧＰＵの間において分散させるために、ソフトウェアハブドライバによって多角形のデータおよびグラフィックコマンドをマークするステップと、
マークされたデータをハードウェアハブに送信するステップと、
マークされたデータを、ハブルータを介して複数のＧＰＵへ分散させるステップと、
ＧＰＵによってデータをレンダリングするステップと、
複数のフレームバッファからデータを検索し、検索されたデータを、ハブルータを介して合成ユニットへ転送するステップと、
複数のフレームバッファのコンテンツを単一のフレームバッファへと合成するステップと、
単一のフレームバッファのコンテンツを表示用として少なくとも１つの指定のＧＰＵへ転送するステップとが実行される。
【００２５】
並列化モードがイメージ分割の並列化モードである場合は常に、
ソフトウェアハブドライバによってスクリーンを複数の部分へさらに分割し、別々のビューポートを複数のＧＰＵに割り当てるステップと、
多角形のデータおよびグラフィックコマンドの全体をハブルータへ移動するステップと、
多角形のデータおよびグラフィックコマンドの全体を複数のＧＰＵに送信し、それぞれのＧＰＵが、同じデータを受信するステップと、
ＧＰＵによってデータをレンダリングするステップと、
複数のフレームバッファ内に保存されているコンテンツの一部を、完全なイメージの作成のためにハードウェアハブ内の合成ユニットへ転送するステップと、
イメージを表示用として少なくとも１つの指定のＧＰＵへ転送するステップとが実行される。
【００２６】
並列化モードが時分割の並列化モードである場合は常に、
レンダリングのために多角形の全体を複数のＧＰＵのそれぞれに転送するステップと、
ソフトウェアハブドライバによって多角形のデータおよびグラフィックコマンドの全体をすべてのＧＰＵにリダイレクトし、その一方でそれらの間で切り替えを行うステップと、
ＧＰＵによってデータをレンダリングするステップと、
レンダリングされたデータを、ハブルータを介して少なくとも１つのＧＰＵから転送するステップと、
結果として生じたフレームバッファのコンテンツを、表示用としてハブルータを介して少なくとも１つの指定のＧＰＵにリダイレクトするステップとが実行される。
【００２７】
複数のＧＰＵの間における多角形の分散は、複数のＧＰＵの間においてデータのブロックを分散させるステップと、次いでそれぞれのグラフィックオペレーションをブロッキングモードに関してテストし、そこにおいて１つまたは複数の並列化モードが実行されるステップとによって実行される。データは、ブロッキングではない通常のパスにおいて少なくとも１つの指定のＧＰＵにリダイレクトされ、このプロセスは、ブロッキングオペレーションが検出されるまで繰り返される。そしてＧＰＵは、レンダリングを終了して、それぞれのＧＰＵ内で内部のパイプラインをクリーンアップするためにフラッシュオペレーションを実行するステップと、複数のフレームバッファのコンテンツを単一のフレームバッファへとマージするために合成オペレーションを実行するステップと、その単一のフレームバッファをすべてのＧＰＵに返信するステップとによって同期化される。そしてスワップオペレーションが検出された場合は常に、合成された完全なフレームが、１つまたは複数の指定のＧＰＵ以外のすべてのＧＰＵにおいて終了され、その１つまたは複数の指定のＧＰＵによって、そのイメージが表示される。ブロッキングモードがアクティブであり、かつスワップオペレーションが検出されない限り、すべてのＧＰＵによって同じデータが処理される。ブロッキングモードがアクティブでない場合は常に、指定されたデータが、複数のＧＰＵによってさらに処理される。
【００２８】
説明を簡単かつ明確にするために、図に示されている要素は、必ずしも正確な縮尺では描かれていないということが理解できるであろう。たとえばいくつかの要素の寸法は、説明を明確にするために他の要素に比べて誇張されているかもしれない。さらに、適切とみなされる場合には、参照番号は、対応する要素あるいは類似した要素を示すために複数の図の間で繰り返すことができる。
【発明を実施するための最良の形態】
【００２９】
多重３−Ｄグラフィックパイプライン
本発明は、新奇なオペレーショナルコンポーネント、３−Ｄパイプラインハブを含む拡張されたＰＣグラフィックアーキテクチャの導入を必要とする。
【００３０】
図１は、本発明の一実施形態による多重ＧＰＵアーキテクチャシステム１００を提示している。ハブ１１０は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）とＧＰＵのクラスタ１３０の間のＰＣバス上の一意の位置に配置される。この多重グラフィックパイプラインアーキテクチャは、図１に示されているように、ソフトウェアアプリケーション１２１、グラフィックライブラリ１２２、ソフトウェアハブドライバ１２３、ＧＰＵドライバ１２４、ハードウェアハブ１１０、ＧＰＵのクラスタ１３０、および（１つまたは複数の）ディスプレイ１４０から構成される。通常、ＧＰＵのうちの１つが、ディスプレイユニットとして指定される。複数のディスプレイユニットを有すること、あるいは１つのディスプレイユニットを直接ハードウェアハブ内に含めることも可能であるという点に留意すべきである。また、１つのディスプレイユニットが複数のスクリーンを駆動することもできる。
【００３１】
ハブメカニズムは、Ｉ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）チップセット１６０の間のＰＣバス上に配置されたＩ／Ｏモジュールであるハードウェアハブコンポーネント１１０と、ＧＰＵのクラスタ１３０と、ＰＣによって実行されるソフトウェアハブドライバ１２３を含むソフトウェアモジュールとから構成される。
【００３２】
ハードウェアハブ１１０は、少なくとも下記のアクションを実行する。
−分解された多角形ストリームおよびグラフィックコマンドを複数のＧＰＵの間において分散させ、
−別々の並列モードに従って表示用のグラフィックス出力を合成し、
−データのキャッシュを作成し、
−並列処理のモードを切り替える。
【００３３】
ソフトウェアハブドライバ１２３は、ハードウェアハブ１１０をコントロールすることに加えて、少なくとも下記のアクションも実行する。
−ＯｐｅｎＧＬ、ＤｉｒｅｃｔＸなどのＯＳ（Ｏｐｅｒａｔｉｏｎ  Ｓｙｓｔｅｍ）およびグラフィックライブラリと対話し、
−データストリームのリアルタイムの分析を実行し、
−並列化モードを決定し、
−データおよびコマンドストリームを分解する。
【００３４】
この方法の１つの利点は、ハードウェアハブ１１０の一意の位置によってグラフィックパイプラインのコントロールが可能となり、その一方で、それがアプリケーション１２１にとって透過的であるという点である。アプリケーション１２１は、ＯｐｅｎＧＬなどのグラフィックライブラリ１２２と共に、まるで単一のＧＰＵであるかのように作業を続ける。
【００３５】
この方法の別の利点は、ハードウェアハブ１１０の一意の位置によってユーザインターフェース１５０とディスプレイ１４０の間におけるグラフィックパイプラインのコントロールが可能となり、その一方で、それがＧＰＵにとって透過的であるという点である。クラスタのそれぞれのＧＰＵは、まるでＩ／Ｏチップセット１６０上で接続されている唯一のグラフィックプロセッサであるかのように作業を続ける。
【００３６】
この方法のさらに別の利点は、ハードウェアハブ１１０の一意の位置によって、イメージ分割モード、時分割モード、あるいはオブジェクト分割モードという別々の並列化モードごとにグラフィックパイプラインをコントロールすることができるという点である。
【００３７】
この方法のさらなる利点は、ハードウェアハブ１１０の一意の位置によって、多角形の総数、テクスチャのボリューム、人間の対話など、アプリケーションの負荷に関する変わりゆくパラメータをリアルタイムに感知し、その時点での最適な並列化方法をインテリジェントに決定し、実行することができるという点である。
【００３８】
本発明のすべての実施形態によれば、（１つまたは複数の）ディスプレイ１４０は、ハードウェアハブ１１０に直接あるいは間接的に接続することができるという点に留意すべきである。
【００３９】
次いで図２を参照すると、本発明の一実施形態によるハードウェアハブ１１０のコンポーネントが開示されている。コントロールユニット２１０は、ソフトウェアハブドライバからバスを介して専用のコマンドを受け取り、それに従って他のユニットをコントロールする。ハブルータ２３０は、多角形のデータおよびグラフィックコマンドのストリームを左から右へルーティングし、ピクセルデータを右から合成ユニットへルーティングし、そして合成結果を右へルーティングする。合成ユニット２４０は、並列化モードに従ってさまざまな合成スキームを実行する。補助メモリブロック２２０は、１つまたは複数のＧＰＵの中間処理結果と、合成のために必要とされるデータとを保存すること、および処理されたデータを表示用として転送することのために使用される。
【００４０】
ハードウェアハブ１１０は、オブジェクト分割モード、イメージ分割モード、時分割モードという並列化モードに従ってそのユニットを利用する。これらのモードは、アプリケーションのニーズに従ってハードウェアハブ１１０によって適宜操作される。
【００４１】
図３は、本発明の一実施形態によるオブジェクト分割の並列化モードのオペレーションを開示している。ＣＰＵは、３−Ｄグラフィックアプリケーション３１０を実行し、この３−Ｄグラフィックアプリケーション３１０は、標準グラフィックライブラリと共に、グラフィックオペレーションおよび多角形のデータのストリームを生成する。これらは通常、データブロック内で、ディスプレイリスト、頂点アレイ、またはフリーな多角形のいずれかとして編成される。フリーな多角形とは、ディスプレイリスト内にも頂点アレイ内にも編成されていない多角形である。ソフトウェアハブドライバは、ステップ３２０において、全体的な負荷のバランスがとれるような方法で複数のＧＰＵの間において分散させるために多角形のデータおよびグラフィックコマンドをマークする。マークされたデータは、ハードウェアハブに転送される。ステップ３３０において、これは、ハブルータを介して複数のＧＰＵに分散される。ＧＰＵ内のレンダリング処理がステップ３４０において完了した後、複数のフレームバッファが検索され、ステップ３５０においてハブルータを介して合成ユニットへ転送される。ここでは、複数のフレームバッファが単一のフレームバッファに合成され、表示用として指定のＧＰＵへ転送される。この単一のフレームバッファが、ステップ３６０において表示される。
【００４２】
図４は、本発明の一実施形態によるイメージ分割の並列化モードのオペレーションを開示している。このモードにおいては、ソフトウェアハブドライバが、スクリーンを複数のＧＰＵの間においてさらに分割するために別々のビューポートを複数のＧＰＵに割り当てる。これらのビューポートの側面は、全体的なＧＰＵの負荷のバランスを均等に維持するために負荷のバランスを考慮して設定される。ステップ４２０においては、多角形のデータおよびグラフィックコマンドの全体が、ハードウェアハブにおけるハブルータへ移動され、ステップ４３０において複数のＧＰＵに送信される。すべてのＧＰＵは、同じデータを受信する。ステップ４４０におけるレンダリングの後、一部のフレームバッファが、ステップ４５０における完全なイメージの作成のためにハードウェアハブ内の合成ユニットにもたらされ、そしてこのイメージが、表示用として指定のＧＰＵへ移動される。この完全なイメージは、ステップ４６０において表示される。
【００４３】
図５は、本発明の一実施形態による時分割の並列化モードのオペレーションを開示している。時分割においては、それぞれのフレームの処理は、Ｎ個のＧＰＵ（あるいはＧＰＵのＮ個のクラスタ）が参加している間にＮフレームのタイムユニットを要する。多角形の全体は、レンダリングのためにそれぞれのＧＰＵに転送される。それぞれのフレームのタイムユニットにおいて、ソフトウェアハブドライバは、多角形のデータおよびグラフィックコマンドをステップ５３０において一度にＧＰＵの１つのクラスタにリダイレクトし、その一方でそれらの間で切り替えを行う。これらのデータは、ハブルータを介してＧＰＵの上記のクラスタへ転送され、ステップ５４０においてＧＰＵ内でレンダリングされ、そして結果として生じたフレームバッファは、ステップ５５０において表示用としてハブルータを介して指定のＧＰＵにリダイレクトされる。すべてのＧＰＵは、ソフトウェアハブドライバによって、フレームの連続したシーケンスを生成するように調整される。結果として生じたフレームバッファは、ステップ５６０において表示される。
【００４４】
ハードウェアハブの強みは、その拡張するテクノロジーであり、専用のプロセスのアーキテクチャおよびクラスタは、チップ、カード、あるいはチップＩＰ（Ｉｎｔｅｌｌｅｃｔｕａｌ  Ｐｒｏｐｅｒｔｙ）コアのレベルにおいて複数のＧＰＵを並列に使用できるようにすること、およびＣＰＵとＧＰＵの間における複数のバス経路を操作することによって、ＰＣベースのシステムにおける既存のＧＰＵのパフォーマンスを拡張することに向けられる。このテクノロジーは、パフォーマンスにおける直線的な増大を達成する。これは、グラフィックスベンダにとって不変のものであり、またアプリケーションにとっては透過的なものでもある。本発明においては、頂点処理、フラグメント処理、およびバス転送のグラフィックパイプラインのネックは、完全かつインテリジェントに解決される。ネックは複数のフレームの間で移動する可能性があるため、ハードウェアハブは、図２で開示されたコントロールユニット２１０と、図１で開示されたソフトウェアハブドライバ１２３の間に、別々のネックを克服してフレームのレベルにおいて最大のパフォーマンスを維持するために別々の並列化モードを利用するバスによるスマートなリアルタイムのフィードバックシステムを備えて設計される。
【００４５】
ソフトウェアハブドライバ
ソフトウェアハブドライバは、ＰＣ内に常駐して、コンピュータのオペレーティングシステム、標準グラフィックライブラリ、アプリケーション、およびベンダのＧＰＵドライバと共存するソフトウェアパッケージである。図６は、ソフトウェアハブドライバ６３０を本発明の一実施形態によるオペレーティングシステム環境へと統合する可能な形態のブロック概略図である。グラフィックアプリケーションブロック６１０の次には、標準グラフィックライブラリブロック６２０がある。ソフトウェアハブドライバ６３０は、標準グラフィックライブラリ６２０の下に配置され、グラフィックコマンドおよびデータストリームをベンダのＧＰＵドライバ６４０への途中で傍受する。ソフトウェアハブドライバ６３０は、ハードウェアハブ６６０もコントロールする。
【００４６】
図７は、本発明の一実施形態によるソフトウェアハブドライバの主要なタスクを提示する機能ブロック図である。ＯＳインターフェースおよびユーティリティブロック７１０は、標準グラフィックライブラリからのグラフィックコマンドを傍受すること、グラフィックコマンドをベンダのＧＰＵドライバへ転送および作成すること、ハードウェアハブ、レジストリ、およびインストールをコントロールすること、ＯＳサービス、ならびにユーティリティを担当する。状態モニタリングブロック７２０は、入力グラフィックコマンドストリームに基づいて複数のＧＰＵにわたってグラフィックマシンの状態の一貫性を維持することを担当する。アプリケーションおよびグラフィックリソース分析ブロック７３０は、その時点でのアプリケーションのグラフィックコンテキストにおけるグラフィックの負荷およびネックのタイプに関するアプリケーションの観察−見積もり、グラフィックコマンドストリームおよび時間の測定に基づく負荷のバランスのためのグラフィックリソース（ＧＰＵ）の負荷の見積もり、負荷のバランスをとることに関するＧＰＵからのフィードバックの処理を担当する。並列処理ポリシー管理ブロック７４０は、負荷の分析に基づく。すべての並列化モード、すなわちオブジェクト分割モード、イメージ分割モード、および時分割モードは、最良のパフォーマンスおよび最適な負荷の処理を達成するために組み合わされる。並列化ポリシーは、負荷の分析に基づき、電子回路またはチップの全体にわたってすべての関連するＧＰＵにおいてグラフィックシステムの状態を保存しなければならない。たとえば、どこかの時点でシーン内に新たな光源を追加することによる状態の変化は、別々のＧＰＵにおいて後続のすべての多角形に影響を与えなければならない。並列処理ポリシー管理ブロック７４０は、グラフィック機能内での特定の操作に関するポリシーの解釈を担当する。分散グラフィック機能コントロールブロック７５０は、並列化ポリシーに基づくグラフィックコマンドおよびデータストリームの修正を担当する。
【００４７】
オブジェクト分割の分解プロセス
オブジェクトの分割は、よく知られている概念であるが、データの分解（複数のＧＰＵの間におけるデータとグラフィックコマンドとのパーティション）は、これもまた知られている概念ではあるものの、さまざまな大きな困難を課すために、まだ効果的に適用されていない。これらの困難は、本発明による提案されているプロセスおよびその実施によって、首尾よく処理される。
【００４８】
分解、そしてさらに重要なこととして合成は、正確かつ効率的でなければならない。一部のオペレーションは、アプリケーションによって提示される順に実行されなければならない。たとえば半透明性の場合、コマンドおよび多角形のストリームは、正しいグラフィックの結果を作成するために一定の順序を維持しなければならない。
【００４９】
状態マシンとしてのグラフィックライブラリの基本的な機能を保持してグラフィックの標準に準拠する、データとグラフィックコマンドとのインテリジェントな分解が必要とされている。本発明による提案されている分解プロセスは、ソフトウェアハブドライバによって実行される。ＣＰＵは、３−Ｄグラフィックアプリケーションを実行し、グラフィックコマンドおよびデータのフローを生成する。これらは通常、システムメモリ内に保存されているディスプレイリストや頂点アレイなどのブロック内で編成される。
【００５０】
本発明によれば、ソフトウェアハブドライバは、ＣＰＵ内で実行され、シーンの多角形（あるいは頂点）のセットを分解する。それらの物理的な分散は、ハードウェアハブによって実行される。
【００５１】
多角形は、ＧＰＵ内でレンダリングされ、その一方で、結果として生じるフレームバッファをローカルメモリ内に保持する。すべてのＦＢは、ハブルータを介してハードウェアハブ内の合成ユニットへ転送されて、単一のＦＢへとマージされる。最終的に、合成されたＦＢは、表示用として転送される。
【００５２】
ソフトウェアハブドライバは、複数のＧＰＵの間において多角形を分散させる下記のプロセスを実行する。グラフィックアプリケーションが動作する通常の方法は、依然として変わらないと仮定する。フレームごとに、典型的なアプリケーションは、グラフィックデータのブロックを含むグラフィックコールのストリームを生成し、それぞれのブロックは、単一頂点のオペレーションやバッファベースのオペレーション（頂点アレイ）などの幾何学的なオペレーションのリストから構成される。通常、分解プロセスは、ブロックを基本的なデータユニットとして保存する複数のＧＰＵの間においてデータを分割する。幾何学的なオペレーションは、データの（１つまたは複数の）ブロックに付随し、そのデータが処理される方法を指示する。１つのブロックは、指定のＧＰＵを対象とする。しかしフラッシュ、スワップ、アルファブレンディングなどのブロッキングオペレーションのグループに属するオペレーションがあり、これは、グラフィックシステムの全体に影響を与え、システムをブロッキングモードに設定する。ブロッキングオペレーションは、作成された有効なＦＢデータを必要とするという点で例外的であり、したがって本発明の並列設定においては、すべてＧＰＵに１つの影響を与える。したがってブロッキングオペレーションのうちの１つが発行される場合は常に、すべてのＧＰＵが同期化されなければならない。それぞれのフレームは、フラッシュおよびスワップという少なくとも２つのブロッキングオペレーションを有し、これはフレームを終了させる。
【００５３】
図８は、本発明の一実施形態による複数のＧＰＵの間において多角形を分散させるためのプロセスを提示するフローチャートである。フレームアクティビティは、複数のＧＰＵの間においてデータのブロックを分散させることによって始動する。それぞれのグラフィックオペレーションは、ステップ８２０においてブロッキングモードに関してテストされる。通常の（ブロッキングではない）パスにおいては、データは、ステップ８３０において指定のＧＰＵにリダイレクトされる。このループは、ブロッキングオペレーションが検出されるまで繰り返される。
【００５４】
ブロッキングオペレーションが検出されると、すべてのＧＰＵは、ステップ８４０において少なくとも下記のシーケンスによって同期化されなければならない。
−レンダリングを終了して、ＧＰＵ内で内部のパイプラインをクリーンアップする（フラッシュする）ためにフラッシュオペレーションを実行し、
−複数のＦＢのコンテンツを単一のＦＢへとマージするために合成を実行し、
−継続するための共通の基盤を形成するために、その単一のＦＢのコンテンツをすべてのＧＰＵに返信する。
【００５５】
スワップオペレーションは、ダブルバッファリングメカニズムを起動して、バックおよびフロントのカラーバッファを交換する。スワップがステップ８５０において検出された場合は、合成された完全なフレームがＧＰＵ０以外のすべてのＧＰＵにおいて終了されなければならないことを意味している。すべてのＧＰＵは、最終的な作成されたコンテンツを保存するように指定されているＦＢのそうしたコンテンツを有するが、スクリーンに接続されているＧＰＵ（ＧＰＵ０）のみが、ステップ８６０においてそのイメージを表示する。
【００５６】
別のケースは、シーン全体に適用され、すべてのＧＰＵに送信される必要のあるオペレーションである。透明性のためのアルファブレンディングなど、他のブロッキングオペレーションのうちの１つが識別された場合、すべてのＧＰＵは、前述のステップ８４０におけるようにフラッシュされ、共通のＦＢへとマージされる。今度は、スワップオペレーションは検出されず（ステップ８５０）、したがってすべてのＧＰＵは、同じデータを有し、ブロッキングモードがオンである限り（ステップ８７０）、それらのすべては、同じデータの処理を続ける（ステップ８８０）。ブロックモードの終わりがステップ８７０において検出された場合、ＧＰＵは、指定されたデータ上の作業に戻る（ステップ８３０）。
【００５７】
３つの分割方法を組み合わせることによるグラフィックの負荷の臨機応変な処理
さらに本発明は、前の処理ステージによる負荷の表示に基づいてオブジェクト分割方法をイメージドメインおよびタイムドメインにおいてイメージ分割方法および時分割方法と組み合わせる動的な負荷バランシング技術を導入する。３つの並列の方法のすべてを１つの統合されたフレームワークへと組み合わせることによって、本発明の効率性は劇的に高まる。
【００５８】
並列処理は、任意の共通のＧＰＵなどのパイプラインによって実施され、データをタイムドメイン、イメージドメイン、およびオブジェクトドメインにおいて並列に処理できるようにする。複数のＧＰＵ上で並列に、または順次、グラフィカル処理システム上で実行された処理の結果、完全なラスタイメージのシーケンスがフレームバッファ内に保存され、ディスプレイユニットへ送信される。これらのイメージは、フレームと略称される。１つのフレームは、複数のフラグメントから構成される。フラグメントとは、メモリ内に保存されている拡張されたピクセルであり、色、アルファ、深み、ステンシルなどの属性から構成される。処理がタイムドメインにおいて並列に実行される場合、通常それぞれのＧＰＵは、完全なフレームの生成を担当する。他の２つのドメイン、すなわちイメージドメインおよびオブジェクトドメインにおいては、すべてのＧＰＵは、並列に動作して単一のフレームを生成する。スクリーンスペースの並列処理は、それぞれのＧＰＵがそれぞれのフレームのフラグメントのサブセットをレンダリングすることを意味し、オブジェクトの並列処理は、それぞれのフレームごとの入力データ、とりわけ幾何学的なデータ（たとえば、シーンを表す多角形のセット）が複数のＧＰＵの間において分散されることを意味する。
【００５９】
３つのドメイン（タイムドメイン、イメージドメイン、およびオブジェクトドメイン）のそれぞれには、長所と短所がある。それぞれの専門領域の有効性は、入力データに基づく動態関数である。さらに、多くの場合、どの単一の専門領域が優位ということはない。これらの場合、３つの専門領域のうちの２つあるいはすべてを組み合わせることによって、最適な結果をもたらすことができる。
【００６０】
本発明は、三次元データの並列処理システムのための仕様について記述する。これは、オブジェクトの並列処理のための新奇なプロセスを提供し、このプロセスは、別々のＧＰＵの間においてデータを効率よく分解することと、次いでさまざまなＧＰＵ上で生成されたフレームを、レンダリングされる準備の整った最終的なフレームへと合成することとから構成される。
【００６１】
本発明は、３つの並列モードのすべてを１つの統合されたフレームワークへと動的に統合して最大の負荷のバランシングを達成するための方法を提供する。それぞれのフレームにおいて、前のフレームをレンダリングするのに要した時間と、これらのフレームの処理中に提示されたネックとに基づいて、利用可能なＧＰＵのセットを再構成することができる。
【００６２】
図９は、本発明の一実施形態による８つのＧＰＵを採用するシステムのサンプル構成を開示している。上記のサンプル構成によれば、バランスのとれたグラフィックアプリケーションが見込まれる。ＧＰＵは、時分割の並列処理のために２つのグループへと分割される。１、２、３、および４とインデックスを付けられたＧＰＵは、偶数のフレームを処理するように構成され、５、６、７、および８とインデックスを付けられたＧＰＵは、奇数のフレームを処理するように構成される。それぞれのグループ内では、２つのＧＰＵサブグループがイメージ分割のためにセットされ、低位のインデックス（それぞれ１、２と５、６）を有するＧＰＵは、スクリーンの半分を処理するように構成され、高位のインデックスを付けられたＧＰＵ（それぞれ３、４と７、８）は、残りの半分を処理するように構成される。最後に、オブジェクト分割のために、１、３、５、および７とインデックスを付けられたＧＰＵは、オブジェクトの半分と共に提供され、２、４、６、および８とインデックスを付けられたＧＰＵは、オブジェクトの残りの半分と共に提供される。
【００６３】
前のフレームにおいて提示されたネックがパイプラインのラスタステージにおいて生じていることをどこかの時点でシステムが検出した場合は、フレームをレンダリングするのに要する時間をフラグメント処理が独占していること、および構成がアンバランスであることを意味している。その時点でＧＰＵが再構成され、それによってそれぞれのＧＰＵは、それぞれのフレーム内でスクリーンの１／４をレンダリングする。ＧＰＵ１、２、３、４の間における、および５、６、７、８の間における時分割のための元のパーティションは、依然として保持されるが、ＧＰＵ２およびＧＰＵ５は、偶数のフレームと奇数のフレームのそれぞれにおいてスクリーンの最初の１／４をレンダリングするように構成される。ＧＰＵ１およびＧＰＵ６は２番目の１／４を、ＧＰＵ４およびＧＰＵ７は３番目の１／４を、そしてＧＰＵ３およびＧＰＵ８は４番目の１／４をレンダリングするように構成される。オブジェクトの分割は、まったく含意されていない。
【００６４】
さらに、前のフレームにおいて提示されたネックがパイプの幾何学ステージにおいて生じていることをどこかの時点でシステムが検出した場合は、ＧＰＵが再構成され、それによってそれぞれのＧＰＵは、それぞれのフレーム内で幾何学的なデータの１／４を処理する。すなわちＧＰＵ３およびＧＰＵ５は、偶数のフレームと奇数のフレームのそれぞれにおいて多角形の最初の１／４を処理するように構成される。ＧＰＵ１およびＧＰＵ７は２番目の１／４を、ＧＰＵ４およびＧＰＵ６は３番目の１／４を、そしてＧＰＵ２およびＧＰＵ８は４番目の１／４を処理するように構成される。イメージの分割は、まったく含意されていない。
【００６５】
フレームごとに３つの並列モード、すなわち時分割モード、イメージ分割モード、およびオブジェクト分割モードのすべてを組み合わせるためには、８個のＧＰＵを採用すれば十分であるという点に留意すべきである。８個を超える数のＧＰＵを採用しても、３つのモードのすべてを組み合わせることができるが、これは非対称的な方法になる。時分割サイクルでは、フレームの総数における柔軟性も存在する。上記の例においては、８個のＧＰＵのクラスタが２つのグループへと分割され、それぞれのグループが１つのフレームを取り扱っていた。しかし時分割モードにおけるフレームの数を、２つよりも長いフレーム、たとえば３つあるいは４つのフレームのシーケンスへ拡張することが可能である。
【００６６】
より少ない数のＧＰＵを採用しても、やはり並列モードの組合せが可能だが、これは２つのモードの組合せのみとなる。たとえば４個だけのＧＰＵを採用すると、時分割モードを除いて、イメージ分割モードとオブジェクト分割モードを組み合わせることができる。図９から明確に理解できるように、ＧＰＵ１、ＧＰＵ２、ＧＰＵ３、およびＧＰＵ４のグループを採用すると、左側のクラスタとなる。同様にＧＰＵ１、ＧＰＵ２、ＧＰＵ５、およびＧＰＵ６のグループは、上側のクラスタであり、オブジェクト分割モードと時分割モードの双方を採用する。最後に、ＧＰＵ２、ＧＰＵ４、ＧＰＵ５、およびＧＰＵ６のグループの構成は、中央のクラスタであり、イメージ分割モードと時分割モードを採用する。
【００６７】
上記の実施形態と同様に、複数の並列モードの間におけるいかなる組合せも、グラフィックの負荷のバランスを均等にするようにスケジュールすることができるという点に留意すべきである。
【００６８】
本発明によれば、すべてのＧＰＵの間における並列化プロセスは、それぞれのフレームの処理パフォーマンスを最適化するために、オブジェクト分割モード、もしくはイメージ分割モード、または時分割モード、あるいはそれらの任意の組合せに基づくことができるという点にも留意すべきである。
【００６９】
本発明のいくつかの実施形態について例示として説明したが、本発明は、多くの修正、変形形態、および適合形態と共に、また当業者の範囲内である多くの均等物あるいは代替ソリューションを使用して、本発明の趣旨から逸脱することなく、あるいは特許請求の範囲を越えることなく実施することができるということは明らかであろう。
【図面の簡単な説明】
【００７０】
【図１】本発明の一実施形態による多重ＧＰＵアーキテクチャシステムを示すブロック図である。
【図２】本発明の一実施形態によるハードウェアハブコンポーネントを示すブロック図である。
【図３】本発明の一実施形態によるオブジェクト分割の並列化モードを示すブロック図である。
【図４】本発明の一実施形態によるイメージ分割の並列化モードを示すブロック図である。
【図５】本発明の一実施形態による時分割の並列化モードを示すブロック図である。
【図６】ソフトウェアハブドライバを本発明の一実施形態によるオペレーティングシステム環境へと統合する可能な形態を示すブロック概略図である。
【図７】本発明の一実施形態によるソフトウェアハブドライバの主要なタスクを提示する機能ブロック図である。
【図８】本発明の一実施形態による複数のＧＰＵの間において多角形を分散させるためのプロセスを提示するフローチャートである。
【図９】本発明の一実施形態による８つのＧＰＵを採用するシステムのサンプル構成を開示する図である。
【図１】
2007512613.tif 000003
【図２】
2007512613.tif 000004
【図３】
2007512613.tif 000005
【図４】
2007512613.tif 000006
【図５】
2007512613.tif 000007
【図６】
2007512613.tif 000008
【図７】
2007512613.tif 000009
【図８】
2007512613.tif 000010
【図９】
2007512613.tif 000011
【国際調査報告】
2007512613.tif 000012
2007512613.tif 000013