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