JP7253507B2 - 仮想化アクセラレーテッド処理デバイスの早期仮想化コンテキストスイッチ - Google Patents

仮想化アクセラレーテッド処理デバイスの早期仮想化コンテキストスイッチ Download PDF

Info

Publication number
JP7253507B2
JP7253507B2 JP2019571285A JP2019571285A JP7253507B2 JP 7253507 B2 JP7253507 B2 JP 7253507B2 JP 2019571285 A JP2019571285 A JP 2019571285A JP 2019571285 A JP2019571285 A JP 2019571285A JP 7253507 B2 JP7253507 B2 JP 7253507B2
Authority
JP
Japan
Prior art keywords
apd
virtualization
function
determining
work
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2019571285A
Other languages
English (en)
Other versions
JP2020525913A (ja
Inventor
ジェフリー チェン ゴンシエン
ルニエール ルイ
アサロ アンソニー
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
ATI Technologies ULC
Advanced Micro Devices Inc
Original Assignee
ATI Technologies ULC
Advanced Micro Devices Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by ATI Technologies ULC, Advanced Micro Devices Inc filed Critical ATI Technologies ULC
Publication of JP2020525913A publication Critical patent/JP2020525913A/ja
Application granted granted Critical
Publication of JP7253507B2 publication Critical patent/JP7253507B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5077Logical partitioning of resources; Management or configuration of virtualized resources
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45575Starting, stopping, suspending or resuming virtual machine instances
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/509Offload
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Image Generation (AREA)
  • Advance Control (AREA)

Description

(関連出願の相互参照)
本願は、2017年6月29日に出願された米国特許出願第15/637,800号の利益を主張するものであり、その内容は、本明細書に完全に記載されているかのように、言及することによって本明細書に援用される。
コンピュータ仮想化は、コンピュータシステムの異なる仮想インスタンス間でハードウェアの単一のセットを共有する技術である。各インスタンス、つまり仮想マシン(VM)は、ハードウェアコンピュータシステム全体を所有しているものと認識するが、実際には、コンピュータシステムのハードウェアリソースは、異なるVM間で共有されている。CPUやシステムメモリ等以外のデバイスの仮想化の進歩を含めて、仮想化の進歩が絶えず行われている。
添付の図面と併せて例として与えられる以下の説明から、より詳細な理解が得られる。
本開示の1つ以上の特徴を実施することができる例示的なデバイスのブロック図である。 一例による、仮想化に関連するデバイス及びアクセラレーテッド処理デバイスの詳細を示す図である。 図2に示すグラフィックス処理パイプラインの追加の詳細を示すブロック図である。 一例による、早期仮想化コンテキストスイッチの実行に関連する図1のデバイスの特徴的な機能を示すブロック図である。 一例による、早期仮想化コンテキストスイッチを実行する方法のフロー図である。
仮想化されたアクセラレーテッド処理デバイス(APD)内のリソースを効率的に時分割するための技術が提供される。APDに実装された仮想化スキームでは、APDを使用するための異なる「タイムスライス」が、異なる仮想マシンに割り当てられる。タイムスライスが終了すると、APDは、現在の仮想マシン(VM)の操作を停止し、別のVMの操作を開始することによって、仮想化コンテキストスイッチを実行する。様々なタイムスライスが様々な機能(例えば、仮想機能(周辺コンポーネント相互接続エクスプレス(PCIe)アドレス指定パラメータ))に関連付けられている。
通常、各VMには固定長の時間が割り当てられ、その後、仮想化コンテキストスイッチが実行される。この固定長の時間は、非効率につながる可能性がある。例えば、ある状況では、VMで実行するワークがなくなり、アイドル状態になるが、当該VMの現在のタイムスライスには、まだ時間が残されている。したがって、状況によっては、APD上でVMが実行するワークがなくなり、APDがアイドル状態になることに応じて、仮想化コンテキストスイッチが「早期」に実行される。この仮想化コンテキストスイッチは、タイムスライスの固定長の時間が終了する前に仮想化コンテキストスイッチが実行されるという意味で「早期」である。
一部の実施態様では、APDは、APDがアイドル状態であり、早期仮想化コンテキストスイッチを実行する前に実行するワークがないことを検出した後に、タイムアウト期間だけ待機する。そのタイムアウト期間中に追加のワークが受信され、現在のタイムスライスに十分な時間が残っている場合には、早期仮想化コンテキストスイッチは実行されない。代わりに、APDは、その新たなワークをフェッチして、そのワークを実行することが可能になる。そのタイムアウト期間中に追加のワークが受信されない場合には、早期仮想化コンテキストスイッチが実行される。
一部の実施態様では、APDは、ある機能に対して早期仮想化コンテキストスイッチが実行された後に、早期仮想化コンテキストスイッチが実行されてからワークが受信されない場合、APD上で当該機能を再スケジュールしない。いくつかの例では、ドアベルメカニズムが実装されており、これにより、メモリマッピングされた「ドアベル」アドレスが書き込まれると、特定の機能のためのワークの準備ができていることがAPDに通知される。様々なドアベル(したがって、様々なドアベルアドレス)は、様々な仮想機能に関連付けられている。したがって、特定の機能についての早期仮想化コンテキストスイッチが発生した後に当該特定の機能についてのドアベルが受信されない場合、APDは、APDの仮想化タイムスライシングスキームで次の「順番(ターン)」が発生したときに、当該機能についてのワークを実行しない。
図1は、本開示の1つ以上の特徴を実施することができる例示的なデバイス100のブロック図である。デバイス100は、例えば、コンピュータ、ゲームデバイス、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話、又は、タブレットコンピュータを含むことができる。デバイス100は、プロセッサ102(「ホストプロセッサ」とも呼ばれ得る)と、メモリ104と、ストレージ106と、1つ以上の入力デバイス108と、1つ以上の出力デバイス110と、を含む。デバイス100は、オプションとして、入力ドライバ112と出力ドライバ114とを含むことができる。デバイス100は、図1に示されていない追加のコンポーネントを含むことができることを理解されたい。
様々な代替形態では、プロセッサ102は、中央処理装置(CPU)、グラフィックス処理装置(GPU)、同じダイ上に配置されたCPU及びGPU、又は、1つ以上のプロセッサコアを含み、各プロセッサコアは、CPU又はGPUであってもよい。様々な代替形態では、メモリ104は、プロセッサ102と同じダイ上に配置されてもよいし、プロセッサ102とは別に配置されてもよい。メモリ104は、揮発性又は不揮発性のメモリ(例えば、ランダムアクセスメモリ(RAM)、ダイナミックRAM若しくはキャッシュ)を含む。
ストレージ106は、固定又はリムーバブルストレージ(例えば、ハードディスクドライブ、ソリッドステートドライブ、光ディスク若しくはフラッシュドライブ等)を含む。入力デバイス108は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、バイオメトリクススキャナ、又は、ネットワーク接続(例えば、無線IEEE802信号の送信及び/若しくは受信用の無線ローカルエリアネットワークカード)を含むが、これらに限定されない。出力デバイス110は、ディスプレイ、スピーカ、プリンタ、触覚フィードバックデバイス、1つ以上の照明、アンテナ、又は、ネットワーク接続(例えば、無線IEEE802信号の送信及び/若しくは受信用の無線ローカルエリアネットワークカード)を含むが、これらに限定されない。
入力ドライバ112は、プロセッサ102及び入力デバイス108と通信し、プロセッサ102が入力デバイス108からの入力を受信することを可能にする。出力ドライバ114は、プロセッサ102及び出力デバイス110と通信し、プロセッサ102が出力デバイス110に出力を送信することを可能にする。入力ドライバ112及び出力ドライバ114は、オプションのコンポーネントであり、入力ドライバ112及び出力ドライバ114が存在しない場合には、デバイス100が同様に動作することに留意されたい。出力ドライバ114は、ディスプレイデバイス118に接続されたアクセラレーテッド処理デバイス(APD)116を含む。APDは、計算コマンド及びグラフィックスレンダリングコマンドをプロセッサ102から受信し、これらの計算コマンド及びグラフィックスレンダリングコマンドを処理し、ピクセル出力を表示のためにディスプレイデバイス118に提供するように構成されている。以下にさらに詳細に説明するように、APD116は、単一命令複数データ(SIMD)パラダイムに従って計算を実行するように構成された1つ以上の並列処理ユニットを含む。したがって、本明細書では、様々な機能がAPD116によって又はAPD116と連動して実行されるものとして説明しているが、様々な代替形態では、APD116によって実行されるものとして説明される機能は、ホストプロセッサ(例えば、プロセッサ102)によって駆動されず、グラフィックス出力をディスプレイデバイス118に提供するように構成された同様の機能を有する他のコンピューティングデバイスによって追加的又は代替的に実行される。例えば、SIMDパラダイムに従って処理タスクを実行する任意の処理システムが、本明細書で説明する機能を実行するように構成されてもよいことが考えられる。或いは、SIMDパラダイムに従って処理タスクを実行しないコンピューティングシステムが、本明細書で説明する機能を実行することが考えられる。
プロセッサ102は、複数の仮想マシンがプロセッサ102上で実行される仮想化スキームをサポートするように構成されている。各仮想マシン(VM)は、完全に「現実の」ハードウェアコンピュータシステムとしてそのVMで実行されるソフトウェアに「見える」が、実際には、デバイス100を他の仮想マシンと共有することができる仮想コンピューティング環境を含む。仮想化は、ソフトウェアで完全にサポートされている場合もあれば、ハードウェアで部分的にサポートされ、ソフトウェアで部分的にサポートされている場合もあり、ハードウェアで完全にサポートされている場合もある。APD116は、プロセッサ102上で実行される複数の仮想マシン間で共有することができ、各VMが、VMが現実のハードウェアAPD116の完全な所有権を有していると「認識している」という意味で、仮想化をサポートする。
図2は、一例による、仮想化に関連するデバイス100及びAPD116の詳細を示す図である。プロセッサ102は、複数の仮想マシンをサポートする。専用のホスト仮想マシン202は、ゲストVM204のような「汎用」VMではないが、その代わりに、ゲストVM204が使用するためのAPD116の仮想化をサポートする。ハイパバイザ206は、仮想化サポートを仮想マシンに提供し、これは、仮想マシンに割り当てられたリソースを管理すること、仮想マシンを生成し終了すること、システムコールを処理すること、周辺デバイスへのアクセスを管理すること、メモリ及びページテーブルを管理すること、並びに、様々な他の機能等の多種多様な機能を含む。
APD116は、仮想マシン間でAPD116を時間ベースで共有するのを可能にすることによって、仮想化をサポートする。APD116では、ホストVM202が物理機能(PF)208にマッピングされ、ゲストVM204が仮想機能(VF)210にマッピングされる。「物理機能」は、基本的に、PCIエクスプレス(PCIe)規格におけるアドレス指定パラメータである。より具体的には、物理機能は、PCIe相互接続ファブリックに接続されたデバイスを含む通信がデバイスの特定の物理機能を指定するのを可能にし、これにより、デバイスは、その物理機能に具体的に割り当てられた機能に従って通信を処理することができる。一例では、物理機能は、APD116等のグラフィックス処理デバイス上の通常のグラフィックスレンダリングに関連している。本明細書では、単一の物理機能について説明しているが、本開示の教示は、複数の物理機能がアクティブなAPD116に適用される。
仮想機能は、ハードウェアの仮想化を促進するPCIe規格の機能であり、PCIe規格におけるアドレス指定パラメータとしても機能する。典型的には、仮想機能のセットは、特定の物理機能に関連付けられる。各仮想マシンには異なる仮想機能が割り当てられ、ハイパバイザ206は、VMと仮想機能との間の対応関係を管理している。ホストVM202が物理機能208及び異なる仮想機能210にアクセス可能であることを除いて、仮想機能と仮想マシン202との間のこの対応関係は、図2のシステムにほぼ当てはまる。この意味において、ホストVM202は、APD仮想化のための一種の「マスタ仮想マシン」として機能する。一部のシステムでは、ホストVM202が存在せず、本明細書で説明するホストVM202の機能は、代わりにハイパバイザ206によって実行される(これが、GPU仮想化ドライバ121がハイパバイザ206内に点線で示されている理由である)。なお、本明細書では、仮想機能を仮想マシンに関連付ける場合について説明するが、物理機能を1つ以上の仮想マシンに関連付けることも可能である。通常、ホストVM202は物理機能に「関連する」ものと考えられており、ゲストVM204は仮想機能に関連するものと考えられている。仮想機能及び物理機能は、いくつかのコンテキストで同じように動作する場合があるため、指定子「仮想」又は「物理」内の「機能」という用語は、仮想機能若しくは物理機能の一方、又は、仮想機能及び物理機能の両方を総称して指す。例えば、いくつかの例では、APD116は機能間で動作を時分割し、このことは、APD116が異なる仮想機能間で時分割され、APD116上のタイムシェアリングに積極的に加わる場合には、APD116が物理機能であることを意味する。物理機能がこのタイムシェアリングに加わる必要はないが、このような物理機能が加わることは可能である。
上述したように、物理機能及び仮想機能は、PCIeのアドレス指定パラメータである。したがって、PCIeを介したトランザクションは、物理機能と、オプションで追加的に仮想機能と、に関連付けられる。PCIeを介したアドレス指定は、バスデバイス機能番号パラダイムによって明示的に行うことができるが、このアドレス指定パラダイムは、通常、デバイス構成(例えば、PCIeデバイスの列挙)又は他の状況のために予約されている。より典型的には、標準動作では、PCIeを介したトランザクションは、メモリアドレスによって行われ、PCIeファブリックは、メモリマップに基づいて、トランザクションを、適切なデバイスと物理機能又は/又は仮想機能とにルーティングする。このシナリオでは、VMはメモリアドレスにアクセスし、ハイパバイザ又は変換レイヤは、提供されたメモリアドレス(ゲスト物理メモリアドレス空間内に存在する)を、APD116にマッピングされたシステム物理メモリアドレス空間内のアドレスに変換する。この変換されたアドレスは、仮想機能の指標を明示的に含まないが、メモリマップを介して特定の仮想機能にマッピングされ、PCIeファブリックのルーティング機能によって当該仮想機能にルーティングされる。メモリマップアドレスを介して行われるPCIeを介したトランザクションは、仮想機能番号又は物理機能番号を明示的に指定しない。
本開示は、ゲスト及びシステムの物理アドレス空間に関する言及を含む。次に、これらのアドレス空間の関係について説明する。システム物理アドレス空間は、デバイス100の「真の」物理アドレス空間である。ハイパバイザ206は、このアドレス空間にアクセスすることができるが、このアドレス空間は、VMから隠されている。ゲスト物理アドレス空間は、特定のゲストVM204が「見える」ように仮想化された「物理」アドレス空間である。換言すれば、ゲストVM204にとっては、ゲスト物理アドレス空間が実際の物理アドレス空間であるように見える。第3アドレス空間(ゲスト仮想メモリ)は、コンピュータシステムに存在するが、VMの仮想化環境に存在する典型的な仮想メモリアドレス空間を表す。システム物理アドレス空間とゲスト物理アドレス空間との間のマッピングは、ハイパバイザ206によって管理され、ゲスト仮想アドレス空間とゲスト物理アドレス空間との間のマッピングは、オペレーティングシステム120によって管理されるが、デバイス100の他の部分(ハードウェアベースのページテーブルウォーカ、変換キャッシュ、又は、他の要素等)が、別々のアドレス空間の間のマッピングの管理に関与してもよい。
別々の仮想マシン間でAPD116を共有することは、別々の仮想マシン間でAPD116の動作を時分割し、別々の仮想マシンに別々の仮想機能(又は、物理機能)を割り当てることによって達成される。仮想化スケジューラ212は、APD116のタイムシェアリングに関するワークを実行し、仮想マシンに割り当てられた実行時間の経過に応じて、現在の仮想マシンのワークから切り替えて新たな仮想マシンを動作させるスケジューリングを行う。APD116は、別々の仮想マシン間で共有されるが、各仮想マシンは、現実のハードウェアAPD116の個々のインスタンスを有しているものと認識する。
「仮想機能」及び「物理機能」という用語は、PCIe規格におけるアドレス指定パラメータを指すが、これらの機能は別々のVMにマッピングされることから、本明細書では、特定の仮想マシンに割り当てられたAPD116の論理インスタンスも、仮想機能又は物理機能と呼ばれる。換言すれば、本開示は、例えば、「仮想機能(又は物理機能)がタスクを実行する」、「動作が仮想機能(又は物理機能)に対して実行される」等の用語を使用することができ、この用語は、APD116が、その特定の仮想機能若しくは物理機能に関連するVM、又は、そのVMの代わりに割り当てられたタイムスライスの間、そのタスクを実行することを意味すると解釈されるべきである。
ホストVM202及びゲストVM204は、オペレーティングシステム120を有する。ホストVM202は、管理アプリケーション123と、GPU仮想化ドライバ121と、を有する。ゲストVM204は、アプリケーション126と、オペレーティングシステム120と、GPUドライバ122と、を有する。これらの要素は、プロセッサ102及びAPD116の動作の様々な機能を制御する。
上述したように、ホストVM202は、ゲストVM204のためのAPD116における仮想化の態様を構成する。したがって、ホストVM202は、管理アプリケーション123及びGPU仮想化ドライバ121等の他の要素の実行をサポートするオペレーティングシステム120を含む。GPU仮想化ドライバ121は、APD116の仮想化の態様を理解することなく、単にグラフィックスレンダリング(又は、他の)コマンドと通信してAPD116に送信する従来のグラフィックスドライバではない。代わりに、GPU仮想化ドライバ121は、APD116と通信して、仮想化のためにAPD116の様々な態様を構成する。一例では、GPU仮想化ドライバ121は、異なるVM間でAPD116を共有するためのタイムスライシングメカニズムに関連するパラメータを管理して、例えば、各タイムスライスの時間の長さ、異なる仮想機能間でのスイッチング方法等のパラメータを制御する。GPU仮想化ドライバ121は、従来のグラフィックスレンダリングコマンドをAPD116に発行してもよいし、APD116の構成に直接関係しない他のタスクを実行してもよいことに留意されたい。管理アプリケーション123は、仮想化を管理するための1つ以上のタスク、及び/又は、複数の異なるゲストVM204からのデータを含む1つ以上のタスクを実行する。一例では、ホストVM202は、管理アプリケーション123を介してデスクトップ合成機能を実行する。デスクトップ合成機能は、異なるゲストVM204からレンダリングされたフレームにアクセスし、これらのフレームを単一の出力ビューに合成する。
ゲストVM204は、オペレーティングシステム120と、GPUドライバ122と、アプリケーション126と、を含む。オペレーティングシステム120は、プロセッサ102上で実行可能な任意のタイプのオペレーティングシステムである。GPUドライバ122は、GPUドライバ122が実行しているゲストVM204用のAPD116の動作を制御し、グラフィックスレンダリングタスク又は他のワーク等のタスクをAPD116に送信して処理する、という点において、APD116用の「ネイティブ」ドライバである。ネイティブドライバは、必要最小限(bare-bones)の非仮想化コンピューティングシステムに存在するGPU用のデバイスドライバの未修正又は僅かに修正されたバージョンであってもよい。
GPU仮想化ドライバ121は、ホストVM202内に含まれるものとして説明されているが、他の実施態様では、GPU仮想化ドライバ121は、代わりにハイパバイザ206に含まれる。このような実施態様では、ホストVM202が存在せず、ホストVM202の機能は、ハイパバイザ206によって実行されてもよい。
ホストVM202及びゲストVM204のオペレーティングシステム120は、ハードウェアと通信することと、リソース及びファイルシステムを管理することと、仮想メモリを管理することと、ネットワークスタックを管理することと、他の多くの機能等と、の仮想化環境におけるオペレーティングシステムの標準的な機能を実行する。GPUドライバ122は、例えば、APD116の様々な機能にアクセスするために、アプリケーションプログラミングインタフェース(API)をソフトウェア(例えば、アプリケーション126)に提供することによって、任意の特定のゲストVM204用のAPD116の動作を制御する。ドライバ122は、APD116のコンポーネント(例えば、以下により詳細に説明するSIMDユニット138等)を処理することによって、実行されるプログラムをコンパイルするジャストインタイムコンパイラも含む。任意の特定のゲストVM204に関して、GPUドライバ122は、他のVM用ではなく、当該ゲストVM204に関連するAPD116上の機能を制御する。
APD116は、例えば、グラフィックス動作及び非グラフィックス動作等のように並列処理に適している選択された機能のためのコマンド及びプログラムを実行する。APD116は、ピクセル演算、幾何学的計算等のグラフィックスパイプライン処理を実行し、プロセッサ102から受信したコマンドに基づいてディスプレイデバイス118に画像をレンダリングするために使用することができる。APD116は、プロセッサ102から受信したコマンドに基づいて、ビデオ、物理シミュレーション、計算流体力学、又は、他のタスクに関連する動作等のように、グラフィックス処理に直接関連しない計算処理動作も実行する。コマンドプロセッサ213は、プロセッサ102(又は、別のソース)からコマンドを受信し、これらのコマンドに関連するタスクを、グラフィックス処理パイプライン134及び計算ユニット132等のAPD116の様々な要素に委任する。VMは、ドアベルメモリ214を用いて、ドアベルメカニズムを介して実行される新たなタスクに関してAPD116に通知する。
APD116は、SIMDパラダイムに従う並列方式で、プロセッサ102の要求に応じて動作を実行するように構成された1つ以上のSIMDユニット138を有する計算ユニット132を含む。SIMDパラダイムは、複数の処理要素が単一のプログラム制御フローユニット及びプログラムカウンタを共有し、これにより、同じプログラムを実行するが、異なるデータを用いてそのプログラムを実行することができるというものである。一例では、各SIMDユニット138は、16のレーンを含み、各レーンは、SIMDユニット138内の他のレーンと同時に同じ命令を実行するが、異なるデータを用いて当該命令を実行することができる。全てのレーンが所定の命令を実行する必要がない場合、予測を用いてレーンをオフに切り替えることができる。予測は、分岐する制御フローを有するプログラムを実行するために使用することができる。具体的には、制御フローが個々のレーンによって実行される計算に基づく、条件分岐又は他の命令を含むプログラムの場合、現在実行されていない制御フローパスに対応するレーンの予測及び異なる制御フローパスの連続実行は、任意の制御フローを可能にする。
計算ユニット132における実行の基本単位は、ワークアイテムである。各ワークアイテムは、特定のレーンで並列に実行されるプログラムの単一インスタンス化を表す。ワークアイテムは、単一のSIMD処理ユニット138上で「ウェーブフロント」として同時に実行され得る。1つ以上のウェーブフロントは、同じプログラムを実行するように指定されたワークアイテムの集合を含む「ワークグループ」に含まれる。ワークグループは、ワークグループを構成するウェーブフロントの各々を実行することによって実行され得る。或いは、ウェーブフロントは、単一のSIMDユニット138上で順次実行されてもよいし、異なるSIMDユニット138上で部分的又は完全に並行に実行されてもよい。ウェーブフロントは、単一のSIMDユニット138上で同時に実行可能なワークアイテムの最大集合と考えることができる。したがって、プロセッサ102から受信したコマンドは、特定のプログラムが単一のSIMDユニット138上で同時に実行できない程度に並列化されることを示す場合、当該プログラムは、複数のSIMDユニット138上で並列化されるか、同じSIMDユニット138上で直列化される(又は、必要に応じて並列化と直列化の両方が行われる)ウェーブフロントに分割される。スケジューラ136は、異なる計算ユニット132及びSIMDユニット138上で様々なウェーブフロントをスケジューリングすることに関連する動作を実行するように構成されている。
計算ユニット132によって与えられる並列処理は、ピクセル値計算、頂点変換、及び、他のグラフィックス動作等のグラフィック関連動作に適している。したがって、いくつかの場合では、プロセッサ102からグラフィックス処理コマンドを受信するグラフィックスパイプライン134は、計算タスクを、並列実行するために計算ユニット132に提供する。
計算ユニット132は、グラフィックスに関連しない、又は、グラフィックスパイプライン134の「通常」動作(例えば、グラフィックスパイプライン134の動作のために実行される処理を補助するために実行されるカスタム動作)の一部として実行されない計算タスクを実行するために使用される。プロセッサ102上で実行されるアプリケーション126又は他のソフトウェアは、このような計算タスクを定義するプログラムを、実行のためにAPD116に送信する。
APD116上で新たなワークを実行する準備ができているという通知は、ドアベルメカニズムを介して行われる。具体的には、エンティティ(プロセッサ102等)は、新たなワークの準備ができたことをAPD116に通知するために、ドアベルをドアベルメモリ214に書き込む。ドアベルは、フェッチされ処理されるコマンドのメモリアドレスを示すコマンドバッファへのポインタを含む。
一実施態様では、ドアベルは、循環バッファの先頭のアドレスを含む。末尾のアドレスは、APD116によって個別に維持される。先頭ポインタと末尾ポインタとが等しい場合、フェッチされる新たなコマンドはない。エンティティが、末尾ポインタよりも大きい先頭ポインタを含むドアベルを書き込むと、フェッチされるコマンドは、先頭と末尾との間のアドレスで検出される。APD116は、コマンドバッファ内のコマンドを実行し、コマンドがフェッチされる際に末尾ポインタを調整する。先頭ポインタと末尾ポインタとが再び等しくなる場合、コマンドバッファで使用できる新たなコマンドはない。この実施態様では、ドアベルは、ワークを実行する準備ができているという通知と、コマンドが検出されたメモリアドレスの指標と、の両方として機能する。オプションで、ドアベルメモリ214に書き込まれたドアベルは、そのドアベルによって示されたワークが完了した場合、又は、新たなドアベルがドアベルメモリ214に書き込まれた場合に、処理済みとしてマークされる。他の実施態様では、ドアベルは、ワークがフェッチされて実行される準備ができているという指標としてのみ機能し、そのワークの場所の指標は、ドアベルによって提供される値とは別に決定される。さらに他の実施態様では、ドアベルは、任意の代替又は追加の目的に応えることができる。
ドアベルメカニズムは、何れの仮想マシンがAPD116上でのワークのために現在スケジュールされているかに関して非同期に動作する。これは、ドアベルをドアベルメモリ214に配置したVM以外のVMのタスクがAPD116上で実行されている場合に、特定の仮想マシンがドアベルをドアベルメモリ214に配置してもよいことを意味する。この非同期動作は、ドアベルが、プロセッサ102上で実行されるソフトウェア(例えば、VM上で実行されるソフトウェア)によって実行されるために発生し、このソフトウェアは、APD116上のタイムスライスワークと比較して、独立してスケジュールされる。
上述したように、仮想化スケジューラ212は、異なる仮想マシン間でのAPD116のタイムシェアリングを管理する。各タイムスライスにおいて、仮想化スケジューラ212は、そのタイムスライスに関連する仮想マシンのワークをAPD116で進行させる。仮想化スケジューラ212は、APD116を共有するVM(ホストVM202及びゲストVM204の両方)について、APD116上でタイムスライスを管理する。仮想化スケジューラ212は、タイムスライスを追跡し、特定のVMのタイムスライスが満了したときにAPD116上のワークを停止し、次のタイムスライスを有するVMのワークを開始する。したがって、仮想化スケジューラ212は、APD116上で実行されるワークを有する異なるVM間の切り替えを行う。異なるVM間の切り替え動作は、本明細書では「仮想化コンテキストスイッチ」と呼ばれる。仮想化スケジューラは、スケジューリングスキームに基づいて、異なるVMを選択してワークを実行する。一例では、スケジューリングスキームは、ラウンドロビンスキームである。このようなスキームでは、各VMにはAPD116上の順番が与えられ、VMが順番を与えられる順序が繰り返される。他の技術的に実現可能なスケジューリングスキームも、もちろん可能である。
特定のVMに関連付けられた特定のタイムスライスに関するワークを開始するために、仮想化スケジューラ212は、コマンドプロセッサ213に、グラフィックス処理パイプライン134及び/又は汎用計算ワークのためのコマンドを、特定のVMのドアベルメモリ214によって指定されたアドレスからフェッチさせる。次に、コマンドプロセッサ213は、これらのコマンドをAPD116に実行させる。フェッチされたコマンドは、ドアベルメモリ214に記憶されたドアベルによって示される。
仮想化スケジューラ212は、APD116上で現在実行されているワークを有するVMのタイムスライスが満了したと判別した場合、APD116に、新たなワークを受け入れることなくそのワークを完了させる(例えば、ドアベルメモリ214に記憶されたドアベルによって指し示される新たなタスクを受け入れないが、グラフィックス処理パイプライン134及び/又は計算ユニット132内で既に「インフライト」のタスクを完了させる)。ワークを完了させることは、APD116内で現在インフライトのワークを、完了させ、ターゲットメモリ位置に書き込まれた最終的な出力値を有するのを可能にすることを含む。例えば、グラフィックスレンダリングの場合、出力ピクセルは、フレームバッファ(又は、他のレンダーターゲット)に書き込まれる。或いは、場合によっては、タスクを完了する代わりに、進行中のタスクの状態を保存し、機能/VMがAPD116上で再び「順番」を取得したときに再び復元してもよい。
特定のVMについてのワークが完了した後、仮想化スケジューラ212は、次のVMについてのタイムスライスに進み、コマンドプロセッサ213に、ドアベルメモリ214の内容に基づいて当該VMのタスクをフェッチさせ、グラフィックス処理パイプライン134上及び/又は計算ユニット132においてこれらのタスクを実行させる(例えば、汎用コンピューティングを目的として)。満了したタイムスライスに関するワークの実行を停止し、次のVMについてのワークを開始するこのプロセスは、APD116のタイムシェアリングを異なるVMに提供するために、繰り返し実行される。
仮想化コンテキストスイッチは、あるVMについてのワークを停止して別のVMについてのワークを開始することに加えて、スイッチ元のVMの状態を保存し、スイッチ先のVMの状態をロードすることも含む。概して、状態は、APD116のために実行されるワークフローの態様を管理するAPD116の全体を通して又はAPD116のために記憶された値を含む。様々な例では、状態は、グラフィックスがどのようにレンダリングされるか、SIMDワークがどのように実行されるか、シェーダがどのように実行されるかを制御し、APD116上の動作の様々な他の態様を制御するレジスタに記憶された値を含むことができる。状態を保存することは、状態を、使用中の位置(状態値が実際にAPD116の動作に影響する位置)から、VMの状態を保存する位置に書き込むことを含む。状態をロードすることは、状態を、VMの状態を保存する位置から使用中の位置にロードすることを含む。いくつかの実施態様では、状態を保存する位置は、メモリ(APD116上の汎用メモリ等)内にあり、使用中の位置は、APD116内のレジスタ、専用メモリ等の様々なメモリ要素を含む。
なお、仮想化の文脈において機能が具体的に説明されていないAPD116の他の部分は、上述したように、コマンドプロセッサ213によってフェッチされたコマンドを実行するように仮想化が発生していないかのように動作することに留意されたい。例えば、グラフィックス処理パイプライン134は、コマンドプロセッサ213によってフェッチされたグラフィックスレンダリングコマンドに応じて、グラフィックスレンダリングに関連する動作を実行する。グラフィックス処理パイプライン134に関連するグラフィックスレンダリングコマンドの少なくとも一部、及び/又は、汎用計算動作のために、SIMDスケジューラ136は、コマンドプロセッサ213によって処理されるコマンドに従って、計算ユニット132のSIMDユニット138上で実行されるウェーブフロントを生成及び管理する。一例では、コマンドは、グラフィックス処理パイプライン134の他の機能のうち特定のピクセルシェーダプログラムを用いて、ジオメトリの特定の部分をレンダリングするためのコマンドである。グラフィックス処理パイプライン134は、入力アセンブラステージ302と、ハルシェーダステージ306と、テッセレータステージ308等と、のグラフィックス処理パイプライン134の様々なステージを通してジオメトリを処理し、ピクセルシェーダステージ316において、SIMDユニット138上で特定のピクセルシェーダを用いてジオメトリを処理させる。SIMDスケジューラ136は、実行のためにピクセルシェーダのウェーブフロントを管理し、スケジューリングする。
図3は、図2に示すグラフィックス処理パイプライン134の追加の詳細を示すブロック図である。グラフィックス処理パイプライン134は、各々が特定の機能を実行するステージを含む。ステージは、グラフィックス処理パイプライン134の機能の小区分を表す。各ステージは、計算ユニット132において実行されるシェーダプログラムとして、又は、計算ユニット132の外部の固定機能のプログラム不可能なハードウェアとして、部分的に若しくは完全に実装される。
入力アセンブラステージ302は、ユーザが充填したバッファ(例えば、プロセッサ102によって実行されるアプリケーション126等のソフトウェアの要求によって充填されるバッファ)からプリミティブデータを読み出し、当該データを、パイプラインの残りの部分によって使用されるプリミティブにアセンブルする。入力アセンブラステージ302は、ユーザが充填したバッファに含まれるプリミティブデータに基づいて、異なるタイプのプリミティブを生成することができる。入力アセンブラステージ302は、パイプラインの残りの部分で使用するために、アセンブルされたプリミティブをフォーマットする。
頂点シェーダステージ304は、入力アセンブラステージ302によってアセンブルされたプリミティブの頂点を処理する。頂点シェーダステージ304は、変換、スキニング、モーフィング及び頂点毎のライティング等の様々な頂点毎の操作を実行する。変換操作は、頂点の座標を変換するための様々な操作を含むことができる。これらの操作には、モデリング変換、表示変換、投影変換、パースペクティブ分割及びビューポート変換のうち1つ以上が含まれてもよい。本明細書では、このような変換は、変換が実行される頂点の座標、つまり「位置」を変更するものとみなされる。頂点シェーダステージ304の他の操作によって、座標以外の属性が変更されてもよい。
頂点シェーダステージ304は、1つ以上の計算ユニット132上で実行される頂点シェーダプログラムとして部分的に又は完全に実装される。頂点シェーダプログラムは、プロセッサ102によって提供され、コンピュータプログラマによって事前に書かれたプログラムに基づいている。ドライバ122は、このようなコンピュータプログラムをコンパイルして、計算ユニット132内での実行に適したフォーマットを有する頂点シェーダプログラムを生成する。
ハルシェーダステージ306、テッセレータステージ308及びドメインシェーダステージ310は、連携してテッセレーションを実施し、プリミティブを更に分割することによって、単純なプリミティブをより複雑なプリミティブに変換する。ハルシェーダステージ306は、入力プリミティブに基づいてテッセレーションのためのパッチを生成する。テッセレータステージ308は、パッチのサンプルセットを生成する。ドメインシェーダステージ310は、パッチのサンプルに対応する頂点の頂点位置を計算する。ハルシェーダステージ306及びドメインシェーダステージ310は、計算ユニット132上で実行されるシェーダプログラムとして実装することができる。
ジオメトリシェーダステージ312は、プリミティブ毎に頂点操作を実行する。ジオメトリシェーダステージ312によって、例えば、ポイントスプライト展開、動的パーティクルシステム操作、ファーフィン(fur-fin)生成、シャドウボリューム生成、キューブマップへのシングルパスレンダリング、プリミティブ毎のマテリアルスワップ、プリミティブ毎のマテリアル設定等の操作を含む、様々な異なるタイプの操作を実行することができる。いくつかの例では、計算ユニット132上で実行されるシェーダプログラムは、ジオメトリシェーダステージ312の操作を実行する。
ラスタライザステージ314は、上流で生成された単純なプリミティブを受け入れてラスタライズする。ラスタライズは、特定のプリミティブによってカバーされているスクリーンピクセル(又は、サブピクセルサンプル)を判別することから構成されている。ラスタライズは、固定機能ハードウェアによって実行される。
ピクセルシェーダステージ316は、上流で生成されたプリミティブとラスタライズの結果とに基づいて、スクリーンピクセルの出力値を計算する。ピクセルシェーダステージ316は、テクスチャをテクスチャメモリから適用することができる。ピクセルシェーダステージ316の操作は、計算ユニット132上で実行されるシェーダプログラムによって実行される。
出力マージャステージ318は、ピクセルシェーダステージ316からの出力を受信し、これらの出力を結合(マージ)し、zテスト及びアルファブレンディング等の操作を行うことによって、スクリーンピクセルの最終色を決定する。
図2を再び参照すると、場合によっては、現在の機能は、その機能のタイムスライスに割り当てられた時間が満了して「アイドル状態」になる前に、ワークを終了する。このシナリオでは、いくつかの場合に、仮想化スケジューラ212は、仮想化コンテキストスイッチを「早期」に実行する。具体的には、仮想化スケジューラ212は、アイドル状態の学習後、タイムスライスが終了する前に、仮想化コンテキストを現在の機能から次の機能に切り替える。仮想化コンテキストスイッチを早期に実行する目的は、現在の機能で実行するワークがなくなった場合に、他の機能がワークを実行できるようにすることである。現在の機能のタイムスライスの残り時間の間、APD116をアイドル状態にする代わりに、次の機能への仮想化コンテキストスイッチを実行することによって、APD116のリソースは、アイドル状態ではなく有用なワークを実行するために使用される。仮想化スケジューラ212は、現在の機能がアイドル状態であることを学習した時点で、仮想化コンテキストスイッチを早期に実行することに加えて、早期仮想化コンテキストスイッチが実行されてから当該機能が何のワークも受信していない場合、その後続の次の順番をスキップすることもできる。機能がワークを受信したかどうかは、本開示を通して説明したドアベルメカニズムを介して判別される。
図4は、一例による、早期仮想化コンテキストスイッチの実行に関連するデバイス100の特徴的な機能を示すブロック図である。デバイス100の多くの要素が図4に示されており、図4は、仮想化スケジューラ212内に含まれるものとして示される早期仮想化コンテキストスイッチユニット402を示している。早期仮想化コンテキストスイッチユニット402は、ハードウェア、ソフトウェア、又は、これらの任意の組み合わせで実装することができる。また、早期仮想化コンテキストスイッチユニット402は、仮想化スケジューラ212内に示されているが、本開示は、早期仮想化コンテキストスイッチユニット402の機能を実行するコンポーネントの物理的配置を制限するものとして解釈されることを意図していないことに留意されたい。図5は、一例による、早期仮想化コンテキストスイッチを実行する方法のフロー図である。図5の動作を、図1~図4のシステムに関して説明するが、図示したステップで、又は、任意の他の技術的に実行可能な順序で、任意のシステムによって実行される方法500は、本発明の範囲内にあることを理解されたい。図4及び図5を以下にまとめて説明する。
早期仮想化コンテキストスイッチユニット402は、グラフィックス処理パイプライン134の状態、又は、計算のみのワークの場合にはSIMDスケジューラ136及び計算ユニット132の状態に基づいて、「早期仮想化コンテキストスイッチ」をいつ実行するのが適切かを判別するために、コマンドプロセッサ213と通信及び調整する。グラフィックスパイプライン134の状態は、少なくともいくつかの場合にはSIMDスケジューラ136の状態を含むが、非グラフィックス計算ワークが未処理である場合には、早期仮想化コンテキストスイッチを実行するかどうかの判別は、グラフィックス処理パイプライン134の状態に代わり又はこれに加えて、SIMDスケジューラ136及び計算ユニット132の状態に依存する。
コマンドプロセッサ213は、APD116上でワークを実行する要求を受信し、グラフィックス処理パイプライン134及び/又はSIMDスケジューラ136にワークをディスパッチするエンティティである。より広く見れば、コマンドプロセッサ213は、グラフィックス処理パイプライン134及びSIMDスケジューラ136上でワークフローをハイレベルで制御する。このワークフロー制御の一部として、コマンドプロセッサ213は、グラフィックス処理パイプライン134及びSIMDスケジューラ136の様々なサブユニットからワーク完了のレポートを受信する。より具体的には、コマンドプロセッサ213は、グラフィックス処理パイプライン134又はSIMDスケジューラ136上の未処理のワークについては、このようなワークが完了したときに通知を受信する。また、コマンドプロセッサ213は、グラフィックス処理パイプライン134及びSIMDスケジューラ136において、何れのワークが未処理であるかを追跡する。ワーク完了のレポートを未処理ワークの追跡と相関させることによって、コマンドプロセッサ213は、グラフィックス処理パイプライン134及びSIMDスケジューラ136がアイドル状態であるか、又は、ワークを実行しているかを示す情報を追跡する。計算ユニット132上に未処理のワークがない場合に、SIMDスケジューラ136は、アイドル状態であるとみなされる。したがって、計算ユニット132における機能のコーディネータとしてのSIMDスケジューラ136の役割により、「SIMDスケジューラ136がアイドル状態である」というフレーズにおいて、SIMDスケジューラ136は、計算ユニット132のプロキシとして機能する。一例では、グラフィックス処理パイプライン134及びSIMDスケジューラ136上で未処理のワークが全て完了すると、コマンドプロセッサ213は、グラフィックス処理パイプライン134及びSIMDスケジューラ136がアイドル状態であるとみなす。
グラフィックス処理パイプライン134及びSIMDスケジューラ136がアイドル状態であっても、コマンドプロセッサ213が処理するワークが存在し得る。例えば、グラフィックス処理パイプライン134及びSIMDスケジューラ136は、コマンドプロセッサ213が、処理される新たなドアベルがあることを検出すると、アイドル状態になる場合がある。したがって、APD116は、グラフィックス処理パイプライン134及びSIMDスケジューラ136がアイドル状態になり、処理されるのを待っている又は現在処理されているドアベルがなくなるまで、完全にアイドル状態であるとはみなされない。コマンドプロセッサ213は、このような状態が発生したことを検出すると、図5のステップ502で表される「アイドル状態決定」を行ったとみなされる。
コマンドプロセッサ213は、「アイドル状態決定」を行うと、このアイドル状態決定を仮想化スケジューラ212に提供する。仮想化スケジューラ212は、この通知を受信すると、早期仮想化コンテキストスイッチ判別シーケンスを開始する。早期仮想化コンテキストスイッチ判別シーケンスは、いくつかの機能を実行して、早期仮想化コンテキストスイッチ(現在の機能のタイムスライスに割り当てられた時間より前の仮想化コンテキストスイッチ)を発生すべきかどうかを判別し、早期仮想化コンテキストスイッチを発生すべき場合に、早期仮想化コンテキストスイッチを実行する。
一実施態様では、早期仮想化コンテキストスイッチ判別は、コマンドプロセッサ213からアイドル状態指標を受信した後にタイムアウト期間の間待機し、このタイムアウト期間内にドアベルを受信したかどうかを判別することを含む(この判別は、図5のステップ504として示されている)。このタイムアウト期間中に現在の機能のドアベルがAPD116に到達していない場合、仮想化スケジューラは、早期仮想化コンテキストスイッチを開始する(ステップ508)。早期仮想化コンテキストスイッチは、実質的に、本開示の他の箇所で説明する「通常の」仮想化コンテキストスイッチとして実行され、現在の機能の状態の保存、次の機能の状態のロード、及び、次の機能のためのワークの実行開始を含む。
また、早期仮想化コンテキストスイッチを開始することは、コマンドプロセッサ213にコマンドを送信して、タイムアウト期間が終了した後に受信したドアベルメモリ214内のドアベルに基づいて、ワークのフェッチを停止することを含む。仮想化スケジューラ212が、タイムアウト期間内にドアベルを受信していないと判別して、ワークのフェッチを停止するためにコマンドプロセッサ213にコマンドを送信する時間と、コマンドプロセッサ213が当該コマンドを受信して、ワークのフェッチを停止する時間と、の間には、僅かな遅延がある。コマンドプロセッサ213は、この遅延期間中にドアベルを受信すると、当該ドアベルを無視し、又は、コマンドプロセッサ213が当該ドアベルに基づいてワークのフェッチを開始した場合には、かかるフェッチを中断する。この中断は、コマンドプロセッサ213に関連する状態を、コマンドプロセッサ213がこのようなドアベルの処理を開始する前の状態にリセットすることを含む。例えば、ドアベルによって示されるコマンドバッファへのポインタ(例えば、末尾ポインタ)が、ドアベルを処理するように更新される場合、コマンドプロセッサ213は、このようなポインタを、ドアベルを処理する前の値にリセットする。
ステップ504を再び参照すると、タイムアウト期間中にAPD116によってドアベルが受信された場合、方法500はステップ506に進む。ステップ506において、仮想化スケジューラ212は、現在の機能のタイムスライスに「有意な」時間が残っているかどうかを判別する。「有意な」時間とは、閾値を超える時間のことである。一実施態様では、閾値は、APD116がアイドル状態になった後にドアベルが受信されかどうかをコマンドプロセッサ213が判別する遅延期間に等しい(又は、ほぼ等しい)。現在のタイムスライスに残っている時間が閾値遅延期間よりも長い場合、方法500はステップ510に進み、仮想化スケジューラ212は、早期仮想化コンテキストスイッチを発生させず、代わりに、ドアベルによって参照されるワークをAPD116が処理できるようにする。ステップ506を再び参照すると、現在のタイムスライスに閾値よりも長い時間が残っていない場合、方法500はステップ508に進み、仮想化スケジューラ212が早期仮想化コンテキストスイッチを実行する。
ある機能の仮想化コンテキストスイッチを実行した後に、当該機能が再び機能の順番になったが、ドアベルが受信されていない場合、仮想化スケジューラ212は、当該機能をスキップし、代わりに別の機能(スケジューリングスキームにおける「次の」機能等)に関するワークをスケジューリングする。
上記の説明では、「早期仮想化コンテキストスイッチ」という用語のうち「早期」という言葉は、現在の機能に割り当てられた時間が経過する前に仮想化コンテキストスイッチが発生することを示すものであることを意図している。
本明細書の開示に基づいて多くの変形が可能であることを理解されたい。例えば、本明細書では、PCIeを特定の相互接続ファブリックとして説明したが、他の技術的に実現可能な相互接続ファブリックを代わりに使用してもよい。機能及び要素は、特定の組み合わせで上述したように説明されているが、各機能又は要素は、他の機能や要素なしに単独で使用されてもよいし、他の機能や要素を伴って若しくは伴わずに様々な組み合わせで使用されてもよい。
提供された方法は、汎用コンピュータ、プロセッサ又はプロセッサコアにおいて実施されてもよい。適切なプロセッサには、例として、汎用プロセッサ、専用プロセッサ、従来のプロセッサ、デジタル信号プロセッサ(DSP)、複数のマイクロプロセッサ、DSPコアに関連する1つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)回路、任意の他のタイプの集積回路(IC)、及び/又は、ステートマシンが含まれる。このようなプロセッサは、処理されたハードウェア記述言語(HDL)命令、及び、ネットリストを含む他の中間データ(このような命令はコンピュータ可読媒体に記憶され得る)の結果を使用して製造プロセスを構成することによって製造されてもよい。このような処理の結果は、本実施形態の態様を実施するプロセッサを製造するために半導体製造プロセスにおいて使用されるマスクワークであってもよい。
本明細書で提供される方法又はフローチャートは、汎用コンピュータ若しくはプロセッサによる実行のために非一時的なコンピュータ可読記憶媒体に組み込まれたコンピュータプログラム、ソフトウェア、ファームウェアにおいて実施されてもよい。非一時的なコンピュータ可読記憶媒体の例には、読み出し専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク及びリムーバブルディスク等の磁気媒体、光磁気媒体、光学媒体(CD-ROMディスク等)、デジタル多用途ディスク(DVD)等が含まれる。

