IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ アドバンスト・マイクロ・ディバイシズ・インコーポレイテッドの特許一覧 ▶ エーティーアイ・テクノロジーズ・ユーエルシーの特許一覧

特許7123235仮想化用のGPUタスクコンテナとしてのVMID
<>
  • 特許-仮想化用のGPUタスクコンテナとしてのVMID 図1
  • 特許-仮想化用のGPUタスクコンテナとしてのVMID 図2
  • 特許-仮想化用のGPUタスクコンテナとしてのVMID 図3
  • 特許-仮想化用のGPUタスクコンテナとしてのVMID 図4
  • 特許-仮想化用のGPUタスクコンテナとしてのVMID 図5
  • 特許-仮想化用のGPUタスクコンテナとしてのVMID 図6
  • 特許-仮想化用のGPUタスクコンテナとしてのVMID 図7
  • 特許-仮想化用のGPUタスクコンテナとしてのVMID 図8
  • 特許-仮想化用のGPUタスクコンテナとしてのVMID 図9
  • 特許-仮想化用のGPUタスクコンテナとしてのVMID 図10
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-08-12
(45)【発行日】2022-08-22
(54)【発明の名称】仮想化用のGPUタスクコンテナとしてのVMID
(51)【国際特許分類】
   G06F 12/00 20060101AFI20220815BHJP
   G06F 9/455 20060101ALI20220815BHJP
   G06F 9/50 20060101ALI20220815BHJP
   G06F 12/02 20060101ALI20220815BHJP
