(57)【要約】仮想メモリ識別子（ＶＭＩＤ）コンテナ内のタスクを抽象化するためのシステム、装置及び方法が開示される。メモリに接続されたプロセッサは、第１のタスクを含む複数の並行タスクを実行する。第１の操作に対応する第１のタスクの１つ以上の命令を検出したことに応じて、プロセッサは、第１のタスクを一意に識別するために使用される第１の識別子（ＩＤ）を取得し、第１のＩＤは第１のタスクに対して透過的である。次に、プロセッサは、第１のＩＤを第２のＩＤ及び／又は第３のＩＤにマッピングする。プロセッサは、第２のＩＤ及び／又は第３のＩＤを使用して少なくとも１つの第１のデータ構造に対する第１のタスクを識別することによって、第１の操作を完了する。一実施形態では、第１の操作はメモリアクセス操作であり、第１のデータ構造はページテーブルのセットである。また、一実施形態では、第２のＩＤは第１のタスクの第１のアプリケーションを識別し、第３のＩＤは第１のタスクの第１のオペレーティングシステム（ＯＳ）を識別する。【選択図】図９
2021533455.tif 000002
【特許請求の範囲】
【請求項１】
システムであって、
複数のタスクのプログラム命令を記憶するメモリであって、前記複数のタスクは第１のタスクを含むメモリと、
前記メモリに接続されたプロセッサと、を備え、
前記プロセッサは、
前記第１のタスク及び１つ以上の他のタスクを同時に実行することと、
第１の操作に対応する前記第１のタスクの１つ以上の命令を検出したことに応じて、
前記第１のタスクを一意に識別する第１の識別子（ＩＤ）であって、前記第１のタスクのソース階層を識別しない第１のＩＤを受信することと、
前記第１のＩＤを、前記第１のタスクの前記ソース階層を識別する第２のＩＤにマッピングすることと、
前記第１のタスクを識別するために前記第２のＩＤを使用して第１のデータ構造へのアクセスを実行することによって、前記第１の操作を完了することと、
を行うように構成されている、
システム。
【請求項２】
前記プロセッサは、前記第１のＩＤを前記第２のＩＤ及び第３のＩＤにマッピングするためのマッピングテーブルにアクセスする、
請求項１のシステム。
【請求項３】
前記第２のＩＤは、第１のアプリケーションを識別し、前記第３のＩＤは、第１のオペレーティングシステム（ＯＳ）を識別し、前記第１のアプリケーション及び前記第１のＯＳは、前記第１のタスクの前記ソース階層を表す、
請求項２のシステム。
【請求項４】
前記プロセッサは、
前記第１のタスクと同時に、前記第１のタスクとは異なるオペレーティングシステムの一部である第２のタスクを実行することと、
第２の操作に対応する前記第２のタスクの１つ以上の命令を検出したことに応じて、
前記第２のタスクを一意に識別する第４のＩＤであって、前記第１のタスクのソース階層を識別しない第４のＩＤを受信することと、
前記第４のＩＤを、第５のＩＤ及び第６のＩＤにマッピングすることと、
前記第２のＩＤと同じである前記第５のＩＤと、前記第３のＩＤとは異なる前記第６のＩＤと、を用いて前記第１のデータ構造へのアクセスを実行することによって、前記第１の操作を完了することと、
を行うように構成されている、
請求項３のシステム。
【請求項５】
前記第１の操作は、メモリアクセス操作であり、前記第１のデータ構造は、ページテーブルのセットである、
請求項１のシステム。
【請求項６】
前記プロセッサは、
前記プロセッサと前記プロセッサの外部の各構成要素との間の各境界でマッピングテーブルを維持することと、
前記第２のＩＤを取得するために、前記第１のＩＤを用いて前記マッピングテーブルにアクセスすることと、
を行うように構成されている、
請求項１のシステム。
【請求項７】
前記第１のＩＤは、コンテナＩＤであり、前記プロセッサは、第１のコンテナＩＤを有するタスクが第２のコンテナＩＤを有するタスクのデータにアクセスするのを抑制するように構成されている、
請求項１のシステム。
【請求項８】
方法であって、
第１のタスク及び１つ以上の他のタスクを同時に実行することと、
第１の操作に対応する前記第１のタスクの１つ以上の命令を検出したことに応じて、
前記第１のタスクを一意に識別する第１の識別子（ＩＤ）であって、前記第１のタスクのソース階層を識別しない第１のＩＤを受信することと、
前記第１のＩＤを、前記第１のタスクのソース階層を識別する第２のＩＤにマッピングすることと、
前記第１のタスクを識別するために前記第２のＩＤを使用して第１のデータ構造へのアクセスを実行することによって、前記第１の操作を完了することと、を含む、
方法。
【請求項９】
前記第１のＩＤを前記第２のＩＤ及び第３のＩＤにマッピングするためのマッピングテーブルにアクセスすることを含む、
請求項８の方法。
【請求項１０】
前記第２のＩＤは、第１のアプリケーションを識別し、前記第３のＩＤは、第１のオペレーティングシステム（ＯＳ）を識別し、前記第１のアプリケーション及び前記第１のＯＳは、前記第１のタスクの前記ソース階層を表す、
請求項９の方法。
【請求項１１】
前記第１のタスクと同時に、前記第１のタスクとは異なるオペレーティングシステムの一部である第２のタスクを実行することと、
第２の操作に対応する前記第２のタスクの１つ以上の命令を検出したことに応じて、
前記第２のタスクを一意に識別する第４のＩＤであって、前記第１のタスクのソース階層を識別しない第４のＩＤを受信することと、
前記第４のＩＤを、第５のＩＤ及び第６のＩＤにマッピングすることと、
前記第２のＩＤと同じである前記第５のＩＤと、前記第３のＩＤとは異なる前記第６のＩＤと、を用いて前記第１のデータ構造へのアクセスを実行することによって、前記第１の操作を完了することと、を含む、
請求項１０の方法。
【請求項１２】
前記第１の操作は、メモリアクセス操作であり、前記第１のデータ構造は、ページテーブルのセットである、
請求項８の方法。
【請求項１３】
前記プロセッサは、
前記プロセッサと前記プロセッサの外部の各構成要素との間の各境界でマッピングテーブルを維持することと、
前記第２のＩＤを取得するために、前記第１のＩＤを用いて前記マッピングテーブルにアクセスすることと、
を行うように構成されている、
請求項８の方法。
【請求項１４】
前記第１のＩＤは、コンテナＩＤであり、前記方法は、第１のコンテナＩＤを有するタスクが第２のコンテナＩＤを有するタスクのデータにアクセスするのを抑制することを含む、
請求項８の方法。
【請求項１５】
プロセッサであって、
スケジューラユニットと、
複数の計算ユニットと、を備え、
前記プロセッサは、
第１のタスク及び１つ以上の他のタスクを、前記複数の計算ユニット上で同時に実行するようにスケジューリングすることと、
第１の操作に対応する前記第１のタスクの１つ以上の命令を検出したことに応じて、
前記第１のタスクを一意に識別する第１の識別子（ＩＤ）であって、前記第１のタスクのソース階層を識別しない第１のＩＤを受信することと、
前記第１のＩＤを、前記第１のタスクの前記ソース階層を識別する第２のＩＤにマッピングすることと、
前記第１のタスクを識別するために前記第２のＩＤを使用して第１のデータ構造へのアクセスを実行することによって、前記第１の操作を完了することと、
を行うように構成されている、
プロセッサ。
【請求項１６】
前記プロセッサは、前記第１のＩＤを前記第２のＩＤ及び第３のＩＤにマッピングするためのマッピングテーブルにアクセスする、
請求項１５のプロセッサ。
【請求項１７】
前記第２のＩＤは、第１のアプリケーションを識別し、前記第３のＩＤは、第１のオペレーティングシステム（ＯＳ）を識別し、前記第１のアプリケーション及び前記第１のＯＳは、前記第１のタスクの前記ソース階層を表す、
請求項１６のプロセッサ。
【請求項１８】
前記プロセッサは、
前記第１のタスクと同時に、前記第１のタスクとは異なるオペレーティングシステムの一部である第２のタスクを実行することと、
第２の操作に対応する前記第２のタスクの１つ以上の命令を検出したことに応じて、
前記第２のタスクを一意に識別する第４のＩＤであって、前記第１のタスクのソース階層を識別しない第４のＩＤを受信することと、
前記第４のＩＤを、第５のＩＤ及び第６のＩＤにマッピングすることと、
前記第２のＩＤと同じである前記第５のＩＤと、前記第３のＩＤとは異なる前記第６のＩＤと、を用いて前記第１のデータ構造へのアクセスを実行することによって、前記第１の操作を完了することと、
を行うように構成されている、
請求項１７のプロセッサ。
【請求項１９】
前記第１のＩＤは、コンテナＩＤであり、前記プロセッサは、第１のコンテナＩＤを有するタスクが第２のコンテナＩＤを有するタスクのデータにアクセスするのを抑制するように構成されている、
請求項１５のプロセッサ。
【請求項２０】
前記プロセッサは、
前記プロセッサと前記プロセッサの外部の各構成要素との間の各境界でマッピングテーブルを維持することと、
前記第２のＩＤを取得するために、前記第１のＩＤを用いて前記マッピングテーブルにアクセスすることと、
を行うように構成されている、
請求項１５のプロセッサ。
【発明の詳細な説明】
【背景技術】
【０００１】
（関連技術の説明）
一般的な計算にグラフィックスプロセッシングユニット（ＧＰＵ）を使用する要望は、現代のＧＰＵの単位電力当たりの性能及びコストのために、より一般的になっている。ＧＰＵの計算能力は、対応する中央演算処理装置（ＣＰＵ）プラットフォームの計算能力を超える速度で成長してきた。この成長は、モバイルコンピューティング市場（例えば、ノートパソコン、モバイルスマートフォン、タブレット）及びそれをサポートするサーバ／エンタープライズシステムの急激な拡大と相まって、所望のユーザエクスペリエンスと整合性のある品質を達成するために使用されてきた。結果として、データ並列コンテンツを伴うワークロードを実行するためにＣＰＵとＧＰＵを組み合わせて使用することが、ボリュームテクノロジーになりつつある。
【０００２】
ＧＰＵは、大量のスレッドレベルの並列処理を利用して、高い命令スループットを達成する。この高いスループットは、ＧＰＵを、多くの異なるパラダイムで不可欠な計算リソースにするのに役立ってきた。多くのタイプのコンピューティング環境では、複数のアプリケーションが単一の処理ユニットを共有する。１つ以上のオペレーティングシステムから複数のアプリケーションを同時に実行するには、ハードウェア及びソフトウェアに様々なサポートメカニズムが必要になる。重要なメカニズムの１つは、マシン上で実行されている各アプリケーションのアドレス空間を管理及び保護する仮想メモリである。しかしながら、現代のＧＰＵは、複数のアプリケーションの並列実行のサポートに欠けている。その結果、ＧＰＵは、複数の並行アプリケーションを実行する場合に、高い性能オーバヘッドに悩まされる。
【０００３】
添付の図面と共に以下の説明を参照することによって、本明細書に記載される方法及びメカニズムの利点をより良く理解することができる。
【図面の簡単な説明】
【０００４】
【図１】コンピューティングシステムの一実施形態のブロック図である。
【図２】コンピューティングシステムの別の実施形態のブロック図である。
【図３】ＧＰＵの仮想環境の一実施形態のブロック図である。
【図４】ＧＰＵの一実施形態のブロック図である。
【図５】計算パイプラインを備えたプロセッサの一実施形態のブロック図である。
【図６】仮想メモリ識別子（ＶＭＩＤ）コンテナ内のタスクの抽象化の一実施形態のブロック図である。
【図７】コンピューティングシステムの一実施形態のブロック図である。
【図８】コンテナＩＤをＯＳ又はＶＦのＩＤにマッピングするためのマッピングテーブルの一実施形態を示す図である。
【図９】コンテナＩＤを使用してタスクを抽象化するの方法の一実施形態を示す一般化されたフロー図である。
【図１０】スケジューラがタスク用のコンテナＩＤを生成する方法の一実施形態を示す一般化されたフロー図である。
【発明を実施するための形態】
【０００５】
以下の説明では、本明細書に提示される方法及びメカニズムの十分な理解を提供するために、多くの具体的な詳細が記載される。しかしながら、当業者は、これらの具体的な詳細無しに様々な実施形態が実施され得ることを認識すべきである。場合によっては、本明細書で説明するアプローチを曖昧にすることを回避するために、周知の構造、構成要素、信号、コンピュータプログラム命令及び技術が詳細に示されていない。説明を簡単且つ明確にするために、図に示される要素は必ずしも縮尺通りに描かれていないことが理解されよう。例えば、一部の要素の寸法は、他の要素と比較して誇張される場合がある。
【０００６】
仮想メモリ識別子（ＶＭＩＤ）コンテナ内のタスクを抽象化するための様々なシステム、装置及び方法が、本明細書で開示される。メモリに接続されたプロセッサは、第１のタスクを含む複数の並行タスクを実行する。第１の操作に対応する第１のタスクの１つ以上の命令を検出することに応じて、プロセッサは、第１のタスクを一意に識別するために使用される第１の識別子（ＩＤ）を取得し、第１のＩＤは、第１のタスクに対して透過的である。次に、プロセッサは、第１のＩＤを第２のＩＤ及び／又は第３のＩＤにマッピングする。プロセッサは、第２のＩＤ及び／又は第３のＩＤを使用して、少なくとも１つの第１のデータ構造に対する第１のタスクを識別することによって、第１の操作を完了する。一実施形態では、第１の操作は、メモリアクセス操作であり、第１のデータ構造は、ページテーブルのセットである。また、一実施形態では、第２のＩＤは、第１のタスクの第１のアプリケーションを識別し、第３のＩＤは、第１のタスクの第１のオペレーティングシステム（ＯＳ）を識別する。
【０００７】
図１を参照すると、コンピューティングシステム１００の一実施形態のブロック図が示されている。一実施形態では、コンピューティングシステム１００は、少なくともプロセッサ１０５Ａ〜１０５Ｎと、入力／出力（Ｉ／Ｏ）インタフェース１２０と、バス１２５と、メモリコントローラ（複数可）１３０と、ネットワークインタフェースコントローラ（ＮＩＣ）１３５と、メモリデバイス（複数可）１４０と、を含む。他の実施形態では、コンピューティングシステム１００は他の構成要素を含み、及び／又は、コンピューティングシステム１００は異なるように構成される。プロセッサ１０５Ａ〜１０５Ｎは、システム１００に含まれる任意の数のプロセッサを表す。一実施形態では、プロセッサ１０５Ａは、中央処理装置（ＣＰＵ）等の汎用プロセッサである。一実施形態では、プロセッサ１０５Ｎは、高並列アーキテクチャを有するデータ並列プロセッサである。データ並列プロセッサは、グラフィックスプロセッシングユニット（ＧＰＵ）、デジタルシグナルプロセッサ（ＤＳＰ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、特定用途向け集積回路（ＡＳＩＣ）等を含む。いくつかの実施形態では、プロセッサ１０５Ａ〜１０５Ｎは、複数のデータ並列プロセッサを含む。
【０００８】
メモリコントローラ（複数可）１３０は、Ｉ／Ｏインタフェース１２０に接続されたプロセッサ１０５Ａ〜１０５Ｎ及びＩ／Ｏデバイス（図示省略）によってアクセス可能な任意の数及びタイプのメモリコントローラを表す。メモリコントローラ（複数可）１３０は、任意の数及びタイプのメモリデバイス（複数可）１４０に接続されている。メモリデバイス（複数可）１４０は、任意の数及びタイプのメモリデバイスを表す。例えば、メモリデバイス（複数可）１４０内のメモリのタイプには、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、ＮＡＮＤフラッシュメモリ、ＮＯＲフラッシュメモリ、強誘電体ランダムアクセスメモリ（ＦｅＲＡＭ）等が含まれる。
【０００９】
Ｉ／Ｏインタフェース１２０は、任意の数及びタイプのＩ／Ｏインタフェース（例えば、ＰＣＩ（peripheral component interconnect）バス、ＰＣＩ−Ｘ（PCI-Extended）、ＰＣＩＥ（PCI Express）バス、ギガビットイーサネット（登録商標）（ＧＢＥ）バス、ユニバーサルシリアルバス（ＵＳＢ））を表す。様々な周辺デバイス（図示省略）がＩ／Ｏインタフェース１２０に接続されている。このような周辺デバイスは、ディスプレイ、キーボード、マウス、プリンタ、スキャナ、ジョイスティック又は他のタイプのゲームコントローラ、メディア記録デバイス、外部ストレージデバイス、ネットワークインタフェースカード等を含む（ただし、これらに限定されない）。ネットワークインタフェースコントローラ（ＮＩＣ）１３５は、ネットワーク１４５を介してネットワークメッセージを送受信する。
【００１０】
ネットワーク１４５は、無線接続、直接ローカルエリアネットワーク（ＬＡＮ）、メトロポリタンエリアネットワーク（ＭＡＮ）、ワイドエリアネットワーク（ＷＡＮ）、イントラネット、インターネット、ケーブルネットワーク、パケット交換ネットワーク、光ファイバネットワーク、ルータ、ストレージエリアネットワーク、若しくは、他のタイプのネットワークを含む、任意のタイプのネットワーク又はネットワークの組み合わせを表す。ＬＡＮの例には、イーサネット（登録商標）ネットワーク、ＦＤＤＩ（Fiber Distributed Data Interface）ネットワーク、トークンリングネットワーク等が含まれる。様々な実施形態では、ネットワーク１４５は、リモートダイレクトメモリアクセス（ＲＤＭＡ）ハードウェア及び／若しくはソフトウェア、伝送制御プロトコル／インターネットプロトコル（ＴＣＰ／ＩＰ）ハードウェア及び／若しくはＴＣＰ／ＩＰソフトウェア、ルータ、リピータ、スイッチ、グリッド、並びに／又は、他の構成要素を含む。
【００１１】
様々な実施形態では、コンピューティングシステム１００は、コンピュータ、ラップトップ、モバイルデバイス、ゲームコンソール、サーバ、ストリーミングデバイス、ウェアラブルデバイス、又は、任意の様々なタイプのコンピューティングシステム若しくはコンピューティングデバイスである。コンピューティングシステム１００の構成要素の数は、実施形態によって異なることに留意されたい。例えば、他の実施形態では、図１に示す数よりも多い又は少ない構成要素が存在する。また、他の実施形態では、コンピューティングシステム１００は、図１に示されていない他の構成要素を含むことに留意されたい。さらに、他の実施形態では、コンピューティングシステム１００は、図１に示されている以外の方法で構成される。
【００１２】
図２を参照すると、コンピューティングシステム２００の別の実施形態のブロック図が示されている。一実施形態では、システム２００は、ＧＰＵ２０５と、システムメモリ２２５と、ローカルメモリ２３０と、を含む。また、システム２００は、図を曖昧にするのを回避するために図示されていない他の構成要素も含む。ＧＰＵ２０５は、少なくとも、コマンドプロセッサ２３５と、スケジューリングユニット２５０と、計算ユニット２５５Ａ〜２５５Ｎと、メモリコントローラ２２０と、グローバルデータシェア２７０と、レベル１（Ｌ１）キャッシュ２６５と、レベル２（Ｌ２）キャッシュ２６０と、を含む。図２には示されていないが、一実施形態では、計算ユニット２５５Ａ〜２５５Ｎは、各計算ユニット２５５Ａ〜２５５Ｎ内に１つ以上のキャッシュ及び／又はローカルメモリを含む。他の実施形態では、ＧＰＵ２０５は、他の構成要素を含み、図示した構成要素のうち１つ以上を省略し、図２に１つのインスタンスしか示されなくても構成要素の複数のインスタンスを有し、及び／又は、他の適切な方法で構成される。
【００１３】
様々な実施形態では、コンピューティングシステム２００は、様々なタイプのソフトウェアアプリケーションの何れかを実行する。一実施形態では、所定のソフトウェアアプリケーションの実行の一部として、コンピューティングシステム２００のホストＣＰＵ（図示省略）が、ＧＰＵ２０５上で実行されるタスクを起動する。コマンドプロセッサ２３５は、ホストＣＰＵからタスクを受信し、タスクをスケジューリングユニット２５０に発行して、計算ユニット２５５Ａ〜２５５Ｎ上でスケジューリングする。一実施形態では、スケジューリングユニット２５０が所定のタスクを計算ユニット２５５Ａ〜２５５Ｎ上でスケジューリングする場合、スケジューリングユニット２５０は、オペレーティングシステム（ＯＳ）又は仮想関数（ＶＦ）のＩＤを所定のタスクの仮想メモリ（ＶＭ）ＩＤと共にハッシュすることによって、所定のタスクに対して一意のコンテナ識別子（ＩＤ）を生成する。計算ユニット２５５Ａ〜２５５Ｎ上で実行されるタスク内のスレッドは、コンピューティングシステム２００の内部及び外部の様々なデータ構造にアクセスする。スレッドがコンピューティングシステム２００の外部のデータ構造にアクセスすると、コンテナＩＤは、ＶＦＩＤ及び／又はＶＭＩＤにマッピングされ、ＶＦＩＤ及び／又はＶＭＩＤは、外部データ構造に対するスレッドを識別するために使用される。
【００１４】
図３を参照すると、ＧＰＵの仮想環境３００の一実施形態のブロック図が示されている。ＧＰＵは、複数の並行タスクをサポート可能な超並列マシンである。ＧＰＵは、様々なアプリケーションで図形処理及び／又は計算のワークロードを処理するために用いられる。図形処理のワークロードの場合、ＧＰＵは、固定機能ハードウェア及びプログラム可能シェーダを含む、ディープ混合パイプライン（deep, mixed pipeline）を含む。ＧＰＵの典型的なワークロードソース階層は、オペレーティングシステム（ＯＳ）及び仮想関数（ＶＦ）３１０Ａ〜３１０Ｂと、アプリケーション３０８Ａ〜３０８Ｎと、キュー（複数可）３０６Ａと、描画呼び出しと、ディスパッチのレベルと、を含む。各キュー３０６Ａは、任意の数の図形処理タスク（複数可）３０２Ａ及び／又は計算タスク（複数可）３０４Ａを含む。マルチタスクをサポートする場合、ＧＰＵ上で同時にアクティブな様々なソースからの複数のワークロードが潜在的に存在する。
【００１５】
ＧＰＵ上で複数の異なるタイプの並行アプリケーションを実行する場合、異なるワークロードの各々は、ワークロードを識別及び管理して様々な機能を実行するために、タグ付けされる。例えば、異なるワークロードの各々は、同期及びリセットのために、メモリ管理技術及び構造を実装するために、割り込みを管理するために、及び、他の機能を実装するために、タグ付けされる。一実施形態では、異なるワークロードの各々は、コンテナＩＤを使用して識別され、他のワークロードと区別される。一実施形態では、コンテナＩＤは、ＯＳ又はＶＦのＩＤ及びＶＭＩＤのハッシュから生成される。これにより、ＧＰＵは、異なるゲストＯＳからの複数の並行キュー、アプリケーション、描画及びディスパッチをサポートすることができる。他の実施形態では、コンテナＩＤは、他のタイプの関数及び／又は他のタイプの値から生成される。
【００１６】
本明細書に提示する説明のいくつかはＧＰＵの特徴を識別しているが、同じ技術が、並列実行機能を有する他のタイプのプロセッサ（例えば、マルチコアＣＰＵ、ＦＰＧＡ、ＡＳＩＣ、ＤＳＰ）にも適用されることを理解されたい。したがって、本開示を通して、ある技術がＧＰＵによって実行されるかＧＰＵ上に実装されると説明されている場合、当該技術は、他のタイプのプロセッサ上で実行可能であることを理解されたい。
【００１７】
図４を参照すると、ＧＰＵ４００の一実施形態のブロック図が示されている。一実施形態では、ＧＰＵ４００は、メモリサブシステム４２０に接続されたグラフィックスパイプライン４１０を含む。一実施形態では、グラフィックスパイプライン４１０は、各パイプラインステージにおけるマルチタスクサポートを含む。フロントエンド４２５は、グラフィックスパイプライン４１０に転送された入力タスクを記憶するための様々なキューを含む。ジオメトリエンジン４３０は、グラフィックスパイプライン４１０で実行されている様々なタスクのために描画呼び出しコマンドを使用してプリミティブのレンダリングを実行する。シェーダエンジン４３５は、図形をレンダリングする際に関与する様々なシェーダステージを実装する。一実施形態では、ピクセルエンジン４４０は、出力情報を計算するために呼び出され、レンダリングされる画像が画面空間内でビン又はタイルのグリッドに分割された後、結果が出力表面に書き込まれるようにする。いくつかの実施形態では、ピクセルエンジン４４０は、ラスタライズされたオブジェクト全体で補間される頂点属性の値を計算する。他の実施形態では、グラフィックスパイプライン４１０は、他のステージ若しくはエンジンを含み、及び／又は、個々のエンジンは他のタイプの操作を実行する。
【００１８】
通常、ＧＰＵは、各ステージの順序及び依存性の要件を処理するために、マルチタスクに対するパイプラインサポートを含む。これは、個別のタスク（例えば、ジオメトリエンジン４３０上のタスク４５０Ａ、シェーダエンジン４３５上のタスク４５０Ｂ、ピクセルエンジン４４０上のタスク４５０Ｃ）を実行するグラフィックスパイプライン４１０の各ステージを指す。一実施形態では、グラフィックスパイプライン４１０は、独立した並行図形処理タスクをサポートするように構成されている。本実施形態では、ソース階層の詳細は、ＧＰＵ内の各ステージから隠されている。グラフィックスパイプラインの独立した並行図形処理タスクのサポートは、各タスクを、ステージで実行中の他の並行タスクから区別するために使用されるコンテナＩＤを有することによってサポートされる。
【００１９】
図５を参照すると、計算パイプライン５０５を有するプロセッサ５００の一実施形態のブロック図が示されている。一実施形態では、プロセッサ５００は、メモリサブシステム５１０に接続された計算パイプライン５０５を少なくとも含む。一実施形態では、プロセッサ５００はＧＰＵである。他の実施形態では、プロセッサ５００は、様々な他のタイプの処理ユニット（例えば、ＦＰＧＡ、ＡＳＩＣ、ＤＳＰ、マルチコアＣＰＵ）の何れかである。
【００２０】
計算パイプライン５０５は、シェーダエンジン５２０に接続されたフロントエンド５１５を含む。計算パイプライン５０５は、タスク５２５Ａ〜５２５Ｄの並行実行を可能にするために垂直分割及び／又は水平分割を含む。例えば、タスク５２５Ａは、一実施形態ではシェーダエンジン５２０上で起動され、後続のクロックサイクルで他のタスクが起動される。別の実施形態では、タスク５２５Ｂ〜５２５Ｄは、シェーダエンジン５２０で同時に起動及び実行される。シェーダエンジン５２０は、複数のタスクの並行実行を可能にするために、本実施形態では垂直に分割される。垂直分割とは、シェーダエンジン５２０の処理ユニット及び処理ロジックが、複数のタスクの状態を維持し、及び／又は、同じクロックサイクルで複数のタスクを処理する能力を指す。一実施形態では、個別のタスクは、コンテナＩＤを使用して識別され、異なるタスクの各々は、一意のコンテナＩＤを有する。
【００２１】
一実施形態では、計算パイプライン５０５の各ステージは、垂直に分割される。例えば、フロントエンド５１５は、複数の異なるタスクを同時に起動及び実行可能にするように分割されたキューを含む。また、シェーダエンジン５２０は、複数の計算タスクを同時に実行可能にする垂直パーティションを含む。フロントエンド５１５及びシェーダエンジン５２０は、多数のソースからワークロードを同時に実行することができる。一実施形態では、計算パイプライン５０５の各ステージ又はパーティションは、これらの個々のタスクを実行する場合に、タスクのソース階層を認識していない。本実施形態では、ソース階層の詳細は、プロセッサ５００の境界をタスクが横断するときにのみ利用される。
【００２２】
図６を参照すると、仮想メモリ識別子（ＶＭＩＤ）コンテナ内のタスクの抽象化の一実施形態のブロック図が示されている。一実施形態では、ＶＭＩＤ６０２は、通常、プロセッサで実行されているアプリケーションを区別するためのメモリ管理操作に使用される。しかしながら、別の実施形態では、タスクを実行するソース階層を抽象化するために、タスクコンテナＩＤ６０４が、ＶＭＩＤ６０２の代わりに使用される。様々な実施形態では、プロセッサは、実行中にタスクのソースを識別する必要がない。むしろ、プロセッサは、外部構成要素又は外部データ構造と相互作用する場合にソースを識別するだけでよい。一実施形態では、コンテナＩＤ６０４は、メモリデータ構造をバンドルするために使用される。本実施形態では、プロセッサは、あるコンテナＩＤが別のコンテナＩＤのメモリ内容にアクセスできないようにすることによって、メモリ保護を提供する。
【００２３】
一実施形態では、コンテナＩＤ６０４は、ハードウェアメカニズムによって管理され、ハードウェア実行レベルより上のソフトウェア階層に対して透過的である。ソフトウェア階層の残りの部分は、ソース追跡の既存のメカニズムを引き続き使用する。これらの既存のメカニズムは、ＯＳ  ＩＤ、プロセスＩＤ、キューＩＤ等を含む。一実施形態では、タスクタグ付け及びソース階層は、プロセッサから外部構成要素への境界においてのみ関連する。例えば、パイプ終了（end-of pipe）及びリセット操作等の同期タスクは、タスクのソースを参照する。また、プロセッサの外部のメモリトランザクションは、タスクのソースを使用して、正しいメモリ管理データ構造（例えば、ページテーブル）にマッピングする。さらに、割り込み処理はソース毎に追跡され、現在実行中のタスクのうち何れのタスクに割り込むのかを識別する。また、ＰＣＩ−ｅ（peripheral component interconnect express）バスデバイス関数解決（bus-device-function resolution）がソース毎に追跡され、仮想関数又は物理関数のソースを決定する。タスクのソースを追跡するためにプロセッサの境界で実行される他のタイプの操作も可能であり、考えられる。
【００２４】
一実施形態では、マッピングテーブル６０８は、プロセッサと外部構成要素との間の各境界で維持される。マッピングテーブルは、タスクのコンテナＩＤ６０４を、オペレーティングシステム（ＯＳ）ＩＤ若しくは仮想関数（ＶＦ）ＩＤ６０６、プロセスＩＤ、又は、これら以外にマッピングする。コンテナＩＤ６０４を使用してタスクのソースを識別することにより、同時描画及びディスパッチ、キュー、アプリケーション、仮想関数並びにＯＳをプロセッサ上で実行することが可能になる。エントリ６１０，６１２，６１４，６１６は、マッピングテーブル６０８の任意の数のエントリを表す。一実施形態では、マッピングテーブル６０８は、１６のエントリを有する。他の実施形態では、マッピングテーブル６０８は、他の数のエントリを含む。
【００２５】
図７を参照すると、コンピューティングシステム７００の一実施形態のブロック図が示されている。一実施形態では、コンピューティングシステム７００は、コンテナＩＤを使用して、マルチタスク同時実行環境においてタスクを追跡する。コンテナＩＤを使用してタスクを追跡するために、システム７００は、コンテナＩＤをタスクのソース階層にマッピングするための複数のマッピングテーブル（ＭＴ）７２５Ａ〜７２５Ｄを含む。ＭＴ７２５Ａ〜７２５Ｄの各々は任意の数のエントリを含み、エントリ数は実施形態によって異なる。
【００２６】
一実施形態では、システム７００は、メモリサブシステム７３０及び入力／出力（Ｉ／Ｏ）デバイス７４０Ａ〜７４０Ｂに接続されたシステムオンチップ（ＳｏＣ）７０５を含む。Ｉ／Ｏデバイス７４０Ａ〜７４０Ｂは、任意の数及びタイプの周辺装置を表す。他の実施形態では、システム７００は、図を曖昧にすることを回避するために図示されていない他の構成要素も含むことに留意されたい。ＳｏＣ７０５は、少なくとも、プロセッサコア７１０Ａ〜７１０Ｎと、Ｉ／Ｏファブリック７１５と、メモリ管理ユニット７２０と、割り込みコントローラ７３５と、を含む。一実施形態では、Ｉ／Ｏファブリック７１５は、Ｉ／Ｏデバイス７４０Ａ〜７４０Ｂに対応するマッピングテーブル７２５Ａ〜７２５Ｂを含む。また、ＭＭＵ７２０及び割り込みコントローラ７３５は、それぞれマッピングテーブル７２５Ｃ〜７２５Ｄを含む。マッピングテーブル７２５Ｃは、コンテナＩＤをタスクのソース階層にマッピングして、ページテーブルの適切なセットへのアクセスを可能にするために使用される。一方、マッピングテーブル７２５Ｄは、割り込みを送るために、コンテナＩＤを対応するソースにマッピングするために使用される。一実施形態では、異なるＭＴ７２５Ａ〜７２５Ｄは、各ＭＴのエントリが他のＭＴのエントリと一致するように同期される。したがって、本実施形態では、別のコンテナＩＤ用の新たなエントリのためのスペースを生成するために既存のエントリが所定のＭＴ７２５Ａ〜７２５Ｄからエビクトされた場合、他のＭＴ７２５Ａ〜７２５Ｄは、所定のＭＴ７２５Ａ〜７２５Ｄと一致するように通知され、更新される。
【００２７】
図８を参照すると、コンテナＩＤをＯＳのＩＤ又はＶＦのＩＤにマッピングするためのマッピングテーブル８００の一実施形態が示されている。一実施形態では、プロセッサ（例えば、図２のＧＰＵ２０５）は、コンテナＩＤをＯＳ／ＶＦのＩＤ及びＶＭＩＤにマッピングするためのマッピングテーブル８００の１つ以上のコピーを含む。マッピングテーブル８００は、コンテナＩＤフィールド８０５と、ＯＳ／ＶＦ  ＩＤフィールド８１０と、ＶＭＩフィールド８１５と、を含む。他の実施形態では、マッピングテーブル８００は、他のフィールドを含み、及び／又は、異なるように構成される。所定のタスクのコンテナＩＤを使用して、マッピングテーブル８００のルックアップを実行し、所定のタスクについて一致するＯＳ／ＶＦ  ＩＤ及びＶＭＩＤを見つける。
【００２８】
所定のデータ構造にアクセスするために、又は、外部構成要素と相互作用するために、タスクのソースが識別される必要がある場合、プロセッサは、マッピングテーブル８００を使用して、所定のコンテナＩＤをタスクのＯＳ又はＶＦのＩＤ及びＶＭＩＤに解決する。ＯＳ又はＶＦのＩＤ及び／又はＶＭＩＤは、タスクのソースを識別して、特定のタイプの操作を完了するために使用される。例えば、仮想アドレスから物理アドレスへの変換は、所定のコンテナＩＤのページテーブルの特定のセットにアクセスすることによって実行される。別の例では、特定のタスクは、マッピングテーブル８００を使用して、コンテナＩＤをＯＳ／ＶＦのＩＤ及びＶＭＩＤに解決することによって、割り込みをどこに送るかを決定するために識別される。
【００２９】
一実施形態では、マッピングテーブル８００は、限られた数のエントリを有する。マッピングテーブル８００が一杯であり、新たなタスクがプロセッサ上で開始される場合、プロセッサは、新たなタスクの新たなエントリのためのスペースを生成するために、マッピングテーブル８００から既存のエントリの１つを削除するか、中断するか、完了を待機する。いくつかの実施形態では、マッピングテーブル８００の複数のコピーがプロセッサによって維持され、マッピングテーブル８００の１つのコピーがプロセッサの各境界点に記憶される。これらの実施形態では、プロセッサは、マッピングテーブルを同期して、現在実行中のタスクの様々なコンテナＩＤに対して同じエントリがあることを確実にする。
【００３０】
図９を参照すると、コンテナＩＤを使用してタスクを抽象化する方法９００の一実施形態が示されている。説明のために、本実施形態のステップ及び図１０のステップは、順次示される。しかしながら、説明する方法の様々な実施形態では、説明する要素の１つ以上が、同時に実行され、図示した順序とは異なる順序で実行され、又は、完全に省略されることに留意されたい。また、必要に応じて、他の追加の要素も実行される。本明細書で説明する様々なシステム又は装置の何れも方法９００を実施するように構成されている。
【００３１】
プロセッサは、第１のタスク及び１つ以上の他のタスクを同時に実行する（ブロック９０５）。一実施形態では、プロセッサはＧＰＵである。第１のタスクを実行している間、プロセッサは、第１の操作に対応する１つ以上の命令を検出する（ブロック９１０）。一実施形態では、第１の操作はメモリアクセス操作である。別の実施形態では、第１の操作は、プロセッサの外部の構成要素をターゲットとする操作である。さらなる実施形態では、第１の操作は、第１のタスクのソースが識別されることを必要とする操作である。さらに別の実施形態では、第１の操作は、表示される１つ以上のピクセルをレンダリングすることを含む図形処理操作である。本実施形態では、プロセッサは、第１の操作の一部としてディスプレイに送られる１つ以上のピクセルを生成する。他の実施形態では、第１の操作は、様々な他のタイプの操作のうち何れかである。
【００３２】
プロセッサは、第１の操作に対応する第１のタスクの１つ以上の命令を検出したことに応じて、第１のタスクを一意に識別する第１の識別子（ＩＤ）を受信するが、第１のＩＤは、第１のタスクのソース階層を識別しない（ブロック９１５）。言い換えると、第１のＩＤは、第１のタスクに対して透過的である。一実施形態では、第１のＩＤは、コンテナＩＤである。次に、プロセッサは、第１のＩＤを、第１のタスクのソース階層を識別する第２のＩＤにマッピングする（ブロック９２０）。別の実施形態では、プロセッサは、第１のＩＤを、第１のタスクのソース階層を共に識別する第２のＩＤ及び第３のＩＤにマッピングする。本実施形態では、第２のＩＤは、第１のタスクの第１のアプリケーションを識別し、第３のＩＤは、第１のタスクの第１のオペレーティングシステム（ＯＳ）を識別する。本実施形態では、ソース階層は、第１のタスクのアプリケーション、ＯＳ、及び／又は、仮想関数（ＶＦ）を指す。これに対して、第１のＩＤは、第１のタスクのソース階層を抽象化する。
【００３３】
次に、プロセッサは、第１のタスクを識別するために第２のＩＤを使用して第１のデータ構造へのアクセスを実行することによって、第１の操作を完了する（ブロック９２５）。一実施形態では、第１のデータ構造は、仮想アドレスから物理アドレスへの変換ページテーブルのセットである。別の実施形態では、第１のデータ構造は、割り込みテーブルである。ブロック９２５の後に方法９００が終了する。方法９００は、プロセッサ上で同時に実行されている複数のタスクに対して並行して実行可能であることに留意されたい。これらの複数のタスクは、２つ以上の異なるゲストＯＳからのタスクを含む。
【００３４】
図１０を参照すると、スケジューラがタスクのコンテナＩＤを生成する方法１０００の一実施形態が示されている。プロセッサ（例えば、図２のＧＰＵ２０５）のスケジューラは、プロセッサの１つ以上の計算ユニットでスケジューリングされるタスクを受信する（ブロック１００５）。スケジューラは、タスクに関連する仮想関数（ＶＦ）ＩＤ及び仮想メモリ（ＶＭ）ＩＤを取得する（ブロック１０１０）。別の実施形態では、スケジューラは、タスクに関連するオペレーティングシステム（ＯＳ）ＩＤを取得する。次に、スケジューラは、タスクに関連するＶＦＩＤ及びＶＭＩＤからタスクのコンテナＩＤを生成し、コンテナＩＤは、タスクを一意に識別する（ブロック１０１５）。別の実施形態では、スケジューラは、タスクに関連するＯＳ  ＩＤ及びＶＭＩＤからタスクの一意のコンテナＩＤを生成する。一実施形態では、スケジューラは、ＶＭＩＤを用いてＶＦＩＤ（又はＯＳＩＤ）のハッシュを生成することによって、コンテナＩＤを生成する。次に、スケジューラは、一意のコンテナＩＤを用いてタスクをタグ付けする（ブロック１０２０）。言い換えると、タスクは、タスクのＶＦＩＤ、ＯＳ  ＩＤ又はＶＭＩＤに関連付けられるのではなく、一意のコンテナＩＤに関連付けられる。これにより、プロセッサは、異なるゲストＯＳ又は同じＯＳからの複数の並行タスクをサポートすることができる。
【００３５】
次に、スケジューラは、タスクが準備完了であると判別したことに応じて、１つ以上の計算ユニットで実行されるタスクをスケジューリングする（ブロック１０２５）。タスクの実行中、プロセッサは、コンテナＩＤをＶＦＩＤ及び／又はＶＭＩＤにマッピングすることによって、１つ以上のデータ構造にアクセスする（ブロック１０３０）。或いは、プロセッサは、ブロック１０３０において、コンテナＩＤをＯＳ  ＩＤ及び／又はＶＭＩＤにマッピングする。実施形態に応じて、１つ以上のデータ構造は、ページテーブル、割り込みテーブル、及び／又は、他のデータ構造を含む。ブロック１０３０の後に方法１０００が終了する。一実施形態では、方法１０００は、プロセッサ上で同時に実行されている複数のタスクに対して並行して実行されることに留意されたい。これらの複数のタスクは、２つ以上の異なるゲストＯＳからのタスクを含む。
【００３６】
様々な実施形態では、本明細書で説明した方法及び／又はメカニズムを実施するために、ソフトウェアアプリケーションのプログラム命令が使用される。例えば、汎用プロセッサ又は専用プロセッサによって実行可能なプログラム命令が考えられる。様々な実施形態では、このようなプログラム命令は、高水準プログラミング言語によって表されている。他の実施形態では、プログラム命令は、高水準プログラミング言語からバイナリ形式、中間形式、又は、他の形式にコンパイルされる。或いは、ハードウェアの動作及び設計を記述するプログラム命令が記述される。このようなプログラム命令は、Ｃ言語等の高水準プログラミング言語で表される。或いは、Ｖｅｒｉｌｏｇ等のハードウェア設計言語（ＨＤＬ）が用いられる。様々な実施形態では、プログラム命令は、様々な非一時的なコンピュータ可読記憶媒体に記憶される。記憶媒体は、使用中にコンピューティングシステムによってアクセスされ、プログラムを実行するためにコンピューティングシステムにプログラム命令を提供する。一般的に、このようなコンピューティングシステムは、少なくとも１つ以上のメモリと、プログラム命令を実行するように構成された１つ以上のプロセッサと、を含む。
【００３７】
上述した実施形態は、実施形態の非限定的な例に過ぎないことを強調しておきたい。上記の開示が十分に理解されれば、多くの変形及び修正が当業者に明らかになるであろう。以下の特許請求の範囲は、このような変形及び修正の全てを包含するように解釈されることが意図される。
【図１】
2021533455.tif 000003
【図２】
2021533455.tif 000004
【図３】
2021533455.tif 000005
【図４】
2021533455.tif 000006
【図５】
2021533455.tif 000007
【図６】
2021533455.tif 000008
【図７】
2021533455.tif 000009
【図８】
2021533455.tif 000010
【図９】
2021533455.tif 000011
【図１０】
2021533455.tif 000012
【国際調査報告】
2021533455.tif 000013
2021533455.tif 000014