Claims (18)

  1. 仮想化アクセラレーテッド処理デバイス(APD)で早期仮想化コンテキストスイッチを実行する方法であって、
    前記仮想化APD上で仮想マシンのワークを実行することに関連する現在の機能のタイムスライスが完了する前に、前記APDがアイドル状態であることを判別することであって、前記APDがアイドル状態になった後のタイムアウト期間中に、ドアベルが受信されていないことを判別することを含む、ことと、
    前記判別したことに応じて、次の機能への早期仮想化コンテキストスイッチを実行することであって、前記早期仮想化コンテキストスイッチは、前記現在の機能の前記APD上の状態を保存し、前記APD上の前記次の機能の状態をロードし、前記APD上の前記次の機能のワークを開始することを含む、ことと、を含む、
    方法。
  2. 前記次の機能のワークを開始することは、
    前記次の機能のドアベルに基づいてコマンドをフェッチすることと、
    前記次の機能の前記コマンドを実行することと、を含む、
    請求項1の方法。
  3. 前記APDがアイドル状態であることを判別することは、
    前記APDのグラフィックス処理パイプラインに未処理のワークがないことと、前記APDの計算ユニットに未処理のワークがないことと、を判別することを含む、
    請求項1の方法。
  4. 前記APDがアイドル状態であることを判別することは、
    前記APDのグラフィックス処理パイプラインに未処理のワークがないことと、前記APDの計算ユニットに未処理のワークがないことと、ドアベルが処理されていないか受信されていないことと、を判別することを含む、
    請求項3の方法。
  5. 第2機能の第2タイムスライスが、前記APDがタイムアウト期間よりも長いアイドル状態にならずに完了したことに応じて、前記第2機能の前記第2タイムスライスが、早期仮想化コンテキストスイッチを実行することなく完了するのを可能にすることを含む、
    請求項1の方法。
  6. 第2機能の第2タイムスライスの間にAPDがアイドル状態になることを判別することと、
    前記第2機能の前記第2タイムスライスの間に前記APDがアイドル状態になった後のタイムアウト期間中にドアベルが受信されたことを判別することと、
    早期仮想化コンテキストスイッチを実行する代わりに、前記ドアベルに関連するワークを実行することと、を含む、
    請求項1の方法。
  7. 第2機能の第2タイムスライスの間にAPDがアイドル状態になることを判別することと、
    前記第2機能の前記第2タイムスライスの間に前記APDがアイドル状態になった後のタイムアウト期間中にドアベルを受信することと、
    前記第2タイムスライスに閾値未満の時間が残っていることを判別したことに応じて、前記ドアベルを受信したにもかかわらず早期仮想化コンテキストスイッチを実行することと、を含む、
    請求項1の方法。
  8. 前記仮想化コンテキストスイッチを実行した後に、スケジューリングスキームに基づいて、前記仮想マシンに対して再びAPD上で順番が与えられることを判別することと、
    前記仮想化コンテキストスイッチを実行してから前記仮想マシンのドアベルが受信されていないと判別したことに応じて、前記仮想マシンの前記順番をスキップすることと、を含む、
    請求項1の方法。
  9. 早期仮想化コンテキストスイッチを実行可能なアクセラレーテッド処理デバイス(APD)であって、
    前記APDは1つ以上の並列処理ユニットを含み、
    ワークを実行するように構成された、複数の計算ユニット及びグラフィックス処理パイプラインであって、前記複数の計算ユニットは1つ以上の並列処理ユニットを含む、複数の計算ユニット及びグラフィックス処理パイプラインと、
    第1プロセッサを備えるコマンドプロセッサであって、前記ワークに関連するコマンドを、前記複数の計算ユニット及び前記グラフィックス処理パイプラインに発行するように構成されたコマンドプロセッサと、
    第2プロセッサを備える仮想化スケジューラと、を備え、
    前記仮想化スケジューラは、
    前記APD上で仮想マシンのワークを実行することに関連する現在の機能のタイムスライスが完了する前に、前記APDがアイドル状態であることを判別することであって、前記APDがアイドル状態になった後のタイムアウト期間中に、ドアベルが受信されていないことを判別することを含む、ことと、
    前記判別したことに応じて、次の機能への早期仮想化コンテキストスイッチを実行することであって、前記早期仮想化コンテキストスイッチは、前記現在の機能の前記APD上の状態を保存し、前記APD上の前記次の機能の状態をロードし、前記APD上の前記次の機能のワークを開始することを含む、ことと、
    を行うように構成されている、
    APD。
  10. 前記仮想化スケジューラは、
    前記次の機能のドアベルに基づいてコマンドをフェッチすることと、
    前記次の機能の前記コマンドを実行することと、
    によって、前記次の機能のワークを開始するように構成されている、
    請求項のAPD。
  11. 前記仮想化スケジューラは、
    前記APDのグラフィックス処理パイプラインに未処理のワークがないことと、前記APDの計算ユニットに未処理のワークがないことと、を判別すること
    によって、前記APDがアイドル状態であることを判別するように構成されている、
    請求項のAPD。
  12. 前記仮想化スケジューラは、
    前記APDのグラフィックス処理パイプラインに未処理のワークがないことと、前記APDの計算ユニットに未処理のワークがないことと、ドアベルが処理されていないか受信されていないことと、を判別すること
    によって、前記APDがアイドル状態であることを判別するように構成されている、
    請求項11のAPD。
  13. 前記仮想化スケジューラは、
    機能の第2タイムスライスが、前記APDがタイムアウト期間よりも長いアイドル状態にならずに完了したことに応じて、前記第2機能の前記第2タイムスライスが、早期仮想化コンテキストスイッチを実行することなく完了するのを可能にするように構成されている、
    請求項のAPD。
  14. 前記仮想化スケジューラは、
    第2機能の第2タイムスライスの間にAPDがアイドル状態になることを判別することと、
    前記第2機能の前記第2タイムスライスの間に前記APDがアイドル状態になった後のタイムアウト期間中にドアベルが受信されたことを判別することと、
    前記APDに、早期仮想化コンテキストスイッチを実行する代わりに、前記ドアベルに関連するワークを実行させることと、
    を行うように構成されている、
    請求項のAPD。
  15. 前記仮想化スケジューラは、
    第2機能の第2タイムスライスの間にAPDがアイドル状態になることを判別することと、
    前記第2機能の前記第2タイムスライスの間に前記APDがアイドル状態になった後のタイムアウト期間中にドアベルを検出することと、
    前記第2タイムスライスに閾値未満の時間が残っていることを判別したことに応じて、前記ドアベルを受信したにもかかわらず早期仮想化コンテキストスイッチを実行することと、
    を行うように構成されている、
    請求項のAPD。
  16. 前記仮想化スケジューラは、
    前記仮想化コンテキストスイッチを実行した後に、スケジューリングスキームに基づいて、前記仮想マシンに対して再びAPD上で順番が与えられることを判別することと、
    前記仮想化コンテキストスイッチを実行してから前記仮想マシンのドアベルが受信されていないと判別したことに応じて、前記仮想マシンの前記順番をスキップすることと、
    を行うように構成されている、
    請求項のAPD。
  17. 複数の仮想マシンを実行するように構成されたプロセッサと、
    早期仮想化コンテキストスイッチを実行可能なアクセラレーテッド処理デバイス(APD)と、を備えるデバイスであって、
    前記APDは1つ以上の並列処理ユニットを含み、
    前記APDは、
    複数の前記仮想マシンの要求に応じてワークを実行するように構成された、複数の計算ユニット及びグラフィックス処理パイプラインであって、前記複数の計算ユニットは1つ以上の並列処理ユニットを含む、複数の計算ユニット及びグラフィックス処理パイプラインと、
    第1プロセッサを備えるコマンドプロセッサであって、前記ワークに関連するコマンドを、複数の前記計算ユニット及び前記グラフィックス処理パイプラインに発行するように構成されたコマンドプロセッサと、
    第2プロセッサを備える仮想化スケジューラと、を備え、
    前記仮想化スケジューラは、
    前記APD上で仮想マシンのワークを実行することに関連する現在の機能のタイムスライスが完了する前に、前記APDがアイドル状態であることを判別することであって、前記APDがアイドル状態になった後のタイムアウト期間中に、ドアベルが受信されていないことを判別することを含む、ことと、
    前記判別したことに応じて、次の機能への早期仮想化コンテキストスイッチを実行することであって、前記早期仮想化コンテキストスイッチは、前記現在の機能の前記APD上の状態を保存し、前記APD上の前記次の機能の状態をロードし、前記APD上の前記次の機能のワークを開始することを含む、ことと、
    を行うように構成されている、
    デバイス。
  18. 前記仮想化スケジューラは、
    前記次の機能のドアベルに基づいてコマンドをフェッチすることと、
    前記次の機能の前記コマンドを実行することと、
    によって、前記次の機能のワークを開始するように構成されている、
    請求項17のデバイス。
