(57)【特許請求の範囲】
【請求項１】
記憶部の記憶領域の確保要求により呼び出された特定のルーチンが確保した記憶領域に対するアクセス要求に応じて生じたキャッシュミスの数を取得し、
取得した前記キャッシュミスの数が所定数以上であれば、前記確保要求により呼び出される前記特定のルーチンが確保する新たな記憶領域を、前記記憶部のいずれかの記憶領域に対応付いたキャッシュラインの数でキャッシュメモリを分割した領域の半分のサイズ分前記確保した記憶領域からずらして設定し、
前記確保要求を複数回行った結果、前記分割した領域のサイズと、取得した前記キャッシュミスの数が前記所定数以上となった回数とに基づいて、前記特定のルーチンが新たな記憶領域を確保する際にずらすサイズを算出し、
確保した記憶領域から算出した前記サイズ分ずらして新たな記憶領域を設定する、
制御部を有することを特徴とする情報処理装置。
【請求項２】
コンピュータが、
記憶部の記憶領域の確保要求により呼び出された特定のルーチンが確保した記憶領域に対するアクセス要求に応じて生じたキャッシュミスの数を取得し、
取得した前記キャッシュミスの数が所定数以上であれば、前記確保要求により呼び出される前記特定のルーチンが確保する新たな記憶領域を、前記記憶部のいずれかの記憶領域に対応付いたキャッシュラインの数でキャッシュメモリを分割した領域の半分のサイズ分前記確保した記憶領域からずらして設定し、
前記確保要求を複数回行った結果、前記分割した領域のサイズと、取得した前記キャッシュミスの数が前記所定数以上となった回数とに基づいて、前記特定のルーチンが新たな記憶領域を確保する際にずらすサイズを算出し、
確保した記憶領域から算出した前記サイズ分ずらして新たな記憶領域を設定する、
処理を実行することを特徴とするデータ処理方法。
【請求項３】
コンピュータに、
記憶部の記憶領域の確保要求により呼び出された特定のルーチンが確保した記憶領域に対するアクセス要求に応じて生じたキャッシュミスの数を取得し、
取得した前記キャッシュミスの数が所定数以上であれば、前記確保要求により呼び出される前記特定のルーチンが確保する新たな記憶領域を、前記記憶部のいずれかの記憶領域に対応付いたキャッシュラインの数でキャッシュメモリを分割した領域の半分のサイズ分前記確保した記憶領域からずらして設定し、
前記確保要求を複数回行った結果、前記分割した領域のサイズと、取得した前記キャッシュミスの数が前記所定数以上となった回数とに基づいて、前記特定のルーチンが新たな記憶領域を確保する際にずらすサイズを算出し、
確保した記憶領域から算出した前記サイズ分ずらして新たな記憶領域を設定する、
処理を実行させることを特徴とするデータ処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、データ処理方法、およびデータ処理プログラムに関する。
【背景技術】
【０００２】
キャッシュメモリ内のあるキャッシュラインのデータが頻繁に上書きされるというキャッシュスラッシングと呼ばれる現象がある。関連する先行技術として、例えば、パフォーマンスモニタを用いることによりキャッシュミスデータを収集するためにアプリケーションをプロファイルし、長時間キャッシュミスを生ずる問題命令の実効アドレス位置よりも前にプリロード命令を挿入するものがある。また、配列をパディングしてもキャッシュ利用効率の低下に起因する性能の低下が小さいか否かを判定する技術がある。また、プリフェッチの単位であるループを単位として、ループのキャッシュミス率がある閾値以上であるかを、プログラムの実行時に予測するループ内キャッシュミス実行時予測コードを付加する技術がある。また、ループ整合分割を行った後、同一データローカライザブルグループ（Ｄａｔａ  Ｌｏｃａｌｉｚａｂｌｅ  Ｇｒｏｕｐ：ＤＬＧ）に属する各小ループ同士を可能な限り連続実行するスケジューリングを行うとともに、パディングを用いて各ＤＬＧで使用される配列データについてレイアウト変更を行う技術がある。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０００−０３５８９４号公報
【特許文献２】特開２０１１−１２８８０３号公報
【特許文献３】特開平１０−２０７７７２号公報
【特許文献４】特開２００４−２５２７２８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来技術によれば、プログラム実行中のキャッシュスラッシングの発生を抑制することが困難である。例えば、パフォーマンスモニタを用いて解析した結果キャッシュスラッシングが発生することを検出してパディングを追加したとしても、実際にキャッシュスラッシングの発生が抑制されたかを確認するために解析とプログラム実行とを複数回繰り返すことになる。
【０００５】
１つの側面では、本発明は、プログラム実行中のキャッシュスラッシングの発生を抑制する情報処理装置、データ処理方法、およびデータ処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の一側面によれば、記憶部の記憶領域の確保要求により呼び出された特定のルーチンが確保した記憶領域に対するアクセス要求に応じて生じたキャッシュミスの数を取得し、取得した前記キャッシュミスの数が所定数以上であれば、前記確保要求により呼び出される前記特定のルーチンが確保する新たな記憶領域を、前記記憶部のいずれかの記憶領域に対応付いたキャッシュラインの数でキャッシュメモリを分割した領域の半分のサイズ分前記確保した記憶領域からずらして設定し、前記確保要求を複数回行った結果、前記分割した領域のサイズと、取得した前記キャッシュミスの数が前記所定数以上となった回数とに基づいて、前記特定のルーチンが新たな記憶領域を確保する際にずらすサイズを算出し、確保した記憶領域から算出した前記サイズ分ずらして新たな記憶領域を設定する情報処置装置、データ処理方法、およびデータ処理プログラムが提案される。
【発明の効果】
【０００７】
本発明の一態様によれば、プログラム実行中のキャッシュスラッシングの発生の抑制を図ることができるという効果を奏する。
【図面の簡単な説明】
【０００８】
【図１】図１は、本実施の形態にかかる情報処理装置１００の動作例を示す説明図である。
【図２】図２は、情報処理装置１００のハードウェア構成例を示す説明図である。
【図３】図３は、情報処理装置１００の機能構成例を示すブロック図である。
【図４】図４は、ビルド時の動作例と実行時の動作例とを示す説明図である。
【図５】図５は、キャッシュミス情報採取コードの挿入例を示す説明図である。
【図６】図６は、パディング実施の動作例を示す説明図である。
【図７】図７は、パディングサイズの算出例を示す説明図である。
【図８】図８は、スラッシング情報テーブル３１０の記憶内容の一例を示す説明図（その１）である。
【図９】図９は、スラッシング情報テーブル３１０の記憶内容の一例を示す説明図（その２）である。
【図１０】図１０は、キャッシュミス情報採取コード挿入処理手順の一例を示すフローチャートである。
【図１１】図１１は、動的領域確保処理手順の一例を示すフローチャートである。
【図１２】図１２は、パディングサイズ算出処理手順の一例を示すフローチャートである。
【図１３】図１３は、キャッシュミス情報採取処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【０００９】
以下に図面を参照して、開示の情報処理装置、データ処理方法、およびデータ処理プログラムの実施の形態を詳細に説明する。
【００１０】
図１は、本実施の形態にかかる情報処理装置１００の動作例を示す説明図である。情報処理装置１００は、実行コード１０１を実行するコンピュータである。情報処理装置１００は、例えば、サーバでもよいし、携帯電話等の携帯端末であってもよい。より具体的には、情報処理装置１００は、記憶部１０２と、Ｌ１キャッシュメモリ１０３とを有する。Ｌ１キャッシュメモリ１０３は、記憶部１０２のデータの一部を記憶する。そして、情報処理装置１００のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）が、Ｌ１キャッシュメモリ１０３や記憶部１０２にアクセスして、実行コード１０１を実行する。
【００１１】
Ｌ１キャッシュメモリ１０３は、アクセス要求の前に発生するプリフェッチ時またはアクセス要求時に、アクセス対象となる記憶領域がキャッシュラインに割り付けられているかを検索する。割り付けられていない場合、Ｌ１キャッシュメモリ１０３は、キャッシュミスとして、アクセス対象となる記憶領域をキャッシュラインに割り付ける。以下、単に、キャッシュミスと記載した場合、プリフェッチ時のキャッシュミスと、アクセス要求によるキャッシュミスとを含むものとする。また、アクセス要求によるキャッシュミスを、「デマンドミス」と呼称する。
【００１２】
ここで、キャッシュメモリ内のあるキャッシュラインのデータが頻繁に上書きされるというキャッシュスラッシングと呼ばれる現象が発生することがある。キャッシュスラッシングが発生すると、キャッシュラインの入れ替えが頻繁に発生することになり、キャッシュメモリの性能が低下することになる。また、キャッシュスラッシングは、配列サイズが２のべき乗の場合やループ内の処理に伴って参照定義される一連のデータの数が多い場合に、発生しやすくなることが知られている。
【００１３】
キャッシュスラッシングの発生を抑制する技術としては、ツールを用いて解析することによりキャッシュスラッシングの発生を検出し、キャッシュスラッシングを発生させるデータを特定し、開発者が、データに対して手動でパディングを行うものがある。しかしながら、キャッシュスラッシングを発生させるデータを特定するために解析とプログラム実行を複数回行うことになる。また、パディングサイズについても、キャッシュスラッシングの発生を抑制できる最良の値を求めるためには、ツールによる解析とプログラムの実行とを複数回行うことになる。
【００１４】
そこで、情報処理装置１００は、確保した記憶領域のキャッシュミスの数が所定値以上、すなわちキャッシュスラッシングが発生したと判定したのであれば、新たな記憶領域を確保した記憶領域からずらして設定する。これにより、競合するキャッシュラインとは別のキャッシュラインに新たな記憶領域が割り付けられるので、情報処理装置１００は、キャッシュスラッシングの抑制を図ることができる。所定値は、開発者が予め決めた値であってもよいし、前回動作した際に得られたロード命令、ストア命令の合計値に対して開発者が予め決めた割合を乗じた値でもよい。
【００１５】
また、情報処理装置１００は、確保した記憶領域のキャッシュミス率が所定の割合以上であれば、新たな記憶領域を確保した記憶領域からずらして設定してもよい。ここで、キャッシュミス率は、ロード命令、ストア命令の合計値に対するキャッシュミスの数である。
【００１６】
また、新たな記憶領域をずらして設定する方法としては、例えば、情報処理装置１００は、ダミーの記憶領域をパディングとして確保した後に、新たな記憶領域を確保してもよい。または、情報処理装置１００は、確保する記憶領域のアドレスを指定することが可能であれば、本来確保する予定である記憶領域の先頭アドレスに、予め決められた値を加えた値を先頭アドレスとして、記憶領域を確保してもよい。または、例えば、本来確保する予定である記憶領域の前の領域が解放されているならば、情報処理装置１００は、本来確保する予定である記憶領域の先頭アドレスに、予め決められた値を減じた値を先頭アドレスとして、記憶領域を確保してもよい。以下では、パディングする例を用いて説明する。
【００１７】
また、図１の例では、説明の簡略化のため、Ｌ１キャッシュメモリ１０３に含まれるキャッシュラインは４個であり、それぞれのキャッシュラインを、キャッシュライン１０４−０〜３とする。また、記憶部１０２のいずれかの記憶領域に対応付いたキャッシュラインの数を１とする。ここで、以下の説明では、記憶部１０２のいずれかの記憶領域に対応付いたキャッシュラインの数を、「ｗａｙ数」と呼称し、キャッシュメモリをｗａｙ数で分割したものを「１ｗａｙ」と呼称する。具体的には、記憶部１０２のいずれかの記憶領域が、どのキャッシュラインに対応付くのかは、アドレスの下位ビットにより決定される。図１の例では、記憶部１０２の各記憶領域は、各記憶領域の下位ビットの値の小さい順に、キャッシュライン１０４−０、１、２、３の順で対応付くものとする。例えば、ある記憶領域の先頭アドレスの下位ビットが０であれば、ある記憶領域は、キャッシュライン１０４−０に対応付くものとする。
【００１８】
また、実行コード１０１は、１０２４個の要素を有する配列ａ、ｂの記憶領域を確保要求に従って動的に確保した後、何らかの処理を行い、配列ｂの各要素の値を配列ａの各要素に設定する処理をＮ回繰り返すものである。また、説明の簡略化のため、配列ａ、ｂの各要素のデータサイズが、１つのキャッシュラインのサイズに一致するものとする。また、情報処理装置１００は、確保要求を検出すると、確保要求を行う特定のルーチンにより、記憶領域を確保する。
【００１９】
図１の（ａ）では、配列ａ、ｂの記憶領域を動的に１回目に確保した状態を示す。図１の（ａ）では、パディングを行っていない。従って、ａ（０）、ｂ（０）のデータを記憶するために確保された記憶領域は、キャッシュライン１０４−０に対応する。以下、配列（ｘ）のデータを記憶するために確保された記憶領域を、単に、「配列（ｘ）の記憶領域」と称する。以下、同様に、ａ（１）、ｂ（１）の記憶領域は、キャッシュライン１０４−１に対応し、ａ（２）、ｂ（２）の記憶領域は、キャッシュライン１０４−２に対応する。
【００２０】
従って、図１の（ａ）では、キャッシュスラッシングが発生することになる。ここでは、ｊ＝０となる「ａ（０）＝ｂ（０）」の場合について説明する。ｂ（０）のアクセス要求の前に発生するプリフェッチ時に、情報処理装置１００は、ｂ（０）の記憶領域がキャッシュライン１０４−０に割り付けられていないため、キャッシュミスとなり、ｂ（０）の記憶領域を、キャッシュライン１０４−０に割り付ける。ここで、ｂ（０）の記憶領域とａ（０）の記憶領域とは、同一のキャッシュライン１０４−０に対応するため、この段階で、ａ（０）の記憶領域をキャッシュライン１０４−０に割り付けることはできない。そして、情報処理装置１００は、ａ（０）のアクセス要求時、ａ（０）のデータがキャッシュライン１０４−０に割り付けられていないため、デマンドミスとなり、ａ（０）の記憶領域を、キャッシュライン１０４−０に割り付ける。このように、図１の（ａ）の例では、デマンドミスが多く発生することになる。
【００２１】
キャッシュスラッシングが発生しているか否かを判定するため、配列ａ、ｂの記憶領域を動的に１回目に確保した際において、情報処理装置１００は、キャッシュミスの数を取得する。なお、キャッシュミスの数は、情報処理装置１００が有するハードウェアカウンタ情報から取得できるものとする。ここでハードウェアカウンタ情報は、プログラムの実行時に実行される浮動小数点命令情報やＬ１、Ｌ２キャッシュミス数、ＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）命令情報等の総称である。
【００２２】
図１の（ａ）が示す例では、デマンドミスが多く発生した結果、情報処理装置１００が、キャッシュスラッシングが発生したものとする。図１の（ｂ）では、パディングを行った例を示す。パディングサイズは、１キャッシュラインサイズの倍数であればどのようなサイズでもよいが、１ｗａｙの領域の半分のサイズであることが好ましい。１ｗａｙの領域の半分のサイズが、キャッシュスラッシングを抑制することができる可能性が最も高いためである。この理由として、仮に、１ｗａｙの領域のサイズ分パディングを行うと、キャッシュスラッシングが発生する可能性は、パディングを行わなかった場合、すなわちサイズ０のパディングを行った場合と同じとなる。
【００２３】
従って、１ｗａｙの領域のサイズと、サイズ０とから最も離れた値である、１ｗａｙの領域の半分のサイズが、キャッシュスラッシングの有無が変わる可能性が最も高いものとなる。さらに、サイズ０の場合でキャッシュスラッシングが発生するならば、１ｗａｙの領域の半分のサイズは、キャッシュスラッシングが発生しない、すなわち、キャッシュスラッシングの発生を抑制することができる可能性が最も高くなる値となる。
【００２４】
図１の（ｂ）では、配列ａ、ｂの記憶領域を動的に２回目以降に確保した状態を示す。ここで、図１の（ｂ）では、１ｗａｙの領域の半分のサイズ分、すなわち２キャッシュラインのサイズ分パディングした例を示す。従って、ａ（０）、ｂ（２）の記憶領域は、キャッシュライン１０４−０に対応する。また、ａ（１）の記憶領域は、キャッシュライン１０４−１に対応し、ａ（２）、ｂ（０）の記憶領域は、キャッシュライン１０４−２に対応する。また、ｂ（１）の記憶領域は、キャッシュライン１０４−３に対応する。
【００２５】
従って、図１の（ｂ）では、キャッシュスラッシングが発生しないものになる。ここでは、図１の（ａ）と同様に、ｊ＝０となる「ａ（０）＝ｂ（０）」の場合について説明する。ｂ（０）のアクセス要求の前に発生するプリフェッチ時に、情報処理装置１００は、ｂ（０）の記憶領域がキャッシュライン１０４−０に割り付けられていないため、キャッシュミスとなり、ｂ（０）の記憶領域を、キャッシュライン１０４−２に割り付ける。ここで、ｂ（０）の記憶領域とａ（０）の記憶領域とは、異なるキャッシュラインに対応するため、この段階で、情報処理装置１００は、ａ（０）の記憶領域をキャッシュライン１０４−０に割り付けることができる。従って、図１の（ｂ）の例では、図１の（ａ）の例では発生していたデマンドミスが発生しなくなり、情報処理装置１００は、キャッシュスラッシングの発生を抑制することができる。次に、情報処理装置１００のハードウェア構成について、図２を用いて説明する。
【００２６】
図２は、情報処理装置１００のハードウェア構成例を示す説明図である。図２において、情報処理装置１００は、ＣＰＵ２０１と、ＲＯＭ２０２と、ＲＡＭ２０３と、を含む。また、情報処理装置１００は、ディスクドライブ２０４およびディスク２０５と、通信インターフェース２０６と、を含む。また、ＣＰＵ２０１〜ディスクドライブ２０４、通信インターフェース２０６はバス２０７によってそれぞれ接続される。なお、図１に示した記憶部１０２は、ＲＡＭ２０３に相当する。
【００２７】
ＣＰＵ２０１は、情報処理装置１００の全体の制御を司る演算処理装置である。また、管理ノードは、複数のＣＰＵを有してもよい。ＲＯＭ２０２は、ブートプログラムなどのプログラムを記憶する不揮発性メモリである。ＲＡＭ２０３は、ＣＰＵ２０１のワークエリアとして使用される揮発性メモリである。
【００２８】
ディスクドライブ２０４は、ＣＰＵ２０１の制御に従ってディスク２０５に対するデータのリードおよびライトを制御する制御装置である。ディスクドライブ２０４には、例えば、磁気ディスクドライブ、光ディスクドライブ、ソリッドステートドライブなどを採用することができる。ディスク２０５は、ディスクドライブ２０４の制御で書き込まれたデータを記憶する不揮発性メモリである。例えばディスクドライブ２０４が磁気ディスクドライブである場合、ディスク２０５には、磁気ディスクを採用することができる。また、ディスクドライブ２０４が光ディスクドライブである場合、ディスク２０５には、光ディスクを採用することができる。また、ディスクドライブ２０４がソリッドステートドライブである場合、ディスク２０５には、半導体素子によって形成された半導体メモリ、いわゆる半導体ディスクを採用することができる。
【００２９】
通信インターフェース２０６は、ネットワークと内部のインターフェースを司り、他の装置からのデータの入出力を制御する制御装置である。具体的に、通信インターフェース２０６は、通信回線を通じてネットワークを介して他の装置に接続される。通信インターフェース２０６には、例えば、モデムやＬＡＮアダプタなどを採用することができる。
【００３０】
また、情報処理装置１００の管理者が、情報処理装置１００を直接操作する場合、情報処理装置１００は、ディスプレイ、キーボード、マウスといったハードウェアを有してもよい。
【００３１】
（情報処理装置１００の機能構成例）
図３は、情報処理装置１００の機能構成例を示すブロック図である。情報処理装置１００は、制御部３００を有する。制御部３００は、取得部３０１と、判定部３０２と、算出部３０３と、設定部３０４とを有する。制御部３００は、記憶装置に記憶されたプログラムをＣＰＵ２０１が実行することにより、各部の機能を実現する。記憶装置とは、具体的には、例えば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、ディスク２０５などである。また、各部の処理結果は、ＣＰＵ２０１のレジスタや、ＣＰＵ２０１のキャッシュメモリ等に格納される。
【００３２】
また、情報処理装置１００は、スラッシング情報テーブル３１０にアクセス可能である。スラッシング情報テーブル３１０は、キャッシュミスの数を記憶するテーブルである。また、スラッシング情報テーブル３１０は、ロード命令、ストア命令に対するキャッシュミスの割合であるキャッシュミス率を記憶してもよい。スラッシング情報テーブル３１０は、ＲＡＭ２０３、ディスク２０５といった記憶装置に格納される。
【００３３】
取得部３０１は、ＲＡＭ２０３の記憶領域の確保要求により呼び出された特定のルーチンが確保した記憶領域に対するアクセス要求に応じて生じたキャッシュミスの数を取得する。
【００３４】
判定部３０２は、取得部３０１が取得したキャッシュミスの数が所定数以上であるか否かを判定する。また、判定部３０２は、ロード命令、ストア命令に対して、取得部３０１が取得したキャッシュミスの数の割合、すなわち、キャッシュミス率が所定の割合以上であるか判定してもよい。以下、所定の割合を、「キャッシュミス率閾値」と呼称する。キャッシュミス率閾値は、開発者によって決められた固定値でもよいし、動的領域確保時にプログラム内に記載された引数に従ってもよい。
【００３５】
算出部３０３は、確保要求を複数回行った結果、１ｗａｙのサイズと、取得部３０１が取得したキャッシュミス率がキャッシュミス率閾値以上となった回数とに基づいて、新たな記憶領域を確保する際にずらすサイズを算出する。例えば、算出部３０３は、１ｗａｙのサイズから、１ｗａｙのサイズを２の回数乗で除した値で減じることを回数分繰り返してもよい。例えば、１ｗａｙのサイズが１６［ＫｉＢ］であり、取得部３０１が取得したキャッシュミス率がキャッシュミス率閾値以上となった回数が３であったとする。この例では、算出部３０３は、１６−（１６／２＾１）−（１６／２＾２）−（１６／２＾３）＝１６−８−４−２＝２［ＫｉＢ］として算出する。
【００３６】
また、算出部３０３は、新たな記憶領域を確保する際にずらすサイズを、１回目に確保した際の記憶領域からのものとして算出してもよいし、直前に確保した際の記憶領域からのものとして算出してもよい。
【００３７】
また、算出部３０３は、確保要求を複数回行った結果、１ｗａｙのサイズを、２の回数乗で除することにより、新たな記憶領域を確保する際にずらすサイズを算出してもよい。例えば、１ｗａｙのサイズが１６［ＫｉＢ］であり、取得部３０１が取得したキャッシュミス率がキャッシュミス率閾値以上となった回数が２であったとする。このとき、算出部３０３は、新たな記憶領域を確保する際にずらすサイズを、１６／２＾２＝４［ＫｉＢ］として算出する。
【００３８】
設定部３０４は、確保要求により呼び出される特定のルーチンが確保する新たな記憶領域を確保した記憶領域からずらして設定する。また、設定部３０４は、新たな記憶領域を、１ｗａｙの半分のサイズ分確保した記憶領域からずらして設定してもよい。また、設定部３０４は、算出部３０３が算出したサイズ分確保した記憶領域からずらして新たな記憶領域を設定してもよい。ここで、ずらす方向は、１ｗａｙの半分のサイズや算出部３０３が算出したサイズ分値を加える向きでもよいし、減ずる向きでもよい。
【００３９】
図４は、ビルド時の動作例と実行時の動作例とを示す説明図である。図４では、適切なパディングサイズを設定するために行うビルド時の動作と、実行時の動作とについて説明する。ここで、ビルド時の動作の主体は、情報処理装置１００でもよいし、他の装置でもよい。図４では、説明の簡略化のため、情報処理装置１００がビルドを行うものとする。
【００４０】
ビルド時において、情報処理装置１００は、プログラムコードをコンパイルする際に、プログラムコードに、キャッシュミス情報採取コードを挿入する（ステップＳ４０１）。キャッシュミス情報採取コードを挿入する具体的な例については、図５で示す。次に、情報処理装置１００は、プログラムコードに、キャッシュスラッシング判定コードおよびパディングコードを挿入する（ステップＳ４０２）。具体的には、情報処理装置１００は、プログラムコードをコンパイルしたオブジェクトと、キャッシュスラッシング判定コードおよびパディングコードを有するロードモジュールとをリンクして、実行コードを得る。また、情報処理装置１００は、キャッシュスラッシング判定コードまたはパディングコードが実行される際に、前述のロードモジュールを、プログラムコードをコンパイルしたオブジェクトと動的リンクしてもよい。
【００４１】
次に、実行コードの実行時において、情報処理装置１００は、キャッシュミス情報採取コードが実行されることにより、キャッシュミス情報を採取する（ステップＳ４０３）。採取したキャッシュミス情報は、スラッシング情報テーブル３１０に格納される。そして、情報処理装置１００は、スラッシング情報テーブル３１０を参照して、動的領域確保処理の中で、スラッシングの判定およびパディングの実施を行う（ステップＳ４０４）。具体的なパディングの実施例を、図６で示す。また、パディングサイズの算出例を図７で示す。
【００４２】
図５は、キャッシュミス情報採取コードの挿入例を示す説明図である。図５では、ビルド時におけるキャッシュミス情報採取コードの挿入例を示す。プログラムコード５０１は、キャッシュミス情報採取コードの挿入前の状態を示す。プログラムコード５０２は、キャッシュミス情報採取コードの挿入後の状態を示す。また、図５の例では、プログラムコード５０１内の配列ａ、ｂ、ｃについてのキャッシュミス情報採取コードの例を示す。そして、プログラムコード５０２では、プログラムコード５０１に記載された「ａ（ｉ）＝ａ（ｉ）＋ｂ（ｉ）＊ｃ（ｉ）」をコンパイルしたアセンブラコードに対して、キャッシュミス情報採取コードを挿入した例を示す。
【００４３】
プログラムコード５０２内のコード５１１〜５１６が、キャッシュ情報採取コードである。具体的には、コード５１１、５１２が、配列ｂに対するキャッシュミス情報採取コードである。同様に、コード５１３、５１４が、配列ｃに対するキャッシュミス情報採取コードである。また、コード５１５、５１６が、配列ａに対するキャッシュミス情報採取コードである。ここで、コード５１１〜５１６が採取する情報は、図８で説明する。また、情報処理装置１００は、コード５１１〜５１６により採取したキャッシュミス情報を、スラッシング情報テーブル３１０に格納する。
【００４４】
図６は、パディング実施の動作例を示す説明図である。図６の（ａ）では、領域確保処理中におけるパディング実施の動作例を示す。実行コード６０１は、プログラムコードをコンパイルした後の状態を示す。ここで、実行コード６０１は、配列ａ、ｂの領域を確保して、配列ａ、ｂに対する処理を行い、配列ａ、ｂの領域を解放するという一連の処理をＮ回繰り返すものとする。
【００４５】
そして、実行コード６０２は、実行コード６０１を実行する際のイメージを示す。実行コード６０２では、配列ｂに対してパディングを実施するものとする。具体的には、情報処理装置１００は、実行コード６０１の実行中に、動的領域確保処理を呼び出す「ａｌｌｏｃａｔｅ」を検出すると、特定のルーチンとして、キャッシュスラッシング判定コードおよびパディングコードを有するロードモジュールを呼び出す。そして、情報処理装置１００は、キャッシュスラッシング判定を行う。なお、動的領域確保処理を呼び出す名称としては、他の例では、「ｍａｌｌｏｃ」等がある。
【００４６】
図６の（ａ）の例では、情報処理装置１００は、キャッシュスラッシングありと判定し、パディングを実施する。パディングサイズをイメージした変数が、実行コード６０２内の「ｒｅａｌ（ｉ），ａｌｌｏｃａｔａｂｌｅ，ｄｉｍｅｎｓｉｏｎ（：）：：ｄｍｙ１」である。そして、情報処理装置１００は、コード６０３が示すように、配列ｂの領域を確保する前に、ｄｍｙ１の記憶領域を確保することにより、パディングを実施する。図６の（ｂ）では、配列ａ、ｂ用に確保された記憶領域を模式化したものを示す。符号６０４は、パディングなしの場合で、配列ａの記憶領域と配列ｂの記憶領域とが連続した様子を示す。また、符号６０５は、パディングありの場合で、配列ａの記憶領域と配列ｂの記憶領域との間にｄｍｙ１の記憶領域が配置された様子を示す。具体的なパディングサイズの算出例については、図７で説明する。
【００４７】
図７は、パディングサイズの算出例を示す説明図である。情報処理装置１００は、１回目のパディングサイズを、１ｗａｙのデータサイズの半分とし、２回目のパディングサイズを、１ｗａｙデータサイズの４分の１とし、以下、１キャッシュラインのサイズとなるまで行う。一般化すると、Ｎ回目のパディングサイズは、下記（１）式となる。
【００４８】
パディングサイズ＝１ｗａｙのデータサイズ／２＾Ｎ  …（１）
【００４９】
また、パディングを繰り返す条件として、Ｎ−１回目のパディングを行った結果、キャッシュミス率が一定数以上変化した場合に、Ｎ回目のパディングを行うものとする。例えば、Ｌ１Ｄキャッシュのサイズが６４［ＫｉＢ］であり、１キャッシュラインが２５６［Ｂｙｔｅ］であり、４ｗａｙの場合について説明する。この場合、１ｗａｙのデータサイズは、６４［ＫｉＢ］／４＝１６［ＫｉＢ］となる。従って、情報処理装置１００は、（１）式に従って、１回目のパディングサイズを１６／２＾１＝８［ＫｉＢ］とする。次に、１回目のパディングによりキャッシュミスの数が一定数以上変化したとして、情報処理装置１００は、２回目のパディングサイズを１６／２＾２＝４［ＫｉＢ］とする。
【００５０】
図７では、パディングを行わずにキャッシュスラッシングが発生する例と、１回パディングを行ってキャッシュスラッシングの発生を回避できた例を示す。より具体的には、図７の（ａ）では、ａ、ｂ、ｃ、ｄ、ｅという、１６［ＫｉＢ］のサイズを有する配列を確保する例について示す。そして、図７の（ｂ）では、配列ａ、ｂ、ｃ、ｄ、ｅのいずれにもパディングを行わなかった際に、キャッシュスラッシングが発生する例を示す。具体的には、ｅ（１）は、ａ（１）〜ｄ（１）のいずれかとキャッシュラインが競合するため、ｗａｙ１〜４のいずれかを上書きすることになり、キャッシュスラッシングが発生することになる。
【００５１】
次に、図７の（ｃ）では、配列ｅの前に８［ＫｉＢ］のパディングを行った例を示す。この場合、ｅ（１）は、ａ（１）〜ｄ（１）のいずれとも、対応するキャッシュラインが異なるため、上書きされず、キャッシュスラッシングの発生を回避することができる。なお、ａ（１）〜ｄ（１）は、同一のキャッシュラインの割り当てとなるが、Ｌ１Ｄキャッシュが４ｗａｙであるため、競合が発生しない。
【００５２】
図８は、スラッシング情報テーブル３１０の記憶内容の一例を示す説明図（その１）である。スラッシング情報テーブル３１０は、対象キャッシュと、名前と、宣言サイズと、アドレス情報と、インデックス情報と、パディングおよびキャッシュミス情報というフィールドを含む。
【００５３】
対象キャッシュフィールドには、対象となるキャッシュの名称が格納される。名前フィールドは、配列宣言名フィールドを有する。配列宣言名フィールドは、配列の宣言名が格納される。宣言サイズフィールドは、データサイズと、次元数と、各次元の宣言サイズというフィールドを有する。データサイズフィールドは、配列の１つの要素分のデータサイズが格納される。次元数フィールドは、配列の次元数が格納される。各次元の宣言サイズフィールドには、配列の次元ごとに、宣言サイズが格納される。
【００５４】
アドレス情報フィールドには、配列の先頭アドレスが格納される。インデックス情報フィールドには、各次元のインデックスが格納される。
【００５５】
パディングおよびキャッシュミス情報フィールドには、パディング回数と、発生回数と、各回数におけるパディングサイズとキャッシュミス情報というフィールドを有する。パディング回数フィールドには、動的領域確保時にパディングサイズを変更した回数が格納される。発生回数フィールドには、キャッシュミス率閾値を超えた回数が格納される。各回数におけるパディングサイズフィールドには、該当の回数における配列間のパディングサイズが格納される。各回数におけるキャッシュミス情報は、各回数におけるロードストア命令数と、各回数におけるＬ１Ｄミス数と、Ｌ１Ｄデマンドミス数と、Ｌ１Ｄミス率と、Ｌ１Ｄデマンドミス率とを有する。図５に示したコード５１１〜５１６は、各回数におけるロードストア命令数〜Ｌ１Ｄデマンドミス数を取得するコードである。
【００５６】
各回数におけるロードストア命令数フィールドには、各回数におけるロード命令と、ストア命令との合計数が格納される。各回数におけるＬ１Ｄミス数フィールドには、各回数における、Ｌ１キャッシュメモリへのデータのキャッシュミスの回数が格納される。より具体的には、各回数におけるＬ１Ｄミス数フィールドには、Ｌ１キャッシュメモリへのデータのプリフェッチ時のキャッシュミスの回数と、Ｌ１キャッシュメモリに対するデマンドミスの回数との合計数が格納される。各回数におけるＬ１Ｄデマンドミス数フィールドには、各回数におけるＬ１キャッシュメモリに対するデマンドミスの回数が格納される。
【００５７】
各回数におけるＬ１Ｄミス率フィールドには、ロードストア命令に対するキャッシュミスの割合が格納される。具体的には、各回数におけるＬ１Ｄミス率フィールドには、下記（２）式により算出されたＬ１Ｄミス率が格納される。
【００５８】
Ｌ１Ｄミス率＝各回数におけるＬ１Ｄミス数フィールドの値／各回数におけるロードストア命令数フィールドの値  …（２）
【００５９】
各回数におけるＬ１Ｄデマンドミス率フィールドには、キャッシュミスに対するデマンドミスの割合が格納される。具体的には、各回数におけるＬ１Ｄデマンドミス率フィールドには、下記（３）式により算出されたＬ１Ｄデマンドミス率が格納される。
【００６０】
Ｌ１Ｄデマンドミス率＝各回数におけるＬ１Ｄデマンドミス数フィールドの値／各回数におけるＬ１Ｄミス数フィールドの値  …（３）
【００６１】
また、情報処理装置１００は、Ｌ１Ｄミス率と、Ｌ１Ｄデマンドミス率とを用いて、キャッシュスラッシングが発生しているか否かを判定する。具体的には、情報処理装置１００は、Ｌ１Ｄミス率とＬ１Ｄデマンドミス率とが、それぞれ、キャッシュミス率閾値として、Ｌ１Ｄミス率の閾値と、Ｌ１Ｄデマンドミス率の閾値以上である場合に、キャッシュスラッシングが発生していると判定する。
【００６２】
Ｌ１Ｄミス率の閾値としては、例えば、１つの要素が単精度のデータサイズであれば、１．５６３［％］であり、倍精度のデータサイズであれば３．１２５［％］とする。各数値の意味としては、単精度４［Ｂｙｔｅ］のデータであれば、連続アクセスで２５６／４＝６４回に１回キャッシュミスし、倍精度８［Ｂｙｔｅ］のデータであれば、連続アクセスで２５６／８＝３２回に１回キャッシュミスするためである。
【００６３】
また、Ｌ１Ｄデマンドミス率の閾値としては、例えば、２０［％］である。２０［％］は、キャッシュスラッシングの経験則より得られた数値である。次に、スラッシング情報テーブル３１０に格納され得る具体的な値について、図９で説明する。
【００６４】
図９は、スラッシング情報テーブル３１０の記憶内容の一例を示す説明図（その２）である。ここで、図９に示すレコード１Ａ、１Ｂ、２Ａ、２Ｂは、それぞれ、図４で示したステップＳ４０４の１回目の処理前、処理後、２回目の処理前、処理後を示す。また、図９で示す左矢印は、図中の表記を理解しやすくしたものであり、左側の項目の値と同一の値を有する。また、図９では、図７で示したＬ１Ｄキャッシュのサイズが６４［ＫｉＢ］であり、１キャッシュラインが２５６［Ｂｙｔｅ］であり、４ｗａｙである例を用いる。
【００６５】
レコード１Ａは、配列宣言名が「ＡＢＣ」であり、１要素が８［Ｂｙｔｅ］であり、次元数が３であり、各次元の宣言サイズが２５６，１２８，６４であり、配列の先頭アドレスが、１０００００００００番地であることを示す。さらに、レコード１Ａは、インデックス情報が２５６，１２８，６４であり、パディング回数が０であり、発生回数が０であり、ロードストア命令数が１００００回であり、Ｌ１Ｄミス数が５００回であり、Ｌ１Ｄデマンドミス数が２００回であることを示す。
【００６６】
次に、レコード１Ｂが示すように、情報処理装置１００は、レコード１Ａの内容から、（２）式と（３）式とを用いて、Ｌ１Ｄミス率と、Ｌ１Ｄデマンドミス率とを、それぞれ５．００［％］と４０［％］と算出する。Ｌ１Ｄミス率とＬ１Ｄデマンドミス率とがキャッシュミス率閾値を超えていることから、情報処理装置１００は、キャッシュスラッシングが発生していると判定し、パディングサイズを、８１９２［Ｂｙｔｅ］（８［ＫｉＢ］）とする。また、レコード１Ｂが示すように、情報処理装置１００は、パディング回数と発生回数とを１に設定し、配列の先頭サイズを、パディングサイズを加えた分、１０００００８１９２番地に設定する。
【００６７】
次に、レコード２Ａは、２回目の配列ＡＢＣについて、ロードストア命令数が１００００回であり、Ｌ１Ｄミス数が４００回であり、Ｌ１Ｄデマンドミス数が１２０回であることを示す。
【００６８】
そして、レコード２Ｂが示すように、情報処理装置１００は、レコード２Ａの内容から、（２）式と（３）式とを用いて、Ｌ１Ｄミス率と、Ｌ１Ｄデマンドミス率とを、それぞれ４．００［％］と３０［％］と算出する。Ｌ１Ｄミス率とＬ１Ｄデマンドミス率とがキャッシュミス率閾値を超えていることから、情報処理装置１００は、キャッシュスラッシングが発生していると判定し、パディングサイズを、４０９６［Ｂｙｔｅ］（４［ＫｉＢ］）とする。また、レコード２Ｂが示すように、情報処理装置１００は、パディング回数と発生回数とを２に設定し、配列の先頭サイズを、パディングサイズを加えた分、１０００００４０９６番地に設定する。
【００６９】
次に、情報処理装置１００が実行する動作を示すフローチャートを、図１０〜図１３を用いて説明する。
【００７０】
図１０は、キャッシュミス情報採取コード挿入処理手順の一例を示すフローチャートである。キャッシュミス情報採取コード挿入処理は、プログラムコードにキャッシュミス情報採取コードを挿入する処理である。また、キャッシュミス情報採取コード挿入処理は、情報処理装置１００が実行してもよいし、他の装置が実行してもよい。図１０では、情報処理装置１００が実行する例を用いて説明する。
【００７１】
情報処理装置１００は、プログラムコードの先頭の処理を選択する（ステップＳ１００１）。次に、情報処理装置１００は、プログラムコードの終端まで処理したか否かを判断する（ステップＳ１００２）。プログラムコードの終端まで処理した場合とは、具体的には、例えば、ステップＳ１００５の処理において、次の処理がない場合である。
【００７２】
プログラムコードの終端まで処理していない場合（ステップＳ１００２：Ｎｏ）、情報処理装置１００は、選択した処理がデータをアクセスする処理か否かを判断する（ステップＳ１００３）。選択した処理がデータをアクセスする処理である場合（ステップＳ１００３：Ｙｅｓ）、情報処理装置１００は、アクセス対象の変数に対するアドレス情報およびキャッシュミス情報を採取し、スラッシング情報テーブルに採取した情報を出力するコードを挿入する（ステップＳ１００４）。
【００７３】
ステップＳ１００４の処理終了後、または、選択した処理がデータをアクセスする処理でない場合（ステップＳ１００３：Ｎｏ）、情報処理装置１００は、次の処理を選択する（ステップＳ１００５）。そして、情報処理装置１００は、ステップＳ１００２の処理に移行する。
【００７４】
また、プログラムコードの終端まで処理した場合（ステップＳ１００２：Ｙｅｓ）、情報処理装置１００は、スラッシング情報テーブル３１０を出力する（ステップＳ１００６）。ステップＳ１００６の処理終了後、情報処理装置１００は、キャッシュミス情報採取コード挿入処理を終了する。キャッシュミス情報採取コード挿入処理を実行することにより、情報処理装置１００は、実行コードの実行中にキャッシュミス情報を採取するコードを挿入することができる。
【００７５】
図１１は、動的領域確保処理手順の一例を示すフローチャートである。動的領域確保処理は、記憶領域を動的に確保する処理である。動的領域確保処理は、実行コード中に、動的領域確保処理の呼び出しを検出した際に実行される処理である。
【００７６】
情報処理装置１００は、確保対象となる配列に対する１回目の記憶領域確保か否かを判断する（ステップＳ１１０１）。１回目か否かの判断基準は、スラッシング情報テーブル３１０に、確保対象の配列が登録されているか否かで判断できる。また、情報処理装置１００は、再度の動的領域確保処理の呼び出しを検出した際には、２回目以降の記憶領域確保として判定してもよい。再度の動的領域確保処理の呼び出しの名称としては、例えば、「ｒｅａｌｌｏｃａｔｅ」、「ｒｅａｌｌｏｃ」等がある。
【００７７】
確保対象となる配列に対する１回目の記憶領域確保である場合（ステップＳ１１０１：Ｙｅｓ）、情報処理装置１００は、スラッシング情報テーブル３１０に、配列情報を追加する（ステップＳ１１０２）。ここで、配列情報とは、スラッシング情報テーブル３１０の名前、宣言サイズ、アドレス情報、インデックス情報の各フィールドである。さらに、情報処理装置１００は、パディング回数、発生回数フィールドに０を設定する。
【００７８】
一方、確保対象となる配列に対する２回目以降の記憶領域確保である場合（ステップＳ１１０１：Ｎｏ）、情報処理装置１００は、キャッシュスラッシングが発生しているか否かを判定する（ステップＳ１１０３）。キャッシュスラッシングが発生しているか否かの判定方法は、図８に記載したように、Ｌ１Ｄミス率の閾値と、Ｌ１Ｄデマンドミス率の閾値とを用いるものがある。
【００７９】
キャッシュスラッシングが発生している場合（ステップＳ１１０３：Ｙｅｓ）、情報処理装置１００は、パディングサイズ算出処理を実行する（ステップＳ１１０４）。パディングサイズ算出処理の詳細については、図１２で説明する。
【００８０】
ステップＳ１１０２、ステップＳ１１０４の処理終了後、または、キャッシュスラッシングが発生していない場合（ステップＳ１１０３：Ｎｏ）、情報処理装置１００は、記憶領域を確保する（ステップＳ１１０５）。ここで、ステップＳ１１０４の処理実行後の場合には、情報処理装置１００は、パディングサイズ分の領域を確保した後に、確保対象となる配列の記憶領域を確保する。ステップＳ１１０５の処理終了後、情報処理装置１００は、動的領域確保処理を終了する。動的領域確保処理を実行することにより、情報処理装置１００は、動的領域確保処理を呼び出す呼び出しに対応して記憶領域を確保することができる。
【００８１】
図１２は、パディングサイズ算出処理手順の一例を示すフローチャートである。パディングサイズ算出処理は、確保する記憶領域の前に設定するパディングのデータサイズを算出する処理である。なお、図１２で示すフローチャートは、Ｌ１Ｄキャッシュのサイズが６４［ＫｉＢ］であり、１キャッシュラインが２５６［Ｂｙｔｅ］であり、４ｗａｙの場合を例として説明する。
【００８２】
情報処理装置１００は、Ｎをパディング回数に設定する（ステップＳ１２０１）。次に、情報処理装置１００は、Ｎが５より大きいか否かを判断する（ステップＳ１２０２）。Ｎが５以下である場合（ステップＳ１２０２：Ｎｏ）、情報処理装置１００は、パディングサイズを１６／（２＾Ｎ）［ＫｉＢ］と算出する（ステップＳ１２０３）。
【００８３】
一方、Ｎが５より大きい場合（ステップＳ１２０２：Ｙｅｓ）、情報処理装置１００は、パディングサイズを１キャッシュラインサイズと算出する（ステップＳ１２０４）。次に、情報処理装置１００は、前回のキャッシュミス率との変化量が１０［％］以下か否かを判断する（ステップＳ１２０５）。ステップＳ１２０５について、情報処理装置１００は、キャッシュミス率の変化量として、Ｌ１Ｄミス率、Ｌ１Ｄデマンドミス率の両方ともに１０［％］以下であればＹｅｓとしてもよいし、いずれか一方が１０［％］以下であればＹｅｓとしてもよい。
【００８４】
ステップＳ１２０３の処理終了後、または、前回のキャッシュミス率との変化量が１０［％］より大きい場合（ステップＳ１２０５：Ｎｏ）、情報処理装置１００は、スラッシング情報テーブル３１０の現在のパディング回数に相当する情報域を新たに確保して、算出したパディングサイズを設定する（ステップＳ１２０６）。また、情報処理装置１００は、スラッシング情報テーブル３１０の発生回数をインクリメントする。
【００８５】
ステップＳ１２０６の処理終了後、または、前回のキャッシュミス率との変化量が１０［％］以下である場合（ステップＳ１２０５：Ｙｅｓ）、情報処理装置１００は、パディングサイズ算出処理を終了する。パディングサイズ算出処理を実行することにより、情報処理装置１００は、適切なパディングサイズを算出することができる。
【００８６】
図１３は、キャッシュミス情報採取処理手順の一例を示すフローチャートである。キャッシュミス情報採取処理は、キャッシュミス情報を採取する処理である。
【００８７】
情報処理装置１００は、Ｌ１Ｄミス数と、Ｌ１Ｄデマンドミス数と、ロードストア命令数とを取得する（ステップＳ１３０１）。次に、情報処理装置１００は、Ｌ１Ｄミス率をＬ１Ｄミス数／ロードストア命令数に設定する（ステップＳ１３０２）。また、情報処理装置１００は、Ｌ１Ｄデマンドミス率をＬ１Ｄデマンドミス数／Ｌ１Ｄミス数に設定する（ステップＳ１３０３）。そして、情報処理装置１００は、取得または算出した情報を、スラッシング情報テーブル３１０に格納する（ステップＳ１３０４）。ステップＳ１３０４の処理終了後、情報処理装置１００は、キャッシュミス情報採取処理を終了する。キャッシュミス情報採取処理を実行することにより、情報処理装置１００は、キャッシュミス情報を採取することができる。
【００８８】
以上説明したように、情報処理装置１００によれば、確保した記憶領域のキャッシュミス率がキャッシュミス率閾値以上、すなわちキャッシュスラッシングが発生したと判定したのであれば、新たな記憶領域を確保した記憶領域からずらして設定する。これにより、競合するキャッシュラインとは別のキャッシュラインに新たな記憶領域が割り付けられるので、情報処理装置１００は、キャッシュスラッシングの抑制を図ることができる。
【００８９】
また、情報処理装置１００によれば、新たな記憶領域を、１ｗａｙの半分のサイズ分確保した記憶領域からずらして設定してもよい。これにより、情報処理装置１００は、キャッシュスラッシングの発生を抑制することができる可能性を最も高くすることができる。
【００９０】
また、情報処理装置１００によれば、確保要求を複数回行った結果、１ｗａｙのサイズと、キャッシュスラッシングが発生した回数とに基づいて、新たな記憶領域を確保する際にずらすサイズを算出してもよい。前述したように、１ｗａｙの半分のサイズが、キャッシュスラッシングの発生を抑制することができる可能性が最も高いが、必ずしもキャッシュスラッシングの発生を抑制できるとは限らない。
【００９１】
例えば、図１の例を用いると、実行コード１０１に、「ａ（ｊ）＝ｂ（ｊ）＋ｂ（ｊ＋２）」というコードが記載されていた場合である。この場合、パディングを行わないと、図１の（ａ）で説明したように、ｊ＝０について、ａ（０）、ｂ（０）の記憶領域が、同一のキャッシュラインに対応するためキャッシュスラッシングが発生する。そして、図１の（ｂ）の例に従って、２キャッシュラインのサイズ分パディングすると、今度は、ｊ＝０について、ａ（０）、ｂ（２）の記憶領域が、同一のキャッシュラインに対応するためキャッシュスラッシングが発生することになる。従って、この例では、情報処理装置１００は、１キャッシュラインのサイズ分パディングすると、ｊ＝０について、ａ（０）、ｂ（０）、ｂ（２）の記憶領域が、全て異なるキャッシュラインに対応するためキャッシュスラッシングの発生を抑制することができる。このように、情報処理装置１００は、パディングサイズを調整して、キャッシュスラッシングの発生を抑制することができる。
【００９２】
また、本実施の形態で説明したデータ処理方法に従う場合、ある配列の前にパディングを行うと、後続の配列に対するキャッシュスラッシングの発生の有無が変わり、今までキャッシュスラッシングが発生していなかった箇所で新たに発生する可能性がある。しかしながら、キャッシュスラッシングが発生した箇所を特定してパディングを行っていくため、情報処理装置１００は、最終的には、全ての箇所でキャッシュスラッシングが発生しない状態に近づけることができる。
【００９３】
なお、本実施の形態で説明したデータ処理方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本データ処理プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ−Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本データ処理プログラムは、インターネット等のネットワークを介して配布してもよい。
【００９４】
上述した実施の形態に関し、さらに以下の付記を開示する。
【００９５】
（付記１）記憶部の記憶領域の確保要求により呼び出された特定のルーチンが確保した記憶領域に対するアクセス要求に応じて生じたキャッシュミスの数を取得し、
取得した前記キャッシュミスの数が所定数以上であれば、前記確保要求により呼び出される前記特定のルーチンが確保する新たな記憶領域を前記確保した記憶領域からずらして設定する、
制御部を有することを特徴とする情報処理装置。
【００９６】
（付記２）前記制御部は、
前記新たな記憶領域を、前記記憶部のいずれかの記憶領域に対応付いたキャッシュラインの数でキャッシュメモリを分割した領域の半分のサイズ分前記確保した記憶領域からずらして設定することを特徴とする付記１に記載の情報処理装置。
【００９７】
（付記３）前記制御部は、
前記確保要求を複数回行った結果、前記分割した領域のサイズと、取得した前記キャッシュミスの数が前記所定数以上となった回数とに基づいて、前記特定のルーチンが新たな記憶領域を確保する際にずらすサイズを算出し、
確保した記憶領域から算出した前記サイズ分ずらして新たな記憶領域を設定することを特徴とする付記２に記載の情報処理装置。
【００９８】
（付記４）前記制御部は、
前記確保要求を複数回行った結果、前記分割した領域のサイズを、２の前記回数乗で除することにより、新たな記憶領域を確保する際にずらすサイズを算出し、
算出した前記サイズ分確保した記憶領域からずらして新たな記憶領域を設定することを特徴とする付記３に記載の情報処理装置。
【００９９】
（付記５）コンピュータが、
記憶部の記憶領域の確保要求により呼び出された特定のルーチンが確保した記憶領域に対するアクセス要求に応じて生じたキャッシュミスの数を取得し、
取得した前記キャッシュミスの数が所定数以上であれば、前記確保要求により呼び出される前記特定のルーチンが確保する新たな記憶領域を前記確保した記憶領域からずらして設定する、
処理を実行することを特徴とするデータ処理方法。
【０１００】
（付記６）コンピュータに、
記憶部の記憶領域の確保要求により呼び出された特定のルーチンが確保した記憶領域に対するアクセス要求に応じて生じたキャッシュミスの数を取得し、
取得した前記キャッシュミスの数が所定数以上であれば、前記確保要求により呼び出される前記特定のルーチンが確保する新たな記憶領域を前記確保した記憶領域からずらして設定する、
処理を実行させることを特徴とするデータ処理プログラム。
【符号の説明】
【０１０１】
１００  情報処理装置
１０２  記憶部
１０３  Ｌ１キャッシュメモリ
３００  制御部
３０１  取得部
３０２  判定部
３０３  算出部
３０４  設定部
３１０  スラッシング情報テーブル
【図１】
0006432333.tif 000002
【図２】
0006432333.tif 000003
【図３】
0006432333.tif 000004
【図４】
0006432333.tif 000005
【図５】
0006432333.tif 000006
【図６】
0006432333.tif 000007
【図７】
0006432333.tif 000008
【図８】
0006432333.tif 000009
【図９】
0006432333.tif 000010
【図１０】
0006432333.tif 000011
【図１１】
0006432333.tif 000012
【図１２】
0006432333.tif 000013
【図１３】
0006432333.tif 000014