(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-11-14
(45)【発行日】2024-11-22
(54)【発明の名称】フレキシブルマルチユーザグラフィックアーキテクチャ
(51)【国際特許分類】
G06F 9/50 20060101AFI20241115BHJP
G06T 15/00 20110101ALI20241115BHJP
【FI】
G06F9/50 120Z
G06T15/00 501
(21)【出願番号】P 2022515814
(86)(22)【出願日】2020-09-18
(86)【国際出願番号】 US2020051647
(87)【国際公開番号】W WO2021061532
(87)【国際公開日】2021-04-01
【審査請求日】2023-09-11
(32)【優先日】2019-09-24
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2020-06-26
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】ルイジン ウ―
(72)【発明者】
【氏名】スカイラー ジョナソン サレハ
(72)【発明者】
【氏名】ヴィニート ゴエル
【審査官】坂庭 剛史
(56)【参考文献】
【文献】特表2013-516021(JP,A)
【文献】特開2017-215884(JP,A)
【文献】特開2018-072907(JP,A)
【文献】米国特許出願公開第2013/0117168(US,A1)
【文献】Citrix ZenDesktop デスクトップ&アプリケーション仮想化 実践ガイド,初版,日本,株式会社翔泳社,2014年03月20日,p.44,ISBN978-4-7981-3558-8
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/50
G06T 15/00
(57)【特許請求の範囲】
【請求項1】
複数のコアを含むプロセッサを動作させる方法であって、
アクティブアプリケーションの数を判定することであって、各アクティブアプリケーションは、第2のプロセッサ上で実行されるアプリケーションを含み、各アクティブアプリケーションは、実行のために前記プロセッサにコマンドを送信するように構成されている、ことと、
前記アクティブアプリケーションの数に基づいて、前記プロセッサ用のプロセッサ構成を選択することであって、前記プロセッサ構成は、アクティブアプリケーション毎に1つのアクティブコアを含む、ことと、
前記選択されたプロセッサ構成に従って前記プロセッサを構成することと、
前記構成されたプロセッサを用いて前記アクティブアプリケーションを実行することと、を含む、
方法。
【請求項2】
前記プロセッサ構成は、前記プロセッサのアクティブコアの数を示す、
請求項1の方法。
【請求項3】
前記アクティブコアの数は、前記アクティブアプリケーションの数に等しい、
請求項2の方法。
【請求項4】
前記プロセッサ構成は、前記プロセッサの前記複数のコアの性能レベルを含む、
請求項1の方法。
【請求項5】
前記性能レベルは、クロック周波数を示す、
請求項4の方法。
【請求項6】
前記プロセッサは、グラフィックプロセッサを含む、
請求項1の方法。
【請求項7】
各コアは、コマンドプロセッサ及びグラフィック処理パイプラインを含むグラフィックコアである、
請求項6の方法。
【請求項8】
前記アプリケーションは、サーバアプリケーションである、
請求項1の方法。
【請求項9】
各アプリケーションは、異なる仮想マシン上で実行される、
請求項1の方法。
【請求項10】
複数のコアを含むプロセッサを動作させるシステムであって、
前記プロセッサと、
制御プロセッサと、を備え、
前記制御プロセッサは、
アクティブアプリケーションの数を判定することであって、各アクティブアプリケーションは、第2のプロセッサ上で実行されるアプリケーションを含み、各アクティブアプリケーションは、実行のために前記プロセッサにコマンドを送信するように構成されている、ことと、
前記アクティブアプリケーションの数に基づいて、前記プロセッサ用のプロセッサ構成を選択することであって、前記プロセッサ構成は、アクティブアプリケーション毎に1つのアクティブコアを含む、ことと、
前記選択されたプロセッサ構成に従って前記プロセッサを構成することと、
前記構成されたプロセッサを用いて前記アクティブアプリケーションを実行することと、
を行うように構成されている、
システム。
【請求項11】
前記プロセッサ構成は、前記プロセッサのアクティブコアの数を示す、
請求項10のシステム。
【請求項12】
前記アクティブコアの数は、前記アクティブアプリケーションの数に等しい、
請求項11のシステム。
【請求項13】
前記プロセッサ構成は、前記プロセッサの前記複数のコアの性能レベルを含む、
請求項10のシステム。
【請求項14】
前記性能レベルは、クロック周波数を示す、
請求項13のシステム。
【請求項15】
前記プロセッサは、グラフィックプロセッサを含む、
請求項10のシステム。
【請求項16】
各コアは、コマンドプロセッサ及びグラフィック処理パイプラインを含むグラフィックコアである、
請求項15のシステム。
【請求項17】
前記アプリケーションは、サーバアプリケーションである、
請求項10のシステム。
【請求項18】
各アプリケーションは、異なる仮想マシン上で実行される、
請求項10のシステム。
【請求項19】
命令を記憶するコンピュータ可読記憶媒体であって、
前記命令は、第1のプロセッサによって実行されると、
アクティブアプリケーションの数を判定することであって、各アクティブアプリケーションは、第2のプロセッサ上で実行されるアプリケーションを含み、各アクティブアプリケーションは、実行のためにプロセッサにコマンドを送信するように構成されている、ことと、
前記アクティブアプリケーションの数に基づいて、前記プロセッサ用のプロセッサ構成を選択することであって、前記プロセッサ構成は、アクティブアプリケーション毎に1つのアクティブコアを含む、ことと、
前記選択されたプロセッサ構成に従って前記プロセッサを構成することと、
前記構成されたプロセッサを用いて前記アクティブアプリケーションを実行することと、
によって、前記第1のプロセッサに、複数のコアを含む前記プロセッサを動作させる、
コンピュータ可読記憶媒体。
【請求項20】
前記プロセッサ構成は、前記プロセッサのアクティブコアの数を示す、
請求項19のコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
(関連出願への相互参照)
本願は、その全体が本明細書で参照によって以下に組み込まれる、2019年9月24日に出願された「FLEXIBLE MULTI-USER GRAPHICS ARCHITECTURE」と題する係属中の米国仮特許出願第62/905,010号、及び、2020年6月26日に出願された「FLEXIBLE MULTI-USER GRAPHICS ARCHITECTURE」と題する係属中の米国特許出願第16/913,562号の利益を主張する。
【背景技術】
【0002】
グラフィック処理ハードウェアは、アプリケーションのグラフィックレンダリングタスクを高速化する。サーバサイズのハードウェアベースのレンダリングがますます一般的になっており、そのようなレンダリングの改善が頻繁に行われている。
【0003】
添付図面と共に以下の説明からより詳細な理解を得ることができる。
【図面の簡単な説明】
【0004】
【
図1A】一例による、クラウドゲーミングシステムのブロック図である。
【
図1B】開示された1つ以上の特徴を実装することができる例示的なデバイスのブロック図である。
【
図1C】一例による、サーバの追加の詳細を示す図である。
【
図2】一例による、グラフィックコアの詳細を示すブロック図である。
【
図3】
図2に示すグラフィック処理パイプラインの追加の詳細を示すブロック図である。
【
図4】一例による、複数のグラフィックコアを有するグラフィックプロセッサを動作させる方法のフローチャートである。
【発明を実施するための形態】
【0005】
複数のコアを含むプロセッサを動作させる技術が提供される。技術は、アクティブアプリケーションの数を判定することと、アクティブアプリケーションの数に基づいて、プロセッサについてのプロセッサ構成を選択することと、選択されたプロセッサ構成に従ってプロセッサを構成することと、構成されたプロセッサを用いてアクティブアプリケーションを実行することと、を含む。
【0006】
図1Aは、一例による、クラウドゲーミングシステム101のブロック図である。サーバ103は、1つ以上のクライアント105と通信する。サーバ103は、グラフィックハードウェアを少なくとも部分的に使用して、ゲーミングアプリケーションを実行する。サーバ103は、1つ以上のクライアント105から、ボタン押下及びマウス移動等の入力を受信する。サーバ103は、サーバ103上で実行されるアプリケーションにそれらの入力を提供し、サーバ103は、入力を処理し、クライアント105への送信のためのビデオデータを生成する。サーバ103は、表示のためにクライアント105にこのビデオデータを送信し、クライアント105は、ビデオデータを表示する。
【0007】
図1Bは、開示された1つ以上の特徴を実装することができる例示的なデバイス100のブロック図である。様々な実施形態では、
図1Aのサーバ103及び/又はクライアント105は、デバイス100として実装される。サーバは、グラフィックプロセッサ107を含む。異なる実施形態では、クライアント105は、グラフィックプロセッサ107を含む又は含まない。様々な実施形態では、デバイス100は、例えば、コンピュータ、ゲーミングデバイス、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話又はタブレットコンピュータを含む。デバイス100は、プロセッサ102と、メモリ104と、記憶装置106と、1つ以上の入力デバイス108と、1つ以上の出力デバイス110と、を含む。また、デバイス100は、オプションで入力ドライバ112及び出力ドライバ114を含む。デバイス100は、
図1Bに示されていない追加の構成要素を含んでもよいことを理解されたい。
【0008】
様々な代替例では、プロセッサ102は、中央処理ユニット(CPU)、グラフィックプロセシングユニット(GPU)、同一のダイ上に位置するCPU及びGPU、又は、1つ以上のプロセッサコアを含み、各プロセッサコアは、CPU又はGPUであってもよい。様々な代替例では、メモリ104は、プロセッサ102と同一のダイ上に位置し、又は、プロセッサ102とは別に位置する。メモリ104は、揮発性メモリ又は不揮発性メモリ(例えば、ランダムアクセスメモリ(RAM)、ダイナミックRAM、キャッシュ)を含む。
【0009】
記憶装置106は、固定記憶装置又は着脱可能記憶装置(例えば、ハードディスクドライブ、ソリッドステートドライブ、光学ディスク、フラッシュドライブ)を含む。入力デバイス108は、限定されないが、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、生体スキャナ、又は、ネットワーク接続(例えば、無線IEEE802信号の送信及び/若しくは受信のための無線ローカルエリアネットワークカード)を含む。出力デバイス110は、限定されないが、ディスプレイ、スピーカ、プリンタ、触覚フィードバックデバイス、1つ以上のライト、アンテナ、又は、ネットワーク接続(例えば、無線IEEE802信号の送信及び/若しくは受信のための無線ローカルエリアネットワークカード)を含む。
【0010】
入力ドライバ112は、プロセッサ102及び入力デバイス108と通信し、プロセッサ102が入力デバイス108から入力を受信することを可能にする。出力ドライバ114は、プロセッサ102及び出力デバイス110と通信し、プロセッサ102が出力デバイス110に出力を送信することを可能にする。出力ドライバ114は、グラフィックプロセッサ107を含む。グラフィックプロセッサ107は、プロセッサ102からグラフィックレンダリングコマンドを受け付け、それらの計算及びグラフィックレンダリングコマンドを処理し、表示のためにディスプレイデバイスに画素出力を提供するように構成されている。
【0011】
図1Cは、一例による、サーバ103の追加の詳細を示す図である。プロセッサ102は、複数の仮想マシンがプロセッサ102上で実行される仮想化スキームをサポートするように構成されている。各仮想マシン(VM)は、そのVM内で実行されるソフトウェアには、完全に「本物の(rial)」ハードウェアコンピュータシステムとして「見える」が、実際には、他の仮想マシンとデバイス100を共有し得る仮想化コンピューティング環境を含む。仮想化は、ソフトウェアにおいて完全に、ハードウェアにおいて部分的に、ソフトウェアにおいて部分的に、又は、ハードウェアにおいて完全にサポートされてもよい。グラフィックプロセッサ107は、仮想化をサポートし、仮想化は、プロセッサ102上で実行される複数の仮想マシンにわたってグラフィックプロセッサ107を共有することができると共に、VMが実際のハードウェアグラフィックプロセッサ107の完全な所有権を有すると各VMが「信じる」ことを意味する。グラフィックプロセッサ107は、グラフィックプロセッサ107の異なるグラフィックコア116を各アクティブゲストVM204に割り当てることによって、仮想化をサポートする。各グラフィックコア116は、関連するゲストVM204のためにグラフィック演算を実行し、他のゲストVM204のために実行しない。
【0012】
プロセッサ102は、1つ以上のゲストVM204と、いくつかの実施形態ではホストVM202と、を含む複数の仮想マシンをサポートする。ホストVM202は、ゲストVM204に対してグラフィックプロセッサ107の仮想化を管理することに関連する1つ以上の態様を実行する。ハイパーバイザ206は、仮想マシンに割り当てられたリソースを管理すること、仮想マシンをスポーン(spawning)及びキル(killing)すること、システムコールを処理すること、周辺デバイスへのアクセスを管理すること、メモリ及びページテーブルを管理すること、並びに、様々な他の機能等の多種多様な機能を実行することによって、仮想マシンに対する仮想化サポートを提供する。いくつかの実施形態では、ホストVM202は、アドミニストレータ又は管理ソフトウェアが、仮想化に関連するグラフィックプロセッサ107の構成動作を制御するためのインタフェースを提供する。いくつかのシステムでは、本明細書で説明するホストVM202の機能は、代わりにハイパーバイザ206によって実行される(これが、GPU仮想化ドライバ121がハイパーバイザ206において点線で示される理由である)。
【0013】
ホストVM202及びゲストVM204は、オペレーティングシステム120を有する。ホストVM202は、管理アプリケーション123及びGPU仮想化ドライバ121を有する。ゲストVM204は、アプリケーション126、オペレーティングシステム120及びGPUドライバ122を有する。それらの要素は、プロセッサ102及びグラフィックプロセッサ107の動作の様々な特徴を制御する。
【0014】
ホストVM202のGPU仮想化ドライバ121は、グラフィックプロセッサ107の仮想化の態様を理解することなく、単にグラフィックプロセッサ107と通信し、グラフィックレンダリング(又は、他の)コマンドをグラフィックプロセッサ107に送信する、従来のグラフィックドライバではない。その代わりに、GPU仮想化ドライバ121は、仮想化のためにグラフィックプロセッサ107の様々な態様を構成するように、グラフィックプロセッサ107と通信する。いくつかの例では、構成機能を実行することに加えて、GPU仮想化ドライバ121は、グラフィックプロセッサ107に対して従来のグラフィックレンダリングコマンドを発行し、又は、グラフィックプロセッサ107の構成に直接関連しない他のコマンドを発行する。
【0015】
ゲストVM204は、オペレーティングシステム120、GPUドライバ122及びアプリケーション126を含む。オペレーティングシステム120は、プロセッサ102上で実行される任意のタイプのオペレーティングシステムである。GPUドライバ122は、GPUドライバ122が実行されているゲストVM204に対してグラフィックプロセッサ107の動作を制御し、グラフィックレンダリングタスク又は他のワーク等のタスクを、処理のためにグラフィックプロセッサ107に送信するという点で、グラフィックプロセッサ107の「ネイティブ」ドライバである。ネイティブドライバは、必要最小限の仮想化されていないコンピューティングシステムに存在する、GPU用デバイスドライバの未修正又は僅かに修正されたバージョンであってもよい。
【0016】
GPU仮想化ドライバ121は、ホストVM202内に含まれるものとして説明しているが、他の実施形態では、GPU仮想化ドライバ121は、代わりにハイパーバイザ206に含まれてもよい。そのような実施形態では、ホストVM202が存在せず、ホストVM202の機能がハイパーバイザ206によって実行されてもよい。
【0017】
ホストVM202及びゲストVM204のオペレーティングシステム120は、ハードウェアと通信すること、リソース及びファイルシステムを管理すること、仮想メモリを管理すること、ネットワークスタックを管理すること、並びに、多くの他の機能等のように、仮想化環境内でオペレーティングシステムの標準的な機能を実行する。GPUドライバ122は、例えば、グラフィックプロセッサ107の様々な機能にアクセスするために、ソフトウェア(例えば、アプリケーション126)にアプリケーションプログラミングインタフェース(API)を提供することによって、何れかの特定のゲストVM204に対してグラフィックプロセッサ107の動作を制御する。いくつかの実施形態では、ドライバ122は、グラフィックコア116の処理構成要素(以下で更に詳細に説明するSIMDユニット138等)によって、実行のためにプログラムをコンパイルするジャストインタイムコンパイラを含む。何れかの特定のゲストVM204に対し、GPUドライバ122は、他のVMに対してではなく、そのゲストVM204に関連するグラフィックコア116に対する機能を制御する。
【0018】
グラフィックプロセッサ107は、複数のグラフィックコア116、共有データファブリック144、共有物理インタフェース142、共有キャッシュ140、共有マルチメディアプロセッサ146及び共有グラフィックプロセッサメモリ118を含む。
【0019】
グラフィックプロセッサ107のグラフィックコア116は、異なるゲストVM204に個々に割り当て可能である。より具体的には、GPU仮想化ドライバ121は、グラフィック処理及び計算処理等の処理タスクを実行する際の使用のために、特定のゲストVM204に物理グラフィックコア116を排他的に割り当てる。
【0020】
共有マルチメディアプロセッサ146、グラフィックプロセッサメモリ118、共有キャッシュ140、共有物理インタフェース142及び共有データファブリック144の全ては、異なるグラフィックコア間で割り当て可能である。
【0021】
グラフィックプロセッサメモリ118は、複数のメモリ部分を含む。いくつかの構成では、グラフィックプロセッサメモリ118は、その各々が異なるグラフィックコア116に割り当てられる部分に分割される。そのような構成では、GPU仮想化ドライバ121は、特定のグラフィックコア116にグラフィックプロセッサメモリ118の特定の部分を割り当てる。そのような構成では、グラフィックコア116は、そのグラフィックコア116に割り当てられたグラフィックプロセッサメモリ118の部分にアクセスすることが可能であり、グラフィックコア116は、そのグラフィックコア116に割り当てられていないグラフィックプロセッサメモリ118の部分にアクセスできない。いくつかの実施形態では、異なるグラフィックコア116に割り当て可能である部分は、特定のメモリバンク等のように、グラフィック処理メモリ118の物理的な小区画(subdivisions)である。いくつかの実施形態では、メモリの複数の部分は、単一のグラフィックコア116に割り当てられ、いくつかの実施形態では、全ての(又は、複数の)グラフィックコア116に割り当てられる。
【0022】
異なるグラフィックコア116が共有キャッシュ140の何れかの部分にデータをキャッシュすることが可能である点で、共有キャッシュ140は、共有可能である。しかしながら、代替的な実施形態では、共有キャッシュ140は、異なるように構成される。より具体的には、一実施形態では、キャッシュ140は、部分に区画化され、各部分は、グラフィックコア116に割り当てられる(例えば、排他的使用のために)。別の実施形態では、グラフィックコア116が同一のデータにアクセスする場合、キャッシュ140全体が、外部メモリトラフィックを低減させるために、グラフィックコア116間で共有される。共有物理インタフェース142は、グラフィックプロセッサ107の外部の構成要素に対する入力/出力インタフェースである。グラフィックプロセッサ107の外部の構成要素にグラフィックコア116毎のデータ及びコマンドを共有物理インタフェース142がルーティングすることが可能である点で、共有物理インタフェース142は、グラフィックコア116間で共有可能である。共有データファブリック114は、グラフィックコア116とグラフィックプロセッサメモリ118との間でメモリトランザクションをルーティングする。各グラフィックコア116が、そのグラフィックコア116に割り当てられたグラフィックプロセッサメモリ118の部分にアクセスするように共有データファブリック114と連動する点で、共有データファブリック114は、異なるグラフィックコア116間で共有可能である。
【0023】
様々な構成では、グラフィックコア116は、異なる性能レベルにおいて動作可能である。いくつかの実施形態では、そのグラフィックコア内で物理的に存在するリソースの数に関して、グラフィックコア116のうち1つ以上は、他のグラフィックコア116のうち1つ以上とは異なる。いくつかの例では、それらのリソースは、或る量のメモリ、或る量のキャッシュメモリ、及び/又は、或る数の計算ユニット132のうち1つ以上を含む。
【0024】
いくつかの例では、グラフィックコア116は、ランタイムにおいて異なる性能レベル間で切り替え可能である。いくつかの実施形態では、各グラフィックコア116は、クロック速度又は有効にされる構成要素の数のうち1つ以上に関して調整可能な性能レベルを有する。いくつかの実施形態では、グラフィックコア116に適用されるよりも高いクロック速度又はグラフィックコア116に対して有効にされるよりも多くの数の構成要素は、グラフィックコア116に対するより大きな電力使用及び/又はグラフィックコア116に対するより多くの量の熱放散を結果としてもたらす。概して、グラフィックコア116の性能レベルが高いほど、電力使用量及び熱放散量が多くなる。
【0025】
いくつかの例では、ハイパーバイザ206は、特定の数のアクティブゲストVM204による使用のためにデバイス103を構成する。アクティブなゲストVM204の数及びゲストVM204の性能要件に応じて、ハイパーバイザ206は、異なるグラフィックコア116の性能レベルを構成する。いくつかの実施形態では、ハイパーバイザ206は、グラフィックプロセッサ107全体についての電力バジェット及びサーマルバジェットを識別し、総電力バジェット及び総サーマルバジェットに基づいて、有効にされるグラフィックコア116の性能レベルを設定する。よって、いくつかの実施形態では、より多くのゲストVM204が有効にされる状況では、ハイパーバイザ206は、1つ以上のグラフィックコア116の性能レベルを、より少ないゲストVM204が有効にされる状況よりも低い性能レベルに設定する。
【0026】
いくつかの実施形態では、グラフィックプロセッサ107は、固定数の構成のセット間で切り替え可能である。そのような各構成は、有効にされるグラフィックコア116の数を示し、有効にされるグラフィックコア116毎の特定の性能レベルを示す。
【0027】
いくつかの実施形態では、固定された構成のセットは、第1のグラフィックコア116が有効にされ、第2のグラフィックコア116が無効にされる少なくとも1つの構成と、第1のグラフィックコア116及び第2のグラフィックコア116の両方が有効にされる別の構成と、を含み、1つ目の構成では、第1のグラフィックコアは、2つ目の構成での第1のグラフィックコアよりも高い性能レベルを有する。
【0028】
グラフィックプロセッサメモリ118は、グラフィックコア116に対して特定の量の帯域幅を有する。複数のグラフィックコア116が有効にされる構成では、帯域幅は、異なるグラフィックコア116間で分割される。1つのグラフィックコア116が有効にされる場合、グラフィックコア116は、全てのメモリ帯域幅へのアクセスを有する。いくつかの構成では、各グラフィックコア116がグラフィックプロセッサメモリ118の全体にアクセスすることが可能である。いくつかの構成では、グラフィックプロセッサ107の構成要素の全ては、単一のダイ上に含まれている。いくつかの実施形態では、各グラフィックコア116、共有キャッシュ140、共有物理インタフェース142、共有データファブリック144、共有マルチメディアプロセッサ146及びグラフィックプロセッサメモリ118は、それら自身を個々に調整可能なクロックを有する。
【0029】
図2は、一例による、グラフィックコア116の詳細を示すブロック図である。グラフィックコア116は、並列処理に適し得るグラフィック演算及び非グラフィック演算等のような選択された機能のコマンド及びプログラムを実行する。グラフィックコア116は、プロセッサ102から受信したコマンドに基づいて、画素演算、幾何学計算、及び、ディスプレイデバイスへの画像をレンダリングすること等のグラフィックパイプライン演算を実行するために使用されてもよい。また、グラフィックコア116は、プロセッサ102から受信したコマンドに基づいて、ビデオに関連する演算、物理シミュレーション、計算流体力学、又は、他のタスク等のように、グラフィック演算に直接関連しない計算処理演算を実行する。コマンドプロセッサ213は、プロセッサ102(又は、別のソース)からコマンドを受け付け、それらのコマンドに関連するタスクを、グラフィック処理パイプライン134及び計算ユニット132等のグラフィックコア116の様々な要素に委ねる。
【0030】
グラフィックコア116は、プロセッサ102の要求に応じてSIMDパラダイムに従って並列に演算を実行するように構成された1つ以上のSIMDユニット138を含む計算ユニット132を含む。SIMDパラダイムは、複数の処理要素が単一のプログラム制御フローユニット及びプログラムカウンタを共有し、よって、同一のプログラムを実行するが、異なるデータでそのプログラムを実行することができるものである。一例では、各SIMDユニット138は、16個のレーンを含み、各レーンは、SIMDユニット138内の他のレーンと同時に同一の命令を実行するが、異なるデータでその命令を実行することができる。全てのレーンが所定の命令を実行する必要がない場合、レーンは、条件付き実行制御(predication)によりオフに切り替えられてもよい。条件付き実行制御は、分岐制御フローによりプログラムを実行するためにも使用されてもよい。より具体的には、制御フローが個々のレーンによって実行される計算に基づいている条件付き分岐等の命令を有するプログラムに対し、現在実行されていない制御フローパスに対応するレーンを条件付き実行制御し、異なる制御フローパスをシリアル実行することにより、任意の制御フローを可能にする。
【0031】
計算ユニット132における実行の基本的単位は、ワークアイテムである。各ワークアイテムは、特定のレーン内で並列に実行されるプログラムの単一のインスタンス化を表す。ワークアイテムは、単一のSIMDプロセシングユニット138上で「ウェーブフロント(wavefront)」として同時に実行されてもよい。1つ以上のウェーブフロントは、「ワークグループ」に含まれ、ワークグループは、同一のプログラムを実行するように設計されたワークアイテムの集合を含む。ワークグループは、ワークグループを構成するウェーブフロントの各々を実行することによって実行されてもよい。代替例では、ウェーブフロントは、単一のSIMDユニット138上で順次実行され、又は、異なるSIMDユニット138上で部分的若しくは完全に並列に実行される。スケジューラ136は、異なる計算ユニット132及びSIMDユニット138上での様々なワークグループ及びウェーブフロントのスケジューリングに関連する動作を実行するように構成されている。
【0032】
計算ユニット132によって与えられる並列性は、画素値計算、頂点変換、及び、他のグラフィック演算等のグラフィック関連演算に適している。よって、いくつかの例では、プロセッサ102からグラフィック処理コマンドを受け付けるグラフィックパイプライン134は、並列に実行するために、計算ユニット132に計算タスクを提供する。
【0033】
また、計算ユニット132は、グラフィックに関連しない計算タスク、又は、グラフィックパイプライン134の「通常の」演算の一部として実行されない計算タスク(例えば、グラフィックパイプライン134の演算に対して実行される処理を補助するために実行されるカスタム演算)を実行するために使用される。プロセッサ102上で実行されるアプリケーション126又は他のソフトウェアは、そのような計算タスクを定義したプログラムを、実行のためにグラフィックコア116に送信する。
【0034】
本明細書で他に説明するように、グラフィックプロセッサ107は、複数のグラフィックコア116を含む。各グラフィックコア116は、それ自身のコマンドプロセッサ213を有する。したがって、各グラフィックコア116は、そのグラフィックコア116に割り当てられたゲストVM204から受信したコマンドストリームを独立して処理する。よって、特定のグラフィックコア116の演算は、別のグラフィックコア116の演算に影響を及ぼさない。例えば、或るグラフィックコア116が無反応になり、又は、ストール若しくはスローダウンを経験する場合、その無反応、ストール又はスローダウンは、同一のグラフィックプロセッサ107内の異なるグラフィックコア116に影響を及ぼさない。
【0035】
本明細書では、グラフィックコア116が、仮想化コンピューティングスキームにおける単一のゲストVM204に関連付けられ、単一のゲストVM204によって使用されるものとして説明する。しかしながら、他の実施形態が可能であることを理解されたい。より具体的には、サーバ103が複数の独立したサーバ側エンティティを含み、その各々が異なるクライアント105と通信し、その各々が特定のグラフィックコア116に関連付けられ、その各々が関連するグラフィックコア116にコマンドストリームを送信し、関連するクライアント105にそのようなコマンドストリームの結果(例えば、画素)を送信する、という任意の実施形態は、本開示の範囲に収まる。概して、そのようなサーバ側エンティティは、本明細書においてサーバアプリケーションと呼ばれる。いくつかの実施例では、1つ以上のサーバアプリケーションは、ビデオゲームであり、サーバ103は、グラフィックプロセッサ107の異なるグラフィックコア116を、そのようなビデオゲームの各々に割り当てる。
【0036】
さらに、本明細書では、グラフィックプロセッサ107の構成が、ハイパーバイザ206によって制御されるものとして説明する。しかしながら、サーバ103の任意の他の構成要素(ハードウェア、ソフトウェア、又は、それらの組み合わせとして実装される)が、代わりに、グラフィックプロセッサ107の構成を制御することができる。概して、そのような構成要素は、本明細書においてグラフィックプロセッサ構成コントローラと呼ばれる。
【0037】
図3は、
図2に示すグラフィック処理パイプライン134の追加の詳細を示すブロック図である。グラフィック処理パイプライン134は、各々が特定の機能を実行するステージを含む。ステージは、グラフィック処理パイプライン134の機能の下位区分を表す。各ステージは、計算ユニット132内で実行されるシェーダプログラムとして部分的若しくは完全に、又は、計算ユニット132の外部の固定された機能である非プログラム可能ハードウェアとして部分的若しくは完全に実装される。
【0038】
入力アセンブラステージ302は、ユーザが充填したバッファ(例えば、アプリケーション126等のように、プロセッサ102によって実行されるソフトウェアの要求において充填されたバッファ)からプリミティブデータを読み込み、パイプラインの残りの部分によって使用されるためにプリミティブにデータをアセンブルする。入力アセンブラステージ302は、ユーザが充填したバッファに含まれるプリミティブデータに基づいて、異なるタイプのプリミティブを生成してもよい。入力アセンブラステージ302は、パイプラインの残りの部分による使用のために、アセンブルされたプリミティブをフォーマットする。
【0039】
頂点シェーダステージ304は、入力アセンブラステージ302によってアセンブルされたプリミティブの頂点を処理する。頂点シェーダステージ304は、変換、スキニング、モーフィング、頂点単位のライティング等のように、様々な頂点単位の演算を実行する。変換演算は、頂点の座標を変換する様々な演算を含む。それらの演算は、モデリング変換、ビューイング変換、投影変換、透視除算、及び、ビューポート変換のうち1つ以上を含む。本明細書では、そのような変換は、変換が実行される頂点の座標又は「位置」を修正するものと考えられる。頂点シェーダステージ304の他の演算は、座標以外の属性を修正する。
【0040】
頂点シェーダステージ304は、1つ以上の計算ユニット132上で実行される頂点シェーダプログラムとして部分的又は完全に実装される。頂点シェーダプログラムは、プロセッサ102によって提供され、コンピュータプログラマによって事前に書き込まれたプログラムに基づいている。ドライバ122は、計算ユニット132内での実行のために適切なフォーマットを有する頂点シェーダプログラムを生成するように、そのようなコンピュータプログラムをコンパイルする。
【0041】
ハルシェーダステージ306、テッセレータステージ308及びドメインシェーダステージ310は、テッセレーションを実施するように協働し、テッセレーションは、プリミティブを再分割することによって、単純なプリミティブをより複雑なプリミティブに変換する。ハルシェーダステージ306は、入力プリミティブに基づいて、テッセレーションのためのパッチを生成する。テッセレータステージ308は、パッチについてのサンプルのセットを生成する。ドメインシェーダステージ310は、パッチについてのサンプルに対応する頂点についての頂点位置を計算する。ハルシェーダステージ306及びドメインシェーダステージ310は、計算ユニット132上で実行されるシェーダプログラムとして実装されてもよい。
【0042】
幾何学シェーダステージ312は、プリミティブ毎に頂点演算を実行する。ポイントスプリント拡大(point sprint expansion)、動的パーティクルシステム演算(dynamic particle system operations)、ファーフィン生成(fur-fin generation)、シャドーボリューム生成(shadow volume generation)、シングルパスレンダーツーキューブマップ(ingle pass render-to-cubemap)、プリミティブ毎のマテリアルスワッピング(per-primitive material swapping)、プリミティブ毎のマテリアルセットアップ(per-primitive material setup)等の演算を含む様々な異なるタイプの演算が幾何学シェーダステージ312によって実行されてもよい。いくつかの例では、計算ユニット132上で実行されるシェーダプログラムは、幾何学シェーダステージ312についての演算を実行する。
【0043】
ラスタライザステージ314は、単純なプリミティブ及び生成されたアップストリームを受け付け、ラスタライズする。ラスタライゼーションは、何れのスクリーン画素(又は、部分画素サンプル)が特定のプリミティブによってカバーされるかを判定することから構成される。ラスタライゼーションは、固定機能ハードウェアによって実行される。
【0044】
画素シェーダステージ316は、プリミティブにより生成されたアップストリーム及びラスタライゼーションの結果に基づいて、スクリーン画素についての出力値を計算する。画素シェーダステージ316は、テキスチャメモリからのテキスチャを適用してもよい。画素シェーダステージ316についての演算は、計算ユニット132上で実行されるシェーダプログラムによって実行される。
【0045】
出力マージャステージ318は、画素シェーダステージ316からの出力を受け付け、それらの出力をマージし、Z検定及びアルファブレンド等の演算を実行して、スクリーン画素についての最終的な色を決定する。
【0046】
図4は、一例による、複数のグラフィックコア116を有するグラフィックプロセッサ107を動作させる方法400のフローチャートである。
図1A~
図3のシステムに関して説明するが、当業者は、任意の技術的に実現可能な順序において方法400のステップを実行するように構成された任意のシステムが、本開示の範囲内に収まることを理解するであろう。
【0047】
方法400は、ステップ402において開始し、ステップ402では、グラフィックプロセッサ構成コントローラ(ハイパーバイザ206等)は、アクティブサーバアプリケーション(ゲストVM204等)の数を判定する。アクティブサーバアプリケーションは、関連するグラフィックコア116によってワークが実行されることを要求するように構成されたサーバアプリケーションである。いくつかの例では、グラフィックプロセッサ構成コントローラは、クラウドゲーミングシステムのワークロードスケジューラ等の別のエンティティから、特定の数のアクティブサーバアプリケーション及びグラフィックプロセッサ107の同一の数のグラフィックコア116を実行するようにプロセッサ102を構成する要求を受信する。様々な例では、この要求は、クラウドゲーミングシステムのサービスを使用するクライアント105の数に基づいている。
【0048】
ステップ404において、グラフィックプロセッサ構成コントローラは、アクティブサーバアプリケーションの数に基づいて、グラフィックプロセッサ構成を選択する。いくつかの例では、グラフィックプロセッサ構成コントローラは、アクティブサーバアプリケーションの数に基づいて、したがって、アクティブグラフィックコア116の数に基づいて、1つ以上のグラフィックコア116の性能レベルを変動させることが可能である。いくつかの例では、グラフィックプロセッサ構成は、より少ないグラフィックコア116が有効にされる構成では、より多くの数のグラフィックコア116が有効にされる構成よりも、利用可能な電力バジェット及びサーマルバジェットの殆どが、それらのより少ないグラフィックコア116に対して利用可能であるという点で異なる。したがって、より少ないグラフィックコア116が有効にされる構成では、少なくとも1つのグラフィックコアは、より多くの数のグラフィックコア116が有効にされるグラフィックプロセッサ構成において同一のグラフィックコア116が与えられるよりも高い性能レベルが与えられる。様々な例では、性能レベルは、グラフィックコア116のクロック周波数、グラフィックコア116に利用可能なメモリ帯域幅の量、グラフィックコア116による使用のために利用可能なメモリ若しくはキャッシュの量、又は、グラフィックコア116の性能レベルを定義する他の特徴のうち1つ以上を定義する。
【0049】
ステップ406において、グラフィックプロセッサ構成コントローラは、選択されたグラフィックプロセッサ構成に従って、グラフィックプロセッサ107を構成する。特に、グラフィックプロセッサ構成コントローラは、選択されたグラフィックプロセッサ構成に従って、有効にされると見なされるグラフィックコア116を有効にし、選択されたグラフィックプロセッサ構成に従って、有効にされたグラフィックコア116の各々の性能レベルを設定する。
【0050】
ステップ408において、グラフィックプロセッサ構成コントローラは、構成されたグラフィックプロセッサ107を用いてアクティブサーバアプリケーションを実行させる。サーバアプリケーションを実行することは、サーバアプリケーションに、グラフィックプロセッサ107の関連するグラフィックコア116によって処理するためのコマンドのストリームを転送させることを含む。より具体的には、本明細書で他に説明したように、各サーバアプリケーションには、特定のグラフィックコア116が割り当てられる。各サーバアプリケーションは、サーバアプリケーションに関連するグラフィックコア116にコマンドストリームを送信する。何れかの特定のグラフィックコア116では、そのグラフィックコアのコマンドプロセッサ213は、そのコマンドストリームを実行して、グラフィック処理パイプライン134を介してコマンド及びデータを処理し、及び/又は、計算コマンドを処理する。
【0051】
本明細書の開示に基づいて、多くの変形が可能であることを理解されたい。特徴及び要素が特定の組み合わせで上述されているが、各特徴又は要素は、他の特徴及び要素無しに単独で、又は、他の特徴及び要素と共に、若しくは、他の特徴及び要素無しに様々な組み合わせで使用することができる。いくつかの実施形態では、グラフィックコア116は、固定機能構成要素を含むグラフィック処理パイプライン134を含むものとして説明したが、固定機能ハードウェア無しにシェーダを介して完全に実装されたグラフィック処理パイプライン134を有するグラフィックコア116、又は、汎用計算能力を有するが、グラフィック処理能力を有しないグラフィックコア116が本明細書で企図されることを理解されたい。言い換えると、本開示では、グラフィックコア116は、固定機能要素を含まない(よって、プログラム可能シェーダプログラムとして完全に実装される)グラフィックコアと置換されてもよく、又は、計算ユニット132を含むがグラフィック処理パイプライン134を含まない、汎用計算演算を実行することができる汎用計算コアと置換されてもよい。
【0052】
開示された機能ブロックの何れも、ハードワイヤド回路、プロセッサ上で実行されるソフトウェア、又は、それらの組み合わせとして実装可能である。提供された方法は、汎用コンピュータ、プロセッサ又はプロセッサコアにおいて実施されてもよい。適切なプロセッサは、例として、汎用プロセッサ、専用プロセッサ、従来のプロセッサ、デジタルシグナルプロセッサ(DSP)、複数のマイクロプロセッサ、DSPコアに関連する1つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)回路、任意の他のタイプの集積回路(IC)、及び/又は、状態機械を含む。このようなプロセッサは、ハードウェア記述言語(HDL)命令と、ネットリストを含む他の中間データ(コンピュータ可読媒体に記憶することが可能な命令)との結果を使用して、製造プロセスを構成することによって製造されてもよい。そのような処理の結果は、本開示の特徴を実装するプロセッサを製造する半導体製造工程において使用されるマスクワークであってもよい。
【0053】
本明細書に提供される方法又はフローチャートは、汎用コンピュータ又はプロセッサによる実行のために非一時的なコンピュータ可読記憶媒体に組み込まれたコンピュータプログラム、ソフトウェア又はファームウェアにおいて実装されてもよい。非一時的なコンピュータ可読記憶媒体の例は、リードオンリメモリ(ROM)、ランダムアクセスメモリ(RAM)、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク及びリムーバブルディスク等の磁気媒体、磁気光学媒体、並びに、CD-ROMディスク及びデジタル多用途ディスク(DVD)等の光学媒体を含む。