JP2019571285A 2017-06-29 2018-06-13 仮想化アクセラレーテッド処理デバイスの早期仮想化コンテキストスイッチ Active JP7253507B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/637,800 2017-06-29
US15/637,800 US10474490B2 (en) 2017-06-29 2017-06-29 Early virtualization context switch for virtualized accelerated processing device
PCT/US2018/037341 WO2019005485A1 (en) 2017-06-29 2018-06-13 EARLY VIRTUALIZATION CONTEXT SWITCHING FOR VIRTUALIZED ACCELERATED PROCESSING DEVICE

Publications (2)

Publication Number Publication Date
JP2020525913A JP2020525913A (ja) 2020-08-27
JP7253507B2 true JP7253507B2 (ja) 2023-04-06

Family

ID=64738704

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019571285A Active JP7253507B2 (ja) 2017-06-29 2018-06-13 仮想化アクセラレーテッド処理デバイスの早期仮想化コンテキストスイッチ

Country Status (6)

Country Link
US (1) US10474490B2 (ja)
EP (1) EP3646177B1 (ja)
JP (1) JP7253507B2 (ja)
KR (1) KR102605313B1 (ja)
CN (1) CN110832457B (ja)
WO (1) WO2019005485A1 (ja)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108304177A (zh) * 2017-01-13 2018-07-20 辉达公司 计算图的执行
US10459751B2 (en) * 2017-06-30 2019-10-29 ATI Technologies ULC. Varying firmware for virtualized device
US11243799B2 (en) * 2019-08-30 2022-02-08 Advanced Micro Devices, Inc. Adaptive world switching
JP7153678B2 (ja) * 2020-01-22 2022-10-14 ソフトバンク株式会社 コンピュータ
US11340942B2 (en) * 2020-03-19 2022-05-24 Raytheon Company Cooperative work-stealing scheduler
US11768696B2 (en) * 2020-12-14 2023-09-26 Ati Technologies Ulc Security for microengine access
WO2023146730A1 (en) * 2022-01-25 2023-08-03 Microsoft Technology Licensing, Llc Elastically managing workers of multi-worker workloads on accelerator devices
CN116521376B (zh) * 2023-06-29 2023-11-21 南京砺算科技有限公司 物理显卡的资源调度方法及装置、存储介质、终端

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011022627A (ja) 2009-07-13 2011-02-03 Hitachi Ltd 計算機システム、仮想計算機モニタ及び仮想計算機モニタのスケジューリング方法
US20130124838A1 (en) 2011-11-10 2013-05-16 Lacky V. Shah Instruction level execution preemption
JP2013546098A (ja) 2010-12-13 2013-12-26 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド グラフィックス計算プロセススケジューリング
JP2015503784A (ja) 2011-12-28 2015-02-02 エーティーアイ・テクノロジーズ・ユーエルシーAti Technologies Ulc グラフィックス処理部における仮想マシン間の移行
US20150220367A1 (en) 2014-02-04 2015-08-06 The Boeing Company Removal of idle time in virtual machine operation
US20170069054A1 (en) 2015-09-04 2017-03-09 Intel Corporation Facilitating efficient scheduling of graphics workloads at computing devices
WO2017049538A1 (en) 2015-09-24 2017-03-30 Intel Corporation Apparatus and method for pattern driven self-adaptive virtual graphics processor units

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007004854A (ja) 2005-06-22 2007-01-11 Hitachi Ltd 光ディスク装置
US7545381B2 (en) * 2005-11-10 2009-06-09 Via Technologies, Inc. Interruptible GPU and method for context saving and restoring
US9086922B2 (en) * 2009-10-26 2015-07-21 Microsoft Technology Licensing, Llc Opportunistically scheduling and adjusting time slices
US8803891B2 (en) * 2010-12-13 2014-08-12 Advanced Micro Devices, Inc. Method for preempting graphics tasks to accommodate compute tasks in an accelerated processing device (APD)
US20120229481A1 (en) * 2010-12-13 2012-09-13 Ati Technologies Ulc Accessibility of graphics processing compute resources
US9507632B2 (en) * 2010-12-15 2016-11-29 Advanced Micro Devices, Inc. Preemptive context switching of processes on ac accelerated processing device (APD) based on time quanta
US20140157287A1 (en) * 2012-11-30 2014-06-05 Advanced Micro Devices, Inc Optimized Context Switching for Long-Running Processes
US9727451B2 (en) * 2014-03-28 2017-08-08 Fortinet, Inc. Virtualization in a multi-host environment
US9639401B1 (en) * 2014-05-08 2017-05-02 Rockwell Collins, Inc. Multicore adaptive scheduler
US20150378782A1 (en) * 2014-06-25 2015-12-31 Unisys Corporation Scheduling of tasks on idle processors without context switching
US9411629B1 (en) * 2015-03-10 2016-08-09 International Business Machines Corporation Reducing virtual machine pre-emption in virtualized environment
US10545800B2 (en) * 2017-05-31 2020-01-28 Ati Technologies Ulc Direct doorbell ring in virtualized processing device

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011022627A (ja) 2009-07-13 2011-02-03 Hitachi Ltd 計算機システム、仮想計算機モニタ及び仮想計算機モニタのスケジューリング方法
JP2013546098A (ja) 2010-12-13 2013-12-26 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド グラフィックス計算プロセススケジューリング
US20130124838A1 (en) 2011-11-10 2013-05-16 Lacky V. Shah Instruction level execution preemption
JP2015503784A (ja) 2011-12-28 2015-02-02 エーティーアイ・テクノロジーズ・ユーエルシーAti Technologies Ulc グラフィックス処理部における仮想マシン間の移行
US20150220367A1 (en) 2014-02-04 2015-08-06 The Boeing Company Removal of idle time in virtual machine operation
US20170069054A1 (en) 2015-09-04 2017-03-09 Intel Corporation Facilitating efficient scheduling of graphics workloads at computing devices
WO2017049538A1 (en) 2015-09-24 2017-03-30 Intel Corporation Apparatus and method for pattern driven self-adaptive virtual graphics processor units

