(57)【要約】仮想メモリページフォールト率を低減するための処理システム（１００）は、データセットを記憶するための第１メモリ（１１０）と、データセットのサブセットを記憶するための第２メモリ（１５０，２１０，３０５）と、処理ユニット（１１４）と、を備える。処理ユニット（１１４）は、仮想アドレスを含むメモリアクセス要求を受信し、仮想アドレスが、第１メモリ内の第１物理ページ（３３５）又は第２メモリ内の第２物理ページにマッピングされているかどうかを判別するように構成されている。処理ユニットは、仮想アドレスが第２物理ページにマッピングされていないことに応じて、第２メモリの空きページプール（３３０）内の第３物理ページを仮想アドレスにマッピングする。また、処理ユニットは、仮想アドレスにマッピングされている第３物理ページへのアクセスを許可する。【選択図】図２
2019521453.tif 000002
【特許請求の範囲】
【請求項１】
データセットを記憶するための第１メモリ（２１５，４１５）と、前記データセットのサブセットを記憶するための第２メモリ（２１０，４１０）と、を備えるシステム（１００）での仮想メモリページフォールト率を低減する方法であって、
仮想アドレスを含むメモリアクセス要求を受信することと、
前記仮想アドレスが前記第２メモリ内の第２物理ページにマッピングされていないことに応じて、前記第２メモリの空きページプール（２４５，３３０，４２５）内の第１物理ページ（３３５）を前記仮想アドレスにマッピングすることと、
前記第１物理ページ（３３５）への前記メモリアクセス要求を許可することと、を含む、
方法。
【請求項２】
前記メモリアクセス要求は、前記仮想アドレスへの書き込み要求であって、
前記第１物理ページ（３３５）を前記仮想アドレスにマッピングすることは、前記第１物理ページ（３３５）を既知の状態に初期化することを含む、
請求項１の方法。
【請求項３】
前記仮想アドレスに基づいて前記第１物理ページ（３３５）に情報を書き込むことをさらに含む、
請求項２の方法。
【請求項４】
前記メモリアクセス要求は、前記仮想アドレスに記憶されている情報を読み出すための要求であって、
前記方法は、
前記メモリアクセス要求に応じて読み出される情報を生成するためのプロセスを生成することと、
前記仮想アドレスに基づいて、前記生成された情報を前記第１物理ページ（３３５）に書き込むことと、
前記第１物理ページ（３３５）から前記生成された情報を読み出すことと、をさらに含む、
請求項１の方法。
【請求項５】
前記第１物理ページ（３３５）を含む複数の物理ページ（３２５，３３５）を前記空きページプール（２４５，３３０，４２５）に割り当てることをさらに含む、
請求項１〜４の何れかの方法。
【請求項６】
前記第１物理ページ（３３５）を前記仮想アドレスにマッピングすることは、前記空きページプール（２４５，３３０，４２５）から前記第１物理ページ（３３５）を削除することを含む、
請求項５の方法。
【請求項７】
前記空きページプール（２４５，３３０，４２５）内の物理ページ（３２５，３３５）数を判別することと、
前記物理ページ数が閾値未満であることに応じて、少なくとも１つの対応する仮想アドレスから少なくとも１つの物理ページをマッピング解除することと、
前記少なくとも１つのマッピング解除された物理ページを前記空きページプール（２４５，３３０，４２５）に追加することと、をさらに含む、
請求項６の方法。
【請求項８】
前記メモリアクセス要求を受信することは、前記第２メモリに記憶された情報をキャッシュするように構成された少なくとも１つのキャッシュに関連する少なくとも１つのアドレス変換バッファ（２６０，２６１，２６２，２６４，４０５）において前記仮想アドレスがエントリを欠いていることに応じて、前記メモリアクセス要求を受信することを含む、
請求項１〜７の何れかの方法。
【請求項９】
データセットを記憶するための第１メモリ（１１０）と、
前記データセットのサブセットを記憶するための第２メモリ（２１０，３０５，４１０）と、
処理ユニット（２３１）と、を備え、
前記処理ユニットは、
仮想アドレスを含むメモリアクセス要求を受信することと、
前記仮想アドレスが前記第２メモリ内の第２物理ページにマッピングされていないことに応じて、前記第２メモリの空きページプール（２４５，３３０，４２５）内の第１物理ページ（３３５）を前記仮想アドレスにマッピングすることと、
前記第１物理ページ（３３５）への前記メモリアクセス要求を許可することと、
を行うように構成されている、
装置。
【請求項１０】
前記メモリアクセス要求は、前記仮想アドレスへの書き込み要求であって、
前記処理ユニット（２３１）は、前記第１物理ページ（３３５）を既知の状態に初期化することを行うように構成されている、
請求項９の装置。
【請求項１１】
前記メモリアクセス要求は、前記仮想アドレスに記憶されている情報を読み出すための要求であって、
前記処理ユニット（２３１）は、
前記メモリアクセス要求に応じて読み出される情報を生成するためのプロセスを生成することと、
前記仮想アドレスに基づいて、前記生成された情報を前記第１物理ページ（３３５）に書き込むことと、
前記第１物理ページ（３３５）から前記生成された情報を読み出すことと、
を行うように構成されている、
請求項９の装置。
【請求項１２】
前記処理ユニット（２３１）は、前記第１物理ページ（３３５）を含む複数の物理ページ（３２５，３３５）を前記空きページプール（２４５，３３０，４２５）に割り当てることを行うように構成されている、
請求項９〜１１の何れかの装置。
【請求項１３】
前記処理ユニット（２３１）は、前記第１物理ページ（３３５）を前記仮想アドレスにマッピングすることに応じて、前記空きページプール（２４５，３３０，４２５）から前記第１物理ページ（３３５）を削除することを行うように構成されている、
請求項１２の装置。
【請求項１４】
前記処理ユニット（２３１）は、
前記空きページプール（２４５，３３０，４２５）内の物理ページ（３２５，３３５）数を判別することと、
前記物理ページ数が閾値未満であることに応じて、少なくとも１つの対応する仮想アドレスから少なくとも１つの物理ページをマッピング解除することと、
前記少なくとも１つのマッピング解除された物理ページを前記空きページプール（２４５，３３０，４２５）に追加することと、
を行うように構成されている、
請求項１３の装置。
【請求項１５】
前記第２メモリに記憶されている情報をキャッシュするように構成された少なくとも１つのキャッシュと、
前記少なくとも１つのキャッシュに関連する少なくとも１つのアドレス変換バッファ（２６０，２６１，２６２，２６４，４０５）であって、前記メモリアクセス要求を受信することは、前記少なくとも１つのアドレス変換バッファ（２６０，２６１，２６２，２６４，４０５）において前記仮想アドレスがエントリを欠いていることに応じて、前記メモリアクセス要求を受信することを含む、少なくとも１つのアドレス変換バッファと、を備える、
請求項９の装置。
【請求項１６】
前記第１メモリ及び前記第２メモリ内の物理アドレスへの仮想アドレスのマッピングを記憶するように構成されたページテーブル（２５０）であって、前記処理ユニット（２３１）は、前記第１物理ページ（３３５）への前記仮想アドレスのマッピングを示すために前記ページテーブル（２５０）を変更することを行うように構成されている、ページテーブルを備える、
請求項９の装置。
【請求項１７】
処理ユニット（２３１）と、
データセットを記憶するための第１メモリ（１１０）であって、前記処理ユニット（２３１）からのメモリアクセス要求に対する第１レイテンシを有する第１メモリと、
前記データセットのスパースサブセットを記憶するための第２メモリ（２１０，３０５，４１０）であって、前記処理ユニット（２３１）からのメモリアクセス要求に対する第２レイテンシを有し、前記第２レイテンシが前記第１レイテンシよりも短い、第２メモリと、を備え、
前記処理ユニット（２３１）は、
仮想アドレスを含むメモリアクセス要求を受信することと、
前記仮想アドレスが前記第２メモリ内の第２物理ページにマッピングされていないことに応じて、前記第２メモリの空きページプール（２４５，３３０，４２５）内の第１物理ページ（３３５）を前記仮想アドレスにマッピングすることと、
前記仮想アドレスにマッピングされている前記第２物理ページへの前記メモリアクセス要求を許可することと、
を行うように構成されている、
装置。
【請求項１８】
前記メモリアクセス要求は、前記仮想アドレスへの書き込み要求であって、
前記処理ユニット（２３１）は、前記第１物理ページ（３３５）を既知の状態に初期化することを行うように構成されている、
請求項１７の装置。
【請求項１９】
前記処理ユニット（２３１）は、前記仮想アドレスに基づいて、前記第１物理ページ（３３５）に情報を書き込むことを行うように構成されている、
請求項１８の装置。
【請求項２０】
前記メモリアクセス要求は、前記仮想アドレスに記憶されている情報を読み出すための要求であって、
前記処理ユニット（２３１）は、
前記メモリアクセス要求に応じて読み出される情報を生成するためのプロセスを生成することと、
前記仮想アドレスに基づいて、前記生成された情報を前記第１物理ページ（３３５）に書き込むことと、
前記第１物理ページ（３３５）から前記生成された情報を読み出すことと、
を行うように構成されている、
請求項１７の装置。
【発明の詳細な説明】
【背景技術】
【０００１】
処理システムは、はるかに大規模な完全なデータセット（又は、それを表す）のサブセットであるスパースデータセットを操作する多くのアプリケーションを実装している。例えば、大きな空間でマッチから発生する煙の体積流量シミュレーションは、大きな空間内で煙が占める小さな体積を表すセルを含むスパースデータセットで表すことができる。スパースデータセット内のセルの数は、煙がマッチの近くの小さな領域から大きな空間に拡散し、その結果、拡大する体積が空間内を占めるにつれて増加する可能性がある。別の例では、大きな空間を通る光の伝播は、大きな空間内で照らされた体積を表すセルを含むスパースデータセットによって表される場合がある。さらに別の例では、グラフィックスレンダリングに使用されるテクスチャは、複数の詳細レベルを有するミップマップとして記憶されるか、その場で生成される。何れの場合も、テクスチャ情報は、現在のフレーム内のシーンの視聴者の位置を表す「カメラ」の視点から見えるシーン内のオブジェクトの表面にのみ適用される。したがって、テクスチャは、リモートメモリから生成又は取得され、表面のスパースサブセット、詳細レベル、又は、可視表面に適用されるテクスチャを定義する他の特性についてローカルメモリに記憶されるだけである。さらに別の例では、フライトシミュレータ又はマリンシミュレータ等の視覚化システムは、リモートメモリに記憶されたテクスチャの完全なセットのうちローカルに記憶されている部分である、大規模なメガスケール及びギガスケールのＰＲＴ（partially-resident textures）を含む地形表現を使用又は生成することができる。
【０００２】
添付図面を参照することによって、本開示は当業者により良く理解され、その多数の特徴及び利点が明らかになるであろう。異なる図面での同じ参照記号の使用は、類似又は同一のアイテムを示す。
【図面の簡単な説明】
【０００３】
【図１】いくつかの実施形態による、処理システムのブロック図である。
【図２】いくつかの実施形態による、処理システムの一部のブロック図である。
【図３】いくつかの実施形態による、ローカルメモリシステムのブロック図である。
【図４】いくつかの実施形態による、アドレス変換バッファと、ローカルメモリと、リモートメモリと、を含む処理システムの一部のブロック図である。
【図５】いくつかの実施形態による、空きページプールからの物理ページのオンデマンド割り当て後の図４に示す処理システムの一部のブロック図である。
【図６】いくつかの実施形態による、書き込みコマンドによって生成されたアドレス変換バッファのミスに応じて、空きページプールからの物理ページのオンデマンド割り当てを行う方法のフロー図である。
【図７】いくつかの実施形態による、読み出しコマンドによって生成されたアドレス変換バッファのミスに応じて、空きページプールからの物理ページのオンデマンド割り当てを行う方法のフロー図である。
【図８】いくつかの実施形態による、ローカルストア及び空きページプールの一部を実装するために使用される、物理ページを仮想メモリに割り当てる方法のフロー図である。
【図９】いくつかの実施形態による、ローカルストアから物理ページを回収し、それらを空きページプールに追加する方法のフロー図である。
【発明を実施するための形態】
【０００４】
仮想メモリシステムは、ローカルメモリを完全なデータセットに割り当てるのではなく、ローカルメモリ内のページ等の物理メモリ位置を、処理システムによって現在使用されているスパースデータセットに割り当てるために使用される。例えば、処理システム内の中央処理装置（ＣＰＵ）は、処理システム内のグラフィックス処理装置（ＧＰＵ）に実装された仮想メモリページテーブルを管理する。ＣＰＵは、ローカルメモリ内のページを、１つ以上の後続フレーム内のシーンをレンダリングするのに使用されると予想されるテクスチャデータを記憶するスパースデータセットに割り当てる。ＣＰＵは、ＧＰＵ上で実行されるアプリケーションによって使用される仮想メモリアドレスのサブセットを、ローカルメモリの割り当てられた物理ページにマッピングするように、仮想メモリページテーブルを構成する。キャッシュ階層は、ローカルメモリの最近アクセスされたページ又は頻繁にアクセスされたページをキャッシュするために使用することができる。次に、ＧＰＵ内の計算ユニットは、仮想メモリアドレスを含むメモリアクセス要求を使用して、スパースデータセットにアクセスすることができる。メモリアクセス要求は、キャッシュ階層及びローカルメモリに関連するアドレス変換キャッシュに送信されてもよい。アドレス変換キャッシュは、頻繁にアクセスされる仮想メモリアドレスから物理メモリアドレスへのマッピングを記憶する。ローカルメモリ（及び対応するキャッシュ）に記憶されたデータセットはスパースであるため、ＧＰＵ内の計算ユニットのいくつかの変形例は、ローカルメモリのページにマッピングされていない仮想メモリアドレスへのメモリアクセス要求を生成する。従来の処理システムでは、マッピングされていない仮想メモリアドレスへのメモリアクセス要求はページフォールトをもたらし、これは、通常、処理中に非常に長いレイテンシ割り込みを引き起こす。
【０００５】
従来の処理システムは、ページフォールトから回復するための様々な技術を実装している。例えば、フル仮想メモリサブシステムを実装するＣＰＵは、要求されたページが生成又はリモートメモリから取得されている間に、ページフォールトを生成したスレッドを停止させるために、「フォールトアンドスイッチ（fault-and-switch）」技術を使用する。また、ローカルメモリは、例えば、以前に記憶されたメモリページを再配置して、要求されたページのためのスペースを提供することによって、要求されたページを記憶するように構成される必要がある。スレッドを停止させると、そのスレッドをプリエンプトして、別のスレッドをプロセッサコア上で実行可能にすることもできる。したがって、フォールトアンドスイッチ技術は、大量の並列ワークロードや、例えばＧＰＵに実装されているグラフィックス処理パイプライン等の非常に深い固定機能パイプラインにおいて、停止したスレッドに対して許容できない程長い遅延をもたらすことがよくある。ページフォールトを回避するために、いくつかの従来の処理システムは、ワークロードによってアクセスされるかどうかに関わらず大量のデータを推測的に生成又は取得することを必要とする保守的な仮定を使用して、スパースデータセットを、事前（例えば、スパースデータセットを使用してレンダリングされるフレームの前の１つ以上のフレーム）にローカルメモリに投入する。通常、事前投入されたスパースデータセットの多くは、ワークロードによって使用されることはない。追加のシステムリソースは、必要なデータの誤った予測を処理するために生成されたフォールバックと、要求されたデータが比較的長いレイテンシの後に使用可能になった場合に発生する「ポップ」を隠すために使用されるブレンドと、によって消費される。さらに、ローカルメモリに記憶されているスパースデータセットの変更に応じて仮想ページが物理ページに再マッピングされると、長いレイテンシが発生する。
【０００６】
データセットの一部を、リモートメモリから、グラフィックス処理装置（ＧＰＵ）等の処理装置によって実装されたローカルメモリに移動することによって生じる長いレイテンシは、ローカルメモリ内の１つ以上の物理ページを、中央処理装置（ＣＰＵ）等の別の処理装置で実行されているアプリケーションに関連する空きページプールに割り当てることによって減らすことができる。空きページプール内の物理ページは、そうでなければページフォールトが発生するであろうメモリアクセス要求に応じて、仮想アドレスにマッピングされる。例えば、空きページプール内の物理ページは、仮想アドレスにデータを書き込むのに使用される書き込みコマンド内の仮想アドレスにマッピングされる。物理ページは、（例えば、物理ページ内のデータが既知の状態になるように全て０に）初期化され、書き込みコマンドは、仮想アドレスにマッピングされている物理ページにデータを書き込む。別の例では、読み出しコマンドが、ローカルメモリ内の物理アドレスにマッピングされていない仮想アドレスでテクスチャデータを読み出そうとすると、ＧＰＵは、要求されたテクスチャデータをローカルで計算するためのプロセスを生成し、要求されたテクスチャデータを、読み出しコマンド内の仮想アドレスにマッピングされている空きページプールの物理ページに書き込む。例えば、物理ページがどれ程の頻度で利用されているかを示すアクセスビット又はダーティビット等の情報に基づいて、物理ページをマッピング解除して空きページプールに戻すことができる。空きページプール内の物理ページの仮想アドレスへのマッピング、物理ページの初期化、又は、物理ページのマッピング解除及び物理ページを空きページプールに戻すことは、ローカルメモリ内の物理ページの割り当てまたは割り当て解除を、ＣＰＵによって実装されたアプリケーション（又は、関連するカーネルモードドライバ）に要求する代わりに、ＧＰＵ内のハードウェア、ファームウェア又はソフトウェアによって実行される。
【０００７】
図１は、いくつかの実施形態による、処理システム１００のブロック図である。処理システム１００は、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）１１０等の１つ以上の外部メモリに接続されている処理装置１０５を含む。処理装置１０５は、ＣＰＵ１１１〜１１３及びＧＰＵ１１４等の複数の処理ユニット１１１，１１２，１１３，１１４（まとめて「処理ユニット１１１〜１１４」と呼ぶ）を含む。例えば、処理装置１０５は、基板上に形成されたＡＰＵ（accelerated processing unit）又はＡＰＤ（accelerated processing device）等のシステムオンチップ（ＳＯＣ）として製造することができる。処理ユニット１１１〜１１４の各々は、異なる命令を同時に処理する複数のプロセッサコア又は計算ユニットを含む。また、処理ユニット１１１〜１１４は、キャッシュ、算術論理ユニット（arithmetic logic units）、浮動小数点ユニット、分岐予測ロジック、メモリ又はバスインタフェース等のように、プロセッサコアによって共有される１つ以上のリソースを含む。
【０００８】
処理装置１０５は、メモリインタフェース１２０を介して処理装置１０５とＤＲＡＭ１１０との間のデータのフローを調整するために使用されるメモリコントローラ（ＭＣ）１１５を含む。メモリコントローラ１１５は、ＤＲＡＭ１１０からの情報の読み出し及びＤＲＡＭ１１０への情報の書き込みを制御するために使用されるロジックを含む。処理ユニット１１１〜１１４は、バス１２５を使用して、相互に通信し、メモリコントローラ１１５と通信し、又は、処理システム１００内の他のエンティティと通信する。例えば、処理ユニット１１１〜１１４は、信号をバス１２５上にアサートし、対応する処理ユニット１１１〜１１４に宛てられたバス１２５からの信号を受信するための物理層インタフェース又はバスインタフェースを含むことができる。処理装置１０５のいくつかの実施形態は、処理装置１０５内のエンティティ間の通信を容易にするためのノースブリッジ又はサウスブリッジ等の１つ以上のインタフェースブロック又はブリッジも含む。
【０００９】
処理装置１０５は、オペレーティングシステム（ＯＳ）１３０を実装する。図１には、ＯＳ１３０の単一のインスタンスが示されているが、処理装置１０５のいくつかの実施形態では、オペレーティングシステム又は１つ以上のアプリケーションの複数のインスタンス化を実装する。例えば、処理ユニット１１１〜１１４上で実行されている仮想マシンは、オペレーティングシステム又は１つ以上のアプリケーションの個別のインスタンスを実行することができる。また、処理装置１０５は、処理装置１０５及びカーネルモードドライバ（ＫＭＤ）１４０においてワークロードを生成する１つ以上のアプリケーション１３５を実装する。カーネルモードドライバ１４０のいくつかの実施形態では、物理ページを仮想ページにマッピングすることができる。しかし、処理装置１０５（又は、処理ユニット１１１〜１１４のうち１つの処理ユニット）をカーネルモードに移行させることに関連するオーバーヘッドは、所定の時間間隔で実行することができる物理−仮想マッピングの数を制限する。これは、通常、例えばグラフィックス処理においてレンダリングされたフレーム毎に１回、物理−仮想マッピングのリストを実行することによって、カーネルモードドライバ１４０にバッチモードで物理−仮想マッピングを実行させる。
【００１０】
処理装置１０５のいくつかの実施形態では、画面１４５上に表示する画像を生成するために、三次元モデルによって表されるシーンをレンダリングするためのグラフィックス処理を実行する。例えば、ＤＲＡＭ１１０は、三次元モデルを表す情報を含むデータセットを記憶する。しかし、場合によっては、例えば、バス１２５又はメモリインタフェース１２０を介してＧＰＵ１１４とＤＲＡＭ１１０との間で情報を伝達するためのレイテンシは、ＧＰＵ１１４が、滑らかな視聴体験をユーザに提供するために十分に高いレートで画像をレンダリングするには長過ぎる。
【００１１】
ローカルメモリシステム１５０は、インタフェース１２０又はバス１２５を含まない相互接続によってＧＰＵ１１４に接続されている。したがって、ローカルメモリシステム１５０に記憶されている情報にアクセスするためのレイテンシは、ＤＲＡＭ１１０に記憶されている情報にアクセスするためのレイテンシよりも短い。例えば、ＧＰＵ１１４とローカルメモリシステム１５０との間のレイテンシは、ＧＰＵ１１４が、滑らかな視聴体験をユーザに提供するために十分に高いレートで画像をレンダリングすることができる程度に十分に短い。ローカルメモリシステム１５０には、ＤＲＡＭ１１０に記憶されているデータセットのサブセットが記憶されている。例えば、ローカルメモリシステム１５０は、ＤＲＡＭ１１０に記憶されたデータセットのサブセットを含む（又は、それを表す）スパースデータセットを記憶することができる。本明細書で説明するように、ローカルメモリシステム１５０に記憶されているサブセットがＤＲＡＭ１１０から取得又はコピーされ、又は、サブセット内の情報がメモリアクセス要求に応じて生成される。ＧＰＵ１１４は、画面１４５上に表示するための画像を生成するために、ローカルメモリシステム１５０に記憶されている情報を使用してシーンの一部をレンダリングする。ＧＰＵ１１４は、レンダリングされた画像を表す情報を、バス１２５を介して画面１４５に送信する。図１には示されていないが、いくつかの変形例では、ローカルメモリシステム１５０又は他のローカルメモリシステム（図示省略）は、処理ユニット１１１〜１１４の何れかに接続することができ、ローカルメモリシステムは、ＤＲＡＭ１１０に記憶されたデータセットのサブセットを記憶するために使用することができる。
【００１２】
ローカルメモリシステム１５０は、ＧＰＵ１１４からのメモリアクセス要求が仮想アドレスを参照するように仮想アドレッシングを実装し、仮想アドレスは、ローカルメモリシステム１５０又はＤＲＡＭ１１０内の物理ページの物理アドレスに変換される。仮想アドレスを含むメモリアクセス要求は、ＧＰＵ１１４によってローカルメモリシステム１５０に提供される。ローカルメモリシステム１５０は、仮想アドレスがローカルメモリシステム１５０内の物理ページ又はＤＲＡＭ１１０内の物理ページの何れにマッピングされているかを判別する。仮想アドレスがローカルメモリシステム１５０内の物理ページにマッピングされている場合、ローカルメモリシステム１５０は、例えば、仮想アドレスに基づいて物理ページから情報を読み出し又は情報を物理ページに書き込むために、物理ページへのアクセスを許可する。しかし、仮想アドレスがローカルメモリシステム１５０内の物理ページにマッピングされていない場合、ローカルメモリシステム１５０は、ローカルメモリシステム１５０に実装された空きページプールからの物理ページをメモリアクセス要求内の仮想アドレスにマッピングし、当該仮想アドレスにマッピングされた物理ページへのアクセスを許可する。したがって、ローカルメモリシステム１５０は、ＧＰＵ１１４がローカルメモリシステム１５０内の物理ページにマッピングされていない仮想アドレスにアクセスしようとした場合に通常発生するであろうページフォールトの発生を回避する。
【００１３】
図２は、いくつかの実施形態による、処理システムの一部２００のブロック図である。一部２００は、図１に示す処理システム１００のいくつかの実施形態において実装される。一部２００は、ローカルメモリシステム２１０に接続されているＧＰＵ２０５を含む。ＧＰＵ２０５は、図１に示すＣＰＵ１１１〜１１３の何れか等の処理ユニットに実装される１つ以上のアプリケーション２１５及びカーネルモードドライバ（ＫＭＤ）２２０とシグナリングを交換する。ＧＰＵ２０５は、汎用コンピューティング又は他の機能のためにグラフィックスパイプラインの一部として構成される１つ以上のグラフィックスエンジン２２５を実装する。例えば、ＧＰＵ２０５内のジオメトリエンジン２３０は、高次プリミティブを処理するジオメトリフロントエンドと、高次プリミティブを受信し、入力された高次プリミティブから低次プリミティブを生成するテッセレータと、低次プリミティブを処理するジオメトリバックエンドと、を実装する。ＧＰＵ２０５内の計算ユニット２３１は、汎用計算操作を実行するように構成されている。ＧＰＵ２０５内のレンダリングエンジン２３２は、ジオメトリエンジン２３０によって提供されたプリミティブに基づいて画像をレンダリングするように構成されている。例えば、レンダリングエンジン２３２は、例えばプリミティブバッファ、頂点バッファ及びインデックスバッファを介して、ジオメトリエンジン２３０によってオブジェクト空間内に生成されたプリミティブの頂点を受信することができる。次に、レンダリングエンジン２３２は、入力されたジオメトリプリミティブからフラグメント（又は、ピクセル）を生成し、適用可能なテクスチャを使用してフラグメント（又は、ピクセル）をシェーディングするために、プリミティブのラスタ化を実行することができる。
【００１４】
ローカルメモリシステム２１０は、図１に示すＤＲＡＭ１１０等のリモートメモリに記憶されている完全なデータセットのサブセットを記憶するために使用される。サブセットは、１つ以上のフレーム等のように、後続の時間間隔中にＧＰＵ２０５によってアクセスされる可能性が高い物理ページを含む。例えば、いくつかの変形例では、アプリケーション２１５は、三次元モデルによって表されるシーンの画像をレンダリングするためにＧＰＵ２０５を利用するビデオゲームである。ローカルストア２４０は、物理ページにマッピングされている仮想アドレスを使用して物理ページにアクセスすることができるアプリケーション２１５に割り当てられている物理ページを含む。また、ローカルメモリシステム２１０は、現在アプリケーションに割り当てられていない１つ以上の物理ページで構成された空きページプール２４５を含む。空きページプール２４５内の物理ページは、物理ページを参照するのに使用される第１仮想アドレスにマッピングしてから、空きページプール２４５に入れることができる。空きページプール２４５内の物理ページは、ローカルメモリシステム２１０内の物理ページにマッピングされていない第２仮想アドレスへのメモリアクセス要求をＧＰＵ２０５が生成したことに応じて、第２仮想アドレスにマッピングされる。例えば、ローカルメモリシステム２１０に記憶されている完全なデータセットのサブセットは、スパースサブセットとすることができ、この場合、メモリアクセス要求によって、ローカルメモリシステム２１０に現在記憶されていないサブセットの一部を要求することができる。空きページプール２４５からローカルストア２４０に物理ページを追加し、その物理アドレスをメモリアクセス要求内の第２仮想アドレスにマッピングすることによって、本明細書で説明するように、ページフォールトを引き起こすことなくメモリアクセス要求を許可することができる。
【００１５】
ページテーブル２５０は、ＧＰＵ２０５に含まれており、ローカルメモリシステム２１０又は図１に示すＤＲＡＭ１１０等のリモートメモリ内の物理ページの物理アドレスへの仮想アドレスのマッピングを記憶するために使用される。空きページテーブル２５５は、空きページプール２４５に含まれる物理ページを示す情報を記憶するために使用される。空きページテーブル２５５のいくつかの実施形態は、空きページプール２４５内のページ数を示すレジスタを含む。
【００１６】
また、ローカルメモリシステム２１０のいくつかの実施形態は、データ又はＧＰＵ２０５に対する命令をキャッシュするためのキャッシュ含むキャッシュ階層（図２には示されていない）を実装する。対応するアドレス変換バッファ２６０，２６１，２６２，２６３，２６４（本明細書ではまとめて「アドレス変換バッファ２６０〜２６４」と呼ぶ）の対応するセットは、例えばＧＰＵ２０５、グラフィックスエンジン２２５、ジオメトリエンジン２３０、計算ユニット２３１又はレンダリングエンジン２３２等の対応するエンティティによって頻繁に又は最近アクセスされた物理−仮想アドレスのマッピングを含む。例えば、アドレス変換バッファ２６０は、ジオメトリエンジン２３０によって頻繁に又は最近アクセスされた物理−仮想アドレスのマッピングを記憶し、アドレス変換バッファ２６１は、計算ユニット２３１によって頻繁に又は最近アクセスされた物理−仮想アドレスのマッピングを記憶し、アドレス変換バッファ２６２は、レンダリングエンジン２３２によって頻繁に又は最近アクセスされた物理−仮想アドレスのマッピングを記憶する。上位アドレス変換バッファ（ＶＭＬ１）２６３は、グラフィックスエンジン２２５によって頻繁に又は最近アクセスされた物理−仮想アドレスのマッピングを記憶し、最上位アドレス変換バッファ（ＶＭＬ２）２６４は、ＧＰＵ２０５によって頻繁に又は最近アクセスされた物理−仮想アドレスのマッピングを記憶する。
【００１７】
コマンドプロセッサ２６５は、アプリケーション２１５からコマンドを受信し、ＧＰＵ２０５のリソースを使用してコマンドを実行する。コマンドは、描画コマンド及びコンピューティングディスパッチコマンドを含み、これらは、コマンドプロセッサ２６５にメモリアクセス要求を生成させる。例えば、コマンドプロセッサ２６５は、書き込みコマンドに含まれる仮想アドレスによって示されるメモリ位置に情報を書き込むようにＧＰＵ２０５に命令するコマンドをアプリケーション２１５から受信することができる。別の例では、コマンドプロセッサ２６５は、読み出しコマンドに含まれる仮想アドレスによって示されるメモリ位置から情報を読み出すようにＧＰＵ２０５に命令するコマンドをアプリケーション２１５から受信することができる。また、アプリケーション２１５は、空きページプール２４５内の物理ページを追加又は監視するだけでなく、ローカルストア２４０内にメモリを割り当てるためにカーネルモードドライバ２２０との動作を調整するように構成されている。
【００１８】
コマンドが実行されると、グラフィックスエンジン２２５は、アドレス変換バッファ２６０〜２６４を使用して仮想アドレスを物理アドレスに変換する。しかし、場合によっては、アドレス変換バッファ２６０〜２６４は仮想アドレスに対するマッピングを含まず、この場合、仮想アドレスへのメモリアクセス要求は、アドレス変換バッファ２６０〜２６４でミスする。したがって、アドレス変換バッファ２６４は、空きページプール２４５からローカルストア２４０に物理ページを追加し、追加された物理ページを対応する仮想アドレスにマッピングするように構成されている。例えば、アドレス変換バッファ２６４は、動的に割り当てられたサーフェス（例えば、ジオメトリエンジン２３０によって生成されたサーフェス）が、物理ページに未だマッピングされていない仮想メモリのページに到達すると、空きページプール２４５から空き物理ページをプルする。次に、アドレス変換バッファ２６４は、新たな仮想−物理マッピングでページテーブル２５０を更新し、物理ページを示す情報を空きページテーブル２５５から削除する。アドレス変換バッファ２６４のいくつかの実施形態は、空きページプール２４５をシリアル化及び管理し、空きページプール２４５からの物理ページを仮想アドレスにマッピングするのと同時にページテーブル２５０を更新するように構成されている。また、ページテーブル２５０のいくつかの実施形態は、割り当てられた物理ページの各々に関連するアクセスビット及びダーティビットを記憶する。アプリケーション２１５又はカーネルモードドライバ２２０は、アクセスビット又はダーティビットの値を使用して、例えば、物理−仮想アドレスのマッピングを解除し、これに応じて、ページテーブル２５０及び空きページテーブル２５５を更新することによって、回収して空きページプール２４５に追加するのに利用可能な物理ページを選択することができる。
【００１９】
図３は、いくつかの実施形態による、ローカルメモリシステム３００のブロック図である。ローカルメモリシステム３００は、図１に示すローカルメモリシステム１５０又は図２に示すローカルメモリシステム２１０のいくつかの実施形態で実装される。ローカルメモリシステム３００は、上位のＬ２キャッシュ３１０及び下位のＬ１キャッシュ３１５，３１６，３１７（まとめてＬ１キャッシュ３１５〜３１７と呼ばれる）を含むキャッシュ階層に接続されたローカルメモリ３０５を含む。Ｌ２キャッシュ３１０のいくつかの実施形態は、Ｌ１キャッシュ３１５〜３１７内のエントリがＬ２キャッシュ３１０内に記憶されるように、Ｌ１キャッシュ３１５〜３１７を含む。ローカルメモリ３０５、Ｌ２キャッシュ３１０及びＬ１キャッシュ３１５〜３１７内の物理ページは、物理ページの物理アドレスにマッピングされる仮想アドレスを使用してアクセス可能である。したがって、ローカルメモリ３０５、Ｌ２キャッシュ３１０及びＬ１キャッシュ３１５〜３１７は、対応するローカルメモリ３０５、Ｌ２キャッシュ３１０又はＬ１キャッシュ３１５〜３１７内の物理ページの物理アドレスへの仮想アドレスのマッピングを含む、図２に示すアドレス変換バッファ２６０〜２６４等のアドレス変換バッファに関連付けられている。
【００２０】
ローカルメモリ３０５は、図２に示すアプリケーション２１５等のアプリケーションに割り当てられる物理ページ３２５のローカルストア３２０を含む。物理ページ３２５のいくつかのコピーは、Ｌ２キャッシュ３１０に記憶され、これらの各々の部分はＬ１キャッシュ３１５〜３１７に記憶される。また、ローカルメモリ３０５は、仮想アドレスにマッピングされていない物理ページ３３５を含む空きページプール３３０を含み、したがって、例えば、ローカルストア３２０内の物理ページにマッピングされていない仮想アドレスへのメモリアクセス要求に応じて、オンデマンド割り当てに利用可能である。１つの物理ページ３３５のオンデマンド割り当ては、矢印３４０で示すように、物理ページを仮想アドレスにマッピングし、マッピングされた物理ページをローカルストア３２０に追加する。したがって、新たにマッピングされた物理ページは、図１に示すＧＰＵ１１４又は図２に示すＧＰＵ２０５等の処理システム内のエンティティによってアクセス可能である（例えば、物理ページを読み書きすることができる）。
【００２１】
また、マッピングされた物理ページは、矢印３４５で示すように、ローカルストア３２０から回収され、空きページプール３３０に戻すことができる。例えば、アプリケーション又はカーネルモードドライバ（例えば、図１に示すアプリケーション１３５及びカーネルモードドライバ１４０、又は、図２に示すアプリケーション２１５若しくはカーネルモードドライバ２２０等）は、情報（例えば、マッピングされた物理ページがアクセスされた頻度を示すアクセスビット、又は、キャッシュ若しくはメモリを維持するために、マッピングされた物理ページに記憶された情報が他のメモリ若しくは処理システム内のキャッシュに伝搬されたかどうかを示すダーティビット等）に基づいて、物理ページを回収するかどうかを決定する。アクセス頻度が低い又はダーティビットが少ない物理ページは、アクセス頻度が高い又はダーティビットが多い物理ページと比較して優先的に回収され得る。回収された物理ページは、以前の仮想アドレスからマッピング解除され、その後のオンデマンド割り当てに使用可能になる。
【００２２】
図４は、いくつかの実施形態による、アドレス変換バッファ４０５と、ローカルメモリ４１０と、リモートメモリ４１５と、を含む処理システムの一部４００のブロック図である。一部４００は、図１に示す処理システム１００のいくつかの実施形態で実装される。ローカルメモリ４１０及びリモートメモリ４１５の各々は、図１に示すローカルメモリシステム１５０及びＤＲＡＭ１１０のいくつかの実施形態で実装される。アドレス変換バッファ４０５は、図２に示すアドレス変換バッファ２６０〜２６４のいくつかの実施形態で実装される。
【００２３】
ローカルメモリ４１０は、ＰＡＤＤＲ＿１、ＰＡＤＤＲ＿２、ＰＡＤＤＲ＿３及びＰＡＤＤＲ＿Ｍ等の物理アドレスによってアドレス指定される物理ページのローカルストア４２０を含む。ローカルメモリ４１０は、ＰＡＤＤＲ＿Ｘ、ＰＡＤＤＲ＿Ｙ及びＰＡＤＤＲ＿Ｚ等の物理アドレスによってアドレス指定される物理ページの空きページプール４２５も含む。ローカルストア４２０及び空きページプール４２５内の物理ページ及び対応する物理アドレスは、互いに隣接していてもよいし、していなくてもよい。明確にするために図４には示していないが、リモートメモリ４１５は、対応する物理アドレスによってアドレス指定される物理ページを含む。
【００２４】
アドレス変換バッファ４０５は、ローカルメモリ４１０及びリモートメモリ４１５内の物理アドレスへの仮想アドレスのマッピングを示す。アドレス変換バッファ４０５は、仮想アドレスのセット（ＶＡＤＤＲ＿１、ＶＡＤＤＲ＿２、ＶＡＤＤＲ＿３及びＶＡＤＤＲ＿Ｎ）と、仮想アドレスにマッピングされる物理アドレスを示す対応するポインタと、を含む。例えば、アドレス変換バッファ４０５は、仮想アドレスＶＡＤＤＲ＿１がローカルストア４２０内の物理アドレスＰＡＤＤＲ＿１にマッピングされ、仮想アドレスＶＡＤＤＲ＿３がローカルストア４２０内の物理アドレスＰＡＤＤＲ＿Ｍにマッピングされ、仮想アドレスＶＡＤＤＲ＿Ｎがローカルストア４２０内の物理アドレスＰＡＤＤＲ＿３にマッピングされることを示す。また、アドレス変換バッファ４０５は、仮想アドレスＶＡＤＤＲ＿２がリモートメモリ４１５内の物理アドレスにマッピングされていることを示す。いくつかの変形例では、アドレス変換バッファ４０５内のいくつかの仮想アドレスは、物理アドレスにマッピングされていない。
【００２５】
仮想アドレスＶＡＤＤＲ＿１、ＶＡＤＤＲ＿２及びＶＡＤＤＲ＿Ｎを含むメモリアクセス要求は、これらの仮想アドレスがローカルメモリ４１０内の物理アドレスにマッピングされるので、アドレス変換バッファ４０５でヒットする。仮想アドレスＶＡＤＤＲ＿２を含むメモリアクセス要求は、この仮想アドレスがリモートメモリ４１５内の物理アドレスにマッピングされるので、アドレス変換バッファ４０５でミスする。アドレス変換バッファ４０５のミスは、従来の処理システムではページフォールトを引き起こす。しかし、一部４００を含む処理システムは、空きページプール４２５から物理ページを割り当て、ページフォールトを引き起こすことなく、当該物理ページをアドレス変換バッファ４０５に示された仮想アドレスにマッピングするように構成されている。対応する仮想アドレスが何れの物理アドレスにもマッピングされていないために発生するアドレス変換バッファ４０５のミスに応じて、空きページプール４２５からの物理ページをローカルストア４２０に追加することができる。
【００２６】
図５は、いくつかの実施形態による、空きページプールからの物理ページのオンデマンド割り当て後の図４に示す処理システムの一部４００のブロック図である。仮想アドレスＶＡＤＤＲ＿２でのアドレス変換バッファ４０５のミスに応じて、物理アドレスＰＡＤＤＲ＿Ｘによって示される物理ページが、空きページプール４２５からプルされ、ポインタ５００で示すように仮想アドレスＶＡＤＤＲ＿２にマッピングされる。物理アドレスＰＡＤＤＲ＿Ｘによって示される物理ページは、ローカルストア４２０の一部となり、空きページプール４２５内の利用可能な物理ページの１つではなくなる。したがって、物理アドレスＰＡＤＤＲ＿Ｘによって示される物理ページは、ＣＰＵ等の別のプロセッサによる相互作用又は介入無しに、及び、リモートメモリ４１５から物理ページを取得するために従来必要としていたページフォールトを引き起すことなく、ローカルメモリ４１０に接続されているＧＰＵへのアクセスに利用可能になる。
【００２７】
図６は、いくつかの実施形態による、書き込みコマンドによって生成されたアドレス変換バッファのミスに応じて、空きページプールからの物理ページのオンデマンド割り当てを行う方法６００のフロー図である。方法６００は、図２に示すアドレス変換バッファ２６４のいくつかの実施形態等のアドレス変換バッファで実施される。
【００２８】
ブロック６１０において、書き込みコマンドによって書き込まれる場所を示す仮想アドレスを含む書き込みコマンドが受信される。判別ブロック６１５において、アドレス変換バッファは、仮想アドレスがローカルメモリ内の物理ページの物理アドレスにマッピングされているかどうかを判別する。マッピングされている場合、ブロック６２０において、アドレス変換バッファは、仮想アドレスを、ローカルメモリ内の物理ページを示す物理アドレスに変換する。次に、（ブロック６２５において）書き込みコマンドによって示される情報が、書き込みコマンド内の仮想アドレスに対応する物理アドレスによって示される物理ページに書き込まれる。仮想アドレスがローカルメモリ内の物理ページの物理アドレスにマッピングされていない場合、方法はブロック６３０に移行する。
【００２９】
ブロック６３０において、空きページプール内の物理ページの物理アドレスが仮想アドレスにマッピングされる。したがって、物理ページは、空きページプールから削除され、ローカルストアに追加される。いくつかの実施形態では、物理アドレスを仮想アドレスにマッピングすることは、物理ページの仮想アドレスへのマッピングを反映するために、ページテーブル、空きページテーブル及び他のアドレス変換バッファを更新することを含む。ブロック６３５において、物理ページは、全て０等の既知の状態に初期化される。ブロック６４０において、書き込みコマンドは、仮想アドレスに基づいて物理ページに情報を書き込む。いくつかの実施形態では、物理ページに書き込まれる情報は、メモリ又はキャッシュコヒーレンスプロトコルに基づいて他のメモリ又はキャッシュに伝播される。
【００３０】
書き込みコマンドに応じて空きページプールからの物理ページのオンデマンド割り当てを実施することにより、処理システムの速度及び効率を向上させる。例えば、物理シミュレーション又はゲーム等のアプリケーションは、物理ページがアプリケーションによって書き込まれているので、アプリケーションの実行中に書き込まれる必要がある物理ページを頻繁に決定する。物理ページのオンデマンド割り当てによって、将来書き込まれる可能性がある物理ページの数及びアドレスを推定するために、事前パス（pre-pass）を実行する必要がなくなる。また、このアプローチは、特定の時間間隔の間にアプリケーションによって書き込まれる可能性がある物理ページ数（通常、ローカルストアにロードされ仮想アドレスにマッピングされるが、アクセスされない多数の物理ページをもたらすことになる物理ページ数）を控えめに見積もる必要がなくなることによって、メモリを節約する。
【００３１】
図７は、いくつかの実施形態による、読み出しコマンドによって生成されたアドレス変換バッファのミスに応じて、空きページプールからの物理ページのオンデマンド割り当てを行う方法７００のフロー図である。方法７００は、図２に示すアドレス変換バッファ２６４のいくつかの実施形態等のアドレス変換バッファで実施される。
【００３２】
ブロック７１０において、読み出しコマンドによって読み出される場所を示す仮想アドレスを含む読み出しコマンドが受信される。判別ブロック７１５において、アドレス変換バッファは、仮想アドレスがローカルメモリ内の物理ページの物理アドレスにマッピングされているかどうかを判別する。マッピングされている場合、ブロック７２０において、アドレス変換バッファは、仮想アドレスを、ローカルメモリ内の物理ページを示す物理アドレスに変換する。次に、（ブロック７２５において）読み出しコマンド内の仮想アドレスによって示される物理ページが、読み出しコマンド内の仮想アドレスに対応する物理アドレスによって示される物理ページから読み出される。仮想アドレスがローカルメモリ内の物理ページの物理アドレスにマッピングされていない場合、方法はブロック７３０に移行する。
【００３３】
ブロック７３０において、新たなローカル計算プロセスが生成され、読み出されるデータが生成される。このプロセスのいくつかの実施形態は、読み出しコマンドを含む現在のプロセスと同時に又は並行して実行される。例えば、読み出しコマンドが、ＧＰＵによって実装される１つのグラフィックスエンジンによって実行されている場合、新たに生成されたプロセスは、ＧＰＵによって実装される別のグラフィックスエンジンによって実行される。
【００３４】
ブロック７３５において、空きページプール内の物理ページの物理アドレスが、読み出しコマンド内の仮想アドレスにマッピングされる。したがって、物理ページは、空きページプールから削除され、ローカルストアに追加される。いくつかの実施形態では、物理アドレスを仮想アドレスにマッピングすることは、物理ページの仮想アドレスへのマッピングを反映するために、ページテーブル、空きページテーブル及び他のアドレス変換バッファを更新することを含む。ブロック７４０において、生成されたプロセスは、計算されたデータを、仮想アドレスによって示される物理ページに書き込む。いくつかの変形例では、図１に示すアプリケーション１３５又は図２に示すアプリケーション２１５等のアプリケーションは、計算されたデータを物理ページに書き込むのに使用されるプロセスを提供する。ブロック７４５において、読み出しコマンドは、仮想アドレスに基づいて物理ページから計算された情報を読み出す。いくつかの実施形態では、生成されたプロセスによって物理ページに書き込まれる（及び、読み出しコマンドによって物理ページから読み出される）情報は、メモリ又はキャッシュコヒーレンスプロトコルに基づいて他のメモリ又はキャッシュに伝播される。
【００３５】
読み出しコマンドに応じて（例えば、要求された情報を、空きページプールから物理ページプールに書き込むための並行プロセスを生成することによって）、空きページプールからの物理ページのオンデマンド割り当てを実施することによって、処理システムの速度及び効率を向上させる。例えば、ＧＰＵによって生成されたスパーステクスチャデータを読み出すことを必要とするレンダリングを実行しているＧＰＵの場合、ＧＰＵによってレンダリングされたサーフェスに対応する物理ページのみが生成され、これにより、事前に生成する必要がある物理ページを控えめに見積もる必要がなくなることによって、消費されるメモリを削減する。また、オンデマンドで生成され、仮想アドレスにマッピングされる物理ページは、図１に示すＣＰＵ１１１〜１１３等の１つ以上のＣＰＵとの相互作用又は介入を必要としない。代わりに、ＧＰＵは、マッピングされていない仮想アドレスに対して読み出しコマンドを実行すると、１つ以上のアドレス変換バッファから「ミス」応答を受信する。ミス応答は、データを生成し、そのデータを新たなページに書き戻すための計算を生成するために使用され、その新たなページは、ＣＰＵの相互作用又は介入無しに直ちに読み出しに利用可能である。
【００３６】
図８は、いくつかの実施形態による、ローカルストア及び空きページプールの一部を実装するために使用される仮想メモリに物理ページを割り当てる方法８００のフロー図である。方法８００は、図１に示す処理システム１００及び図２に示す処理システムの一部２００のいくつかの実施形態で実施される。いくつかの実施形態では、物理ページは、図１に示すアプリケーション１３５及びカーネルモードドライバ１４０又は図２に示すアプリケーション２１５及びカーネルモードドライバ２２０等のアプリケーション又はカーネルモードドライバによって割り当てられる。
【００３７】
ブロック８０５において、アプリケーションは、アプリケーションに関連する仮想メモリを用いた物理ページの割り当てを要求する。カーネルモードドライバは、要求を受信し、物理ページを仮想メモリに割り当てる。例えば、アプリケーションは、物理メモリにマッピングされている仮想メモリの割り当てを要求することによって、物理メモリを割り当てることができる。したがって、仮想メモリに割り当てられている物理ページは、対応する範囲の（第１）仮想アドレスを使用してアクセスすることができる。ブロック８１０において、アプリケーション又はカーネルモードドライバは、第１仮想アドレスを使用してローカルストア内の物理ページを初期化する。いくつかの変形例では、アプリケーション又はカーネルモードドライバは、例えば、物理ページを全て０に初期化することによって、物理ページを既知の状態に初期化する。物理ページを既知の状態に初期化することによって、ページの残りの部分が既知の値に初期化されるので、物理ページが空きページプールから動的に割り当てられた後、アプリケーションは、物理ページの小さなサブセットにのみ書き込みを行うことができる。
【００３８】
ブロック８１５において、アプリケーションは、仮想メモリのサブセットへの仮想アドレスの第２セットの割り当てを要求する。方法８００のこの時点では、仮想アドレスの第２セットは、これらにマッピングされた物理メモリを有していない。したがって、アプリケーションは、第２セット内の第２仮想アドレスを使用して物理ページに直接アクセスすることができない。
【００３９】
ブロック８２０において、アプリケーションは、カーネルモードドライバがアプリケーションの空きページプールに物理メモリを追加することを要求する。アプリケーションには、未だ物理メモリにマッピングされていない仮想アドレスの第２セットしか割り当てられていないので、アプリケーションは、ブロック８０５で割り当てられた第１仮想アドレス範囲内の第１仮想アドレスを使用して、空きページプールに追加される物理ページを示す。カーネルモードドライバは、第１仮想アドレスを物理ページの物理アドレスに変換して、アプリケーションの空きページプールに追加する。物理ページが空きページプールに追加されると、これらは、仮想アドレスの第２セット内の対応する第２仮想アドレスにマッピングされる。いくつかの実施形態では、空きページプールに最初に割り当てられる物理ページの数は予め決定されており、その数は、空きページプールへの物理ページの以前の割り当ての分析に基づいて決定される。本明細書で説明するように、物理ページは、読み出し又は書き込みミスに応じて、空きページプールからローカルストアにプルすることができる。空きページプールからローカルストアへ物理ページをプルすることは、物理ページの仮想アドレスを、空きページプールを参照する第２仮想アドレスからローカルストアを参照する新たな仮想アドレスに変更することによって行われる。したがって、空きページプール内で利用可能な実際の物理ページ数は、本明細書で説明するように、物理ページがローカルストアに追加されるか、ローカルストアから回収されるにつれて変動する。
【００４０】
図９は、いくつかの実施形態による、ローカルストアから物理ページを回収し、これらを空きページプールに追加する方法９００のフロー図である。方法９００は、図１に示すアプリケーション１３５、図１に示すカーネルモードドライバ１４０、図２に示すアプリケーション２１５、又は、図２に示すカーネルモードドライバ２２０のいくつかの実施形態で実施される。いくつかの実施形態では、アプリケーション及びカーネルモードドライバは、方法９００を実施するために動作を調整することができる。
【００４１】
ブロック９０５において、アプリケーション（又は、カーネルモードドライバ）は、空きページプール内にあるいくつかの物理ページを示す情報にアクセスする。例えば、処理システムは、空きページプールへの物理ページの追加、空きページプールへの物理ページの割り当て、又は、空きページプール用の物理ページの回収に応じてインクリメントされる１つ以上のレジスタを維持することができる。空きページプールから物理ページをプルし、これらを仮想アドレスにマッピングし、マッピングした物理ページをローカルストアに追加することに応じて、レジスタがデクリメントされる。
【００４２】
判別ブロック９１０において、アプリケーション（又は、カーネルモードドライバ）は、空きページプール内の物理ページ数を閾値と比較する。物理ページ数が閾値よりも大きい場合、十分な数の物理ページが空きページプールで使用可能であることを示しており、アプリケーション（又は、カーネルモードドライバ）は、（ブロック９１５において）物理ページへの仮想アドレスの現在のマッピングを維持し、空きページプールの物理ページを回収しない。物理ページ数が閾値以下の場合、方法はブロック９２０に移行する。
【００４３】
ブロック９２０において、アプリケーション（又は、カーネルモードドライバ）は、ローカルメモリ内のローカルストアに含まれる１つ以上の物理ページの仮想アドレスをマッピング解除する。本明細書で説明するように、アプリケーション（又は、カーネルモードドライバ）のいくつかの実施形態は、物理ページに含まれるアクセスビット又はダーティビットに基づいて、マッピング解除のためにローカルストア内の物理ページを選択する。ブロック９３０において、アプリケーション（又は、カーネルモードドライバ）は、マッピング解除された物理ページがオンデマンド割り当てに利用可能になるように、マッピング解除された物理ページを空きページプールに追加する。
【００４４】
物理ページは、いつでも回収して空きページプールに追加することができる。空きページプールから物理ページをプルしたり、空きページプールに追加したりしても、割り当てられたメモリや仮想アドレスは変更されず、空きページリスト内にある物理ページが変更されるだけである。いくつかの変形例では、現在マッピング解除されており、動的割り当てを求めるフラグが立てられている仮想アドレスのみが、ハードウェアによって空きページプール内のページにマッピングされる。アプリケーションは、元の直接仮想アドレス等の仮想アドレスシノニムを使用して空きページプール内のページにアクセスすべきではなく、そうしない場合、一貫性のない結果が生じる可能性がある。また、カーネルモードドライバは、空きページリストからページを変更又は削除する前に、全ての潜在的な動的割り当てが中断されるまで待機する必要がある。
【００４５】
いくつかの実施形態では、上記の技術のいくつかの態様は、ソフトウェアを実行する処理システムの１つ以上のプロセッサによって実装されてもよい。ソフトウェアは、非一時的なコンピュータ可読記憶媒体に記憶され、又は、非一時的なコンピュータ可読記憶媒体上で有形に具現化された実行可能命令の１つ以上のセットを含む。ソフトウェアは、１つ以上のプロセッサによって実行されると、上記の技術の１つ以上の態様を実行するように１つ以上のプロセッサを操作する命令及び特定のデータを含むことができる。非一時的なコンピュータ可読記憶媒体は、例えば、磁気若しくは光ディスク記憶デバイス、例えばフラッシュメモリ等のソリッドステート記憶デバイス、キャッシュ、ランダムアクセスメモリ（ＲＡＭ）、又は、他の不揮発性メモリデバイス等を含むことができる。非一時的なコンピュータ可読記憶媒体に記憶された実行可能命令は、ソースコード、アセンブリ言語コード、オブジェクトコード、又は、１つ以上のプロセッサによって解釈若しくは実行可能な他の命令フォーマットであってもよい。
【００４６】
コンピュータ可読記憶媒体は、命令及び／又はデータをコンピュータシステムに提供するために、使用中にコンピュータシステムによってアクセス可能な任意の記憶媒体、又は、記憶媒体の組み合わせを含むことができる。かかる記憶媒体には、限定されないが、光媒体（例えば、コンパクトディスク（ＣＤ）、デジタル多用途ディスク（ＤＶＤ）、ブルーレイ（登録商標）ディスク）、磁気媒体（例えば、フロッピー（登録商標）ディスク、磁気テープ、磁気ハードドライブ）、揮発性メモリ（例えば、ランダムアクセスメモリ（ＲＡＭ）、キャッシュ）、不揮発性メモリ（例えば、読み出し専用メモリ（ＲＯＭ）、フラッシュメモリ）、又は、微小電気機械システム（ＭＥＭＳ）ベースの記憶媒体が含まれ得る。コンピュータ可読記憶媒体は、コンピュータシステム（例えば、システムＲＡＭ又はＲＯＭ）に内蔵されてもよいし、コンピュータシステム（例えば、磁気ハードドライブ）に固定的に取り付けられてもよいし、コンピュータシステム（例えば、光学ディスク又はユニバーサルシリアルバス（ＵＳＢ）ベースのフラッシュメモリ）に着脱可能に取り付けられてもよいし、有線又は無線のネットワークを介してコンピュータシステム（例えば、ネットワークアクセス可能なストレージ（ＮＡＳ））に接続されてもよい。
【００４７】
上述したものに加えて、概要説明において説明した全てのアクティビティ又は要素が必要とされているわけではなく、特定のアクティビティ又はデバイスの一部が必要とされない場合があり、１つ以上のさらなるアクティビティが実行される場合があり、１つ以上のさらなる要素が含まれる場合があることに留意されたい。さらに、アクティビティが列挙された順序は、必ずしもそれらが実行される順序ではない。また、概念は、特定の実施形態を参照して説明された。しかしながら、当業者であれば、特許請求の範囲に記載されているような本発明の範囲から逸脱することなく、様々な変更及び変形を行うことができるのを理解するであろう。したがって、明細書及び図面は、限定的な意味ではなく例示的な意味で考慮されるべきであり、これらの変更形態の全ては、本発明の範囲内に含まれることが意図される。
【００４８】
利益、他の利点及び問題に対する解決手段を、特定の実施形態に関して上述した。しかし、利益、利点、問題に対する解決手段、及び、何かしらの利益、利点若しくは解決手段が発生又は顕在化する可能性のある特徴は、何れか若しくは全ての請求項に重要な、必須の、又は、不可欠な特徴と解釈されない。さらに、開示された発明は、本明細書の教示の利益を有する当業者には明らかな方法であって、異なっているが同様の方法で修正され実施され得ることから、上述した特定の実施形態は例示にすぎない。添付の特許請求の範囲に記載されている以外に本明細書に示されている構成又は設計の詳細については限定がない。したがって、上述した特定の実施形態は、変更又は修正されてもよく、かかる変更形態の全ては、開示された発明の範囲内にあると考えられることが明らかである。したがって、ここで要求される保護は、添付の特許請求の範囲に記載されている。
【図１】
2019521453.tif 000003
【図２】
2019521453.tif 000004
【図３】
2019521453.tif 000005
【図４】
2019521453.tif 000006
【図５】
2019521453.tif 000007
【図６】
2019521453.tif 000008
【図７】
2019521453.tif 000009
【図８】
2019521453.tif 000010
【図９】
2019521453.tif 000011
【手続補正書】
【提出日】令和1年5月24日(2019.5.24)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
データセットを記憶するための第１メモリ（２１５，４１５）と、前記データセットのサブセットを記憶するための第２メモリ（２１０，４１０）と、を備えるシステム（１００）での仮想メモリページフォールト率を低減する方法であって、
仮想アドレスを含むメモリアクセス要求を受信することと、
前記仮想アドレスが前記第２メモリ内の第２物理ページにマッピングされていないことに応じて、前記第２メモリの空きページプール（２４５，３３０，４２５）内の第１物理ページ（３３５）を前記仮想アドレスにマッピングすることと、
前記第１物理ページ（３３５）への前記メモリアクセス要求を許可することと、を含む、
方法。
【請求項２】
前記メモリアクセス要求は、前記仮想アドレスへの書き込み要求であって、
前記第１物理ページ（３３５）を前記仮想アドレスにマッピングすることは、前記第１物理ページ（３３５）を既知の状態に初期化することを含む、
請求項１の方法。
【請求項３】
前記仮想アドレスに基づいて前記第１物理ページ（３３５）に情報を書き込むことをさらに含む、
請求項２の方法。
【請求項４】
前記メモリアクセス要求は、前記仮想アドレスに記憶されている情報を読み出すための要求であって、
前記方法は、
前記メモリアクセス要求に応じて読み出される情報を生成するためのプロセスを生成することと、
前記仮想アドレスに基づいて、前記生成された情報を前記第１物理ページ（３３５）に書き込むことと、
前記第１物理ページ（３３５）から前記生成された情報を読み出すことと、をさらに含む、
請求項１の方法。
【請求項５】
前記第１物理ページ（３３５）を含む複数の物理ページ（３２５，３３５）を前記空きページプール（２４５，３３０，４２５）に割り当てることをさらに含む、
請求項１〜４の何れかの方法。
【請求項６】
前記第１物理ページ（３３５）を前記仮想アドレスにマッピングすることは、前記空きページプール（２４５，３３０，４２５）から前記第１物理ページ（３３５）を削除することを含む、
請求項５の方法。
【請求項７】
前記空きページプール（２４５，３３０，４２５）内の物理ページ（３２５，３３５）数を判別することと、
前記物理ページ数が閾値未満であることに応じて、少なくとも１つの対応する仮想アドレスから少なくとも１つの物理ページをマッピング解除することと、
前記少なくとも１つのマッピング解除された物理ページを前記空きページプール（２４５，３３０，４２５）に追加することと、をさらに含む、
請求項６の方法。
【請求項８】
前記メモリアクセス要求を受信することは、前記第２メモリに記憶された情報をキャッシュするように構成された少なくとも１つのキャッシュに関連する少なくとも１つのアドレス変換バッファ（２６０，２６１，２６２，２６４，４０５）において前記仮想アドレスがエントリを欠いていることに応じて、前記メモリアクセス要求を受信することを含む、
請求項１〜７の何れかの方法。
【請求項９】
データセットを記憶するための第１メモリ（１１０）と、
前記データセットのサブセットを記憶するための第２メモリ（２１０，３０５，４１０）と、
処理ユニット（２３１）と、を備え、
前記処理ユニットは、
仮想アドレスを含むメモリアクセス要求を受信することと、
前記仮想アドレスが前記第２メモリ内の第２物理ページにマッピングされていないことに応じて、前記第２メモリの空きページプール（２４５，３３０，４２５）内の第１物理ページ（３３５）を前記仮想アドレスにマッピングすることと、
前記第１物理ページ（３３５）への前記メモリアクセス要求を許可することと、
を行うように構成されている、
装置。
【請求項１０】
前記メモリアクセス要求は、前記仮想アドレスへの書き込み要求であって、
前記処理ユニット（２３１）は、前記第１物理ページ（３３５）を既知の状態に初期化することを行うように構成されている、
請求項９の装置。
【請求項１１】
前記メモリアクセス要求は、前記仮想アドレスに記憶されている情報を読み出すための要求であって、
前記処理ユニット（２３１）は、
前記メモリアクセス要求に応じて読み出される情報を生成するためのプロセスを生成することと、
前記仮想アドレスに基づいて、前記生成された情報を前記第１物理ページ（３３５）に書き込むことと、
前記第１物理ページ（３３５）から前記生成された情報を読み出すことと、
を行うように構成されている、
請求項９の装置。
【請求項１２】
前記処理ユニット（２３１）は、前記第１物理ページ（３３５）を含む複数の物理ページ（３２５，３３５）を前記空きページプール（２４５，３３０，４２５）に割り当てることを行うように構成されている、
請求項９〜１１の何れかの装置。
【請求項１３】
前記処理ユニット（２３１）は、前記第１物理ページ（３３５）を前記仮想アドレスにマッピングすることに応じて、前記空きページプール（２４５，３３０，４２５）から前記第１物理ページ（３３５）を削除することと、
前記空きページプール（２４５，３３０，４２５）内の物理ページ（３２５，３３５）数を判別することと、
前記物理ページ数が閾値未満であることに応じて、少なくとも１つの対応する仮想アドレスから少なくとも１つの物理ページをマッピング解除することと、
前記少なくとも１つのマッピング解除された物理ページを前記空きページプール（２４５，３３０，４２５）に追加することと、
を行うように構成されている、
請求項１２の装置。
【請求項１４】
前記第２メモリに記憶されている情報をキャッシュするように構成された少なくとも１つのキャッシュと、
前記少なくとも１つのキャッシュに関連する少なくとも１つのアドレス変換バッファ（２６０，２６１，２６２，２６４，４０５）であって、前記メモリアクセス要求を受信することは、前記少なくとも１つのアドレス変換バッファ（２６０，２６１，２６２，２６４，４０５）において前記仮想アドレスがエントリを欠いていることに応じて、前記メモリアクセス要求を受信することを含む、少なくとも１つのアドレス変換バッファと、を備える、
請求項９の装置。
【請求項１５】
前記第１メモリ及び前記第２メモリ内の物理アドレスへの仮想アドレスのマッピングを記憶するように構成されたページテーブル（２５０）であって、前記処理ユニット（２３１）は、前記第１物理ページ（３３５）への前記仮想アドレスのマッピングを示すために前記ページテーブル（２５０）を変更することを行うように構成されている、ページテーブルを備える、
請求項９の装置。
【国際調査報告】
2019521453.tif 000012
2019521453.tif 000013