(57)【要約】仮想化されたアクセラレーテッド処理デバイス（ＡＰＤ）内のリソースを効率的に時分割するための技術が提供される。ＡＰＤに実装された仮想化スキームでは、ＡＰＤを使用するための異なる「タイムスライス」が、異なる仮想マシンに割り当てられる。タイムスライスが終了すると、ＡＰＤは、現在の仮想マシン（ＶＭ）の操作を停止し、別のＶＭの操作を開始することによって、仮想化コンテキストスイッチを実行する。通常、各ＶＭには固定長の時間が割り当てられ、その後、仮想化コンテキストスイッチが実行される。この固定長の時間は、非効率性につながる可能性がある。したがって、状況によっては、ＡＰＤ上でＶＭが実行するワークがなくなり、ＡＰＤがアイドル状態になることに応じて、仮想化コンテキストスイッチが「早期」に実行される。この仮想化コンテキストスイッチは、タイムスライスの固定長の時間が終了する前に仮想化コンテキストスイッチが実行されるという意味で「早期」である。【選択図】図４
2020525913.tif 000002
【特許請求の範囲】
【請求項１】
仮想化アクセラレーテッド処理デバイス（ＡＰＤ）で早期仮想化コンテキストスイッチを実行する方法であって、
前記仮想化ＡＰＤ上で仮想マシンのワークを実行することに関連する現在の機能のタイムスライスが完了する前に、前記ＡＰＤがアイドル状態であることを判別することと、
前記判別したことに応じて、次の機能への早期仮想化コンテキストスイッチを実行することであって、前記早期仮想化コンテキストスイッチは、前記現在の機能の前記ＡＰＤ上の状態を保存し、前記ＡＰＤ上の前記次の機能の状態をロードし、前記ＡＰＤ上の前記次の機能のワークを開始することを含む、ことと、を含む、
方法。
【請求項２】
前記次の機能のワークを開始することは、
前記次の機能のドアベルに基づいてコマンドをフェッチすることと、
前記次の機能の前記コマンドを実行することと、を含む、
請求項１の方法。
【請求項３】
前記ＡＰＤがアイドル状態であることを判別することは、
前記ＡＰＤのグラフィックス処理パイプラインに未処理のワークがないことと、前記ＡＰＤの計算ユニットに未処理のワークがないことと、を判別することを含む、
請求項１の方法。
【請求項４】
前記ＡＰＤがアイドル状態であることを判別することは、
前記ＡＰＤのグラフィックス処理パイプラインに未処理のワークがないことと、前記ＡＰＤの計算ユニットに未処理のワークがないことと、ドアベルが処理されていないか受信されていないことと、を判別することを含む、
請求項３の方法。
【請求項５】
前記ＡＰＤがアイドル状態であることを判別することは、
前記ＡＰＤがアイドル状態になった後のタイムアウト期間中に、ドアベルが受信されていないことを判別することを含む、
請求項１の方法。
【請求項６】
第２機能の第２タイムスライスが、前記ＡＰＤがタイムアウト期間よりも長いアイドル状態にならずに完了したことに応じて、前記第２機能の前記第２タイムスライスが、早期仮想化コンテキストスイッチを実行することなく完了するのを可能にすることを含む、
請求項１の方法。
【請求項７】
第２機能の第２タイムスライスの間にＡＰＤがアイドル状態になることを判別することと、
前記第２機能の前記第２タイムスライスの間に前記ＡＰＤがアイドル状態になった後のタイムアウト期間中にドアベルが受信されたことを判別することと、
早期仮想化コンテキストスイッチを実行する代わりに、前記ドアベルに関連するワークを実行することと、を含む、
請求項１の方法。
【請求項８】
第２機能の第２タイムスライスの間にＡＰＤがアイドル状態になることを判別することと、
前記第２機能の前記第２タイムスライスの間に前記ＡＰＤがアイドル状態になった後のタイムアウト期間中にドアベルを受信することと、
前記第２タイムスライスに閾値未満の時間が残っていることを判別したことに応じて、前記ドアベルを受信したにもかかわらず早期仮想化コンテキストスイッチを実行することと、を含む、
請求項１の方法。
【請求項９】
前記仮想化コンテキストスイッチを実行した後に、スケジューリングスキームに基づいて、前記仮想マシンに対して再びＡＰＤ上で順番が与えられることを判別することと、
前記仮想化コンテキストスイッチを実行してから前記仮想マシンのドアベルが受信されていないと判別したことに応じて、前記仮想マシンの前記順番をスキップすることと、を含む、
請求項１の方法。
【請求項１０】
早期仮想化コンテキストスイッチを実行可能なアクセラレーテッド処理デバイス（ＡＰＤ）であって、
ワークを実行するように構成された、複数の計算ユニット及びグラフィックス処理パイプラインと、
前記ワークに関連するコマンドを、前記複数の計算ユニット及び前記グラフィックス処理パイプラインに発行するように構成されたコマンドプロセッサと、
仮想化スケジューラと、を備え、
前記仮想化スケジューラは、
前記ＡＰＤ上で仮想マシンのワークを実行することに関連する現在の機能のタイムスライスが完了する前に、前記ＡＰＤがアイドル状態であることを判別することと、
前記判別したことに応じて、次の機能への早期仮想化コンテキストスイッチを実行することであって、前記早期仮想化コンテキストスイッチは、前記現在の機能の前記ＡＰＤ上の状態を保存し、前記ＡＰＤ上の前記次の機能の状態をロードし、前記ＡＰＤ上の前記次の機能のワークを開始することを含む、ことと、
を行うように構成されている、
ＡＰＤ。
【請求項１１】
前記仮想化スケジューラは、
前記次の機能のドアベルに基づいてコマンドをフェッチすることと、
前記次の機能の前記コマンドを実行することと、
によって、前記次の機能のワークを開始するように構成されている、
請求項１０のＡＰＤ。
【請求項１２】
前記仮想化スケジューラは、
前記ＡＰＤのグラフィックス処理パイプラインに未処理のワークがないことと、前記ＡＰＤの計算ユニットに未処理のワークがないことと、を判別すること
によって、前記ＡＰＤがアイドル状態であることを判別するように構成されている、
請求項１０のＡＰＤ。
【請求項１３】
前記仮想化スケジューラは、
前記ＡＰＤのグラフィックス処理パイプラインに未処理のワークがないことと、前記ＡＰＤの計算ユニットに未処理のワークがないことと、ドアベルが処理されていないか受信されていないことと、を判別すること
によって、前記ＡＰＤがアイドル状態であることを判別するように構成されている、
請求項１２のＡＰＤ。
【請求項１４】
前記仮想化スケジューラは、
前記ＡＰＤがアイドル状態になった後のタイムアウト期間中に、ドアベルが受信されていないことを判別すること
によって、前記ＡＰＤがアイドル状態であることを判別するように構成されている、
請求項１０のＡＰＤ。
【請求項１５】
前記仮想化スケジューラは、
第の機能の第２タイムスライスが、前記ＡＰＤがタイムアウト期間よりも長いアイドル状態にならずに完了したことに応じて、前記第２機能の前記第２タイムスライスが、早期仮想化コンテキストスイッチを実行することなく完了するのを可能にするように構成されている、
請求項１０のＡＰＤ。
【請求項１６】
前記仮想化スケジューラは、
第２機能の第２タイムスライスの間にＡＰＤがアイドル状態になることを判別することと、
前記第２機能の前記第２タイムスライスの間に前記ＡＰＤがアイドル状態になった後のタイムアウト期間中にドアベルが受信されたことを判別することと、
前記ＡＰＤに、早期仮想化コンテキストスイッチを実行する代わりに、前記ドアベルに関連するワークを実行させることと、
を行うように構成されている、
請求項１０のＡＰＤ。
【請求項１７】
前記仮想化スケジューラは、
第２機能の第２タイムスライスの間にＡＰＤがアイドル状態になることを判別することと、
前記第２機能の前記第２タイムスライスの間に前記ＡＰＤがアイドル状態になった後のタイムアウト期間中にドアベルを検出することと、
前記第２タイムスライスに閾値未満の時間が残っていることを判別したことに応じて、前記ドアベルを受信したにもかかわらず早期仮想化コンテキストスイッチを実行することと、
を行うように構成されている、
請求項１０のＡＰＤ。
【請求項１８】
前記仮想化スケジューラは、
前記仮想化コンテキストスイッチを実行した後に、スケジューリングスキームに基づいて、前記仮想マシンに対して再びＡＰＤ上で順番が与えられることを判別することと、
前記仮想化コンテキストスイッチを実行してから前記仮想マシンのドアベルが受信されていないと判別したことに応じて、前記仮想マシンの前記順番をスキップすることと、
を行うように構成されている、
請求項１０のＡＰＤ。
【請求項１９】
複数の仮想マシンを実行するように構成されたプロセッサと、
早期仮想化コンテキストスイッチを実行可能なアクセラレーテッド処理デバイス（ＡＰＤ）と、を備えるデバイスであって、
前記ＡＰＤは、
複数の前記仮想マシンの要求に応じてワークを実行するように構成された、複数の計算ユニット及びグラフィックス処理パイプラインと、
前記ワークに関連するコマンドを、複数の前記計算ユニット及び前記グラフィックス処理パイプラインに発行するように構成されたコマンドプロセッサと、
仮想化スケジューラと、を備え、
前記仮想化スケジューラは、
前記ＡＰＤ上で仮想マシンのワークを実行することに関連する現在の機能のタイムスライスが完了する前に、前記ＡＰＤがアイドル状態であることを判別することと、
前記判別したことに応じて、次の機能への早期仮想化コンテキストスイッチを実行することであって、前記早期仮想化コンテキストスイッチは、前記現在の機能の前記ＡＰＤ上の状態を保存し、前記ＡＰＤ上の前記次の機能の状態をロードし、前記ＡＰＤ上の前記次の機能のワークを開始することを含む、ことと、
を行うように構成されている、
デバイス。
【請求項２０】
前記仮想化スケジューラは、
前記次の機能のドアベルに基づいてコマンドをフェッチすることと、
前記次の機能の前記コマンドを実行することと、
によって、前記次の機能のワークを開始するように構成されている、
請求項１９のデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願の相互参照）
本願は、２０１７年６月２９日に出願された米国特許出願第１５／６３７，８００号の利益を主張するものであり、その内容は、本明細書に完全に記載されているかのように、言及することによって本明細書に援用される。
【背景技術】
【０００２】
コンピュータ仮想化は、コンピュータシステムの異なる仮想インスタンス間でハードウェアの単一のセットを共有する技術である。各インスタンス、つまり仮想マシン（ＶＭ）は、ハードウェアコンピュータシステム全体を所有しているものと認識するが、実際には、コンピュータシステムのハードウェアリソースは、異なるＶＭ間で共有されている。ＣＰＵやシステムメモリ等以外のデバイスの仮想化の進歩を含めて、仮想化の進歩が絶えず行われている。
【０００３】
添付の図面と併せて例として与えられる以下の説明から、より詳細な理解が得られる。
【図面の簡単な説明】
【０００４】
【図１】本開示の１つ以上の特徴を実施することができる例示的なデバイスのブロック図である。
【図２】一例による、仮想化に関連するデバイス及びアクセラレーテッド処理デバイスの詳細を示す図である。
【図３】図２に示すグラフィックス処理パイプラインの追加の詳細を示すブロック図である。
【図４】一例による、早期仮想化コンテキストスイッチの実行に関連する図１のデバイスの特徴的な機能を示すブロック図である。
【図５】一例による、早期仮想化コンテキストスイッチを実行する方法のフロー図である。
【発明を実施するための形態】
【０００５】
仮想化されたアクセラレーテッド処理デバイス（ＡＰＤ）内のリソースを効率的に時分割するための技術が提供される。ＡＰＤに実装された仮想化スキームでは、ＡＰＤを使用するための異なる「タイムスライス」が、異なる仮想マシンに割り当てられる。タイムスライスが終了すると、ＡＰＤは、現在の仮想マシン（ＶＭ）の操作を停止し、別のＶＭの操作を開始することによって、仮想化コンテキストスイッチを実行する。様々なタイムスライスが様々な機能（例えば、仮想機能（周辺コンポーネント相互接続エクスプレス（ＰＣＩｅ）アドレス指定パラメータ））に関連付けられている。
【０００６】
通常、各ＶＭには固定長の時間が割り当てられ、その後、仮想化コンテキストスイッチが実行される。この固定長の時間は、非効率につながる可能性がある。例えば、ある状況では、ＶＭで実行するワークがなくなり、アイドル状態になるが、当該ＶＭの現在のタイムスライスには、まだ時間が残されている。したがって、状況によっては、ＡＰＤ上でＶＭが実行するワークがなくなり、ＡＰＤがアイドル状態になることに応じて、仮想化コンテキストスイッチが「早期」に実行される。この仮想化コンテキストスイッチは、タイムスライスの固定長の時間が終了する前に仮想化コンテキストスイッチが実行されるという意味で「早期」である。
【０００７】
一部の実施態様では、ＡＰＤは、ＡＰＤがアイドル状態であり、早期仮想化コンテキストスイッチを実行する前に実行するワークがないことを検出した後に、タイムアウト期間だけ待機する。そのタイムアウト期間中に追加のワークが受信され、現在のタイムスライスに十分な時間が残っている場合には、早期仮想化コンテキストスイッチは実行されない。代わりに、ＡＰＤは、その新たなワークをフェッチして、そのワークを実行することが可能になる。そのタイムアウト期間中に追加のワークが受信されない場合には、早期仮想化コンテキストスイッチが実行される。
【０００８】
一部の実施態様では、ＡＰＤは、ある機能に対して早期仮想化コンテキストスイッチが実行された後に、早期仮想化コンテキストスイッチが実行されてからワークが受信されない場合、ＡＰＤ上で当該機能を再スケジュールしない。いくつかの例では、ドアベルメカニズムが実装されており、これにより、メモリマッピングされた「ドアベル」アドレスが書き込まれると、特定の機能のためのワークの準備ができていることがＡＰＤに通知される。様々なドアベル（したがって、様々なドアベルアドレス）は、様々な仮想機能に関連付けられている。したがって、特定の機能についての早期仮想化コンテキストスイッチが発生した後に当該特定の機能についてのドアベルが受信されない場合、ＡＰＤは、ＡＰＤの仮想化タイムスライシングスキームで次の「順番（ターン）」が発生したときに、当該機能についてのワークを実行しない。
【０００９】
図１は、本開示の１つ以上の特徴を実施することができる例示的なデバイス１００のブロック図である。デバイス１００は、例えば、コンピュータ、ゲームデバイス、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話、又は、タブレットコンピュータを含むことができる。デバイス１００は、プロセッサ１０２（「ホストプロセッサ」とも呼ばれ得る）と、メモリ１０４と、ストレージ１０６と、１つ以上の入力デバイス１０８と、１つ以上の出力デバイス１１０と、を含む。デバイス１００は、オプションとして、入力ドライバ１１２と出力ドライバ１１４とを含むことができる。デバイス１００は、図１に示されていない追加のコンポーネントを含むことができることを理解されたい。
【００１０】
様々な代替形態では、プロセッサ１０２は、中央処理装置（ＣＰＵ）、グラフィックス処理装置（ＧＰＵ）、同じダイ上に配置されたＣＰＵ及びＧＰＵ、又は、１つ以上のプロセッサコアを含み、各プロセッサコアは、ＣＰＵ又はＧＰＵであってもよい。様々な代替形態では、メモリ１０４は、プロセッサ１０２と同じダイ上に配置されてもよいし、プロセッサ１０２とは別に配置されてもよい。メモリ１０４は、揮発性又は不揮発性のメモリ（例えば、ランダムアクセスメモリ（ＲＡＭ）、ダイナミックＲＡＭ若しくはキャッシュ）を含む。
【００１１】
ストレージ１０６は、固定又はリムーバブルストレージ（例えば、ハードディスクドライブ、ソリッドステートドライブ、光ディスク若しくはフラッシュドライブ等）を含む。入力デバイス１０８は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、バイオメトリクススキャナ、又は、ネットワーク接続（例えば、無線ＩＥＥＥ８０２信号の送信及び／若しくは受信用の無線ローカルエリアネットワークカード）を含むが、これらに限定されない。出力デバイス１１０は、ディスプレイ、スピーカ、プリンタ、触覚フィードバックデバイス、１つ以上の照明、アンテナ、又は、ネットワーク接続（例えば、無線ＩＥＥＥ８０２信号の送信及び／若しくは受信用の無線ローカルエリアネットワークカード）を含むが、これらに限定されない。
【００１２】
入力ドライバ１１２は、プロセッサ１０２及び入力デバイス１０８と通信し、プロセッサ１０２が入力デバイス１０８からの入力を受信することを可能にする。出力ドライバ１１４は、プロセッサ１０２及び出力デバイス１１０と通信し、プロセッサ１０２が出力デバイス１１０に出力を送信することを可能にする。入力ドライバ１１２及び出力ドライバ１１４は、オプションのコンポーネントであり、入力ドライバ１１２及び出力ドライバ１１４が存在しない場合には、デバイス１００が同様に動作することに留意されたい。出力ドライバ１１４は、ディスプレイデバイス１１８に接続されたアクセラレーテッド処理デバイス（ＡＰＤ）１１６を含む。ＡＰＤは、計算コマンド及びグラフィックスレンダリングコマンドをプロセッサ１０２から受信し、これらの計算コマンド及びグラフィックスレンダリングコマンドを処理し、ピクセル出力を表示のためにディスプレイデバイス１１８に提供するように構成されている。以下にさらに詳細に説明するように、ＡＰＤ１１６は、単一命令複数データ（ＳＩＭＤ）パラダイムに従って計算を実行するように構成された１つ以上の並列処理ユニットを含む。したがって、本明細書では、様々な機能がＡＰＤ１１６によって又はＡＰＤ１１６と連動して実行されるものとして説明しているが、様々な代替形態では、ＡＰＤ１１６によって実行されるものとして説明される機能は、ホストプロセッサ（例えば、プロセッサ１０２）によって駆動されず、グラフィックス出力をディスプレイデバイス１１８に提供するように構成された同様の機能を有する他のコンピューティングデバイスによって追加的又は代替的に実行される。例えば、ＳＩＭＤパラダイムに従って処理タスクを実行する任意の処理システムが、本明細書で説明する機能を実行するように構成されてもよいことが考えられる。或いは、ＳＩＭＤパラダイムに従って処理タスクを実行しないコンピューティングシステムが、本明細書で説明する機能を実行することが考えられる。
【００１３】
プロセッサ１０２は、複数の仮想マシンがプロセッサ１０２上で実行される仮想化スキームをサポートするように構成されている。各仮想マシン（ＶＭ）は、完全に「現実の」ハードウェアコンピュータシステムとしてそのＶＭで実行されるソフトウェアに「見える」が、実際には、デバイス１００を他の仮想マシンと共有することができる仮想コンピューティング環境を含む。仮想化は、ソフトウェアで完全にサポートされている場合もあれば、ハードウェアで部分的にサポートされ、ソフトウェアで部分的にサポートされている場合もあり、ハードウェアで完全にサポートされている場合もある。ＡＰＤ１１６は、プロセッサ１０２上で実行される複数の仮想マシン間で共有することができ、各ＶＭが、ＶＭが現実のハードウェアＡＰＤ１１６の完全な所有権を有していると「認識している」という意味で、仮想化をサポートする。
【００１４】
図２は、一例による、仮想化に関連するデバイス１００及びＡＰＤ１１６の詳細を示す図である。プロセッサ１０２は、複数の仮想マシンをサポートする。専用のホスト仮想マシン２０２は、ゲストＶＭ２０４のような「汎用」ＶＭではないが、その代わりに、ゲストＶＭ２０４が使用するためのＡＰＤ１１６の仮想化をサポートする。ハイパバイザ２０６は、仮想化サポートを仮想マシンに提供し、これは、仮想マシンに割り当てられたリソースを管理すること、仮想マシンを生成し終了すること、システムコールを処理すること、周辺デバイスへのアクセスを管理すること、メモリ及びページテーブルを管理すること、並びに、様々な他の機能等の多種多様な機能を含む。
【００１５】
ＡＰＤ１１６は、仮想マシン間でＡＰＤ１１６を時間ベースで共有するのを可能にすることによって、仮想化をサポートする。ＡＰＤ１１６では、ホストＶＭ２０２が物理機能（ＰＦ）２０８にマッピングされ、ゲストＶＭ２０４が仮想機能（ＶＦ）２１０にマッピングされる。「物理機能」は、基本的に、ＰＣＩエクスプレス（ＰＣＩｅ）規格におけるアドレス指定パラメータである。より具体的には、物理機能は、ＰＣＩｅ相互接続ファブリックに接続されたデバイスを含む通信がデバイスの特定の物理機能を指定するのを可能にし、これにより、デバイスは、その物理機能に具体的に割り当てられた機能に従って通信を処理することができる。一例では、物理機能は、ＡＰＤ１１６等のグラフィックス処理デバイス上の通常のグラフィックスレンダリングに関連している。本明細書では、単一の物理機能について説明しているが、本開示の教示は、複数の物理機能がアクティブなＡＰＤ１１６に適用される。
【００１６】
仮想機能は、ハードウェアの仮想化を促進するＰＣＩｅ規格の機能であり、ＰＣＩｅ規格におけるアドレス指定パラメータとしても機能する。典型的には、仮想機能のセットは、特定の物理機能に関連付けられる。各仮想マシンには異なる仮想機能が割り当てられ、ハイパバイザ２０６は、ＶＭと仮想機能との間の対応関係を管理している。ホストＶＭ２０２が物理機能２０８及び異なる仮想機能２１０にアクセス可能であることを除いて、仮想機能と仮想マシン２０２との間のこの対応関係は、図２のシステムにほぼ当てはまる。この意味において、ホストＶＭ２０２は、ＡＰＤ仮想化のための一種の「マスタ仮想マシン」として機能する。一部のシステムでは、ホストＶＭ２０２が存在せず、本明細書で説明するホストＶＭ２０２の機能は、代わりにハイパバイザ２０６によって実行される（これが、ＧＰＵ仮想化ドライバ１２１がハイパバイザ２０６内に点線で示されている理由である）。なお、本明細書では、仮想機能を仮想マシンに関連付ける場合について説明するが、物理機能を１つ以上の仮想マシンに関連付けることも可能である。通常、ホストＶＭ２０２は物理機能に「関連する」ものと考えられており、ゲストＶＭ２０４は仮想機能に関連するものと考えられている。仮想機能及び物理機能は、いくつかのコンテキストで同じように動作する場合があるため、指定子「仮想」又は「物理」内の「機能」という用語は、仮想機能若しくは物理機能の一方、又は、仮想機能及び物理機能の両方を総称して指す。例えば、いくつかの例では、ＡＰＤ１１６は機能間で動作を時分割し、このことは、ＡＰＤ１１６が異なる仮想機能間で時分割され、ＡＰＤ１１６上のタイムシェアリングに積極的に加わる場合には、ＡＰＤ１１６が物理機能であることを意味する。物理機能がこのタイムシェアリングに加わる必要はないが、このような物理機能が加わることは可能である。
【００１７】
上述したように、物理機能及び仮想機能は、ＰＣＩｅのアドレス指定パラメータである。したがって、ＰＣＩｅを介したトランザクションは、物理機能と、オプションで追加的に仮想機能と、に関連付けられる。ＰＣＩｅを介したアドレス指定は、バスデバイス機能番号パラダイムによって明示的に行うことができるが、このアドレス指定パラダイムは、通常、デバイス構成（例えば、ＰＣＩｅデバイスの列挙）又は他の状況のために予約されている。より典型的には、標準動作では、ＰＣＩｅを介したトランザクションは、メモリアドレスによって行われ、ＰＣＩｅファブリックは、メモリマップに基づいて、トランザクションを、適切なデバイスと物理機能又は／又は仮想機能とにルーティングする。このシナリオでは、ＶＭはメモリアドレスにアクセスし、ハイパバイザ又は変換レイヤは、提供されたメモリアドレス（ゲスト物理メモリアドレス空間内に存在する）を、ＡＰＤ１１６にマッピングされたシステム物理メモリアドレス空間内のアドレスに変換する。この変換されたアドレスは、仮想機能の指標を明示的に含まないが、メモリマップを介して特定の仮想機能にマッピングされ、ＰＣＩｅファブリックのルーティング機能によって当該仮想機能にルーティングされる。メモリマップアドレスを介して行われるＰＣＩｅを介したトランザクションは、仮想機能番号又は物理機能番号を明示的に指定しない。
【００１８】
本開示は、ゲスト及びシステムの物理アドレス空間に関する言及を含む。次に、これらのアドレス空間の関係について説明する。システム物理アドレス空間は、デバイス１００の「真の」物理アドレス空間である。ハイパバイザ２０６は、このアドレス空間にアクセスすることができるが、このアドレス空間は、ＶＭから隠されている。ゲスト物理アドレス空間は、特定のゲストＶＭ２０４が「見える」ように仮想化された「物理」アドレス空間である。換言すれば、ゲストＶＭ２０４にとっては、ゲスト物理アドレス空間が実際の物理アドレス空間であるように見える。第３アドレス空間（ゲスト仮想メモリ）は、コンピュータシステムに存在するが、ＶＭの仮想化環境に存在する典型的な仮想メモリアドレス空間を表す。システム物理アドレス空間とゲスト物理アドレス空間との間のマッピングは、ハイパバイザ２０６によって管理され、ゲスト仮想アドレス空間とゲスト物理アドレス空間との間のマッピングは、オペレーティングシステム１２０によって管理されるが、デバイス１００の他の部分（ハードウェアベースのページテーブルウォーカ、変換キャッシュ、又は、他の要素等）が、別々のアドレス空間の間のマッピングの管理に関与してもよい。
【００１９】
別々の仮想マシン間でＡＰＤ１１６を共有することは、別々の仮想マシン間でＡＰＤ１１６の動作を時分割し、別々の仮想マシンに別々の仮想機能（又は、物理機能）を割り当てることによって達成される。仮想化スケジューラ２１２は、ＡＰＤ１１６のタイムシェアリングに関するワークを実行し、仮想マシンに割り当てられた実行時間の経過に応じて、現在の仮想マシンのワークから切り替えて新たな仮想マシンを動作させるスケジューリングを行う。ＡＰＤ１１６は、別々の仮想マシン間で共有されるが、各仮想マシンは、現実のハードウェアＡＰＤ１１６の個々のインスタンスを有しているものと認識する。
【００２０】
「仮想機能」及び「物理機能」という用語は、ＰＣＩｅ規格におけるアドレス指定パラメータを指すが、これらの機能は別々のＶＭにマッピングされることから、本明細書では、特定の仮想マシンに割り当てられたＡＰＤ１１６の論理インスタンスも、仮想機能又は物理機能と呼ばれる。換言すれば、本開示は、例えば、「仮想機能（又は物理機能）がタスクを実行する」、「動作が仮想機能（又は物理機能）に対して実行される」等の用語を使用することができ、この用語は、ＡＰＤ１１６が、その特定の仮想機能若しくは物理機能に関連するＶＭ、又は、そのＶＭの代わりに割り当てられたタイムスライスの間、そのタスクを実行することを意味すると解釈されるべきである。
【００２１】
ホストＶＭ２０２及びゲストＶＭ２０４は、オペレーティングシステム１２０を有する。ホストＶＭ２０２は、管理アプリケーション１２３と、ＧＰＵ仮想化ドライバ１２１と、を有する。ゲストＶＭ２０４は、アプリケーション１２６と、オペレーティングシステム１２０と、ＧＰＵドライバ１２２と、を有する。これらの要素は、プロセッサ１０２及びＡＰＤ１１６の動作の様々な機能を制御する。
【００２２】
上述したように、ホストＶＭ２０２は、ゲストＶＭ２０４のためのＡＰＤ１１６における仮想化の態様を構成する。したがって、ホストＶＭ２０２は、管理アプリケーション１２３及びＧＰＵ仮想化ドライバ１２１等の他の要素の実行をサポートするオペレーティングシステム１２０を含む。ＧＰＵ仮想化ドライバ１２１は、ＡＰＤ１１６の仮想化の態様を理解することなく、単にグラフィックスレンダリング（又は、他の）コマンドと通信してＡＰＤ１１６に送信する従来のグラフィックスドライバではない。代わりに、ＧＰＵ仮想化ドライバ１２１は、ＡＰＤ１１６と通信して、仮想化のためにＡＰＤ１１６の様々な態様を構成する。一例では、ＧＰＵ仮想化ドライバ１２１は、異なるＶＭ間でＡＰＤ１１６を共有するためのタイムスライシングメカニズムに関連するパラメータを管理して、例えば、各タイムスライスの時間の長さ、異なる仮想機能間でのスイッチング方法等のパラメータを制御する。ＧＰＵ仮想化ドライバ１２１は、従来のグラフィックスレンダリングコマンドをＡＰＤ１１６に発行してもよいし、ＡＰＤ１１６の構成に直接関係しない他のタスクを実行してもよいことに留意されたい。管理アプリケーション１２３は、仮想化を管理するための１つ以上のタスク、及び／又は、複数の異なるゲストＶＭ２０４からのデータを含む１つ以上のタスクを実行する。一例では、ホストＶＭ２０２は、管理アプリケーション１２３を介してデスクトップ合成機能を実行する。デスクトップ合成機能は、異なるゲストＶＭ２０４からレンダリングされたフレームにアクセスし、これらのフレームを単一の出力ビューに合成する。
【００２３】
ゲストＶＭ２０４は、オペレーティングシステム１２０と、ＧＰＵドライバ１２２と、アプリケーション１２６と、を含む。オペレーティングシステム１２０は、プロセッサ１０２上で実行可能な任意のタイプのオペレーティングシステムである。ＧＰＵドライバ１２２は、ＧＰＵドライバ１２２が実行しているゲストＶＭ２０４用のＡＰＤ１１６の動作を制御し、グラフィックスレンダリングタスク又は他のワーク等のタスクをＡＰＤ１１６に送信して処理する、という点において、ＡＰＤ１１６用の「ネイティブ」ドライバである。ネイティブドライバは、必要最小限（bare-bones）の非仮想化コンピューティングシステムに存在するＧＰＵ用のデバイスドライバの未修正又は僅かに修正されたバージョンであってもよい。
【００２４】
ＧＰＵ仮想化ドライバ１２１は、ホストＶＭ２０２内に含まれるものとして説明されているが、他の実施態様では、ＧＰＵ仮想化ドライバ１２１は、代わりにハイパバイザ２０６に含まれる。このような実施態様では、ホストＶＭ２０２が存在せず、ホストＶＭ２０２の機能は、ハイパバイザ２０６によって実行されてもよい。
【００２５】
ホストＶＭ２０２及びゲストＶＭ２０４のオペレーティングシステム１２０は、ハードウェアと通信することと、リソース及びファイルシステムを管理することと、仮想メモリを管理することと、ネットワークスタックを管理することと、他の多くの機能等と、の仮想化環境におけるオペレーティングシステムの標準的な機能を実行する。ＧＰＵドライバ１２２は、例えば、ＡＰＤ１１６の様々な機能にアクセスするために、アプリケーションプログラミングインタフェース（ＡＰＩ）をソフトウェア（例えば、アプリケーション１２６）に提供することによって、任意の特定のゲストＶＭ２０４用のＡＰＤ１１６の動作を制御する。ドライバ１２２は、ＡＰＤ１１６のコンポーネント（例えば、以下により詳細に説明するＳＩＭＤユニット１３８等）を処理することによって、実行されるプログラムをコンパイルするジャストインタイムコンパイラも含む。任意の特定のゲストＶＭ２０４に関して、ＧＰＵドライバ１２２は、他のＶＭ用ではなく、当該ゲストＶＭ２０４に関連するＡＰＤ１１６上の機能を制御する。
【００２６】
ＡＰＤ１１６は、例えば、グラフィックス動作及び非グラフィックス動作等のように並列処理に適している選択された機能のためのコマンド及びプログラムを実行する。ＡＰＤ１１６は、ピクセル演算、幾何学的計算等のグラフィックスパイプライン処理を実行し、プロセッサ１０２から受信したコマンドに基づいてディスプレイデバイス１１８に画像をレンダリングするために使用することができる。ＡＰＤ１１６は、プロセッサ１０２から受信したコマンドに基づいて、ビデオ、物理シミュレーション、計算流体力学、又は、他のタスクに関連する動作等のように、グラフィックス処理に直接関連しない計算処理動作も実行する。コマンドプロセッサ２１３は、プロセッサ１０２（又は、別のソース）からコマンドを受信し、これらのコマンドに関連するタスクを、グラフィックス処理パイプライン１３４及び計算ユニット１３２等のＡＰＤ１１６の様々な要素に委任する。ＶＭは、ドアベルメモリ２１４を用いて、ドアベルメカニズムを介して実行される新たなタスクに関してＡＰＤ１１６に通知する。
【００２７】
ＡＰＤ１１６は、ＳＩＭＤパラダイムに従う並列方式で、プロセッサ１０２の要求に応じて動作を実行するように構成された１つ以上のＳＩＭＤユニット１３８を有する計算ユニット１３２を含む。ＳＩＭＤパラダイムは、複数の処理要素が単一のプログラム制御フローユニット及びプログラムカウンタを共有し、これにより、同じプログラムを実行するが、異なるデータを用いてそのプログラムを実行することができるというものである。一例では、各ＳＩＭＤユニット１３８は、１６のレーンを含み、各レーンは、ＳＩＭＤユニット１３８内の他のレーンと同時に同じ命令を実行するが、異なるデータを用いて当該命令を実行することができる。全てのレーンが所定の命令を実行する必要がない場合、予測を用いてレーンをオフに切り替えることができる。予測は、分岐する制御フローを有するプログラムを実行するために使用することができる。具体的には、制御フローが個々のレーンによって実行される計算に基づく、条件分岐又は他の命令を含むプログラムの場合、現在実行されていない制御フローパスに対応するレーンの予測及び異なる制御フローパスの連続実行は、任意の制御フローを可能にする。
【００２８】
計算ユニット１３２における実行の基本単位は、ワークアイテムである。各ワークアイテムは、特定のレーンで並列に実行されるプログラムの単一インスタンス化を表す。ワークアイテムは、単一のＳＩＭＤ処理ユニット１３８上で「ウェーブフロント」として同時に実行され得る。１つ以上のウェーブフロントは、同じプログラムを実行するように指定されたワークアイテムの集合を含む「ワークグループ」に含まれる。ワークグループは、ワークグループを構成するウェーブフロントの各々を実行することによって実行され得る。或いは、ウェーブフロントは、単一のＳＩＭＤユニット１３８上で順次実行されてもよいし、異なるＳＩＭＤユニット１３８上で部分的又は完全に並行に実行されてもよい。ウェーブフロントは、単一のＳＩＭＤユニット１３８上で同時に実行可能なワークアイテムの最大集合と考えることができる。したがって、プロセッサ１０２から受信したコマンドは、特定のプログラムが単一のＳＩＭＤユニット１３８上で同時に実行できない程度に並列化されることを示す場合、当該プログラムは、複数のＳＩＭＤユニット１３８上で並列化されるか、同じＳＩＭＤユニット１３８上で直列化される（又は、必要に応じて並列化と直列化の両方が行われる）ウェーブフロントに分割される。スケジューラ１３６は、異なる計算ユニット１３２及びＳＩＭＤユニット１３８上で様々なウェーブフロントをスケジューリングすることに関連する動作を実行するように構成されている。
【００２９】
計算ユニット１３２によって与えられる並列処理は、ピクセル値計算、頂点変換、及び、他のグラフィックス動作等のグラフィック関連動作に適している。したがって、いくつかの場合では、プロセッサ１０２からグラフィックス処理コマンドを受信するグラフィックスパイプライン１３４は、計算タスクを、並列実行するために計算ユニット１３２に提供する。
【００３０】
計算ユニット１３２は、グラフィックスに関連しない、又は、グラフィックスパイプライン１３４の「通常」動作（例えば、グラフィックスパイプライン１３４の動作のために実行される処理を補助するために実行されるカスタム動作）の一部として実行されない計算タスクを実行するために使用される。プロセッサ１０２上で実行されるアプリケーション１２６又は他のソフトウェアは、このような計算タスクを定義するプログラムを、実行のためにＡＰＤ１１６に送信する。
【００３１】
ＡＰＤ１１６上で新たなワークを実行する準備ができているという通知は、ドアベルメカニズムを介して行われる。具体的には、エンティティ（プロセッサ１０２等）は、新たなワークの準備ができたことをＡＰＤ１１６に通知するために、ドアベルをドアベルメモリ２１４に書き込む。ドアベルは、フェッチされ処理されるコマンドのメモリアドレスを示すコマンドバッファへのポインタを含む。
【００３２】
一実施態様では、ドアベルは、循環バッファの先頭のアドレスを含む。末尾のアドレスは、ＡＰＤ１１６によって個別に維持される。先頭ポインタと末尾ポインタとが等しい場合、フェッチされる新たなコマンドはない。エンティティが、末尾ポインタよりも大きい先頭ポインタを含むドアベルを書き込むと、フェッチされるコマンドは、先頭と末尾との間のアドレスで検出される。ＡＰＤ１１６は、コマンドバッファ内のコマンドを実行し、コマンドがフェッチされる際に末尾ポインタを調整する。先頭ポインタと末尾ポインタとが再び等しくなる場合、コマンドバッファで使用できる新たなコマンドはない。この実施態様では、ドアベルは、ワークを実行する準備ができているという通知と、コマンドが検出されたメモリアドレスの指標と、の両方として機能する。オプションで、ドアベルメモリ２１４に書き込まれたドアベルは、そのドアベルによって示されたワークが完了した場合、又は、新たなドアベルがドアベルメモリ２１４に書き込まれた場合に、処理済みとしてマークされる。他の実施態様では、ドアベルは、ワークがフェッチされて実行される準備ができているという指標としてのみ機能し、そのワークの場所の指標は、ドアベルによって提供される値とは別に決定される。さらに他の実施態様では、ドアベルは、任意の代替又は追加の目的に応えることができる。
【００３３】
ドアベルメカニズムは、何れの仮想マシンがＡＰＤ１１６上でのワークのために現在スケジュールされているかに関して非同期に動作する。これは、ドアベルをドアベルメモリ２１４に配置したＶＭ以外のＶＭのタスクがＡＰＤ１１６上で実行されている場合に、特定の仮想マシンがドアベルをドアベルメモリ２１４に配置してもよいことを意味する。この非同期動作は、ドアベルが、プロセッサ１０２上で実行されるソフトウェア（例えば、ＶＭ上で実行されるソフトウェア）によって実行されるために発生し、このソフトウェアは、ＡＰＤ１１６上のタイムスライスワークと比較して、独立してスケジュールされる。
【００３４】
上述したように、仮想化スケジューラ２１２は、異なる仮想マシン間でのＡＰＤ１１６のタイムシェアリングを管理する。各タイムスライスにおいて、仮想化スケジューラ２１２は、そのタイムスライスに関連する仮想マシンのワークをＡＰＤ１１６で進行させる。仮想化スケジューラ２１２は、ＡＰＤ１１６を共有するＶＭ（ホストＶＭ２０２及びゲストＶＭ２０４の両方）について、ＡＰＤ１１６上でタイムスライスを管理する。仮想化スケジューラ２１２は、タイムスライスを追跡し、特定のＶＭのタイムスライスが満了したときにＡＰＤ１１６上のワークを停止し、次のタイムスライスを有するＶＭのワークを開始する。したがって、仮想化スケジューラ２１２は、ＡＰＤ１１６上で実行されるワークを有する異なるＶＭ間の切り替えを行う。異なるＶＭ間の切り替え動作は、本明細書では「仮想化コンテキストスイッチ」と呼ばれる。仮想化スケジューラは、スケジューリングスキームに基づいて、異なるＶＭを選択してワークを実行する。一例では、スケジューリングスキームは、ラウンドロビンスキームである。このようなスキームでは、各ＶＭにはＡＰＤ１１６上の順番が与えられ、ＶＭが順番を与えられる順序が繰り返される。他の技術的に実現可能なスケジューリングスキームも、もちろん可能である。
【００３５】
特定のＶＭに関連付けられた特定のタイムスライスに関するワークを開始するために、仮想化スケジューラ２１２は、コマンドプロセッサ２１３に、グラフィックス処理パイプライン１３４及び／又は汎用計算ワークのためのコマンドを、特定のＶＭのドアベルメモリ２１４によって指定されたアドレスからフェッチさせる。次に、コマンドプロセッサ２１３は、これらのコマンドをＡＰＤ１１６に実行させる。フェッチされたコマンドは、ドアベルメモリ２１４に記憶されたドアベルによって示される。
【００３６】
仮想化スケジューラ２１２は、ＡＰＤ１１６上で現在実行されているワークを有するＶＭのタイムスライスが満了したと判別した場合、ＡＰＤ１１６に、新たなワークを受け入れることなくそのワークを完了させる（例えば、ドアベルメモリ２１４に記憶されたドアベルによって指し示される新たなタスクを受け入れないが、グラフィックス処理パイプライン１３４及び／又は計算ユニット１３２内で既に「インフライト」のタスクを完了させる）。ワークを完了させることは、ＡＰＤ１１６内で現在インフライトのワークを、完了させ、ターゲットメモリ位置に書き込まれた最終的な出力値を有するのを可能にすることを含む。例えば、グラフィックスレンダリングの場合、出力ピクセルは、フレームバッファ（又は、他のレンダーターゲット）に書き込まれる。或いは、場合によっては、タスクを完了する代わりに、進行中のタスクの状態を保存し、機能／ＶＭがＡＰＤ１１６上で再び「順番」を取得したときに再び復元してもよい。
【００３７】
特定のＶＭについてのワークが完了した後、仮想化スケジューラ２１２は、次のＶＭについてのタイムスライスに進み、コマンドプロセッサ２１３に、ドアベルメモリ２１４の内容に基づいて当該ＶＭのタスクをフェッチさせ、グラフィックス処理パイプライン１３４上及び／又は計算ユニット１３２においてこれらのタスクを実行させる（例えば、汎用コンピューティングを目的として）。満了したタイムスライスに関するワークの実行を停止し、次のＶＭについてのワークを開始するこのプロセスは、ＡＰＤ１１６のタイムシェアリングを異なるＶＭに提供するために、繰り返し実行される。
【００３８】
仮想化コンテキストスイッチは、あるＶＭについてのワークを停止して別のＶＭについてのワークを開始することに加えて、スイッチ元のＶＭの状態を保存し、スイッチ先のＶＭの状態をロードすることも含む。概して、状態は、ＡＰＤ１１６のために実行されるワークフローの態様を管理するＡＰＤ１１６の全体を通して又はＡＰＤ１１６のために記憶された値を含む。様々な例では、状態は、グラフィックスがどのようにレンダリングされるか、ＳＩＭＤワークがどのように実行されるか、シェーダがどのように実行されるかを制御し、ＡＰＤ１１６上の動作の様々な他の態様を制御するレジスタに記憶された値を含むことができる。状態を保存することは、状態を、使用中の位置（状態値が実際にＡＰＤ１１６の動作に影響する位置）から、ＶＭの状態を保存する位置に書き込むことを含む。状態をロードすることは、状態を、ＶＭの状態を保存する位置から使用中の位置にロードすることを含む。いくつかの実施態様では、状態を保存する位置は、メモリ（ＡＰＤ１１６上の汎用メモリ等）内にあり、使用中の位置は、ＡＰＤ１１６内のレジスタ、専用メモリ等の様々なメモリ要素を含む。
【００３９】
なお、仮想化の文脈において機能が具体的に説明されていないＡＰＤ１１６の他の部分は、上述したように、コマンドプロセッサ２１３によってフェッチされたコマンドを実行するように仮想化が発生していないかのように動作することに留意されたい。例えば、グラフィックス処理パイプライン１３４は、コマンドプロセッサ２１３によってフェッチされたグラフィックスレンダリングコマンドに応じて、グラフィックスレンダリングに関連する動作を実行する。グラフィックス処理パイプライン１３４に関連するグラフィックスレンダリングコマンドの少なくとも一部、及び／又は、汎用計算動作のために、ＳＩＭＤスケジューラ１３６は、コマンドプロセッサ２１３によって処理されるコマンドに従って、計算ユニット１３２のＳＩＭＤユニット１３８上で実行されるウェーブフロントを生成及び管理する。一例では、コマンドは、グラフィックス処理パイプライン１３４の他の機能のうち特定のピクセルシェーダプログラムを用いて、ジオメトリの特定の部分をレンダリングするためのコマンドである。グラフィックス処理パイプライン１３４は、入力アセンブラステージ３０２と、ハルシェーダステージ３０６と、テッセレータステージ３０８等と、のグラフィックス処理パイプライン１３４の様々なステージを通してジオメトリを処理し、ピクセルシェーダステージ３１６において、ＳＩＭＤユニット１３８上で特定のピクセルシェーダを用いてジオメトリを処理させる。ＳＩＭＤスケジューラ１３６は、実行のためにピクセルシェーダのウェーブフロントを管理し、スケジューリングする。
【００４０】
図３は、図２に示すグラフィックス処理パイプライン１３４の追加の詳細を示すブロック図である。グラフィックス処理パイプライン１３４は、各々が特定の機能を実行するステージを含む。ステージは、グラフィックス処理パイプライン１３４の機能の小区分を表す。各ステージは、計算ユニット１３２において実行されるシェーダプログラムとして、又は、計算ユニット１３２の外部の固定機能のプログラム不可能なハードウェアとして、部分的に若しくは完全に実装される。
【００４１】
入力アセンブラステージ３０２は、ユーザが充填したバッファ（例えば、プロセッサ１０２によって実行されるアプリケーション１２６等のソフトウェアの要求によって充填されるバッファ）からプリミティブデータを読み出し、当該データを、パイプラインの残りの部分によって使用されるプリミティブにアセンブルする。入力アセンブラステージ３０２は、ユーザが充填したバッファに含まれるプリミティブデータに基づいて、異なるタイプのプリミティブを生成することができる。入力アセンブラステージ３０２は、パイプラインの残りの部分で使用するために、アセンブルされたプリミティブをフォーマットする。
【００４２】
頂点シェーダステージ３０４は、入力アセンブラステージ３０２によってアセンブルされたプリミティブの頂点を処理する。頂点シェーダステージ３０４は、変換、スキニング、モーフィング及び頂点毎のライティング等の様々な頂点毎の操作を実行する。変換操作は、頂点の座標を変換するための様々な操作を含むことができる。これらの操作には、モデリング変換、表示変換、投影変換、パースペクティブ分割及びビューポート変換のうち１つ以上が含まれてもよい。本明細書では、このような変換は、変換が実行される頂点の座標、つまり「位置」を変更するものとみなされる。頂点シェーダステージ３０４の他の操作によって、座標以外の属性が変更されてもよい。
【００４３】
頂点シェーダステージ３０４は、１つ以上の計算ユニット１３２上で実行される頂点シェーダプログラムとして部分的に又は完全に実装される。頂点シェーダプログラムは、プロセッサ１０２によって提供され、コンピュータプログラマによって事前に書かれたプログラムに基づいている。ドライバ１２２は、このようなコンピュータプログラムをコンパイルして、計算ユニット１３２内での実行に適したフォーマットを有する頂点シェーダプログラムを生成する。
【００４４】
ハルシェーダステージ３０６、テッセレータステージ３０８及びドメインシェーダステージ３１０は、連携してテッセレーションを実施し、プリミティブを更に分割することによって、単純なプリミティブをより複雑なプリミティブに変換する。ハルシェーダステージ３０６は、入力プリミティブに基づいてテッセレーションのためのパッチを生成する。テッセレータステージ３０８は、パッチのサンプルセットを生成する。ドメインシェーダステージ３１０は、パッチのサンプルに対応する頂点の頂点位置を計算する。ハルシェーダステージ３０６及びドメインシェーダステージ３１０は、計算ユニット１３２上で実行されるシェーダプログラムとして実装することができる。
【００４５】
ジオメトリシェーダステージ３１２は、プリミティブ毎に頂点操作を実行する。ジオメトリシェーダステージ３１２によって、例えば、ポイントスプライト展開、動的パーティクルシステム操作、ファーフィン（fur-fin）生成、シャドウボリューム生成、キューブマップへのシングルパスレンダリング、プリミティブ毎のマテリアルスワップ、プリミティブ毎のマテリアル設定等の操作を含む、様々な異なるタイプの操作を実行することができる。いくつかの例では、計算ユニット１３２上で実行されるシェーダプログラムは、ジオメトリシェーダステージ３１２の操作を実行する。
【００４６】
ラスタライザステージ３１４は、上流で生成された単純なプリミティブを受け入れてラスタライズする。ラスタライズは、特定のプリミティブによってカバーされているスクリーンピクセル（又は、サブピクセルサンプル）を判別することから構成されている。ラスタライズは、固定機能ハードウェアによって実行される。
【００４７】
ピクセルシェーダステージ３１６は、上流で生成されたプリミティブとラスタライズの結果とに基づいて、スクリーンピクセルの出力値を計算する。ピクセルシェーダステージ３１６は、テクスチャをテクスチャメモリから適用することができる。ピクセルシェーダステージ３１６の操作は、計算ユニット１３２上で実行されるシェーダプログラムによって実行される。
【００４８】
出力マージャステージ３１８は、ピクセルシェーダステージ３１６からの出力を受信し、これらの出力を結合（マージ）し、ｚテスト及びアルファブレンディング等の操作を行うことによって、スクリーンピクセルの最終色を決定する。
【００４９】
図２を再び参照すると、場合によっては、現在の機能は、その機能のタイムスライスに割り当てられた時間が満了して「アイドル状態」になる前に、ワークを終了する。このシナリオでは、いくつかの場合に、仮想化スケジューラ２１２は、仮想化コンテキストスイッチを「早期」に実行する。具体的には、仮想化スケジューラ２１２は、アイドル状態の学習後、タイムスライスが終了する前に、仮想化コンテキストを現在の機能から次の機能に切り替える。仮想化コンテキストスイッチを早期に実行する目的は、現在の機能で実行するワークがなくなった場合に、他の機能がワークを実行できるようにすることである。現在の機能のタイムスライスの残り時間の間、ＡＰＤ１１６をアイドル状態にする代わりに、次の機能への仮想化コンテキストスイッチを実行することによって、ＡＰＤ１１６のリソースは、アイドル状態ではなく有用なワークを実行するために使用される。仮想化スケジューラ２１２は、現在の機能がアイドル状態であることを学習した時点で、仮想化コンテキストスイッチを早期に実行することに加えて、早期仮想化コンテキストスイッチが実行されてから当該機能が何のワークも受信していない場合、その後続の次の順番をスキップすることもできる。機能がワークを受信したかどうかは、本開示を通して説明したドアベルメカニズムを介して判別される。
【００５０】
図４は、一例による、早期仮想化コンテキストスイッチの実行に関連するデバイス１００の特徴的な機能を示すブロック図である。デバイス１００の多くの要素が図４に示されており、図４は、仮想化スケジューラ２１２内に含まれるものとして示される早期仮想化コンテキストスイッチユニット４０２を示している。早期仮想化コンテキストスイッチユニット４０２は、ハードウェア、ソフトウェア、又は、これらの任意の組み合わせで実装することができる。また、早期仮想化コンテキストスイッチユニット４０２は、仮想化スケジューラ２１２内に示されているが、本開示は、早期仮想化コンテキストスイッチユニット４０２の機能を実行するコンポーネントの物理的配置を制限するものとして解釈されることを意図していないことに留意されたい。図５は、一例による、早期仮想化コンテキストスイッチを実行する方法のフロー図である。図５の動作を、図１〜図４のシステムに関して説明するが、図示したステップで、又は、任意の他の技術的に実行可能な順序で、任意のシステムによって実行される方法５００は、本発明の範囲内にあることを理解されたい。図４及び図５を以下にまとめて説明する。
【００５１】
早期仮想化コンテキストスイッチユニット４０２は、グラフィックス処理パイプライン１３４の状態、又は、計算のみのワークの場合にはＳＩＭＤスケジューラ１３６及び計算ユニット１３２の状態に基づいて、「早期仮想化コンテキストスイッチ」をいつ実行するのが適切かを判別するために、コマンドプロセッサ２１３と通信及び調整する。グラフィックスパイプライン１３４の状態は、少なくともいくつかの場合にはＳＩＭＤスケジューラ１３６の状態を含むが、非グラフィックス計算ワークが未処理である場合には、早期仮想化コンテキストスイッチを実行するかどうかの判別は、グラフィックス処理パイプライン１３４の状態に代わり又はこれに加えて、ＳＩＭＤスケジューラ１３６及び計算ユニット１３２の状態に依存する。
【００５２】
コマンドプロセッサ２１３は、ＡＰＤ１１６上でワークを実行する要求を受信し、グラフィックス処理パイプライン１３４及び／又はＳＩＭＤスケジューラ１３６にワークをディスパッチするエンティティである。より広く見れば、コマンドプロセッサ２１３は、グラフィックス処理パイプライン１３４及びＳＩＭＤスケジューラ１３６上でワークフローをハイレベルで制御する。このワークフロー制御の一部として、コマンドプロセッサ２１３は、グラフィックス処理パイプライン１３４及びＳＩＭＤスケジューラ１３６の様々なサブユニットからワーク完了のレポートを受信する。より具体的には、コマンドプロセッサ２１３は、グラフィックス処理パイプライン１３４又はＳＩＭＤスケジューラ１３６上の未処理のワークについては、このようなワークが完了したときに通知を受信する。また、コマンドプロセッサ２１３は、グラフィックス処理パイプライン１３４及びＳＩＭＤスケジューラ１３６において、何れのワークが未処理であるかを追跡する。ワーク完了のレポートを未処理ワークの追跡と相関させることによって、コマンドプロセッサ２１３は、グラフィックス処理パイプライン１３４及びＳＩＭＤスケジューラ１３６がアイドル状態であるか、又は、ワークを実行しているかを示す情報を追跡する。計算ユニット１３２上に未処理のワークがない場合に、ＳＩＭＤスケジューラ１３６は、アイドル状態であるとみなされる。したがって、計算ユニット１３２における機能のコーディネータとしてのＳＩＭＤスケジューラ１３６の役割により、「ＳＩＭＤスケジューラ１３６がアイドル状態である」というフレーズにおいて、ＳＩＭＤスケジューラ１３６は、計算ユニット１３２のプロキシとして機能する。一例では、グラフィックス処理パイプライン１３４及びＳＩＭＤスケジューラ１３６上で未処理のワークが全て完了すると、コマンドプロセッサ２１３は、グラフィックス処理パイプライン１３４及びＳＩＭＤスケジューラ１３６がアイドル状態であるとみなす。
【００５３】
グラフィックス処理パイプライン１３４及びＳＩＭＤスケジューラ１３６がアイドル状態であっても、コマンドプロセッサ２１３が処理するワークが存在し得る。例えば、グラフィックス処理パイプライン１３４及びＳＩＭＤスケジューラ１３６は、コマンドプロセッサ２１３が、処理される新たなドアベルがあることを検出すると、アイドル状態になる場合がある。したがって、ＡＰＤ１１６は、グラフィックス処理パイプライン１３４及びＳＩＭＤスケジューラ１３６がアイドル状態になり、処理されるのを待っている又は現在処理されているドアベルがなくなるまで、完全にアイドル状態であるとはみなされない。コマンドプロセッサ２１３は、このような状態が発生したことを検出すると、図５のステップ５０２で表される「アイドル状態決定」を行ったとみなされる。
【００５４】
コマンドプロセッサ２１３は、「アイドル状態決定」を行うと、このアイドル状態決定を仮想化スケジューラ２１２に提供する。仮想化スケジューラ２１２は、この通知を受信すると、早期仮想化コンテキストスイッチ判別シーケンスを開始する。早期仮想化コンテキストスイッチ判別シーケンスは、いくつかの機能を実行して、早期仮想化コンテキストスイッチ（現在の機能のタイムスライスに割り当てられた時間より前の仮想化コンテキストスイッチ）を発生すべきかどうかを判別し、早期仮想化コンテキストスイッチを発生すべき場合に、早期仮想化コンテキストスイッチを実行する。
【００５５】
一実施態様では、早期仮想化コンテキストスイッチ判別は、コマンドプロセッサ２１３からアイドル状態指標を受信した後にタイムアウト期間の間待機し、このタイムアウト期間内にドアベルを受信したかどうかを判別することを含む（この判別は、図５のステップ５０４として示されている）。このタイムアウト期間中に現在の機能のドアベルがＡＰＤ１１６に到達していない場合、仮想化スケジューラは、早期仮想化コンテキストスイッチを開始する（ステップ５０８）。早期仮想化コンテキストスイッチは、実質的に、本開示の他の箇所で説明する「通常の」仮想化コンテキストスイッチとして実行され、現在の機能の状態の保存、次の機能の状態のロード、及び、次の機能のためのワークの実行開始を含む。
【００５６】
また、早期仮想化コンテキストスイッチを開始することは、コマンドプロセッサ２１３にコマンドを送信して、タイムアウト期間が終了した後に受信したドアベルメモリ２１４内のドアベルに基づいて、ワークのフェッチを停止することを含む。仮想化スケジューラ２１２が、タイムアウト期間内にドアベルを受信していないと判別して、ワークのフェッチを停止するためにコマンドプロセッサ２１３にコマンドを送信する時間と、コマンドプロセッサ２１３が当該コマンドを受信して、ワークのフェッチを停止する時間と、の間には、僅かな遅延がある。コマンドプロセッサ２１３は、この遅延期間中にドアベルを受信すると、当該ドアベルを無視し、又は、コマンドプロセッサ２１３が当該ドアベルに基づいてワークのフェッチを開始した場合には、かかるフェッチを中断する。この中断は、コマンドプロセッサ２１３に関連する状態を、コマンドプロセッサ２１３がこのようなドアベルの処理を開始する前の状態にリセットすることを含む。例えば、ドアベルによって示されるコマンドバッファへのポインタ（例えば、末尾ポインタ）が、ドアベルを処理するように更新される場合、コマンドプロセッサ２１３は、このようなポインタを、ドアベルを処理する前の値にリセットする。
【００５７】
ステップ５０４を再び参照すると、タイムアウト期間中にＡＰＤ１１６によってドアベルが受信された場合、方法５００はステップ５０６に進む。ステップ５０６において、仮想化スケジューラ２１２は、現在の機能のタイムスライスに「有意な」時間が残っているかどうかを判別する。「有意な」時間とは、閾値を超える時間のことである。一実施態様では、閾値は、ＡＰＤ１１６がアイドル状態になった後にドアベルが受信されかどうかをコマンドプロセッサ２１３が判別する遅延期間に等しい（又は、ほぼ等しい）。現在のタイムスライスに残っている時間が閾値遅延期間よりも長い場合、方法５００はステップ５１０に進み、仮想化スケジューラ２１２は、早期仮想化コンテキストスイッチを発生させず、代わりに、ドアベルによって参照されるワークをＡＰＤ１１６が処理できるようにする。ステップ５０６を再び参照すると、現在のタイムスライスに閾値よりも長い時間が残っていない場合、方法５００はステップ５０８に進み、仮想化スケジューラ２１２が早期仮想化コンテキストスイッチを実行する。
【００５８】
ある機能の仮想化コンテキストスイッチを実行した後に、当該機能が再び機能の順番になったが、ドアベルが受信されていない場合、仮想化スケジューラ２１２は、当該機能をスキップし、代わりに別の機能（スケジューリングスキームにおける「次の」機能等）に関するワークをスケジューリングする。
【００５９】
上記の説明では、「早期仮想化コンテキストスイッチ」という用語のうち「早期」という言葉は、現在の機能に割り当てられた時間が経過する前に仮想化コンテキストスイッチが発生することを示すものであることを意図している。
【００６０】
本明細書の開示に基づいて多くの変形が可能であることを理解されたい。例えば、本明細書では、ＰＣＩｅを特定の相互接続ファブリックとして説明したが、他の技術的に実現可能な相互接続ファブリックを代わりに使用してもよい。機能及び要素は、特定の組み合わせで上述したように説明されているが、各機能又は要素は、他の機能や要素なしに単独で使用されてもよいし、他の機能や要素を伴って若しくは伴わずに様々な組み合わせで使用されてもよい。
【００６１】
提供された方法は、汎用コンピュータ、プロセッサ又はプロセッサコアにおいて実施されてもよい。適切なプロセッサには、例として、汎用プロセッサ、専用プロセッサ、従来のプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、複数のマイクロプロセッサ、ＤＳＰコアに関連する１つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）回路、任意の他のタイプの集積回路（ＩＣ）、及び／又は、ステートマシンが含まれる。このようなプロセッサは、処理されたハードウェア記述言語（ＨＤＬ）命令、及び、ネットリストを含む他の中間データ（このような命令はコンピュータ可読媒体に記憶され得る）の結果を使用して製造プロセスを構成することによって製造されてもよい。このような処理の結果は、本実施形態の態様を実施するプロセッサを製造するために半導体製造プロセスにおいて使用されるマスクワークであってもよい。
【００６２】
本明細書で提供される方法又はフローチャートは、汎用コンピュータ若しくはプロセッサによる実行のために非一時的なコンピュータ可読記憶媒体に組み込まれたコンピュータプログラム、ソフトウェア、ファームウェアにおいて実施されてもよい。非一時的なコンピュータ可読記憶媒体の例には、読み出し専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク及びリムーバブルディスク等の磁気媒体、光磁気媒体、光学媒体（ＣＤ−ＲＯＭディスク等）、デジタル多用途ディスク（ＤＶＤ）等が含まれる。
【図１】
2020525913.tif 000003
【図２】
2020525913.tif 000004
【図３】
2020525913.tif 000005
【図４】
2020525913.tif 000006
【図５】
2020525913.tif 000007
【手続補正書】
【提出日】令和2年2月25日(2020.2.25)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
仮想化アクセラレーテッド処理デバイス（ＡＰＤ）で早期仮想化コンテキストスイッチを実行する方法であって、
前記仮想化ＡＰＤ上で仮想マシンのワークを実行することに関連する現在の機能のタイムスライスが完了する前に、前記ＡＰＤがアイドル状態であることを判別することと、
前記判別したことに応じて、次の機能への早期仮想化コンテキストスイッチを実行することであって、前記早期仮想化コンテキストスイッチは、前記現在の機能の前記ＡＰＤ上の状態を保存し、前記ＡＰＤ上の前記次の機能の状態をロードし、前記ＡＰＤ上の前記次の機能のワークを開始することを含む、ことと、を含む、
方法。
【請求項２】
前記次の機能のワークを開始することは、
前記次の機能のドアベルに基づいてコマンドをフェッチすることと、
前記次の機能の前記コマンドを実行することと、を含む、
請求項１の方法。
【請求項３】
前記ＡＰＤがアイドル状態であることを判別することは、
前記ＡＰＤのグラフィックス処理パイプラインに未処理のワークがないことと、前記ＡＰＤの計算ユニットに未処理のワークがないことと、を判別することを含む、
請求項１の方法。
【請求項４】
前記ＡＰＤがアイドル状態であることを判別することは、
前記ＡＰＤのグラフィックス処理パイプラインに未処理のワークがないことと、前記ＡＰＤの計算ユニットに未処理のワークがないことと、ドアベルが処理されていないか受信されていないことと、を判別することを含む、
請求項３の方法。
【請求項５】
前記ＡＰＤがアイドル状態であることを判別することは、
前記ＡＰＤがアイドル状態になった後のタイムアウト期間中に、ドアベルが受信されていないことを判別することを含む、
請求項１の方法。
【請求項６】
第２機能の第２タイムスライスが、前記ＡＰＤがタイムアウト期間よりも長いアイドル状態にならずに完了したことに応じて、前記第２機能の前記第２タイムスライスが、早期仮想化コンテキストスイッチを実行することなく完了するのを可能にすることを含む、
請求項１の方法。
【請求項７】
第２機能の第２タイムスライスの間にＡＰＤがアイドル状態になることを判別することと、
前記第２機能の前記第２タイムスライスの間に前記ＡＰＤがアイドル状態になった後のタイムアウト期間中にドアベルが受信されたことを判別することと、
早期仮想化コンテキストスイッチを実行する代わりに、前記ドアベルに関連するワークを実行することと、を含む、
請求項１の方法。
【請求項８】
第２機能の第２タイムスライスの間にＡＰＤがアイドル状態になることを判別することと、
前記第２機能の前記第２タイムスライスの間に前記ＡＰＤがアイドル状態になった後のタイムアウト期間中にドアベルを受信することと、
前記第２タイムスライスに閾値未満の時間が残っていることを判別したことに応じて、前記ドアベルを受信したにもかかわらず早期仮想化コンテキストスイッチを実行することと、を含む、
請求項１の方法。
【請求項９】
前記仮想化コンテキストスイッチを実行した後に、スケジューリングスキームに基づいて、前記仮想マシンに対して再びＡＰＤ上で順番が与えられることを判別することと、
前記仮想化コンテキストスイッチを実行してから前記仮想マシンのドアベルが受信されていないと判別したことに応じて、前記仮想マシンの前記順番をスキップすることと、を含む、
請求項１の方法。
【請求項１０】
早期仮想化コンテキストスイッチを実行可能なアクセラレーテッド処理デバイス（ＡＰＤ）であって、
前記ＡＰＤは１つ以上の並列処理ユニットを含み、
ワークを実行するように構成された、複数の計算ユニット及びグラフィックス処理パイプラインであって、前記複数の計算ユニットは１つ以上の並列処理ユニットを含む、複数の計算ユニット及びグラフィックス処理パイプラインと、
第１プロセッサを備えるコマンドプロセッサであって、前記ワークに関連するコマンドを、前記複数の計算ユニット及び前記グラフィックス処理パイプラインに発行するように構成されたコマンドプロセッサと、
第２プロセッサを備える仮想化スケジューラと、を備え、
前記仮想化スケジューラは、
前記ＡＰＤ上で仮想マシンのワークを実行することに関連する現在の機能のタイムスライスが完了する前に、前記ＡＰＤがアイドル状態であることを判別することと、
前記判別したことに応じて、次の機能への早期仮想化コンテキストスイッチを実行することであって、前記早期仮想化コンテキストスイッチは、前記現在の機能の前記ＡＰＤ上の状態を保存し、前記ＡＰＤ上の前記次の機能の状態をロードし、前記ＡＰＤ上の前記次の機能のワークを開始することを含む、ことと、
を行うように構成されている、
ＡＰＤ。
【請求項１１】
前記仮想化スケジューラは、
前記次の機能のドアベルに基づいてコマンドをフェッチすることと、
前記次の機能の前記コマンドを実行することと、
によって、前記次の機能のワークを開始するように構成されている、
請求項１０のＡＰＤ。
【請求項１２】
前記仮想化スケジューラは、
前記ＡＰＤのグラフィックス処理パイプラインに未処理のワークがないことと、前記ＡＰＤの計算ユニットに未処理のワークがないことと、を判別すること
によって、前記ＡＰＤがアイドル状態であることを判別するように構成されている、
請求項１０のＡＰＤ。
【請求項１３】
前記仮想化スケジューラは、
前記ＡＰＤのグラフィックス処理パイプラインに未処理のワークがないことと、前記ＡＰＤの計算ユニットに未処理のワークがないことと、ドアベルが処理されていないか受信されていないことと、を判別すること
によって、前記ＡＰＤがアイドル状態であることを判別するように構成されている、
請求項１２のＡＰＤ。
【請求項１４】
前記仮想化スケジューラは、
前記ＡＰＤがアイドル状態になった後のタイムアウト期間中に、ドアベルが受信されていないことを判別すること
によって、前記ＡＰＤがアイドル状態であることを判別するように構成されている、
請求項１０のＡＰＤ。
【請求項１５】
前記仮想化スケジューラは、
第の機能の第２タイムスライスが、前記ＡＰＤがタイムアウト期間よりも長いアイドル状態にならずに完了したことに応じて、前記第２機能の前記第２タイムスライスが、早期仮想化コンテキストスイッチを実行することなく完了するのを可能にするように構成されている、
請求項１０のＡＰＤ。
【請求項１６】
前記仮想化スケジューラは、
第２機能の第２タイムスライスの間にＡＰＤがアイドル状態になることを判別することと、
前記第２機能の前記第２タイムスライスの間に前記ＡＰＤがアイドル状態になった後のタイムアウト期間中にドアベルが受信されたことを判別することと、
前記ＡＰＤに、早期仮想化コンテキストスイッチを実行する代わりに、前記ドアベルに関連するワークを実行させることと、
を行うように構成されている、
請求項１０のＡＰＤ。
【請求項１７】
前記仮想化スケジューラは、
第２機能の第２タイムスライスの間にＡＰＤがアイドル状態になることを判別することと、
前記第２機能の前記第２タイムスライスの間に前記ＡＰＤがアイドル状態になった後のタイムアウト期間中にドアベルを検出することと、
前記第２タイムスライスに閾値未満の時間が残っていることを判別したことに応じて、前記ドアベルを受信したにもかかわらず早期仮想化コンテキストスイッチを実行することと、
を行うように構成されている、
請求項１０のＡＰＤ。
【請求項１８】
前記仮想化スケジューラは、
前記仮想化コンテキストスイッチを実行した後に、スケジューリングスキームに基づいて、前記仮想マシンに対して再びＡＰＤ上で順番が与えられることを判別することと、
前記仮想化コンテキストスイッチを実行してから前記仮想マシンのドアベルが受信されていないと判別したことに応じて、前記仮想マシンの前記順番をスキップすることと、
を行うように構成されている、
請求項１０のＡＰＤ。
【請求項１９】
複数の仮想マシンを実行するように構成されたプロセッサと、
早期仮想化コンテキストスイッチを実行可能なアクセラレーテッド処理デバイス（ＡＰＤ）と、を備えるデバイスであって、
前記ＡＰＤは１つ以上の並列処理ユニットを含み、
前記ＡＰＤは、
複数の前記仮想マシンの要求に応じてワークを実行するように構成された、複数の計算ユニット及びグラフィックス処理パイプラインであって、前記複数の計算ユニットは１つ以上の並列処理ユニットを含む、複数の計算ユニット及びグラフィックス処理パイプラインと、
第１プロセッサを備えるコマンドプロセッサであって、前記ワークに関連するコマンドを、複数の前記計算ユニット及び前記グラフィックス処理パイプラインに発行するように構成されたコマンドプロセッサと、
第２プロセッサを備える仮想化スケジューラと、を備え、
前記仮想化スケジューラは、
前記ＡＰＤ上で仮想マシンのワークを実行することに関連する現在の機能のタイムスライスが完了する前に、前記ＡＰＤがアイドル状態であることを判別することと、
前記判別したことに応じて、次の機能への早期仮想化コンテキストスイッチを実行することであって、前記早期仮想化コンテキストスイッチは、前記現在の機能の前記ＡＰＤ上の状態を保存し、前記ＡＰＤ上の前記次の機能の状態をロードし、前記ＡＰＤ上の前記次の機能のワークを開始することを含む、ことと、
を行うように構成されている、
デバイス。
【請求項２０】
前記仮想化スケジューラは、
前記次の機能のドアベルに基づいてコマンドをフェッチすることと、
前記次の機能の前記コマンドを実行することと、
によって、前記次の機能のワークを開始するように構成されている、
請求項１９のデバイス。
【国際調査報告】
2020525913.tif 000008
2020525913.tif 000009
2020525913.tif 000010
2020525913.tif 000011