以下の詳細な説明は、例示の目的で多くの特定の詳細を含むが、当業者であれば、以下の詳細に対する多くの変形及び変更が本開示の範囲内にあることを理解するであろう。したがって、以下で説明される本開示の態様は、この説明に続く特許請求の範囲への一般性を失うことなく、また限定を課すことなく示される。
一般的に言えば、個々のGPUが達成できるパフォーマンスには限界があり、例えば、GPUをどれだけ大きくできるかの限界から導き出される。さらに複雑なシーンをレンダリングする、またはさらに複雑なアルゴリズム(例えば、マテリアル、ライティングなど)を使用するには、複数のGPUを連携して使用して単一の画像フレームを生成及び/またはレンダリングすることが望ましい。例えば、画像フレーム内のオブジェクト及び/またはジオメトリのピース(piece:例えば、オブジェクトの一部、プリミティブ、ポリゴン、頂点など)のジオメトリ解析から決定された情報に基づいて、レンダリングのレスポンシビリティ(responsibility)が複数のGPU間で分割される。この情報は、インターリーブされる可能性のあるジオメトリと各スクリーン領域との間の関係を提供する。これにより、GPUはジオメトリをより効率的にレンダリングする、またはそれをすべてまとめてレンダリングするのを回避し得る。特に、本開示の様々な実施形態は、画像フレームのジオメトリの解析を提供し、画像フレームをレンダリングするレスポンシビリティをGPU間で動的かつ柔軟に割り当て、各GPUが最終的にその画像フレームに固有のものである(つまり、次の画像フレームでは、GPUのスクリーン領域への関連付けが異なる場合がある)スクリーン領域のセットのレスポンシビリティを持つことになるようにする。ジオメトリ解析と、画像フレームごとのGPUへのレンダリングレスポンシビリティの動的な割り当てを通じて、本開示の実施形態は、ピクセル数(つまり、解像度)と複雑さの増加、及び/または幾何学的な複雑さの増加、及び/または、頂点及び/またはプリミティブあたりの処理量の増加をサポートする。具体的には、本開示の様々な実施形態は、画像フレームのジオメトリレンダリングのためにGPUにスクリーン領域を動的に割り当てるレンダリング中にジオメトリ解析を実行することによって、アプリケーション用のジオメトリのマルチGPUレンダリングを実行するように構成された方法及びシステムを説明し、ジオメトリ解析は、画像フレームのためにレンダリングされるジオメトリとスクリーン領域との間の関係を定義する情報に基づく。例えば、ジオメトリレンダリング前のZプレパス中など、レンダリング中にジオメトリ解析の情報が生成される。具体的には、レンダリングの後続のフェーズ中にジオメトリレンダリングを実行するときに、GPUへのスクリーン領域のインテリジェントな割り当てを支援するために使用される情報をプレパスが生成するように、ハードウェアが構成される。本開示の他の実施形態は、画像フレームのレンダリングのそのフェーズのためにGPUにスクリーン領域を動的に割り当てるために、レンダリングのフェーズの前にジオメトリ解析を実行することによって、アプリケーションのジオメトリのマルチGPUレンダリングを実行するように構成された方法及びシステムを説明し、ジオメトリ解析は、画像フレームのためにレンダリングされるジオメトリとスクリーン領域との間の関係を定義する情報に基づく。例えば、情報は、シェーダ(例えば、ソフトウェア)を使用するなどして、レンダリングの前に実行されるプレパスで生成される。この情報は、ジオメトリレンダリングを実行するときに、スクリーン領域をGPUにインテリジェントに割り当てるために使用される。本開示のさらに他の実施形態は、例えばドローコールによって処理または生成されたようなジオメトリのピースをジオメトリのより小さな部分に再分割し、ジオメトリのそれらのより小さな部分をレンダリングのために複数のGPUに割り当て、ジオメトリのそれぞれのより小さな部分がGPUに割り当てられるように構成される、方法及びシステムを説明する。利点として、例えばこれにより、複数のGPUがより複雑なシーン及び/または画像を同じ時間量でレンダリングできるようになる。
様々な実施形態の上記の一般的な理解により、様々な図面を参照して実施形態の例の詳細をここに説明する。
本明細書全体を通して、「アプリケーション」または「ゲーム」または「ビデオゲーム」または「ゲームアプリケーション」への言及は、入力コマンドの実行を通して指示される任意のタイプのインタラクティブアプリケーションを表すことを意味する。説明目的のみで、インタラクティブアプリケーションは、ゲーム、文書処理、ビデオ処理、ビデオゲーム処理などのためのアプリケーションを含む。さらに、これらの用語は、置き換え可能である。
本明細書を通して、本開示の様々な実施形態は、4つのGPUを有する例示的なアーキテクチャを使用するアプリケーションのためのマルチGPU処理またはジオメトリのレンダリングについて説明される。しかしながら、アプリケーションのジオメトリをレンダリングするときに、任意の数のGPU(例えば、2つ以上のGPU)が連携できることが理解される。
図1は、本開示の一実施形態による、アプリケーション用の画像(例えば、画像フレーム)をレンダリングするときにマルチGPU処理を実行するためのシステムの図である。このシステムは、本開示の実施形態に従って、1つまたは複数のクラウドゲームサーバ間のネットワークを介してゲームを提供するように構成されており、より具体的には、複数のGPUを連携させてアプリケーションの単一の画像をレンダリングするように構成されており、それは例えば、画像フレームのジオメトリレンダリングのためにスクリーン領域をGPUに動的に割り当てるために、レンダリング中またはレンダリング前に画像フレームのジオメトリのピースのジオメトリ解析を実行するとき、及び/または、例えばドローコールによって処理または生成されたようなジオメトリのピースをジオメトリのより小さな部分に再分割し、ジオメトリのそれらのより小さな部分をレンダリングのために複数のGPUに割り当てるときであり、この場合は、ジオメトリのそれぞれのより小さな部分がGPUに割り当てられる。クラウドゲームには、サーバでビデオゲームを実行して、ゲームでレンダリングされたビデオフレームを生成し、次いでそれをクライアントに送信して表示することが含まれる。具体的には、システム100は、レンダリング前にインターリーブされたスクリーン領域に対して事前テストすることによって、アプリケーションのジオメトリの効率的なマルチGPUレンダリングのために構成される。
図1は、クラウドゲームシステムの1つまたは複数のクラウドゲームサーバ間のジオメトリのマルチGPUレンダリングの実施態様を示しているが、本開示の他の実施形態は、アプリケーションのジオメトリの効率的なマルチGPUレンダリングを、複数のGPUを有するハイエンドグラフィックカードを含む、パーソナルコンピュータやゲームコンソールなどの、スタンドアロンシステム内でレンダリングしながら領域テストを実行することによって提供する。
ジオメトリのマルチGPUレンダリングは、様々な実施形態において(例えば、クラウドゲーム環境またはスタンドアロンシステム内で)、物理GPU、または仮想GPU、または両方の組み合わせを使用して実行され得ることも理解される。例えば、仮想マシン(例えば、インスタンス)は、複数のCPU、メモリモジュール、GPU、ネットワークインタフェース、通信コンポーネントなどのハードウェア層の1つまたは複数のコンポーネントを利用するホストハードウェア(例えば、データセンターに配置される)のハイパーバイザを使用して作成することができる。これらの物理リソースは、CPUのラック、GPUのラック、メモリのラックなどのラックに配置でき、インスタンスに使用される(インスタンスの仮想化されたコンポーネントを構築するときなど)コンポーネントの組み立てとアクセスのためのファブリックを容易にするラックスイッチのトップを使用して、ラック内の物理リソースにアクセスできる。通常、ハイパーバイザは、仮想リソースで構成された複数のインスタンスの複数のゲストオペレーティングシステムを提示できる。すなわち、オペレーティングシステムのそれぞれは、1つまたは複数のハードウェアリソース(例えば、対応するデータセンターに配置される)によってサポートされる仮想化リソースの対応するセットで構成され得る。例えば、各オペレーティングシステムは、仮想CPU、複数の仮想GPU、仮想メモリ、仮想化された通信コンポーネントなどでサポートされ得る。さらに、インスタンスの構成は、あるデータセンターから別のデータセンターに転送されてレイテンシを短縮することができる。ユーザまたはゲームに対して定義されたGPU利用は、ユーザのゲームセッションを保存するときに使用できる。GPU利用は、ゲームセッション用のビデオフレームの高速レンダリングを最適化するために、本明細書で説明する任意の数の構成を含むことができる。一実施形態では、ゲームまたはユーザに対して定義されたGPU利用は、構成可能な設定としてデータセンター間で転送することができる。GPU利用を転送する機能により、ユーザが異なる地理的位置からゲームをプレイするために接続する場合に、データセンターからデータセンターへのゲームプレイの効率的な移行が可能になる。
システム100は、クラウドゲームネットワーク190を介してゲームを提供し、本開示の一実施形態によれば、ゲームは、ゲームをプレイしている対応するユーザのクライアントデバイス110(例えば、シンクライアント)からリモートで実行されている。システム100は、シングルプレイヤーモードまたはマルチプレイヤーモードのいずれかで、ネットワーク150を介してクラウドゲームネットワーク190を介して1つまたは複数のゲームをプレイする1人または複数のユーザにゲームのコントロールをもたらすことができる。いくつかの実施形態において、クラウドゲームネットワーク190は、ホストマシンのハイパーバイザ上で実行する複数の仮想マシン(VM)を含むことができ、1つまたは複数の仮想マシンは、ホストのハイパーバイザに利用可能であるハードウェアリソースを利用するゲームプロセッサモジュールを実行するように構成される。ネットワーク150は、1つまたは複数の通信技術を含み得る。いくつかの実施形態では、ネットワーク150は、高度な無線通信システムを有する第5世代(5G)ネットワーク技術を含み得る。
いくつかの実施形態では、通信は、無線技術を使用して促進され得る。そのような技術には、例えば、5G無線通信技術が含まれ得る。5Gは、セルラーネットワークテクノロジーの第5世代である。5Gネットワークはデジタルセルラーネットワークであり、プロバイダーがカバーするサービスエリアはセルと呼ばれる小さな地理的エリアに分割されている。音と画像を表すアナログ信号は、電話でデジタル化され、アナログデジタルコンバーターによって変換され、ビットのストリームとして送信される。セル内のすべての5Gワイヤレスデバイスは、他のセルで再利用される周波数のプールからトランシーバによって割り当てられた周波数チャネルを介して、セル内のローカルアンテナアレイ及び低電力自動トランシーバ(送信機及び受信機)と電波で通信する。ローカルアンテナは、高帯域幅光ファイバまたは無線バックホール接続によって、電話網及びインターネットに接続される。他のセルネットワークと同様に、あるセルから別のセルに移動するモバイルデバイスは、新しいセルに自動的に転送される。5Gネットワークは単なる一例のタイプの通信ネットワークであり、本開示の実施形態は、5Gに続く後の世代の有線または無線技術と同様に、前世代の無線または有線通信を利用することができることを理解されたい。
示されるように、クラウドゲームネットワーク190は、複数のビデオゲームへのアクセスを提供するゲームサーバ160を含む。ゲームサーバ160は、クラウド内で利用可能な任意の種類のサーバコンピューティングデバイスであってもよく、1つまたは複数のホスト上で実行される1つまたは複数の仮想マシンとして構成され得る。例えば、ゲームサーバ160は、ユーザのゲームのインスタンスをインスタンス化するゲームプロセッサをサポートする仮想マシンを管理し得る。よって、複数の仮想マシンに関連付けられたゲームサーバ160の複数のゲームプロセッサは、複数のユーザのゲームプレイに関連付けられた1つまたは複数のゲームの複数のインスタンスを実行するように構成される。そのようにして、バックエンドサーバサポートは、複数のゲームアプリケーションのゲームプレイのメディア(例えば、ビデオ、オーディオなど)のストリーミングを、対応する複数のユーザに提供する。つまり、ゲームサーバ160は、ネットワーク150を介して、データ(例えば、対応するゲームプレイのレンダリングされた画像及び/またはフレーム)を対応するクライアントデバイス110にストリーミング返信するように構成される。そのようにして、クライアントデバイス110によって受信されて転送されたコントローラの入力に応答して、計算の複雑なゲームアプリケーションが、バックエンドサーバで実行し続けることができる。各サーバは、画像及び/またはフレームをレンダリングし、次いでそれらを符号化(例えば、圧縮)して、対応するクライアントデバイスにストリーミングして表示することが可能である。
例えば、複数のユーザは、ストリーミングメディアを受信するように構成された対応するクライアントデバイス110を使用して、通信ネットワーク150を介して、クラウドゲームネットワーク190にアクセスすることができる。一実施形態では、クライアントデバイス110は、計算機能(例えば、ゲームタイトル処理エンジン111を含む)を提供するように構成されたバックエンドサーバ(例えば、クラウドゲームネットワーク190)とのインターフェースを提供するシンクライアントとして構成され得る。別の実施形態では、クライアントデバイス110は、ビデオゲームの少なくともいくつかのローカル処理のためのゲームタイトル処理エンジン及びゲームロジックで構成され得、バックエンドサーバで実行されるビデオゲームによって生成されるストリーミングコンテンツを受信するために、またはバックエンドサーバサポートによって提供されるその他のコンテンツ用に、さらに利用され得る。ローカル処理の場合、ゲームタイトル処理エンジンは、ビデオゲームと、ビデオゲームに関連するサービスとを実行するための基本的なプロセッサベースの機能を含む。その場合、ゲームロジックは、ローカルクライアントデバイス110に格納することができ、ビデオゲームを実行するために使用される。
クライアントデバイス110のそれぞれが、クラウドゲームネットワークから異なるゲームへのアクセスを要求している可能性がある。例えば、クラウドゲームネットワーク190は、ゲームサーバ160のCPUリソース163及びGPUリソース365を使用して実行されるように、ゲームタイトル処理エンジン111上に構築される1つまたは複数のゲームロジックを実行していてもよい。例えば、ゲームタイトル処理エンジン111と連携するゲームロジック115aは、1つのクライアントのゲームサーバ160で実行され、ゲームタイトル処理エンジン111と連携するゲームロジック115bは、第2のクライアントのゲームサーバ160で実行され、そしてゲームタイトル処理エンジン111と連携するゲームロジック115nは、第Nのクライアントのゲームサーバ160で実行され得る。
特に、対応するユーザ(図示せず)のクライアントデバイス110は、インターネットなどの通信ネットワーク150経由でゲームへのアクセスを要求するために、及びゲームサーバ160により実行されるビデオゲームにより生成される表示画像(例えば、画像フレーム)をレンダリングするために構成され、その場合に符号化された画像が対応するユーザと関連する表示のためにクライアントデバイス110へ配信されている。例えば、ユーザは、ゲームサーバ160のゲームプロセッサ上で実行するビデオゲームのインスタンスとクライアントデバイス110を通してインタラクトすることができる。より具体的には、ビデオゲームのインスタンスは、ゲームタイトル処理エンジン111により実行される。ビデオゲームを実装する対応するゲームロジック(例えば、実行可能コード)115は、データストア(図示せず)を介して格納及びアクセス可能であり、ビデオゲームを実行するために使用される。ゲームタイトル処理エンジン111は、複数のゲームロジック(例えば、ゲームアプリケーション)を使用して複数のビデオゲームをサポートすることができ、それぞれがユーザによって選択可能である。
例えば、クライアントデバイス110は、ゲームプレイを駆動するために使用される入力コマンドを介するなどして、対応するユーザのゲームプレイに関連付けられたゲームタイトル処理エンジン111とインタラクトするように構成される。特に、クライアントデバイス110は、ゲームコントローラ、タブレットコンピュータ、キーボードなどの様々な種類の入力デバイスからの入力、ビデオカメラ、マウス、タッチパッドなどにより取り込まれたジェスチャを、受信し得る。クライアントデバイス110は、メモリとプロセッサモジュールとを少なくとも有する任意の種類のコンピューティングデバイスであってもよく、ネットワーク150を介してゲームサーバ160に接続することができる。バックエンドゲームタイトル処理エンジン111は、レンダリングされた画像を生成するように構成され、レンダリングされた画像は、クライアントデバイス110に関連する対応するディスプレイに表示するためにネットワーク150を介して配信される。例えば、クラウドベースのサービスを介して、ゲームレンダリングされた画像は、ゲームサーバ160のゲーム実行エンジン111で実行される対応するゲーム(例えば、ゲームロジック)のインスタンスによって配信され得る。すなわち、クライアントデバイス110は、符号化された画像(例えば、ビデオゲームの実行を通じて生成されたゲームレンダリング画像から符号化された)を受信し、ディスプレイ11上にレンダリングされる画像を表示するように構成される。一実施形態では、ディスプレイ11は、HMDを含む(例えば、VRコンテンツを表示する)。いくつかの実施形態では、レンダリングされた画像は、クラウドベースのサービスから直接、またはクライアントデバイス110(例えば、PlayStation(登録商標)Remote Play)を介して、無線または有線でスマートフォンまたはタブレットにストリーミングすることができる。
一実施形態では、ゲームサーバ160及び/またはゲームタイトル処理エンジン111は、ゲーム及びゲームアプリケーションに関連するサービスを実行するための基本的なプロセッサベースの機能を含む。例えば、ゲームサーバ160は、2Dまたは3Dレンダリング、物理シミュレーション、スクリプト作成、オーディオ、アニメーション、グラフィック処理、ライティング、シェーディング、ラスタ化、レイトレーシング、シャドウイング、カリング、変換、人工知能などを含むプロセッサベースの機能を実行するように構成された中央処理装置(CPU)リソース163及びグラフィック処理ユニット(GPU)リソース365を含む。さらに、CPU及びGPUグループは、メモリ管理、マルチスレッド管理、サービス品質(QoS)、帯域幅テスト、ソーシャルネットワーキング、ソーシャルフレンドの管理、フレンドのソーシャルネットワークとの通信、通信チャネル、テキストメッセージ、インスタントメッセージング、チャットサポートなどを部分的に含む、ゲームアプリケーション用のサービスを実装する場合がある。一実施形態では、1つまたは複数のアプリケーションが特定のGPUリソースを共有する。一実施形態では、複数のGPUデバイスを組み合わせて、対応するCPU上で実行されている単一のアプリケーション用のグラフィック処理を実行することができる。
一実施形態では、クラウドゲームネットワーク190は、分散型ゲームサーバシステム及び/またはアーキテクチャである。具体的には、ゲームロジックを実行する分散型ゲームエンジンが、対応するゲームの対応するインスタンスとして構成されている。一般に、分散型ゲームエンジンは、ゲームエンジンの各機能を取り込み、それらの機能を分散させて多数の処理エンティティによって実行する。個々の機能は、さらに1つまたは複数の処理エンティティにわたって分散させることができる。処理エンティティは、物理ハードウェアを含んで、及び/または仮想コンポーネントまたは仮想マシンとして、及び/または仮想コンテナとしてなど、様々な構成で構成することができ、コンテナは、仮想化されたオペレーティングシステム上で動作するゲームアプリケーションのインスタンスを仮想化するものであるため、仮想マシンとは異なる。処理エンティティは、クラウドゲームネットワーク190の1つまたは複数のサーバ(計算ノード)上のサーバ及びその基礎となるハードウェアを利用し、及び/またはそれらに依拠してもよく、サーバは1つまたは複数のラック上に配置され得る。種々の処理エンティティに対するそれらの機能の実行の協調、割り当て、及び管理は、分散同期層によって行われる。そのようにして、それらの機能の実行が分散同期層によって制御されて、プレイヤーによるコントローラ入力に応答して、ゲームアプリケーション用のメディア(例えば、ビデオフレーム、オーディオなど)を生成することが可能になる。分散同期層は、重要なゲームエンジンコンポーネント/機能が、より効率的な処理のために分散されて再構築されるように、分散処理エンティティ全体で(例えば、負荷バランシングを介して)それらの機能を効率的に実行することが可能である。
図2は、本開示の一実施形態による、複数のGPUが連携して対応するアプリケーションの単一の画像をレンダリングする、例示的なマルチGPUアーキテクチャ200の図である。本開示の様々な実施形態によれば、マルチGPUアーキテクチャ200は、画像フレームのジオメトリレンダリングのためにスクリーン領域をGPUに動的に割り当てるために、レンダリング中またはレンダリング前に、及び/または、例えばドローコールによって処理または生成されたようなジオメトリのピースをジオメトリのより小さな部分に再分割し、ジオメトリのそれらのより小さな部分をレンダリングのために複数のGPUに割り当てるときに、画像フレームのジオメトリのピースのジオメトリ解析を実行するように構成されており、ジオメトリのそれぞれのより小さな部分がGPUに割り当てられる。明示的に説明または図示されていないが、複数のGPUが連携して単一の画像をレンダリングする本開示の様々な実施形態において、多くのアーキテクチャが可能であることが理解される。例えば、レンダリング中に領域テストを実行することによるアプリケーション用のジオメトリのマルチGPUレンダリングは、クラウドゲームシステムの1つまたは複数のクラウドゲームサーバ間で実装することも、パーソナルコンピュータまたは、複数のGPUを有するハイエンドグラフィックカードを含むゲームコンソールなどのスタンドアロンシステム内で実装することもできる。
マルチGPUアーキテクチャ200は、アプリケーション用の単一の画像(「画像フレーム」とも呼ばれる)、及び/またはアプリケーション用の一連の画像の各画像のマルチGPUレンダリングのために構成されたCPU163及び複数のGPUを含む。具体的には、CPU163及びGPUリソース365は、前述の通り、2Dまたは3Dレンダリング、物理シミュレーション、スクリプト作成、オーディオ、アニメーション、グラフィック処理、ライティング、シェーディング、ラスタ化、レイトレーシング、シャドウイング、カリング、変換、人工知能などを含むプロセッサベースの機能を実行するように構成される。
例えば、マルチGPUアーキテクチャ200のGPUリソース365には4つのGPUが示されているが、アプリケーション用の画像をレンダリングする際には任意の数のGPUを利用することができる。各GPUは、高速バス220を介して、ランダムアクセスメモリ(RAM)などの対応する専用メモリに接続される。具体的には、GPU-Aはバス220を介してメモリ210A(例えばRAM)に接続され、GPU-Bはバス220を介してメモリ210B(例えばRAM)に接続され、GPU-Cはバス220を介してメモリ210C(例えばRAM)に接続され、GPU-Dはバス220を介してメモリ210D(例えば、RAM)に接続される。
さらに、各GPUは、バス240を介して互いに接続され、バス240は、アーキテクチャに応じて、対応するGPUとその対応するメモリとの間の通信に使用されるバス220と速度がほぼ等しいかそれより遅いものであり得る。例えば、GPU-Aは、バス240を介してGPU-B、GPU-C、及びGPU-Dのそれぞれに接続される。また、GPU-Bは、バス240を介してGPU-A、GPU-C、及びGPU-Dのそれぞれに接続される。加えて、GPU-Cは、バス240を介してGPU-A、GPU-B、及びGPU-Dのそれぞれに接続される。さらに、GPU-Dは、バス240を介してGPU-A、GPU-B、及びGPU-Cのそれぞれに接続される。
CPU163は、低速バス230を介して各GPUに接続する(例えば、バス230は、対応するGPUとその対応するメモリとの間の通信に使用されるバス220より遅い)。具体的には、CPU163は、GPU-A、GPU-B、GPU-C、及びGPU-Dのそれぞれに接続される。
いくつかの実施形態では、4つのGPUは個別のGPUであり、それぞれが独自のシリコンダイ上にある。他の実施形態では、4つのGPUは、高速相互接続及びダイ上の他のユニットを利用するために、ダイを共有することができる。さらに他の実施形態では、単一のより強力なGPUとして、または4つのより強力でない「仮想」GPU(GPU-A、GPU-B、GPU-C及びGPU-D)のどちらかとして使用するように構成できる、1つの物理GPU250が存在する。すなわち、GPU-A、GPU-B、GPU-C、GPU-Dそれぞれがグラフィックパイプラインを動作させるのに十分な機能があり(図4に示すように)、チップ全体としてグラフィックパイプラインを動作させることができ(図4に示すように)、構成は2つの構成間で(例えば、レンダリングパス間で)柔軟に切り替えることができる。
図3は、本開示の様々な実施形態による、画像フレームのジオメトリレンダリングのためにスクリーン領域をGPUに動的に割り当てるために、レンダリング中またはレンダリング前に、及び/または、例えばドローコールによって処理または生成されたようなジオメトリのピースをジオメトリのより小さな部分に再分割し、ジオメトリのそれらのより小さな部分をレンダリングのために複数のGPUに割り当てるときに、画像フレームのジオメトリのピースのジオメトリ解析を実行することによって、アプリケーションによって生成された画像フレームのジオメトリのマルチGPUレンダリングのために構成されており、ジオメトリのそれぞれのより小さな部分がGPUに割り当てられる、グラフィック処理ユニットリソース365の図である。例えば、ゲームサーバ160は、図1のクラウドゲームネットワーク190にGPUリソース365を含めるように構成され得る。図示のように、GPUリソース365には、GPU365a、GPU365b…GPU365nなどの複数のGPUが含まれる。前述のように、様々なアーキテクチャは、クラウドゲームシステムの1つまたは複数のクラウドゲームサーバ間でジオメトリのマルチGPUレンダリングを実装する、または、複数のGPUを有するハイエンドグラフィックカードを含むパーソナルコンピュータやゲームコンソールなどのスタンドアロンシステム内でのジオメトリのマルチGPUレンダリングを実装するなど、レンダリング中に領域テストを介してアプリケーションのジオメトリのマルチGPUレンダリングを実行することにより、単一の画像をレンダリングするために連携する、複数のGPUを含むことができる。
具体的には、一実施形態では、ゲームサーバ160は、複数のGPUが連携して単一の画像をレンダリングする、及び/またはアプリケーションの実行時に一連の画像の1つまたは複数の画像のそれぞれをレンダリングするように、アプリケーションの単一の画像をレンダリングするときに、マルチGPU処理を実行するように構成される。例えば、一実施形態では、ゲームサーバ160は、アプリケーションの一連の画像における1つまたは複数の画像のそれぞれのマルチGPUレンダリングを実行するように構成されたCPU及びGPUグループを含むことができ、1つのCPU及びGPUグループはグラフィックを実装する、及び/またはアプリケーション用のパイプラインをレンダリングすることができる。CPU及びGPUグループは、1つまたは複数の処理デバイスとして構成できる。前述のとおり、GPU及びGPUグループは、CPU163及びGPUリソース365を含むことができ、これらは、2Dまたは3Dレンダリング、物理シミュレーション、スクリプト作成、オーディオ、アニメーション、グラフィック処理、ライティング、シェーディング、ラスタ化、レイトレーシング、シャドウイング、カリング、変換、人工知能などを含むプロセッサベースの機能を実行するように構成される。
GPUリソース365は、オブジェクトのレンダリング(例えば、オブジェクトのピクセルの色または法線ベクトル値を複数レンダーターゲット-MRTに書き込む)及び同期計算カーネルの実行(例えば、結果のMRTでのフルスクリーン効果)のレスポンシビリティを持ち、及び/またはそのために構成され、実行する同期計算、及びレンダリングするオブジェクトは、GPUが実行する複数のレンダリングコマンドバッファ325に含まれるコマンドによって指定される。具体的には、GPUリソース365は、オブジェクトをレンダリングし、レンダリングコマンドバッファ325からコマンドを実行する際に(例えば、同期計算カーネルの実行中に)同期計算を実行するように構成され、コマンドは、及び/または操作は、順番に実行されるように、他の操作に依存する場合がある。
例えば、GPUリソース365は同期計算、及び/または1つまたは複数のレンダリングコマンドバッファ325(例えば、レンダリングコマンドバッファ325a、レンダリングバッファ325b…レンダリングコマンドバッファ325n)を使用するオブジェクトのレンダリングを実行するように構成されている。一実施形態では、GPUリソース365内の各GPUは、独自のコマンドバッファを有することができる。あるいは、オブジェクトの実質的に同じセットが各GPUによってレンダリングされているとき(例えば、領域のサイズが小さいため)、GPUリソース365内のGPUは、同じコマンドバッファまたはコマンドバッファの同じセットを使用することができる。さらに、GPUリソース365内の各GPUは、コマンドが1つのGPUによって実行されるが別のGPUによって実行されない機能をサポートすることができる。例えば、レンダリングコマンドバッファ内の描画コマンドまたは述語のフラグにより、単一のGPUが対応するコマンドバッファ内の1つまたは複数のコマンドを実行できるようになるが、他のGPUはコマンドを無視する。例えば、レンダリングコマンドバッファ325aはフラグ330aをサポートすることができ、レンダリングコマンドバッファ325bはフラグ330bをサポートし、レンダリングコマンドバッファ325nはフラグ330nをサポートすることができる。
同期計算のパフォーマンス(例えば、同期計算カーネルの実行)とオブジェクトのレンダリングは、レンダリング全体の一部である。例えば、ビデオゲームが60Hz(例:60フレーム/秒)で実行されている場合、画像フレームのすべてのオブジェクトレンダリングと同期計算カーネルの実行は通常、約16.67ms(例えば、60Hzで1フレーム)以内に完了する必要がある。前述のように、オブジェクトをレンダリングするとき及び/または同期計算カーネルを実行するときの操作は、操作が他の操作に依存してもよいように順序付けられる(例えば、レンダリングコマンドバッファ内のコマンドは、そのレンダリングコマンドバッファ内の他のコマンドが実行される前に実行を完了する必要がある場合がある)。
具体的には、レンダリングコマンドバッファ325のそれぞれは、対応するGPU構成に影響を与えるコマンド(例えば、レンダーターゲットの位置及びフォーマットを指定するコマンド)、ならびにオブジェクトをレンダリングする、及び/または同期計算カーネルを実行するためのコマンドを含む、様々なタイプのコマンドを含む。説明のために、同期計算カーネルを実行するときに実行される同期計算には、オブジェクトが対応する1つ以上の複数レンダーターゲット(MRT)にすべてレンダリングされたときにフルスクリーン効果を実行することが含まれる場合がある。
さらに、GPUリソース365が画像フレームのオブジェクトをレンダリングするとき、及び/または画像フレームを生成するときに同期計算カーネルを実行するとき、GPUリソース365は、各GPU365a、365b…365nのレジスタを介して構成される。例えば、GPU365aは、そのレジスタ340(例えば、レジスタ340a、レジスタ340b…レジスタ340n)を介して、そのレンダリングまたは計算カーネル実行を特定の方法で実行するように構成される。すなわち、レジスタ340に格納された値は、オブジェクトをレンダリングするため、及び/または画像フレームの同期計算カーネルを実行するために使用されるレンダリングコマンドバッファ325内のコマンドを実行するときのGPU365a365のハードウェアコンテキスト(例えば、GPU構成またはGPU状態)を定義する。GPUリソース365内のGPUのそれぞれは、GPU365bがそのレジスタ350(例えば、レジスタ350a、レジスタ350b…レジスタ350n)を介して構成され、特定の方法でそのレンダリングを実行するか、またはカーネル実行を計算するように、同様に構成され得る。そしてGPU365nは、そのレジスタ370(例えば、レジスタ370a、レジスタ370b…レジスタ370n)を介して構成され、特定の方法でそのレンダリングまたは計算カーネル実行を実行する。
GPU構成の例には、レンダーターゲット(MRTなど)の位置とフォーマットが含まれる。また、GPU構成の他の例には、操作手順が含まれる。例えば、オブジェクトをレンダリングするとき、オブジェクトの各ピクセルのZ値を様々な方法でZバッファと比較できる。例えば、オブジェクトのZ値がZバッファの値と一致する場合にのみ、オブジェクトのピクセルが書き込まれる。別の方法として、オブジェクトのZ値がZバッファの値と同じかそれより小さい場合にのみ、オブジェクトのピクセルを書き込むこともできる。実行されるテストのタイプは、GPU構成内で定義される。
図4は、本開示の一実施形態による、複数のGPUが連携して単一の画像をレンダリングするように、マルチGPU処理用に構成されたグラフィックパイプライン400を実装する、レンダリングアーキテクチャの簡略図である。グラフィックパイプライン400は、3D(三次元)ポリゴンレンダリング処理を使用して画像をレンダリングする一般的処理の例示である。レンダリングされた画像に対するグラフィックパイプライン400は、ピクセルの各々に対する対応する色情報をディスプレイに出力し、色情報は、テクスチャ及びシェーディング(例えば、色、シャドーイングなど)を表すことができる。グラフィックパイプライン400は、図1及び図3のクライアントデバイス110、ゲームサーバ160、ゲームタイトル処理エンジン111、及び/またはGPUリソース365内に実装可能であり得る。つまり、様々なアーキテクチャは、クラウドゲームシステムの1つまたは複数のクラウドゲームサーバ間でジオメトリのマルチGPUレンダリングを実装する、または、複数のGPUを有するハイエンドグラフィックカードを含むパーソナルコンピュータやゲームコンソールなどのスタンドアロンシステム内でのジオメトリのマルチGPUレンダリングを実装するなど、レンダリング中に領域テストを介してアプリケーション用のジオメトリのマルチGPUレンダリングを実行することにより、単一の画像をレンダリングするために連携する、複数のGPUを含むことができる。
示されているように、グラフィックパイプラインは入力ジオメトリ405を受信する。例えば、ジオメトリ処理ステージ410は、入力ジオメトリ405を受信する。例えば、入力ジオメトリ405は、3Dゲーミング世界内の頂点、及び頂点の各々に対応する情報を含んでもよい。ゲーミング世界内の所与のオブジェクトは、頂点によって定義されるポリゴン(例えば、三角形)を使用して表すことができ、対応するポリゴンの表面は、次に、グラフィックパイプライン400を介して処理されて、最終効果(例えば、色、テクスチャ、等)を達成する。頂点属性には、法線(例えば、その位置のジオメトリに対してどの方向が直角であるか)、色(例えば、RGBー赤、緑、青のトリプルなど)、及びテクスチャ座標/マッピング情報が含まれ得る。
ジオメトリ処理ステージ410は、頂点処理(例えば、頂点シェーダを介して)及びプリミティブ処理の両方のレスポンシビリティを持つ(そしてそれらを行うことができる)。具体的には、ジオメトリ処理ステージ410は、プリミティブを定義する頂点のセットを出力し、それらをグラフィックパイプライン400の次のステージに配信するだけでなく、それらの頂点の位置(正確には同次座標)及び様々な他のパラメータを出力することができる。位置は、後のシェーダステージによるアクセスのために位置キャッシュ450に配置される。他のパラメータは、これも後のシェーダステージによるアクセスのためにパラメータキャッシュ460に配置される。
プリミティブ及び/またはポリゴンのライティング及びシャドーイング計算の実行など、様々な操作がジオメトリ処理ステージ410によって実行され得る。一実施形態では、ジオメトリステージはプリミティブを処理できるため、背面カリング及び/またはクリッピング(例えば、視錐台に対するテスト)を実行でき、それにより、下流ステージ(例えば、ラスタ化ステージ420など)の負荷を軽減する。別の実施形態では、ジオメトリステージはプリミティブを生成することができる(例えば、従来のジオメトリシェーダと同等の機能を有する)。
ジオメトリ処理ステージ410によって出力されたプリミティブは、プリミティブをピクセルから構成されるラスタ画像に変換するラスタ化ステージ420に供給される。具体的には、ラスタ化ステージ420は、3Dゲーミング世界内の視点(例えば、カメラ位置、ユーザの目の位置など)によって定義される二次元(2D)画像平面にシーン内のオブジェクトを投影するように構成される。単純化したレベルにおいて、ラスタ化ステージ420は、各々のプリミティブを検査し、どのピクセルが対応するプリミティブによって影響を与えられるかを判定する。具体的には、ラスタライザ420は、プリミティブをピクセルサイズのフラグメントに分割し、各フラグメントは、ディスプレイ内のピクセルに対応する。1つまたは複数のフラグメントは、画像を表示するとき、対応するピクセルの色に貢献し得ることに留意することが重要である。
前述のように、クリッピング(視錐台から外側にあるフラグメントを識別及び無視する)並びに視点へのカリング(より近いオブジェクトによって閉塞されたフラグメントを無視する)などの追加の演算もラスタ化ステージ420によって実行され得る。クリッピングに関して、ジオメトリ処理ステージ410及び/またはラスタ化ステージ420は、ゲーミング世界の視点によって定義される視錐台の外側にあるプリミティブを識別して無視するように構成することができる。
ピクセル処理ステージ430は、ジオメトリ処理ステージによって作成されたパラメータ及び他のデータを使用して、ピクセルの結果の色などの値を生成する。具体的には、そのコアにおけるピクセル処理ステージ430は、プリミティブの色及び輝度が利用可能なライティングによりどのように変化するかを判定するよう、フラグメントに対してシェーディング演算を実行する。例えば、ピクセル処理ステージ430は、各々のフラグメントに対して奥行、色、法線、及びテクスチャ座標(例えば、テクスチャ詳細)を判定してもよく、さらに、フラグメントに対して適切なレベルの光、暗がり、及び色を判定してもよい。具体的には、ピクセル処理ステージ430は、色及び他の属性(例えば、視点からの距離に対するz-奥行、透過性に対するα値)を含む、各々のフラグメントの特徴を計算する。加えて、ピクセル処理ステージ430は、対応するフラグメントに影響を与える利用可能なライティングに基づいて、ライティング効果をフラグメントに適用する。さらに、ピクセル処理ステージ430は、各フラグメントにシャドウイング効果を適用し得る。
ピクセル処理ステージ430の出力は、処理されたフラグメント(例えば、テクスチャ及びシェーディング情報)を含み、グラフィックパイプライン400の次のステージの出力マージャステージ440に送られる。出力マージャステージ440は、ピクセル処理ステージ430の出力ならびに既にメモリにある値などの他のデータを使用して、ピクセルの最終的な色を生成する。例えば、出力マージャステージ440は、ピクセル処理ステージ430から決定されたフラグメント及び/またはピクセルと、そのピクセルに対してMRTにすでに書き込まれている値との間の値の、オプションのブレンディングを実行することができる。
ディスプレイ内の各ピクセルの色値は、フレームバッファ(図示せず)に格納することができる。これらの値は、シーンの対応する画像を表示するときに、対応するピクセルにスキャンされる。特に、ディスプレイは、ピクセルごと、行ごと、左から右にあるいは右から左に、上から下にあるいは下から上に、または任意の他のパターンで、フレームバッファから色値を読み取り、画像を表示するときにそれらのピクセル値を使用してピクセルを照らす。
本開示の実施形態は、複数のGPUを連携して使用して、単一の画像フレームを生成及び/またはレンダリングする。複数のGPUを使用する際の難点は、各GPUに等量の作業を分散することにある。本開示の実施形態は、各GPUに等しい量の作業を提供することができ(すなわち、作業を概算で分散する)、レンダリングされるジオメトリの空間分散の解析を通じて、ピクセル数(すなわち解像度)及び複雑さの増加及び/または幾何学的な複雑さの増加、及び/または頂点及び/またはプリミティブあたりの処理量の増加をサポートし、動的に(つまり、フレームからフレームへ)スクリーン領域に対するGPUのレスポンシビリティを調整して、ジオメトリ作業とピクセルの両方を最適化する。このように、GPUのレスポンシビリティの動的な分散は、図5A~5B及び6A~6Bに関連して以下でさらに説明されるように、スクリーン領域によって実行される。
図5A~5Bは、純粋に例示を目的として、領域に再分割されたスクリーンのレンダリングを示しており、各領域は固定的な方法でGPUに割り当てられている。つまり、GPUへの領域の割り当ては、画像フレームごとに変わらない。図5Aでは、スクリーンは4つの象限に再分割され、そのそれぞれが異なるGPUに割り当てられる。図5Bでは、スクリーンはより多数のインターリーブされた領域に再分割され、そのそれぞれがGPUに割り当てられる。以下の図5A~5Bの議論は、複数のGPUが割り当てられた複数のスクリーン領域に対してマルチGPUレンダリングを実行するときに生じる非効率性を示すことを意図している。図8は、本発明の実施形態による、より効率的なレンダリングを示す。
具体的には、図5Aは、マルチGPUレンダリングを実行するときに象限(例えば、4つの領域)に再分割されるスクリーン510Aの図である。示されるように、スクリーン510Aは、4つの象限(例えば、A、B、C、及びD)に再分割される。各象限は、一対一の関係で4つのGPU[GPU-A、GPU-B、GPU-C、及びGPU-D]のうちの1つに割り当てられる。つまり、GPUのレスポンシビリティは固定的領域割り当てによって分散され、各GPUは1つまたは複数のスクリーン領域に固定的に割り当てられる。例えば、GPU-Aは象限Aに割り当てられ、GPU-Bは象限Bに割り当てられ、GPU-Cは象限Cに割り当てられ、GPU-Dは象限Dに割り当てられる。
ジオメトリはカリングできる。例えば、CPU163は、各象限の錐台に対して境界ボックスをチェックし、対応する錐台にオーバーラップするオブジェクトのみをレンダリングするように各GPUに要求することができる。その結果、各GPUはジオメトリの一部のみをレンダリングするレスポンシビリティを持つ。例示の目的で、スクリーン510はジオメトリのピースを示し、各ピースは対応するオブジェクトであり、スクリーン510はオブジェクト511~517(例えば、ジオメトリのピース)を示す。ジオメトリのピースは、オブジェクト全体またはオブジェクトの一部(例えば、プリミティブなど)に対応し得ることが理解される。GPU-Aは、象限Aにオーバーラップするオブジェクトがないため、オブジェクトをレンダリングしない。GPU-Bはオブジェクト515と516をレンダリングする(オブジェクト515の一部が象限Bに存在するため、CPUのカリングテストは、GPU-Bがそれをレンダリングする必要があると正確に結論付ける)。GPU-Cはオブジェクト511と512をレンダリングする。GPU-Dは、オブジェクト512、513、514、515、及び517をレンダリングする。
図5Aにおいて、スクリーン510Aが象限A~Dに分割されるとき、状況によっては不均衡な量のジオメトリが1つの象限にある可能性があるため、各GPUが実行しなければならない作業の量は非常に異なる可能性がある。例えば、象限Aにはジオメトリのピースがないが、象限Dにはジオメトリの5つのピース、またはジオメトリの少なくとも5つのピースの少なくとも一部がある。そのため、象限Aに割り当てられたGPU-Aはアイドル状態になるが、象限Dに割り当てられたGPU-Dは、対応する画像内のオブジェクトをレンダリングするときに不均衡にビジーになる。
図5Bは、本開示の一実施形態による、マルチGPUレンダリングを実行するときにスクリーン510Bが複数のインターリーブされた領域に再分割されるように、スクリーンを領域に再分割するときの別の技法を示す。具体的には、スクリーン510Bは、単一の画像または一連の画像内の1つまたは複数の画像のそれぞれのマルチGPUレンダリングを実行するときに、象限に再分割するのではなく、複数の領域に再分割される。例えば、スクリーン510Bは、GPUに対応する領域に再分割され得る。その場合、スクリーン510Bは、レンダリングのために同量のGPU(例えば、4つ)を使用しながら、より多数の領域(例えば、4象限よりも多い)に再分割される。スクリーン510Aに示されるオブジェクト(511~517)は、スクリーン510Bにも同じ対応する位置に示されている。
具体的には、4つのGPU(例えば、GPU-A、GPU-B、GPU-C、及びGPU-D)を使用して、対応するアプリケーション用の画像をレンダリングする。各GPUは、対応する領域にオーバーラップするジオメトリのレンダリングのレスポンシビリティを持つ。つまり、各GPUは対応する領域のセットに割り当てられる。例えば、GPU-Aは対応するセットでAとラベル付けされた各領域のレスポンシビリティを有し、GPU-Bは対応するセットでBとラベル付けされた各領域のレスポンシビリティを有し、GPU-Cは対応するセットでCとラベル付けされた各領域のレスポンシビリティを有し、GPU-Dは、対応するセットでDとラベル付けされた各領域のレスポンシビリティを有する。
さらに、領域は特定のパターンでインターリーブされる。領域のインターリーブ(及びより多くの数)により、各GPUが実行する必要がある作業量は、はるかにバランスが取れたものになり得る。例えば、スクリーン510Bのインターリービングのパターンは、領域A-B-A-Bなど、及び領域C-D-C-Dなどを含む交互の行を含む。領域をインターリーブする他のパターンも、本開示の実施形態でサポートされる。例えば、パターンには、領域の反復シーケンス、均等に分散した領域、領域の不均等な分散、領域のシーケンスの反復行、領域のランダムシーケンス、領域のシーケンスのランダム行などが含まれ得る。
領域の数の選択は重要である。例えば、領域の分散が細かすぎる場合(例えば、領域の数が多すぎて最適ではない場合)、各GPUは相変わらずジオメトリの大部分またはすべてを処理する必要がある。例えば、GPUがレスポンシビリティを有するすべての領域に対してオブジェクトの境界ボックスをチェックするのは難しい場合がある。また、境界ボックスをタイムリーにチェックできたとしても、領域サイズが小さいため、結果として、画像内のすべてのオブジェクトがGPUのそれぞれの少なくとも1つの領域でオーバーラップするので、各GPUがほとんどのジオメトリを処理しなければならない可能性が高くなる(例えば、GPUは、オブジェクトの一部のみがそのGPUに割り当てられた領域のセット内の少なくとも1つの領域とオーバーラップしている場合でも、オブジェクト全体を処理する)。
結果として、領域の数の選択は重要である。選択する領域が少なすぎるか、または多すぎると、GPU処理を実行するときに非効率になる可能性がある(例えば、各GPUがほとんどまたはすべてのジオメトリを処理する)、または不均衡につながる可能性がある(例えば、1つのGPUが別のGPUよりも多くのオブジェクトを処理する)。それらの場合、画像をレンダリングするために複数のGPUがあっても、これらの非効率性のために、スクリーンのピクセル数とジオメトリの密度の両方の対応する増加をサポートする能力がない(つまり、4つのGPUはピクセルの4倍を書き込んで頂点またはプリミティブの4倍を処理することはできない)。したがって、本開示の実施形態では、(「ジオメトリ解析」を介して)情報を生成して、どのオブジェクトまたは複数オブジェクトがスクリーン領域のそれぞれに存在するかを示すことができる。レンダリング中またはレンダリング前にジオメトリ解析を実行することができ、以下でさらに説明するように、結果として得られる情報を使用して、対応する画像フレームをさらにレンダリングするためにスクリーン領域をGPUに動的に割り当てることができる。つまり、スクリーン領域は対応するGPUに固定されるのではなく、対応する画像フレームをレンダリングするためにGPUに動的に割り当てられ得る。
図6A~6Bは、本開示の様々な実施形態における、画像フレームのオブジェクト全体及び/またはオブジェクトの部分のジオメトリレンダリングのために、スクリーン領域をGPUに動的に割り当てるためにジオメトリ解析を実行するために、画像フレーム内のオブジェクトをより小さな部分に分割する利点を示す。具体的には、オブジェクトのマルチGPUレンダリングは、スクリーン内のオブジェクトにジオメトリ解析を実行することにより、単一の画像フレームに対して実行される。情報は「ジオメトリのピース」に対して生成され、ジオメトリのピースは、オブジェクト全体またはオブジェクトの一部であり得る。例えば、ジオメトリのピースは、オブジェクト610またはオブジェクト610の一部であり得る。具体的には、GPUは、ジオメトリと複数のスクリーン領域のそれぞれとの間の関係を決定するために、ジオメトリのピース(例えば、オブジェクト全体及び/またはオブジェクトの一部)に割り当てられる。つまり、連携するGPUは、ジオメトリのピースのそれぞれとスクリーン領域のそれぞれとの間の関係を提供する情報を決定する。情報に対して解析が実行され、対応する画像フレームの後続のレンダリングのためにスクリーン領域がGPUに動的に割り当てられる。ジオメトリ解析とその後のレンダリング、例えばジオメトリのレンダリング中に、オブジェクトがジオメトリレンダリング用の単一のGPUに関連付けられている場合(例えば、オブジェクトを含むすべてのスクリーン領域を単一のGPUに動的に割り当てる)、画像フレームをレンダリングするときに他のGPUは、本開示の一実施形態に従って、そのオブジェクト全体をスキップでき、これは、ジオメトリの効率的な処理をもたらす。さらに、オブジェクトをより小さな部分に分割すると、ジオメトリ解析及び/または対応する画像フレームでのジオメトリのレンダリングを実行する際の効率をさらに高めることができる。
図6Aは、本開示の一実施形態による、複数のGPUが連携して対応する画像フレームをレンダリングするときに、スクリーン領域に対するオブジェクトの関係を決定するための、オブジェクト全体のジオメトリ解析(すなわち、対応するドローコールによって使用される、または生成されるジオメトリの量)を示す。オブジェクト全体がレンダリングされる場合(つまり、ドローコールによって使用または生成されるジオメトリが部分に分割されない場合)、オブジェクトとオーバーラップするスクリーン領域のレンダリングのレスポンシビリティを有する各GPUは、オブジェクト全体をレンダリングする必要がある。具体的には、ジオメトリ解析中に、オブジェクト610は領域620Aとオーバーラップすると判断され得、オブジェクト610はまた領域620Bとオーバーラップすると判断され得る。すなわち、オブジェクト610の部分610Aは領域620Aとオーバーラップし、オブジェクト610の部分610Bは領域620Bとオーバーラップする。続いて、GPU-Aは、スクリーン領域620A内のオブジェクトをレンダリングするレスポンシビリティを割り当てられ、GPU-Bは、スクリーン領域620B内のオブジェクトをレンダリングするレスポンシビリティを割り当てられる。オブジェクトは全体としてレンダリングされるので、GPU-Aは、オブジェクト610を完全にレンダリングする、すなわち、領域620A及び620Bの両方にわたるプリミティブを含む、オブジェクト内のすべてのプリミティブを処理するタスクを与えられる。この特定の例では、GPU-Bもまた、オブジェクト610全体をレンダリングするタスクを与えられる。つまり、対応する画像フレーム内のオブジェクトのジオメトリのレンダリングを実行するときに、GPU-AとGPU-Bによる作業の重複が発生する可能性がある。また、GPU間で分散するオブジェクト(つまり、ドローコール)の数が少ない場合、ジオメトリ解析自体のバランスをとるのが難しい場合がある。
図6Bは、本開示の一実施形態による、複数のGPUが連携して対応する画像フレームをレンダリングするときに、オブジェクトの一部のスクリーン領域に対する関係を決定するためのオブジェクトの一部のジオメトリ解析を示す。示されているように、ドローコールによって使用または生成されたジオメトリは、オブジェクトのこれらの部分を作成するために再分割される。例えば、オブジェクト610は、ドローコールによって使用または生成されたジオメトリがより小さなジオメトリのピースに再分割されるように、ピースに分割されてもよい。その場合、ジオメトリのより小さなピースと各スクリーン領域との間の関係(例えば、オーバーラップ)を決定するために、ジオメトリ解析中にジオメトリのより小さなピースについて情報が生成される。この情報を使用してジオメトリ解析が実行され、GPU間のスクリーン領域ごとにレンダリングのレスポンシビリティが動的に割り当てられ、対応する画像フレームのジオメトリのより小さなピースがレンダリングされる。各GPUは、対応する画像フレームのレンダリングを実行するときに、レスポンシビリティを有するスクリーン領域とオーバーラップするジオメトリのより小さなピースのみをレンダリングする。そのため、各GPUは、対応する画像フレームのジオメトリのピースをレンダリングするためのスクリーン領域のセットに割り当てられる。つまり、画像フレームごとにGPUのレスポンシビリティが一意に割り当てられる。このようにして、ジオメトリ解析及び/または対応する画像フレーム内のオブジェクトのジオメトリのレンダリングを実行するときに、GPU間で作業の重複が少なくなり得るため、対応する画像フレームをレンダリングするときの効率が向上する。
一実施形態では、コマンドバッファ内のドローコールは同じままであるが、レンダリングする間、GPUはジオメトリをピースに分割する。ジオメトリのピースは、位置キャッシュ及び/またはパラメータキャッシュが割り振られるサイズとほぼ同じとしてもよい。各GPUは、GPUが割り当てられたスクリーン領域とオーバーラップするピースのみをレンダリングするように、これらのピースをレンダリングまたはスキップする。
例えば、オブジェクト610は、領域テストに使用されるジオメトリのピースがオブジェクト610のこれらのより小さな部分に対応するように、部分に分割される。示されるように、オブジェクト610は、ジオメトリ「a」、「b」、「c」、「d」、「e」、及び「f」のピースに分割される。ジオメトリ解析の後、GPU-Aは、対応する画像フレームをレンダリングするときにジオメトリ「a」、「b」、「c」、「d」、及び「e」のピースをレンダリングするために、スクリーン領域620Aに動的に割り当てられてもよい。つまり、GPU-Aはジオメトリ「f」のピースをレンダリングするのをスキップできる。また、ジオメトリ解析の後、GPU-Bは、対応する画像フレームをレンダリングするときに、ジオメトリ「d」、「e」、及び「f」のピースをレンダリングするために、スクリーン領域620Bに割り当てられ得る。つまり、GPU-Bは、ジオメトリ「a」、「b」、及び「c」のピースをレンダリングするのをスキップできる。示されるように、オブジェクト610を完全にレンダリングする代わりに、GPU-A及びGPU-Bのそれぞれによってジオメトリ「d」及び「e」のピースのみがレンダリングされるので、GPU-AとGPU-Bとの間の作業の重複は少ない。
レンダリング中にジオメトリ解析を実行することによるジオメトリのマルチGPUレンダリング
図1~3のクラウドゲームネットワーク190(例えば、ゲームサーバ160内)及びGPUリソース365の詳細な説明とともに、図7の流れ図700は、本開示の一実施形態による、レンダリング中にジオメトリ解析を実行することによって、アプリケーションによって生成された画像フレームのジオメトリのマルチGPUレンダリングを実装するときのグラフィック処理の方法を示す。具体的には、多数のGPUが連携して画像フレームを生成する。レンダリングの特定のフェーズに対するレスポンシビリティは、各画像フレームのスクリーン領域に基づいて複数のGPU間で分割される。ジオメトリのレンダリング中に、GPUはジオメトリ及びそのスクリーン領域との関係に関する情報を生成する。この情報は、GPUをスクリーン領域に割り当てるために使用され、より効率的なレンダリングを可能にする。このようにして、複数のGPUリソースを使用して、アプリケーションの実行時に画像フレームのオブジェクトのレンダリングを効率的に実行する。前述のように、様々なアーキテクチャは、クラウドゲームシステムの1つまたは複数のクラウドゲームサーバ内、または、複数のGPUを有するハイエンドグラフィックカードを含むパーソナルコンピュータやゲームコンソールなどのスタンドアロンシステム内などで、レンダリング中に領域テストを介してアプリケーション用のジオメトリのマルチGPUレンダリングを実行することにより、単一の画像をレンダリングするために連携する、複数のGPUを含むことができる。
710において、方法は、複数のGPUを使用してグラフィックをレンダリングすることを含み、特定のフェーズにおいて、レンダリングのレスポンシビリティは、スクリーン領域に基づいて複数のGPUの間で動的に分割される。特に、単一の画像フレーム、及び/またはリアルタイムアプリケーション用の一連の画像フレームの1つまたは複数の画像フレームのそれぞれをレンダリングするときにマルチGPU処理が実行され、各画像フレームは複数のジオメトリのピースを含む。特定のフェーズでは、各GPUがその割り当てられたスクリーン領域でジオメトリのピースをレンダリングするように、GPUレンダリングのレスポンシビリティが各画像フレームの複数のスクリーン領域間で動的に割り当てられる。つまり、各GPUは、対応するレスポンシビリティ(例えば、対応するスクリーン領域)のディビジョンあるいは分割部を有する。
720において、方法は、対応する複数のジオメトリのピースを含む画像フレームをレンダリングするために複数のGPUを連携して使用することを含む。一実施形態では、レンダリング時に、レンダリングのプレパスフェーズが実行される。一実施形態では、このレンダリングのプレパスフェーズは、Zプレパスであり、複数のジオメトリのピースがレンダリングされる。
レンダリングのプレパスフェーズを実行するために、720で、方法は、複数のGPU間でのレンダリングのZプレパスフェーズ中に画像フレームの複数のジオメトリのピースを処理するレスポンシビリティを分割することを含む。すなわち、複数のジオメトリのピースのそれぞれは、Zプレパスを実行するために対応するGPUに割り当てられ、及び/またはGPUのそれぞれには、それがレスポンシビリティを有するスクリーン領域のセットが割り当てられる。こうして、複数のジオメトリのピースは、複数のGPUにおいてZプレパスフェーズでレンダリングされ、1つまたは複数のZバッファを生成する。具体的には、各GPUは、Zプレパスフェーズで対応するジオメトリのピースをレンダリングして、対応するZバッファを生成する。例えば、ジオメトリの対応するピースについて、Zバッファは、投影面上のピクセルからジオメトリのピースまでの距離を測定する対応するz値(例えば、深度値)を含み得る。隠されたジオメトリまたはオブジェクトは、当技術分野で周知のように、Zバッファから削除することができる。
一実施形態では、各GPUは専用のZバッファを有することができる。例えば、第1のGPUは、Zプレパスフェーズでジオメトリの第1のピースをレンダリングして、第1のZバッファを生成する。他のGPUは、Zプレパスフェーズで対応するジオメトリのピースをレンダリングして、対応するZバッファを生成する。一実施形態では、各GPUは、その対応するZバッファ内のそのデータを複数のGPUのそれぞれに送信し、対応するZバッファが更新されて画像フレームのジオメトリをレンダリングするときに使用するためにほぼ同様になるようにする。すなわち、各GPUは、GPUの対応する各Zバッファが同様に更新されるように、すべてのZバッファから受信したデータをマージするように構成される。
730において、方法は、画像フレームの複数のジオメトリのピース及びそれらの複数のスクリーン領域との関係に関する情報を生成することを含む。一実施態様では、情報は、レンダリングのプレパスフェーズ中に生成される。例えば、ジオメトリのピースをレンダリングしている間に情報が第1のGPUで生成され、その情報はジオメトリのピースがどのスクリーン領域にオーバーラップするかを示すことができる。前述のように、ジオメトリのピースは、オブジェクト全体(つまり、個々のドローコールによって使用または生成されたジオメトリ)またはオブジェクトの一部(例えば、個々のプリミティブ、プリミティブのグループなど)であり得る。さらに、情報は、対応するスクリーン領域内のジオメトリのピースの存在を含むことができる。情報は、対応するスクリーン領域内のジオメトリのピースの存在に関する控えめな概算を含むことができる。情報は、ジオメトリのピースがスクリーン領域でカバーするピクセル面積または概算ピクセル面積(例えば、カバレッジ)を含むことができる。情報は、スクリーン領域に書き込まれたピクセルの数を含むことができる。情報は、レンダリングのZプレパスフェーズ中にスクリーン領域ごとのジオメトリのピースごとにZバッファに書き込まれたピクセルの数を含むことができる。
740において、方法は、複数のGPUへのスクリーン領域のその後の割り当てにおいてこの情報を使用することを含む。具体的には、各GPUは、ジオメトリパスである可能性があるレンダリングの後続のフェーズ中に画像フレームをレンダリングするために、情報に基づいて、対応するスクリーン領域に割り当てられる。このようにして、GPUへのスクリーン領域の割り当ては、画像フレームごとに変化することができ、つまり、動的であり得る。
図8は、本開示の一実施形態による、現在の画像フレームのレンダリング中に実行される現在の画像フレームのジオメトリの解析に基づくジオメトリレンダリング(すなわち、MRTへのジオメトリのピースのレンダリング)のためのGPUへのスクリーン領域の動的割り当てを示すスクリーン800の図である。図示のように、スクリーン800は領域に再分割することができ、各領域は説明のためにほぼ等しいサイズである。他の実施形態において、領域のそれぞれは、様々なサイズ及び形状とすることができる。例えば、領域810は、スクリーン800の等しい再分割を表す。
スクリーン800に示されるオブジェクト及びオブジェクトの位置は、図5Aのスクリーン510A及び図5Bのスクリーン510Bに示されるオブジェクト及びそれらの位置と同一である。例えば、オブジェクト511~517はスクリーン800に示される。図5Aは、ジオメトリレンダリングのためにGPUに固定的に割り当てられる象限へのスクリーン510Aの分割を示す。図5Bは、ジオメトリレンダリングのためにGPUに固定的方式で割り当てられる領域へのスクリーン510Bの分割を示す。図8は、オブジェクト511~517を含む現在の画像フレームのGPUへのスクリーン領域の動的割り当てを示す。割り当ては、画像フレームごとに実行される。すなわち、次の画像フレームでは、オブジェクト511~517は異なる位置にある可能性があり、したがって、次の画像フレームのスクリーン領域の割り当ては、現在の画像フレームの割り当てとは異なる可能性がある。例えば、GPU-Aはスクリーン領域のセット832に割り当てられ、オブジェクト511及び512をレンダリングする。また、GPU-Bはスクリーン領域のセット834に割り当てられ、オブジェクト513、515、及び517をレンダリングする。GPU-Cはスクリーン領域のセット836に割り当てられ、オブジェクト512、513、514、及び517をレンダリングする。そして、GPU-Dはスクリーン領域のセット838に割り当てられ、オブジェクト515及び516をレンダリングする。オブジェクトがさらに部分に分割されると、より小さな部分ほどGPU領域間のオーバーラップが少なくなるため、レンダリングの重複がより少なくなる可能性がある。つまり、対応するコマンドバッファ内のドローコールは同じままであるが、レンダリング中にGPUは、ジオメトリを、潜在的にほぼ位置及び/またはパラメータキャッシュが割り振られるサイズであるピースなどのピース(例えば、オブジェクトの部分)に分割し、それらがジオメトリレンダリング用にそのGPUに割り当てられたスクリーン領域とオーバーラップするかどうかに応じて、それらのピースをレンダリングまたはスキップする。
一実施形態では、スクリーン領域のGPUへの割り当ては、ジオメトリをレンダリングするときに各GPUによってほぼ等しい量のピクセル作業が実行されるように処理され得る。オブジェクトに関連付けられたピクセルシェーダは複雑さが異なる場合があるため、対応するオブジェクトによってカバーされるスクリーン面積の量が必ずしも等しいとは限らない。例えば、GPU-Dは4つの領域のレンダリングのレスポンシビリティを有し、GPU-Aは6つの領域のレンダリングのレスポンシビリティを有するが、それらの対応するピクセル及び/またはレンダリング作業はほぼ等しいものであり得る。つまり、オブジェクトごとにレンダリングコストが異なり、ピクセル、プリミティブ、または頂点あたりのコストがオブジェクトごとに高くなる、または低くなる可能性がある。このピクセル、プリミティブ、または頂点などごとのコストは、各GPUで利用できるようにして、情報の生成に使用することができるか、または情報として含めることができる。あるいは、スクリーン領域を割り当てるときにコストを使用することもできる。
一実施形態では、クロスハッチ領域830はジオメトリを含まず、GPUのいずれか1つに割り当てられる可能性がある。別の実施形態では、クロスハッチ領域830は、GPUのいずれにも割り当てられない。いずれの場合も、領域830に対してジオメトリレンダリングは実行されない。
別の実施形態では、オブジェクトに関連付けられたすべての領域が単一のGPUに割り当てられる。このようにして、他のすべてのGPUは、ジオメトリレンダリングを実行するときにオブジェクトを完全にスキップできる。
図9A~9Cは、4つのオブジェクトを示す画像フレームのレンダリングについてより詳細な説明を提供する図であり、画像フレームのレンダリングは、レンダリングのZプレパスフェーズ及びジオメトリフェーズを含む。前述のように、Zプレパスフェーズは、本開示の実施形態に従って、画像フレームのジオメトリレンダリングのためにGPUにスクリーン領域を動的に割り当てるために使用される情報を生成するために実行される。説明の目的で、図9A~9Cは、一連の画像フレームのそれぞれをレンダリングするための複数のGPUの使用を示す。図9A~9Cに示される例に対する4つのGPUの選択は、純粋にマルチGPUレンダリングを説明するために作成されたものであり、様々な実施形態において、マルチGPUレンダリングのために任意の数のGPUを使用できることが理解される。
具体的には、図9Aは、画像フレーム内に含まれる4つのオブジェクトを示すスクリーン900Aを示す。例えば、画像フレームはオブジェクト0、オブジェクト1、オブジェクト2、及びオブジェクト3を含む。示されるように、スクリーン900Aは複数の領域に分割される。例えば、スクリーン900Aは、4つを超える領域に分割されてもよく、その各々は、現在の画像フレームをレンダリングするための対応するGPUに割り当てられる。
一実施形態では、対応する画像フレームをレンダリングするために、単一のコマンドバッファが複数のGPUによって使用される。共通レンダリングコマンドバッファには、レンダリングのZプレパスフェーズを実行するための各オブジェクトのドローコールと状態設定が含まれ得る。すべてのGPUがレンダリングのジオメトリパスフェーズを同時に開始するように、コマンドバッファ内にシンク(例えば、同期)操作を含めることができる。コマンドバッファには、レンダリングのジオメトリパスフェーズを実行するための各オブジェクトのドローコールと状態セットが含まれ得る。
一実施形態では、共通レンダリングコマンドバッファは、コマンドが1つのGPUによって実行されるが別のGPUによって実行されない機能をサポートする。すなわち、共通レンダリングコマンドバッファのフォーマットは、複数のGPUの1つまたはサブセットによってコマンドが実行されることを可能にする。例えば、前述のように、レンダリングコマンドバッファ内の描画コマンドまたは述語のフラグにより、単一のGPUが、他のGPUからの干渉を受けることなく、対応するコマンドバッファ内の1つまたは複数のコマンドを実行できる。
図9Bは、本開示の一実施形態による、1つまたは複数のZバッファと、特定の画像フレームのジオメトリのピース及び描画されたスクリーンのスクリーン領域及び/またはサブ領域のそれぞれに関連する情報とを生成するために実行される、レンダリングのZプレパスフェーズを示す。図9BのレンダリングのZプレパスフェーズにおいて、複数のGPUが連携してレンダリングのフレーム用の1つまたは複数のZバッファを生成できる1つの戦略が示されている。1つまたは複数のZバッファを生成するために、他の戦略を実装することができる。
示されているように、マルチGPUアーキテクチャの各GPUにはジオメトリの一部が割り振られる。説明のために、GPU-Aはオブジェクト0に割り当てられ、GPU-Bはオブジェクト1に割り当てられ、GPU-Cはオブジェクト2に割り当てられ、GPU-Dはオブジェクト3に割り当てられている。各GPUは対応するオブジェクトをZプレパスフェーズでレンダリングし、対応するオブジェクトをZバッファのその独自のコピーにレンダリングする。例えば、Zプレパスフェーズでは、GPU-Aはオブジェクト0をそのZバッファにレンダリングする。スクリーン921は、GPU-Aによって決定され、その対応するZバッファに格納されるオブジェクト0のピクセルカバレッジを示している。また、GPU-Bは、GPU-Bによって決定され、対応するZバッファに格納されたオブジェクト1のピクセルカバレッジをスクリーン922が示すように、オブジェクト1をそのZバッファにレンダリングする。加えて、GPU-Cは、GPU-Cによって決定され、対応するZバッファに格納されたオブジェクト2のピクセルカバレッジをスクリーン923が示すように、オブジェクト2をそのZバッファにレンダリングする。さらに、GPU-Dは、GPU-Dによって決定され、対応するZバッファに格納されたオブジェクト3のピクセルカバレッジをスクリーン924が示すように、オブジェクト3をそのZバッファにレンダリングする。
その後、GPUに対応する4つのZバッファコピーがマージされる。つまり、各GPUは、その独自のRAM(ランダムアクセスメモリ)に対応するZバッファのコピーを有する。一実施形態では、1つまたは複数のZバッファを構築する戦略は、各GPUにその完成したZバッファを他のGPUに送信させることを含む。このように、Zバッファのそれぞれは、サイズとフォーマットが類似している必要がある。具体的には、Zバッファのそれぞれのデータは、Zバッファのそれぞれをマージ及び更新するためにすべてのGPUに送信され、これは、4つのオブジェクト1~4のそれぞれのピクセルカバレッジを示すスクリーン925によって示され、GPUの更新されたZバッファのそれぞれに格納される。オブジェクトは、図9Bでは空白であり、これは、Zのみが書き込まれており、他の値(例えば、色)がスクリーンのピクセルのそれぞれについて計算されていないことを表す。
別の実施形態では、マージ時間が短縮される。データが他のGPUに送信される前に、対応するGPUによって各Zバッファが完全に完了するのを待つ代わりに、各GPUが対応するジオメトリのピースをそのZバッファに書き込むときに、対応するGPUは更新されたスクリーン領域のZバッファデータを他のGPUに送信する。すなわち、第1のGPUがジオメトリを対応するZバッファまたは他のレンダーターゲットにレンダリングすると、第1のGPUはZバッファからのデータまたは更新されたスクリーン領域を含む他のレンダーターゲットデータを他のGPUに送信する。送信前に、対応するGPUの各Zバッファが完全に書き込まれるのを待たないことで、Zバッファのマージに必要な時間の一部が取り除かれ、それによりマージ時間が短縮される。
別の実施形態では、Zバッファを構築するための別の戦略は、複数のGPU間で共通のZバッファまたは共通のレンダーターゲットを共有することを含む。例えば、Zバッファリングを実行するために使用されるハードウェアは、各GPUによって共有及び更新される共通のZバッファまたは共通のレンダーターゲットが存在するように構成され得る。つまり、各GPUは、レンダリングのZプレパスフェーズで1つまたは複数の対応するジオメトリのピースをレンダリングしながら、共通のZバッファを更新する。4つのGPUアーキテクチャの例では、第1のGPUは、それぞれが複数のGPUによって共有される共通のZバッファまたは共通のレンダーターゲットを更新することによって、対応するZバッファまたは他のレンダーターゲットにジオメトリをレンダリングする。共通のZバッファまたは共通のレンダーターゲットを使用すると、マージステップが不要になる。一実施形態では、スクリーン領域がGPUに割り振られ、共通のZバッファにアクセスするときの調停の必要性を簡素化する。
前述のように、Zバッファのレンダリング中に情報が生成される。一実施形態では、図4のラスタ化ステージ420の一部として実行するスキャンコンバータが情報を生成する。例えば、スキャンコンバータは、ジオメトリのピースとスクリーン領域のそれぞれとのオーバーラップ面積を計算することができる。様々な実施形態では、オーバーラップは、ジオメトリのピースの各プリミティブと各スクリーン領域との間など、ピクセル単位で測定することができる。さらに、スキャンコンバータは、領域ごとに測定されたように、オーバーラップの面積を合計して、ジオメトリのピースごとに(例えば、ピクセルごとに)オーバーラップの総面積を作成することができる。
ジオメトリパスの開始前に、この情報を使用してスクリーン領域をGPUに割り当てることができる。すなわち、複数のGPUのうちの1つまたは複数をスクリーン領域に割り当てることができる。一実施形態では、割り当ては、各GPUのレンダリングレスポンシビリティ(例えばレンダリングジオメトリ)がほぼ等しくなるように行われる。このように、レンダリングの1つのフェーズ(Zプレパスフェーズ)で生成された情報は、レンダリングのジオメトリパスフェーズに対してスクリーン領域をGPUに割り当てるなど、レンダリングの別のフェーズで使用される。
前述のように、オブジェクトは他のオブジェクトとは異なるレンダリングコストを有し得る。つまり、1つのオブジェクトのピクセル、またはプリミティブ、または頂点あたりのコストは、他のオブジェクトより高いことも低いこともある。いくつかの実施形態では、ピクセル/プリミティブ/頂点当たりのコストがGPUで利用可能であり、情報の生成に使用され、及び/または情報の中に含まれている。別の実施形態では、ピクセル/プリミティブ/頂点当たりのコストは、スクリーン領域をGPUに割り当てるときに使用され、これにより、生成される情報は、ピクセル、プリミティブ、または頂点ごとの対応するジオメトリのピースの概算レンダリングコストを考慮に入れる。すなわち、複数のコストが、レンダリングのジオメトリフェーズ中に画像フレームの複数のジオメトリのピースをレンダリングするために決定される。ジオメトリレンダリングのためにスクリーン領域をGPUに割り当てるとき、コストが考慮される。例えば、複数のGPUへのスクリーン領域のその後の割り当てでは、GPUをレンダリングのコストがGPU間で必要に応じて(均等または不均等に)分割される方法でスクリーン領域に割り当てることができるように、ピクセル、プリミティブ、または頂点ごとのジオメトリのピースの概算のレンダリングコストを考慮に入れる。
図9Cは、本開示の一実施形態による、特定の画像フレームのジオメトリのピースをレンダリングするために実行されるレンダリングのジオメトリパスフェーズを示す。ジオメトリパスフェーズでは、各GPUは、特定の画像フレームのオブジェクトを、それがレスポンシビリティを有するスクリーン領域にレンダリングする(例えば、スクリーン領域へのGPUの以前の割り当てに基づいて)。具体的には、各GPUはすべてのオブジェクトをレンダリングするが、これらのオブジェクトとジオメトリレンダリングのためにGPUに割り当てられたスクリーン領域との間にオーバーラップがないことが(情報に基づいて)わかっているオブジェクトは除く。そのため、ジオメトリのピースが特定のGPUに割り当てられたスクリーン領域にオーバーラップしない場合、そのGPUはそのジオメトリのピースのレンダリングをスキップできる。
示されているように、マルチGPUアーキテクチャの各GPUは、スクリーンの一部に割り当てまたは割り振られる。説明のために、GPU-Aは931Aとラベル付けされた1つの領域に割り当てられ、(図9Aで紹介されたように)オブジェクト0をレンダリングする(ここでは、色データなどの他の値が書き込まれていることを表すために薄暗くされている)。スクリーン931は、ジオメトリレンダリング後のオブジェクト0のレンダーターゲットデータ(例えばピクセル)を示している。また、GPU-Bは932Aとラベル付けされた2つの領域に割り当てられ、オブジェクト1及びオブジェクト2の部分(薄暗くされたそれらのオブジェクトのそれぞれの部分)をレンダリングする。スクリーン932は、ジオメトリレンダリング後のオブジェクト1及び2のそれぞれの部分のレンダーターゲットデータ(例えばピクセル)を示す。さらに、GPU-Cは933Aとラベル付けされた2つの領域に割り当てられ、オブジェクト2の部分(薄暗くされたそれぞれの部分)をレンダリングする。スクリーン933は、ジオメトリレンダリング後のオブジェクト2のそれぞれの部分のレンダーターゲットデータ(例えばピクセル)を示す。また、GPU-Dは934Aとラベル付けされた3つの領域に割り当てられ、オブジェクト3をレンダリングする(ここでは、色データなどの他の値が書き込まれていることを表すために薄暗くされている)。スクリーン934は、ジオメトリレンダリング後のオブジェクト3のレンダーターゲットデータ(例えばピクセル)を示している。
ジオメトリのレンダリング後、各GPUによって生成されたレンダーターゲットデータをマージする必要があり得る。例えば、各GPUのレンダリングのジオメトリパスフェーズ中に生成されたジオメトリデータのマージが実行され、これは、4つのオブジェクト0~3すべてのレンダーターゲットデータ(例えば、ピクセル)を含むスクリーン935によって示される。
一実施形態では、スクリーン領域のGPUへの割り当ては、フレームごとに変化する。つまり、各GPUは、2つの連続する画像フレームの割り当てを比較するときに、異なるスクリーン領域のレスポンシビリティを有する場合がある。別の実施形態では、GPUへのスクリーン領域の割り当ても、単一のフレームをレンダリングする際に使用される様々なフェーズを通じて変化し得る。すなわち、スクリーン領域の割り当ては、ジオメトリ解析フェーズ(例えば、Zプレパス)またはジオメトリパスフェーズなどのレンダリングフェーズ中に動的に変化する場合がある。
例えば、ジオメトリフェーズの割り当てが行われるとき、この割り当てはそのため既存の割り当てと異なる場合がある。つまり、以前はGPU-Bがレスポンシビリティをもっていたスクリーン領域を今はGPU-Aがレスポンシビリティをもつ可能性がある。これにより、GPU-BのメモリからGPU AのメモリへのZバッファまたはその他のレンダーターゲットデータの転送が必要になる場合がある。一例として、情報は、スクリーン領域に書き込むコマンドバッファ内の第1のオブジェクトを含み得る。この情報を使用して、あるGPUから別のGPUにスクリーン領域のZバッファデータまたはその他のレンダーターゲットデータを転送するなど、DMA(ダイレクトメモリアクセス)転送をスケジュールすることができる。上記の例に従って、GPU-Bのメモリからのデータ(例えば、Zバッファまたはレンダーターゲットデータ)は、GPU-Aのメモリに転送され得る。場合によっては、画像フレームのレンダリング時に最初のスクリーン使用が発生するのが遅いほど、DMA転送の時間が長くなる。
別の実施形態では、GPU間のZバッファまたは他のレンダーターゲットデータのすべての更新が完了すると、情報は、スクリーン領域に書き込むコマンドバッファ内の最後のオブジェクトを含み得る。その情報を使用して、レンダリングGPU(レンダリングのZプレパスフェーズ中に実行)から他のGPUへのDMA転送をスケジュールすることができる。つまり、この情報は、あるGPUから別のGPU(例えば、レンダリングGPU)へのスクリーン領域のZバッファまたはその他のレンダーターゲットデータの転送をスケジュールするために使用される。
さらに別の実施形態では、GPU間のZバッファまたは他のレンダーターゲットデータのすべての更新が完了すると、更新されたデータをGPUにブロードキャストすることができる。その場合、更新されたデータは、GPUのいずれかがそのデータを必要とする場合に利用できる。別の実施形態では、受信GPUがレンダリングの後続のフェーズでスクリーン領域のレスポンシビリティを有することを見越すなどして、データが特定のGPUに送信される。
図10は、本開示の一実施形態による、ジオメトリレンダリングのために、オブジェクト全体またはオブジェクトの一部に基づいたスクリーン領域のGPUへの動的割り当てを使用した画像フレームのレンダリングを示しており、割り当ては、画像フレームをレンダリングしている間に実行されるレンダリングのZプレパスフェーズ中に実行された現在の画像フレームのジオメトリの解析に基づく。具体的には、レンダリングタイミング図1000Aは、オブジェクト全体(すなわち、個々のドローコールによって使用または生成されたジオメトリ)に基づく画像フレームのレンダリングを示している。対照的に、レンダリングタイミング図1000Bは、オブジェクトの部分に基づく画像フレームのレンダリングを示す。オブジェクトの部分に基づいて画像フレームをレンダリングするときに示される利点には、GPU間のレンダリングパフォーマンスのバランスが向上し、したがって画像フレームのレンダリング時間が短縮されることが含まれる。
具体的には、レンダリングタイミング図1000Aは、4つのGPU(例えば、GPU-A、GPU-B、GPU-C、及びGPU-D)による4つのオブジェクト0~3のそれぞれのレンダリングを示し、レンダリングのレスポンシビリティはオブジェクトの粒度でGPU間に分散される。オブジェクト0~3は、図9A~9Cで以前に紹介されたものである。レンダリングの様々なフェーズが、タイムライン1090に関連して示されている。垂直線1001Aは、Zプレパスのレンダリングの開始を示す。レンダリングタイミング図1000Aは、レンダリングのZプレパスフェーズ1010Aを含み、GPU間のZバッファデータのマージを示すフェーズ1020Aも示す。GPUのアイドル時間は、ハッシュアウトされた面積を使用して示され、マージフェーズ1020Aは、このアイドル時間中に発生する可能性がある。シンクポイント1030Aは、各GPUがそれぞれのジオメトリパスレンダリングフェーズを同時に開始するように提供される。また、レンダリングタイミング図1000Aは、前述のように、画像フレームのジオメトリをレンダリングするためのレンダリングのジオメトリパスフェーズ1040Aを含む。シンクポイント1050Aは、各GPUが同時に次の画像フレームのレンダリングを開始するように提供される。シンクポイント1050Aはまた、対応する画像フレームのレンダリングの終了を示し得る。オブジェクト全体をレンダリングするときの画像フレームのレンダリングの合計時間は、期間1070で示される。各GPUのスクリーン領域レスポンシビリティを決定するための情報の処理は、図には示されていないが、ジオメトリパス1030Aの開始前に完了すると推定され得る。
示されるように、ジオメトリパスフェーズ1040A中のレンダリングタイミング図1000Aのハッシュされた面積は、GPUアイドル時間を示す。例えば、GPU-Aは、GPU-Aがレンダリングに費やす時間とほぼ同じ時間アイドル状態になる。一方、GPU-Bはアイドル状態になる時間がほとんどなく、GPU-Cがアイドル状態になる時間はない。
対照的に、レンダリングタイミング図1000Bは、4つのGPU(例えば、GPU-A、GPU-B、GPU-C、及びGPU-D)による4つのオブジェクト0~3のそれぞれのレンダリングを示し、レンダリングのレスポンシビリティはGPU間で、オブジェクト全体ではなく、図6Bに示されるジオメトリのピースなどのオブジェクトの部分の粒度で分散される。例えば、オブジェクト全体ではなくジオメトリのピース(例えば、オブジェクトの部分)について情報(例えば、スクリーン領域とのオーバーラップ)が生成される。このようにして、ドローコールによって使用または生成される画像フレームのジオメトリ(例えば、オブジェクト全体)は、ジオメトリのより小さなピースに再分割され、生成される情報は、これらのジオメトリのピースに関するものである。いくつかの場合では、ジオメトリのピースを再分割できる程度には制限がある。
レンダリングの様々なフェーズが、タイムライン1090に関連して示されている。垂直線1001Bは、Zプレパスのレンダリングの開始を示す。レンダリングタイミング図1000Bは、レンダリングのZプレパスフェーズ1010Bを含み、GPU間でZバッファデータのマージが実行されるハッシュアウトされた期間1020Bも示す。レンダリングタイミング図1000BのGPUアイドル時間1020Bは、レンダリングタイミング図1000Aのアイドル時間1020Aより短い。示されているように、各GPUはほぼ同じ時間をZプレパスフェーズの処理に費やしており、アイドル時間はほとんどまたはまったくない。シンクポイント1030Bは、各GPUがそれぞれのジオメトリパスレンダリングフェーズを同時に開始するように提供される。また、レンダリングタイミング図1000Bは、前述のように、画像フレームのジオメトリをレンダリングするためのレンダリングのジオメトリパスフェーズ1040Bを含む。シンクポイント1050Bは、各GPUが同時に次の画像フレームのレンダリングを開始するように提供される。シンクポイント1050Bはまた、対応する画像フレームのレンダリングの終了を示し得る。示されているように、各GPUはほぼ同じ時間をジオメトリパスフェーズの処理に費やしており、アイドル時間はほとんどまたはまったくない。つまり、Zプレパスレンダリングとジオメトリレンダリングは、それぞれGPU間でほぼバランスが取れている。また、オブジェクト全体の部分によってレンダリングするときの画像フレームのレンダリングの合計時間は、期間1075で示される。各GPUのスクリーン領域レスポンシビリティを決定するための情報の処理は、図には示されていないが、ジオメトリパス1030Bの開始前に完了すると推定され得る。
示されるように、レンダリングタイミング図1000Bは、オブジェクト全体ではなくオブジェクトの部分の粒度でレンダリングレスポンシビリティがGPU間で分散されるときの短縮されたレンダリング時間を示す。例えば、オブジェクトの部分の粒度で画像フレームをレンダリングするときの時間の節約1077が示される。
加えて、本開示の一実施形態によれば、この情報により、レンダリングフェーズの要件及び/または依存関係を緩和でき、これにより、別のGPUがレンダリングの現在のフェーズをまだ処理している間に、GPUがレンダリングの後続のフェーズに進む結果となる。例えば、任意のGPUがジオメトリフェーズ1040Aまたは1040Bを開始する前に、すべてのGPUについてZプレパスフェーズ1020Aまたは1020Bが完了しなければならない、という1つの要件は緩和され得る。示されるように、レンダリングタイミング図1000Aは、ジオメトリフェーズ1040Aを開始する前に、すべてのGPUのシンクポイント1020Aを含む。しかしながら、この情報は、(例えば)GPU Aが、他のGPUが対応するレンダリングのZプレパスフェーズを完了する前に、その割り当てられた領域のレンダリングを開始できることを示し得る。これにより、画像フレームのレンダリング時間が全体的に短縮される場合がある。
図11は、本開示の一実施形態による、画像フレームのジオメトリレンダリングのためのGPUへのスクリーン領域の動的な割当てに使用される情報を生成するために、レンダリングのZプレパスフェーズを実行するために、画像フレームのジオメトリのピースへのGPU割り当てをインターリーブすることを示す図である。即ち、図11は、Zプレパスに対する複数のGPU間のレンダリングレスポンシビリティの分散を示す。前述のように、各GPUは画像フレームのジオメトリの対応する部分に割り当てられ、その部分はさらにオブジェクト、オブジェクトの部分、ジオメトリ、ジオメトリのピースなどに分割され得る。
図11に示すように、オブジェクト0、1、及び2は、個々のドローコールによって使用または生成されたジオメトリを表す。一実施形態では、GPUは、前述のように、各オブジェクトを、位置キャッシュ及び/またはパラメータキャッシュが割り振られるおおよそのサイズのピースなど、ジオメトリのより小さなピースに分割する。純粋に説明のために、オブジェクト0は、図6Bのオブジェクト610のように、ピース「a」、「b」、「c」、「d」、「e」および「f」に分割される。また、オブジェクト1は、ピース「g」、「h」、及び「i」に分割される。さらに、オブジェクト2はピース「j」、「k」、「l」、「m」、「n」、及び「o」に分割される。ピースは、レンダリングのZプレパスフェーズを実行するレスポンシビリティを分散するために(例えば、a~oに)順序付けることができる。
分散1110(例えば、ABCDABCDABCD…行)は、複数のGPU間でジオメトリテストを実行するレスポンシビリティの均等な分散を示している。具体的には、1つのGPUにジオメトリの最初の4分の1を取らせ(例えば、ブロックで、GPU-Aが約16個の合計ピースのうちの「a」、「b」、「c」及び「d」を含む最初の4つのピースをテストのために取る)、2番目のGPUに2番目の4分の1を取らせる、などではなく、GPUへの割り当てはインターリーブされる。つまり、レンダリングのZプレパスフェーズを実行するために、連続するジオメトリのピースが異なるGPUに割り当てられる。例えば、ピース「a」はGPU-Aに割り当てられ、ピース「b」はGPU-Bに割り当てられ、ピース「c」はGPU-Cに割り当てられ、ピース「d」はGPU-Dに割り当てられ、ピース「e」はGPU-Aに割り当てられ、ピース「f」はGPU-Bに割り当てられ、ピース「g」はGPU-Cに割り当てられる。結果として、(GPU-Aがジオメトリのピースの最初の4分の1を取得した場合などのように)処理するジオメトリのピースの合計数を知る必要は無く、レンダリングのZプレパスフェーズの処理はGPU(例えば、GPU-A、GPU-B、GPU-C、及びGPU-D)間でほぼバランスが取れている。
他の実施形態では、1つのフレーム(例えば前の画像フレーム)のレンダリング中に生成された情報を使用して、後続のフレーム(例えば現在の画像フレーム)のスクリーン領域にGPUを割り当てることができる。例えば、ハードウェアは、前の画像フレームのレンダリングのジオメトリパスフェーズ中のGPUの使用状況など、前の画像フレームのレンダリングのジオメトリパスフェーズ中に情報を生成するように構成できる。具体的には、この情報には、スクリーン領域ごとのジオメトリのピースごとにシェーディングされる実際のピクセルの数が含まれ得る。この情報は、レンダリングのジオメトリパスのスクリーン領域にGPUを割り振るときに、後続のフレーム(例えば、現在の画像フレームのレンダリング)で使用できる。つまり、現在の画像フレームのレンダリングのジオメトリパスフェーズを実行するためのGPUへのスクリーン領域の割り当てでは、前述のとおり、前の画像フレームから生成された情報と、現在の画像フレーム(もしあれば)のZプレパスフェーズで生成された情報の両方が考慮される。そのため、スクリーン領域は、前の画像フレームからの情報(例えば、GPUの使用状況)と、現在の画像フレームのレンダリングのZプレパスフェーズ中に生成された情報(存在する場合)に基づいて、GPUに割り当てられる。
前のフレームからのこの情報は、前述のオーバーラップ面積を使用するだけ(例えば、現在の画像フレームの情報を生成する場合)、またはZプレパス中にスクリーン領域ごとのジオメトリのピースごとにZバッファに書き込まれたピクセルの数を使用するだけよりも、精度を高めることができる。例えば、オブジェクトのZバッファに書き込まれるピクセルの数は、他のオブジェクトによるオブジェクトの閉塞に起因してジオメトリパスでシェーディングする必要があるピクセルの数に対応しない場合がある。前の画像フレームからの情報(例えば、GPUの使用状況)と、現在の画像フレームのレンダリングのZプレパスフェーズ中に生成された情報の両方を使用すると、現在の画像フレームのレンダリングのジオメトリパスフェーズ中にレンダリングがより効率的になり得る。
情報はまた、対応するスクリーン領域にオーバーラップするジオメトリの対応する部分(例えば、ジオメトリのピース)によって使用される頂点の数を与える、各スクリーン領域の頂点数を含むことができる。そのため、後で対応するジオメトリのピースをレンダリングするときに、レンダリングGPUは頂点数を使用して、位置キャッシュとパラメータキャッシュにスペースを割り振ることができる。例えば、一実施形態では、必要とされない頂点には割り振られたスペースがなく、これによりレンダリングの効率を高めることができる。
さらに別の実施形態では、レンダリングのZプレパスフェーズ中に情報を生成することに関連する処理オーバーヘッド(ソフトウェアまたはハードウェアのいずれか)が存在する場合がある。その場合、ジオメトリの特定のピースについての情報の生成をスキップすることが有益であり得る。つまり、特定のオブジェクトについて情報が生成されて、他のオブジェクトについては生成されなくてもよい。例えば、大きなプリミティブを有し、多数のスクリーン領域にオーバーラップする可能性が高いジオメトリのピース(例えば、オブジェクトまたはオブジェクトの部分)については、情報が生成されなくてもよい。大きなプリミティブを有するオブジェクトは、スカイボックスである場合や、例えば大きな三角形を含む大きな地形のピースである場合がある。その場合、画像フレームのマルチGPUレンダリングに使用される各GPUは、それらのジオメトリのピースをレンダリングする必要がある可能性が高く、そのことを示す情報は不要である。このように、情報は、対応するジオメトリのピースの特性に応じて、生成されても生成されなくてもよい。
レンダリング前のジオメトリ解析実行によるジオメトリの効率的なマルチGPUレンダリングのためのシステム及び方法
図1~3のクラウドゲームネットワーク190(例えば、ゲームサーバ160内)及びGPUリソース365の詳細な説明とともに、図12Aの流れ図1200Aは、本開示の一実施形態による、レンダリング前にジオメトリ解析を実行することによるアプリケーション用のジオメトリのマルチGPUレンダリングを含む、グラフィック処理の方法を示す。即ち、図7、9、及び10に関連して説明したようにレンダリング中に情報を生成する代わりに、情報は、プレパス(すなわち、ZバッファまたはMRTに書き込まないパス)中など、レンダリングの前に生成される。レンダリング中の情報の生成(例えば、レンダリングのZプレパスフェーズ)に関して説明された様々な実施形態の様々な特徴及び利点の1つまたは複数は、レンダリング前の情報の生成(例えば、ジオメトリ解析を実行するプレパス)にも等しく適用可能であり、説明の重複を最小限に抑えるために、ここでは繰り返さない場合があることが理解される。前述のように、様々なアーキテクチャは、クラウドゲームシステムの1つまたは複数のクラウドゲームサーバ内、または、複数のGPUを有するハイエンドグラフィックカードを含むパーソナルコンピュータやゲームコンソールなどのスタンドアロンシステム内などで、レンダリング中に領域テストを介してアプリケーション用のジオメトリのマルチGPUレンダリングを実行することにより、単一の画像をレンダリングするために連携する、複数のGPUを含むことができる。
具体的には、各GPUがその割り当てられたスクリーン領域でオブジェクトをレンダリングするように、GPUレンダリングのレスポンシビリティが各画像フレームの複数のスクリーン領域間で動的に割り当てられる。解析は、ジオメトリレンダリングの前に(例えば、プリミティブシェーダまたは計算シェーダで)実行され、画像フレーム内のジオメトリの空間分散を決定し、スクリーン領域に対するGPUのレスポンシビリティを動的に調整して、その画像フレーム内のオブジェクトをレンダリングする。
1210において、この方法は、複数のグラフィック処理ユニット(GPU)を使用してアプリケーション用のグラフィックをレンダリングすることを含む。具体的には、多数のGPUが連携して画像フレームを生成する。具体的には、単一の画像フレーム及び/またはリアルタイムアプリケーション用の一連の画像フレームの1つまたは複数の画像フレームのそれぞれをレンダリングするときにマルチGPU処理が実行される。レンダリングのレスポンシビリティは、以下でさらに説明するように、各画像フレームのスクリーン領域に基づいて複数のGPU間で分割される。
1220において、方法は、複数のGPU間での解析プレパス中に画像フレームの複数のジオメトリのピースを処理するレスポンシビリティを分割することを含み、複数のジオメトリのピースのそれぞれが、対応するGPUに割り当てられる。解析プレパスは、画像フレームのレンダリングのフェーズの前に実行される。
解析プレパスでは、オブジェクトは複数のGPU間に分散される。例えば、4つのGPUを有するマルチGPUアーキテクチャでは、各GPUは解析プレパス中にオブジェクトの約4分の1を処理する。前述のように、一実施形態では、オブジェクトをジオメトリのより小さなピースに再分割することには利点があり得る。加えて、他の実施形態では、オブジェクトは、画像フレームごとにGPUに動的に割り当てられる。解析プレパスのためにGPUにジオメトリのピースを動的に割り当てると、処理効率が向上し得る。
解析プレパスはレンダリングフェーズの前に実行されるため、処理は通常、ハードウェアでは実行されない。すなわち、解析プレパスは、様々な実施形態でシェーダを使用するなどして、ソフトウェアで実行することができる。例えば、プリミティブシェーダは、対応するピクセルシェーダがないように、解析プレパス中に使用されてもよい。加えて、Zバッファ及び/または他のレンダーターゲットは、解析プレパス中に書き込まれない。他の実施形態では、計算シェーダが使用される。
1230において、方法は、複数のスクリーン領域のそれぞれとの、複数のジオメトリのピースのそれぞれのプレパスフェーズオーバーラップを解析において決定することを含む。前述のように、ジオメトリのピースは、オブジェクトまたはオブジェクトの部分(例えば、個々のプリミティブ、プリミティブのグループなど)であり得る。一実施形態では、生成された情報は、複数のスクリーン領域のそれぞれとの、複数のジオメトリのピースのそれぞれのオーバーラップの正確な表示を含む。一実施形態では、情報は、複数のスクリーン領域のそれぞれとの、複数のジオメトリのピースのそれぞれのオーバーラップの概算を含む。
1240において、方法は、複数のスクリーン領域のそれぞれとの、複数のジオメトリのピースのそれぞれのオーバーラップに基づいて、複数のジオメトリのピース及び複数のスクリーン領域に対するそれらの関係に関する情報を生成することを含む。情報は、単にオーバーラップがあるということであってもよい。情報は、ジオメトリのピースがスクリーン領域でオーバーラップするかまたはカバーするピクセル面積または概算ピクセル面積を含むことができる。情報は、スクリーン領域に書き込まれたピクセルの数を含むことができる。情報は、スクリーン領域にオーバーラップする頂点またはプリミティブの数、またはその概算値を含むことができる。
1250において、方法は、レンダリングのジオメトリパスフェーズ中に複数のジオメトリのピースをレンダリングするために、情報に基づいて複数のスクリーン領域を複数のGPUに動的に割り当てることを含む。すなわち、情報は、その後の複数のGPUへのスクリーン領域の割り当てに使用することができる。例えば、各GPUは、情報に基づいて対応するスクリーン領域に割り当てられる。このようにして、各GPUは、画像フレームのレンダリングのための対応するレスポンシビリティ(例えば、対応するスクリーン領域)のディビジョンを有する。そのため、GPUへのスクリーン領域の割り当ては、画像フレームごとに異なる場合がある。
さらに、方法は、ジオメトリパスフェーズ中に、複数のGPUに複数のスクリーン領域を割り当てることから決定されたGPUからスクリーン領域への割り当てに基づいて、複数のGPUのそれぞれで複数のジオメトリのピースをレンダリングすることを含む。
図12Bは、本開示の一実施形態による、画像フレームをレンダリングする前に(例えば、レンダリングのジオメトリパスフェーズ中に)実行される解析プレパスを示す、レンダリングタイミング図1200Bである。解析プレパスは、ジオメトリのピースとスクリーン領域の間の関係の解析専用である。解析プレパスは、画像フレームのジオメトリレンダリングのために、スクリーン領域をGPUに動的に割り当てるために使用される情報を生成する。具体的には、レンダリングタイミング図1200Bは、複数のGPUを使用して画像フレームを連携してレンダリングすることを示している。レンダリングのレスポンシビリティは、スクリーン領域に基づいて複数のGPU間で分割される。前述のように、画像フレームのジオメトリをレンダリングする前に、GPUはジオメトリとそのスクリーン領域との関係に関する情報を生成する。この情報は、GPUをスクリーン領域に割り当てるために使用され、より効率的なレンダリングを可能にする。例えば、レンダリングの前に、第1のGPUがジオメトリのピースとそのスクリーン領域との関係に関する情報を生成し、この情報は、そのジオメトリのピースをレンダリングする1つまたは複数の「レンダリングGPU」にスクリーン領域を割り当てる際に使用される。
具体的には、レンダリングタイミング図1200Bは、タイムライン1290を参照して、4つのGPU(例えば、GPU-A、GPU-B、GPU-C、及びGPU-D)による1つまたは複数のオブジェクトのレンダリングを示す。前述のように、4つのGPUの使用は、マルチGPUアーキテクチャに1つまたは複数のGPUを含めることができるように、単に説明を目的としたものである。垂直線1201は、画像フレームの一連のレンダリングフェーズの開始を示す。垂直線1201は、解析プレパス1210の開始も示す。解析プレパスでは、オブジェクトは複数のGPUの間で分散される。4つのGPUを用いて、各GPUがオブジェクトの約4分の1を処理する。シンクポイント1230Aは、各GPUがそれぞれのジオメトリパスレンダリングフェーズ1220を同時に開始するように提供される。すなわち、一実施形態では、シンク操作1230aは、すべてのGPUによるジオメトリパスの同時開始を保証する。別の実施形態では、前に説明したように、シンク操作1230aは使用されず、レンダリングのジオメトリパスフェーズが、解析プレパスを終了する任意のGPUに対して、他のすべてのGPUが対応する解析プレパスを終了するのを待たずに開始され得る。
シンクポイント1230bは、現在の画像フレームのレンダリングのジオメトリパスフェーズの終了を示し、また、各GPUが現在のフレームのレンダリングの後続フェーズを同時に続行できるように、または次の画像フレームのレンダリングを同時に開始できるように提供される。
一実施形態では、対応する画像フレームをレンダリングするために、単一のコマンドバッファが複数のGPUによって使用される。レンダリングコマンドバッファには、解析プレパスを実行するために、状態を設定するコマンドと、プリミティブシェーダまたはコンピュータシェーダを実行するコマンドとを含めることができる。GPUによる様々な操作の開始を同期するために、シンク操作をコマンドバッファ内に含めることができる。例えば、シンク操作を使用して、GPUによるレンダリングのジオメトリパスフェーズの開始を同期することができる。そのため、コマンドバッファには、レンダリングのジオメトリパスフェーズを実行するための各オブジェクトのドローコールと状態設定が含まれ得る。
一実施形態では、情報の生成は、専用の1つまたは複数の命令を使用することによって加速される。つまり、情報を生成するシェーダは、1つまたは複数の専用命令を使用して、ジオメトリのピースとそのスクリーン領域との関係に関する情報の生成を加速する。
一実施形態では、命令は、ジオメトリのピースのプリミティブとスクリーン領域のそれぞれとの間の正確なオーバーラップを計算することができる。例えば、図13Aは、本開示の一実施形態による、画像フレームのジオメトリレンダリングのためのGPUへのスクリーン領域の動的割り当てに使用される情報を生成するために、解析プレパスフェーズを実行するときの、プリミティブ1350と1つまたは複数のスクリーン領域の間の正確なオーバーラップの計算を示す図1310である。例えば、プリミティブ1350は、3つの異なる領域をオーバーラップするように示され、プリミティブ1350のそれぞれの部分のオーバーラップは、領域のそれぞれについて正確に決定される。
他の実施形態では、命令実施態様の複雑さを低減するために、この命令はオーバーラップ面積の概算を実行することができ、情報は、プリミティブが1つまたは複数のスクリーン領域とオーバーラップする概算面積を含む。具体的には、命令は、ジオメトリのピースのプリミティブと1つまたは複数のスクリーン領域との間の概算のオーバーラップを計算することができる。例えば、図13Bは、本開示の一実施形態による、画像フレームのジオメトリレンダリングのためのGPUへのスクリーン領域の動的割り当てに使用される情報を生成するために、解析プレパスフェーズを実行するときの、ジオメトリのピースと複数のスクリーン領域の間の概算のオーバーラップの計算を示す一対の図である。
図13Bの左側の図に示すように、命令はプリミティブの境界ボックスを使用することができる。こうして、プリミティブ1350の境界ボックスと1つまたは複数のスクリーン領域とのオーバーラップが決定される。境界1320Aは、境界ボックスの解析を通じて決定されたジオメトリ1350のピースの概算のオーバーラップを示す。
図13Bの右側の図において、命令は、プリミティブに対してスクリーン領域をチェックし、ジオメトリのピースがオーバーラップしないスクリーン領域が除外され、各スクリーン領域とオーバーラップするプリミティブの部分に対して境界ボックスが生成される。境界1320Bは、境界ボックスの解析及びオーバーラップフィルタリングによって決定されるプリミティブ1350の概算のオーバーラップを示す。図13Bの右側の図の境界ボックス1320Bは、図13Bの左側の図の境界ボックス1320Aよりも小さいことに留意されたい。
さらに他の実施形態では、命令の複雑さをさらに低減するために、命令は、ジオメトリのピースがスクリーン領域に存在するかどうかなどの存在情報を生成することができる。例えば、存在情報は、ジオメトリのピースのプリミティブがスクリーン領域とオーバーラップするかどうかを示すことができる。情報は、対応するスクリーン領域内のジオメトリのピースの概算の存在を含むことができる。
別の実施形態では、シェーダは、位置キャッシュまたはパラメータキャッシュにスペースを割り当てない。つまり、シェーダは位置またはパラメータキャッシュの割り振りを実行せず、それにより解析プレパスを実行するときに高度な並列処理が可能になる。これはまた、解析プレパスに必要な時間の対応する削減にもつながる。
別の実施形態では、解析プレパスで実行される解析、またはジオメトリパスでのレンダリングのいずれかを実行するために、単一のシェーダが使用される。例えば、情報を生成するシェーダは、ジオメトリのピースとそのスクリーン領域との関係に関する情報を出力するように、または後のレンダリングステージで使用することによって頂点位置とパラメータ情報を出力するように構成可能であってもよい。これは、シェーダがチェックできる外部ハードウェア状態(例えば、ハードウェアレジスタの設定)を介して、またはシェーダへの入力を介してなど、様々な方法で実現できる。その結果、シェーダは2つの異なる機能を実行して、対応する画像フレームをレンダリングする。
前述のように、レンダリングのジオメトリパスフェーズを開始する前に、この情報を使用して領域をGPUに割り当てる。前のフレームのレンダリング中に生成された情報(例えば、ジオメトリのピースをレンダリングする間にシェーディングされた実際のピクセル数)は、スクリーン領域をGPUに割り当てるために使用することもできる。前のフレームからの情報には、例えば、スクリーン領域ごとのジオメトリのピースごとにシェーディングされる実際のピクセルの数が含まれ得る。つまり、スクリーン領域は、前の画像フレームから生成された情報(例えば、GPUの使用状況)と解析プレパス中に生成された情報に基づいてGPUに割り当てられる。
ジオメトリの再分割によるジオメトリの効率的なマルチGPUレンダリングのシステム及び方法
図1~3のクラウドゲームネットワーク190(例えば、ゲームサーバ160内)及びGPUリソース365の詳細な説明と共に、図14Bのライン1110は、ジオメトリを再分割することによるアプリケーションのマルチGPUレンダリングを含むグラフィック処理のための方法を示す。オブジェクト0、1、及び2は、個々のドローコールによって使用または生成されたジオメトリを表す。オブジェクト全体(つまり、ドローコール)をGPU-A、GPU-B、GPU-C、及びGPU-Dに分散するのではなく、代わりに、GPUは各オブジェクトを、位置及び/またはパラメータキャッシュが割り当てられるおおよそのサイズのピースなど、ジオメトリのより小さなピースに分割する。純粋に説明のために、オブジェクト0は、図6Bのオブジェクト610のように、ピース「a」、「b」、「c」、「d」、「e」及び「f」に分割される。また、オブジェクト1は、ピース「g」、「h」、及び「i」に分割される。さらに、オブジェクト2はピース「j」、「k」、「l」、「m」、「n」、及び「o」に分割される。分散1110(例えば、ABCDABCDABCD…行)は、複数のGPU間でのレンダリング(またはレンダリングのフェーズ)のレスポンシビリティの均等な分散を示している。この分散はオブジェクト全体(つまり、ドローコール)よりも粒度が細かいため、GPU間のレンダリング時間の不均衡が減少し、レンダリングの合計時間(またはレンダリングのフェーズの時間)が減少する。図14Aの流れ図1400Aと図14Bのライン1410は、レンダリングフェーズ中にGPUのレスポンシビリティの割り当てを再分散するために、レンダリングフェーズ中にタイミング解析を実行することによる、アプリケーションのためのジオメトリのマルチGPUレンダリングを含むグラフィック処理のための方法を示す。図7~13のレンダリング及びレンダリングのジオメトリパスフェーズの前及びその最中の情報の生成に関して説明された様々な実施形態の様々な特徴及び利点の1つまたは複数が、ジオメトリを再分割する、及び/またはタイミング解析を実行するときの使用に等しく適用でき、説明の重複を最小限に抑えるために、ここでは繰り返さない場合がある、ということが理解される。前述のように、様々なアーキテクチャは、クラウドゲームシステムの1つまたは複数のクラウドゲームサーバ内、または、複数のGPUを有するハイエンドグラフィックカードを含むパーソナルコンピュータやゲームコンソールなどのスタンドアロンシステム内などで、レンダリング中に領域テストを介してアプリケーションのジオメトリのマルチGPUレンダリングを実行することにより、単一の画像をレンダリングするために連携する、複数のGPUを含むことができる。
いくつかの実施形態では、図7~13に関して前に説明したように、各GPUがその割り当てられたスクリーン領域でオブジェクトをレンダリングするように、GPUレンダリングのレスポンシビリティが各画像フレームの複数のスクリーン領域間で固定的または動的に割り当てられる。他の実施形態では、各GPUは、それ自体のZバッファまたは他のレンダーターゲットにレンダリングする。レンダリングのフェーズの1つまたは複数(例えば、ジオメトリプレパス解析、Zプレパス、またはジオメトリレンダリング)でタイミング解析が実行され、その目的は、これらのフェーズでGPUのレスポンシビリティの割り当てを再分散するためである。つまり、レンダリングフェーズ中にGPUのレスポンシビリティの割り当てを再分散するために、レンダリングフェーズ中にタイミング解析が実行され、それは例えば、一実施態様では、画像フレームのジオメトリレンダリングのためにジオメトリのピースに対してZプレパスフェーズを実行して、GPUへのスクリーン領域の動的割り当てに使用される情報を生成するときなどである。例えば、最初に1つのGPUに割り当てられたスクリーン領域が、レンダリングのフェーズ中に別のGPUに再割り当てされる場合がある(例えば、あるGPUがそのフェーズ中に他のGPUに遅れている可能性がある)。
1410において、方法は、複数のグラフィック処理ユニット(GPU)を使用してアプリケーション用のグラフィックをレンダリングすることを含む。具体的には、単一の画像フレーム及び/またはリアルタイムアプリケーション用の一連の画像フレームの1つまたは複数の画像フレームのそれぞれをレンダリングするときにマルチGPU処理が実行される。すなわち、複数のGPUは連携して、複数のジオメトリのピースを含む対応する画像フレームをレンダリングする。
1420において、方法は、複数のスクリーン領域に基づいて、複数のGPU間でグラフィックのジオメトリのレンダリングに対するレスポンシビリティを分割することを含む。つまり、各GPUは、対応するレスポンシビリティのディビジョン(対応するスクリーン領域のセット)を有する。
ジオメトリのレンダリングまたはジオメトリの解析の実行中、レンダリングまたは解析にかかる時間は、オブジェクトに関するレスポンシビリティのディビジョンを調整するために使用される。特に、1430において、方法は、画像フレームのレンダリングまたは解析のフェーズ中に、第1のGPUが、第2のGPUなど、少なくとも1つの他のGPUに遅れていると判断することを含む。1440において、方法は、第1のGPUが第2のGPUより少なく割り当てられるようにジオメトリを動的に割り当てることを含む。
例えば、ジオメトリの動的な割り当ては、説明の目的で、Zバッファの生成中に実行することができる。ジオメトリの動的割り当ては、解析プレパス及び/またはレンダリングのジオメトリパスフェーズ中に実行され得る。Zバッファの生成及びZプレパス解析中にジオメトリを動的に割り当てる場合、1つまたは複数のZバッファが複数のGPUによって生成される、及び/またはレンダリングのZプレパスフェーズ中に画像フレームに対して連携してマージされる。具体的には、ジオメトリのピースは、レンダリングのZプレパスフェーズを処理するためにGPU間で分割され、複数のジオメトリのピースのそれぞれは、対応するGPUに割り当てられる。対応する画像フレームのレンダリングを最適化するのに使用される情報を生成するために、Zプレパスフェーズ中にハードウェアを使用する代わりに、ハードウェアは、解析プレパスを実行して、例えば、後続のジオメトリパスのレンダリング速度を最適化するために使用される情報を生成するように構成することができる。
具体的には、オブジェクトは、図6Bで前に説明したように、より小さなピースに再分割することができる。レンダリングのZプレパスフェーズにおけるジオメトリのピースのレンダリングのレスポンシビリティは、図14Bの分散1110に関して前述したように、インターリーブ方式でGPU間に分散され、図14Bは、レンダリングのZプレパスフェーズを実行して、画像フレームのジオメトリレンダリングのためにスクリーン領域をGPUに動的に割り当てるために使用される情報を生成するためのGPU割り当ての様々な分散を示す。分散1110は、Zプレパスに対する複数のGPU間のレンダリングレスポンシビリティの分散を示している。前述のように、各GPUは画像フレームのジオメトリの対応する部分に割り当てられ、その部分はさらにジオメトリのピースに分割され得る。分散1110に示すように、ジオメトリの連続するピースが異なるGPUに割り当てられるため、結果として、Zプレパス中のレンダリング時間はほぼバランスがとれる。
分散1410に示すように、ジオメトリのピースをレンダリングするレスポンシビリティを動的に調整することで、GPU間のレンダリング時間のさらなるバランスを実現できる。これは、レンダリングのZプレパスフェーズを実行するときのGPUへのジオメトリのピースの分散であり、レンダリングのそのフェーズ中に動的に調整される。例えば、分散1410[ABCDABCDBCDBBCD行]は、複数のGPU間でZプレパスフェーズを実行するレスポンシビリティの非対称分散を示している。例えば、特定のGPUに、他のGPUに割り当てられたものよりも大きいジオメトリのピースが割り当てられていることにより他のGPUに比べてZプレパスが遅れている場合、非対称分散が有利になり得る。
分散1410に示すように、GPU-Aは、Zプレパスフェーズ中にジオメトリのピースをレンダリングするためにより多くの時間を費やしているため、ジオメトリのピースをGPUに割り当てるときにスキップされる。例えば、Zプレパスレンダリング中にオブジェクト1のジオメトリ「i」のピースをGPU-Aに処理させる代わりに、GPU-BがZプレパスフェーズ中にジオメトリのピースをレンダリングするように割り当てられる。そのため、GPU-Bには、レンダリングのZプレパスフェーズ中にGPU-Aよりも多くのジオメトリのピースが割り当てられる。具体的には、レンダリングのZプレパスフェーズ中に、ジオメトリのピースが第1のGPUから割り当て解除され、第2のGPUに割り当てられる。さらに、GPU-Bは他のGPUよりも進んでいるため、Zプレパスフェーズ中により多くのジオメトリを処理できる。すなわち、分散1410は、Zプレパスレンダリングのための連続するジオメトリのピースへのGPU-Bの繰り返し割り当てを示す。例えば、GPU-Bは、Zプレパスフェーズ中にオブジェクト2のジオメトリのピース「l」と「m」を処理するために割り当てられる。
上記はジオメトリの「動的割り当て」の観点から提示されているが、これを「割り当て」と「再割り当て」の観点から見ることも等しく有効である。例えば、分散1410に示すように、GPU-Aは、Zプレパスフェーズ中にジオメトリのピースをレンダリングするのにより多くの時間を費やしているため、再割り当てされる。例えば、Zプレパスレンダリング中にオブジェクト1のジオメトリ「i」のピースをGPU-Aに処理させる代わりに、GPU-BがZプレパスフェーズ中にジオメトリのピースをレンダリングするように割り当てられ、GPU-Aは、ジオメトリのピースをレンダリングするために最初に割り当てられていてもよい。さらに、GPU-Bは他のGPUよりも進んでいるため、Zプレパスフェーズ中により多くのジオメトリを処理できる。すなわち、分散1410は、Zプレパスレンダリングのための連続するジオメトリのピースへのGPU-Bの繰り返し割り当てかまたは再割り当てを示す。例えば、GPU-Bは、Zプレパスフェーズ中にオブジェクト2のジオメトリのピース「l」と「m」を処理するために割り当てられる。つまり、オブジェクト2のジオメトリのピース「l」をレンダリングするために、そのジオメトリのピースが最初にGPU-Aに割り当てられていた可能性があっても、GPU-Bが割り当てられる。そのため、第1のGPUに初めに割り当てられたジオメトリのピースは、レンダリングのZプレパスフェーズ中に第2のGPU(レンダリングが進んでいる可能性がある)に再割り当てされる。
GPUへのZプレパスフェーズ中のジオメトリのピースの割り当てはバランスが取れていない可能性があるが、GPUによって実行されるZプレパスフェーズ中の処理は、ほぼバランスが取れていることが判明する場合がある(例えば、各GPUはレンダリングのZプレパスフェーズを実行するためにほぼ同じ時間を費やす)。
別の実施形態では、ジオメトリの動的割り当ては、画像フレームのレンダリングのジオメトリパスフェーズ中に実行することができる。例えば、スクリーン領域は、Zプレパスまたは解析プレパス中に生成された情報に基づいて、レンダリングのジオメトリパスフェーズ中にGPUに割り当てられる。あるGPUに割り当てられたスクリーン領域は、レンダリングフェーズ中に別のGPUに再割り当てされる場合がある。これにより、効率が向上する可能性があり、これは他のGPUよりも進んでいるGPUには追加のスクリーン領域が割り振られる可能性があり、他のGPUよりも遅れているGPUは追加のスクリーン領域が割り振られるのを回避できるからである。特に、連携する複数のGPUは、レンダリングのZプレパスフェーズ中に画像フレームのZバッファを生成する。情報は、このZプレパス中に、画像フレームのジオメトリのピースとそれらの複数のスクリーン領域との関係について生成される。スクリーン領域は、レンダリングのジオメトリパスフェーズ中に画像フレームをレンダリングするために、情報に基づいてGPUに割り当てられる。GPUは、GPUからスクリーン領域への割り当てに基づくレンダリングのジオメトリパスフェーズ中に、ジオメトリのピースをレンダリングする。タイミング解析は、レンダリングのジオメトリパスフェーズ中に実行され、その結果、初めに第1のGPUに割り当てられたジオメトリの第1のピースが、ジオメトリパスフェーズ中にレンダリングするために第2のGPUに再割り当てされ得る。例えば、一実施形態では、レンダリングのジオメトリパスフェーズの処理において、第1のGPUが遅れている可能性がある。別の実施形態では、レンダリングのジオメトリパスフェーズの処理において、第2のGPUが進んでいる可能性がある。
図15A~15Bは、様々なスクリーン領域割り振り戦略を示しており、これは、図7~14に関して前に説明した画像フレームのレンダリングに適用できる。
具体的には、図15Aは、本開示の一実施形態による、特定のスクリーン領域においてジオメトリ(例えば、オブジェクト0~3に関連するジオメトリ)のピースをレンダリングするために複数のGPUの使用することを示す図である。すなわち、スクリーン領域1510は、レンダリングするために複数のGPUに割り当てられ得る。例えば、これにより、レンダリングフェーズの後半で非常に密集したジオメトリがある場合などに、効率が向上する可能性がある。スクリーン領域1510を複数のGPUに割り当てるには、通常、スクリーン領域を再分割する必要があるため、各GPUがスクリーン領域の一部分または部分のレスポンシビリティを有することができる。
図15Bは、本開示の一実施形態による、ジオメトリのピースをそれらの対応するドローコールとは順不同でレンダリングすることを示す図である。特に、ジオメトリのピースのレンダリング順序は、対応するコマンドバッファ内の対応するドローコールの順序と一致しない場合がある。この例に示すように、オブジェクト0は、レンダリングコマンドバッファ内でオブジェクト1よりも優先される。しかしながら、オブジェクト0と1は、スクリーン領域C内などで交差する。その場合、領域Cではレンダリングの厳密な順序を守る必要があり得る。つまり、オブジェクト0は領域Cにおいてオブジェクト1の前にレンダリングする必要がある。
一方、領域Aと領域Bのオブジェクトは、交差がないため、任意の順序でレンダリングできる。つまり、領域A及び/または領域Bをレンダリングするときに、オブジェクト1がオブジェクト0に先行する場合もあれば、その逆の場合もある。
さらに別の実施形態では、レンダリングコマンドバッファを複数回トラバーサルできる場合、第1のトラバーサルで特定のスクリーン領域(例えば、高コスト領域)をレンダリングし、第2またはそれ以降のトラバーサルで残りの領域(例えば、低コスト領域)をレンダリングすることが可能である。結果として得られるジオメトリのピースのレンダリング順序は、第1のオブジェクトが第2のトラバーサルでレンダリングされる場合などは、対応するドローコールの順序と一致しない場合がある。GPU間の負荷バランシングは、高コスト領域よりも低コスト領域の方が簡単であるため、この戦略により、対応する画像フレームをレンダリングする際の効率が向上する。
図16は、本開示の様々な実施形態の態様を実行するために使用することができる例示的なデバイス1600のコンポーネントを示す。例えば、図16は、本開示の実施形態による、レンダリング中にジオメトリ解析を実行して、画像フレームのジオメトリレンダリングのためにスクリーン領域をGPUに動的に割り当てることによる、及び/または、レンダリングの前にジオメトリ解析を実行して、画像フレームのジオメトリレンダリングのためにスクリーン領域をGPUに動的に割り当てることによる、及び/または、ジオメトリのピースを再分割し、結果として得られるジオメトリのより小さな部分を複数のGPUに割り当てることによる、アプリケーションのためのジオメトリのマルチGPUレンダリングに適した例示的なハードウェアシステムを示す。このブロック図は、パーソナルコンピュータ、サーバコンピュータ、ゲームコンソール、モバイルデバイス、または他のデジタルデバイスを組み込むことができる、またはそれらであってもよく、それらの各々が本発明の実施形態を実践するのに適している、デバイス1600を示している。デバイス1600は、ソフトウェアアプリケーション及び任意選択でオペレーティングシステムを実行するための、中央処理装置(CPU)1602を含む。CPU1602は、1つまたは複数の同種または異種の処理コアから構成されてもよい。
様々な実施形態によれば、CPU1602は、1つまたは複数の処理コアを有する1つ以上の汎用マイクロプロセッサである。さらなる実施形態は、ゲーム実行中のグラフィック処理のために構成されたアプリケーションの、メディア及びインタラクティブエンターテインメントアプリケーションなどの、きわめて並列かつ計算集約的なアプリケーションに特に適合されたマイクロプロセッサアーキテクチャを有する1つまたは複数のCPUを使用し、実装することができる。
メモリ1604は、CPU1602とGPU1616とが使用するアプリケーション及びデータを記憶する。ストレージ1606は、アプリケーション及びデータ用の不揮発性ストレージ及び他のコンピュータ可読媒体を提供し、かつ、固定ディスクドライブ、取り外し可能ディスクドライブ、フラッシュメモリデバイス、及びCD-ROM、DVD-ROM、Blu-ray(登録商標)、HD-DVD、または他の光学記憶デバイス、ならびに信号伝送及び記憶媒体を含み得る。ユーザ入力デバイス1608は、1人または複数のユーザからのユーザ入力をデバイス1600に伝達するものであり、その例としては、キーボード、マウス、ジョイスティック、タッチパッド、タッチスクリーン、スチルまたはビデオレコーダ/カメラ、及び/またはマイクロフォンがあり得る。ネットワークインタフェース1609は、デバイス1600が電子通信ネットワークを介して他のコンピュータシステムと通信することを可能にし、ローカルエリアネットワーク、及びインターネットなどのワイドエリアネットワークにわたる有線または無線通信を含み得る。オーディオプロセッサ1612は、CPU1602、メモリ1604、及び/またはストレージ1606によって提供される命令及び/またはデータから、アナログまたはデジタルのオーディオ出力を生成するように適合されている。CPU1602、GPU1616を含むグラフィックサブシステム、メモリ1604、データストレージ1606、ユーザ入力デバイス1608、ネットワークインタフェース1609、及びオーディオプロセッサ1612を含むデバイス1600のコンポーネントは、1つまたは複数のデータバス1622を介して接続されている。
グラフィックサブシステム1614はさらに、データバス1622及びデバイス1600のコンポーネントと接続される。グラフィックサブシステム1614は、少なくとも1つのグラフィック処理ユニット(GPU)1616及びグラフィックメモリ1618を含む。グラフィックメモリ1618は、出力画像の各ピクセルのピクセルデータを格納するために使用される表示メモリ(例えばフレームバッファ)を含む。グラフィックメモリ1618は、GPU1616と同一のデバイスに統合されてもよく、GPU1616と別個のデバイスとして接続されてもよく、及び/またはメモリ1604内に実装されてもよい。ピクセルデータは、CPU1602から直接グラフィックメモリ1618に提供することができる。あるいは、CPU1602は、所望の出力画像を定義するデータ及び/または命令をGPU1616に提供し、GPU1616は、そこから、1つまたは複数の出力画像のピクセルデータを生成する。所望の出力画像を定義するデータ及び/または命令は、メモリ1604及び/またはグラフィックメモリ1618に記憶することができる。一実施形態では、GPU1616は、シーンのジオメトリ、ライティング、陰影、質感、モーション、及び/またはカメラのパラメータを定義する命令及びデータから、出力画像のピクセルデータを生成する3Dレンダリング機能を含む。GPU1616はさらに、シェーダプログラムを実行することができる1つまたは複数のプログラム可能実行ユニットを含み得る。
グラフィックサブシステム1614は、グラフィックメモリ1618から画像のピクセルデータを定期的に出力して、ディスプレイデバイス1610に表示させる、または投影システム(図示せず)により投影させる。ディスプレイデバイス1610は、CRT、LCD、プラズマ、及びOLEDディスプレイを含む、デバイス1600からの信号に応答して、視覚情報を表示することが可能な任意のデバイスであってもよい。デバイス1600は、ディスプレイデバイス1610に、例えば、アナログ信号またはデジタル信号を提供することができる。
グラフィックサブシステム1614を最適化するための他の実施形態は、画像フレームのオブジェクトをレンダリングする前に、インターリーブされたスクリーン領域に対してジオメトリを事前テストすることによる、アプリケーションのジオメトリのマルチGPUレンダリングを含むことができる。グラフィックサブシステム1614は、1つまたは複数の処理デバイスとして構成することができる。
例えば、グラフィックサブシステム1614は、一実施形態では、レンダリング中の領域テストによってアプリケーションのジオメトリのマルチGPUレンダリングを実行するように構成され得、複数のグラフィックサブシステムが、単一のゲームのためのグラフィック及び/またはレンダリングパイプラインを実装し得る。すなわち、グラフィックサブシステム1614は、アプリケーションを実行するときに、画像、または一連の画像の1つまたは複数の画像のそれぞれをレンダリングするために使用される複数のGPUを含む。
他の実施形態では、グラフィックサブシステム1614は、対応するCPU上で実行している単一のアプリケーションのグラフィック処理を実行するために組み合わされる複数のGPUデバイスを含む。例えば、複数のGPUは、画像のオブジェクトのレンダリングの間に、領域テストにより、アプリケーションのジオメトリのマルチGPUレンダリングを実行できる。他の例では、複数のGPUが、フレームレンダリングの代替形式を実行でき、この場合、連続したフレーム期間で、GPU1は第1のフレームをレンダリングし、GPU2は第2のフレームをレンダリングするなどして、最後のGPUに到達すると、最初のGPUが次のビデオフレームをレンダリングする(例えば、GPUが2つしかない場合、GPU1は第3のフレームをレンダリングする)。つまり、フレームをレンダリングするときにGPUが循環する。レンダリング操作はオーバーラップする可能性があり、それにおいて、GPU1が最初のフレームのレンダリングを終了する前にGPU2が2番目のフレームのレンダリングを開始できる。別の実施態様では、複数のGPUデバイスに、レンダリング及び/またはグラフィックパイプラインで異なるシェーダ操作を割り当てることができる。マスターGPUがメインのレンダリングと合成を実行している。例えば、3つのGPUを含むグループでは、マスターGPU1がメインレンダリング(例えば、第1のシェーダ操作)及び、スレーブGPU2とスレーブGPU3からの出力の合成を実行でき、スレーブGPU2は第2のシェーダ(例えば、川などの流体効果)操作を実行でき、スレーブGPU3は第3のシェーダ(例えば、粒子の煙)操作を実行でき、マスターGPU1は、GPU1、GPU2、及びGPU3のそれぞれからの結果を合成する。このようにして、様々なGPUを割り当てて、様々なシェーダ操作(旗振り、風、煙の発生、炎など)を実行してビデオフレームをレンダリングできる。さらに別の実施形態では、3つのGPUのそれぞれを、ビデオフレームに対応するシーンの異なるオブジェクト及び/または部分に割り当てることができる。上記の実施形態及び実施態様では、これらの操作は、同じフレーム周期で(同時に並行して)、または異なるフレーム周期で(順次並列に)実行することができる。
したがって、本開示は、レンダリング中にジオメトリ解析を実行して、画像フレームのジオメトリレンダリングのためにスクリーン領域をGPUに動的に割り当てることによる、及び/または、レンダリングの前にジオメトリ解析を実行して、画像フレームのジオメトリレンダリングのためにスクリーン領域をGPUに動的に割り当てることによる、及び/または、ジオメトリのピースを再分割し、結果として得られるジオメトリのより小さな部分を複数のGPUに割り当てることによる、アプリケーションのためのジオメトリのマルチGPUレンダリングのために構成された方法及びシステムを説明する。
本明細書で定義される様々な実施形態は、本明細書で開示される様々な特徴を使用する特定の実施態様に組み合わされ得る、または組み立てられ得ることを、理解されたい。従って、提供される例は、可能な例の一部にすぎず、様々な要素を組み合わせることでより多くの実施態様を規定することが可能な様々な実施態様に制限を加えるものではない。ある例では、ある実施態様は、開示されたまたは同等の実施態様の趣旨から逸脱することなく、より少ない要素を含んでもよい。
本開示の実施形態は、ハンドヘルドデバイス、マイクロプロセッサシステム、マイクロプロセッサベースもしくはプログラム可能な消費者向け電気製品、ミニコンピュータ、及びメインフレームコンピュータなどを含む様々なコンピュータシステム構成で実施されてよい。本開示の実施形態はまた、有線ベースネットワークまたは無線ネットワークを介してリンクされる遠隔処理デバイスによりタスクが行われる分散コンピューティング環境においても、実施することができる。
上記の実施形態を念頭に置いて、本開示の実施形態がコンピュータシステムに格納されたデータを含む様々なコンピュータ実装の動作を使用し得ることを理解されたい。これらの動作は、物理量の物理的操作を必要とする動作である。本開示の実施形態の一部を形成する、本明細書で説明される動作のうちのいずれも、有用な機械動作である。開示の実施形態はまた、これら動作を実行するためのデバイスまたは装置に関する。装置は、必要な目的のために特別に構築することができる。または、装置は、コンピュータに記憶されたコンピュータプログラムにより選択的に起動または構成される汎用コンピュータであってもよい。具体的には、本明細書の教示に従って書かれたコンピュータプログラムとともに様々な汎用マシンを使用することができる、あるいは、必要な動作を実行するためにさらに特化した装置を構築するほうがより好都合である場合もある。
本開示はまた、コンピュータ可読媒体上のコンピュータ可読コードとしても具現化することができる。コンピュータ可読媒体は、後でコンピュータシステムにより読み出され得るデータを格納できる任意のデータストレージデバイスである。コンピュータ可読媒体の例は、ハードドライブ、ネットクワーク接続ストレージ(NAS)、読み出し専用メモリ、ランダムアクセスメモリ、CD-ROM、CD-R、CD-RW、磁気テープ、並びに他の光学及び非光学データストレージデバイスを含む。コンピュータ可読媒体には、コンピュータ可読コードが分散方式で記憶され実行されるように、ネットワーク接続されたコンピュータシステムにわたり分散されたコンピュータ可読有形媒体が含まれ得る。
方法動作は特定の順序で説明されたが、オーバーレイ動作の処理が所望の方法で実行される限り、動作間に他の維持管理動作が実行されてもよく、または動作がわずかに異なる時間に起こるように調整されてもよく、またはシステム内に動作を分散することで、処理に関連する様々な間隔で処理動作が起こることを可能にしてもよいことを、理解すべきである。
前述の開示は、理解を明確にするためにある程度詳細に説明されたが、添付の特許請求の範囲内で特定の変更及び修正を実施できることは明らかであろう。したがって、本実施形態は、限定ではなく例示としてみなされるべきであり、本開示の実施形態は、本明細書に提供される詳細に限定されるものではなく、添付の特許請求の範囲内及び均等物内で変更されてよい。