(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-04-20
(45)【発行日】2023-04-28
(54)【発明の名称】アプリケーション移行のためのシステム及び方法
(51)【国際特許分類】
G06F 9/52 20060101AFI20230421BHJP
G06F 9/44 20180101ALI20230421BHJP
G06F 9/38 20180101ALI20230421BHJP
【FI】
G06F9/52 150Z
G06F9/44
G06F9/38 370C
(21)【出願番号】P 2021110003
(22)【出願日】2021-07-01
(62)【分割の表示】P 2018528615の分割
【原出願日】2016-09-19
【審査請求日】2021-07-07
(32)【優先日】2015-12-02
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】ジョナサン ローレンス キャンベル
(72)【発明者】
【氏名】ユピン シェン
【審査官】三坂 敏夫
(56)【参考文献】
【文献】米国特許出願公開第2015/0095598(US,A1)
【文献】特表2012-504296(JP,A)
【文献】米国特許第06549968(US,B1)
【文献】米国特許出願公開第2013/0166790(US,A1)
【文献】特開2004-334865(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/455ー9/54
G06F 9/38
G06F 9/44
(57)【特許請求の範囲】
【請求項1】
アプリケーションを移行する方法であって、
少なくとも1つのアプリケーションが実行されている間に、ドッキング可能なデバイスのドッキング状態を決定することと、
前記ドッキング可能なデバイスがドッキング状態にあることを検出したことに応じて、前記ドッキング可能なデバイスからドッキングステーションへのアプリケーションの移行を開始することであって、前記ドッキング可能なデバイスが第
1プロセッサを備え、前記ドッキングステーションが第
2プロセッサを備える、ことと、
前記ドッキング可能なデバイスがドッキング解除状態に移行していることを検出したことに応じて、前記ドッキングステーションから前記ドッキング可能なデバイスへのアプリケーションの移行を開始することと、
前記ドッキング可能なデバイスがドッキング解除状態であることを検出したことに応じて、前記ドッキング可能なデバイスにおいて仮想の第
2プロセッサを維持することと、を含み、
前記アプリケーションは、前記ドッキング可能なデバイスから前記ドッキングステーションへの前記アプリケーションの移行中、又は、前記ドッキングステーションから前記ドッキング可能なデバイスへの前記アプリケーションの移行中に実行を継続し、
前記ドッキング可能なデバイスの少なくとも1つのドライバは、前記仮想の第
2プロセッサに対して作業が送信されないようにする、
方法。
【請求項2】
転送先プロセッサ上でアプリケーション状態を再生成するために必要な全てのデータを維持することを含み、前記転送先プロセッサは、前記ドッキング可能なデバイスがドッキング状態であるかドッキング解除状態であるかにかかわらず、ドッキング解除するときのデータ転送を最小限に抑えるために、前記データを有する、
請求項1の方法。
【請求項3】
前記少なくとも1つのドライバは、前記ドッキング可能なデバイスにおいて前記仮想の第
2プロセッサを維持する、
請求項1の方法。
【請求項4】
前記第
2プロセッサは、前記第
1プロセッサよりも高性能なプロセッサである、
請求項1の方法。
【請求項5】
前記少なくとも1つのドライバは、前記ドッキング可能なデバイスに伝達されるいくつかの動作を記録する、
請求項1の方法。
【請求項6】
ドッキングイベントを検出することと、
前記少なくとも1つのドライバが、前記ドッキング可能なデバイスから前記ドッキングステーションへのアプリケーションの移行を開始するための通知を送信することと、を含む、
請求項1の方法。
【請求項7】
ドッキング解除要求を検出することと、
前記ドッキング解除要求をロックすることと、
前記ドッキングステーションから前記ドッキング可能なデバイスへのアプリケーションの移行が完了した後に、前記ドッキング可能なデバイスが物理的にドッキング解除できるように前記ドッキング解除要求をロック解除することと、を含む、
請求項1の方法。
【請求項8】
ドッキングイベントを検出することと、
前記ドッキングイベントが前記ドッキング可能なデバイスをドッキングすることであることを検出したことに応じて、前記ドッキング可能なデバイスから前記ドッキングステーションへのアプリケーションの移行を開始することと、
前記ドッキングイベントが前記ドッキング可能なデバイスをドッキング解除することであることを検出したことに応じて、前記ドッキングステーションから前記ドッキング可能なデバイスへのアプリケーションの移行を開始することと、を含む、
請求項1の方法。
【請求項9】
ドッキング可能なデバイスであって、
第
1プロセッサと、
少なくとも1つのドライバと、を備え、
前記少なくとも1つのドライバは、
少なくとも1つのアプリケーションが実行されている間に、ドッキング可能なデバイスのドッキング状態を決定することと、
前記ドッキング可能なデバイスがドッキング状態にあるという条件において、前記ドッキング可能なデバイスからドッキングステーションへのアプリケーションの移行を開始することであって、前記ドッキングステーションは第
2プロセッサを備える、ことと、
前記ドッキング可能なデバイスがドッキング解除状態に移行しているという条件において、前記ドッキングステーションから前記ドッキング可能なデバイスへのアプリケーションの移行を開始することと、
前記ドッキング可能なデバイスがドッキング解除状態であるという条件において、前記ドッキング可能なデバイスにおいて維持される仮想の第
2プロセッサに対して作業が送信されないようにすることと、
を行うように構成されており、
前記アプリケーションは、前記ドッキング可能なデバイスから前記ドッキングステーションへの前記アプリケーションの移行中、又は、前記ドッキングステーションから前記ドッキング可能なデバイスへの前記アプリケーションの移行中に実行を継続する、
ドッキング可能なデバイス。
【請求項10】
前記少なくとも1つのドライバは、転送先プロセッサ上でアプリケーション状態を再生成するために必要な全てのデータを維持するように構成されており、前記転送先プロセッサは、前記ドッキング可能なデバイスがドッキング状態であるかドッキング解除状態であるかにかかわらず、ドッキング解除するときのデータ転送を最小限に抑えるために、前記データを有する、
請求項9のドッキング可能なデバイス。
【請求項11】
前記少なくとも1つのドライバは、前記ドッキング可能なデバイスがドッキング状態であるという条件において、前記ドッキング可能なデバイスに伝達されるいくつかの動作を記録するように構成されている、
請求項9のドッキング可能なデバイス。
【請求項12】
前記少なくとも1つのドライバは、
ドッキング解除要求を検出することと、
前記ドッキング解除要求をロックすることと、
前記ドッキングステーションから前記ドッキング可能なデバイスへのアプリケーションの移行が完了した後に、前記ドッキング可能なデバイスが物理的にドッキング解除できるように前記ドッキング解除要求をロック解除することと、
を行うように構成されている、
請求項11のドッキング可能なデバイス。
【請求項13】
アプリケーションを移行する方法であって、
少なくとも1つのアプリケーションが実行されている間に、ドッキング可能なデバイスのドッキング状態を決定することと、
前記ドッキング可能なデバイスがドッキング状態にあることを検出したことに応じて、前記ドッキング可能なデバイスからドッキングステーションへのアプリケーションの移行を開始することであって、前記ドッキング可能なデバイスが第
1プロセッサを備え、前記ドッキングステーションが第
2プロセッサを備える、ことと、
前記ドッキング可能なデバイスがドッキング解除状態に移行していることを検出したことに応じて、前記ドッキングステーションから前記ドッキング可能なデバイスへのアプリケーションの移行を開始することと、
転送先プロセッサ上でアプリケーション状態を再生成するために必要な全てのデータを維持することであって、前記転送先プロセッサは、前記ドッキング可能なデバイスがドッキング状態であるかドッキング解除状態であるかにかかわらず、ドッキング解除するときのデータ転送を最小限に抑えるために、前記データを有する、ことと、を含み、
前記アプリケーションは、前記ドッキング可能なデバイスから前記ドッキングステーションへの前記アプリケーションの移行中、又は、前記ドッキングステーションから前記ドッキング可能なデバイスへの前記アプリケーションの移行中に実行を継続する、
方法。
【請求項14】
ドッキング解除要求を検出することと、
前記ドッキング解除要求をロックすることと、
前記ドッキングステーションから前記ドッキング可能なデバイスへのアプリケーションの移行が完了した後に、前記ドッキング可能なデバイスが物理的にドッキング解除できるように前記ドッキング解除要求をロック解除することと、を含む、
請求項13の方法。
【請求項15】
前記第
2プロセッサは、前記第
1プロセッサよりも高性能なプロセッサである、
請求項14の方法。
【請求項16】
前記ドッキング可能なデバイスに伝達されるいくつかの動作を記録することを含む、
請求項13の方法。
【請求項17】
ドッキングイベントを検出することと、
前記ドッキング可能なデバイスから前記ドッキングステーションへのアプリケーションの移行を開始するための通知を送信することと、を含む、
請求項13の方法。
【請求項18】
前記第
2プロセッサは、前記第
1プロセッサよりも高性能なプロセッサである、
請求項17の方法。
【請求項19】
前記ドッキング可能なデバイスがドッキング解除状態であることに応じて、前記ドッキング可能なデバイスにおいて仮想の第2タイプのプロセッサを維持することを含む、
請求項13の方法。
【請求項20】
前記仮想の第2タイプのプロセッサに対して作業が送信されないようにすることを含む、
請求項19の方法。
【請求項21】
ドッキング可能なデバイスにおいて使用される方法であって、
第1プロセッサを用いて、前記ドッキング可能なデバイスにおいて少なくとも1つのアプリケーションを実行することと、
前記第1プロセッサを用いて前記少なくとも1つのアプリケーションが実行されている間に、前記ドッキング可能なデバイスがドッキング状態であるかドッキング解除状態であるかを判別することと、
前記ドッキング可能なデバイスがドッキング状態であると判別したことに応じて、前記第1プロセッサからドッキングステーションの第2プロセッサへの前記少なくとも1つのアプリケーションのアプリケーションの移行を開始することであって、前記少なくとも1つのアプリケーションは、前記第1プロセッサから前記第2プロセッサへのアプリケーションの移行の間、実行を継続する、ことと、
前記ドッキング可能なデバイスがドッキング解除状態である場合に、前記ドッキング可能なデバイスにおいて仮想プロセッサを維持することと、を含む、
方法。
【請求項22】
前記ドッキング可能なデバイスがドッキング解除状態であると判別したことに応じて、前記第2プロセッサから前記第1プロセッサへの前記少なくとも1つのアプリケーションのアプリケーションの移行を開始することであって、前記少なくとも1つのアプリケーションは、前記第2プロセッサから前記第1プロセッサへのアプリケーションの移行の間、実行を継続する、ことを含む、
請求項21の方法。
【請求項23】
少なくとも1つのドライバは、前記第2プロセッサの仮想バージョンである仮想プロセッサ上でアプリケーションが実行されるのを抑制する、
請求項21の方法。
【請求項24】
前記第1プロセッサ及び前記第2プロセッサの共通機能を決定することを含む、
請求項21の方法。
【請求項25】
前記ドッキング可能なデバイスがドッキング状態であるかドッキング解除状態であるかにかかわらず、前記少なくとも1つのアプリケーションに関連するアプリケーション状態を再生成するために必要なデータを維持することを含む、
請求項21の方法。
【請求項26】
前記ドッキング可能なデバイスがドッキング状態であると判別したことに応じて、前記アプリケーションの移行中に前記第2プロセッサに伝達される動作を記録することを含む、
請求項21の方法。
【請求項27】
ドッキングイベントを検出することと、
前記第1プロセッサから前記第2プロセッサへのアプリケーションの移行を開始するための通知を送信することと、を含む、
請求項21の方法。
【請求項28】
前記第2プロセッサから前記第1プロセッサへのアプリケーションの移行が完了した後に、前記ドッキング可能なデバイスが物理的にドッキング解除できるように、ドッキング解除要求を検出したことに応じて前記ドッキング可能なデバイスをロック解除することを含む、
請求項22の方法。
【請求項29】
ドッキングイベントを検出することと、
前記ドッキングイベントが前記ドッキング可能なデバイスをドッキングすることであることを検出したことに応じて、前記第1プロセッサから前記第2プロセッサへのアプリケーションの移行を開始することと、
前記ドッキングイベントが前記ドッキング可能なデバイスをドッキング解除することであることを検出したことに応じて、前記第2プロセッサから前記第1プロセッサへのアプリケーションの移行を開始することと、を含む、
請求項21の方法。
【請求項30】
ドッキング可能なデバイスであって、
少なくとも1つのアプリケーションを実行するように構成された第1プロセッサと、
少なくとも1つのドライバと、を備え、
前記少なくとも1つのドライバは、
前記少なくとも1つのアプリケーションが実行されている間に、前記ドッキング可能なデバイスがドッキング状態であるかドッキング解除状態であるかを判別することと、
前記ドッキング可能なデバイスがドッキング状態であると判別したことに応じて、前記第1プロセッサからドッキングステーションの第2プロセッサへの前記少なくとも1つのアプリケーションのアプリケーションの移行を開始することであって、前記少なくとも1つのアプリケーションは、前記第1プロセッサから前記第2プロセッサへのアプリケーションの移行の間、実行を継続する、ことと、
前記ドッキング可能なデバイスがドッキング解除状態である場合に、前記ドッキング可能なデバイスにおいて仮想プロセッサを維持することと、
を行うように構成されている、
ドッキング可能なデバイス。
【請求項31】
前記少なくとも1つのドライバは、前記ドッキング可能なデバイスがドッキング解除状態であると判別したことに応じて、前記第2プロセッサから前記第1プロセッサへの前記少なくとも1つのアプリケーションのアプリケーションの移行を開始することであって、前記少なくとも1つのアプリケーションは、前記第2プロセッサから前記第1プロセッサへのアプリケーションの移行の間、実行を継続する、ことを行うように構成されている、
請求項30のドッキング可能なデバイス。
【請求項32】
前記少なくとも1つのドライバは、前記第2プロセッサの仮想バージョンである仮想プロセッサ上でアプリケーションが実行されるのを抑制する、
請求項30のドッキング可能なデバイス。
【請求項33】
前記少なくとも1つのドライバは、前記第1プロセッサ及び前記第2プロセッサの共通機能を決定するように構成されている、
請求項30のドッキング可能なデバイス。
【請求項34】
前記少なくとも1つのドライバは、前記ドッキング可能なデバイスがドッキング状態であるかドッキング解除状態であるかにかかわらず、前記少なくとも1つのアプリケーションに関連するアプリケーション状態を再生成するために必要なデータを維持することを指示するように構成されている、
請求項30のドッキング可能なデバイス。
【請求項35】
前記少なくとも1つのドライバは、前記ドッキング可能なデバイスがドッキング状態であると判別したことに応じて、前記アプリケーションの移行中に前記第2プロセッサに伝達される動作を記録するように構成されている、
請求項30のドッキング可能なデバイス。
【請求項36】
前記少なくとも1つのドライバは、
ドッキングイベントを検出することと、
前記第1プロセッサから前記第2プロセッサへのアプリケーションの移行を開始するための通知を送信することと、
を行うように構成されている、
請求項30のドッキング可能なデバイス。
【請求項37】
前記少なくとも1つのドライバは、前記第2プロセッサから前記第1プロセッサへのアプリケーションの移行が完了した後に、前記ドッキング可能なデバイスが物理的にドッキング解除できるように、ドッキング解除要求を検出したことに応じて前記ドッキング可能なデバイスをロック解除するように構成されている、
請求項31のドッキング可能なデバイス。
【請求項38】
前記少なくとも1つのドライバは、
ドッキングイベントを検出することと、
前記ドッキングイベントが前記ドッキング可能なデバイスをドッキングすることであることを検出したことに応じて、前記第1プロセッサから前記第2プロセッサへのアプリケーションの移行を開始することと、
前記ドッキングイベントが前記ドッキング可能なデバイスをドッキング解除することであることを検出したことに応じて、前記第2プロセッサから前記第1プロセッサへのアプリケーションの移行を開始することと、
を行うように構成されている、
請求項30のドッキング可能なデバイス。
【請求項39】
ドッキング可能なデバイスであって、
少なくとも1つのアプリケーションを実行するように構成された第1プロセッサと
、
少なくとも1つのドライバと、を備え、
前記少なくとも1つのドライバは、
前記少なくとも1つのアプリケーションが実行されている間に、前記ドッキング可能なデバイスがドッキング状態であるかドッキング解除状態であるかを判別することと、
前記ドッキング可能なデバイスがドッキング状態であると判別したことに応じて、前記第1プロセッサから
ドッキングステーションの第2プロセッサへの前記少なくとも1つのアプリケーションのアプリケーションの移行を開始することであって、前記少なくとも1つのアプリケーションは、前記第1プロセッサから前記第2プロセッサへのアプリケーションの移行の間、実行を継続する、ことと、
前記ドッキング可能なデバイスがドッキング状態であるかドッキング解除状態であるかにかかわらず、前記少なくとも1つのアプリケーションに関連するアプリケーション状態を再生成するために必要なデータを維持することと、
を行うように構成されている、
ドッキング可能なデバイス。
【請求項40】
前記少なくとも1つのドライバは、前記ドッキング可能なデバイスがドッキング解除状態であると判別したことに応じて、前記第2プロセッサから前記第1プロセッサへの前記少なくとも1つのアプリケーションのアプリケーションの移行を開始することであって、前記少なくとも1つのアプリケーションは、前記第2プロセッサから前記第1プロセッサへのアプリケーションの移行の間、実行を継続する、ことを行うように構成されている、
請求項39のドッキング可能なデバイス。
【発明の詳細な説明】
【技術分野】
【0001】
(関連出願の相互参照)
本願は、2015年12月2日に出願された米国特許出願第14/956,511号の利益を主張するものであり、この内容は、本明細書中に完全に記載されているように参照により援用される。
【0002】
開示された実施形態は、概して、グラフィックスシステム及び方法に関し、特に、着脱可能(detachable)なグラフィックスシステム及び方法に関する。
【背景技術】
【0003】
着脱可能又は切替可能(switchable)なグラフィックスは、高性能な個別のグラフィックス処理装置(graphics processing unit:GPU)のグラフィカル処理能力と、統合されたGPUの電力効率との両方を利用する技術である。一般に、着脱可能なグラフィックスの技術では、3Dアプリケーションに必要な場合にのみ個別のGPUを使用し、残りの時間には統合されたGPUの機能が使用される。
【0004】
しかしながら、アプリケーションの実行中に個別のGPUをシステムに追加するには、新たに使用可能な個別のGPUを利用するために、アプリケーションを再起動する必要がある。同様に、アプリケーションが個別のGPU上で実行されている間に個別のGPUをシステムから取り外すには、個別のGPUが取り外し可能になる前にアプリケーションを閉じる必要がある。さらに、現在のシステムでは、GPUを取り外すための明示的なユーザ対話が必要であり、システムに追加された新たなGPUは、3Dアプリケーションが再開されるまで使用されないことになる(つまり、ユーザの知識と、アプリケーションの再起動と、が必要になる)。
【発明の概要】
【課題を解決するための手段】
【0005】
ドッキング可能なデバイスとドッキングステーションとの間でアプリケーションの移行をシームレスに行う方法及び装置について記載されている。ドッキング可能なデバイスはプロセッサを含み、ドッキングステーションは高性能なプロセッサを含む。この方法は、少なくとも1つのアプリケーションが動作している間に、ドッキング可能なデバイスのドッキング状態を判別することを含む。ドッキング可能なデバイスからドッキングステーションへのアプリケーションの移行は、ドッキング可能なデバイスがドッキング状態に移行しているときに開始される。ドッキングステーションからドッキング可能なデバイスへのアプリケーションの移行は、ドッキング可能なデバイスがドッキング解除状態に移行しているときに開始される。アプリケーションは、ドッキング可能なデバイスからドッキングステーションへのアプリケーションの移行中、又は、ドッキングステーションからドッキング可能なデバイスへのアプリケーションの移行中に実行され続ける。
【0006】
添付の図面と併せて例として与えられる以下の説明から、より詳細な理解が得られるであろう。
【図面の簡単な説明】
【0007】
【
図1】1つ以上の開示された実施形態を実装することができる例示的なデバイスのブロック図である。
【
図2】特定の実施形態による、ドッキング可能なデバイス及びドッキングステーションの例示的なブロック図である。
【
図3】特定の実施形態による、アプリケーションの移行の例示的なハイレベルフローチャートである。
【発明を実施するための形態】
【0008】
着脱可能なグラフィックスシステムは、多数の方法で実装することができる。例えば、個別のグラフィックス処理ユニット(discrete graphics processing unit:dGPU)を含むドッキングステーションとドッキングすることができるドッキング可能なデバイス(例えば、タブレット、ラップトップ、ノートブック及び他の同様なデバイス等)が利用可能であり、又は、利用可能になる。概して、ドッキング可能なデバイスがドッキングされると、アプリケーションは、着脱可能なグラフィックスプロファイル(例えば、AMDのPowerXpress(PX)プロファイル等)で指定されている場合に、dGPUで実行することができる。PXプロファイルについて言及しているが、他の着脱可能なグラフィックスプロファイルソリューション又は実装も、同様に適用可能である。dGPUで実行されているアプリケーションは、ドッキング可能なデバイスがドッキングステーションからドッキング解除されている場合に、統合されたGPU又は高速処理ユニット(accelerated processing unit:APU)に移行される。アプリケーションは、ドッキング可能なデバイスがドッキングステーションと再度ドッキングすると、dGPUに戻される。移行処理が完了する前のドッキング解除を防ぐために、メカニカルロックが使用される。カーネルモードドライバ(kernel mode driver:KMD)は、dGPUにおいてDirectXデバイスが生成されていない場合に、ロックの解除を可能にする。本明細書ではDirectXについて言及しているが、現実的な3次元(three-dimensional:3D)グラフィックスと、没入感のある音楽及び音響効果とを提供するプログラムを可能にする、ディスプレイやオーディオカードの性能にアクセス可能な他のアプリケーションプログラミングインタフェース(Application Programming Interface:API)も、同様に適用可能である。
【0009】
PXマルチGPUソリューションでは、3Dアプリケーションは、節電するために統合されたGPU、又は、追加のパフォーマンスを実現する高性能なGPUの何れかで動作する。この判断は、アプリケーションのロード時に行われるため、アプリケーションがロードされると、当該アプリケーションが常に同じGPUで動作する。アプリケーションの移行により、アプリケーションの実行中に3Dアプリケーションを(アプリケーションを再ロードすることなく)GPU間で移行することができる。これにより、現在実行中の3Dアプリケーション及びユーザエクスペリエンスに影響を与えることなく、個別/高性能のGPUをシステムに追加したり、システムから取り外したりすることができるシステムフォームファクタが可能になる。ドッキング状態とドッキング解除状態との間のシームレスな遷移は、他のGPU上の3Dアプリケーションの状態の再生成に必要な全てのデータの維持と、必要なデータの当該他のGPUへの転送と、によって実現される。GPUを取り外すには、全ての状態情報をGPU上で破棄する必要があり、これにより、GPUを取り外してもよい(アプリケーションが以前のGPUから新たなGPUに完全に移行される)。
【0010】
図1は、1つ以上の開示された実施形態を実装することができる例示的なデバイス100のブロック図である。デバイス100は、例えば、コンピュータ、ゲームデバイス、ハンドヘルドコンピュータ、セットトップボックス、テレビ、携帯電話又はタブレットコンピュータを含んでもよい。デバイス100は、プロセッサ102と、メモリ104と、ストレージ106と、1つ以上の入力デバイス108と、1つ以上の出力デバイス110と、を含む。また、デバイス100は、オプションとして、入力ドライバ112及び出力ドライバ114を含んでもよい。デバイス100は、
図1に示されていない追加のコンポーネントを含んでもよいことが理解されるであろう。
【0011】
プロセッサ102は、中央処理装置(central processing unit:CPU)、グラフィックス処理装置(GPU)、同じダイ上に配置されたCPU及びGPU、又は、1つ以上のプロセッサコアを含んでもよく、各プロセッサコアは、CPUであってもよいしGPUであってもよい。メモリ104は、プロセッサ102と同じダイ上に配置されてもよいし、プロセッサ102とは別に配置されてもよい。メモリ104は、例えば、ランダムアクセスメモリ(random access memory:RAM)、ダイナミックRAM又はキャッシュ等の揮発性又は不揮発性メモリを含んでもよい。
【0012】
ストレージ106は、例えば、ハードディスクドライブ、ソリッドステートドライブ、光ディスク又はフラッシュドライブ等の固定又は取り外し可能なストレージを含んでもよい。入力デバイス108は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、バイオメトリックスキャナ、又は、ネットワーク接続(例えば、無線IEEE802信号の送信及び/又は受信のためのワイヤレスローカルエリアネットワークカード)を含んでもよい。出力デバイス110は、ディスプレイ、スピーカ、プリンタ、触覚フィードバックデバイス、1つ以上のライト、アンテナ、又は、ネットワーク接続(例えば、無線IEEE802信号の送信及び/又は受信のためのワイヤレスローカルエリアネットワークカード)を含んでもよい。
【0013】
入力ドライバ112は、プロセッサ102及び入力デバイス108と通信し、プロセッサ102が入力デバイス108から入力を受信することを可能にする。出力ドライバ114は、プロセッサ102及び出力デバイス110と通信し、プロセッサ102が出力デバイス110に出力を送信することを可能にする。入力ドライバ112及び出力ドライバ114はオプションのコンポーネントであって、入力ドライバ112及び出力ドライバ114が存在しない場合には、デバイス100が同じように動作することに留意されたい。
【0014】
図2は、特定の実施形態による、ドッキング可能なデバイス200及びドッキングステーション250の例示的なブロック図である。ドッキング可能なデバイス200は、ユーザモードドライバ(user mode driver:UMD)205と、カーネルモードドライバ(kernel mode driver:KMD)210と、メモリ212と、統合されたGPU(integrated GPU:iGPU)215と、オペレーティングシステム(operating system:O/S)225を含むCPU220と、を含む。iGPU215及びCPU220として図示されているが、高速処理装置(accelerated processing unit:APU)が使用されてもよい。アプリケーション235は、ユーザによって起動されると、ドッキング可能なデバイス200上で動作する。ドッキングステーション250は、dGPU265を含む。
【0015】
概して、着脱可能なグラフィックスプロファイル内の設定及びドッキング可能なデバイス200が最初にドッキングステーション250にドッキングされたときのドライバ構成に応じて、O/S225は、iGPU215及びdGPU265を認識する。アプリケーション移行構成では、dGPU265に関してO/S225に見える2つの状態が存在する。ドッキング可能なデバイス200がドッキングステーション250にドッキングされると、dGPU265は、「物理的」状態でO/S225に見える。UMD205及びKMD210は、必要に応じてdGPU265に仕事を提出する。ドッキング可能なデバイス200がドッキングステーション250とドッキング解除されると、O/S225は、
図2において仮想dGPU265’と示されている「仮想」dGPU265を見る。UMD205及びKMD210は、仮想dGPU265’に提出された仕事がないことを保証する。ドッキング可能なデバイス200及びドッキングステーション250は、
図2に示されていない追加のコンポーネントを含み得ることが理解されるであろう。
【0016】
初期構成の後、O/S225は、実行中、2つのGPU(すなわち、iGPU215と、ドッキング可能なデバイス200がドッキングされたときのdGPU265及びドッキング可能なデバイス200がドッキング解除されたときの仮想dGPU265’の何れかと)を常に「見る」ことになる。つまり、ドッキング解除状態では、dGPU265は、O/S225に関して仮想モード(すなわち、論理エンティティであって、物理エンティティではない)にある。O/S225は、常に両方のGPUを見ているので、アプリケーションの移行は、iGPU215とdGPU265との間でシームレスである。仮想dGPU265’は、ドライバ及び他のそのような関連する仕様を含む能力に関してdGPU265と同様に生成され、処理される。
【0017】
図3は、本発明の実施形態による、アプリケーションの移行の例示的なハイレベルフローチャートである。ここでの説明は、
図2も参照する。最初のイベントとして、ドッキング可能なデバイス200は、最初のドッキング時に、ドッキング可能なデバイス200がドッキングデバイス250とシームレスにドッキング/ドッキング解除するのを可能にするアプリケーション移行構成で構成される。O/S225はdGPU265を認識し、着脱可能なグラフィックスプロファイルは、以下に説明するように、ドッキングイベントの検出時にドッキング可能なデバイス200からドッキングステーション250へのアプリケーションの移行が完了し、ドッキング解除イベントの検出時にドッキングステーション250からドッキング可能なデバイス200へのアプリケーションの移行が完了するように設定される。着脱可能なグラフィックスプロファイルは、最初にベンダーによってデフォルトのGPUに設定され、ユーザは、例えば、アプリケーションの移行を実行するためにかかる設定を無効にすることができることに留意されたい。
【0018】
アプリケーション235の起動後(300)、KMD210は、ドッキング可能なデバイス200がドッキングステーション250にドッキングされているどうかを判別する(305)。ドッキング可能なデバイスがドッキングステーションにドッキングされている場合(307)、アプリケーション235はdGPU250上で実行する(309)。KMD210はドッキング状態を継続的に確認し、アプリケーション235は、KMD210がドッキング可能なデバイス200をドッキングステーション250からドッキング解除しようとする試みを検出するまで(313)、dGPU250上での実行を継続する(311)。KMD210は、ドッキング可能なデバイス200のドッキング解除要求を検出すると、ドッキング解除イベントについてUMD205に伝達又は通知し(315)、移行が完了するまでドッキング解除要求をロックする。UMD205は、反応し、GPU間の移行をトリガする。具体的には、UMD205は、(本明細書で後述するように)アプリケーション235と、全ての他の必要な情報及びデータと、をドッキングステーション250内のdGPU265からドッキング可能なデバイス200内のiGPU215に移行する。この移行を行う際、アプリケーション235の実行が中断されず、結果として移行がシームレスに行われる。KMD210は、全ての移行が完了したことを検出すると、ドッキング可能なデバイス200を物理的にドッキング解除できるように、ドッキング解除要求をアンロックする。次に、アプリケーションは、iGPU215上で実行しており(316)、UMD205及びKMD210は、互いに通信して、ドッキング解除状態でdGPU265に送信されるものが何もないが、iGPU215上で実行されるのを確実にする。また、UMD205及びKMD210は、いくつかの動作を記録することができ、これらの動作は、ドッキング可能なデバイス200がドッキングステーション250にドッキングされたときに、ドッキング可能なデバイス200に伝搬され得る。
【0019】
アプリケーションの移行が完了した後、ドッキング可能なデバイス200がドッキングされていない場合(308)、KMD210は、ドッキング状態を継続的に確認し、アプリケーション235は、ドッキング可能なデバイス200がドッキングステーション250にドッキングされたことをKMD210が判別するまで(319)、iGPU215上での実行を継続する(317)。ドッキング可能なデバイス200がドッキングされた場合、KMD210は、ドッキングイベントについてUMD205に伝達又は通知する(321)。UMD205は、反応し、GPU間の移行をトリガする。具体的には、UMD205は、アプリケーション235と、全ての他の必要な情報及びデータと、をドッキング可能なデバイス200内のiGPU215からドッキングステーション250内のdGPU265に移行又はプッシュする。概して、アプリケーションの移行には、少なくとも、グラフィックスアダプタを開くことと、DXデバイスをdGPU265に生成することと、適切な状態及びデータ情報をdGPUパイプラインに提供することと、コンテキスト及び環境をdGPU265にコピーすることと、が必要であり、これにより、アプリケーション235は、あらゆることが一様にわかる。つまり、アプリケーションの移行は、アプリケーション235に対して透過的である。上述したように、アプリケーション235の実行が中断されず、結果として移行がシームレスに行われる。
【0020】
本明細書では、移行アプリケーションを実装するための例示的な実施形態を説明する。本明細書で述べるように、着脱可能なグラフィックスプロファイルが、アプリケーションが着脱可能なグラフィックス構成でdGPU上で動作すべきであることを示す場合には、UMDは、いくつかの変更を必要とする。例えば、ドッキング又はドッキング解除イベントが要求されたという通知をKMDから待つ追加のスレッドが生成される。つまり、アプリケーションの移行が有効になっている場合、UMDは、ドッキング又はドッキング解除イベントについてのKMDの通知を確認するために、余分なスレッドを生成する。余分なスレッドによって通知が検出されると、余分なスレッドは、残りのUMD(アプリケーションの移行が有効であるか否かにかかわらず存在する部分)に対して移行を行うように通知する。全てのリソース、シェーダ、ビュー等は、ドッキング又はドッキング解除されたかどうかにかかわらずiGPU(又はAPU)において生成され、ドッキングされた場合にはdGPUにおいて生成される。ドッキング時にdGPUが利用可能である場合、dGPU上のリソース、シェーダ、ビュー等を生成するのに必要な全ての情報は、例えばメモリ212に格納され、記憶される。この情報は、全てのリソース、シェーダ、ビュー等のリストとして保持することができる。アプリケーションからの全てのデータロードは、iGPU(又はAPU)と、dGPU(現在ドッキングされている場合)と、に送信される。これは、ドッキング解除時に転送する必要のあるデータの量を最小限に抑えるために行われる。上記の情報は、メモリ212を使用してUMDに記憶することができる。
【0021】
時間及びイベントシーケンスのために
図2及び
図3を参照すると、ドッキング解除が要求されたこと(例えば、
図3の(313)を参照)を追加のスレッドが検出すると、KMD(例えば、KMD210)は、ドッキング解除イベントについての通知をUMD(例えば、UMD205)に発行する。具体的には、KMDは、iGPU(又はAPU)(例えば、iGPU215)に移行するようにUMDに通知するコマンドを発行する。UMDは、ドッキング解除イベントを検出すると、例えば、Microsoft(登録商標)ランタイムプログラムからUMDへのより多くのデバイスドライバインタフェース(device driver interface:DDI)コールを防止するためにクリティカルセクションをロックし、iGPUに移行し、次いで、クリティカルセクションを解除する。
【0022】
dGPU(例えば、dGPU265)からiGPU(又はAPU)に移行するために、リソース、シェーダ、ビュー等のリストがそれに従ってレビューされ、識別される(例えば、
図3の(315)を参照)。UMDは、アプリケーションがdGPU上で実行しているときに、何れのGPUにリソースの最新のコンテンツがあるのかを追跡する。iGPUへの移行時に(例えば、
図3の(315~316)を参照)、最新のコンテンツがdGPU上にのみ存在するリソースの場合、UMDは、それらのコンテンツをdGPUからiGPU(又はAPU)に転送する。リソース、シェーダ、ビュー等のdGPUコピーは、dGPUのスケジューリングコンテキストとともに破棄される。KMDが、dGPU上にリソース又はスケジューリングコンテキストが存在しないことを確認すると、ドッキング解除を許可する。iGPU(又はAPU)への移行が完了すると、UMD状態は、アプリケーションがドッキング解除状態で開始された場合と同じ状態になる。本明細書で説明するように、KMDは、UMDがdGPUからアダプタ情報等をクエリすることができるように、ドッキング解除された場合であっても仮想又は疑似のdGPUを維持する。
【0023】
ドッキングが要求されたことを追加のスレッドが検出すると(例えば、
図3の(319)を参照)、KMDは、dGPUへの移行をUMDに通知するコマンドを発行する。dGPUに移行するために、スケジューリングコンテキストがdGPU上に生成される。リソース、シェーダ、ビュー等のレビューと、識別とが行われる。dGPUにおいて、リソースが生成され、シェーダがコンパイルされ、ビュー等が生成される。リソースのコンテンツは、dGPUに移行しているときには転送されない。UMDは、リソースを、次に使用するときに必要に応じてdGPUに転送する。
【0024】
本明細書には、構成決定のための方法が記載されている(例えば、
図3を参照)。概して、アプリケーションの起動及びアダプタのオープン要求時に、UMDは、システム又はプラットフォームが着脱可能なグラフィックス構成をサポートしているかどうか(KMDがシステム構成情報を認識しているかどうか)についてKMDにクエリを送信する。着脱可能なグラフィックス構成がサポートされている場合、アプリケーションの移行が有効になる。一実施形態では、アプリケーションの移行がサポートされている場合、キャパビリティフラグ(capability flag)を設定することができる。
【0025】
別の実施形態では、アプリケーションが、アプリケーションの移行を必要とするか否かに応じて、要件フラグが設定される。要件フラグがアプリケーションの移行を要求するように設定され、キャパビリティフラグがサポート無しを示すように設定されている場合には、UMDは、キャパビリティフラグを考慮して要件フラグを上書きし、アプリケーションは、iGPU(又はAPU)上で実行する。
【0026】
本明細書で述べるように、KMDは、初期状態がドッキング又はドッキング解除であるかどうかを判別するためにUMDによってクエリされ、GPUを適切に通過するように設定する。潜在的な競合状態は、初期状態についてのクエリが送信されてからdGPUにGPUデバイスを生成するまでの間にシステムがドッキング解除し得ることから、ドッキング解除を防止するために存在する。デバイス初期化コードは、dGPU上でGPUデバイスを生成し、iGPU(又はAPU)上で実行するように切り替えるときの障害をハンドリングする。
【0027】
本明細書では、ドライバ性能を決定するための実装を説明する。アプリケーションの移行がサポートされると、UMDは、iGPU(又はAPU)とdGPUとの共通の機能を報告する。グラフィックスAPIの場合、アプリケーションが起動したときに発生する最初のイベントの1つは、DXランタイムプログラム又は同等のものが、GPUの機能(この場合、アプリケーションが両方のGPUで実行可能でなくてはならないので、iGPU(又はAPU)及びdGPUの機能)についてUMDにクエリすることである。したがって、共通の機能が報告又は決定される。この機能のクエリは、ソフトウェア及びハードウェアの機能に関する情報を要求する。
【0028】
本明細書では、クリティカルセクションを保護する方法が記載されている。この方法では、アプリケーションがフリースレッドを必要とするか否かにかかわらず、DirectX11(DX11)フリースレッドエントリポイント(free threading entry point)が使用される。これが必要なのは、移行通知を待っているスレッドとの安全な対話を可能にするために、エントリポイントをクリティカルセクションを用いて保護する必要があるためである。つまり、アプリケーションの移行が進行中である場合又は実行される予定の場合には、クリティカルセクションの保護が実施される(例えば、
図3の(313及び319)を参照)。
【0029】
概して、DX11は、様々なスレッドを介してUMDをコールすることができる。上記のように、UMDは、KMDからのドッキング及びドッキング解除信号を監視するための追加のスレッドを生成する。UMDは、その信号に応じて特定の動作を実行し、結果として、UMD内部状態を変更する可能性がある。したがって、監視スレッドが、アプリケーション用に実行されているスレッドとの競合に起因して、監視スレッドが改ざんされたり破損したりしないようにする必要がある。一実施形態では、同期オブジェクトを使用することができる。クリティカルセクションオブジェクトは、単一のプロセスのスレッドのみが使用可能な同期を提供する。クリティカルセクションオブジェクトは、一度に1つのスレッドのみが所有することができ、このことは、共有リソースに対する同時アクセスから保護するのに便利である。
【0030】
本明細書では、アプリケーションの移行をトリガするためのエントリポイントについて記載されている(例えば、
図3の(313及び319)を参照)。移行をトリガするための新たなエントリポイントは、移行をハンドリングするためにUMDに追加され、当業者に知られているDDIハンドリングの標準フローに従う。新たなエントリポイントは、KMDからの移行通知を待機しているスレッドのみによってコールされる。つまり、KMDがUMDを検出して通知すると、新たなエントリポイントがコールされる。UMDがGPU間で移行するための通知を検出すると、UMDは、1)他のDDIコールが保留になるようにクリティカルセクションをロックし、2)移行を実行し、3)クリティカルセクションを解除する。具体的には、UMD状態がアプリケーションの移行処理中に変化するため、UMDへの全てのコールは、当該処理が完了するまで待機する必要がある。UMDは、コンテキスト及びリソースを転送して、以前のGPUのコンテキストを破棄する。以前のGPUのコンテキストが破棄されたことをKMDが認識すると(例えば、UMDからの通知を介して)、KMDは、以前のGPUを切り離すことを許可する。
【0031】
DDIコールをハンドリングする性能を最適化するためにUMDがスレッド技術(例えば、プロデューサ-コンシューマモデル)を使用する場合、移行コールは、他のDDIコールのロック時間を短縮するために、コンシューマスレッドにバッチすることができる。かかる場合には、バッチされた移行動作は、移行処理を開始する際の遅延を最小限に抑えるために、移行エントリポイント機能から戻る前にコンシューマスレッドにフラッシュされる必要がある。
【0032】
ここでは、アプリケーションの移行に関してフリースレッドを処理する方法について説明する。DX11では、フリースレッドは、他のスレッドが実行するのを待つ必要がない。フリースレッドは、動作する前に別のスレッドの既存の作業を停止する必要がない。つまり、複数のスレッドが同時に同じ機能をコールすることができる。このことは、アプリケーションの移行に関して問題がある。
【0033】
DX11フリースレッドは、アプリケーションのメインレンダリングスレッド以外のスレッドによって生成されたDDIコールを可能にする。生成されたDDIコールがメインレンダリングスレッド(エントリポイントマルチスレッドのスレッド)とは完全に独立して動作する場合、現在のドッキング状態又はドッキング解除状態を認識せず、dGPU上でリソースを生成するかどうかもわからない。
【0034】
本明細書では、上記に対処するための2つの例示的な方法を説明する。例示的な方法では、UMDは、DDIコールの生成中に、iGPU(又はAPU)上にのみオブジェクトを生成する。次いで、UMDは、オブジェクトがメインスレッドによってdGPU上に必要とされるときに、要求に応じて、dGPU上にオブジェクトを生成する。この方法では、DDIコールの生成を同期無しに実行することができるが、iGPU(又はAPU)からdGPUへの移行中にdGPU上でオブジェクトを再生成する実装に依存している。
【0035】
別の方法では、同期が使用される。DDIコールの生成は、DDIクリティカルセクションを所有する。これにより、移行コマンドを含む他のDDIコールが、生成中に発生しないようになる。また、エントリポイントマルチスレッドを使用可能にすると、DDIコールの生成は、バッチされた最後の移行コマンドが完了するまで待機する必要がある。このメカニズムによって、DDIコールが他のスレッドによって同時に行われるのを抑制することができる。しかしながら、移行中(稀なイベント)を除いて、コンシューマスレッドは、DDIコールの生成中に中断することなく処理を継続することができる。
【0036】
ここでは、アプリケーション移行検出スレッドについて説明する。これは、KMD信号を監視するために生成された上記のスレッドであり、UMDは、アプリケーションの移行を検出するためのスレッドを生成する。このスレッドは、ドッキング状態の初期クエリを実行し、必要に応じて初期状態に基づいて移行し、ドッキング又はドッキング解除イベントを待機するループに入り、イベントが発生したときに移行する。例示的なフローチャートは、
図3に関して上述されている。
【0037】
アプリケーション移行検出スレッドの例示的な論理が表1に記載されている。iGPU及びdGPUの関係の初期状態が得られる。状態によってGPUがドッキングされていることが示された場合、iGPUからdGPUへの移行が実施される。次に、システムは、ドッキング解除イベント又は終了イベントを待機する。メインスレッドは、「終了」イベントを使用して、アプリケーション移行スレッドに対して終了を通知する。コンテキスト及びデバイスの破棄の開始時に、終了イベントが通知され、次にアプリケーション移行検出スレッドが解放される。状態によってGPUがドッキング解除されていることが示された場合、dGPUからiGPUへの移行が実施され、次に、システムは、ドッキングイベント又は終了イベントを待機する。
【表1】
【0038】
ここでは、ドッキング可能なデバイスがドッキング又はドッキング解除されているのかどうかに応じて、リソース、シェーダ、ビュー等をiGPU(又はAPU)上に生成する方法の例示的な実施形態を説明する。dGPUからiGPU(又はAPU)に移行する際の移行時間を最小限に抑えるために、全てのリソース、シェーダ、ビュー等が、ドッキング又はドッキング解除されたかどうかにかかわらず、iGPU(又はAPU)に生成される。
【0039】
ここでは、静的データをどのようにハンドリングするかについて説明する。例示的な実施形態では、ドッキング可能なデバイスがドッキングされると、移行時間を最小限に抑えるために、ブロードキャストメカニズムを用いて静的データをアップロードする。具体的には、dGPUからiGPU(又はAPU)に移行する際の移行時間を最小限に抑えるために、レンダリングGPU(すなわち、アクティブなGPU)に加えて、静的データのアップロードが常にiGPU(又はAPU)に送信される。
【0040】
ここでは、リソース、シェーダ、ビュー等のリストをどのように維持するかについての例示的な実施形態を説明する。UMDは、オブジェクト、リソース及び他の関連情報を追跡する。すなわち、UMDは、Creates and Destroyを追跡する。リソースは独自のリストに残り、他の全てのオブジェクトタイプを保持する別のリストが生成される。UMDは、この追跡を行い、これにより、本明細書で説明した競合状態を防ぐためにフリースレッドを正しくハンドリングできるようにする。
【0041】
ここでは、dGPUからiGPU(又はAPU)への移行の例示的な実施形態を説明する。UMDがiGPU(又はAPU)への移行を実行するようにトリガされ、パススルーGPUが現在GPU0(すなわち、iGPU)ではない場合、以下の方法が実行される。DDI状態がウォークスルーされ、dGPU上の全てのリソース及びパイプライン状態オブジェクトがアンバインドされる。iGPU(又はAPU)に最新のコンテンツが無い場合、各リソースのリストがウォークスルーされ、各リソースのデータがiGPU(又はAPU)に転送される。全てのリソースは、iGPU(又はAPU)でのみ有効とマークされ、dGPUでのコピーが破棄される。
【0042】
パイプライン状態オブジェクトのリストはウォークスルーされ、dGPU上のコピーは、破棄され、iGPU(又はAPU)上でのみ生成されたものとしてマークされる。UMDのレンダリングGPUは、iGPU(又はAPU)に変更されるため、その後の動作は、iGPU(又はAPU)のみに送信される。GPU1(ここではdGPU)上のUMDデバイスと、当該UMDデバイスに関連するコンテキスト及びオブジェクト(例えば、グラフィックススケジューラコンテキスト、内部メモリ割当て、同期オブジェクト等)とは破棄される。これは、アクティブなGPUがiGPU/APUに変更され、dGPU上のDDIデバイスが破棄されたことを示すために、内部UMDドライバ状態を更新する必要があるという事実を反映している。
【0043】
ここでは、dGPU上のオブジェクトを再生成するために、どの情報を記憶する必要があるかについて説明する。UMDは、保存されているアイテム(すなわち、シェーダコードであるかオブジェクトであるか)を考慮して、どのようなデータを保存する必要があるのか、性質及びタイプを決定する。つまり、ドライバは、アプリケーションの移行のためのシェーダ及び他の構造を再生成するために、どれだけのデータ(例えば、メタデータ及びコード)を記憶する必要があるのかを決定することができる。例えば、シェーダオブジェクトの場合には、シェーダコードのサイズが含まれてもよい。メモリは、シェーダタイプ及びデバイスインタフェースに基づいて、シェーダコード、IOシグネチャ等を含む全ての生成データに割り当てられる。状態オブジェクト(ブレンド状態、ラスタライザ状態、サンプラ状態、深度ステンシル状態及びIaLayout状態)は、シェーダと同様にハンドリングされる。UMDがこれらのオブジェクトを生成する場合、UMDは、オブジェクトに関連する生成データも記憶する。データは、データ構造又は他の記憶構造の形態で記憶され得る。記憶されたデータは、必要なときに取得される。
【0044】
ここでは、アプリケーションの移行を考慮してクエリ動作を処理する方法を説明する。概して、クエリが、依然としてビルド中又は発行ステージにあり、終了しておらず、アプリケーションの移行が行われている場合には、UMDは、クエリステータスを追跡し、完全な結果又は部分的な結果がdGPUに利用可能であるのかどうかを判別する必要がある。例えば、ブーリアン又はフラグを使用して、部分的なクエリ結果が利用可能であるかどうかを示すことができる。部分的な結果が利用可能である場合には、当該部分的な結果が記憶される。場合によっては、部分的な結果が組み合わされる。例示的な実施形態を表2及び表3に示す。後者の表はDirect3DのAPIの実装であるが、他のグラフィックスAPIに合わせて変更することもできる。
【表2】
【表3】
【0045】
ここでは、リソースのオファー及び再要求(reclaim)がどのようにハンドリングされるかについて説明する。概して、アプリケーション/プログラム及び/又はグラフィックスランタイムは、メモリ状態を追跡する。低メモリ状態の場合、UMDは、いくつかのアイドル状態のAPIオブジェクトのメモリを解放することが要求される。これは、オファーと呼ばれる。次いで、UMDは、再使用のためにメモリを解放する。APIオブジェクトが依然として存在することに留意されたい。以前にオファーされたAPIオブジェクトが再度必要になると、メモリは、APIオブジェクトに再度関連付けられる。これは、再要求と呼ばれる。発生する問題は、オファーと再要求との間でアプリケーションの移行が発生した場合に何が起こるかということである。一実施形態では、UMDは、オファーと、オファーを行うGPUと、を追跡する。したがって、再要求が発生した場合、UMDは、オファーしたGPUに基づいて再要求を行うことができる。
【0046】
ここでは、iGPU(又はAPU)からdGPUへの移行について説明する。GPUデバイスはdGPU上に生成される。リソース、シェーダ等のリストは、dGPU上で生成するためにウォークスルーされる。インスタンスは、iGPU(又はAPU)に保持され、iGPU(又はAPU)への潜在的な移行が可能になる。リソースのコンテンツは移行中に直ちにdGPUに伝搬されるわけではなく、dGPU上でリソースが必要になった場合に、伝搬がオンデマンドで行われることに留意されたい。レンダリングGPUは、iGPU(又はAPU)からdGPUに変更され、パイプライン状態はリバインドされる(現在のパイプライン状態をdGPUに送信する)。クエリオブジェクトのハンドリングは、上記のdGPUからiGPUへの移行と同じである。重大な障害(例えば、メモリ不足等)が発生した場合、移行動作は元に戻され、アプリケーションはAPU/iGPU上で実行されたままになる。
【0047】
本明細書で説明する実施形態を限定するものではないが、アプリケーションの移行方法は、少なくとも1つのアプリケーションが実行している間に、ドッキング可能なデバイスのドッキング状態を決定することと、ドッキング可能なデバイスがドッキング状態にあるという条件において、ドッキング可能なデバイスからドッキングステーションへのアプリケーションの移行を開始することであって、ドッキング可能なデバイスがプロセッサを備え、ドッキングステーションが高性能プロセッサを備える、ことと、を含む。この方法は、ドッキング可能なデバイスがドッキング解除状態に移行しているという条件において、ドッキングステーションからドッキング可能なデバイスへのアプリケーションの移行を開始することをさらに含み、アプリケーションは、ドッキング可能なデバイスからドッキングステーションへのアプリケーションの移行中、又は、ドッキングステーションからドッキング可能デバイスへのアプリケーションの移行中に実行を継続する。
【0048】
一実施形態では、この方法は、転送先プロセッサ上でアプリケーション状態を再生成するために必要な全てのデータを維持することを含み、プロセッサは、ドッキング状態にかかわらず、ドッキング解除するときのデータ転送を最小限に抑えるために、当該データを有する。一実施形態では、この方法は、転送元プロセッサ上の状態情報を破棄することを含む。一実施形態では、この方法は、ドッキング可能なデバイスがドッキング解除状態にあるという条件において、ドッキング可能なデバイス上に仮想高性能プロセッサを維持することを含む。
【0049】
一実施形態では、ユーザモードドライバ及びカーネルモードドライバは、仮想高性能プロセッサに作業が送信されないことを確実にする。一実施形態では、この方法は、ユーザモードドライバを含み、カーネルモードは、ドッキング可能なデバイスがドッキングステーションにドッキングされた場合に、ドッキング可能なデバイスに伝搬されるいくつかの動作を記憶することを含む。
【0050】
一実施形態では、この方法は、カーネルモードドライバがドッキングイベントを検出したという条件において、アプリケーションの移行を開始するために、カーネルモードドライバからユーザモードドライバに通知を送信することを含む。一実施形態では、ユーザモードドライバは、アプリケーションの移行中にクリティカルセクションをロックする。
【0051】
一実施形態では、この方法は、ドッキング解除要求を検出することと、ドッキング解除要求をロックすることと、アプリケーションの移行が完了したという条件において、ドッキング可能なデバイスが物理的にドッキング解除できるようにドッキング解除要求をアンロックすることと、を含む。
【0052】
一実施形態では、この方法は、ドッキングイベントを検出することと、検出されたドッキングイベントがドッキング可能なデバイスをドッキングすることであるという条件において、ドッキング可能なデバイスからドッキングステーションへのアプリケーションの移行を開始することと、検出されたドッキングイベントがドッキング可能なデバイスをドッキング解除することであるという条件において、ドッキングステーションからドッキング可能なデバイスへのアプリケーションの移行を開始することと、を含む。
【0053】
概して、本明細書で説明する実施形態に限定することなく、ドッキング可能なデバイスは、プロセッサと、少なくとも1つのアプリケーションが動作している間に、ドッキング可能なデバイスのドッキング状態を決定するように構成されたカーネルモードドライバと、を備える。カーネルモードドライバは、ドッキング可能なデバイスがドッキング状態にあるという条件において、ドッキング可能なデバイスからドッキングステーションへのアプリケーションの移行を開始するように構成されており、ドッキングステーションは、高性能プロセッサを備える。カーネルモードドライバは、ドッキング可能なデバイスがドッキング解除状態に移行しているという条件において、ドッキングステーションからドッキング可能なデバイスへのアプリケーションの移行を開始するように構成されており、アプリケーションは、ドッキング可能なデバイスからドッキングステーションへのアプリケーションの移行中、又は、ドッキングステーションからドッキングな可能デバイスへのアプリケーションに移行中に実行を継続する。
【0054】
一実施形態では、ドッキング可能なデバイスは、ユーザモードドライバを含み、ユーザモードドライバ及びカーネルモードドライバは、転送先プロセッサ上でアプリケーション状態を再生成するために必要な全てのデータを維持するように構成されており、プロセッサは、ドッキング状態にかかわらず、ドッキング解除するときのデータ転送を最小限に抑えるために、当該データを有する。
【0055】
一実施形態では、ユーザモードドライバは、転送元プロセッサ上の状態情報を破棄するように構成されている。
【0056】
一実施形態では、ドッキング可能なデバイスは、ユーザモードドライバを含み、ユーザモードドライバ及びカーネルモードドライバは、ドッキング可能なデバイスがドッキング解除状態にあるという条件において、ドッキング可能なデバイス上に仮想高性能プロセッサを維持するように構成されている。一実施形態では、ユーザモードドライバ及びカーネルモードドライバは、仮想高性能プロセッサに作業が送信されないことを確実にするように構成されている。
【0057】
一実施形態では、ユーザモードドライバ及びカーネルモードドライバは、ドッキング可能なデバイスがドッキングステーションにドッキングされた場合に、ドッキング可能なデバイスに伝搬されるいくつかの動作を記憶するように構成されている。
【0058】
一実施形態では、カーネルモードドライバは、カーネルモードドライバがドッキングイベントを検出したという条件において、アプリケーションの移行を開始するためにユーザモードドライバに通知を送信するように構成されている。
【0059】
一実施形態では、ドッキング可能なデバイスは、アプリケーションの移行中にクリティカルセクションをロックするように構成されたユーザモードドライバを含む。
【0060】
一実施形態では、カーネルモードドライバは、ドッキング解除要求を検出するように構成されており、ドッキング解除要求をロックするように構成されており、アプリケーションの移行が完了したという条件において、ドッキング可能なデバイスが物理的にドッキング解除できるようにドッキング解除要求をロック解除するように構成されている。
【0061】
概して、本明細書で説明する実施形態を限定することなく、コンピュータ可読記憶媒体は、処理システムにおいて実行されると、アプリケーションを移行する方法を処理システムに実行させる命令を含む。この方法は、少なくとも1つのアプリケーションが動作している間に、ドッキング可能なデバイスのドッキング状態を決定することと、ドッキング可能なデバイスがドッキング状態にあるという条件において、ドッキング可能なデバイスからドッキングステーションへのアプリケーションの移行を開始することであって、ドッキング可能デバイスがプロセッサを備え、ドッキングステーションが高性能プロセッサを含む、ことと、ドッキング可能なデバイスがドッキング解除状態に移行しているという条件において、ドッキングステーションからドッキング可能なデバイスへのアプリケーションの移行を開始することと、を含み、アプリケーションは、ドッキング可能なデバイスからドッキングステーションへのアプリケーションの移行中、又は、ドッキングステーションからドッキング可能なデバイスへのアプリケーションの移行中に実行を継続する。
【0062】
本明細書の開示に基づいて多くの変形が可能であることを理解されたい。特徴及び要素は、特定の組み合せで上記に説明されているが、各特徴又は要素は、他の特徴及び要素無しに単独で、又は、他の特徴及び要素を含む若しくは含まない様々な組み合せで使用されてもよい。
【0063】
提供される方法は、汎用コンピュータ、プロセッサ又はプロセッサコアで実施されてもよい。適切なプロセッサには、例として、汎用プロセッサ、専用プロセッサ、従来のプロセッサ、デジタル信号プロセッサ(digital signal processor:DSP)、複数のマイクロプロセッサ、DSPコアに関連する1つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路(Application Specific Integrated Circuit:ASIC)、フィールドプログラマブルゲートアレイ(Field Programmable Gate Array:FPGA)回路、任意の他のタイプの集積回路(integrated circuit:IC)、及び/又は、状態マシン等が挙げられる。かかるプロセッサは、処理されたハードウェア記述言語(hardware description language:HDL)命令(かかる命令は、コンピュータ可読媒体に記憶することができる)の結果と、ネットリストを含む他の中間データと、を使用して製造プロセスを構成することによって製造することができる。かかる処理の結果は、実施形態の態様を実装するプロセッサを製造するために半導体製造プロセスで使用されるマスクワークであってもよい。
【0064】
本明細書で提供される方法又はフローチャートは、非一時的なコンピュータ可読記憶媒体に組み込まれ、汎用コンピュータ又はプロセッサによって実行されるコンピュータプログラム、ソフトウェア又はファームウェアで実装され得る。非一時的なコンピュータ可読記憶媒体の実装例としては、読み取り専用メモリ(read only memory:ROM)、ランダムアクセスメモリ(random access memory:RAM)、レジスタ、キャッシュメモリ、半導体メモリデバイス、内部ハードディスク及びリムーバブルディスク等の磁気媒体、光磁気媒体、並びに、CD-ROMディスク及びデジタル多用途ディスク(digital versatile disk:DVD)等の光学媒体が挙げられる。