Also Published As

Publication number Publication date
KR102605313B1 (ko) 2023-11-23
US10474490B2 (en) 2019-11-12
JP2020525913A (ja) 2020-08-27
US20190004839A1 (en) 2019-01-03
WO2019005485A1 (en) 2019-01-03
EP3646177A1 (en) 2020-05-06
CN110832457B (zh) 2024-05-24
CN110832457A (zh) 2020-02-21
EP3646177B1 (en) 2022-10-12
KR20200014426A (ko) 2020-02-10
EP3646177A4 (en) 2021-03-31

Similar Documents

Publication Publication Date Title
JP7253507B2 (ja) 仮想化アクセラレーテッド処理デバイスの早期仮想化コンテキストスイッチ
CN109643291B (zh) 用于在虚拟化执行环境中高效使用图形处理资源的方法和设备
US10026145B2 (en) Resource sharing on shader processor of GPU
KR101477882B1 (ko) 서브버퍼 오브젝트
JP6918919B2 (ja) 自動的にコンパイルされたコンピュートシェーダを用いるプリミティブカリング
US9799094B1 (en) Per-instance preamble for graphics processing
US9563466B2 (en) Method and apparatus for supporting programmable software context state execution during hardware context restore flow
US10509666B2 (en) Register partition and protection for virtualized processing device
JP7282675B2 (ja) アウトオブオーダキャッシュリターン
US11182186B2 (en) Hang detection for virtualized accelerated processing device
US10545800B2 (en) Direct doorbell ring in virtualized processing device
US20220058048A1 (en) Varying firmware for virtualized device
JP7121019B2 (ja) アウトオブオーダのピクセルシェーダのエクスポート
US20210089423A1 (en) Flexible multi-user graphics architecture
US20220091880A1 (en) Fine-grained conditional dispatching

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200225

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210603

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20220531

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20220628

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20220928

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20221125

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20230307

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20230327

R150 Certificate of patent or registration of utility model

Ref document number: 7253507

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150