(57)【要約】メモリ割り当て呼び出しに関連するオブジェクトをタグ付けして追跡する方法及び処理装置が記載されている。アプリケーション又はソフトウェアは、オブジェクトレベルの追跡を有効にするために、タグをメモリ割り当て呼び出しに追加する。エントリは、オブジェクト追跡テーブルに生成され、オブジェクト追跡テーブルは、オブジェクト及び関連するメモリデバイスに関するタグ及び様々な統計値を記憶する。オブジェクト統計値は、実行時の配置決定を行うアプリケーション又は以前の実行に基づくオフラインコードチューニングによって電力／性能特性を調整するように、アプリケーションによってクエリされてもよい。アプリケーションは、オブジェクト統計値に基づいて要求されたメモリ特性のタイプを指定するために、タグをメモリ割り当て呼び出しに追加してもよい。【選択図】図１
2019516179.tif 000002
【特許請求の範囲】
【請求項１】
オブジェクトを追跡する方法であって、
タグを前記オブジェクトに関連付けることであって、前記オブジェクトはメモリアドレスである、ことと、
テーブルエントリを、前記オブジェクト及び前記タグに関するオブジェクト追跡テーブルに追加することであって、前記オブジェクト追跡テーブルは、複数のメモリイベントに関する複数のオブジェクト統計値を維持する、ことと、
メモリコントローラによって、関連するメモリイベントの発生に関するオブジェクト統計値を更新することと、
メモリ使用の決定を最適化するために、前記複数のオブジェクト統計値をユーザエンティティに提供することと、
を含む、方法。
【請求項２】
前記オブジェクト及び前記タグは、メモリ割り当て命令に関連付けられている、請求項１の方法。
【請求項３】
前記オブジェクト及び前記タグは、変数定義に関連付けられている、請求項１の方法。
【請求項４】
前記タグは、メモリ割り当て命令を受信したときに、前記オブジェクトに関連付けられる、請求項１の方法。
【請求項５】
テーブルエントリは、前記オブジェクト及び前記タグに関する複数のオブジェクト追跡テーブルに入力され、各オブジェクト追跡テーブルは、関連するメモリコントローラを有する、請求項１の方法。
【請求項６】
前記タグは、オブジェクト識別パラメータのプールから選択された１つのオブジェクト識別パラメータ、又は、前記オブジェクトに関連するベースポインタに基づくものである、請求項１の方法。
【請求項７】
前記タグは、プロセス識別子及びスレッド識別子のうち少なくとも１つを含む、請求項１の方法。
【請求項８】
前記テーブルエントリは、前記オブジェクト及び前記タグが少なくとも所定の回数アクセスされた場合に追加される、請求項１の方法。
【請求項９】
オブジェクトを追跡する処理装置であって、
前記オブジェクトに関するテーブルエントリと、前記オブジェクトに関連するタグと、を有するオブジェクト追跡テーブルであって、前記オブジェクトはメモリアドレスであり、前記オブジェクト追跡テーブルは、複数のメモリイベントに関する複数のオブジェクト統計値を維持し、前記複数のオブジェクト統計値は、メモリ使用の決定を最適化するために、ユーザエンティティによって使用される、オブジェクト追跡テーブルと、
関連するメモリイベントの発生に関するオブジェクト統計値の前記テーブルエントリを更新するメモリコントローラと、を備える、
処理装置。
【請求項１０】
前記オブジェクト及び前記タグは、メモリ割り当て命令に関連付けられている、請求項９の処理装置。
【請求項１１】
前記オブジェクト及び前記タグは、オブジェクトの記憶に関する変数定義又はオブジェクト割り当て命令に関連付けられている、請求項９の処理装置。
【請求項１２】
前記タグは、メモリ割り当て命令を受信したときに、前記オブジェクトに関連付けられる、請求項９の処理装置。
【請求項１３】
複数のオブジェクト追跡テーブルと、
複数のメモリコントローラと、を備え、
前記複数のオブジェクト追跡テーブルのうち何れか１つと、前記複数のメモリコントローラのうち何れか１つと、の間に１対１の対応関係が存在し、
テーブルエントリは、前記オブジェクト及び前記タグに関するオブジェクト追跡テーブルの各々に入力される、請求項９の処理装置。
【請求項１４】
前記タグは、オブジェクト識別パラメータのプールから選択された１つのオブジェクト識別パラメータ、又は、前記オブジェクトに関連するベースポインタに基づくものである、請求項９の処理装置。
【請求項１５】
前記タグは、プロセス識別子及びスレッド識別子のうち少なくとも１つを含む、請求項１４の処理装置。
【請求項１６】
前記テーブルエントリは、前記オブジェクト及び前記タグが少なくとも所定の回数アクセスされた場合に追加される、請求項９に記載の処理装置。
【請求項１７】
処理装置で実行されると、オブジェクトを追跡する方法を前記処理装置に実行させる命令を含むコンピュータ可読記憶媒体であって、
前記方法は、
タグを前記オブジェクトに関連付けることであって、前記オブジェクトはメモリアドレスである、ことと、
テーブルエントリを、前記オブジェクト及び前記タグに関するオブジェクト追跡テーブルに追加することであって、前記オブジェクト追跡テーブルは、複数のメモリイベントに関する複数のオブジェクト統計値を維持する、ことと、
メモリコントローラによって、関連するメモリイベントの発生に関するオブジェクト統計値を更新することと、
メモリ使用の決定を最適化するために、前記複数のオブジェクト統計値をユーザエンティティに提供することと、
を含む、コンピュータ可読記憶媒体。
【請求項１８】
前記タグは、オブジェクト識別パラメータのプールから選択された１つのオブジェクト識別パラメータ、又は、前記オブジェクトに関連するベースポインタに基づくものである、請求項１７のコンピュータ可読記憶媒体。
【請求項１９】
前記タグは、プロセス識別子及びスレッド識別子のうち少なくとも１つを含む、請求項１７のコンピュータ可読記憶媒体。
【請求項２０】
前記オブジェクト及びタグは、メモリ割り当て命令、又は、オブジェクトの記憶に関するオブジェクト割り当て命令において関連付けられる、請求項１７のコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
（政府権利条項）
本発明は、米国エネルギー省（ＤＯＥ）によって与えられた契約番号ＤＥ−ＡＣ５２０７ＮＡ２７３４４、下請け番号Ｂ６００７１６の下で米国政府の支援を受けてなされた。米国政府は、本発明において所定の権利を有する。
【０００２】
（関連出願の相互参照）
本願は、米国特許出願第１５／１３６，８５１号（出願日：２０１６年４月２２日）の利益を主張するものであり、その内容は、本明細書に十分に記載されているかのように、参照により本明細書に組み込まれる。
【０００３】
開示された実施形態は、概してプロセッサに関し、特に、メモリ管理及びメモリ処理に関する。
【背景技術】
【０００４】
アプリケーション又はソフトウェア制御異種メモリシステムは、ユーザ又はオペレーティングシステムがデータの配置場所を選ぶのを可能にする。これらのタイプの異種メモリシステムは、異なるアクセスパターン（例えば、ランダム、連続的、高帯域幅、大容量、又は低電力）で調整された複数のメモリデバイスを有することができる。ユーザが制御する環境の下では、メモリ割り当ては、関数（例えば、Ｃ言語のｍａｌｌｏｃ（）等）によって行われる。アプリケーションは、通常、あるオブジェクトレベルで自身のデータを管理し、当該データがメモリデバイスに継続的に割り当てられるのを予想する。しかしながら、データは、オペレーティングシステムによってページレベルで追跡及び割り当てられる。現在のところ、メモリコントローラレベルでのオブジェクトレベル性能についてアプリケーションに通知する方法が存在しない。例えば、高速ランダムアクセス、高帯域幅又は低リード／ライト比を有するオブジェクトを、適切な電力／性能が調整されたメモリエリアに割り当てることの可能な方法が存在しない。このタイプの指向性オブジェクトの割り当ては、現在のユーザレベルでは不可能である。
【０００５】
添付の図面と併せて例として与えられる以下の説明から、より詳細な理解が得られるであろう。
【図面の簡単な説明】
【０００６】
【図１】ある実施態様による、処理装置の例示的なブロック図である。
【図２】ある実施態様による、オブジェクトをタグ付け及び追跡するための例示的なフローチャートである。
【図３】本明細書に記載された方法及び処理装置を実施する例示的なデバイスのブロック図である。
【発明を実施するための形態】
【０００７】
本明細書では、メモリ割り当て呼び出しに関連するオブジェクトをタグ付けして追跡する方法及び処理装置を説明する。この方法及び処理装置は、アプリケーション又はソフトウェアが、ソフトウェアが追跡又はモニタリングすることに関心を持っているオブジェクト（すなわち、メモリアドレスの範囲）を識別することを可能にする。オブジェクト追跡テーブルは、オブジェクト統計値の追跡を継続することができる。次に、ソフトウェアは、蓄積されたオブジェクト統計値をリードバックし、オブジェクト統計値の分析に基づいて最適化を行うことができる。この方法及び処理装置は、アプリケーションにとって関心のあるオブジェクト及び統計値を自動的に追跡する方法を提供する。以下に説明するように、この方法及び処理装置は、オペレーティングシステムが介入することなく、オブジェクトレベル及びメモリレベルの粒度で正確なデータマッピングの決定をサポートし、ページ粒度のモニタリングの精度を向上させ、仮想アドレス変換レベル（すなわち、変換索引バッファ）では見られない副作用的なトラフィック動作（キャッシュエビクションによってトリガされた読み書き）を捕捉する。
【０００８】
概して、アプリケーション又はソフトウェアは、タグをメモリ割り当て呼び出しに追加して、オブジェクトレベルの追跡を可能にする。エントリは、オブジェクト及び関連するメモリデバイスに関するタグ及び様々な統計値を記憶するオブジェクト追跡テーブルに生成される。オブジェクト統計値は、実行時の配置決定を行うアプリケーション又は以前の実行に基づくオフラインコードチューニングによって電力／性能特性を調整するように、アプリケーションによってクエリされてもよい。アプリケーションは、タグをメモリ割り当て呼び出しに追加して、オブジェクト統計値に基づいて要求されたメモリ特性のタイプを指定することができる。
【０００９】
図１は、ある実施態様による、処理装置１００の例示的なブロック図である。処理装置１００は、メモリコントローラ１１０及びオブジェクト追跡テーブル１１５に接続可能な処理ユニット１０５を含む。メモリコントローラ１１０は、オブジェクト追跡テーブル１１５とメインメモリ１２０とに接続されてもよく、メインメモリ１２０は、オブジェクト追跡テーブル１１５に接続されてもよい。図１は、コントローラをメモリコントローラ１１０として示しているが、コントローラは、キャッシュコントローラ又は同様のデバイスであってもよい。図１は、メモリをメインメモリ１２０として示しているが、メモリは、キャッシュ又は同様のデバイスであってもよい。処理装置１００は、図１に示されていない追加の構成要素を含むことができることを理解されたい。
【００１０】
説明される処理装置及び方法は、オブジェクトレベルに基づいて追跡することに留意されたい。既知であるように、アプリケーションは、仮想アドレス空間で動作又は実行する。オペレーティングシステム（ＯＳ）は、例えば処理ユニット１０５に配置し得る変換索引バッファ（ＴＬＢ）を使用して、対応する物理アドレスを把握する。したがって、オブジェクトは、複数のページ又は１ページ以下であってもよく、これにより、ページ解決（page resolution）に関係しない。
【００１１】
概して、アプリケーション又はソフトウェア（すなわち、ユーザレベルの構造又はデバイス）は、メモリ要求を送信したり、メモリ割り当て関数呼び出しを行うことができる。メモリ割り当て関数呼び出しは、タグを提供してもよい。アプリケーションは、メモリ割り当て関数呼び出し（すなわち、ｍａｌｌｏｃ（サイズ，タグ）関数呼び出し）にタグを含めることによって、何れのオブジェクトを追跡する必要があるかを制御してもよい。このタイプのメモリ割り当て関数呼び出しは、追跡するためのオブジェクトを、オブジェクト追跡テーブル１１５に登録することができる。また、複数のメモリコントローラは、同じアドレス範囲及びタグを各コントローラに登録することによって操作することができる。例えば、処理ユニット１０５で実行されているアプリケーション又はオペレーティングシステム（ＯＳ）が、所定のタグに関するオブジェクト統計値を読み出す場合には、アプリケーション又はＯＳは、各コントローラに見られるように、個別の統計値を得ることができる。本明細書の例では、タグをメモリ割り当て関数呼び出しに追加することを説明しているが、かかるタグ又は修飾子をプログラム内の変数定義（すなわち、ｍａｌｌｏｃを使用しない）に追加して、コンパイラが、これらの変数をメモリに割り当てる場合に適切なタグを指定できるようにしてもよい。これにより、これらの変数に関するオブジェクト使用量の統計値を収集してクエリする機能を可能にすることができる。本明細書での説明は、収集された統計値を要求及び／又は最適化するエンティティ、他の同様の構造、エンティティ若しくはモジュールとして使用されるアプリケーション、ユーザプログラム、ソフトウェア又はＯＳを参照しているが、集合的に、これら全ては、ユーザエンティティ又はユーザデバイスと呼ばれ得る。
【００１２】
本明細書の例では、タグをメモリ割り当て関数呼び出しに追加することを説明しているが、かかるタグ又は修飾子を、オブジェクトストレージシステム／アーキテクチャのオブジェクトに追加してもよい。概して、オブジェクトストレージの各オブジェクトは、通常、データ自体、可変量のメタデータ、及び、グローバル一意識別子（globally unique identifier）を含む。オブジェクト及びタグは、オブジェクトストレージのオブジェクト割り当て命令に関連付けられてもよい。或いは、本明細書で説明されるタグは、ＯＳによって提供されてもよい。
【００１３】
タグは、メモリ割り当て関数から返されたオブジェクト識別（ＩＤ）パラメータ又はベースポインタであってもよい。割り当てられていないオブジェクトＩＤのフリーリスト又はオブジェクトＩＤのプールは、アプリケーションによって、又は、アプリケーションによって使用されるＯＳによって維持されてもよい。リスト又はプールは、システム全体でグローバルに使用されてもよい。例えば、タグは、メモリアクセスにおいてＴＬＢからピックアップされてもよい（すなわち、タグは、ページテーブルエントリの一部として記憶される）。ベースポインタタグは、オブジェクトに関連付けられたメモリアドレスの先頭をタグとして使用する。例えば、タグは、以下に説明するように、１つ以上のアドレス範囲に関連付けられ、オブジェクト追跡テーブル（ＯＴＴ）にプログラムされてもよい。１つのオブジェクトが２つの範囲で構成される場合、２つの範囲に対応する同じタグを有する２つのＯＴＴエントリが割り当てられてもよい。プログラムがＯＴＴから統計値を読み出す場合、当該プログラムは、両方の統計値のセットが同じオブジェクトを参照していることを認識するであろう。何れの場合でも、アプリケーション及び／又はＯＳは、プロセスＩＤ又はスレッド番号等の情報をタグに加えることができる。プロセスＩＤは一意であり、タグ間のコリジョンを回避するために追加することができる。
【００１４】
ベースポインタタグでは、ｍａｌｌｏｃ割り当て関数によって返されるポインタが仮想アドレスであることに留意されたい。ＯＳは、仮想アドレスを適切な物理アドレスにマッピングし、この変換／マッピングされた物理アドレスをＯＴＴに入力する。同様に、アプリケーション又はプログラムが仮想アドレスポインタに基づいてＯＴＴから統計値を読み出しレビューしたい場合には、アプリケーション又はプログラムは、仮想アドレスから物理アドレスへのマッピング／変換を行ってＯＴＴのエントリを検索するために、ＯＳを呼び出す必要があるであろう。
【００１５】
さらに、物理ページは、実行時にＯＳによって再配置されてもよいことに留意されたい。ＯＳが物理的にページを移動させる場合、ＯＳは、オブジェクトの追跡を継続するために、ＯＴＴ内の一致する物理アドレスを更新する必要があるであろう。
【００１６】
要求されたメモリが割り当てられると、ＯＳは、例えば、オブジェクト追跡テーブル１１５にエントリを生成するための命令又はコマンドを送信することができる。命令又はコマンドは、（パス１３０を介して）オブジェクト追跡テーブル１１５に直接送信されてもよいし、メモリコントローラ１１０を介して（パス１３５を介して）オブジェクト追跡テーブル１１５に間接的に送信されてもよい。パス１３５では、オブジェクト追跡テーブル１１５をメモリアドレス空間にマッピングし、オブジェクト追跡テーブル１１５へのアクセスを、通常（キャッシュされていない）ロード及びストアを使用して行うことができる。テーブルエントリは、オブジェクト及びタグに関連付けられるメモリアドレスを登録する。実際には、オブジェクト追跡テーブル１１５へのエントリは、メモリアドレスの範囲内のメモリアドレスが参照され、要求され、アクセスされる等（総称して「参照される」）の場合に、メモリコントローラ１１０が、関連するオブジェクト又はタグに関するオブジェクト追跡テーブル１１５に対して更新を送信するべきであることを、メモリコントローラ１１０にアラートする。例えば、メモリコントローラ１１０は、読み出し、書き込み、ビットフリップ又は他の同様のイベントの数をカウント又は追跡し、オブジェクト追跡テーブル１１５に対して更新を送信することができる。
【００１７】
全てのメモリ参照でタグを検索しないようにするには、最新のタグ検索のキャッシュを何処かに保持する必要がある。各メモリ要求は、ページテーブルのキャッシュであるＴＬＢをチェックする必要がある。したがって、最新使用されたタグはＴＬＢにキャッシュされ、他のタグはＴＬＢミスにロードされ得る。その結果、メモリ要求毎に、メモリアドレス及びタグがメモリコントローラ１１０に送信されてもよい。すなわち、メモリ要求は、各読み出し又は各書き込みと共に、タグをＴＬＢエントリからメモリコントローラ１１０に送ることができる。次に、メモリコントローラ１１０は、タグを検索する必要なく、オブジェクト追跡テーブル１１５を更新することができる。或いは、最新使用されたタグは、プロセッサ毎に個別のテーブルにキャッシュされてもよいし、メモリコントローラ１１０の個別のテーブルにキャッシュされてもよい。これは、ページ粒度の追跡を提供することができる。サブページ粒度のオブジェクトの追跡をサポートするために、複数のタグをページ毎に記憶してもよい。
【００１８】
オブジェクト追跡テーブル１１５は、複数の一致したタグの追跡に適応するようなサイズにすることができる。オブジェクト追跡テーブル１１５は、ＴＬＢと同様のキャッシュとして扱われ、オブジェクト追跡テーブル１１５が保持し得るよりも多くのアクティブなタグがある場合に、メインメモリ１２０に流出する可能性がある。オブジェクト追跡テーブルは、キャッシュ又は同様に位置するデバイスとして、メインメモリ１２０の一部として実装することができる。
【００１９】
オブジェクト追跡テーブル１１５の各エントリは、タグ及び統計値のセットを有し得る。統計値は、タグ毎に個別に追跡され、限定されないが、読み出し及び書き込みのカウント、読み出し／書き込みの比率、バンクの競合、レイテンシ、行のヒット率、帯域幅、シーケンシャルとランダムの割合、コマンドキュー占有率（キューイング遅延）、コヒーレンシ情報、読取専用又は変更可能なものとしてオブジェクトを指定する情報、オブジェクトの予想されるアクセスパターン（シーケンシャル、ランダム、キャッシュフレンドリー等）を指定する情報、オブジェクトの永続性を指定する情報を含み、例えば、特定のメモリデバイス又はメモリデバイスタイプ、プロセッサが共有しているセキュリティ機能（プローブフィルタ）及び基準周波数等を必要とする不揮発性メモリ、割り当て場所に維持される必要がある。
【００２０】
また、オブジェクト追跡テーブル１１５は、書き込みミス及び書き戻しに起因して、読み出しの追跡を継続することができる。これらのイベントは、トリガするメモリ要求のタグでタグ付けされてもよい。実際には、オブジェクト追跡テーブル１１５は、所定のタグ付けされたオブジェクトへのアクセスによって生成される「副作用的な」メモリトラフィックを捕捉して追跡することができる。例えば、アプリケーションがキャッシュラインへのアクセスを要求する場合、ＯＳ又はＴＬＢは、タグをキャッシュライン（すなわち、オブジェクト）に適用することができる。キャッシュコントローラは、キャッシュラインをインストールするために、オブジェクトに関連しない可能性のある別のキャッシュラインを退去させる（キャッシュエビクション）必要がある。ある状況では、アプリケーションは、このキャッシュエビクション又はメインメモリへの書き戻し（すなわち、タグに対する「副作用」）を追跡することを望む場合がある。したがって、アプリケーションは、要求に関連する「副作用」を含む全てのトラフィックを認識している。
【００２１】
ＯＳ又はアプリケーションは、独立したオブジェクト毎に統計値をクエリして、データ配置の決定を調整することができる。これは、例えば、読み出しエントリコマンドをオブジェクト追跡テーブル１１５に発行することによって、行うことができる。次に、アプリケーションは、次のメモリ要求に対してどのメモリを使用すべきかを決定し、指定することができる。
【００２２】
アプリケーションによってタグが明示的に解放された場合、又は、メモリが割り当て解除（例えば、ｆｒｅｅ（）呼び出し）された場合に、タグを解放することができる。タグ及びその統計値を、オブジェクト追跡テーブル１１５から除去することができる。これは、例えば、削除エントリコマンドをオブジェクト追跡テーブル１１５に発行することによって行うことができる。
【００２３】
処理装置１００がメモリ階層において他のメモリを含む場合、メモリ階層の各レベルは、オブジェクト追跡テーブルを使用して、メモリレベルに関連する統計値の追跡を継続することができる。
【００２４】
本明細書で説明されるタグを、有意ではない数のメモリアクセスを有するオブジェクトの追跡を避けるために、信頼性推定器（confidence estimators）と共に使用することができる。例えば、信頼性推定器は、エントリがオブジェクト追跡テーブル１１５に生成される前に、少なくともＮ回のアクセスを所定のタグに要求してもよい。次に、ＯＳは、タグを無視し、エントリをオブジェクト追跡テーブル１１５に生成しなくてもよい。プロセスユニット１０５又は同様のデバイスは、最近アクセスされたメモリアドレス及び閾値の追跡を継続することができる。アクセス数が閾値に達するか超えた場合、ＯＳは、エントリをオブジェクト追跡テーブル１１５に生成することができる。
【００２５】
図２は、ある実施態様による、オブジェクトをタグ付け及び追跡するための例示的なフローチャート２００である。フローチャート２００は、メインメモリアクセスを追跡するためのものに過ぎない。特許請求の範囲を逸脱することなく、他のタイプのメモリ及び他のタイプのコマンド又は命令についての他のフローチャートを実施することができる。
【００２６】
ユーザプログラム（例えば、アプリケーション）は、タグを用いてメモリ割り当てを要求する（ブロック２０５）。タグは、オブジェクトＩＤ（Ｔａｇとして示されている）であってもよいし、ベースポインタから派生したタグ（ＯｂｊｅｃｔＰｔｒとして示されている）であってもよい。メモリ割り当て呼び出しは、ＯＳによって処理される（ブロック２１０）。具体的には、オブジェクトのアドレス範囲及びタグが、オブジェクト追跡テーブルに書き込まれる。オブジェクト追跡テーブルが、アドレス範囲及びタグを保持するのに十分なスペースを有していない場合には、エントリは、スペースを解放するためにメインメモリに退去されてもよく、事実上、オブジェクト追跡テーブルをキャッシュとして扱う。次に、ユーザプログラムは、実行を再開する（ブロック２１５）。メモリアクセスが最後のレベルのキャッシュミスであるか否かの判定が行われる（ブロック２２０）。具体的には、最後のレベルのキャッシュミスは、メモリアクセス（ロード又は記憶（キャッシュライトバック））である。これにより、本実施例の目的のために、メインメモリアクセスのみがオブジェクト追跡テーブル内の検索をトリガすることが保証される。
【００２７】
最後のレベルのキャッシュミスである場合（ブロック２２２）、オブジェクト追跡テーブルのカウンタが更新される（ブロック２３０）。具体的には、アドレス範囲及びイベント（例えば、読み出し、書き込み、又は、他のメモリイベント）が一致する場合、適切なカウントがインクリメントされる。最後のレベルのキャッシュミスではない場合（ブロック２２４）、プログラムが終了したか否かが判定される（ブロック２４０）。プログラムが終了していない場合（ブロック２４２）、プログラムは、実行を継続し（ブロック２１５）、サイクルが再び開始される。プログラムが終了した場合（ブロック２４４）、ユーザプログラムは、オブジェクト追跡テーブルからオブジェクト統計値を取得するコマンドを送信する（ブロック２５０）。オブジェクト追跡テーブルからエントリが読み出され、ユーザプログラムに送信される（ブロック２６０）。
【００２８】
ここでの説明はメモリコントローラにアクセスする処理ユニットについてのものであるが、例えば、特許請求の範囲から逸脱することなく、上記の説明に従ってダイレクトメモリアクセス（ＤＭＡ）コントローラを使用することができる。この場合、処理ユニットがバイパスされ、アプリケーション及びＤＭＡコントローラは、メモリ割り当て要求を処理するために、直接インタフェースする。タグ及びオブジェクト追跡テーブルは、本明細書に記載された説明に従って処理されてもよい。
【００２９】
図３は、１つ以上の開示された実施例又は実施態様の１つ以上の部分が実装され得る例示的なデバイス３００のブロック図である。デバイス３００は、例えば、頭部装着型デバイス、サーバ、コンピュータ、ゲームデバイス、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話、又は、タブレットコンピュータを含むことができる。デバイス３００は、プロセッサ３０２と、メモリ３０４と、ストレージ３０６と、１つ以上の入力デバイス３０８と、１つ以上の出力デバイス３１０と、を含むことができる。また、デバイス３００は、オプションとして、入力ドライバ３１２と、出力ドライバ３１４と、を含むことができる。デバイス３００は、図３に示されていない追加の構成要素を含んでもよいことを理解されたい。
【００３０】
プロセッサ３０２は、中央処理ユニット（ＣＰＵ）、グラフィックス処理ユニット（ＧＰＵ）、同じダイ上に配置されたＣＰＵ及びＧＰＵ、又は、１つ以上のプロセッサコアを含むことができ、各プロセッサコアは、ＣＰＵ又はＧＰＵであってもよい。メモリ３０４は、プロセッサ３０２と同じダイ上に配置されてもよいし、プロセッサ３０２とは別に配置されてもよい。メモリ３０４は、例えばランダムアクセスメモリ（ＲＡＭ）、ダイナミックＲＡＭ又はキャッシュ等の揮発性メモリ又は不揮発性メモリを含むことができる。
【００３１】
ストレージ３０６は、例えばハードディスクドライブ、ソリッドステートドライブ、光ディスク、又は、フラッシュドライブ等の固定ストレージ又はリムーバブルストレージを含むことができる。入力デバイス３０８は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、バイオメトリックスキャナ、又は、ネットワーク接続（例えば、無線ＩＥＥＥ８０２信号の送信及び／又は受信用の無線ローカルエリアネットワークカード）を含むことができる。出力デバイス３１０は、ディスプレイ、スピーカ、プリンタ、触覚フィードバックデバイス、１つ以上のライト、アンテナ、又は、ネットワーク接続（例えば、無線ＩＥＥＥ８０２信号の送信及び／又は受信用の無線ローカルエリアネットワークカード）を含むことができる。
【００３２】
入力ドライバ３１２は、プロセッサ３０２及び入力デバイス３０８と通信し、プロセッサ３０２が入力デバイス３０８からの入力を受信するのを可能にする。出力ドライバ３１４は、プロセッサ３０２及び出力デバイス３１０と通信し、プロセッサ３０２が出力デバイス３１０に対して出力を送信するのを可能にする。入力ドライバ３１２及び出力ドライバ３１４はオプションの構成要素であって、入力ドライバ３１２及び出力ドライバ３１４が存在しない場合には、デバイス３００が同様に動作することに留意されたい。
【００３３】
概して、オブジェクトを追跡する方法は、タグを、メモリアドレスであるオブジェクトに関連付けることを含む。また、この方法は、テーブルエントリを、オブジェクト及びタグに関するオブジェクト追跡テーブルに追加することであって、オブジェクト追跡テーブルは、複数のメモリイベントに関する複数のオブジェクト統計値を維持する、ことを含む。さらに、この方法は、メモリコントローラによって、関連するメモリイベントの発生に関するオブジェクト統計値を更新することと、メモリ使用の決定を最適化するために、複数のオブジェクト統計値を提供することと、を含む。オブジェクト及びタグを、メモリ割り当て命令に関連付けることができる。オブジェクト及びタグを、変数定義に関連付けることができる。タグは、メモリ割り当て命令を受信すると、オブジェクトに関連付けられてもよい。テーブルエントリは、オブジェクト及びタグに関する複数のオブジェクト追跡テーブルに入力されてもよく、各オブジェクト追跡テーブルは、関連するメモリコントローラを有する。タグは、オブジェクト識別パラメータのプールから選択された１つのオブジェクト識別パラメータであってもよいし、オブジェクトに関連するベースポインタに基づくものであってもよい。タグは、プロセス識別子及びスレッド識別子のうち少なくとも１つを含む。オブジェクト及びタグが少なくとも所定の回数アクセスされた場合、テーブルエントリを追加することができる。
【００３４】
概して、オブジェクトを追跡する処理装置は、オブジェクトに関するテーブルエントリと、オブジェクトに関連するタグと、を有するオブジェクト追跡テーブルと、メモリコントローラと、を含む。ここで、オブジェクトはメモリアドレスである。また、オブジェクト追跡テーブルは、複数のメモリイベントに関する複数のオブジェクト統計値を維持する。さらに、複数のオブジェクト統計値は、メモリ使用の決定を最適化するために使用される。メモリコントローラは、関連するメモリイベントの発生に関するオブジェクト統計値のテーブルエントリを更新する。オブジェクト及びタグは、メモリ割り当て命令に関連付けられてもよい。オブジェクト及びタグは、変数定義に関連付けられてもよい。タグは、メモリ割り当て命令を受信したときにオブジェクトに関連付けられてもよい。オブジェクトは、オブジェクトの記憶に関するオブジェクト割り当て命令に関連付けられてもよい。さらに、処理装置は、複数のオブジェクト追跡テーブルと、複数のメモリコントローラと、を含む。ここで、複数のオブジェクト追跡テーブルのうち何れか１つと、複数のメモリコントローラのうち何れか１つと、の間に１対１の対応関係が存在してもよい。テーブルエントリは、オブジェクト及びタグに関するオブジェクト追跡テーブルの各々に入力される。タグは、オブジェクト識別パラメータのプールから選択される１つのオブジェクト識別パラメータであってもよいし、オブジェクトに関連するベースポインタに基づくものであってもよい。タグは、プロセス識別子及びスレッド識別子のうち少なくとも１つを含む。オブジェクト及びタグが少なくとも所定の回数アクセスされた場合、テーブルエントリが追加される。
【００３５】
概して、コンピュータ可読記憶媒体は、処理装置で実行されると、オブジェクトを追跡する方法を処理装置に実行させる命令を含む。この方法は、タグを、メモリアドレスであるオブジェクトに関連付けることと、テーブルエントリを、オブジェクト及びタグに関するオブジェクト追跡テーブルに追加することであって、オブジェクト追跡テーブルは、複数のメモリイベントに関する複数のオブジェクト統計値を維持する、ことと、メモリコントローラによって、関連するメモリイベントの発生に関するオブジェクト統計値を更新することと、メモリ使用の決定を最適化するために、複数のオブジェクト統計値を提供することと、を含む。タグは、オブジェクト識別パラメータのプールから選択された１つのオブジェクト識別パラメータであってもよいし、オブジェクトに関連するベースポインタに基づくものであってもよい。タグは、プロセス識別子及びスレッド識別子のうち少なくとも１つを含む。オブジェクト及びタグは、メモリ割り当て命令に関連付けられてもよい。オブジェクトは、オブジェクトの記憶に関するオブジェクト割り当て命令に関連付けられてもよい。
【００３６】
概して、本明細書で説明された実施態様を限定するものではないが、コンピュータ可読記憶媒体は、処理装置で実行されると、タグ付きオブジェクトを追跡する方法を処理装置に実行させる命令を含む。
【００３７】
本明細書の開示に基づいて多くの変形が可能になることを理解されたい。特徴及び要素は、特定の組み合わせで上記に説明されているが、各特徴又は要素は、他の特徴及び要素なしに単独で、又は、他の特徴及び要素を伴う若しくは伴わない様々な組み合わせで使用されてもよい。
【００３８】
提供された方法は、汎用コンピュータ、プロセッサ又はプロセッサコアで実施されてもよい。好適なプロセッサには、例として、汎用プロセッサ、専用プロセッサ、従来のプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、複数のマイクロプロセッサ、ＤＳＰコアに関連する１つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）回路、他のタイプの集積回路（ＩＣ）、及び／又は、状態機械が含まれる。かかるプロセッサは、処理されたハードウェア記述言語（ＨＤＬ）命令の結果と、ネットリスト（コンピュータ可読記憶媒体に記憶することができる命令）を含む他の中間データと、を用いて製造プロセスを構成することによって製造することができる。かかる処理の結果は、実施態様を実装するプロセッサを製造するために半導体製造プロセスで使用されるマスクワークであってもよい。
【００３９】
本明細書で提供された方法又はフローチャートは、汎用コンピュータ又はプロセッサによる実行のために、非一時的なコンピュータ可読記憶媒体に組み込まれたコンピュータプログラム、ソフトウェア、又は、ファームウェアで実施されてもよい。非一時的なコンピュータ可読記憶媒体の例には、読み取り専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク及びリムーバブルディスク等の磁気媒体、光磁気媒体、並びに、ＣＤ−ＲＯＭディスク及びデジタル多用途ディスク（ＤＶＤ）等の光媒体が含まれる。
【図１】
2019516179.tif 000003
【図２】
2019516179.tif 000004
【図３】
2019516179.tif 000005
【国際調査報告】
2019516179.tif 000006
2019516179.tif 000007