(57)【要約】  本発明は、準仮想化ＧＰＧＰＵ計算およびＧＤＩ高速化のための方法、システム、およびコンピュータープログラム製品に及ぶ。いくつかの実施形態は、準仮想化環境内のゲストアプリケーションにコンピュートシェーダーをもたらす。子パーティション内のｖＧＰＵは、ＧＰＧＰＵ計算を行うためのコンピュートシェーダーＤＤＩをゲストアプリケーションに提供する。ルートパーティション内のレンダーコンポーネントは、ｖＧＰＵからコンピュートシェーダーコマンドを受け取り、物理ＧＰＵにおける実行のためにコマンドをスケジュールする。他の実施形態は、準仮想化環境内のゲストアプリケーションに、ＧＰＵ高速化ＧＤＩレンダリング能力をもたらす。子パーティション内のｖＧＰＵは、ＧＤＩコマンドを受け取るためのＡＰＩをもたらし、ＧＤＩコマンドおよびデータをルートパーティション内のレンダーコンポーネントに送る。レンダーコンポーネントは、３Ｄレンダリングデバイス上にＧＤＩコマンドをスケジュールする。３Ｄレンダリングデバイスは、共有可能ＧＤＩサーフェスを用いて、物理ＧＰＵにおいてＧＤＩコマンドを実行する。
2015511346.tif 000002
【特許請求の範囲】
【請求項１】
１つまたは複数のプロセッサおよびシステムメモリを含み、物理グラフィックス処理装置（「ＧＰＵ」）を含むコンピューターシステムにおいて、準仮想化実行環境の子パーティション内で実行するゲストアプリケーションにＧＰＵ高速化コンピューティング機能を提供するための方法であって、
仮想マシンセッションをインスタンス化する動作であって、ハイパーバイザーをインスタンス化することを含み、該ハイパーバイザーは、（ｉ）前記物理ＧＰＵへのアクセスを有するルートパーティションと、（ｉｉ）前記ゲストアプリケーションを実行する前記子パーティションとを提供する、動作と、
仮想化グラフィックス処理装置（「ｖＧＰＵ」）を前記ゲストアプリケーションに供する動作であって、前記ｖＧＰＵは前記子パーティション内で実行し、複数のコンピュートシェーダーデバイスドライバインターフェイス（「ＤＤＩ」）を、前記ｖＧＰＵのユーザーモードドライバ（「ＵＭＤ」）の一部として前記ゲストアプリケーションに供することを含み、前記複数のコンピュートシェーダーＤＤＩはアプリケーションプログラミングインターフェイスを提供し、該アプリケーションプログラミングインターフェースは、コンピュートシェーダーを用いて前記物理ＧＰＵにおいて汎用グラフィックス処理装置（「ＧＰＧＰＵ」）計算を行うために、前記ゲストアプリケーションがコンピュートシェーダーコマンドを前記ｖＧＰＵに送ることを可能にする、動作と、
前記ルートパーティション内で実行するレンダーコンポーネントが、前記ｖＧＰＵから物理ＧＰＵ固有コンピュートシェーダーコマンドを受け取る動作と、
前記レンダーコンポーネントが、前記物理ＧＰＵにおける実行のために前記物理ＧＰＵ固有コンピュートシェーダーコマンドをスケジュールする動作と
を含む方法。
【請求項２】
請求項１に記載の方法であって、前記ＵＭＤは、前記ゲストアプリケーションから受け取ったコンピュートシェーダーコマンドを、対応する物理ＧＰＵ固有コンピュートシェーダーコマンドに変換し、前記対応する物理ＧＰＵ固有コンピュートシェーダーコマンドをコマンドバッファに記憶する、方法。
【請求項３】
請求項１に記載の方法であって、ｖＧＰＵを前記ゲストアプリケーションに供する前記動作は、カーネルモードドライバ（「ＫＭＤ」）を含むｖＧＰＵを供する動作を含み、前記ＫＭＤは前記コマンドバッファからダイレクトメモリアクセスバッファを構築するように構成される、方法。
【請求項４】
請求項３に記載の方法であって、前記ＫＭＤは、グラフィックスデバイスインターフェイス（「ＧＤＩ」）高速化レンダリングコマンドに対するサポートを実装するように構成される、方法。
【請求項５】
請求項４に記載の方法であって、前記ＫＭＤによるＧＤＩ高速化レンダリングコマンドに対するサポートは、コンピュートシェーダー合成デバイスの生成を可能にする、方法。
【請求項６】
請求項１に記載の方法であって、前記レンダーコンポーネントは、前記物理ＧＰＵ固有コンピュートシェーダーコマンドを実行するために、前記ルートパーティション内のコンピュートシェーダー合成デバイスを用いる、方法。
【請求項７】
１つまたは複数のプロセッサおよびシステムメモリを含み、物理グラフィックス処理装置（「ＧＰＵ」）を含むコンピューターシステムにおいて、準仮想化実行環境の子パーティション内で実行するゲストアプリケーションにＧＰＵ高速化グラフィックスデバイスインターフェイス（「ＧＤＩ」）機能を提供するための方法であって、
仮想マシンセッションをインスタンス化する動作であって、ハイパーバイザーをインスタンス化することを含み、該ハイパーバイザーは、（ｉ）前記物理ＧＰＵへのアクセスを有するルートパーティションと、（ｉｉ）前記ゲストアプリケーションを実行する前記子パーティションとを提供する、動作と、
仮想化グラフィックス処理装置（「ｖＧＰＵ」）を前記ゲストアプリケーションに供する動作であって、前記ｖＧＰＵは前記子パーティション内で実行し、前記ｖＧＰＵのカーネルモードドライバ（「ＫＭＤ」）のアプリケーションプログラミングインターフェイスを供することを含み、該アプリケーションプログラミングインターフェイスは、ゲストオペレーティングシステムが、該ゲストアプリケーションによって用いられるグラフィックスデバイスインターフェイス（「ＧＤＩ」）レンダリングコマンドを高速化することを可能にし、前記グラフィックスデバイスインターフェイス（「ＧＤＩ」）レンダリングコマンドは、前記ｖＧＰＵに対する、該ｖＧＰＵの前記ＫＭＤによる処理のためのものである、動作と、
前記ルートパーティション内で実行するレンダーコンポーネントが、前記ｖＧＰＵからＧＤＩ高速化レンダリングコマンドを受け取る動作と、
前記レンダーコンポーネントが、前記ルートパーティション内のＧＤＩ合成デバイス上に前記ＧＤＩ高速化レンダリングコマンドをスケジュールする動作であって、前記ＧＤＩ合成デバイスは前記物理ＧＰＵにおいて前記ＧＤＩ高速化レンダリングコマンドを実行するように構成され、前記ＧＤＩ合成デバイスはまた、前記ＧＤＩ高速化レンダリングコマンドに対応するＧＤＩサーフェスを、デスクトップによる合成のために共有可能とマークするように構成される、動作と
を含む、方法。
【請求項８】
請求項７に記載の方法であって、前記ｖＧＰＵのユーザーモードドライバ（「ＵＭＤ」）は、前記ゲストアプリケーションに複数のデバイスドライバインターフェイス（「ＤＤＩ」）へのアクセスを提供するように構成され、前記複数のＤＤＩの少なくともいくつかは、少なくとも１つの前記アプリケーションに前記物理ＧＰＵにおけるコンピュートシェーダーの機能へのアクセスを提供するために使用可能である、方法。
【請求項９】
請求項８に記載の方法であって、前記ＧＤＩ高速化レンダリングコマンドは、前記物理ＧＰＵにおける前記コンピュートシェーダーの使用の一部として使用可能である、方法。
【請求項１０】
請求項８に記載の方法であって、前記ＵＭＤは子パーティションのユーザーモードにおいて実行する、方法。
【請求項１１】
請求項８に記載の方法であって、前記ＫＭＤは子パーティションのカーネルモードにおいて実行する、方法。
【請求項１２】
請求項８に記載の方法であって、前記ＵＭＤは、前記ゲストアプリケーションから受け取ったグラフィックスコマンドを対応するハードウェア固有コンピュートシェーダーコマンドに変換し、前記対応するハードウェア固有コンピュートシェーダーコマンドをコマンドバッファに記憶する、方法。
【請求項１３】
請求項８に記載の方法であって、前記ＫＭＤは前記コマンドバッファからダイレクトメモリアクセスバッファを構築する、方法。
【請求項１４】
請求項８に記載の方法であって、前記ＵＭＤは、コンピュートシェーダーを含むレンダリングフレームワークに対応するすべてのＤＤＩを供することが可能となる新しいＵＭＤを含み、前記レンダリングフレームワークは、ドメインシェーダー、ハルシェーダー、またはジオメトリシェーダーの１つまたは複数も含むレンダリングフレームワークを含む、方法。
【請求項１５】
コンピューターシステムで使用し、準仮想化実行環境の子パーティション内で実行するゲストアプリケーションにＧＰＵ高速化コンピューティング機能を提供するための方法を実装するためのコンピュータープログラム製品であって、該コンピュータープログラム製品は、プロセッサで実行されたときに、前記コンピューターシステムに前記方法を行わせるコンピューター実行可能命令が記憶された１つまたは複数のコンピューター記憶媒体を含み、前記前記方法は、
仮想マシンセッションをインスタンス化することであって、ハイパーバイザーをインスタンス化することを含み、該ハイパーバイザーは、（ｉ）物理ＧＰＵへのアクセスを有するルートパーティションと、（ｉｉ）前記ゲストアプリケーションを実行する前記子パーティションとを提供する、インスタンス化することと、
仮想化グラフィックス処理装置（「ｖＧＰＵ」）を前記ゲストアプリケーションに供することであって、前記ｖＧＰＵは前記子パーティション内で実行し、
複数のコンピュートシェーダーデバイスドライバインターフェイス（「ＤＤＩ」）を前記ｖＧＰＵのユーザーモードドライバ（「ＵＭＤ」）の一部として前記ゲストアプリケーションに供することであって、前記複数のコンピュートシェーダーＤＤＩはアプリケーションプログラミングインターフェイスを提供し、該アプリケーションプログラミングインターフェイスは、コンピュートシェーダーを用いて前記物理ＧＰＵにおいて汎用グラフィックス処理装置（「ＧＰＧＰＵ」）計算を行うために、前記ゲストアプリケーションがコンピュートシェーダーコマンドを前記ｖＧＰＵに送ることを可能にする、供することと、
前記ｖＧＰＵのカーネルモードドライバ（「ＫＭＤ」）のアプリケーションプログラミングインターフェイスを供することであって、該アプリケーションプログラミングインターフェイスは、ゲストオペレーティングシステムが前記ゲストアプリケーションによって用いられるグラフィックスデバイスインターフェイス（「ＧＤＩ」）レンダリングコマンドを高速化することを可能にし、該グラフィックスデバイスインターフェイス（「ＧＤＩ」）レンダリングコマンドは、前記ｖＧＰＵに対する、該ｖＧＰＵの少なくとも前記ＫＭＤによる処理のためのものである、供することと
を含む、仮想化グラフィックス処理装置（「ｖＧＰＵ」）を前記ゲストアプリケーションに供することと、
前記ルートパーティション内で実行するレンダーコンポーネントにおいて、前記ｖＧＰＵから、少なくとも１つの物理ＧＰＵ固有コンピュートシェーダーコマンド、および／または少なくとも１つのＧＤＩ高速化レンダリングコマンドの一方または両方を受け取ることと、
前記物理ＧＰＵにおける実行のために、物理ＧＰＵ固有コンピュートシェーダーコマンドをスケジュールすることと、
前記ルートパーティション内のＧＤＩ合成デバイス上に前記ＧＤＩ高速化レンダリングコマンドをスケジュールすることであって、前記ＧＤＩ合成デバイスは前記物理ＧＰＵにおいて前記ＧＤＩ高速化レンダリングコマンドを実行するように構成され、前記ＧＤＩ合成デバイスはまた、前記ＧＤＩ高速化レンダリングコマンドに対応するＧＤＩサーフェスを、デスクトップによる合成のために共有可能とマークするように構成される、スケジュールすることと
を含む、コンピュータープログラム製品。
【発明の詳細な説明】
【技術分野】
【０００１】
[0001]コンピューターシステムおよび関連する技術は、社会の多くの側面に影響を与える。
【背景技術】
【０００２】
実際、情報を処理するコンピューターシステムの能力は、我々の生活の仕方および働き方を変化させた。今ではコンピューターシステムは一般に、コンピューターシステムが出現する前までは手で行われていた多くのタスク（例えばワードプロセッシング、スケジュール設定、会計など）を行う。より最近ではコンピューターシステムは互いに、また他の電子デバイスに結合されて、コンピューターシステムおよび他の電子デバイスがそれを通して電子データを伝送することができる、有線および無線コンピューターネットワークの両方を形成する。それに応じて、多くのコンピューティングタスクの実行は、いくつかの異なるコンピューターシステム、および／またはいくつかのコンピューティング環境にわたって分散される。
【０００３】
[0002]いくつかのコンピューターシステムは準仮想化実行環境をもたらすように構成され、これはゲストソフトウェアが、単一のコンピューターシステムのハードウェアデバイスを分離された形で共有することを可能にする。一般に準仮想化実行環境は、ハイパーバイザーによってサポートされる複数のパーティションを形成する。パーティションは、異なるゲストソフトウェアの間の分離をもたらす。パーティションは一般に、ルートパーティションと、１つまたは複数の子パーティションとを含む。ルートパーティションは、ホストオペレーティングシステムを稼働させ、仮想化スタックを管理する。ルートパーティションは、物理デバイスへのアクセスを取得することができる。各子パーティションは、ゲストソフトウェア（例えばゲストオペレーティングシステム、およびゲストアプリケーション）をホストする。子パーティションには、仮想デバイス、およびハイパーバイザーのソフトウェアインターフェイスを通して、物理デバイスへのアクセスがもたらされる。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
[0003]いくつかの準仮想化実行環境は、１つまたは複数の物理グラフィックス処理装置（「ＧＰＵ」）への準仮想化アクセスを有する、子パーティション（およびその中で実行するゲストソフトウェア）をもたらす。一般に物理ＧＰＵへの準仮想化アクセスの各実装形態は、（１つまたは複数の）特定の３次元レンダリングフレームワークをサポートする。したがってゲストソフトウェアが物理ＧＰＵの機能にアクセスすることは、それらの機能をサポートしない準仮想化実行環境内でそのゲストソフトウェアが実行している場合、できないことがあり得る。いくつかの場合にはゲストソフトウェアは、潜在的に大幅な性能の犠牲を被りながら、物理ＧＰＵへの準仮想化アクセスがサポートされないタスクを行うために、仮想化ＣＰＵの使用に依存する場合がある。
【課題を解決するための手段】
【０００５】
[0004]本発明は、準仮想化環境において高性能コンピューティング、およびグラフィックスデバイスインターフェイス（「ＧＤＩ」）高速化をもたらすための方法、システム、およびコンピュータープログラム製品に及ぶ。
【０００６】
[0005]いくつかの実施形態は、準仮想化実行環境の子パーティション内で実行するゲストアプリケーションに、グラフィックス処理装置（「ＧＰＵ」）高速化コンピューティング機能をもたらすための方法を含む。仮想マシンセッションがインスタンス化される。仮想マシンセッションにおいてハイパーバイザーは、（ｉ）ルートパーティション（物理ＧＰＵへのアクセスを有する）と、（ｉｉ）子パーティション（ゲストアプリケーションを実行する）とを形成する。
【０００７】
[0006]子パーティション内で実行する仮想化グラフィックス処理装置（「ｖＧＰＵ」）は、ゲストアプリケーションに提供される。ｖＧＰＵのユーザーモードドライバ（「ＵＭＤ」）は、ゲストアプリケーションにコンピュートシェーダー（ｃｏｍｐｕｔｅ  ｓｈａｄｅｒ）デバイスドライバインターフェイス（「ＤＤＩ」）を提供する。コンピュートシェーダーＤＤＩは、ゲストアプリケーションがｖＧＰＵにコンピュートシェーダーコマンドを送ることを可能にする、アプリケーションプログラミングインターフェイス（「ＡＰＩ」）をもたらす。コンピュートシェーダーコマンドは、コンピュートシェーダーを用いて物理ＧＰＵにおいて汎用グラフィックス処理装置（「ＧＰＧＰＵ」）計算を行うために用いられる。ルートパーティション内で実行するレンダーコンポーネントは、ｖＧＰＵから物理ＧＰＵ固有コンピュートシェーダーコマンドを受け取り、物理ＧＰＵにおける実行のためにコマンドをスケジュールする。
【０００８】
[0007]さらなる実施形態は、準仮想化実行環境の子パーティション内で実行するゲストアプリケーションに、ＧＰＵ高速化ＧＤＩ機能をもたらすための方法を含む。仮想マシンセッションがインスタンス化される。仮想マシンセッションにおいてハイパーバイザーは、（ｉ）物理ＧＰＵへのアクセスを有するルートパーティションと、（ｉｉ）ゲストアプリケーションを実行する子パーティションとを形成する。
【０００９】
[0008]子パーティション内で実行するｖＧＰＵは、ゲストアプリケーションに提供される。ｖＧＰＵのカーネルモードドライバ（「ＫＭＤ」）のＡＰＩは、ゲストオペレーティングシステムが、ゲストアプリケーションによって提出されたＧＤＩレンダリングコマンドを高速化することを可能にする。次いでこれらのコマンドは、ｖＧＰＵのＫＭＤによって処理される。
【００１０】
[0009]ルートパーティション内で実行するレンダーコンポーネントは、ｖＧＰＵからＧＤＩ高速化レンダリングコマンドを受け取る。それに応答してレンダーコンポーネントは、ルートパーティション内のＧＤＩ合成デバイス上に、ＧＤＩ高速化レンダリングコマンドをスケジュールする。ＧＤＩ合成デバイスは、物理ＧＰＵにおいてＧＤＩ高速化レンダリングコマンドを実行するように構成される。ＧＤＩ合成デバイスは、デスクトップによる合成のために共有可能として、ＧＤＩコマンドに対応するＧＤＩサーフェスにマークする。
【００１１】
[0010]この概要は、以下の「発明を実施するための形態」でさらに詳しく述べられる、選ばれた概念を簡略化した形で紹介するために示される。この概要は、特許請求される主題の主要な特徴または本質的な特徴を特定するものではなく、特許請求される主題の範囲を決定するための補助として用いられることを意図するものでもない。
【００１２】
[0011]本発明のさらなる特徴および利点については、以下に続く説明で述べられ、一部は説明から明らかとなり、または本発明の実践によって理解することができる。本発明の特徴および利点は、添付の「特許請求の範囲」に具体的に指摘された手段および組み合わせを用いて実現することができ、得ることができる。本発明の上記その他の特徴は、以下の説明および添付の「特許請求の範囲」からより十分に明らかとなり、または本明細書において以下で述べられる本発明の実践によって理解することができる。
【００１３】
[0012]本発明の上記その他の利点および特徴を得ることができるやり方で説明するために、上記で簡潔に述べられた本発明のより具体的な説明は、添付の図面に示されるそれらの特定の実施形態を参照して述べられる。これらの図面は本発明の典型的な実施形態のみを示し、したがってその範囲を限定すると見なされるべきでないとの理解の下に、添付の図面の使用を通して、本発明についてさらなる具体性および詳細を有して述べられ、説明される。
【図面の簡単な説明】
【００１４】
【図１Ａ】[0013]物理グラフィックス処理装置（「ＧＰＵ」）ハードウェアのコンピュートシェーダー機能への準仮想化アクセスを可能にする、例示のコンピューターアーキテクチャを示す図である。
【図１Ｂ】[0014]物理ＧＰＵハードウェアによる、準仮想化グラフィックスデバイスインターフェイス（「ＧＤＩ」）高速化を可能にする、例示のコンピューターアーキテクチャを示す図である。
【図１Ｃ】[0015]物理ＧＰＵハードウェアによる、コンピュートシェーダー機能および準仮想化ＧＤＩ高速化への準仮想化アクセスを可能にする、例示のコンピューターアーキテクチャを示す図である。
【図２Ａ】[0016]準仮想化実行環境の子パーティション内で実行するゲストアプリケーションに、ＧＰＵ高速化コンピューティング機能をもたらすための例示の方法のフローチャートである。
【図２Ｂ】[0017]準仮想化実行環境の子パーティション内で実行するゲストアプリケーションに、ＧＰＵ高速化ＧＤＩ機能をもたらすための例示の方法のフローチャートである。
【発明を実施するための形態】
【００１５】
[0018]本発明は、準仮想化環境において高性能コンピューティング、およびグラフィックスデバイスインターフェイス（「ＧＤＩ」）高速化をもたらすための方法、システム、およびコンピュータープログラム製品に及ぶ。
【００１６】
[0019]いくつかの実施形態は、準仮想化実行環境の子パーティション内で実行するゲストアプリケーションに、グラフィックス処理装置（「ＧＰＵ」）高速化コンピューティング機能をもたらすための方法を含む。仮想マシンセッションがインスタンス化される。仮想マシンセッションにおいてハイパーバイザーは、（ｉ）ルートパーティション（物理ＧＰＵへのアクセスを有する）と、（ｉｉ）子パーティション（ゲストアプリケーションを実行する）とを形成する。
【００１７】
[0020]子パーティション内で実行する仮想化グラフィックス処理装置（「ｖＧＰＵ」）は、ゲストアプリケーションに提供される。ｖＧＰＵのユーザーモードドライバ（「ＵＭＤ」）は、ゲストアプリケーションにコンピュートシェーダーデバイスドライバインターフェイス（「ＤＤＩ」）を提供する。コンピュートシェーダーＤＤＩは、ゲストアプリケーションがｖＧＰＵにコンピュートシェーダーコマンドを送ることを可能にする、アプリケーションプログラミングインターフェイス（「ＡＰＩ」）をもたらす。コンピュートシェーダーコマンドは、コンピュートシェーダーを用いて物理ＧＰＵにおいて汎用グラフィックス処理装置（「ＧＰＧＰＵ」）計算を行うために用いられる。ルートパーティション内で実行するレンダーコンポーネントは、ｖＧＰＵから物理ＧＰＵ固有コンピュートシェーダーコマンドを受け取り、物理ＧＰＵにおける実行のためにコマンドをスケジュールする。
【００１８】
[0021]さらなる実施形態は、準仮想化実行環境の子パーティション内で実行するゲストアプリケーションに、ＧＰＵ高速化ＧＤＩ機能をもたらすための方法を含む。仮想マシンセッションがインスタンス化される。仮想マシンセッションにおいてハイパーバイザーは、（ｉ）物理ＧＰＵへのアクセスを有するルートパーティションと、（ｉｉ）ゲストアプリケーションを実行する子パーティションとを形成する。
【００１９】
[0022]子パーティション内で実行するｖＧＰＵは、ゲストアプリケーションに提供される。ｖＧＰＵのカーネルモードドライバ（「ＫＭＤ」）のＡＰＩは、ゲストオペレーティングシステムが、ゲストアプリケーションによって提出されたＧＤＩレンダリングコマンドを高速化することを可能にする。次いでこれらのコマンドは、ｖＧＰＵのＫＭＤによって処理される。
【００２０】
[0023]ルートパーティション内で実行するレンダーコンポーネントは、ｖＧＰＵからＧＤＩ高速化レンダリングコマンドを受け取る。それに応答してレンダーコンポーネントは、ルートパーティション内のＧＤＩ合成デバイス上に、ＧＤＩ高速化レンダリングコマンドをスケジュールする。ＧＤＩ合成デバイスは、物理ＧＰＵにおいてＧＤＩ高速化レンダリングコマンドを実行するように構成される。ＧＤＩ合成デバイスは、デスクトップによる合成のために共有可能として、ＧＤＩコマンドに対応するＧＤＩサーフェスにマークする。
【００２１】
[0024]本発明の実施形態は、以下でより詳しく述べられるように、例えば１つまたは複数のプロセッサおよびシステムメモリなどのコンピューターハードウェアを含む、専用または汎用コンピューターを備えるまたは利用することができる。本発明の範囲内の実施形態はまた、コンピューター実行可能命令および／またはデータ構造を担持するまたは記憶するための、物理的およびその他のコンピューター可読媒体を含む。このようなコンピューター可読媒体は、汎用または専用コンピューターシステムによってアクセスすることができる任意の利用可能な媒体とすることができる。コンピューター実行可能命令を記憶するコンピューター可読媒体は、コンピューター記憶媒体（装置）である。コンピューター実行可能命令を担持するコンピューター可読媒体は、伝送媒体である。したがって、例としてかつ非限定的に本発明の実施形態は、少なくとも２つの明瞭に異なる種類のコンピューター可読媒体、すなわちコンピューター記憶媒体（装置）と伝送媒体とを備えることができる。
【００２２】
[0025]コンピューター記憶媒体（装置）は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭ、ソリッドステートドライブ（「ＳＳＤ」）（例えばＲＡＭに基づく）、フラッシュメモリ、相変化メモリ（「ＰＣＭ」）、他のタイプのメモリ、他の光ディスク記憶装置、磁気ディスク記憶装置または他の磁気記憶装置、またはコンピューター実行可能命令またはデータ構造の形での所望のプログラムコード手段を記憶するために用いることができ、汎用または専用コンピューターによってアクセスすることができる任意の他の媒体を含む。
【００２３】
[0026]「ネットワーク」は、コンピューターシステムおよび／またはモジュールおよび／または他の電子デバイスの間での電子データの移送を可能にする、１つまたは複数のデータリンクとして定義される。情報がネットワークまたは他の通信接続（有線、無線、または有線または無線の組み合わせのいずれか）を通してコンピューターに転送または供給されるときは、コンピューターは接続を適切に伝送媒体と見なす。伝送媒体は、コンピューター実行可能命令またはデータ構造の形での所望のプログラムコード手段を担持するために用いることができ、汎用または専用コンピューターによってアクセスすることができるネットワークおよび／またはデータリンクを含むことができる。上記の組み合わせも、コンピューター可読媒体の範囲に含められるべきである。
【００２４】
[0027]さらに、様々なコンピューターシステムコンポーネントに到達するとすぐに、コンピューター実行可能命令またはデータ構造の形でのプログラムコード手段は、自動的に伝送媒体からコンピューター記憶媒体（装置）に転送される（またはその逆に）。例えば、ネットワークまたはデータリンクを通して受け取ったコンピューター実行可能命令またはデータ構造は、ネットワークインターフェイスモジュール（例えば「ＮＩＣ」）内のＲＡＭにバッファすることができ、次いで最終的にコンピューターシステムＲＡＭ、および／またはコンピューターシステムにおける揮発性の低いコンピューター記憶媒体（装置）に転送することができる。したがってコンピューター記憶媒体（装置）は、伝送媒体も（さらには主として）利用するコンピューターシステムコンポーネントに含み得ることが理解されるべきである。
【００２５】
[0028]コンピューター実行可能命令は例えば、プロセッサで実行されたときに汎用コンピューター、専用コンピューター、または専用処理デバイスに、特定の機能または一群の機能を行わせる命令およびデータを備える。コンピューター実行可能命令は、例えば２進値、アセンブリ言語などの中間フォーマット命令、さらにはソースコードとすることができる。本主題については構造的特徴および／または方法論的動作に固有の用語で述べてきたが、添付の「特許請求の範囲」において定義される本主題は、必ずしも述べられる特徴または上述の動作に限定されないことが理解されるべきである。むしろ述べられる特徴および動作は、諸請求項を実施する例示の形として開示される。
【００２６】
[0029]当業者には、本発明はパーソナルコンピューター、デスクトップコンピューター、ラップトップコンピューター、メッセージプロセッサ、ハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサベースまたはプログラム可能な民生用電子機器、ネットワークＰＣ、ミニコンピューター、メインフレームコンピューター、携帯電話、ＰＤＡ、タブレット、ポケットベル、ルータ、スイッチなどを含む、多くのタイプのコンピューターシステム構成を有するネットワークコンピューティング環境において実施できることが理解されるであろう。本発明はまた、ネットワークを通してリンクされた（有線データリンク、無線データリンクのいずれかにより、または有線および無線データリンクの組み合わせにより）、ローカルおよびリモートコンピューターシステムの両方がタスクを実行する、分散システム環境において実施することができる。分散システム環境ではプログラムモジュールは、ローカルおよびリモートメモリ記憶装置の両方に配置することができる。
【００２７】
[0030]準仮想化コンピュートシェーダー（ＧＰＧＰＵ）機能
図１Ａは、物理ＧＰＵハードウェアのコンピュートシェーダー機能への準仮想化アクセスを可能にする、例示のコンピューターアーキテクチャ１００ａを示す。図１Ａを参照するとコンピューターアーキテクチャ１００ａは、物理ハードウェア１０１を含む。物理ハードウェア１０１は、１つまたは複数の汎用プロセッサ、システムメモリなどの適切なハードウェアデバイスを含むことができる。図示のように物理ハードウェアは、少なくとも１つの物理ＧＰＵ１０１ａを含む。
【００２８】
[0031]物理ＧＰＵ１０１ａは、グラフィックスレンダリングなどの並列処理タスクを行うように構成された処理デバイスである。物理ＧＰＵ１０１ａは、物理ＧＰＵ１０１ａが汎用（すなわち非グラフィックスレンダリング）計算を行うことを可能にする、コンピュートシェーダーを実行するためのサポートを含む。言い換えれば物理ＧＰＵ１０１ａは、コンピュートシェーダーデバイス上のＧＰＧＰＵ計算をサポートする。
【００２９】
[0032]コンピューターアーキテクチャ１００ａはまた、ハイパーバイザー１０２を含む。ハイパーバイザー１０２は、物理ハードウェア１０１の上で実行し、仮想化プラットフォームをサポートする。仮想化プラットフォームは、複数のパーティションを形成する。各パーティションは、ゲストソフトウェアをその中で実行することができる、分離の論理ユニットをもたらす。例えばコンピューターアーキテクチャ１００ａは、ルートパーティション１０３と、子パーティション１０４とを含む。
【００３０】
[0033]ルートパーティション１０３は、ホストオペレーティングシステムを実行し、物理ハードウェア１０１への直接アクセスを有する（物理ハードウェア１０１の上に表されたルートパーティション１０３によって示されるように）。各子パーティションは、ゲストソフトウェア（例えばオペレーティングシステムおよび／またはアプリケーション）を実行するための実行環境をもたらし、準仮想化のやり方で間接的に物理ハードウェア１０１にアクセスすることができる。すなわちハイパーバイザー１０２を通して各子パーティションは、１つまたは複数のソフトウェアインターフェイス（例えば仮想化ハードウェア）をゲストソフトウェアにもたらす。一方、ゲストソフトウェアは、物理ハードウェア１０１にアクセスするために、（１つまたは複数の）ソフトウェアインターフェイスを用いる。ハイパーバイザー１０２は、複数の子パーティションのためのサポートをもたらすことができる。
【００３１】
[0034]図示のようにゲストソフトウェア１０５は、子パーティション１０４内で実行する。ゲストソフトウェア１０５は、オペレーティングシステム、および／またはオペレーティングシステム内で実行するアプリケーションプログラムなどの任意の適切なゲストソフトウェアを備える。ゲストソフトウェア１０５は、グラフィックスランタイム１０５ａを含むまたは使用する。グラフィックスランタイム１０５ａは、グラフィックスをレンダリングするおよび／またはＧＰＧＰＵ計算を行うための、フレームワーク（例えばＡＰＩ）をもたらす。
【００３２】
[0035]子パーティション１０４は、ｖＧＰＵ１０６へのアクセスをゲストソフトウェア１０５にもたらす。ｖＧＰＵ１０５は物理ＧＰＵ１０１ａを仮想化し、ゲストソフトウェア１０５が物理ＧＰＵ１０１ａに間接的にアクセスすることを可能にする。したがってｖＧＰＵ１０６は、物理ＧＰＵ１０１ａの任意の対応する機能と共に、少なくとも１つのレンダリングフレームワーク（グラフィックスランタイム１０５ａに対応する）の機能のすべてまたはサブセットを、ゲストソフトウェア１０５に公開するように構成される。
【００３３】
[0036]具体的にはｖＧＰＵ１０６は、物理ＧＰＵ１０１ａにおいてＧＰＧＰＵ計算を行うために物理ＧＰＵ１０１ａのコンピュートシェーダー機能にアクセスするために、ゲストソフトウェア１０５がｖＧＰＵ１０６を呼び出すことを可能にする、１つまたは複数のソフトウェアインターフェイスを公開するように構成される。一方、ｖＧＰＵ１０６は、ルートパーティション１０３でのレンダーコンポーネントと一緒に働いて、物理ＧＰＵ１０１ａ上でコンピュートシェーダー機能を行う。図示のように例えばルートパーティション１０３は、レンダーコンポーネント１１２を含む。一方、レンダーコンポーネント１１２は、コンピュートシェーダーコマンドおよびデータを取り扱うためのコンピュートシェーダーコンポーネント１１３を含む。ｖＧＰＵ１０６は、物理ＧＰＵ１０１ａ上でレンダリングを行うために、コンピュートシェーダーコマンドおよびデータ１１７をレンダーコンポーネント１１２にリモート接続する。
【００３４】
[0037]レンダーコンポーネント１１２は、ｖＧＰＵ１０６から受け取ったグラフィックスコマンドを、物理ＧＰＵ１０１ａ上での実行のためにスケジュールする。レンダーコンポーネント１１２はまた、これらのコマンドを実行するための適切なコンテキストを生成する。したがってレンダーコンポーネント１１２は、子パーティション１０４内のｖＧＰＵ１０６から受け取ったコンピュートシェーダー関連コマンドの物理ＧＰＵ１０１ａ上での実行を、コンピュートシェーダーコンポーネント１１３を用いてスケジュールするように構成される。
【００３５】
[0038]図示のようにｖＧＰＵ１０６は、子パーティション１０４のユーザーモードにおいて実行するユーザーモードドライバ１０６ａと、子パーティション１０４のカーネルモードにおいて実行するカーネルモードドライバ１０９とを含む。ユーザーモードドライバ１０６ａは、コンピュートシェーダーＤＤＩ１０７として示されるコンピュートシェーダー（ＧＰＧＰＵ）機能に関連するＤＤＩを含む、少なくとも１つのレンダリングフレームワークのデバイスドライバインターフェイス（「ＤＤＩ」）を公開する。コンピュートシェーダーＤＤＩ１０７は、ゲストソフトウェア１０５が、ＧＰＧＰＵ計算を行うためにｖＧＰＵ１０６に呼び出しを行うことを可能にする。
【００３６】
[0039]いくつかの実施形態ではユーザーモードドライバ１０６ｂは、コンピュートシェーダー機能（例えばＭｉｃｒｏｓｏｆｔ（登録商標）ＣｏｒｐｏｒａｔｉｏｎからのＤｉｒｅｃｔＸ（登録商標）バージョン１０および／または１１）をサポートするレンダリングフレームワークのＤＤＩを公開する。例えば実施形態では、ユーザーモードドライバ１０６ａがＤｉｒｅｃｔＸ（登録商標）バージョン１０および１１のコンピュートシェーダー機能を公開するときは、ユーザーモードドライバ１０６ａは、コンピュートシェーダーＤＤＩ１０７の一部として以下のＤＤＩの１つまたは複数を公開することができる：
ＰＦＮＤ３Ｄ１１ＤＤＩ＿ＳＥＴＳＨＡＤＥＲ＿ＷＩＴＨ＿ＩＦＡＣＥＳ  ｐｆｎＣｓＳｅｔＳｈａｄｅｒＷｉｔｈＩｆａｃｅｓ
ＰＦＮＤ３Ｄ１０ＤＤＩ＿ＳＥＴＳＨＡＤＥＲ  ｐｆｎＣｓＳｅｔＳｈａｄｅｒ
ＰＦＮＤ３Ｄ１０ＤＤＩ＿ＳＥＴＳＨＡＤＥＲＲＥＳＯＵＲＣＥＳ  ｐｆｎＣｓＳｅｔＳｈａｄｅｒＲｅｓｏｕｒｃｅｓ
ＰＦＮＤ３Ｄ１０ＤＤＩ＿ＳＥＴＳＡＭＰＬＥＲＳ  ｐｆｎＣｓＳｅｔＳａｍｐｌｅｒｓ
ＰＦＮＤ３Ｄ１０ＤＤＩ＿ＳＥＴＣＯＮＳＴＡＮＴＢＵＦＦＥＲＳ  ｐｆｎＣｓＳｅｔＣｏｎｓｔａｎｔＢｕｆｆｅｒｓ
ＰＦＮＤ３ＤｌｌＤＤＩ＿ＳＥＴＵＮＯＲＤＥＲＥＤＡＣＣＥＳＳＶＩＥＷＳ  ｐｆｎＣｓＳｅｔＵｎｏｒｄｅｒｅｄＡｃｃｅｓｓＶｉｅｗｓ
いくつかの実施形態ではユーザーモードドライバ１０６ｂは、ドメインシェーダー、ハルシェーダー、またはジオメトリシェーダーの１つまたは複数に関連するＤＤＩなどの、コンピュートシェーダー機能（例えばＤｉｒｅｃｔＸ（登録商標）バージョン１１）をサポートするレンダリングフレームワークのすべてのＤＤＩを提供する。しかしユーザーモードドライバ１０６ｂは、コンピュートシェーダー機能をサポートする任意のレンダリングフレームワークから任意のＤＤＩの組を公開することができる。
【００３７】
[0040]いくつかの実施形態ではｖＧＰＵ１０６はまた、子パーティション１０４のユーザーモードにおいて実行するレガシユーザーモードドライバ１０６ｂを含むことができる。レガシユーザーモードドライバ１０６ｂは、１つまたは複数のレンダリングフレームワークのレガシバージョンのＤＤＩを公開することができる。例えばレガシユーザーモードドライバ１０６ｂは、ＤｉｒｅｃｔＸ（登録商標）のレガシバージョン（例えばＤｉｒｅｃｔＸ（登録商標）バージョン９）、または任意の他のレンダリングフレームワーク（例えばＳｉｌｉｃｏｎ  Ｇｒａｐｈｉｃｓ，Ｉｎｃ．からのＯｐｅｎＧＬ（登録商標））のレガシバージョンをサポートすることができる。
【００３８】
[0041]一般にユーザーモードドライバ１０６ａは、ハードウェアコンテキストおよびコマンドバッファを構築するように構成される。具体的にはユーザーモードドライバ１０６ａは、ゲストソフトウェア１０５（またはゲストソフトウェア１０５のグラフィックスランタイム１０５ａ）によって発行されたグラフィックスコマンドを、ハードウェア固有コマンドに変換する。例えばユーザーモードドライバ１０６ａは、ゲストソフトウェア１０５からコンピュートシェーダーを用いたＧＰＧＰＵ計算に関連するグラフィックスコマンド１１５を受け取ることができる。ユーザーモードドライバ１０６ａは、グラフィックスコマンド１１５をハードウェア固有コマンド（すなわち物理ＧＰＵ１０１ａに固有のコマンド）に変換するように構成される。変換の一部としてユーザーモードドライバ１０６ａは、物理ＧＰＵ１０１ａのための適切なハードウェアコンテキストを維持する。例えばユーザーモードドライバ１０６ａは、グラフィックスパイプラインに影響する設定のための論理値を、値および対応する物理設定に変換する。ユーザーモードドライバ１０６ａはまた、変換されたハードウェア固有コマンドをコマンドバッファ１１５に記憶し、コマンドバッファ１１６をカーネルモードドライバ１０９に送るように構成される。
【００３９】
[0042]さらにｖＧＰＵ１０６は、コンピュートシェーダーコンポーネント１１０を含む、子パーティション１０４のカーネルモードにおいて実行するカーネルモードドライバ１０９を含む。カーネルモードドライバ１０９は、コマンドバッファ（例えばコマンドバッファ１１６）を受け取り、対応するダイレクトメモリアクセス（「ＤＭＡ」）バッファを構築するように構成される。ＤＭＡバッファが処理されるべき時点では、ＧＰＵスケジューラはカーネルモードドライバ１０９を呼び出す。次いでカーネルモードドライバ１０９は、ＤＭＡバッファの物理ＧＰＵ１０１ａへの実際の提出の詳細を取り扱う。
【００４０】
[0043]図２Ａは、準仮想化実行環境の子パーティション内で実行するゲストアプリケーションに、ＧＰＵ高速化コンピューティング機能をもたらすための例示の方法２００ａのフローチャートを示す。方法２００ａについては、コンピューターアーキテクチャ１００ａのコンポーネントおよびデータに関連して述べられる。
【００４１】
[0044]方法２００ａは、（ｉ）物理ＧＰＵへのアクセスを有するルートパーティションと、（ｉｉ）ゲストアプリケーションを実行する子パーティションとを形成する、ハイパーバイザーをインスタンス化するステップを含む、仮想マシンセッションをインスタンス化する動作を含む（動作２０１）。例えばコンピューティング環境１００ａは、仮想マシンセッションをインスタンス化するステップの一部としてハイパーバイザー１０２をインスタンス化することができる。ハイパーバイザー１０２は、ルートパーティション１０３と、子パーティション１０４とを形成する。ルートパーティション１０３は、物理ＧＰＵ１０１ａへのアクセスを有する。子パーティション１０４は、ゲストアプリケーション１０５を含む１つまたは複数のゲストアプリケーションを実行し、物理ＧＰＵ１０１ａへの間接アクセスを有する。
【００４２】
[0045]方法２００ａはまた、ｖＧＰＵをゲストアプリケーションに提供する動作であって、ｖＧＰＵは子パーティション内で実行し、ｖＧＰＵのＵＭＤの一部として複数のコンピュートシェーダーＤＤＩをゲストアプリケーションに提供するステップを含み、複数のコンピュートシェーダーＤＤＩは、コンピュートシェーダーを用いて物理ＧＰＵにおいてＧＰＧＰＵ計算を行うために、ゲストアプリケーションがコンピュートシェーダーコマンドをｖＧＰＵに送ることを可能にするＡＰＩをもたらす、動作を含む（動作２０２）。例えば子パーティション１０４は、ｖＧＰＵ１０６をゲストソフトウェア１０５に提供することができる。ｖＧＰＵ１０６はユーザーモードドライバ１０６ａを含む。ユーザーモードドライバ１０６ａはコンピュートシェーダーＤＤＩ１０７を提供し、これはゲストソフトウェア１０５が、物理ＧＰＵ１０１ａにおいてコンピュートシェーダーＧＰＧＰＵ計算を行うためにｖＧＰＵ１０６を呼び出すことを可能にする。例えばゲストソフトウェア１０５（またはグラフィックスランタイム１０５ａ）は、物理ＧＰＵ１０１ａにおいてＧＰＧＰＵ計算を行うために、グラフィックスコマンド１１５をｖＧＰＵ１０６に送ることができる。
【００４３】
[0046]ユーザーモードドライバ１０６ａは、受け取ったグラフィックスコマンド１１５を、物理ハードウェア固有コマンドに変換する（例えばコマンドバッファ１１６の一部として）。次いでｖＧＰＵ１０６は、コンピュートシェーダーコマンドおよびデータ１１７（物理ハードウェア固有コマンドを含む）をレンダーコンポーネント１１２にリモート接続する。
【００４４】
[0047]方法２００ａはまた、ルートパーティション内で実行するレンダーコンポーネントが、ｖＧＰＵから物理ＧＰＵ固有コンピュートシェーダーコマンドを受け取る動作を含む（動作２０３）。例えばルートパーティション１０３内で実行するレンダーコンポーネント１１２は、ｖＧＰＵ１０６から、物理ＧＰＵ固有コンピュートシェーダーコマンドを含むコンピュートシェーダーコマンドおよびデータ１１７を受け取ることができる。
【００４５】
[0048]方法２００ａはまた、レンダーコンポーネントが、物理ＧＰＵにおける実行のために物理ＧＰＵ固有コンピュートシェーダーコマンドをスケジュールする動作を含む（動作２０４）。例えばコンピュートシェーダーコンポーネント１１３は、物理ＧＰＵ１０１ａにおけるコンピュートシェーダーデバイス上での実行のために、受け取った物理ＧＰＵ固有コンピュートシェーダーコマンドをスケジュールすることができる。そうすることでコンピュートシェーダーコンポーネント１１３は、物理ＧＰＵ固有コンピュートシェーダーコマンドの実行のための適切なコンテキストを構成し、維持することができる。
【００４６】
[0049]準仮想化ＧＤＩ高速化
ゲストソフトウェア準仮想化コンピュートシェーダーに、物理ＧＰＵ１０１ａへのアクセス（すなわちＧＰＧＰＵ計算能力）をもたらすことに加えて、実施形態は、物理ＧＰＵにおいてゲストソフトウェア準仮想化ＧＤＩ高速化をもたらすことに及ぶ。図１Ｂは、物理ＧＰＵハードウェアによる準仮想化ＧＤＩ高速化を可能にする代替のコンピューターアーキテクチャ１００ｂを示す。したがってコンピューターアーキテクチャ１００ｂは、物理または仮想中央処理装置を用いてＧＤＩコマンドを取り扱うのとは対照的に、ゲストソフトウェアが物理ＧＰＵを用いたＧＤＩコマンド高速化を要求することを可能にする。
【００４７】
[0050]子パーティション１０４’内でコンピューターアーキテクチャ１００ｂは、物理ＧＰＵ１０１ａ’上でのＧＤＩコマンドの高速化されたレンダリングを、これらのコマンドがゲストソフトウェア１０５’によって発行されたときに可能にするコンポーネントをもたらす。図示のように、例えば子パーティション１０４’はＧＤＩインターフェイス１０８を含み、これはグラフィックスランタイム１０５ａ’（例えばゲストオペレーティングシステムの一部であるグラフィックスランタイム）と通信するように構成される。さらにｖＧＰＵ１０６’は、カーネルモードドライバ１０９’のＧＤＩコンポーネント１１１においてＧＤＩインターフェイス１０８から受け取ったＧＤＩ高速化コマンド１２０を処理するように構成される。
【００４８】
[0051]ＧＤＩインターフェイス１０８は、１つまたは複数のＧＤＩコマンドインターフェイスをグラフィックスランタイム１０５ａ’に公開し、グラフィックスランタイム１０５ａ’から受け取ったＧＤＩ高速化コマンドをｖＧＰＵのカーネルモードドライバ１０９’に転送するように構成される。したがってゲストソフトウェア１０５’の要求により、物理ＧＰＵ１０１ａ’においてＧＤＩコマンド実行を高速化するために、グラフィックスランタイム１０５ａ’がＧＤＩ高速化グラフィックスコマンド１２０をＧＤＩインターフェイス１０８を通じてｖＧＰＵ１０６’のカーネルモードドライバ１０９’に送ることが可能になる。
【００４９】
[0052]カーネルモードドライバ１０９’のＧＤＩコンポーネント１１１は、対応する（１つまたは複数の）ハードウェアレンダリング動作と共に、１つまたは複数のＧＤＩコマンドインターフェイスを実装するように構成される。いくつかの実施形態ではｖＧＰＵ１０６’は、ＤｉｒｅｃｔＸ（登録商標）の特定のバージョン（例えばＤｉｒｅｃｔＸ（登録商標）バージョン１０および／または１１）に対応するＧＤＩコマンドを実装し、公開する。例えばＧＤＩコンポーネント１１１は、対応するハードウェアレンダリング動作と共に、「ＤｘｇｋＤｄｉＲｅｎｄｅｒＫｍ」インターフェイスを公開および実装することができる。ＧＤＩコンポーネント１１１は、任意の適切なＧＤＩ動作を実装することができるが、いくつかの実施形態ではＧＤＩコンポーネント１１１は以下の動作を実装する。
【００５０】
ｔｙｐｄｅｆ  ｓｔｒｕｃｔ＿ＤＸＧＫ＿ＲＥＮＤＥＲＫＭ＿ＣＯＭＭＡＮＤ
｛
ＤＸＧＫ＿ＲＥＮＤＥＲＫＭ＿ＯＰＥＲＡＴＩＯＮ  Ｏｐｃｏｄｅ；
ＵＩＮＴ  ＣｏｍｍａｎｄＳｉｚｅ；
ｕｎｉｏｎ
｛
ＤＸＧＫ＿ＧＤＩＡＲＧ＿ＢＩＴＢＬＴ  ＢｉｔＢｌｔ；
ＤＸＧＫ＿ＧＤＩＡＲＧ＿ＣＯＬＯＲＦＩＬＬ  ＣｏｌｏｒＦｉｌｌ；
ＤＸＧＫ＿ＧＤＩＡＲＧ＿ＡＬＰＨＡＢＬＥＮＤ  Ａｌｐｈａ  Ｂｅｎｄ；
ＤＸＧＫ＿ＧＤＩＡＲＧ＿ＳＴＲＥＴＣＨＢＬＴ  ＳｔｒｅｔｃｈＢｌｔ；
ＤＸＧＫ＿ＧＤＩＡＲＧ＿ＴＲＡＮＳＰＡＲＥＮＴＢＬＴ  ＴｒａｎｓｐａｒｅｎｔＢｌｔ；
ＤＸＧＫ＿ＧＤＩＡＲＧ＿ＣＬＥＡＲＴＹＰＥＢＬＥＮＤ  ＣｌｅａｒＴｙｐｅＢｌｅｎｄ；
｝  Ｃｏｍｍａｎｄ；
｝  ＤＸＧＫ＿ＲＥＮＤＥＲＫＭ＿ＣＯＭＭＡＮＤ；
[0053]カーネルモードドライバ１０９’は、ＧＤＩコマンドおよびデータ１１８をルートパーティション１０３’内のレンダーコンポーネント１１２’に送るように構成される。ＧＤＩコマンドおよびデータ１１８は、ＧＤＩ高速化コマンドを実行するための、３Ｄレンダリングデバイスおよびコンテキストに関する情報を含む。レンダーコンポーネント１１２’はＧＤＩコンポーネント１１４を含み、これはＧＤＩコマンドおよびデータ１１８を受け取り、受け取ったＧＤＩ高速化コマンドを物理ＧＰＵ１０１ａ’において実行するように構成される。
【００５１】
[0054]具体的にはＧＤＩコンポーネント１１４は、ＧＤＩサーフェス、および対応する３Ｄレンダリング（または合成）デバイス（例えばＤ３Ｄデバイス）を生成するように構成される。３Ｄレンダリングデバイスは、ＧＤＩ高速化コマンドを実行するための適切なコンテキストをもたらすように構成される。ＧＤＩサーフェスは、以下のＧＤＩサーフェスタイプのいずれかなどの、任意の適切なＧＤＩサーフェスを含むことができる：
Ｄ３ＤＫＭＤＴ＿ＧＤＩＳＵＲＦＡＣＥ＿ＴＥＸＴＵＲＥ
Ｄ３ＤＫＭＤＴ＿ＧＤＩＳＵＲＦＡＣＥ＿ＳＴＡＧＩＮＧ＿ＣＰＵＶＩＳＩＢＬＥ
Ｄ３ＤＫＭＤＴ＿ＧＤＩＳＵＲＦＡＣＥ＿ＳＴＡＧＩＮＧ
Ｄ３ＤＫＭＤＴ＿ＧＤＩＳＵＲＦＡＣＥ  ＬＯＯＫＵＰＴＡＢＬＥ
Ｄ３ＤＫＭＤＴ＿ＧＤＩＳＵＲＦＡＣＥ＿ＥＸＩＳＴＩＮＧＳＹＳＭＥＭ
３ＤＫＭＤＴ＿ＧＤＩＳＵＲＦＡＣＥ＿ＴＥＸＴＵＲＥ  ＣＰＵＶＩＳＩＢＬＥ
ＧＤＩコンポーネント１１４は、生成されたＧＤＩサーフェスを共有可能サーフェスとしてマークする。これによりデスクトップへの合成に成功できるようになる。
【００５２】
[0055]図２Ｂは、準仮想化実行環境の子パーティション内で実行するゲストアプリケーションに、ＧＰＵ高速化ＧＤＩ機能をもたらすための例示の方法２００ｂのフローチャートを示す。方法２００ｂについては、コンピューターアーキテクチャ１００ｂのコンポーネントおよびデータに関連して述べられる。
【００５３】
[0056]方法２００ｂは、（ｉ）物理ＧＰＵへのアクセスを有するルートパーティションと、（ｉｉ）ゲストアプリケーションを実行する子パーティションとを形成する、ハイパーバイザーをインスタンス化するステップを含む、仮想マシンセッションをインスタンス化する動作を含む（動作２０５）。例えばコンピューティング環境１００ｂは、仮想マシンセッションをインスタンス化するステップの一部としてハイパーバイザー１０２’をインスタンス化することができる。ハイパーバイザー１０２’は、ルートパーティション１０３’と、子パーティション１０４’とを形成する。ルートパーティション１０３’は、物理ＧＰＵ１０１ａ’へのアクセスを有する。子パーティション１０４’は、ゲストアプリケーション１０５’を含む１つまたは複数のゲストアプリケーションを実行し、物理ＧＰＵ１０１ａ’への間接アクセスを有する。
【００５４】
[0057]方法２００ｂはまた、ｖＧＰＵをゲストアプリケーションに提供する動作であって、ｖＧＰＵは子パーティション内で実行し、ｖＧＰＵのＫＭＤによる処理のために、ゲストオペレーティングシステムが、ゲストアプリケーションによって用いられるＧＤＩレンダリングコマンドを高速化することを可能にするｖＧＰＵのＫＭＤのＡＰＩを、ｖＧＰＵに提供するステップを含む、動作を含む（動作２０６）。例えば子パーティション１０４’は、ｖＧＰＵ１０６’およびＧＤＩインターフェイス１０８をゲストソフトウェア１０５’に提供する。ＧＤＩインターフェイス１０８は、カーネルモードドライバ１０９’による処理のために、および物理ＧＰＵ１０１ａ’による高速化のために、ｖＧＰＵ１０６’に対して、グラフィックスランタイム１０５ａ’（例えばオペレーティングシステムのグラフィックスランタイム）がゲストソフトウェア１０５’によって用いられるＧＤＩレンダリングコマンドを高速化することを可能にする。例えばグラフィックスランタイム１０５ａ’は、ＧＤＩ高速化コマンドの実行のために、ＧＤＩインターフェイス１０８を通して、グラフィックスコマンド１２０をカーネルモードドライバ１０９’に送ることができる。ｖＧＰＵ１０６’は、受け取ったＧＤＩコマンドを処理し、ＧＤＩコマンドおよびデータ１１８をルートパーティション１０３’内のレンダーコンポーネント１１２’に送るために、カーネルモードドライバ１０９’のＧＤＩコンポーネント１１１を用いる。
【００５５】
[0058]方法２００ｂはまた、ルートパーティション内で実行レンダーコンポーネントが、ｖＧＰＵからＧＤＩ高速化レンダリングコマンドを受け取る動作を含む（動作２０７）。例えばルートパーティション１０３’内で実行するレンダーコンポーネント１１２’は、ｖＧＰＵ１０６’からＧＤＩコマンドおよびデータ１１８を受け取ることができる。
【００５６】
[0059]方法２００ｂはまた、レンダーコンポーネントが、ルートパーティション内のＧＤＩ合成デバイス上にＧＤＩ高速化レンダリングコマンドをスケジュールする動作を含み、ＧＤＩ合成デバイスは、物理ＧＰＵにおいて少なくとも１つのＧＤＩ高速化レンダリングコマンドを実行するように構成され、ＧＤＩ合成デバイスはまた、デスクトップによる合成のために、少なくとも１つのＧＤＩ高速化レンダリングコマンドに対応するＧＤＩサーフェスを共有可能としてマークするように構成される（動作２０８）。例えばＧＤＩコンポーネント１１４は、３Ｄレンダリング（合成）デバイス、およびＧＤＩ高速化コマンドを実行するためのＧＤＩサーフェスを生成することができ、３Ｄレンダリング（合成）デバイス上の実行のためにＧＤＩ高速化コマンドをスケジュールすることができる。ＧＤＩサーフェスは、デスクトップにおける合成のために共有可能としてマークすることができる。
【００５７】
[0060]準仮想化コンピュートシェーダー（ＧＰＧＰＵ）機能および準仮想化ＧＤＩ高速化
いくつかの実施形態では単一のコンピューターアーキテクチャが、コンピュートシェーダー（ＧＰＧＰＵ）機能および準仮想化ＧＤＩ高速化の両方をもたらす。図１Ｃは、コンピュートシェーダー機能への準仮想化アクセス、および物理ＧＰＵハードウェアによる準仮想化ＧＤＩ高速化を可能にする例示のコンピューターアーキテクチャ１００ｃを示す。例えばコンピューターアーキテクチャ１００ｃは、ＧＤＩインターフェイス１０８と、ｖＧＰＵ１０６”とを含む。ｖＧＰＵ１０６”は、コンピュートシェーダーＤＤＩ１０７を含むユーザーモードドライバ１０６ａ”を含んでいる。ｖＧＰＵ１０６”はまた、コンピュートシェーダーコンポーネント１１０ａおよびＧＤＩコンポーネント１１１の両方を含む、カーネルモードドライバ１０９”を含んでいる。
【００５８】
[0061]ｖＧＰＵ１０６”（子パーティション１０４”内で実行する）は、コンピュートシェーダーコマンドおよびデータと、ＧＤＩコマンドおよびデータとの両方を、ルートパーティション１０３”内で実行するレンダーコンポーネント１１２”に通信することができる。レンダーコンポーネント１１２”は、ＧＰＵ１０１ａ”においてコンピュートシェーダーおよびＧＤＩコマンドを実行するための、コンピュートシェーダーコンポーネント１１３およびＧＤＩコンポーネント１１４の両方を含む。コンピューターアーキテクチャ１００ｃは、コンピュートシェーダーおよびＧＤＩ機能の両方を含むことによって、向上された機能、および特定のレンダリングフレームワークとのより大きな適合性をもたらすことができることが理解されるであろう。
【００５９】
[0062]本発明は、その趣旨または本質的な特徴から逸脱せずに、他の特定の形で実施することができる。述べられた実施形態は、すべての点で例示のみであり、限定的ではないと見なされるべきである。したがって本発明の範囲は上記の説明によってではなく、添付の「特許請求の範囲」によって示される。特許請求の範囲と等価な意味および範囲内に含まれるすべての変更は、それらの範囲に包含されるものである。
【図１Ａ】
2015511346.tif 000003
【図１Ｂ】
2015511346.tif 000004
【図１Ｃ】
2015511346.tif 000005
【図２Ａ】
2015511346.tif 000006
【図２Ｂ】
2015511346.tif 000007
【国際調査報告】
2015511346.tif 000008
2015511346.tif 000009