(57)【要約】【課題】メモリアクセス解析処理の処理効率を向上させ、且つ、所要時間を短縮するためのメモリアクセス解析装置及びメモリアクセス解析プログラムを提供する。【解決手段】プログラムの実行中に発生するメモリアクセスを解析するメモリアクセス解析装置１０。メモリアクセス解析装置１０は、メモリアクセスの対象となったメモリアクセスアドレスを含むメモリアクセストレース情報を取得するメモリアクセストレース情報取得部１０４ａと、メモリアクセス毎に、キャッシュヒットに必要なキャッシュ容量を示すキャッシュ容量指標を取得するキャッシュ容量指標取得部１０４ｂと、キャッシュ容量指標取得部１０４ｂによって取得されたキャッシュ容量指標を出力する出力部１０８と、を備えている。【選択図】図２
2010146081.tif 000002
【特許請求の範囲】
【請求項１】
プログラムの実行中に発生するメモリアクセスを解析するメモリアクセス解析装置において、
前記メモリアクセスの対象となったメモリアクセスアドレスを含むメモリアクセストレース情報を取得するメモリアクセストレース情報取得部と、
前記メモリアクセス毎に、キャッシュヒットに必要なキャッシュ容量を示すキャッシュ容量指標を取得するキャッシュ容量指標取得部と、
前記キャッシュ容量指標取得部によって取得されたキャッシュ容量指標を出力する出力部と、
を備えることを特徴とするメモリアクセス解析装置。
【請求項２】
前記キャッシュ容量指標取得部によって取得されたキャッシュ容量指標毎に、アクセス回数の度数を集計する集計部をさらに備え、
前記出力部は、前記集計部の集計結果をさらに出力する
請求項１に記載のメモリアクセス解析装置。
【請求項３】
前記メモリアクセストレース情報取得部は、前記メモリアクセス毎に、キャッシュミスが発生したか否かを示すキャッシュミス情報をさらに含むメモリアクセストレース情報を取得し、
前記キャッシュ容量指標取得部によって取得されたキャッシュ容量指標毎に、キャッシュミスの度数を集計する集計部を、さらに備え、
前記出力部は、前記集計部の集計結果をさらに出力する
請求項１に記載のメモリアクセス解析装置。
【請求項４】
前記メモリアクセストレース情報取得部は、前記メモリアクセスの発生源を示すメモリアクセス発生源情報をさらに含むメモリアクセストレース情報を取得し、
前記集計部は、前記キャッシュ容量指標取得部によって取得されたキャッシュ容量指標毎に、前記メモリアクセスの発生源の度数を集計する
請求項２又は３に記載のメモリアクセス解析装置。
【請求項５】
プログラムの実行中に発生するメモリアクセスを解析するメモリアクセス解析処理をコンピュータに実行させるメモリアクセス解析プログラムにおいて、
前記メモリアクセスの対象となったメモリアクセスアドレスを含むメモリアクセストレース情報を取得するメモリアクセストレース情報取得命令と、
前記メモリアクセス毎に、キャッシュヒットに必要なキャッシュ容量を示すキャッシュ容量指標を取得するキャッシュ容量指標取得命令と、
前記前記キャッシュ容量指標取得命令によって取得されたキャッシュ容量指標を出力する出力命令と、
を備えることを特徴とするメモリアクセス解析プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムの性能を計測するために使用されるメモリアクセス解析装置及びメモリアクセス解析プログラムに関し、特に、キャッシュによって影響を受けるメモリアクセスを解析するために使用されるメモリアクセス解析装置及びメモリアクセス解析プログラムに関する。
【背景技術】
【０００２】
一般的なメモリアクセス解析技術は、キャッシュを有するプロセッサシステムにおいて、プログラムの実行中に発生するメモリアクセスのキャッシュヒットに必要なキャッシュ容量を算出するものである。
【０００３】
従来のメモリアクセス解析技術の第１例として、キャッシュ容量を変更しながらプログラムの実行を複数回繰り返すことによって、キャッシュヒットとキャッシュミスとの境界線となるキャッシュ容量を算出する方法が知られている。
【０００４】
また、従来のメモリアクセス解析技術の第２例として、１回のプログラムの実行においてメモリアクセスのログを取得し、キャッシュ容量を変更しながらトレースシミュレーションを複数回繰り返し、キャッシュヒットとキャッシュミスとの境界線となるキャッシュ容量を算出する方法も知られている（特許文献１及び非特許文献１を参照）。
【０００５】
しかしながら、上記従来のメモリアクセス解析技術は、何れも、ユーザがキャッシュ容量を変更しながら試行を複数回繰り返すことを前提とするものである。すなわち、従来のメモリアクセス解析技術の第１例では、プログラムの実行を複数回繰り返す必要がある。また、従来のメモリアクセス解析技術の第２例では、キャッシュモデルのみのシミュレーションを複数回繰り返す必要がある。従って、従来のメモリアクセス解析技術には、メモリアクセス解析処理の処理効率が低下し、且つ、所要時間が長くなるという問題がある。
【特許文献１】特開２００１−２４９８２９号公報
【非特許文献１】M. D. Hill. Aspects of Cache Memory and Instruction Buffer Performance. PhD thesis, University of California, Berkeley, 1987.
【発明の開示】
【発明が解決しようとする課題】
【０００６】
本発明の目的は、メモリアクセス解析処理の処理効率を向上させ、且つ、所要時間を短縮するためのメモリアクセス解析装置及びメモリアクセス解析プログラムを提供することである。
【課題を解決するための手段】
【０００７】
本発明の第１態様によれば、
プログラムの実行中に発生するメモリアクセスを解析するメモリアクセス解析装置において、
前記メモリアクセスの対象となったメモリアクセスアドレスを含むメモリアクセストレース情報を取得するメモリアクセストレース情報取得部と、
前記メモリアクセス毎に、キャッシュヒットに必要なキャッシュ容量を示すキャッシュ容量指標を取得するキャッシュ容量指標取得部と、
前記キャッシュ容量指標取得部によって取得されたキャッシュ容量指標を出力する出力部と、
を備えることを特徴とするメモリアクセス解析装置が提供される。
【０００８】
本発明の第２態様によれば、
プログラムの実行中に発生するメモリアクセスを解析するメモリアクセス解析処理をコンピュータに実行させるメモリアクセス解析プログラムにおいて、
前記メモリアクセスの対象となったメモリアクセスアドレスを含むメモリアクセストレース情報を取得するメモリアクセストレース情報取得命令と、
前記メモリアクセス毎に、キャッシュヒットに必要なキャッシュ容量を示すキャッシュ容量指標を取得するキャッシュ容量指標取得命令と、
前記前記キャッシュ容量指標取得命令によって取得されたキャッシュ容量指標を出力する出力命令と、
を備えることを特徴とするメモリアクセス解析プログラムが提供される。
【発明の効果】
【０００９】
本発明によれば、メモリアクセス解析処理の処理効率を向上させ、且つ、所要時間を短縮することができる。
【発明を実施するための最良の形態】
【００１０】
以下、本発明の実施形態について図面を参照して説明する。なお、以下の実施形態は、本発明の実施の一態様であって、本発明の範囲を限定するものではない。
【００１１】
（第１実施形態）
本発明の第１実施形態について説明する。本発明の第１実施形態は、キャッシュヒットに必要なキャッシュ容量指標を出力するメモリアクセス解析装置の例である。
【００１２】
本発明の第１実施形態に係るメモリアクセス解析装置１０の構成について図１及び図２を参照して説明する。図１は、本発明の第１実施形態に係るメモリアクセス解析システムの構成を示すブロック図である。図２は、本発明の第１実施形態に係る図１に示すメモリアクセス解析装置１０の構成を示すブロック図である。
【００１３】
図１に示すように、メモリアクセス解析システムは、メモリアクセス解析装置１０と、メモリアクセス装置２０と、メモリ３０と、を備えている。メモリアクセス解析装置１０は、メモリアクセス装置２０のプログラムの実行中に発生するメモリアクセスを解析するように構成されている。メモリアクセス装置２０は、所定のプログラムを実行して、データの読み出し又は書き込みを行うために、メモリ３０に対するメモリアクセスを実行するように構成されている。例えば、メモリアクセス解析装置１０は、コンピュータによって実現される。また、メモリアクセス装置２０及びメモリ３０は、ハードウェアによって実現されてもよいし、ソフトウェア（メモリアクセス解析装置１０上で動作するシミュレータ）によって実現されてもよい。
【００１４】
図２に示すように、メモリアクセス解析装置１０は、入力部１０２と、制御部１０４と、記憶部１０６と、出力部１０８と、を備えている。
【００１５】
図２に示すように、入力部１０２は、メモリアクセス解析処理に関する指示をユーザから受け付けて、制御部１０４に送信するように構成されている。例えば、入力部１０２は、キーボード又はネットワークインタフェースによって実現される。
【００１６】
図２に示すように、制御部１０４は、メモリアクセストレース情報取得部１０４ａと、キャッシュ容量指標取得部１０４ｂと、を備えている。メモリアクセストレース情報取得部１０４ａは、メモリアクセスの対象となったアドレス（以下、「メモリアクセスアドレス」という）と、キャッシュミスが発生したか否かを示すキャッシュミス情報と、メモリアクセスの発生源を示すメモリアクセス発生源情報（例えば、メモリアクセスが発生した時点のプログラムカウンタの値、メモリアクセスを発生させたプログラムの関数名、及びメモリアクセスを発生させたタスクを識別するタスク識別子（例えば、タスク名、タスクＩＤなど）の少なくとも１つ）と、を含むメモリアクセストレース情報を取得するように構成されている。キャッシュ容量指標取得部１０４ｂは、メモリアクセストレース情報取得部１０４ａによって取得されたメモリアクセストレース情報のメモリアクセス毎に、同じアドレスに対する前回のアクセス以降のメモリアクセスアドレスの種類の数（重複するメモリアクセスアドレスを含まない数）をキャッシュヒットに必要なキャッシュ容量を示すキャッシュ容量指標として取得するように構成されている。例えば、制御部１０４は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）によって実現される。
【００１７】
図２に示すように、記憶部１０６は、メモリアクセス解析プログラム１０６ａを記憶している。メモリアクセス解析プログラム１０６ａは、制御部１０４によって実行されるプログラムであって、メモリアクセストレース情報取得部１０４ａを実現するメモリアクセストレース情報取得命令と、キャッシュ容量指標取得部１０４ｂを実現するキャッシュ容量指標取得命令と、を備えている。また、記憶部１０６は、制御部１０４のワーキングメモリとしても機能するように構成されている。なお、記憶部１０６は、メモリアクセス装置２０及びメモリ３０を実現するシミュレーションプログラムを記憶してもよい。例えば、記憶部１０６は、ハードディスク又はフラッシュメモリによって実現される。
【００１８】
図２に示すように、出力部１０８は、メモリアクセス解析処理の解析結果（キャッシュ容量指標取得部１０４ｂによって取得されたキャッシュ容量指標）を出力するように構成されている。例えば、出力部１０８は、ディスプレイ又はネットワークインタフェースによって実現される。
【００１９】
本発明の第１実施形態に係るメモリアクセス解析装置１０の動作について図３乃至図６を参照して説明する。図３は、本発明の第１実施形態に係るメモリアクセス解析処理の処理手順を示すフローチャートである。図４は、本発明の第１実施形態に係るメモリアクセストレース情報のデータ構造を示す概略図である。図５は、本発明の第１実施形態に係る図３に示すキャッシュ容量指標取得処理（Ｓ３０３）の処理手順を示すフローチャートである。図６は、本発明の第１実施形態に係る図４に示すメモリアクセストレース情報に対応するキャッシュ容量指標のデータ構造を示す概略図である。
【００２０】
図３に示すように、メモリアクセス解析処理では、はじめに、メモリアクセストレース情報取得工程（Ｓ３０１）が行われる。メモリアクセストレース情報取得工程（Ｓ３０１）では、メモリアクセストレース情報取得部１０４ａが、メモリアクセス装置２０のプログラムの実行中に発生するメモリアクセスを発生順に記録するとともに、メモリアクセス毎に、キャッシュミス情報及びメモリアクセス発生源情報を記録して、メモリアクセストレース情報を取得する。図４は、複数のメモリアクセスから構成されるメモリアクセストレース情報を示している。図４に示すように、メモリアクセストレース情報は、メモリアクセスＩＤと、メモリアクセスアドレスと、キャッシュミス情報と、メモリアクセスの発生源を示すメモリアクセス発生源情報と、を含んでいる。メモリアクセスＩＤは、メモリアクセスの発生順に付加される情報であって、メモリアクセスの識別情報である。キャッシュミス情報は、キャッシュミスが発生したか否かを示す情報である。メモリアクセス発生源情報は、メモリアクセスが発生した時点のプログラムカウンタの値、メモリアクセスを発生させたプログラムの関数名、及びメモリアクセスを発生させたタスクを識別するタスク識別子（例えば、タスク名、タスクＩＤなど）の少なくとも１つを含んでいる。
【００２１】
次に、図３に示すように、初期化工程（Ｓ３０２）が行われる。初期化工程（Ｓ３０２）では、制御部１０４が、図４に示すメモリアクセストレース情報中の注目するメモリアクセスＩＤを特定する変数「注目メモリアクセスＩＤ」に初期値１をセットする。
【００２２】
次に、キャッシュ容量指標取得処理（Ｓ３０３）が行われる。ここで、キャッシュ容量指標取得処理（Ｓ３０３）について説明する。
【００２３】
図５に示すように、キャッシュ容量指標取得処理（Ｓ３０３）では、はじめに、初期化工程（Ｓ５０１）が行われる。初期化工程（Ｓ５０１）では、キャッシュ容量指標取得部１０４ｂが、変数「注目メモリアクセスＩＤ２」に変数「注目メモリアクセスＩＤ」の値をセットし、集合「出現アドレス」を空集合にし、変数「注目メモリアクセスアドレス」に変数「注目メモリアクセスＩＤ」に対応するメモリアクセスアドレスをセットする。なお、「注目メモリアクセスＩＤ」の値は、図３に示す初期化工程（Ｓ３０２）においてセットされた値である。
【００２４】
次に、図５に示すように、キャッシュ容量取得指標部１０４ｂが、変数「注目メモリアクセスアドレス２」に変数「注目メモリアクセスＩＤ２」に対応するメモリアクセスアドレスをセットする（Ｓ５０２）。
【００２５】
次に、変数「注目メモリアクセスアドレス２」にセットされた値が、集合「出現アドレス」に含まれているか否かを判定する（Ｓ５０３）。変数「注目メモリアクセスアドレス２」にセットされた値が集合「出現アドレス」に含まれている場合には（Ｓ５０３−ＹＥＳ）、Ｓ５０４へ進み、変数「注目メモリアクセスアドレス２」にセットされた値が集合「出現アドレス」に含まれていない場合には（Ｓ５０３−ＮＯ）、キャッシュ容量取得指標部１０４ｂが、「注目メモリアクセスアドレス２」にセットされた値を集合「出現アドレス」に追加して（Ｓ５１１）、Ｓ５０４へ進む。その結果、集合「出現アドレス」は、過去にアクセスされたメモリアクセスアドレスの種類を要素とする集合となる。
【００２６】
次に、図５に示すように、キャッシュ容量取得指標部１０４ｂが、「注目メモリアクセスアドレス２」にセットされた値が、変数「注目メモリアクセスアドレス」と同一であるか否かを判定する（Ｓ５０４）。両者が同一である場合には（Ｓ５０４−ＹＥＳ）、キャッシュ容量取得指標部１０４ｂが、キャッシュ容量指標に集合「出現アドレス」の要素数をセットする（Ｓ５０５）。その結果、キャッシュ容量指標は、キャッシュヒットに必要なキャッシュ容量を示す情報となる。一方、両者が同一でない場合には（Ｓ５０４−ＮＯ）、キャッシュ容量取得指標部１０４ｂが、変数「注目メモリアクセスＩＤ２」をデクリメントする（Ｓ５２１）。
【００２７】
図５に示すように、Ｓ５２１の次に、キャッシュ容量取得指標部１０４ｂが、変数「注目メモリアクセスＩＤ２」の値が０であるか否かを判定する（Ｓ５２２）。変数「注目メモリアクセスＩＤ２」の値が０である場合には（Ｓ５２２−ＹＥＳ）、キャッシュ容量取得指標部１０４ｂが、キャッシュ容量指標に、初期参照ミス（Ｃｏｍｐｕｌｓｏｒｙ  Ｍｉｓｓ）を示す任意の値（例えば、“０ｘＦＦＦＦＦＦＦＦ”）をセットし（Ｓ５２３）、変数「注目メモリアクセスＩＤ２」の値が０でない場合には（Ｓ５２２−ＮＯ）、Ｓ５０２へ戻る。
【００２８】
図５に示すように、キャッシュ容量指標取得処理（Ｓ３０３）は、Ｓ５０５又はＳ５２３の後（すなわち、キャッシュ容量指標に値がセットされた後）に完了する。
【００２９】
図３に示すように、キャッシュ容量指標取得処理（Ｓ３０３）は、全てのメモリアクセスＩＤについて完了するまで繰り返し行われる（Ｓ３０４−ＮＯ，Ｓ３１１）。その結果、図６に示すように、全てのメモリアクセスに対してキャッシュ容量指標が得られる。
【００３０】
次に、図３に示すように、出力工程（Ｓ３０５）が行われる。出力工程（Ｓ３０５）では、出力部１０８が、キャッシュ容量指標取得部１０４ｂによって取得されたキャッシュ容量指標を出力する。
【００３１】
図３に示すように、メモリアクセス解析処理は、出力工程（Ｓ３０５）の後に完了する。
【００３２】
キャッシュ容量指標の意味について図４、及び図６乃至図８を参照して説明する。図７及び図８は、キャッシュ容量指標の意味を説明する概略図である。
【００３３】
図６に示すキャッシュ容量指標は、図４に示すメモリアクセストレース情報のメモリアクセス毎に、同じアドレスに対する前回のアクセス以降のメモリアクセスアドレスの数を示している。換言すると、図６に示すキャッシュ容量指標は、フルアソシアティブキャッシュを仮定した場合に、キャッシュヒットに必要なキャッシュ容量を示している。以下、キャッシュ容量が８ＫＢである場合の例を説明する。
【００３４】
図７に示すように、所定の関数群１、関数“Ｆｕｎｃ  Ｂ”、関数“Ｆｕｎｃ  Ａ”、関数“Ｆｕｎｃ  Ｂ”、関数“Ｆｕｎｃ  Ａ”、所定の関数群２という順番で呼ばれた場合には、実行中の命令（関数“Ｆｕｎｃ  Ａ”の先頭の命令）へのアクセスについてのキャッシュ容量指標は、関数“Ｆｕｎｃ  Ａ”の実行中のキャッシュヒットに必要なキャッシュ容量（３ＫＢ）と、関数“Ｆｕｎｃ  Ｂ” の実行中のキャッシュヒットに必要なキャッシュ容量（４ＫＢ）と、の合計（７ＫＢ）になる。一方、キャッシュ容量が８ＫＢであれば、キャッシュには、関数“Ｆｕｎｃ  Ｂ”の最後の命令（１ＫＢ）と、関数“Ｆｕｎｃ  Ａ”の命令（３ＫＢ）と、関数“Ｆｕｎｃ  Ｂ”の命令（４ＫＢ）と、が存在する。すなわち、キャッシュには、実行中の命令のキャッシュヒットに必要な関数“Ｆｕｎｃ  Ａ”の先頭の命令が存在する。換言すると、キャッシュ容量（８ＫＢ）がキャッシュ容量指標（７ＫＢ）より大きいので、実行中の命令へのアクセスは、キャッシュヒットとなる。
【００３５】
一方、図８に示すように、所定の関数群１、関数“Ｆｕｎｃ  Ａ”、関数“Ｆｕｎｃ  Ｂ”、関数“Ｆｕｎｃ  Ｃ”、関数“Ｆｕｎｃ  Ａ”、所定の関数群２という順で呼ばれた場合には、実行中の命令（関数“Ｆｕｎｃ  Ａ”の先頭の命令）へのアクセスについてのキャッシュ容量指標は、関数“Ｆｕｎｃ  Ａ”の実行中のキャッシュヒットに必要なキャッシュ容量（３ＫＢ）と、関数“Ｆｕｎｃ  Ｂ”の実行中のキャッシュヒットに必要なキャッシュ容量（４ＫＢ）と、関数“Ｆｕｎｃ  Ｃ”の実行中のキャッシュヒットに必要なキャッシュ容量（３ＫＢ）と、の合計になる。一方、キャッシュ容量が８ＫＢであれば、キャッシュには、関数“Ｆｕｎｃ  Ａ”の最後の命令（１ＫＢ）と、関数“Ｆｕｎｃ  Ｂ”の命令（４ＫＢ）と、関数“Ｆｕｎｃ  Ｃ”の命令（３ＫＢ）と、が存在する。すなわち、キャッシュには、実行中の命令のキャッシュヒットに必要な関数“Ｆｕｎｃ  Ａ”の先頭の命令が存在しない。換言すると、キャッシュ容量（８ＫＢ）がキャッシュ容量指標（１０ＫＢ）より小さいので、実行中の命令へのアクセスは、キャッシュミスとなる。
【００３６】
図７に示す例では、関数“Ｆｕｎｃ  Ａ”が呼ばれる間隔が比較的短いためにキャッシュ容量指標が比較的小さいので、キャッシュヒットに必要なキャッシュ容量も比較的小さいことが分かる。一方、図８に示す例では、関数“Ｆｕｎｃ  Ａ”が呼ばれる間隔が比較的長いためにキャッシュ容量指標が比較的大きいので、キャッシュヒットに必要なキャッシュ容量も比較的大きいことが分かる。
【００３７】
本発明の第１実施形態によれば、図５に示すように、キャッシュ容量指標取得部１０４ｂが、キャッシュヒットに必要なキャッシュ容量を示すキャッシュ容量指標を取得するので、ユーザは、キャッシュ容量を変更しながら試行を繰り返すことなく、キャッシュヒットに必要なキャッシュ容量を把握することができる。従って、メモリアクセス解析処理の処理効率が向上し、且つ、所要時間が短縮される。
【００３８】
本発明の第１実施形態の変形例について説明する。本発明の第１実施形態の変形例は、図３に示すキャッシュ容量指標取得処理（Ｓ３０３）の変形例である。
【００３９】
本発明の第１実施形態の変形例に係るメモリアクセス解析装置１０の動作について図９及び図１０を参照して説明する。図９は、本発明の第１実施形態の変形例に係る図３に示すキャッシュ容量指標取得処理（Ｓ３０３）の処理手順を示すフローチャートである。図１０は、本発明の第１実施形態の変形例に係る図４に示すメモリアクセストレース情報に対応するアドレスリストのデータ構造の遷移を示す概略図である。なお、図１０において、矢印中の数は変数「注目メモリアクセスＩＤ」にセットされた値を示す。
【００４０】
図９に示すように、キャッシュ容量指標取得処理（Ｓ３０３）では、はじめに、初期化工程（Ｓ９０１）が行われる。初期化工程（Ｓ９０１）では、キャッシュ容量指標取得部１０４ｂが、変数「カウント」に１をセットし、変数「アドレスリストの注目位置」にアドレスリストの先頭の要素の位置を示す値をセットし、変数「注目メモリアクセスアドレス」に変数「注目メモリアクセスＩＤ」に対応するメモリアクセスアドレスをセットする。なお、変数「注目メモリアクセスＩＤ」にセットされた値は、図３に示す初期化工程（Ｓ３０２）においてセットされた値である。
【００４１】
次に、図９に示すように、キャッシュ容量取得指標部１０４ｂが、変数「アドレスリストの注目位置」が示す位置に要素があるか否かを判定する（Ｓ９０２）。変数「アドレスリストの注目位置」が示す位置に要素がある場合には（Ｓ９０２−ＹＥＳ）、Ｓ９０３へ進み、変数「アドレスリストの注目位置」が示す位置に要素がない場合には（Ｓ９０２−ＮＯ）、キャッシュ要領指標取得部１０４ｂが、キャッシュ容量指標に初期参照ミスを示す値“ＣＯＭＰＵＬＳＯＲＹ”をセットして（Ｓ９１１）、変数「注目メモリアクセスアドレス」をアドレスリストの先頭に追加する（Ｓ９１２）。
【００４２】
次に、図９に示すように、キャッシュ容量指標取得部１０４ｂが、変数「注目メモリアクセスアドレス２」に変数「アドレスリストの注目位置」が示す位置に存在するメモリアクセスアドレスをセットする（Ｓ９０３）。次に、変数「注目メモリアクセスアドレス２」が、変数「注目メモリアクセスアドレス」と同一であるか否かを判定する（Ｓ９０４）。両者が同一である場合には（Ｓ９０４−ＹＥＳ）、キャッシュ容量取得指標部１０４ｂが、キャッシュ容量指標に変数「カウント」の値をセットし（Ｓ９０５）、変数「アドレスリストの注目位置」が示す位置に存在する要素をアドレスリストの先頭に移動する（Ｓ９０６）。その結果、キャッシュ容量指標は、キャッシュヒットに必要なキャッシュ容量を示す情報となる。一方、両者が同一でない場合には（Ｓ９０４−ＮＯ）、キャッシュ容量取得指標部１０４ｂが、変数「カウント」をインクリメントし（Ｓ９２１）、変数「アドレスリストの注目位置」を変数「アドレスリストの注目位置」が示す位置の次の要素の位置を示す値に更新して、Ｓ９０２へ戻る。
【００４３】
図９に示すように、キャッシュ容量指標取得処理（Ｓ３０３）は、Ｓ９０６又はＳ９１２の後（すなわち、キャッシュ容量指標に値がセットされ、アドレスリストが更新された後）に完了する。
【００４４】
ここで、図３に示すメモリアクセス解析処理のキャッシュ容量取得処理（Ｓ３０３）が、図９に示すキャッシュ容量指標取得処理（Ｓ３０３）の手順で行われた場合の具体例について説明する。なお、初回のキャッシュ容量取得処理（Ｓ３０３）では、図１０に示すように、アドレスリストの初期状態は、空状態（何も登録されていない状態）である。
【００４５】
図１０に示す例では、注目メモリアクセスＩＤ（１）については、注目メモリアクセスアドレス（０ｘ００１０）が検索される。このとき、アドレスリストは空状態であるので、“ＣＯＭＰＵＬＳＯＲＹ”がキャッシュ容量指標にセットされ（Ｓ９１１）、アドレスリストの先頭に“０ｘ００１０”が追加される（Ｓ９１２）（図１０の矢印１を参照）。
【００４６】
注目メモリアクセスＩＤ（２）については、注目メモリアクセスアドレス（０ｘ００１１）が検索される。このとき、アドレスリストに“０ｘ００１１”が登録されていないので、“ＣＯＭＰＵＬＳＯＲＹ”がキャッシュ容量指標にセットされ（Ｓ９１１）、アドレスリストの先頭に“０ｘ００１１”が追加される（Ｓ９１２）（図１０の矢印２を参照）。
【００４７】
注目メモリアクセスＩＤ（３）については、注目メモリアクセスアドレス（０ｘ００１２）が検索される。このとき、アドレスリストに“０ｘ００１２”が登録されていないので、“ＣＯＭＰＵＬＳＯＲＹ”がキャッシュ容量指標にセットされ（Ｓ９１１）、アドレスリストの先頭に“０ｘ００１２”が追加される（Ｓ９１２）（図１０の矢印３を参照）。
【００４８】
注目メモリアクセスＩＤ（４）については、注目メモリアクセスアドレス（０ｘ００８０）が検索される。このとき、アドレスリストに“０ｘ００８０”が登録されていないので、“ＣＯＭＰＵＬＳＯＲＹ”がキャッシュ容量指標にセットされ（Ｓ９１１）、アドレスリストの先頭に“０ｘ００８０”が追加される（Ｓ９１２）（図１０の矢印３を参照）。注目メモリアクセスＩＤ（５）については、注目メモリアクセスアドレス（０ｘ００１１）が検索される。このとき、アドレスリストの３番目に“０ｘ００１１”が登録されているので、キャッシュ容量指標に３がセットされ（Ｓ９０５）、アドレスリストの先頭に“０ｘ００１１”が移動する（Ｓ９０６）（図１０の矢印４を参照）。
【００４９】
このような処理が全てのメモリアクセスアドレスについて繰り返された結果、図６に示すキャッシュ容量指標が得られる。
【００５０】
本発明の第１実施形態の変形例によれば、図９に示すように、重複するアドレスを含まないアドレスリスト（図１０を参照）を用いてキャッシュ容量指標取得処理（Ｓ３０３）が行われる。従って、本発明の第１実施形態に比べて、メモリアクセス解析処理の処理効率がさらに向上し、且つ、所要時間がさらに短縮される。
【００５１】
（第２実施形態）
本発明の第２実施形態について説明する。本発明の第２実施形態は、キャッシュ容量指標に加えて、キャッシュ容量指標毎のアクセス回数の度数を、キャッシュ容量指標の大きいものから累積した度数（累積度数）を出力するメモリアクセス解析装置の例である。なお、上述した実施形態と同様の内容についての説明は省略する。
【００５２】
本発明の第２実施形態に係るメモリアクセス解析装置１０の構成について図１１を参照して説明する。図１１は、本発明の第２実施形態に係る図１に示すメモリアクセス解析装置１０の構成を示すブロック図である。
【００５３】
図１１に示すように、メモリアクセス解析装置１０は、入力部１０２と、制御部１０４と、記憶部１０６と、出力部１０８と、を備えている。入力部１０２は、本発明の第１実施形態と同様である。
【００５４】
図１１に示すように、制御部１０４は、メモリアクセストレース情報取得部１０４ａと、キャッシュ容量指標取得部１０４ｂと、集計部１０４ｃと、を備えている。メモリアクセストレース情報取得部１０４ａ及びキャッシュ容量指標取得部１０４ｂは、本発明の第１実施形態と同様である。集計部１０４ｃは、キャッシュ容量指標取得部１０４ｂによって取得されたキャッシュ容量指標毎に、アクセス回数の度数（累積度数）を集計するように構成されている。例えば、制御部１０４は、ＣＰＵによって実現される。
【００５５】
図１１に示すように、記憶部１０６は、メモリアクセス解析プログラム１０６ａを記憶している。メモリアクセス解析プログラム１０６ａは、制御部１０４によって実行されるプログラムであって、メモリアクセストレース情報取得部１０４ａを実現するメモリアクセストレース情報取得命令と、キャッシュ容量指標取得部１０４ｂを実現するキャッシュ容量指標取得命令と、集計部１０４ｃを実現する集計命令と、を備えている。また、記憶部１０６は、制御部１０４のワーキングメモリとしても機能するように構成されている。なお、記憶部１０６は、メモリアクセス装置２０及びメモリ３０を実現するシミュレーションプログラムを記憶してもよい。例えば、記憶部１０６は、ハードディスク又はフラッシュメモリによって実現される。
【００５６】
図１１に示すように、出力部１０８は、メモリアクセス解析処理の解析結果（キャッシュ容量指標取得部１０４ｂによって取得されたキャッシュ容量指標及び集計部１０４ｃの集計結果）を出力するように構成されている。例えば、出力部１０８は、ディスプレイ又はネットワークインタフェースによって実現される。
【００５７】
本発明の第２実施形態に係るメモリアクセス解析装置１０の動作について図１２乃至図１４を参照して説明する。図１２は、本発明の第２実施形態に係るメモリアクセス解析処理の処理手順を示すフローチャートである。図１３は、本発明の第２実施形態に係る累積度数分布情報のデータ構造を示す概略図である。図１４は、本発明の第２実施形態に係る図１３に示す累積度数分布情報から得られるグラフである。
【００５８】
図１２に示すように、メモリアクセス解析処理では、はじめに、メモリアクセストレース情報取得工程（Ｓ１２０１）及び初期化工程（Ｓ１２０２）が本発明の第１実施形態と同様に行われ（図３を参照）、キャッシュ容量指標取得処理（Ｓ１２０３）が本発明の第１実施形態と同様に全てのメモリアクセスＩＤについて完了するまで繰り返し行われる（Ｓ１２０４−ＮＯ、Ｓ１２１１）（図５又は図９を参照）。
【００５９】
次に、図１２に示すように、集計工程（Ｓ１２０５）が行われる。集計工程（Ｓ１２０５）では、集計部１０４ｃが、キャッシュ容量指標毎に、アクセス回数の度数を集計し、その集計結果を累積して、累積度数分布を取得する。ここで、集計部１０４ｃは、キャッシュ容量指標毎にアクセス回数を集計したものをｃｏｕｎｔ配列で生成し、そのｃｏｕｎｔ配列を累積したものをａｃｃ＿ｃｏｕｎｔ配列で生成して、累積度数分布を取得する。ａｃｃ＿ｃｏｕｎｔ配列で生成されたキャッシュ容量指標の値は、キャッシュ容量がそのキャッシュ容量指標に等しい場合のキャッシュミスの回数に相当する。例えば、ａｃｃ＿ｃｏｕｎｔ［５］の値は、キャッシュ容量が５である場合のキャッシュミス回数に相当する。なお、ここでは、簡単のために、集計区間をキャッシュ容量指標１つ刻みとしてアクセス回数の累積度数を集計する例について説明したが、これに限られるものではない。本発明の第２実施形態では、集計区間は、実際に使用されるシステムのキャッシュ容量に基づいて任意の区間（例えば、１以上２未満、２以上４未満、４以上８未満、４Ｋ以上８Ｋ未満）であってもよい。その結果、図１３に示す累積度数分布情報及び図１４に示すグラフが得られる。図１３に示すように、累積度数分布情報は、キャッシュ容量指標毎の度数及び累積度数を含んでいる。
【００６０】
次に、図１２に示すように、出力工程（Ｓ１２０６）が行われる。出力工程（Ｓ１２０６）では、出力部１０８が、キャッシュ容量指標取得部１０４ｂによって取得されたキャッシュ容量指標及び集計部１０４ｃの集計結果を出力する。例えば、出力部１０８は、図１３に示す累積度数分布情報及び図１４に示すグラフを出力する。
【００６１】
図１２に示すように、メモリアクセス解析処理は、出力工程（Ｓ１２０６）の後に完了する。
【００６２】
本発明の第２実施形態によれば、図１２に示すように、集計部１０４ｃが、キャッシュ容量指標取得部１０４ｂによって取得されたキャッシュ容量指標に加えて、キャッシュ容量指標毎に、アクセス回数の度数及び累積度数を集計するので、ユーザは、キャッシュ容量を変更しながら試行を繰り返すことなく、キャッシュ容量指標の累積度数分布を把握することができる。従って、本発明の第１実施形態に比べて、メモリアクセス解析処理の処理効率がさらに向上し、且つ、所要時間がさらに短縮される。例えば、ユーザは、あるキャッシュ容量におけるキャッシュヒット回数やキャッシュミス回数を見積もることもできるし、キャッシュミス回数が所定の目標値以下にするために必要なキャッシュ容量を見積もることもできる。例えば、図１４に示すグラフに対して、例えば１２８ＫＢであれば、横軸のキャッシュ容量が１２８ＫＢとなる点とその点に対応する縦軸の値からキャッシュミス回数（約１０００００回）が得られる。同様に、縦軸のキャッシュミス回数が目標値となる点とその点に対応する横軸の値からキャッシュミス回数が所定の目標値以下にするために必要なキャッシュ容量が得られる。
【００６３】
（第３実施形態）
本発明の第３実施形態について説明する。本発明の第３実施形態は、キャッシュ容量指標に加えて、キャッシュミスとなるメモリアクセス毎に、キャッシュ容量指標の度数を出力するメモリアクセス解析装置の例である。なお、上述した実施形態と同様の内容についての説明は省略する。
【００６４】
本発明の第３実施形態に係るメモリアクセス解析装置１０の構成について図１１を参照して説明する。
【００６５】
図１１に示すように、メモリアクセス解析装置１０は、入力部１０２と、制御部１０４と、記憶部１０６と、出力部１０８と、を備えている。入力部１０２は、本発明の第１実施形態と同様であり、記憶部１０６及び出力部１０８は、本発明の第２実施形態と同様である。
【００６６】
図１１に示すように、制御部１０４は、メモリアクセストレース情報取得部１０４ａと、キャッシュ容量指標取得部１０４ｂと、集計部１０４ｃと、を備えている。メモリアクセストレース情報取得部１０４ａ及びキャッシュ容量指標取得部１０４ｂは、本発明の第１実施形態と同様である。集計部１０４ｃは、キャッシュ容量指標取得部１０４ｂによって取得されたキャッシュ容量指標毎に、キャッシュミスの度数を集計するように構成されている。例えば、制御部１０４は、ＣＰＵによって実現される。
【００６７】
本発明の第３実施形態に係るメモリアクセス解析装置１０の動作について図４、図６、図１２、及び図１５を参照して説明する。図１５は、本発明の第３実施形態に係る図６に示すキャッシュ容量指標に対応する出力部１０８の出力例を示す概略図である。
【００６８】
図１２に示すように、メモリアクセス解析処理では、はじめに、メモリアクセストレース情報取得工程（Ｓ１２０１）及び初期化工程（Ｓ１２０２）が本発明の第１実施形態と同様に行われ（図３を参照）、キャッシュ容量指標取得処理（Ｓ１２０３）が本発明の第１実施形態と同様に全てのメモリアクセスＩＤについて完了するまで繰り返し行われる（Ｓ１２０４−ＮＯ，Ｓ１２１１）（図５又は図９を参照）。
【００６９】
次に、図１２に示すように、集計工程（Ｓ１２０５）が行われる。集計工程（Ｓ１２０５）では、集計部１０４ｃが、図４に示すキャッシュミス情報に“ミス”がセットされているメモリアクセスＩＤについて、図６に示すキャッシュ容量指標の度数を集計する。
【００７０】
次に、図１２に示すように出力工程（Ｓ１２０６）が行われる。出力工程（Ｓ１２０６）では、出力部１０８が、キャッシュ容量指標取得部１０４ｂによって取得されたキャッシュ容量指標及び集計部１０４ｃの集計結果を出力する。ここで、出力部１０８は、図１５に示すキャッシュ容量指標の度数分布を出力する。図１５は、キャッシュ容量を４と仮定した場合に、キャッシュ容量指標（１乃至４）に含まれるキャッシュミスが衝突性ミスであることを示し、キャッシュ容量指標（５及び６）に含まれるキャッシュミスが容量性ミスであることを示し、キャッシュ容量指標（ＣＯＭＰＵＬＳＯＲＹ）に含まれるキャッシュミスが初期参照ミスであることを示している。
【００７１】
図１２に示すように、メモリアクセス解析処理は、出力工程（Ｓ１２０６）の後に完了する。
【００７２】
本発明の第３実施形態によれば、図１２に示すように、集計部１０４ｃが、キャッシュミスが発生したメモリアクセスＩＤのキャッシュ容量指標の度数分布を集計するので、ユーザは、プログラム全体のキャッシュミスの傾向（キャッシュミスの種類と度数）を容易に把握することができ、ひいては、プログラムを修正するための有効な対策を容易に判断することができる。
【００７３】
（第４実施形態）
本発明の第４実施形態について説明する。本発明の第４実施形態は、キャッシュ容量指標の集計結果と、メモリアクセス発生源情報の集計結果と、を合成して集計するメモリアクセス解析装置の例である。なお、上述した実施形態と同様の内容についての説明は省略する。
【００７４】
本発明の第４実施形態に係るメモリアクセス解析装置１０の構成について図１１を参照して説明する。
【００７５】
図１１に示すように、メモリアクセス解析装置１０は、入力部１０２と、制御部１０４と、記憶部１０６と、出力部１０８と、を備えている。入力部１０２は、本発明の第１実施形態と同様であり、記憶部１０６及び出力部１０８は、本発明の第２実施形態と同様である。
【００７６】
図１１に示すように、制御部１０４は、メモリアクセストレース情報取得部１０４ａと、キャッシュ容量指標取得部１０４ｂと、集計部１０４ｃと、を備えている。メモリアクセストレース情報取得部１０４ａ及びキャッシュ容量指標取得部１０４ｂは、本発明の第１実施形態と同様である。集計部１０４ｃは、メモリアクセス発生源情報（プログラムカウンタの値、プログラムの関数名、及びタスク識別子の少なくとも１つ）毎に、キャッシュ容量指標取得部１０４ｂによって取得されたキャッシュ容量指標の度数（アクセス回数の累積度数又はキャッシュミス回数の度数）を集計するように構成されている。例えば、制御部１０４は、ＣＰＵによって実現される。
【００７７】
本発明の第４実施形態に係るメモリアクセス解析装置１０の動作について図４、図６、図１２、及び図１６を参照して説明する。図１６は、本発明の第４実施形態に係る図６に示すキャッシュ容量指標に対応する出力部１０８の出力例を示す概略図である。
【００７８】
図１２に示すように、メモリアクセス解析処理では、はじめに、メモリアクセストレース情報取得工程（Ｓ１２０１）及び初期化工程（Ｓ１２０２）が本発明の第１実施形態と同様に行われ（図３を参照）、キャッシュ容量指標取得処理（Ｓ１２０３）が本発明の第１実施形態と同様に全てのメモリアクセスＩＤについて完了するまで繰り返し行われる（Ｓ１２０４−ＮＯ、Ｓ１２１１）（図５又は図９を参照）。
【００７９】
次に、図１２に示すように、集計工程（Ｓ１２０５）が行われる。集計工程（Ｓ１２０５）では、集計部１０４ｃが、図６に示すキャッシュ容量指標の度数及び図４に示すメモリアクセストレース情報のメモリアクセス発生源情報の度数（プログラムカウンタの値の度数、プログラムの関数名の度数、及びタスク識別子の度数の少なくとも１つ）を集計し、集計結果（キャッシュ容量指標の度数及びメモリアクセス発生源情報の度数）を合成する。例えば、集計部１０４ｃは、図１６（Ａ）に示すように、プログラムカウンタの値毎にキャッシュ容量指標の度数を示す情報を生成してもよいし、図１６（Ｂ）に示すように、キャッシュ容量指標毎にプログラムカウンタの値の度数が昇順に並べられた情報を生成してもよい。
【００８０】
本発明の第４実施形態によれば、図１２に示すように、集計部１０４ｃが、キャッシュ容量指標の度数と、メモリアクセストレース情報のメモリアクセス発生源情報の度数と、を合成するので、ユーザは、キャッシュミス回数を減少させるためにプログラムを改良するべき箇所の候補を容易に把握することができる。例えば、図１６（Ａ）に示す例では、キャッシュ容量が４の場合には、キャッシュ容量指標（５，６）の度数が比較的多いアドレス（０ｘ００１２）の命令がキャッシュミスを発生させ易い（すなわち、改良するべき箇所の候補である）ことが分かる。
【００８１】
なお、上述した実施形態では、命令フェッチのメモリアクセスの解析について説明したが、本発明の実施形態は、これに限られるものではない。本発明の実施形態は、データへのメモリアクセスや、命令フェッチとデータの両方へのメモリアクセスの解析についても同様に適用することができる。この場合には、図３及び図１２に示すメモリアクセス解析処理は、メモリアクセス解析システム上での命令キャッシュ、データキャッシュ、ユニファイドキャッシュに対して行われる。
【００８２】
上述した実施形態で説明したメモリアクセス解析装置１０の少なくとも一部は、ハードウェアで構成してもよいし、ソフトウェアで構成してもよい。ソフトウェアで構成する場合には、メモリアクセス解析装置１０の少なくとも一部の機能を実現するプログラムをフレキシブルディスクやＣＤ−ＲＯＭ等の記録媒体に収納し、コンピュータに読み込ませて実行させてもよい。記録媒体は、磁気ディスクや光ディスク等の着脱可能なものに限定されず、ハードディスク装置やメモリなどの固定型の記録媒体でもよい。
【００８３】
また、メモリアクセス解析装置１０の少なくとも一部の機能を実現するプログラムを、インターネット等の通信回線（無線通信も含む）を介して頒布してもよい。さらに、同プログラムを暗号化したり、変調をかけたり、圧縮した状態で、インターネット等の有線回線や無線回線を介して、あるいは記録媒体に収納して頒布してもよい。
【００８４】
上述した実施形態は、いずれも一例であって限定的なものではないと考えられるべきである。本発明の技術的範囲は、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。また、上述した各実施形態は、それぞれ、組み合わせて実施することができると考えられるべきである。
【図面の簡単な説明】
【００８５】
【図１】本発明の第１実施形態に係るメモリアクセス解析システムの構成を示すブロック図である。
【図２】本発明の第１実施形態に係る図１に示すメモリアクセス解析装置１０の構成を示すブロック図である。
【図３】本発明の第１実施形態に係るメモリアクセス解析処理の処理手順を示すフローチャートである。
【図４】本発明の第１実施形態に係るメモリアクセストレース情報のデータ構造を示す概略図である。
【図５】本発明の第１実施形態に係る図３に示すキャッシュ容量指標取得処理（Ｓ３０３）の処理手順を示すフローチャートである。
【図６】本発明の第１実施形態に係る図４に示すメモリアクセストレース情報に対応するキャッシュ容量指標のデータ構造を示す概略図である。
【図７】キャッシュ容量指標の意味を説明する概略図である。
【図８】キャッシュ容量指標の意味を説明する概略図である。
【図９】本発明の第１実施形態の変形例に係る図３に示すキャッシュ容量指標取得処理（Ｓ３０３）の処理手順を示すフローチャートである。
【図１０】本発明の第１実施形態の変形例に係る図４に示すメモリアクセストレース情報に対応するアドレスリストのデータ構造の遷移を示す概略図である。
【図１１】本発明の第２実施形態に係る図１に示すメモリアクセス解析装置１０の構成を示すブロック図である。
【図１２】本発明の第２実施形態に係るメモリアクセス解析処理の処理手順を示すフローチャートである。
【図１３】本発明の第２実施形態に係る累積度数分布情報のデータ構造を示す概略図である。
【図１４】本発明の第２実施形態に係る図１３に示す累積度数分布情報から得られるグラフである。
【図１５】本発明の第３実施形態に係る図６に示すキャッシュ容量指標に対応する出力部１０８の出力例を示す概略図である。
【図１６】本発明の第４実施形態に係る図６に示すキャッシュ容量指標に対応する出力部１０８の出力例を示す概略図である。
【符号の説明】
【００８６】
１０  メモリアクセス解析装置
１０２  入力部
１０４  制御部
１０４ａ  メモリアクセストレース情報取得部
１０４ｂ  キャッシュ容量指標取得部
１０４ｃ  集計部
１０６  記憶部
１０６ａ  メモリアクセス解析プログラム
１０８  出力部
２０  メモリアクセス装置
３０  メモリ
【図１】
2010146081.tif 000003
【図２】
2010146081.tif 000004
【図３】
2010146081.tif 000005
【図４】
2010146081.tif 000006
【図５】
2010146081.tif 000007
【図６】
2010146081.tif 000008
【図７】
2010146081.tif 000009
【図８】
2010146081.tif 000010
【図９】
2010146081.tif 000011
【図１０】
2010146081.tif 000012
【図１１】
2010146081.tif 000013
【図１２】
2010146081.tif 000014
【図１３】
2010146081.tif 000015
【図１４】
2010146081.tif 000016
【図１５】
2010146081.tif 000017
【図１６】
2010146081.tif 000018