(57)【要約】【課題】プログラムの実行中にスラッシングが発生したキャッシュラインに関する情報を取得することを可能とするキャッシュ情報出力プログラム、キャッシュ情報出力方法及び情報処理装置を提供する。【解決手段】検証対象プログラムの実行に伴ってアクセスされた複数の配列のデータがそれぞれ格納されたキャッシュラインを比較して、検証対象プログラムの実行に伴って複数の配列のデータが格納された回数が、キャッシュのウェイ数を上回る特定のキャッシュラインが存在するか否かを判定し、特定のキャッシュラインが存在すると判定した場合、特定のキャッシュラインにおいてキャッシュスラッシングが発生した回数を示すカウンタをインクリメントする。【選択図】図３
2018005667.tif 000002
【特許請求の範囲】
【請求項１】
検証対象プログラムの実行に伴ってアクセスされた複数の配列のデータがそれぞれ格納されたキャッシュラインを比較して、前記検証対象プログラムの実行に伴って前記複数の配列のデータが格納された回数が、キャッシュのウェイ数を上回る特定のキャッシュラインが存在するか否かを判定し、
前記特定のキャッシュラインが存在すると判定した場合、前記特定のキャッシュラインにおいてキャッシュスラッシングが発生した回数を示すカウンタをインクリメントする、
処理をコンピュータに実行させることを特徴とするキャッシュ情報出力プログラム。
【請求項２】
請求項１において、
前記複数の配列は、前記検証対象プログラムのソースコードにおいてループ命令に囲まれる特定の命令に含まれており、
前記特定のキャッシュラインが存在するか否かを判定する処理は、前記ループ命令よって前記特定の命令が実行される毎に行われる、
ことを特徴とするキャッシュ情報出力プログラム。
【請求項３】
請求項１において、さらに、
前記特定のキャッシュラインが存在するか否かを判定する処理の前に、前記複数の配列の指定を受け付ける、
処理をコンピュータに実行させることを特徴とするキャッシュ情報出力プログラム。
【請求項４】
請求項１において、さらに、
前記キャッシュスラッシングが発生した回数をインクリメントする処理の後、前記カウンタが示す回数を出力する、
処理をコンピュータに実行させることを特徴とするキャッシュ情報出力プログラム。
【請求項５】
請求項１において、さらに、
前記特定のキャッシュラインが存在するか否かを判定する処理の前に、前記検証対象プログラムの実行に伴って前記複数の配列のデータが格納されたキャッシュラインを示す情報を出力する命令を、前記検証対象プログラムに追加する、
処理をコンピュータに実行させ、
前記特定のキャッシュラインが存在するか否かを判定する処理では、前記検証対象プログラムの実行に伴って出力された、前記キャッシュラインを示す情報を比較して、前記特定のキャッシュラインが存在するか否かの判定を行う、
ことを特徴とするキャッシュ情報出力プログラム。
【請求項６】
請求項１において、さらに、
前記特定のキャッシュラインが存在するか否かを判定する処理の前に、前記複数の配列のうち、前記検証対象プログラムの実行に伴ってデータがアクセスされた配列を示す情報と、前記複数の配列のうち、前記検証対象プログラムの実行に伴ってキャッシュミスが発生した配列を示す情報とを出力する命令を、前記検証対象プログラムに追加し、
前記検証対象プログラムの実行に伴って出力された、前記キャッシュミスが発生した配列を示す情報が出力された回数を、前記検証対象プログラムの実行に伴って出力された、前記データがアクセスされた配列を示す情報が出力された回数で除算した値を、前記複数の配列毎に算出し、
算出した前記値を出力する、
処理をコンピュータに実行させることを特徴とするキャッシュ情報出力プログラム。
【請求項７】
検証対象プログラムの実行に伴ってアクセスされた複数の配列のデータがそれぞれ格納されたキャッシュラインを比較して、前記検証対象プログラムの実行に伴って前記複数の配列のデータが格納された回数が、キャッシュのウェイ数を上回る特定のキャッシュラインが存在するか否かを判定し、
前記特定のキャッシュラインが存在すると判定した場合、前記特定のキャッシュラインにおいてキャッシュスラッシングが発生した回数を示すカウンタをインクリメントする、
ことを特徴とするキャッシュ情報出力方法。
【請求項８】
検証対象プログラムの実行に伴ってアクセスされた複数の配列のデータがそれぞれ格納されたキャッシュラインを比較して、前記検証対象プログラムの実行に伴って前記複数の配列のデータが格納された回数が、キャッシュのウェイ数を上回る特定のキャッシュラインが存在するか否かを判定し、前記特定のキャッシュラインが存在すると判定した場合、前記特定のキャッシュラインにおいてキャッシュスラッシングが発生した回数を示すカウンタをインクリメントする情報作成部を有する、
ことを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、キャッシュ情報出力プログラム、キャッシュ情報出力方法及び情報処理装置に関する。
【背景技術】
【０００２】
近年、大規模な並列計算機システム（以下、ＨＰＣ（Ｈｉｇｈ  Ｐｅｒｆｏｒｍａｎｃｅ  Ｃｏｍｐｕｔｉｎｇ）システムとも呼ぶ）において動作するプログラム（以下、アプリケーションプログラムとも呼ぶ）を高速に動作させるための研究が行われている。
【０００３】
具体的に、ＨＰＣシステムにおいてアプリケーションプログラムを高速に動作させるための方法として、例えば、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）のキャッシュを有効利用する方法についての研究が行われている。この場合、ＨＰＣシステムの研究者等（以下、単に研究者とも呼ぶ）は、ＨＰＣシステムにおいてアプリケーションプログラムを動作させ、動作中のアプリケーションプログラムによるキャッシュ（例えば、Ｌ１キャッシュやＬ２キャッシュ）の利用状況を含む情報（以下、プロファイルデータとも呼ぶ）の取得を行う。そして、研究者は、取得したプロファイルデータの解析を行うことにより、キャッシュを有効利用するための方法を模索する（例えば、特許文献１から４参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００７−２７２６９１号公報
【特許文献２】特開２００３−３２３３４１号公報
【特許文献３】特開平１０−１８７４６０号公報
【特許文献４】特開平８−２６３３７２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上記のようなプロファイルデータの解析を行う場合、研究者は、例えば、キャッシュにおいて発生するキャッシュスラッシング（以下、単にスラッシングとも呼ぶ）の発生回数の把握等を行う。そして、研究者は、キャッシュを有効利用するために、キャッシュにおけるスラッシングの発生を抑制するための方法を模索する。
【０００６】
しかしながら、研究者は、取得したプロファイルデータの解析を行った場合であっても、スラッシングの発生要因となっているプログラム上の箇所（例えば、配列）を特定することができない場合がある。そのため、研究者は、キャッシュにおけるスラッシングの発生の抑制を効率的に行うことができない場合がある。
【０００７】
そこで、一つの側面では、プログラムの実行中にスラッシングが発生したキャッシュラインに関する情報を取得することを可能とするキャッシュ情報出力プログラム、キャッシュ情報出力方法及び情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
実施の形態の一つの態様によれば、検証対象プログラムの実行に伴ってアクセスされた複数の配列のデータがそれぞれ格納されたキャッシュラインを比較して、前記検証対象プログラムの実行に伴って前記複数の配列のデータが格納された回数が、キャッシュのウェイ数を上回る特定のキャッシュラインが存在するか否かを判定し、前記特定のキャッシュラインが存在すると判定した場合、前記特定のキャッシュラインにおいてキャッシュスラッシングが発生した回数を示すカウンタをインクリメントする、処理をコンピュータに実行させる。
【発明の効果】
【０００９】
一つの側面によれば、プログラムの実行中にスラッシングが発生したキャッシュラインに関する情報を取得することを可能とする。
【図面の簡単な説明】
【００１０】
【図１】図１は、情報処理システム１０の構成を示す図である。
【図２】図２は、情報処理装置１のハードウエア構成を説明する図である。
【図３】図３は、第１の実施の形態におけるキャッシュ情報出力処理の概略を説明するフローチャート図である。
【図４】図４は、第１の実施の形態におけるキャッシュ情報出力処理の詳細を説明するフローチャート図である。
【図５】図５は、第１の実施の形態におけるキャッシュ情報出力処理の詳細を説明するフローチャート図である。
【図６】図６は、第１の実施の形態におけるキャッシュ情報出力処理の詳細を説明するフローチャート図である。
【図７】図７は、第１の実施の形態におけるキャッシュ情報出力処理の詳細を説明するフローチャート図である。
【図８】図８は、検証対象プログラムのソースコードの具体例である。
【図９】図９は、検証対象プログラムのソースコードの具体例である。
【図１０】図１０は、第１の実施の形態において作成される各情報の具体例である。
【図１１】図１１は、第１の実施の形態において作成される各情報の具体例である。
【図１２】図１２は、第１の実施の形態において作成される各情報の具体例である。
【図１３】図１３は、第１の実施の形態において作成される各情報の具体例である。
【図１４】図１４は、第１の実施の形態において作成される各情報の具体例である。
【図１５】図１５は、第１の実施の形態において作成される各情報の具体例である。
【図１６】図１６は、第１の実施の形態において作成される各情報の具体例である。
【図１７】図１７は、第１の実施の形態において作成される各情報の具体例である。
【図１８】図１８は、第１の実施の形態において作成される各情報の具体例である。
【図１９】図１９は、第１の実施の形態において作成される各情報の具体例である。
【図２０】図２０は、第１の実施の形態において作成される各情報の具体例である。
【図２１】図２１は、第１の実施の形態において作成される各情報の具体例である。
【図２２】図２２は、第１の実施の形態において作成される各情報の具体例である。
【図２３】図２３は、第１の実施の形態において作成される各情報の具体例である。
【図２４】図２４は、第１の実施の形態において作成される各情報の具体例である。
【図２５】図２５は、第１の実施の形態において作成される各情報の具体例である。
【発明を実施するための形態】
【００１１】
［情報処理システムの構成］
図１は、情報処理システム１０の構成を示す図である。図１に示す情報処理システム１０は、情報処理装置１（以下、キャッシュ情報出力装置１とも呼ぶ）と、記憶装置１ａとを有する。情報処理装置１は、例えば、インターネットやイントラネット等からなるネットワークＮＷを介して、研究者端末１１にアクセスすることが可能である。
【００１２】
情報処理装置１は、例えば、ＨＰＣシステムが構築された物理マシンであり、アプリケーションプログラム（以下、検証対象プログラムとも呼ぶ）を実行する。そして、情報処理装置１は、検証対象プログラムの実行中に発生するスラッシングの回数を示す情報（以下、ライン競合情報とも呼ぶ）を出力する処理（以下、キャッシュ情報出力処理とも呼ぶ）を実行する。
【００１３】
記憶装置１ａは、例えば、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）やＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等からなる外部ディスク装置である。具体的に、記憶装置１ａは、例えば、検証対象プログラムの実行ファイルを格納する。なお、記憶装置１ａは、情報処理装置１の内部に設けられたディスク装置であってもよい。
【００１４】
研究者端末１１は、例えば、事業者が必要な情報の入力を行う端末である。そして、研究者端末１１は、事業者による情報の入力があった場合、例えば、入力された情報を情報処理装置１に送信する。
【００１５】
［キャッシュの有効利用を行うための方法］
次に、情報処理装置１のＣＰＵ内のキャッシュを有効利用するための方法について説明を行う。研究者は、例えば、情報処理装置１において検証対象プログラムを実行させ、検証対象プログラムの実行に伴うキャッシュの利用状況を含む情報（プロファイルデータ）の取得を行う。そして、研究者は、例えば、取得したプロファイルデータの解析を行うことにより、キャッシュを有効利用するための方法の模索を行う。
【００１６】
このようなプロファイルデータの解析を行う場合、研究者は、例えば、キャッシュにおいて発生するスラッシングの発生回数の把握等を行う。そして、研究者は、キャッシュを有効利用するために、キャッシュにおけるスラッシングの発生を抑制するための方法を模索する。
【００１７】
しかしながら、研究者は、取得したプロファイルデータの解析を行っても、スラッシングの発生要因となっているプログラム上の箇所（例えば、配列）が特定できない場合がある。そのため、研究者は、キャッシュにおけるスラッシングの発生の抑制を効率的に行うことができない場合がある。
【００１８】
そこで、本実施の形態において、情報処理装置１は、検証対象プログラムの実行に伴ってアクセスされた複数の配列のデータがそれぞれ格納されたキャッシュラインを比較する。そして、情報処理装置１は、検証対象プログラムの実行に伴って複数の配列のデータが格納された回数が、キャッシュのウェイ数を上回るキャッシュライン（以下、特定のキャッシュラインとも呼ぶ）が存在するか否かを判定する。
【００１９】
その結果、特定のキャッシュラインが存在すると判定した場合、情報処理装置１は、前記特定のキャッシュラインにおいてキャッシュスラッシングが発生した回数を示すカウンタをインクリメントする。
【００２０】
すなわち、研究者は、検証対象プログラムに含まれる複数の配列のうち、各配列のデータに対するアクセスがスラッシングの原因となっている可能性のある配列を予め決定する。そして、情報処理装置１は、決定された配列のデータがそれぞれ格納されたキャッシュラインを示す情報と、情報処理装置１のキャッシュのウェイ数を示す情報とから、スラッシングが発生した回数を示す情報であるライン競合情報をキャッシュライン毎に作成する。
【００２１】
これにより、研究者は、作成されたライン競合情報を参照することで、スラッシングが発生するキャッシュラインと、スラッシングの発生の原因となっている配列とを特定することが可能になる。そのため、研究者は、特定した情報に基づいて、キャッシュの有効利用を行うための方法の模索を行うことが可能になる。
【００２２】
［情報処理装置のハードウエア構成］
次に、情報処理装置１のハードウエア構成について説明する。図２は、情報処理装置１のハードウエア構成を説明する図である。
【００２３】
情報処理装置１は、プロセッサであるＣＰＵ１０１と、メモリ１０２と、外部インターフェース（Ｉ／Ｏユニット）１０３と、記憶媒体（ストレージ）１０４とを有する。各部は、バス１０５を介して互いに接続される。
【００２４】
記憶媒体１０４は、記憶媒体１０４内のプログラム格納領域（図示しない）に、キャッシュ情報出力処理を行うためのプログラム１１０を記憶する。
【００２５】
ＣＰＵ１０１は、図２に示すように、プログラム１１０の実行時に、プログラム１１０を記憶媒体１０４からメモリ１０２にロードし、プログラム１１０と協働してキャッシュ情報出力処理を行う。具体的に、ＣＰＵ１０１は、プログラム１１０と協働することにより、検証対象プログラムに命令を追加する命令追加部と、ライン競合情報等の作成に要する領域を確保するための領域確保部と、ライン競合情報等を作成する情報作成部として動作する。また、ＣＰＵ１０１は、プログラム１１０と協働することにより、ライン競合情報等を出力する情報出力部として動作する。なお、プログラム１１０は、例えば、検証対象プログラムのコンパイルを行うコンパイラとして機能するプログラムであってよい。
【００２６】
記憶媒体１０４は、例えば、キャッシュ情報出力処理を行う際に参照される情報を記憶する情報格納領域１３０（以下、記憶部１３０とも呼ぶ）を有する。具体的に、情報格納領域１３０は、例えば、検証対象プログラムの実行ファイルを記憶する。さらに、情報格納領域１３０は、キャッシュ出力処理によって出力された各情報の記憶についても行う。
【００２７】
また、外部インターフェース１０３は、研究者端末１１等と通信を行う。なお、図１で説明した記憶装置１ａは、記憶媒体１０４に対応するものであってよい。
【００２８】
[第１の実施の形態の概略］
次に、第１の実施の形態の概略について説明する。図３は、第１の実施の形態におけるキャッシュ情報出力処理の概略を説明するフローチャート図である。
【００２９】
情報処理装置１の情報作成部は、情報出力タイミングまで待機する（Ｓ１のＮＯ）。情報出力タイミングは、例えば、情報処理装置１のプログラム実行部（図示しない）が検証対象プログラムを実行したタイミングであってよい。その後、情報出力タイミングになった場合（Ｓ１のＹＥＳ）、情報作成部は、検証対象プログラムの実行に伴ってアクセスされた複数の配列のデータがそれぞれ格納されたキャッシュラインを比較する。そして、情報作成部は、検証対象プログラムの実行に伴って複数の配列のデータが格納された回数が、キャッシュのウェイ数を上回る特定のキャッシュラインが存在するか否かを判定する（Ｓ２）。
【００３０】
すなわち、研究者は、例えば、検証対象プログラムに含まれる複数の配列のうち、各配列のデータに対するアクセスがスラッシングの原因となっている可能性のある配列を予め決定する。そして、情報処理装置１は、研究者が決定した配列のデータに対するアクセスによってスラッシングが発生したキャッシュラインが存在するか否かの判定を行う。
【００３１】
続いて、複数の配列のデータが格納された回数がキャッシュのウェイ数を上回る特定のキャッシュラインが存在すると判定した場合（Ｓ３のＹＥＳ）、情報作成部は、特定のキャッシュラインにおいてキャッシュスラッシングが発生した回数を示すカウンタをインクリメントする（Ｓ４）。一方、複数の配列のデータが格納された回数がキャッシュのウェイ数を上回る特定のキャッシュラインが存在しないと判定した場合（Ｓ３のＮＯ）、情報作成部は、Ｓ４の処理を実行しない。
【００３２】
すなわち、決定された複数の配列が検証対象プログラムのソースコードにおいてループ命令に囲まれる命令（以下、特定の命令とも呼ぶ）に含まれる配列である場合、複数の配列のデータに対するアクセスは、ループ命令による処理の繰返しが行われる毎に行われる。そのため、情報作成部は、特定のキャッシュラインが存在するか否かの判定を、特定の命令が実行される毎に行う。そして、情報作成部は、特定のキャッシュラインが存在すると判定する毎に、特定のキャッシュラインに対応するカウンタをインクリメントする。これにより、情報作成部は、スラッシングが発生した回数に関する情報（ライン競合情報）を、キャッシュライン毎に算出することが可能になる。
【００３３】
このように、本実施の形態における情報処理装置１は、検証対象プログラムの実行に伴ってアクセスされた複数の配列のデータがそれぞれ格納されたキャッシュラインを比較する。そして、情報処理装置１は、検証対象プログラムの実行に伴って複数の配列のデータが格納された回数が、キャッシュのウェイ数を上回る特定のキャッシュラインが存在するか否かを判定する。
【００３４】
その結果、特定のキャッシュラインが存在すると判定した場合、情報処理装置１は、前記特定のキャッシュラインにおいてキャッシュスラッシングが発生した回数を示すカウンタをインクリメントする。
【００３５】
これにより、研究者は、作成されたライン競合情報を参照することで、スラッシングが発生するキャッシュラインと、スラッシングの発生の原因となっている配列とを特定することが可能になる。そのため、研究者は、特定した情報に基づいて、キャッシュの有効利用を行うための方法の模索を行うことが可能になる。
【００３６】
[第１の実施の形態の詳細］
次に、第１の実施の形態の詳細について説明する。図４から図７は、第１の実施の形態におけるキャッシュ情報出力処理の詳細を説明するフローチャート図である。図８から図２５は、第１の実施の形態におけるキャッシュ情報出力処理の詳細を説明する図である。具体的に、図８及び図９は、検証対象プログラムのソースコードの具体例である。また、図１０から図２５は、第１の実施の形態において作成される各情報の具体例である。以下、図８から図２５を参照しながら、図４から図７のフローチャート図について説明を行う。
【００３７】
情報処理装置１の命令追加部は、図４に示すように、例えば、研究者が研究者端末１１を介して行った複数の配列の指定を受け付けるまで待機する（Ｓ１１のＮＯ）。すなわち、情報処理装置１は、後述するように、Ｓ１１の処理で指定された複数の配列についてのライン競合情報（以下、ライン競合情報１３４とも呼ぶ）の作成を行う。
【００３８】
そして、複数の配列の指定を受け付けた場合（Ｓ１１のＹＥＳ）、命令追加部は、ライン競合情報１３４等を格納する領域の確保を行う命令を、検証対象プログラムに追加する（Ｓ１２）。また、命令追加部は、この場合、Ｓ１１の処理で指定を受け付けた複数の配列のデータが格納されたキャッシュラインを示す情報（以下、ラインアクセス情報１３３とも呼ぶ）を作成する命令と、出力されたラインアクセス情報１３３からライン競合情報１３４を作成する命令とを、検証対象プログラムに追加する（Ｓ１３）。また、命令追加部は、この場合、Ｓ１１の処理で指定を受け付けた複数の配列のうち、データがアクセスされた配列を示す情報（以下、キャッシュアクセス情報１３１とも呼ぶ）を作成する命令を、検証対象プログラムに追加する（Ｓ１４）。また、命令追加部は、この場合、Ｓ１１の処理で指定を受け付けた複数の配列のうち、キャッシュミスが発生した配列を示す情報（以下、キャッシュミス情報１３２とも呼ぶ）を作成する命令を、検証対象プログラムに追加する（Ｓ１５）。さらに、命令追加部は、この場合、作成されたライン競合情報１３４等の出力を行う命令を、検証対象プログラムに追加する（Ｓ１６）。以下、Ｓ１２からＳ１６の処理の具体例について説明を行う。
【００３９】
[検証対象プログラムのソースコードの具体例］
図８は、Ｓ１２からＳ１６の処理を行う前の検証対象プログラムのソースコードの具体例である。また、図９は、Ｓ１２からＳ１６の処理を行った後の検証対象プログラムのソースコードの具体例である。以下、Ｓ１１の処理において、配列ａ、配列ｂ、配列ｃ及び配列ｄの指定が行われたものとして説明を行う。
【００４０】
具体的に、図８に示す検証対象プログラムのソースコードには、変数ｉが１からＮまでインクリメントする間において、配列ｂと配列ｃとの積と配列ａとの和を配列ｄに設定する命令（特定の命令）である「ｄ（ｉ）＝а（ｉ）＋ｂ（ｉ）＊ｃ（ｉ）」が記述されている。
【００４１】
一方、図９に示す検証対象プログラムのソースコードには、「ｄ（ｉ）＝а（ｉ）＋ｂ（ｉ）＊ｃ（ｉ）」を囲むループ命令の前に、ライン競合情報１３４等を格納する領域の確保等を行う命令を呼び出す命令である「ｃａｃｈｅｉｎｆｏ＿ｉｎｉｔ（）」（以下、領域確保命令とも呼ぶ）が記述されている。すなわち、領域確保命令は、Ｓ１２の処理において追加された命令に対応する命令である。
【００４２】
また、図９に示す検証対象プログラムのソースコードには、「ｄ（ｉ）＝а（ｉ）＋ｂ（ｉ）＊ｃ（ｉ）」の前に、４つの配列（配列ａ、配列ｂ、配列ｃ及び配列ｄ）についてのライン競合情報１３４等の作成を行う命令を呼び出す命令である「ｃａｃｈｅｉｎｆｏ＿ｇｅｔ（４，ａ（ｉ），ｂ（ｉ），ｃ（ｉ），ｄ（ｉ））」（以下、情報作成命令とも呼ぶ）が記述されている。すなわち、情報作成命令は、Ｓ１３からＳ１５の処理において追加された命令に対応する命令である。
【００４３】
さらに、図９に示す検証対象プログラムのソースコードには、「ｄ（ｉ）＝а（ｉ）＋ｂ（ｉ）＊ｃ（ｉ）」を囲むループ命令の後に、ライン競合情報１３４等の出力（例えば、ライン競合情報１３４等の情報格納領域１３０に対する記憶）を行う命令を呼び出す命令である「ｃａｃｈｅｉｎｆｏ＿ｅｘｉｔ（）」（以下、情報出力命令とも呼ぶ）が記述されている。すなわち、情報出力命令は、Ｓ１６の処理において追加された命令に対応する命令である。
【００４４】
図９に示す検証対象プログラムのソースコードにおいて、「ｃａｃｈｅｉｎｆｏ＿ｉｎｉｔ（）」及び「ｃａｃｈｅｉｎｆｏ＿ｅｘｉｔ（）」は、ループ命令によって囲まれた部分の前後に記述されている。そのため、「ｃａｃｈｅｉｎｆｏ＿ｉｎｉｔ（）」及び「ｃａｃｈｅｉｎｆｏ＿ｅｘｉｔ（）」は、それぞれ１回ずつのみ実行される。一方、図９に示す検証対象プログラムのソースコードにおいて、「ｃａｃｈｅｉｎｆｏ＿ｇｅｔ（４，ａ（ｉ），ｂ（ｉ），ｃ（ｉ），ｄ（ｉ））」は、特定の命令とともに、ループ命令に囲まれた部分に記述されている。そのため、「ｃａｃｈｅｉｎｆｏ＿ｇｅｔ（４，ａ（ｉ），ｂ（ｉ），ｃ（ｉ），ｄ（ｉ））」は、特定の命令の実行と同じタイミングで実行される。そして、「ｃａｃｈｅｉｎｆｏ＿ｇｅｔ（４，ａ（ｉ），ｂ（ｉ），ｃ（ｉ），ｄ（ｉ））」は、ループ命令によって処理の繰返しが行われる回数だけ実行される。
【００４５】
なお、以下、領域確保命令、情報作成命令及び情報出力命令の実行に伴って、領域確保部、情報作成部及び情報出力部がそれぞれ呼び出されるものとして説明を行う。また、以下、「ｃａｃｈｅｉｎｆｏ＿ｉｎｉｔ（）」、「ｃａｃｈｅｉｎｆｏ＿ｇｅｔ（４，ａ（ｉ），ｂ（ｉ），ｃ（ｉ），ｄ（ｉ））」及び「ｃａｃｈｅｉｎｆｏ＿ｅｘｉｔ（）」を総称して、単に追加命令とも呼ぶ。
【００４６】
図５に戻り、情報作成部は、プログラム実行タイミングになるまで待機する（Ｓ２１のＮＯ）。プログラム実行タイミングは、例えば、検証対象プログラムの実行が開始されたタイミングであってよい。なお、Ｓ２１以降の処理は、Ｓ１１からＳ１６の処理において命令が追加された検証対象プログラムの実行に伴って行われる処理である。そのため、Ｓ２１以降の処理は、Ｓ１１からＳ１６の処理が行われた情報処理装置１と異なる情報処理装置において行われるものであってもよい。
【００４７】
その後、プログラム実行タイミングになった場合（Ｓ２１のＹＥＳ）、情報作成部は、追加命令のうちのいずれかの命令が実行されるまで待機する（Ｓ２２のＮＯ）。以下、Ｓ２１の処理において、図９で説明した検出対象プログラムの実行が開始されたものとして説明を行う。また、以下、図９で説明した例におけるパラメータ変数Ｎが１２８であるものとして説明を行う。
【００４８】
そして、追加命令のうちの領域確保命令（図９に示す例では「ｃａｃｈｅｉｎｆｏ＿ｉｎｉｔ（）」）が実行された場合（Ｓ２２のＹＥＳ、Ｓ２３のＮＯ、Ｓ３１のＮＯ）、領域確保部は、図６に示すように、ライン競合情報１３４等を格納する領域を情報格納領域１３０に確保する（Ｓ３２）。その後、追加命令が再度実行されるまで待機する（Ｓ２２のＮＯ）。
【００４９】
続いて、追加命令のうちの情報作成命令（図９に示す例では「ｃａｃｈｅｉｎｆｏ＿ｇｅｔ（４，ａ（ｉ），ｂ（ｉ），ｃ（ｉ），ｄ（ｉ））」）が実行された場合（Ｓ２２のＹＥＳ、Ｓ２３のＹＥＳ）、情報作成部は、ラインアクセス情報１３３の作成（更新）を行う。具体的に、情報作成部は、ラインアクセス情報１３３に含まれる情報のうち、Ｓ１１の処理で指定を受け付けた複数の配列のデータがアクセスされる際に格納されていたキャッシュラインに対応するカウンタをインクリメントする（Ｓ２４）。すなわち、情報作成部は、情報作成命令とともに実行された特定の命令の実行に伴って行われたアクセスに関する情報を、ラインアクセス情報１３３に反映させる。
【００５０】
この場合、情報作成部は、例えば、図９に示す例において、「ｃａｃｈｅｉｎｆｏ＿ｇｅｔ（４，ａ（ｉ），ｂ（ｉ），ｃ（ｉ），ｄ（ｉ））」に含まれる各配列（配列ａ、配列ｂ、配列ｃ及び配列ｄ）のデータが格納されたキャッシュラインの特定を行う。そして、情報作成部は、特定した情報に基づいて、ラインアクセス情報１３３の作成を行う。以下、キャッシュラインの特定を行う場合の具体例について説明を行う。なお、以下、情報処理装置１のＣＰＵのキャッシュは、２（ウェイ）のキャッシュであり、１（ウェイ）あたりのデータ容量が１６（ＫｉＢ）であるものとする。また、情報処理装置１のＣＰＵのキャッシュは、１（ライン）あたりのデータ容量が２５６（Ｂ）であるものとする。さらに、情報処理装置１のＣＰＵのキャッシュにおいて、配列の各要素に対応するデータサイズは、８（Ｂ）であるものとする。
【００５１】
[キャッシュラインの特定を行う場合の具体例］
例えば、変数ｉが１であるときの配列ａの要素に対応するデータ（以下、単に配列ａ（１）のデータとも呼ぶ）が格納されたキャッシュ内のアドレスが「０ｘ０００００」である場合、「０ｘ０００００」を１６（ＫｉＢ）で除算した際の余りは「０ｘ０」である。そして、「０ｘ０」を２５６（Ｂ）で除算した際の商は「０ｘ０」である。そのため、情報作成部は、例えば、配列ａ（１）のデータが格納されたキャッシュラインが０番のキャッシュラインであると判定する。
【００５２】
同様に、配列ｂ（１）のデータが格納されたキャッシュ内のアドレスが「０ｘ０８０００」である場合、情報作成部は、例えば、配列ｂ（１）のデータが格納されたキャッシュラインが０番のキャッシュラインであると判定する。さらに、配列ｃ（１）のデータが格納されたキャッシュ内のアドレスが「０ｘ１００００」である場合、情報作成部は、例えば、配列ｃ（１）のデータが格納されたキャッシュラインが０番のキャッシュラインであると判定する。
【００５３】
一方、配列ｄ（１）のデータが格納されたキャッシュ内のアドレスが「０ｘ１４４００」である場合、「０ｘ１４４００」を１６（ＫｉＢ）で除算した際の余りは「０ｘ４００」である。そして、「０ｘ４００」を２５６（Ｂ）で除算した際の商は「０ｘ４」である。そのため、情報作成部は、例えば、配列ｄ（１）のデータが格納されたキャッシュラインが４番のキャッシュラインであると判定する。以下、変数ｉが１であるときにＳ２４の処理が行われた後のラインアクセス情報１３３の具体例について説明を行う。
【００５４】
[ラインアクセス情報の具体例（１）］
図１０、図１１、図１４、図１５、図１８及び図１９は、ラインアクセス情報１３３の具体例について説明する図である。具体的に、図１０及び図１１は、変数ｉが１であるときにＳ２４の処理が行われた後のラインアクセス情報１３３の具体例を説明する図である。さらに具体的に、図１０（Ａ）は、配列ａのデータがアクセスされる際に格納されていたキャッシュラインに関するラインアクセス情報１３３ａを説明する図であり、図１０（Ｂ）は、配列ｂのデータがアクセスされる際に格納されていたキャッシュラインに関するラインアクセス情報１３３ｂを説明する図である。また、図１１（Ａ）は、配列ｃのデータがアクセスされる際に格納されていたキャッシュラインに関するラインアクセス情報１３３ｃを説明する図であり、図１１（Ｂ）は、配列ｄのデータがアクセスされる際に格納されていたキャッシュラインに関するラインアクセス情報１３３ｄを説明する図である。なお、「カウンタ」には、予め初期値として全て「０」が設定されているものとする。また、以下、ラインアクセス情報１３３ａ、ラインアクセス情報１３３ｂ、ラインアクセス情報１３３ｃ及びラインアクセス情報１３３ｄを総称してラインアクセス情報１３３とも呼ぶ。
【００５５】
図１０等に示すラインアクセス情報１３３は、ラインアクセス情報１３３に含まれる各情報を識別する「項番」と、各キャッシュラインを識別する番号が設定される「ライン情報」と、各キャッシュラインに対して発生したアクセスの回数が設定される「カウンタ」とを項目として有する。
【００５６】
具体的に、情報作成部は、図１０（Ａ）に示すように、「ライン情報」が「０」であるキャッシュラインに格納されている配列ａ（１）のデータに対するアクセスが行われたことに伴って、「ライン情報」が「０」である情報の「カウンタ」に設定された値を「０」から「１」に更新する（図１０（Ａ）の下線部分）。また、情報作成部は、図１０（Ｂ）に示すように、「ライン情報」が「０」であるキャッシュラインに格納されている配列ｂ（１）のデータに対するアクセスが行われたことに伴って、「ライン情報」が「０」である情報の「カウンタ」に設定された値を「０」から「１」に更新する（図１０（Ｂ）の下線部分）。
【００５７】
さらに、情報作成部は、図１１（Ａ）に示すように、「ライン情報」が「０」であるキャッシュラインに格納されている配列ｃ（１）のデータに対するアクセスが行われたことに伴って、「ライン情報」が「０」である情報の「カウンタ」に設定された値を「０」から「１」に更新する（図１１（Ａ）の下線部分）。また、情報作成部は、図１１（Ｂ）に示すように、「ライン情報」が「４」であるキャッシュラインに格納されている配列ｄ（１）のデータに対するアクセスが行われたことに伴って、「ライン情報」が「４」である情報の「カウンタ」に設定された値を「０」から「１」に更新する（図１１（Ｂ）の下線部分）。
【００５８】
図５に戻り、情報作成部は、Ｓ２４の処理でカウンタをインクリメントしたラインアクセス情報１３３の比較を行う（Ｓ２５）。そして、情報作成部は、検証対象プログラムの実行に伴って配列のデータが格納された回数が情報処理装置１のＣＰＵのキャッシュのウェイ数を上回る特定のキャッシュラインが存在するか否かを判定する（Ｓ２５）。すなわち、情報作成部は、配列のデータが格納された回数が、キャッシュのウェイ数を上回るキャッシュラインが存在する場合、検証対象プログラムの実行に伴って、Ｓ２５の処理で存在すると判定されたキャッシュラインにおいてスラッシングが発生したものと判定する。
【００５９】
その結果、図７に示すように、特定のキャッシュラインが存在すると判定した場合（Ｓ４１のＹＥＳ）、情報作成部は、ライン競合情報１３４の作成（更新）を行う。具体的に、情報作成部は、ライン競合情報１３４に含まれる情報のうち、Ｓ４１の処理で存在した特定のキャッシュラインに対応するカウンタをインクリメントする（Ｓ４２）。一方、特定のキャッシュラインが存在しないと判定した場合（Ｓ４１のＮＯ）、情報作成部は、Ｓ４２の処理を行わない。以下、変数ｉが１であるときにＳ４２の処理が行われた後のライン競合情報１３４の具体例について説明を行う。
【００６０】
[ライン競合情報の具体例（１）］
図１２、図１６、図２０及び図２４は、ライン競合情報１３４の具体例を説明する図である。具体的に、図１２は、変数ｉが１であるときにＳ４２の処理が行われた後のライン競合情報１３４の具体例を説明する図である。
【００６１】
図１２等に示すライン競合情報１３４は、ライン競合情報１３４に含まれる各情報を識別する「項番」と、各キャッシュラインを識別する番号が設定される「ライン情報」と、各キャッシュラインにおいてスラッシングが発生した回数が設定される「カウンタ」とを項目として有する。なお、「カウンタ」には、予め初期値として全て「０」が設定されているものとする。
【００６２】
具体的に、図１０及び図１１で説明したラインアクセス情報１３３において、「ライン情報」が「０」である情報の「カウンタ」に設定された情報のうち、配列ａ、配列ｂ及び配列ｃに対応する情報が更新されている。そのため、情報作成部は、この場合、「ライン情報」が「０」であるキャッシュラインに対するデータの格納が３回行われたものと判定する。したがって、情報作成部は、「ライン情報」が「０」であるキャッシュラインに対してデータの格納が行われた回数が、キャッシュのウェイ数である２よりも多いと判定する。
【００６３】
そのため、情報作成部は、この場合、「ライン情報」が「０」であるキャッシュラインにおいてスラッシングが発生したものと判定し、図１２に示すように、ライン競合情報１３４における「ライン情報」が「０」である情報の「カウンタ」に設定された値を「０」から「１」に更新する（図１２の下線部分）。
【００６４】
図７に戻り、情報作成部は、データに対するアクセスに伴ってキャッシュミスが発生した配列が存在するか否かを判定する（Ｓ４３）。具体的に、情報作成部は、Ｓ４１の処理で存在した特定のキャッシュラインにデータが格納された配列（スラッシングが発生した配列）が存在するか否かを判定する。また、情報作成部は、特定の命令の実行に伴って、新たなキャッシュラインにデータが格納された配列が存在するか否かを判定する。
【００６５】
その結果、データに対するアクセスに伴ってキャッシュミスが発生した配列が存在したと判定した場合（Ｓ４３のＹＥＳ）、情報作成部は、キャッシュミス情報１３２の作成（更新）を行う。具体的に、情報作成部は、キャッシュミス情報１３２に含まれる情報のうち、Ｓ４３の処理で存在した配列に対応するカウンタをインクリメントする（Ｓ４４）。一方、データに対するアクセスに伴ってキャッシュミスが発生した配列が存在しなかったと判定した場合（Ｓ４３のＮＯ）、情報作成部は、Ｓ４４の処理を行わない。以下、変数ｉが１であるときにＳ４４の処理が行われた後のキャッシュミス情報１３２の具体例について説明を行う。
【００６６】
[キャッシュミス情報の具体例（１）］
図１３（Ａ）、図１７（Ａ）、図２１（Ａ）及び図２５（Ａ）は、キャッシュミス情報１３２の具体例を説明する図である。具体的に、図１３（Ａ）は、変数ｉが１であるときにＳ４４の処理が行われた後のキャッシュミス情報１３２の具体例を説明する図である。
【００６７】
図１３（Ａ）等に示すキャッシュミス情報１３２は、キャッシュミス情報１３２に含まれる各情報を識別する「項番」と、各配列を識別する「配列情報」と、各配列のデータに対するアクセスによってキャッシュミスが発生した回数が設定される「カウンタ」とを項目として有する。図１３（Ａ）に示すキャッシュミス情報１３２において、「配列情報」に設定される「ａ」、「ｂ」、「ｃ」及び「ｄ」は、それぞれ配列ａ、配列ｂ、配列ｃ及び配列ｄに対応する。なお、「カウンタ」には、予め初期値として全て「０」が設定されているものとする。
【００６８】
具体的に、変数ｉが１であるときに、配列ａ（１）、配列ｂ（１）、配列ｃ（１）及び配列ｄ（１）のデータに対するアクセスが行われた場合、各配列のデータは、キャッシュに格納されていない。そのため、この場合、配列ａ（１）、配列ｂ（１）、配列ｃ（１）及び配列ｄ（１）のデータに対するアクセスによってキャッシュミスが発生する。したがって、情報作成部は、図１３（Ａ）に示すように、各情報の「カウンタ」に設定された値を「０」から「１」に更新する（図１３（Ａ）の下線部分）。
【００６９】
図７に戻り、情報作成部は、キャッシュアクセス情報１３１の作成（更新）を行う。具体的に、情報作成部は、キャッシュアクセス情報１３１に含まれる情報のうち、Ｓ１１の処理で指定を受け付けた複数の配列に対応するカウンタをインクリメントする（Ｓ４５）。以下、変数ｉが１であるときにＳ４５の処理が行われた後のキャッシュアクセス情報１３１の具体例について説明を行う。
【００７０】
[キャッシュアクセス情報の具体例（１）］
図１３（Ｂ）、図１７（Ｂ）、図２１（Ｂ）及び図２５（Ｂ）は、キャッシュアクセス情報１３１の具体例を説明する図である。具体的に、図１３（Ｂ）は、変数ｉが１であるときにＳ４５の処理が行われた後のキャッシュアクセス情報１３１の具体例を説明する図である。図１３（Ｂ）等に示すキャッシュアクセス情報１３１は、キャッシュアクセス情報１３１に含まれる各情報を識別する「項番」と、各配列を識別する「配列情報」と、各配列においてアクセスが発生した回数が設定される「カウンタ」とを項目として有する。図１３（Ｂ）に示すキャッシュアクセス情報１３１において、「配列情報」に設定される「ａ」、「ｂ」、「ｃ」及び「ｄ」は、それぞれ配列ａ、配列ｂ、配列ｃ及び配列ｄに対応する。なお、「カウンタ」には、予め初期値として全て「０」が設定されているものとする。
【００７１】
具体的に、情報作成部は、図１３（Ｂ）に示すように、配列ａ（１）、配列ｂ（１）、配列ｃ（１）及び配列ｄ（１）のデータに対してアクセスが行われたことに伴って、各情報の「カウンタ」に設定された値を「０」から「１」に更新する（図１３（Ｂ）の下線部分）。
【００７２】
図７に戻り、Ｓ４５の処理の後、追加命令が再度実行されるまで待機する（Ｓ２２のＮＯ）。以下、変数ｉが３２であるときの各情報の具体例について説明を行う。
【００７３】
[ラインアクセス情報の具体例（２）］
初めに、変数ｉが３２であるときにＳ２４の処理が行われた後のラインアクセス情報１３３の具体例について説明を行う。図１４及び図１５は、変数ｉが３２であるときにＳ２４の処理が行われた後のラインアクセス情報１３３の具体例を説明する図である。なお、図１４（Ａ）、図１４（Ｂ）、図１５（Ａ）及び図１５（Ｂ）は、それぞれ図１０（Ａ）、図１０（Ｂ）、図１１（Ａ）及び図１１（Ｂ）に示す情報が更新されたものである。
【００７４】
具体的に、情報作成部は、図１４（Ａ）に示すように、「ライン情報」が「０」であるキャッシュラインに格納されている配列ａ（３２）のデータに対するアクセスが行われたことに伴って、「ライン情報」が「０」である情報の「カウンタ」に設定された値を「３１」から「３２」に更新する（図１４（Ａ）の下線部分）。また、情報作成部は、図１４（Ｂ）に示すように、「ライン情報」が「０」であるキャッシュラインに格納されている配列ｂ（３２）のデータに対するアクセスが行われたことに伴って、「ライン情報」が「０」である情報の「カウンタ」に設定された値を「３１」から「３２」に更新する（図１４（Ｂ）の下線部分）。
【００７５】
さらに、情報作成部は、図１５（Ａ）に示すように、「ライン情報」が「０」であるキャッシュラインに格納されている配列ｃ（３２）のデータに対するアクセスが行われたことに伴って、「ライン情報」が「０」である情報の「カウンタ」に設定された値を「３１」から「３２」に更新する（図１５（Ａ）の下線部分）。また、情報作成部は、図１５（Ｂ）に示すように、「ライン情報」が「４」であるキャッシュラインに格納されている配列ｄ（３２）のデータに対するアクセスが行われたことに伴って、「ライン情報」が「４」である情報の「カウンタ」に設定された値を「３１」から「３２」に更新する（図１５（Ｂ）の下線部分）。
【００７６】
[ライン競合情報の具体例（２）］
次に、変数ｉが３２であるときにＳ４２の処理が行われた後のライン競合情報１３４の具体例について説明を行う。図１６は、変数ｉが３２であるときにＳ４２の処理が行われた後のライン競合情報１３４の具体例を説明する図である。
【００７７】
具体的に、図１４及び図１５で説明したラインアクセス情報１３３において、「ライン情報」が「０」である情報の「カウンタ」に設定された情報のうち、配列ａ、配列ｂ及び配列ｃに対応する情報が更新されている。そのため、情報作成部は、この場合、「ライン情報」が「０」であるキャッシュラインに対するデータの格納が３回行われたものと判定する。したがって、情報作成部は、「ライン情報」が「０」であるキャッシュラインに対してデータの格納が行われた回数が、キャッシュのウェイ数である２よりも多いと判定する。
【００７８】
そのため、情報作成部は、この場合、「ライン情報」が「０」であるキャッシュラインにおいてスラッシングが発生したものと判定し、図１６に示すように、ライン競合情報１３４における「ライン情報」が「０」である情報の「カウンタ」に設定された値を「３１」から「３２」に更新する（図１６の下線部分）。
【００７９】
[キャッシュミス情報の具体例（２）］
次に、変数ｉが３２であるときにＳ４４の処理が行われた後のライン競合情報１３４の具体例について説明を行う。図１７（Ａ）は、変数ｉが３２であるときにＳ４４の処理が行われた後のキャッシュミス情報１３２の具体例を説明する図である。
【００８０】
図９で説明した検証対象プログラムにおいて、変数ｉが２から３１であるときに特定の命令が実行された場合、「ライン情報」が「０」であるキャッシュラインでは、配列ａ、配列ｂ及び配列ｃの関係においてスラッシングが発生する。そのため、配列ａ（３２）のデータに対するアクセスが行われる場合、「ライン情報」が「０」であるキャッシュラインには、配列ｂまたは配列ｃのデータが格納されている可能性がある。したがって、情報作成部は、この場合、「ライン情報」が「０」であるキャッシュラインにおいてキャッシュミスが発生する可能性があると判定する。
【００８１】
そのため、情報作成部は、図１７（Ａ）に示すように、「配列情報」が「ａ」、「ｂ」及び「ｃ」である情報の「カウンタ」に設定された値を「３１」から「３２」に更新する（図１７（Ａ）の下線部分）。
【００８２】
一方、図９で説明した検証対象プログラムにおいて、変数ｉが２から３１であるときに特定の命令が実行された場合、「ライン情報」が「４」であるキャッシュラインでは、スラッシングが発生しない。そのため、情報作成部は、図１７（Ａ）に示すように、「配列情報」が「ｄ」である情報の「カウンタ」に設定された値の更新を行わない。
【００８３】
[キャッシュアクセス情報の具体例（２）］
次に、変数ｉが３２であるときにＳ２４の処理が行われた後のキャッシュアクセス情報１３１の具体例について説明を行う。図１７（Ｂ）は、変数ｉが３２であるときにＳ４５の処理が行われた後のキャッシュアクセス情報１３１の具体例を説明する図である。
【００８４】
具体的に、情報作成部は、図１７（Ｂ）に示すように、配列ａ（３２）、配列ｂ（３２）、配列ｃ（３２）及び配列ｄ（３２）のデータに対してアクセスが行われたことに伴って、各情報の「カウンタ」に設定された値を「３１」から「３２」に更新する（図１７（Ｂ）の下線部分）。以下、変数ｉが３３であるときの各情報の具体例について説明を行う。
【００８５】
[ラインアクセス情報の具体例（３）］
初めに、変数ｉが３３であるときにＳ２４の処理が行われた後のラインアクセス情報１３３の具体例について説明を行う。図１８及び図１９は、変数ｉが３３であるときにＳ２４の処理が行われた後のラインアクセス情報１３３の具体例を説明する図である。なお、図１８（Ａ）、図１８（Ｂ）、図１９（Ａ）及び図１９（Ｂ）は、それぞれ図１４（Ａ）、図１４（Ｂ）、図１５（Ａ）及び図１５（Ｂ）に示す情報が更新されたものである。
【００８６】
上記のように、キャッシュの１（ライン）あたりのデータ容量が２５６（Ｂ）であり、配列の各要素に対応するデータサイズが８（Ｂ）である場合、キャッシュの１（ライン）には、３２個の配列の要素に対応するデータを格納することが可能である。そのため、配列ａ、配列ｂ、配列ｃ及び配列ｄの３３番目以降のデータは、１番目から３２番目のデータとは異なるキャッシュラインに格納される。したがって、配列ａ（３３）、配列ｂ（３３）及び配列ｃ（３３）のデータは、「ライン情報」が「０」であるキャッシュラインの次のキャッシュラインである「ライン情報」が「１」であるキャッシュラインに格納される。また、配列ｄ（３３）のデータは、「ライン情報」が「４」であるキャッシュラインの次のキャッシュラインである「ライン情報」が「５」であるキャッシュラインに格納される。
【００８７】
そして、情報作成部は、図１８（Ａ）に示すように、「ライン情報」が「１」であるキャッシュラインに格納されている配列ａ（３３）のデータに対するアクセスが行われたことに伴って、「ライン情報」が「１」である情報の「カウンタ」に設定された値を「０」から「１」に更新する（図１８（Ａ）の下線部分）。また、情報作成部は、図１８（Ｂ）に示すように、「ライン情報」が「１」であるキャッシュラインに格納されている配列ｂ（３３）のデータに対するアクセスが行われたことに伴って、「ライン情報」が「１」である情報の「カウンタ」に設定された値を「０」から「１」に更新する（図１８（Ｂ）の下線部分）。
【００８８】
さらに、情報作成部は、図１９（Ａ）に示すように、「ライン情報」が「１」であるキャッシュラインに格納されている配列ｃ（３３）のデータに対するアクセスが行われたことに伴って、「ライン情報」が「１」である情報の「カウンタ」に設定された値を「０」から「１」に更新する（図１９（Ａ）の下線部分）。また、情報作成部は、図１９（Ｂ）に示すように、「ライン情報」が「５」であるキャッシュラインに格納されている配列ｄ（３３）のデータに対するアクセスが行われたことに伴って、「ライン情報」が「５」である情報の「カウンタ」に設定された値を「０」から「１」に更新する（図１９（Ｂ）の下線部分）。
【００８９】
[ライン競合情報の具体例（３）］
次に、変数ｉが３３であるときにＳ４２の処理が行われた後のライン競合情報１３４の具体例について説明を行う。図２０は、変数ｉが３３であるときにＳ４２の処理が行われた後のライン競合情報１３４の具体例を説明する図である。
【００９０】
具体的に、図１８及び図１９で説明したラインアクセス情報１３３において、「ライン情報」が「１」である情報の「カウンタ」に設定された情報のうち、配列ａ、配列ｂ及び配列ｃに対応する情報が更新されている。そのため、情報作成部は、この場合、「ライン情報」が「１」であるキャッシュラインに対するデータの格納が３回行われたものと判定する。したがって、情報作成部は、「ライン情報」が「１」であるキャッシュラインに対してデータの格納が行われた回数が、キャッシュのウェイ数である２よりも多いと判定する。
【００９１】
そのため、情報作成部は、この場合、「ライン情報」が「１」であるキャッシュラインにおいてスラッシングが発生したものと判定し、図２０に示すように、ライン競合情報１３４における「ライン情報」が「１」である情報の「カウンタ」に設定された値を「０」から「１」に更新する（図２０の下線部分）。
【００９２】
[キャッシュミス情報の具体例（３）］
次に、変数ｉが３３であるときにＳ４４の処理が行われた後のキャッシュミス情報１３２の具体例について説明を行う。図２１（Ａ）は、変数ｉが３３であるときにＳ４４の処理が行われた後のキャッシュミス情報１３２の具体例を説明する図である。
【００９３】
具体的に、変数ｉが３３であるときに、配列ａ（３３）、配列ｂ（３３）、配列ｃ（３３）及び配列ｄ（３３）のデータに対するアクセスが行われた場合、各配列のデータは、キャッシュに格納されていない。そのため、この場合、配列ａ（３３）、配列ｂ（３３）、配列ｃ（３３）及び配列ｄ（３３）のデータに対するアクセスによってキャッシュミスが発生する。したがって、情報作成部は、図２１（Ａ）に示すように、「配列情報」が「ａ」、「ｂ」及び「ｃ」である情報の「カウンタ」に設定された値を「３２」から「３３」に更新する（図２１（Ａ）の下線部分）。また、情報作成部は、図２１（Ａ）に示すように、「配列情報」が「ｄ」である情報の「カウンタ」に設定された値を「１」から「２」に更新する（図２１（Ａ）の下線部分）。
【００９４】
[キャッシュアクセス情報の具体例（３）］
次に、変数ｉが３３であるときにＳ４５の処理が行われた後のキャッシュアクセス情報１３１の具体例について説明を行う。図２１（Ｂ）は、変数ｉが３３であるときにＳ４５の処理が行われた後のキャッシュアクセス情報１３１の具体例を説明する図である。
【００９５】
具体的に、情報作成部は、図２１（Ｂ）に示すように、配列ａ（３３）、配列ｂ（３３）、配列ｃ（３３）及び配列ｄ（３３）のデータに対してアクセスが行われたことに伴って、各情報の「カウンタ」に設定された値を「３２」から「３３」に更新する（図２１（Ｂ）の下線部分）。以下、変数ｉが１２８であるときの各情報の具体例について説明を行う。
【００９６】
[ラインアクセス情報の具体例（４）］
初めに、変数ｉが１２８であるときにＳ２４の処理が行われた後のラインアクセス情報１３３の具体例について説明を行う。図２２及び図２３は、変数ｉが１２８であるときにＳ２４の処理が行われた後のラインアクセス情報１３３の具体例を説明する図である。なお、図２２（Ａ）、図２２（Ｂ）、図２３（Ａ）及び図２３（Ｂ）は、それぞれ図１８（Ａ）、図１８（Ｂ）、図１９（Ａ）及び図１９（Ｂ）に示す情報が更新されたものである。
【００９７】
具体的に、情報作成部は、図２２（Ａ）に示すように、「ライン情報」が「３」であるキャッシュラインに格納されている配列ａ（１２８）のデータに対するアクセスが行われたことに伴って、「ライン情報」が「３」である情報の「カウンタ」に設定された値を「３１」から「３２」に更新する（図２２（Ａ）の下線部分）。また、情報作成部は、図２２（Ｂ）に示すように、「ライン情報」が「３」であるキャッシュラインに格納されている配列ｂ（１２８）のデータに対するアクセスが行われたことに伴って、「ライン情報」が「３」である情報の「カウンタ」に設定された値を「３１」から「３２」に更新する（図２２（Ｂ）の下線部分）。
【００９８】
さらに、情報作成部は、図２３（Ａ）に示すように、「ライン情報」が「３」であるキャッシュラインに格納されている配列ｃ（１２８）のデータに対するアクセスが行われたことに伴って、「ライン情報」が「３」である情報の「カウンタ」に設定された値を「３１」から「３２」に更新する（図２３（Ａ）の下線部分）。また、情報作成部は、図２３（Ｂ）に示すように、「ライン情報」が「７」であるキャッシュラインに格納されている配列ｄ（１２８）のデータに対するアクセスが行われたことに伴って、「ライン情報」が「７」である情報の「カウンタ」に設定された値を「３１」から「３２」に更新する（図２３（Ｂ）の下線部分）。
【００９９】
[ライン競合情報の具体例（４）］
次に、変数ｉが１２８であるときにＳ４２の処理が行われた後のライン競合情報１３４の具体例について説明を行う。図２４は、変数ｉが１２８であるときにＳ４２の処理が行われた後のライン競合情報１３４の具体例を説明する図である。
【０１００】
具体的に、図２２及び図２３で説明したラインアクセス情報１３３において、「ライン情報」が「３」である情報の「カウンタ」に設定された情報のうち、配列ａ、配列ｂ及び配列ｃに対応する情報が更新されている。そのため、情報作成部は、この場合、「ライン情報」が「３」であるキャッシュラインに対するデータの格納が３回行われたものと判定する。したがって、情報作成部は、「ライン情報」が「３」であるキャッシュラインに対してデータの格納が行われた回数が、キャッシュのウェイ数である２よりも多いと判定する。
【０１０１】
そのため、情報作成部は、この場合、「ライン情報」が「３」であるキャッシュラインにおいてスラッシングが発生したものと判定し、図２４に示すように、ライン競合情報１３４における「ライン情報」が「３」である情報の「カウンタ」に設定された値を「３１」から「３２」に更新する（図２４の下線部分）。
【０１０２】
[キャッシュミス情報の具体例（４）］
次に、変数ｉが１２８であるときにＳ４４の処理が行われた後のライン競合情報１３４の具体例について説明を行う。図２５（Ａ）は、変数ｉが１２８であるときにＳ４４の処理が行われた後のキャッシュミス情報１３２の具体例を説明する図である。
【０１０３】
具体的に、情報作成部は、図１７（Ａ）で説明した場合と同様に、図２５（Ａ）に示すように、「配列情報」が「ａ」、「ｂ」及び「ｃ」である情報の「カウンタ」に設定された値を「１２７」から「１２８」に更新する（図２５（Ａ）の下線部分）。また、情報作成部は、図１７（Ａ）で説明した場合と同様に、図２５（Ａ）に示すように、「配列情報」が「ｄ」である情報の「カウンタ」に設定された値の更新を行わない。
【０１０４】
[キャッシュアクセス情報の具体例（４）］
次に、変数ｉが１２８であるときにＳ４５の処理が行われた後のキャッシュアクセス情報１３１の具体例について説明を行う。図２５（Ｂ）は、変数ｉが１２８であるときにＳ４５の処理が行われた後のキャッシュアクセス情報１３１の具体例を説明する図である。
【０１０５】
具体的に、情報作成部は、図２５（Ｂ）に示すように、配列ａ（１２８）、配列ｂ（１２８）、配列ｃ（１２８）及び配列ｄ（１２８）のデータに対してアクセスが行われたことに伴って、各情報の「カウンタ」に設定された値を「１２７」から「１２８」に更新する（図２５（Ｂ）の下線部分）。
【０１０６】
図５に戻り、追加命令のうちの情報出力命令（図９に示す例では「ｃａｃｈｅｉｎｆｏ＿ｅｘｉｔ（）」）が実行された場合（Ｓ２２のＹＥＳ、Ｓ２３のＮＯ、Ｓ３１のＹＥＳ）、情報処理装置１の情報出力部は、ライン競合情報１３４、キャッシュミス情報１３２、キャッシュアクセス情報１３１及びラインアクセス情報１３３を情報格納領域１３０に記憶する（Ｓ３３）。情報出力部は、例えば、ライン競合情報１３４等のカウンタが示す回数のみを、情報格納領域１３０に記憶するものであってもよい。
【０１０７】
具体的に、情報出力部は、図２２及び図２３で説明したラインアクセス情報１３３と、図２４で説明したライン競合情報１３４と、図２５（Ａ）で説明したキャッシュミス情報１３２と、図２５（Ｂ）で説明したキャッシュアクセス情報１３１とを情報格納領域１３０に記憶するものであってもよい。また、情報出力部は、情報格納領域１３０に記憶した各情報を、研究者端末１１の出力装置（図示しない）に出力するものであってもよい。
【０１０８】
これにより、研究者は、スラッシングに関する情報を参照することが可能になり、キャッシュの有効利用を行うための方法の模索を行うことが可能になる。
【０１０９】
具体的に、研究者は、例えば、図２４で説明したライン競合情報１３４を参照し、「ライン情報」が「０」、「１」、「２」及び「３」であるキャッシュライン（「カウンタ」に設定された値が大きい情報に対応するキャッシュライン）においてスラッシングが発生していると判断する。そして、研究者は、例えば、図２２及び図２３で説明したラインアクセス情報１３３を参照し、「ライン情報」が「０」、「１」、「２」及び「３」であるキャッシュラインに格納されていた配列が、配列ａ、配列ｂ及び配列ｃであったと判断する。さらに、研究者は、例えば、図２５（Ａ）で説明したキャッシュミス情報１３２を参照し、配列ａ、配列ｂ及び配列ｃのデータに対するアクセスによってキャッシュミスが発生していると判断する。
【０１１０】
そのため、研究者は、この場合、例えば、「ライン情報」が「０」、「１」、「２」及び「３」であるキャッシュラインにおいて発生したスラッシングの原因が、配列ａ、配列ｂ及び配列ｃのデータに対するアクセスにあると判断することが可能になる。
【０１１１】
また、情報出力部は、例えば、Ｓ１１の処理で指定された複数の配列毎に、キャッシュミス情報１３２のカウンタに設定された回数をキャッシュアクセス情報１３１のカウンタに設定された回数で除算し、除算して算出した値を情報格納領域１３０に記憶する（Ｓ３４）。
【０１１２】
具体的に、情報出力部は、図２５（Ａ）で説明したキャッシュミス情報１３２における配列ａに対応する情報の「カウンタ」に設定された値である「１２８」を、図２５（Ｂ）で説明したキャッシュアクセス情報１３１における配列ａに対応する情報の「カウンタ」に設定された値である「１２８」で除算した値に「１００」を乗算する。そして、情報出力部は、算出された値である「１００（％）」を配列ａのキャッシュミス率として算出し、情報格納領域１３０に記憶する。同様に、配列ｂ、配列ｃ及び配列ｄのキャッシュミス率として、「１００（％）」、「１００（％）」及び「３．１２（％）」をそれぞれ算出し、情報格納領域１３０に記憶する。
【０１１３】
これにより、研究者は、キャッシュの有効利用を行うための方法の模索をより効率的に行うことが可能になる。
【０１１４】
以上の実施の形態をまとめると、以下の付記のとおりである。
【０１１５】
（付記１）
検証対象プログラムの実行に伴ってアクセスされた複数の配列のデータがそれぞれ格納されたキャッシュラインを比較して、前記検証対象プログラムの実行に伴って前記複数の配列のデータが格納された回数が、キャッシュのウェイ数を上回る特定のキャッシュラインが存在するか否かを判定し、
前記特定のキャッシュラインが存在すると判定した場合、前記特定のキャッシュラインにおいてキャッシュスラッシングが発生した回数を示すカウンタをインクリメントする、
処理をコンピュータに実行させることを特徴とするキャッシュ情報出力プログラム。
【０１１６】
（付記２）
付記１において、
前記複数の配列は、前記検証対象プログラムのソースコードにおいてループ命令に囲まれる特定の命令に含まれており、
前記特定のキャッシュラインが存在するか否かを判定する処理は、前記ループ命令よって前記特定の命令が実行される毎に行われる、
ことを特徴とするキャッシュ情報出力プログラム。
【０１１７】
（付記３）
付記１において、さらに、
前記特定のキャッシュラインが存在するか否かを判定する処理の前に、前記複数の配列の指定を受け付ける、
処理をコンピュータに実行させることを特徴とするキャッシュ情報出力プログラム。
【０１１８】
（付記４）
付記１において、さらに、
前記キャッシュスラッシングが発生した回数をインクリメントする処理の後、前記カウンタが示す回数を出力する、
処理をコンピュータに実行させることを特徴とするキャッシュ情報出力プログラム。
【０１１９】
（付記５）
付記１において、さらに、
前記特定のキャッシュラインが存在するか否かを判定する処理の前に、前記検証対象プログラムの実行に伴って前記複数の配列のデータが格納されたキャッシュラインを示す情報を出力する命令を、前記検証対象プログラムに追加する、
処理をコンピュータに実行させ、
前記特定のキャッシュラインが存在するか否かを判定する処理では、前記検証対象プログラムの実行に伴って出力された、前記キャッシュラインを示す情報を比較して、前記特定のキャッシュラインが存在するか否かの判定を行う、
ことを特徴とするキャッシュ情報出力プログラム。
【０１２０】
（付記６）
付記１において、さらに、
前記特定のキャッシュラインが存在するか否かを判定する処理の前に、前記複数の配列のうち、前記検証対象プログラムの実行に伴ってデータがアクセスされた配列を示す情報と、前記複数の配列のうち、前記検証対象プログラムの実行に伴ってキャッシュミスが発生した配列を示す情報とを出力する命令を、前記検証対象プログラムに追加し、
前記検証対象プログラムの実行に伴って出力された、前記キャッシュミスが発生した配列を示す情報が出力された回数を、前記検証対象プログラムの実行に伴って出力された、前記データがアクセスされた配列を示す情報が出力された回数で除算した値を、前記複数の配列毎に算出し、
算出した前記値を出力する、
処理をコンピュータに実行させることを特徴とするキャッシュ情報出力プログラム。
【０１２１】
（付記７）
検証対象プログラムの実行に伴ってアクセスされた複数の配列のデータがそれぞれ格納されたキャッシュラインを比較して、前記検証対象プログラムの実行に伴って前記複数の配列のデータが格納された回数が、キャッシュのウェイ数を上回る特定のキャッシュラインが存在するか否かを判定し、
前記特定のキャッシュラインが存在すると判定した場合、前記特定のキャッシュラインにおいてキャッシュスラッシングが発生した回数を示すカウンタをインクリメントする、
ことを特徴とするキャッシュ情報出力方法。
【０１２２】
（付記８）
付記７において、
前記複数の配列は、前記検証対象プログラムのソースコードにおいてループ命令に囲まれる特定の命令に含まれており、
前記特定のキャッシュラインが存在するか否かを判定する工程は、前記ループ命令よって前記特定の命令が実行される毎に行われる、
ことを特徴とするキャッシュ情報出力方法。
【０１２３】
（付記９）
検証対象プログラムの実行に伴ってアクセスされた複数の配列のデータがそれぞれ格納されたキャッシュラインを比較して、前記検証対象プログラムの実行に伴って前記複数の配列のデータが格納された回数が、キャッシュのウェイ数を上回る特定のキャッシュラインが存在するか否かを判定し、前記特定のキャッシュラインが存在すると判定した場合、前記特定のキャッシュラインにおいてキャッシュスラッシングが発生した回数を示すカウンタをインクリメントする情報作成部を有する、
ことを特徴とする情報処理装置。
【０１２４】
（付記１０）
付記９において、
前記複数の配列は、前記検証対象プログラムのソースコードにおいてループ命令に囲まれる特定の命令に含まれており、
前記情報作成部は、前記ループ命令よって前記特定の命令が実行される毎に、前記特定のキャッシュラインが存在するか否かの判定を行う、
ことを特徴とする情報処理装置。
【符号の説明】
【０１２５】
１：情報処理装置              １ａ：記憶装置
１１：研究者端末              ＮＷ：ネットワーク
【図１】
2018005667.tif 000003
【図２】
2018005667.tif 000004
【図３】
2018005667.tif 000005
【図４】
2018005667.tif 000006
【図５】
2018005667.tif 000007
【図６】
2018005667.tif 000008
【図７】
2018005667.tif 000009
【図８】
2018005667.tif 000010
【図９】
2018005667.tif 000011
【図１０】
2018005667.tif 000012
【図１１】
2018005667.tif 000013
【図１２】
2018005667.tif 000014
【図１３】
2018005667.tif 000015
【図１４】
2018005667.tif 000016
【図１５】
2018005667.tif 000017
【図１６】
2018005667.tif 000018
【図１７】
2018005667.tif 000019
【図１８】
2018005667.tif 000020
【図１９】
2018005667.tif 000021
【図２０】
2018005667.tif 000022
【図２１】
2018005667.tif 000023
【図２２】
2018005667.tif 000024
【図２３】
2018005667.tif 000025
【図２４】
2018005667.tif 000026
【図２５】
2018005667.tif 000027