【FI】
G06F12/00 560A
G06F9/455 150
G06F9/50 120A
G06F12/02 570A
【請求項の数】 20
(21)【出願番号】P 2021505214
(86)(22)【出願日】2019-06-26
(65)【公表番号】
(43)【公表日】2021-12-02
(86)【国際出願番号】 US2019039257
(87)【国際公開番号】W WO2020027951
(87)【国際公開日】2020-02-06
【審査請求日】2021-03-22
(31)【優先権主張番号】16/050,948
(32)【優先日】2018-07-31
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(73)【特許権者】
【識別番号】508301087
【氏名又は名称】エーティーアイ・テクノロジーズ・ユーエルシー
【氏名又は名称原語表記】ATI TECHNOLOGIES ULC
【住所又は居所原語表記】One Commerce Valley Drive East, Markham, Ontario, L3T 7X6 Canada
(74)【代理人】
【識別番号】100108833
【弁理士】
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【弁理士】
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【弁理士】
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】アニルーダ アール. アチャリャ
(72)【発明者】
【氏名】マイケル ジェイ. マントル
(72)【発明者】
【氏名】レックス エルドン マクラリー
(72)【発明者】
【氏名】アンソニー アサロ
(72)【発明者】
【氏名】ジェフリー ゴンシエン チェン
(72)【発明者】
【氏名】マーク ファウラー
【審査官】後藤 彰
(56)【参考文献】
【文献】特表2016-527652(JP,A)
【文献】特開2000-347940(JP,A)
【文献】米国特許出願公開第2016/0092677(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 12/00
G06F 12/02
G06F 9/455
G06F 9/50
(57)【特許請求の範囲】
【請求項1】
システムであって、
複数のタスクのプログラム命令を記憶するメモリであって、前記複数のタスクは第1のタスクを含むメモリと、
前記メモリに接続されたプロセッサと、を備え、
前記プロセッサは、
前記第1のタスク及び1つ以上の他のタスクを同時に実行することと、
第1の操作に対応する前記第1のタスクの1つ以上の命令を検出したことに応じて、
前記第1のタスクを一意に識別する第1の識別子(ID)であって、前記第1のタスクのソース階層を識別しない第1のIDを受信することと、
前記第1のIDを、前記第1のタスクの前記ソース階層を識別する第2のIDにマッピングすることと、
前記第1のタスクを識別するために前記第2のIDを使用して第1のデータ構造へのアクセスを実行することによって、前記第1の操作を完了することと、
を行うように構成されている、
システム。
【請求項2】
前記プロセッサは、前記第1のIDを前記第2のID及び第3のIDにマッピングするためのマッピングテーブルにアクセスする、
請求項1のシステム。
【請求項3】
前記第2のIDは、第1のアプリケーションを識別し、前記第3のIDは、第1のオペレーティングシステム(OS)を識別し、前記第1のアプリケーション及び前記第1のOSは、前記第1のタスクの前記ソース階層を表す、
請求項2のシステム。
【請求項4】
前記プロセッサは、
前記第1のタスクと同時に、前記第1のタスクとは異なるオペレーティングシステムの一部である第2のタスクを実行することと、
第2の操作に対応する前記第2のタスクの1つ以上の命令を検出したことに応じて、
前記第2のタスクを一意に識別する第4のIDであって、前記第1のタスクのソース階層を識別しない第4のIDを受信することと、
前記第4のIDを、第5のID及び第6のIDにマッピングすることと、
前記第2のIDと同じである前記第5のIDと、前記第3のIDとは異なる前記第6のIDと、を用いて前記第1のデータ構造へのアクセスを実行することによって、前記第1の操作を完了することと、
を行うように構成されている、
請求項3のシステム。
【請求項5】
前記第1の操作は、メモリアクセス操作であり、前記第1のデータ構造は、ページテーブルのセットである、
請求項1のシステム。
【請求項6】
前記プロセッサは、
前記プロセッサと前記プロセッサの外部の各構成要素との間の各境界でマッピングテーブルを維持することと、
前記第2のIDを取得するために、前記第1のIDを用いて前記マッピングテーブルにアクセスすることと、
を行うように構成されている、
請求項1のシステム。
【請求項7】
前記第1のIDは、コンテナIDであり、前記プロセッサは、第1のコンテナIDを有するタスクが第2のコンテナIDを有するタスクのデータにアクセスするのを抑制するように構成されている、
請求項1のシステム。
【請求項8】
方法であって、
第1のタスク及び1つ以上の他のタスクを同時に実行することと、
第1の操作に対応する前記第1のタスクの1つ以上の命令を検出したことに応じて、
前記第1のタスクを一意に識別する第1の識別子(ID)であって、前記第1のタスクのソース階層を識別しない第1のIDを受信することと、
前記第1のIDを、前記第1のタスクのソース階層を識別する第2のIDにマッピングすることと、
前記第1のタスクを識別するために前記第2のIDを使用して第1のデータ構造へのアクセスを実行することによって、前記第1の操作を完了することと、を含む、
方法。
【請求項9】
前記第1のIDを前記第2のID及び第3のIDにマッピングするためのマッピングテーブルにアクセスすることを含む、
請求項8の方法。
【請求項10】
前記第2のIDは、第1のアプリケーションを識別し、前記第3のIDは、第1のオペレーティングシステム(OS)を識別し、前記第1のアプリケーション及び前記第1のOSは、前記第1のタスクの前記ソース階層を表す、
請求項9の方法。
【請求項11】
前記第1のタスクと同時に、前記第1のタスクとは異なるオペレーティングシステムの一部である第2のタスクを実行することと、
第2の操作に対応する前記第2のタスクの1つ以上の命令を検出したことに応じて、
前記第2のタスクを一意に識別する第4のIDであって、前記第1のタスクのソース階層を識別しない第4のIDを受信することと、
前記第4のIDを、第5のID及び第6のIDにマッピングすることと、
前記第2のIDと同じである前記第5のIDと、前記第3のIDとは異なる前記第6のIDと、を用いて前記第1のデータ構造へのアクセスを実行することによって、前記第1の操作を完了することと、を含む、
請求項10の方法。
【請求項12】
前記第1の操作は、メモリアクセス操作であり、前記第1のデータ構造は、ページテーブルのセットである、
請求項8の方法。
【請求項13】
ロセッサと前記プロセッサの外部の各構成要素との間の各境界でマッピングテーブルを維持することと、
前記第2のIDを取得するために、前記第1のIDを用いて前記マッピングテーブルにアクセスすることと、を含む、
請求項8の方法。
【請求項14】
前記第1のIDは、コンテナIDであり、前記方法は、第1のコンテナIDを有するタスクが第2のコンテナIDを有するタスクのデータにアクセスするのを抑制することを含む、
請求項8の方法。
【請求項15】
プロセッサであって、
スケジューラユニットと、
複数の計算ユニットと、を備え、
前記プロセッサは、
第1のタスク及び1つ以上の他のタスクを、前記複数の計算ユニット上で同時に実行するようにスケジューリングすることと、
第1の操作に対応する前記第1のタスクの1つ以上の命令を検出したことに応じて、
前記第1のタスクを一意に識別する第1の識別子(ID)であって、前記第1のタスクのソース階層を識別しない第1のIDを受信することと、
前記第1のIDを、前記第1のタスクの前記ソース階層を識別する第2のIDにマッピングすることと、
前記第1のタスクを識別するために前記第2のIDを使用して第1のデータ構造へのアクセスを実行することによって、前記第1の操作を完了することと、
を行うように構成されている、
プロセッサ。
【請求項16】
前記プロセッサは、前記第1のIDを前記第2のID及び第3のIDにマッピングするためのマッピングテーブルにアクセスする、
請求項15のプロセッサ。
【請求項17】
前記第2のIDは、第1のアプリケーションを識別し、前記第3のIDは、第1のオペレーティングシステム(OS)を識別し、前記第1のアプリケーション及び前記第1のOSは、前記第1のタスクの前記ソース階層を表す、
請求項16のプロセッサ。
【請求項18】
前記プロセッサは、
前記第1のタスクと同時に、前記第1のタスクとは異なるオペレーティングシステムの一部である第2のタスクを実行することと、
第2の操作に対応する前記第2のタスクの1つ以上の命令を検出したことに応じて、
前記第2のタスクを一意に識別する第4のIDであって、前記第1のタスクのソース階層を識別しない第4のIDを受信することと、
前記第4のIDを、第5のID及び第6のIDにマッピングすることと、
前記第2のIDと同じである前記第5のIDと、前記第3のIDとは異なる前記第6のIDと、を用いて前記第1のデータ構造へのアクセスを実行することによって、前記第1の操作を完了することと、
を行うように構成されている、
請求項17のプロセッサ。
【請求項19】
前記第1のIDは、コンテナIDであり、前記プロセッサは、第1のコンテナIDを有するタスクが第2のコンテナIDを有するタスクのデータにアクセスするのを抑制するように構成されている、
請求項15のプロセッサ。
【請求項20】
前記プロセッサは、
前記プロセッサと前記プロセッサの外部の各構成要素との間の各境界でマッピングテーブルを維持することと、
前記第2のIDを取得するために、前記第1のIDを用いて前記マッピングテーブルにアクセスすることと、
を行うように構成されている、
請求項15のプロセッサ。
【発明の詳細な説明】
【背景技術】
【0001】
(関連技術の説明)
一般的な計算にグラフィックスプロセッシングユニット(GPU)を使用する要望は、現代のGPUの単位電力当たりの性能及びコストのために、より一般的になっている。GPUの計算能力は、対応する中央演算処理装置(CPU)プラットフォームの計算能力を超える速度で成長してきた。この成長は、モバイルコンピューティング市場(例えば、ノートパソコン、モバイルスマートフォン、タブレット)及びそれをサポートするサーバ/エンタープライズシステムの急激な拡大と相まって、所望のユーザエクスペリエンスと整合性のある品質を達成するために使用されてきた。結果として、データ並列コンテンツを伴うワークロードを実行するためにCPUとGPUを組み合わせて使用することが、ボリュームテクノロジーになりつつある。
【0002】
GPUは、大量のスレッドレベルの並列処理を利用して、高い命令スループットを達成する。この高いスループットは、GPUを、多くの異なるパラダイムで不可欠な計算リソースにするのに役立ってきた。多くのタイプのコンピューティング環境では、複数のアプリケーションが単一の処理ユニットを共有する。1つ以上のオペレーティングシステムから複数のアプリケーションを同時に実行するには、ハードウェア及びソフトウェアに様々なサポートメカニズムが必要になる。重要なメカニズムの1つは、マシン上で実行されている各アプリケーションのアドレス空間を管理及び保護する仮想メモリである。しかしながら、現代のGPUは、複数のアプリケーションの並列実行のサポートに欠けている。その結果、GPUは、複数の並行アプリケーションを実行する場合に、高い性能オーバヘッドに悩まされる。
【0003】
添付の図面と共に以下の説明を参照することによって、本明細書に記載される方法及びメカニズムの利点をより良く理解することができる。
【図面の簡単な説明】
【0004】
図1】コンピューティングシステムの一実施形態のブロック図である。
図2】コンピューティングシステムの別の実施形態のブロック図である。
図3】GPUの仮想環境の一実施形態のブロック図である。
図4】GPUの一実施形態のブロック図である。
図5】計算パイプラインを備えたプロセッサの一実施形態のブロック図である。
図6】仮想メモリ識別子(VMID)コンテナ内のタスクの抽象化の一実施形態のブロック図である。
図7】コンピューティングシステムの一実施形態のブロック図である。
図8】コンテナIDをOS又はVFのIDにマッピングするためのマッピングテーブルの一実施形態を示す図である。
図9】コンテナIDを使用してタスクを抽象化するの方法の一実施形態を示す一般化されたフロー図である。
図10】スケジューラがタスク用のコンテナIDを生成する方法の一実施形態を示す一般化されたフロー図である。
【発明を実施するための形態】
【0005】
以下の説明では、本明細書に提示される方法及びメカニズムの十分な理解を提供するために、多くの具体的な詳細が記載される。しかしながら、当業者は、これらの具体的な詳細無しに様々な実施形態が実施され得ることを認識すべきである。場合によっては、本明細書で説明するアプローチを曖昧にすることを回避するために、周知の構造、構成要素、信号、コンピュータプログラム命令及び技術が詳細に示されていない。説明を簡単且つ明確にするために、図に示される要素は必ずしも縮尺通りに描かれていないことが理解されよう。例えば、一部の要素の寸法は、他の要素と比較して誇張される場合がある。
【0006】
仮想メモリ識別子(VMID)コンテナ内のタスクを抽象化するための様々なシステム、装置及び方法が、本明細書で開示される。メモリに接続されたプロセッサは、第1のタスクを含む複数の並行タスクを実行する。第1の操作に対応する第1のタスクの1つ以上の命令を検出することに応じて、プロセッサは、第1のタスクを一意に識別するために使用される第1の識別子(ID)を取得し、第1のIDは、第1のタスクに対して透過的である。次に、プロセッサは、第1のIDを第2のID及び/又は第3のIDにマッピングする。プロセッサは、第2のID及び/又は第3のIDを使用して、少なくとも1つの第1のデータ構造に対する第1のタスクを識別することによって、第1の操作を完了する。一実施形態では、第1の操作は、メモリアクセス操作であり、第1のデータ構造は、ページテーブルのセットである。また、一実施形態では、第2のIDは、第1のタスクの第1のアプリケーションを識別し、第3のIDは、第1のタスクの第1のオペレーティングシステム(OS)を識別する。
【0007】
図1を参照すると、コンピューティングシステム100の一実施形態のブロック図が示されている。一実施形態では、コンピューティングシステム100は、少なくともプロセッサ105A~105Nと、入力/出力(I/O)インタフェース120と、バス125と、メモリコントローラ(複数可)130と、ネットワークインタフェースコントローラ(NIC)135と、メモリデバイス(複数可)140と、を含む。他の実施形態では、コンピューティングシステム100は他の構成要素を含み、及び/又は、コンピューティングシステム100は異なるように構成される。プロセッサ105A~105Nは、システム100に含まれる任意の数のプロセッサを表す。一実施形態では、プロセッサ105Aは、中央処理装置(CPU)等の汎用プロセッサである。一実施形態では、プロセッサ105Nは、高並列アーキテクチャを有するデータ並列プロセッサである。データ並列プロセッサは、グラフィックスプロセッシングユニット(GPU)、デジタルシグナルプロセッサ(DSP)、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)等を含む。いくつかの実施形態では、プロセッサ105A~105Nは、複数のデータ並列プロセッサを含む。
【0008】
メモリコントローラ(複数可)130は、I/Oインタフェース120に接続されたプロセッサ105A~105N及びI/Oデバイス(図示省略)によってアクセス可能な任意の数及びタイプのメモリコントローラを表す。メモリコントローラ(複数可)130は、任意の数及びタイプのメモリデバイス(複数可)140に接続されている。メモリデバイス(複数可)140は、任意の数及びタイプのメモリデバイスを表す。例えば、メモリデバイス(複数可)140内のメモリのタイプには、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)、NANDフラッシュメモリ、NORフラッシュメモリ、強誘電体ランダムアクセスメモリ(FeRAM)等が含まれる。
【0009】
I/Oインタフェース120は、任意の数及びタイプのI/Oインタフェース(例えば、PCI(peripheral component interconnect)バス、PCI-X(PCI-Extended)、PCIE(PCI Express)バス、ギガビットイーサネット(登録商標)(GBE)バス、ユニバーサルシリアルバス(USB))を表す。様々な周辺デバイス(図示省略)がI/Oインタフェース120に接続されている。このような周辺デバイスは、ディスプレイ、キーボード、マウス、プリンタ、スキャナ、ジョイスティック又は他のタイプのゲームコントローラ、メディア記録デバイス、外部ストレージデバイス、ネットワークインタフェースカード等を含む(ただし、これらに限定されない)。ネットワークインタフェースコントローラ(NIC)135は、ネットワーク145を介してネットワークメッセージを送受信する。
【0010】
ネットワーク145は、無線接続、直接ローカルエリアネットワーク(LAN)、メトロポリタンエリアネットワーク(MAN)、ワイドエリアネットワーク(WAN)、イントラネット、インターネット、ケーブルネットワーク、パケット交換ネットワーク、光ファイバネットワーク、ルータ、ストレージエリアネットワーク、若しくは、他のタイプのネットワークを含む、任意のタイプのネットワーク又はネットワークの組み合わせを表す。LANの例には、イーサネット(登録商標)ネットワーク、FDDI(Fiber Distributed Data Interface)ネットワーク、トークンリングネットワーク等が含まれる。様々な実施形態では、ネットワーク145は、リモートダイレクトメモリアクセス(RDMA)ハードウェア及び/若しくはソフトウェア、伝送制御プロトコル/インターネットプロトコル(TCP/IP)ハードウェア及び/若しくはTCP/IPソフトウェア、ルータ、リピータ、スイッチ、グリッド、並びに/又は、他の構成要素を含む。
【0011】
様々な実施形態では、コンピューティングシステム100は、コンピュータ、ラップトップ、モバイルデバイス、ゲームコンソール、サーバ、ストリーミングデバイス、ウェアラブルデバイス、又は、任意の様々なタイプのコンピューティングシステム若しくはコンピューティングデバイスである。コンピューティングシステム100の構成要素の数は、実施形態によって異なることに留意されたい。例えば、他の実施形態では、図1に示す数よりも多い又は少ない構成要素が存在する。また、他の実施形態では、コンピューティングシステム100は、図1に示されていない他の構成要素を含むことに留意されたい。さらに、他の実施形態では、コンピューティングシステム100は、図1に示されている以外の方法で構成される。
【0012】
図2を参照すると、コンピューティングシステム200の別の実施形態のブロック図が示されている。一実施形態では、システム200は、GPU205と、システムメモリ225と、ローカルメモリ230と、を含む。また、システム200は、図を曖昧にするのを回避するために図示されていない他の構成要素も含む。GPU205は、少なくとも、コマンドプロセッサ235と、スケジューリングユニット250と、計算ユニット255A~255Nと、メモリコントローラ220と、グローバルデータシェア270と、レベル1(L1)キャッシュ265と、レベル2(L2)キャッシュ260と、を含む。図2には示されていないが、一実施形態では、計算ユニット255A~255Nは、各計算ユニット255A~255N内に1つ以上のキャッシュ及び/又はローカルメモリを含む。他の実施形態では、GPU205は、他の構成要素を含み、図示した構成要素のうち1つ以上を省略し、図2に1つのインスタンスしか示されなくても構成要素の複数のインスタンスを有し、及び/又は、他の適切な方法で構成される。
【0013】
様々な実施形態では、コンピューティングシステム200は、様々なタイプのソフトウェアアプリケーションの何れかを実行する。一実施形態では、所定のソフトウェアアプリケーションの実行の一部として、コンピューティングシステム200のホストCPU(図示省略)が、GPU205上で実行されるタスクを起動する。コマンドプロセッサ235は、ホストCPUからタスクを受信し、タスクをスケジューリングユニット250に発行して、計算ユニット255A~255N上でスケジューリングする。一実施形態では、スケジューリングユニット250が所定のタスクを計算ユニット255A~255N上でスケジューリングする場合、スケジューリングユニット250は、オペレーティングシステム(OS)又は仮想関数(VF)のIDを所定のタスクの仮想メモリ(VM)IDと共にハッシュすることによって、所定のタスクに対して一意のコンテナ識別子(ID)を生成する。計算ユニット255A~255N上で実行されるタスク内のスレッドは、コンピューティングシステム200の内部及び外部の様々なデータ構造にアクセスする。スレッドがコンピューティングシステム200の外部のデータ構造にアクセスすると、コンテナIDは、VFID及び/又はVMIDにマッピングされ、VFID及び/又はVMIDは、外部データ構造に対するスレッドを識別するために使用される。
【0014】
図3を参照すると、GPUの仮想環境300の一実施形態のブロック図が示されている。GPUは、複数の並行タスクをサポート可能な超並列マシンである。GPUは、様々なアプリケーションで図形処理及び/又は計算のワークロードを処理するために用いられる。図形処理のワークロードの場合、GPUは、固定機能ハードウェア及びプログラム可能シェーダを含む、ディープ混合パイプライン(deep, mixed pipeline)を含む。GPUの典型的なワークロードソース階層は、オペレーティングシステム(OS)及び仮想関数(VF)310A~310Bと、アプリケーション308A~308Nと、キュー(複数可)306Aと、描画呼び出しと、ディスパッチのレベルと、を含む。各キュー306Aは、任意の数の図形処理タスク(複数可)302A及び/又は計算タスク(複数可)304Aを含む。マルチタスクをサポートする場合、GPU上で同時にアクティブな様々なソースからの複数のワークロードが潜在的に存在する。
【0015】
GPU上で複数の異なるタイプの並行アプリケーションを実行する場合、異なるワークロードの各々は、ワークロードを識別及び管理して様々な機能を実行するために、タグ付けされる。例えば、異なるワークロードの各々は、同期及びリセットのために、メモリ管理技術及び構造を実装するために、割り込みを管理するために、及び、他の機能を実装するために、タグ付けされる。一実施形態では、異なるワークロードの各々は、コンテナIDを使用して識別され、他のワークロードと区別される。一実施形態では、コンテナIDは、OS又はVFのID及びVMIDのハッシュから生成される。これにより、GPUは、異なるゲストOSからの複数の並行キュー、アプリケーション、描画及びディスパッチをサポートすることができる。他の実施形態では、コンテナIDは、他のタイプの関数及び/又は他のタイプの値から生成される。
【0016】
本明細書に提示する説明のいくつかはGPUの特徴を識別しているが、同じ技術が、並列実行機能を有する他のタイプのプロセッサ(例えば、マルチコアCPU、FPGA、ASIC、DSP)にも適用されることを理解されたい。したがって、本開示を通して、ある技術がGPUによって実行されるかGPU上に実装されると説明されている場合、当該技術は、他のタイプのプロセッサ上で実行可能であることを理解されたい。
【0017】
図4を参照すると、GPU400の一実施形態のブロック図が示されている。一実施形態では、GPU400は、メモリサブシステム420に接続されたグラフィックスパイプライン410を含む。一実施形態では、グラフィックスパイプライン410は、各パイプラインステージにおけるマルチタスクサポートを含む。フロントエンド425は、グラフィックスパイプライン410に転送された入力タスクを記憶するための様々なキューを含む。ジオメトリエンジン430は、グラフィックスパイプライン410で実行されている様々なタスクのために描画呼び出しコマンドを使用してプリミティブのレンダリングを実行する。シェーダエンジン435は、図形をレンダリングする際に関与する様々なシェーダステージを実装する。一実施形態では、ピクセルエンジン440は、出力情報を計算するために呼び出され、レンダリングされる画像が画面空間内でビン又はタイルのグリッドに分割された後、結果が出力表面に書き込まれるようにする。いくつかの実施形態では、ピクセルエンジン440は、ラスタライズされたオブジェクト全体で補間される頂点属性の値を計算する。他の実施形態では、グラフィックスパイプライン410は、他のステージ若しくはエンジンを含み、及び/又は、個々のエンジンは他のタイプの操作を実行する。
【0018】
通常、GPUは、各ステージの順序及び依存性の要件を処理するために、マルチタスクに対するパイプラインサポートを含む。これは、個別のタスク(例えば、ジオメトリエンジン430上のタスク450A、シェーダエンジン435上のタスク450B、ピクセルエンジン440上のタスク450C)を実行するグラフィックスパイプライン410の各ステージを指す。一実施形態では、グラフィックスパイプライン410は、独立した並行図形処理タスクをサポートするように構成されている。本実施形態では、ソース階層の詳細は、GPU内の各ステージから隠されている。グラフィックスパイプラインの独立した並行図形処理タスクのサポートは、各タスクを、ステージで実行中の他の並行タスクから区別するために使用されるコンテナIDを有することによってサポートされる。
【0019】
図5を参照すると、計算パイプライン505を有するプロセッサ500の一実施形態のブロック図が示されている。一実施形態では、プロセッサ500は、メモリサブシステム510に接続された計算パイプライン505を少なくとも含む。一実施形態では、プロセッサ500はGPUである。他の実施形態では、プロセッサ500は、様々な他のタイプの処理ユニット(例えば、FPGA、ASIC、DSP、マルチコアCPU)の何れかである。
【0020】
計算パイプライン505は、シェーダエンジン520に接続されたフロントエンド515を含む。計算パイプライン505は、タスク525A~525Dの並行実行を可能にするために垂直分割及び/又は水平分割を含む。例えば、タスク525Aは、一実施形態ではシェーダエンジン520上で起動され、後続のクロックサイクルで他のタスクが起動される。別の実施形態では、タスク525B~525Dは、シェーダエンジン520で同時に起動及び実行される。シェーダエンジン520は、複数のタスクの並行実行を可能にするために、本実施形態では垂直に分割される。垂直分割とは、シェーダエンジン520の処理ユニット及び処理ロジックが、複数のタスクの状態を維持し、及び/又は、同じクロックサイクルで複数のタスクを処理する能力を指す。一実施形態では、個別のタスクは、コンテナIDを使用して識別され、異なるタスクの各々は、一意のコンテナIDを有する。
【0021】
一実施形態では、計算パイプライン505の各ステージは、垂直に分割される。例えば、フロントエンド515は、複数の異なるタスクを同時に起動及び実行可能にするように分割されたキューを含む。また、シェーダエンジン520は、複数の計算タスクを同時に実行可能にする垂直パーティションを含む。フロントエンド515及びシェーダエンジン520は、多数のソースからワークロードを同時に実行することができる。一実施形態では、計算パイプライン505の各ステージ又はパーティションは、これらの個々のタスクを実行する場合に、タスクのソース階層を認識していない。本実施形態では、ソース階層の詳細は、プロセッサ500の境界をタスクが横断するときにのみ利用される。
【0022】
図6を参照すると、仮想メモリ識別子(VMID)コンテナ内のタスクの抽象化の一実施形態のブロック図が示されている。一実施形態では、VMID602は、通常、プロセッサで実行されているアプリケーションを区別するためのメモリ管理操作に使用される。しかしながら、別の実施形態では、タスクを実行するソース階層を抽象化するために、タスクコンテナID604が、VMID602の代わりに使用される。様々な実施形態では、プロセッサは、実行中にタスクのソースを識別する必要がない。むしろ、プロセッサは、外部構成要素又は外部データ構造と相互作用する場合にソースを識別するだけでよい。一実施形態では、コンテナID604は、メモリデータ構造をバンドルするために使用される。本実施形態では、プロセッサは、あるコンテナIDが別のコンテナIDのメモリ内容にアクセスできないようにすることによって、メモリ保護を提供する。
【0023】
一実施形態では、コンテナID604は、ハードウェアメカニズムによって管理され、ハードウェア実行レベルより上のソフトウェア階層に対して透過的である。ソフトウェア階層の残りの部分は、ソース追跡の既存のメカニズムを引き続き使用する。これらの既存のメカニズムは、OS ID、プロセスID、キューID等を含む。一実施形態では、タスクタグ付け及びソース階層は、プロセッサから外部構成要素への境界においてのみ関連する。例えば、パイプ終了(end-of pipe)及びリセット操作等の同期タスクは、タスクのソースを参照する。また、プロセッサの外部のメモリトランザクションは、タスクのソースを使用して、正しいメモリ管理データ構造(例えば、ページテーブル)にマッピングする。さらに、割り込み処理はソース毎に追跡され、現在実行中のタスクのうち何れのタスクに割り込むのかを識別する。また、PCI-e(peripheral component interconnect express)バスデバイス関数解決(bus-device-function resolution)がソース毎に追跡され、仮想関数又は物理関数のソースを決定する。タスクのソースを追跡するためにプロセッサの境界で実行される他のタイプの操作も可能であり、考えられる。
【0024】
一実施形態では、マッピングテーブル608は、プロセッサと外部構成要素との間の各境界で維持される。マッピングテーブルは、タスクのコンテナID604を、オペレーティングシステム(OS)ID若しくは仮想関数(VF)ID606、プロセスID、又は、これら以外にマッピングする。コンテナID604を使用してタスクのソースを識別することにより、同時描画及びディスパッチ、キュー、アプリケーション、仮想関数並びにOSをプロセッサ上で実行することが可能になる。エントリ610,612,614,616は、マッピングテーブル608の任意の数のエントリを表す。一実施形態では、マッピングテーブル608は、16のエントリを有する。他の実施形態では、マッピングテーブル608は、他の数のエントリを含む。
【0025】
図7を参照すると、コンピューティングシステム700の一実施形態のブロック図が示されている。一実施形態では、コンピューティングシステム700は、コンテナIDを使用して、マルチタスク同時実行環境においてタスクを追跡する。コンテナIDを使用してタスクを追跡するために、システム700は、コンテナIDをタスクのソース階層にマッピングするための複数のマッピングテーブル(MT)725A~725Dを含む。MT725A~725Dの各々は任意の数のエントリを含み、エントリ数は実施形態によって異なる。
【0026】
一実施形態では、システム700は、メモリサブシステム730及び入力/出力(I/O)デバイス740A~740Bに接続されたシステムオンチップ(SoC)705を含む。I/Oデバイス740A~740Bは、任意の数及びタイプの周辺装置を表す。他の実施形態では、システム700は、図を曖昧にすることを回避するために図示されていない他の構成要素も含むことに留意されたい。SoC705は、少なくとも、プロセッサコア710A~710Nと、I/Oファブリック715と、メモリ管理ユニット720と、割り込みコントローラ735と、を含む。一実施形態では、I/Oファブリック715は、I/Oデバイス740A~740Bに対応するマッピングテーブル725A~725Bを含む。また、MMU720及び割り込みコントローラ735は、それぞれマッピングテーブル725C~725Dを含む。マッピングテーブル725Cは、コンテナIDをタスクのソース階層にマッピングして、ページテーブルの適切なセットへのアクセスを可能にするために使用される。一方、マッピングテーブル725Dは、割り込みを送るために、コンテナIDを対応するソースにマッピングするために使用される。一実施形態では、異なるMT725A~725Dは、各MTのエントリが他のMTのエントリと一致するように同期される。したがって、本実施形態では、別のコンテナID用の新たなエントリのためのスペースを生成するために既存のエントリが所定のMT725A~725Dからエビクトされた場合、他のMT725A~725Dは、所定のMT725A~725Dと一致するように通知され、更新される。
【0027】
図8を参照すると、コンテナIDをOSのID又はVFのIDにマッピングするためのマッピングテーブル800の一実施形態が示されている。一実施形態では、プロセッサ(例えば、図2のGPU205)は、コンテナIDをOS/VFのID及びVMIDにマッピングするためのマッピングテーブル800の1つ以上のコピーを含む。マッピングテーブル800は、コンテナIDフィールド805と、OS/VF IDフィールド810と、VMIフィールド815と、を含む。他の実施形態では、マッピングテーブル800は、他のフィールドを含み、及び/又は、異なるように構成される。所定のタスクのコンテナIDを使用して、マッピングテーブル800のルックアップを実行し、所定のタスクについて一致するOS/VF ID及びVMIDを見つける。
【0028】
所定のデータ構造にアクセスするために、又は、外部構成要素と相互作用するために、タスクのソースが識別される必要がある場合、プロセッサは、マッピングテーブル800を使用して、所定のコンテナIDをタスクのOS又はVFのID及びVMIDに解決する。OS又はVFのID及び/又はVMIDは、タスクのソースを識別して、特定のタイプの操作を完了するために使用される。例えば、仮想アドレスから物理アドレスへの変換は、所定のコンテナIDのページテーブルの特定のセットにアクセスすることによって実行される。別の例では、特定のタスクは、マッピングテーブル800を使用して、コンテナIDをOS/VFのID及びVMIDに解決することによって、割り込みをどこに送るかを決定するために識別される。
【0029】
一実施形態では、マッピングテーブル800は、限られた数のエントリを有する。マッピングテーブル800が一杯であり、新たなタスクがプロセッサ上で開始される場合、プロセッサは、新たなタスクの新たなエントリのためのスペースを生成するために、マッピングテーブル800から既存のエントリの1つを削除するか、中断するか、完了を待機する。いくつかの実施形態では、マッピングテーブル800の複数のコピーがプロセッサによって維持され、マッピングテーブル800の1つのコピーがプロセッサの各境界点に記憶される。これらの実施形態では、プロセッサは、マッピングテーブルを同期して、現在実行中のタスクの様々なコンテナIDに対して同じエントリがあることを確実にする。
【0030】
図9を参照すると、コンテナIDを使用してタスクを抽象化する方法900の一実施形態が示されている。説明のために、本実施形態のステップ及び図10のステップは、順次示される。しかしながら、説明する方法の様々な実施形態では、説明する要素の1つ以上が、同時に実行され、図示した順序とは異なる順序で実行され、又は、完全に省略されることに留意されたい。また、必要に応じて、他の追加の要素も実行される。本明細書で説明する様々なシステム又は装置の何れも方法900を実施するように構成されている。
【0031】
プロセッサは、第1のタスク及び1つ以上の他のタスクを同時に実行する(ブロック905)。一実施形態では、プロセッサはGPUである。第1のタスクを実行している間、プロセッサは、第1の操作に対応する1つ以上の命令を検出する(ブロック910)。一実施形態では、第1の操作はメモリアクセス操作である。別の実施形態では、第1の操作は、プロセッサの外部の構成要素をターゲットとする操作である。さらなる実施形態では、第1の操作は、第1のタスクのソースが識別されることを必要とする操作である。さらに別の実施形態では、第1の操作は、表示される1つ以上のピクセルをレンダリングすることを含む図形処理操作である。本実施形態では、プロセッサは、第1の操作の一部としてディスプレイに送られる1つ以上のピクセルを生成する。他の実施形態では、第1の操作は、様々な他のタイプの操作のうち何れかである。
【0032】
プロセッサは、第1の操作に対応する第1のタスクの1つ以上の命令を検出したことに応じて、第1のタスクを一意に識別する第1の識別子(ID)を受信するが、第1のIDは、第1のタスクのソース階層を識別しない(ブロック915)。言い換えると、第1のIDは、第1のタスクに対して透過的である。一実施形態では、第1のIDは、コンテナIDである。次に、プロセッサは、第1のIDを、第1のタスクのソース階層を識別する第2のIDにマッピングする(ブロック920)。別の実施形態では、プロセッサは、第1のIDを、第1のタスクのソース階層を共に識別する第2のID及び第3のIDにマッピングする。本実施形態では、第2のIDは、第1のタスクの第1のアプリケーションを識別し、第3のIDは、第1のタスクの第1のオペレーティングシステム(OS)を識別する。本実施形態では、ソース階層は、第1のタスクのアプリケーション、OS、及び/又は、仮想関数(VF)を指す。これに対して、第1のIDは、第1のタスクのソース階層を抽象化する。
【0033】
次に、プロセッサは、第1のタスクを識別するために第2のIDを使用して第1のデータ構造へのアクセスを実行することによって、第1の操作を完了する(ブロック925)。一実施形態では、第1のデータ構造は、仮想アドレスから物理アドレスへの変換ページテーブルのセットである。別の実施形態では、第1のデータ構造は、割り込みテーブルである。ブロック925の後に方法900が終了する。方法900は、プロセッサ上で同時に実行されている複数のタスクに対して並行して実行可能であることに留意されたい。これらの複数のタスクは、2つ以上の異なるゲストOSからのタスクを含む。
【0034】
図10を参照すると、スケジューラがタスクのコンテナIDを生成する方法1000の一実施形態が示されている。プロセッサ(例えば、図2のGPU205)のスケジューラは、プロセッサの1つ以上の計算ユニットでスケジューリングされるタスクを受信する(ブロック1005)。スケジューラは、タスクに関連する仮想関数(VF)ID及び仮想メモリ(VM)IDを取得する(ブロック1010)。別の実施形態では、スケジューラは、タスクに関連するオペレーティングシステム(OS)IDを取得する。次に、スケジューラは、タスクに関連するVFID及びVMIDからタスクのコンテナIDを生成し、コンテナIDは、タスクを一意に識別する(ブロック1015)。別の実施形態では、スケジューラは、タスクに関連するOS ID及びVMIDからタスクの一意のコンテナIDを生成する。一実施形態では、スケジューラは、VMIDを用いてVFID(又はOSID)のハッシュを生成することによって、コンテナIDを生成する。次に、スケジューラは、一意のコンテナIDを用いてタスクをタグ付けする(ブロック1020)。言い換えると、タスクは、タスクのVFID、OS ID又はVMIDに関連付けられるのではなく、一意のコンテナIDに関連付けられる。これにより、プロセッサは、異なるゲストOS又は同じOSからの複数の並行タスクをサポートすることができる。
【0035】
次に、スケジューラは、タスクが準備完了であると判別したことに応じて、1つ以上の計算ユニットで実行されるタスクをスケジューリングする(ブロック1025)。タスクの実行中、プロセッサは、コンテナIDをVFID及び/又はVMIDにマッピングすることによって、1つ以上のデータ構造にアクセスする(ブロック1030)。或いは、プロセッサは、ブロック1030において、コンテナIDをOS ID及び/又はVMIDにマッピングする。実施形態に応じて、1つ以上のデータ構造は、ページテーブル、割り込みテーブル、及び/又は、他のデータ構造を含む。ブロック1030の後に方法1000が終了する。一実施形態では、方法1000は、プロセッサ上で同時に実行されている複数のタスクに対して並行して実行されることに留意されたい。これらの複数のタスクは、2つ以上の異なるゲストOSからのタスクを含む。
【0036】
様々な実施形態では、本明細書で説明した方法及び/又はメカニズムを実施するために、ソフトウェアアプリケーションのプログラム命令が使用される。例えば、汎用プロセッサ又は専用プロセッサによって実行可能なプログラム命令が考えられる。様々な実施形態では、このようなプログラム命令は、高水準プログラミング言語によって表されている。他の実施形態では、プログラム命令は、高水準プログラミング言語からバイナリ形式、中間形式、又は、他の形式にコンパイルされる。或いは、ハードウェアの動作及び設計を記述するプログラム命令が記述される。このようなプログラム命令は、C言語等の高水準プログラミング言語で表される。或いは、Verilog等のハードウェア設計言語(HDL)が用いられる。様々な実施形態では、プログラム命令は、様々な非一時的なコンピュータ可読記憶媒体に記憶される。記憶媒体は、使用中にコンピューティングシステムによってアクセスされ、プログラムを実行するためにコンピューティングシステムにプログラム命令を提供する。一般的に、このようなコンピューティングシステムは、少なくとも1つ以上のメモリと、プログラム命令を実行するように構成された1つ以上のプロセッサと、を含む。
【0037】
上述した実施形態は、実施形態の非限定的な例に過ぎないことを強調しておきたい。上記の開示が十分に理解されれば、多くの変形及び修正が当業者に明らかになるであろう。以下の特許請求の範囲は、このような変形及び修正の全てを包含するように解釈されることが意図される。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10