(57)【特許請求の範囲】
【請求項１】
アプリケーションプログラムの実行中にキャッシュメモリのセクタ構成を切り替えながら少なくとも前記キャッシュメモリに対するアクセス数とキャッシュミス数を前記セクタ構成に対応付けてサンプリングしたデータを収集するとともに、前記アプリケーションプログラムが実行した命令数を前記セクタ構成に対応付けて収集する収集部と、
前記セクタ構成ごとに前記キャッシュミス数を前記アクセス数で除してキャッシュミス率を算出するキャッシュミス率算出部と、
他のセクタ構成に比して前記キャッシュミス率の小さいセクタ構成を適切なセクタ構成として選択する選択部と、
前記セクタ構成ごとに前記アクセス数を前記命令数で除してキャッシュアクセス率を求め、前記キャッシュアクセス率の相対標準偏差が所定値未満である場合に前記選択部による選択結果が有効であると評価する有効性評価部と
を備えたことを特徴とする分析装置。
【請求項２】
アプリケーションプログラムの実行中にキャッシュメモリのセクタ構成を切り替えながら少なくとも前記キャッシュメモリに対するアクセス数とキャッシュミス数を前記セクタ構成に対応付けてサンプリングしたデータを収集するとともに、前記アプリケーションプログラムが実行した命令数を前記セクタ構成に対応付けて収集する収集部と、
前記セクタ構成ごとに前記キャッシュミス数を前記アクセス数で除してキャッシュミス率を算出するキャッシュミス率算出部と、
前記キャッシュミス率のセクタ構成変化に対する微分値を求めるキャッシュミス率微分処理部と、
前記キャッシュミス率の微分値の変化から前記アプリケーションプログラムによる前記キャッシュメモリの利用状態を求める利用状態算出部と、
他のセクタ構成に比して前記キャッシュミス率の小さいセクタ構成を適切なセクタ構成として選択する選択部と、
前記セクタ構成ごとに前記アクセス数を前記命令数で除してキャッシュアクセス率を求め、前記キャッシュアクセス率の相対標準偏差が所定値未満である場合に前記選択部による選択結果が有効であると評価する有効性評価部と
を備えたことを特徴とする分析装置。
【請求項３】
前記アプリケーションプログラムは、変数が使用するデータの大きさと次元数に基づいて使用するセクタを決定することを特徴とする請求項１または２に記載の分析装置。
【請求項４】
前記収集部は、前記アプリケーションプログラムによるサブルーチン処理の開始後と終了前にセクタ構成を切り替えながらサンプリングしたデータを収集することを特徴とする請求項１〜３のいずれか一つに記載の分析装置。
【請求項５】
アプリケーションプログラムの実行中にキャッシュメモリのセクタ構成を切り替えながら少なくとも前記キャッシュメモリに対するアクセス数とキャッシュミス数を前記セクタ構成に対応付けてサンプリングしたデータを収集するとともに、前記アプリケーションプログラムが実行した命令数を前記セクタ構成に対応付けて収集するステップと、
前記セクタ構成ごとに前記キャッシュミス数を前記アクセス数で除してキャッシュミス率を算出するステップと、
他のセクタ構成に比して前記キャッシュミス率の小さいセクタ構成を適切なセクタ構成として選択するステップと、
前記セクタ構成ごとに前記アクセス数を前記命令数で除してキャッシュアクセス率を求め、前記キャッシュアクセス率の相対標準偏差が所定値未満である場合に前記選択するステップによる選択結果が有効であると評価するステップと
を含んだことを特徴とする分析方法。
【請求項６】
アプリケーションプログラムの実行中にキャッシュメモリのセクタ構成を切り替えながら少なくとも前記キャッシュメモリに対するアクセス数とキャッシュミス数を前記セクタ構成に対応付けてサンプリングしたデータを収集するとともに、前記アプリケーションプログラムが実行した命令数を前記セクタ構成に対応付けて収集する手順と、
前記セクタ構成ごとに前記キャッシュミス数を前記アクセス数で除してキャッシュミス率を算出する手順と、
他のセクタ構成に比して前記キャッシュミス率の小さいセクタ構成を適切なセクタ構成として選択する手順と、
前記セクタ構成ごとに前記アクセス数を前記命令数で除してキャッシュアクセス率を求め、前記キャッシュアクセス率の相対標準偏差が所定値未満である場合に前記選択する手順による選択結果が有効であると評価する手順と
をコンピュータに実行させることを特徴とする分析プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分析装置、分析方法および分析プログラムに関する。
【背景技術】
【０００２】
従来、スカラープロセッサのメモリアクセスを高速化するために、プロセッサとメインメモリの間にキャッシュメモリを配置する構成が利用されている。
【０００３】
さらに近年、キャッシュメモリを複数のセクタに論理的に分割し、各メモリアクセス命令がどのセクタを使用するかを指定することで、キャッシュの使用状況を変化させるセクタキャッシュが開発されている。このキャッシュメモリのセクタの大きさは、実行時にプログラムで変更することができる。
【０００４】
例えば、１０ウェイ構造のキャッシュをセクタ０とセクタ１に分ける場合、セクタ０に属する最大ウェイ数とセクタ１に属する最大ウェイ数を指定することにより、この１０ウェイを、二つのセクタに割ることが出来る。この場合の可能な組み合わせは、９×９＝８１通りであり、セクタキャッシュを使用しない場合を含めて８２通りとなる。
【０００５】
スカラープロセッサにおいては、アプリケーションプログラムによるメモリアクセスのローカリティが性能を左右するので、メモリアクセスを二つのグループに分けることによりメモリアクセスのローカリティを高め、性能を向上させることができる。
【０００６】
キャッシュをどのようなセクタに構成するか、すなわちキャッシュのセクタ構成は、アプリケーションプログラムを実行した際の性能に大きく影響する。そこで、キャッシュ構成を分析し、アプリケーションプログラムにとって最適なキャッシュ構成や、アプリケーションプログラム自体にフィードバックすることが求められている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００８−９０４１１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
一般に、アプリケーションの動作は複雑であり、セクタキャッシュが性能に及ぼす効果を予測することは困難である。セクタキャッシュのどの組み合わせが最も高速であるかは、実際に実測してみないとわからない。
【０００９】
このため、従来技術のような静的な分析では、十分にセクタキャッシュの構成を評価することが出来ない。セクタキャッシュの組み合わせをプログラム実行中に固定するとしても、８２通りの設定があるため、最悪の場合、アプリケーションを８２回実行し、それぞれの性能を比較し、最適なセクタキャッシュ構成を選択することになる。
【００１０】
開示の技術は、上記に鑑みてなされたものであって、セクタキャッシュの構成の分析の精度を高めることを目的とする。
【課題を解決するための手段】
【００１１】
本願の開示する分析装置、分析方法および分析プログラムは、アプリケーションプログラムの実行中にキャッシュメモリのセクタ構成を切り替えながらサンプリングしたデータを収集する。サンプリングしたデータには、キャッシュメモリに対するアクセス数とキャッシュミス数が含まれる。開示の装置、方法、プログラムは、セクタ構成ごとにキャッシュミス数をアクセス数で除してキャッシュミス率を算出する。
【発明の効果】
【００１２】
本願の開示する本願の開示する分析装置、分析方法および分析プログラムによれば、セクタキャッシュの構成の分析の精度を高めることができる。
【図面の簡単な説明】
【００１３】
【図１】図１は、実施例に係る分析装置の構成図である。
【図２】図２は、セクタキャッシュの説明図である。
【図３】図３は、セクタキャッシュ対応オブジェクトプログラム作成の説明図である。
【図４】図４は、本実施例にかかる処理動作を説明するフローチャートである。
【図５】図５は、図４に示したサンプリングスレッド１２によるサンプリングについてさらに説明するフローチャートである。
【図６】図６は、分析装置２０の処理動作を説明するフローチャートである。
【図７】図７は、サンプリングデータと結果出力の具体例についての説明図である。
【図８】図８は、スラッシングの評価について説明する説明図である。
【図９】図９は、スラッシング多重度の算出にかかる処理動作を説明するフローチャートである。
【図１０】図１０は、コンパイル時におけるセクタ選択処理を説明するフローチャートである。
【図１１】図１１は、変数の形状と使用セクタの判断結果の説明図である。
【図１２】図１２は、プログラムの修正による改善についての説明図である。
【発明を実施するための形態】
【００１４】
以下に、本願の開示する分析装置、分析方法および分析プログラムを図面に基づいて詳細に説明する。なお、以下の具体的な実施例に本発明を限定するものではない。
【実施例】
【００１５】
［システムの構成］
図１は、実施例に係る分析装置の構成図である。図１に示した例では、分析装置２０は、プロセッサ１０と接続し、プロセッサ１０が使用するキャッシュメモリのセクタ構成とプロセッサ１０が実行するアプリケーションプログラムについて分析を行う。
【００１６】
プロセッサ１０は、Ｌ１（level 1）キャッシュメモリとＬ２（level 2）キャッシュメモリを使用して、メインメモリの一部をキャッシュする。プロセッサ１０が使用するキャッシュメモリは、複数のセクタに論理的に分割し、各メモリアクセス命令がどのセクタを使用するかを指定することで、キャッシュの使用状況を変化させることができるセクタキャッシュ機構を備える。セクタに分割されたキャッシュをセクタキャッシュという。
【００１７】
セクタの大きさは、実行時にプログラムで変更することができる。Ｌ１キャッシュとＬ２キャッシュのいずれもセクタキャッシュとすることができるが、以降の説明では、１０ウェイ構造のＬ２キャッシュをセクタ０とセクタ１に分ける場合を例に説明する。
【００１８】
１０ウェイ構造のＬ２キャッシュをセクタ０とセクタ１に分ける場合、セクタ０に属する最大ウェイ数とセクタ１に属する最大ウェイ数を指定することによって可能な組み合わせは、９×９＝８１通りである。従って、セクタキャッシュを使用しない場合を含めると８２通りとなる。
【００１９】
プロセッサ１０は、アプリケーションプログラムを構成する複数のアプリケーションプロセス１１を順次実行することで、アプリケーションプログラムを動作させる。加えて、プロセッサ１０は、アプリケーションプロセス１１の実行とともにサンプリングスレッド１２を実行する。サンプリングスレッド１２は、セクタ構成変更部１３と、サンプリング処理部１４を有する。
【００２０】
セクタ構成変更部１３は、アプリケーションプログラムの実行中、すなわちアプリケーションプロセス１１の実行中に、キャッシュメモリのセクタ構成を切り替える処理を行なう。また、サンプリング処理部１４は、アプリケーションプロセス１１のキャッシュメモリに対するアクセス数、キャッシュミス数、アプリケーションプロセス１１が実行した命令数をセクタ構成に対応付けてサンプリングすることでサンプリングデータＤ１を作成し、蓄積する。
【００２１】
分析装置２０は、プロセッサ１０からサンプリングデータＤ１を取得して分析を行なう装置である。分析装置２０は、データ収集部２１、キャッシュミス率算出部２２、選択部２３、有効性評価部２４、キャッシュミス率微分処理部２５、スラッシング多重度算出部２６、出力部２７を有する。
【００２２】
データ取得部２１は、プロセッサ１０からサンプリングデータＤ１を収集する処理部である。キャッシュミス率算出部２２は、サンプリングデータＤ１のキャッシュミス数をアクセス数でセクタ構成ごとに除し、各セクタ構成のキャッシュミス率を算出する。
【００２３】
選択部２３は、各セクタ構成のキャッシュミス率を比較し、他のセクタ構成に比してキャッシュミス率の小さいセクタ構成を適切なセクタ構成として選択する。有効性評価部２４は、セクタ構成ごとにアクセス数を命令数で除して各構成のキャッシュアクセス率を求め、キャッシュアクセス率の相対標準偏差が所定値未満である場合に選択部による選択結果が有効であると評価する。
【００２４】
キャッシュミス率微分処理部２５は、キャッシュミス率のセクタ構成変化に対する微分値を求める。スラッシング多重度算出部２６は、キャッシュミス率の微分値の変化から前記アプリケーションプログラムによるキャッシュメモリの利用状態を示すスラッシング多重度を算出する利用状態算出部である。
【００２５】
出力部２７は、アプリケーションプログラムに対して適切なセクタ構成とその有効性、アプリケーションプログラムのスラッシング多重度を出力する処理部である。
【００２６】
［セクタキャッシュ対応アプリケーション］
図２は、セクタキャッシュの説明図である。図２に示したプロセッサであるＣＰＵ（Central Processing Unit）３１は、メインメモリ３３を主記憶装置として使用する演算装置である。
【００２７】
キャッシュメモリ３２は、メインメモリ３３に比して高速なメモリであり、メインメモリ３３の一部を保持する。ＣＰＵ３１は、メモリアクセスを行う際に、キャッシュメモリ３２にアクセスする。キャッシュメモリ３２がアクセス対象を保持している場合には、低速なメモリ３３に対するアクセスは不要となり、処理速度が向上する。
【００２８】
このため、キャッシュメモリ３２がＣＰＵ３１のアクセス要求に対応するキャッシュを保持している確率が高いほど、アプリケーションプログラムの性能が向上する。キャッシュメモリのサイズが大きいほど、性能は向上し、また、アプリケーションプログラムのメモリアクセスのローカリティが高いほど、性能は向上する。
【００２９】
キャッシュメモリ３２は、ｗａｙ０からｗａｙ９を有する１０ウェイセットアソシアティブのＬ２キャッシュメモリである。加えて、キャッシュメモリ３２は、セクタキャッシュ機構を備え、ｗａｙ０からｗａｙ９をセクタ０、セクタ１の２つのセクタに論理的に分割して使用することができる。
【００３０】
このようなセクタキャッシュを利用する場合、アプリケーションプログラムは、各メモリアクセス命令がどのセクタを使用するかを指定することなる。具体的には、図３に示したように、ソースプログラム４１をセクタキャッシュ最適化コンパイラ４２にかけることで、セクタキャッシュ対応オブジェクトプログラム４３を得ることが出来る。
【００３１】
［処理動作］
図４は、本実施例にかかる処理動作を説明するフローチャートである。まず、アプリケーションプログラムのコンパイルでは、セクタキャッシュ最適化コンパイラ４２がソースプログラム４１を読み込み（Ｓ１０１）、コンパイルを行って（Ｓ１０２）、オブジェクトプログラム４３を書き出す（Ｓ１０３）。
【００３２】
オブジェクトプログラム４３として得られたアプリケーションプログラムをプロセッサ１０が実行すると、プロセッサ１０は、処理の開始時にサンプリングスレッド１２を生成する（Ｓ２０１）。プロセッサ１０は、アプリケーションプロセス１１の計算処理を実行する（Ｓ２０２）とともに、サンプリングスレッド１２によるサンプリング処理を行う（Ｓ３００）。
【００３３】
プロセッサ１０は、計算処理（Ｓ２０２）が終了した後、サンプリングスレッド１２の消去を待ち（Ｓ２０３）、サンプリングデータＤ１を出力して（Ｓ２０４）、処理を終了する。
【００３４】
図５は、図４に示したサンプリングスレッド１２によるサンプリングについてさらに説明するフローチャートである。図５に示したように、サンプリングスレッド１２は、まず、セクタキャッシュのセクタ構成、すなわち、セクタ０とセクタ１にどのｗａｙを割り当てるかを選択する（Ｓ３０１）。
【００３５】
つぎに、サンプリングスレッド１２は、アプリケーションプロセス１１からサンプリングをおこなって、実行命令数、キャッシュアクセス数、キャッシュミス数を測定し（Ｓ３０２）、現在のセクタ構成に対応づけて加算する（Ｓ３０４）。
【００３６】
サンプリングスレッド１２はＳ３０５の終了後、現在のセクタ構成を選択してから１００ｍｓが経過したかを判定する（Ｓ３０５）。現在のセクタ構成を選択してから１００ｍｓが経過していなければ（Ｓ３０５，Ｎｏ）、サンプリングスレッド１２は、Ｓ３０２に戻って同一構成でのサンプリングを継続する。
【００３７】
一方、現在のセクタ構成を選択してから１００ｍｓが経過している場合（Ｓ３０５，Ｙｅｓ）は、サンプリングスレッド１２は次のセクタ構成を選択して（Ｓ３０１）、サンプリングを継続する。
【００３８】
図６は、分析装置２０の処理動作を説明するフローチャートである。図６に示したように、まず、データ取得部３１がサンプリングデータＤ１を収集する（Ｓ４０１）。キャッシュミス率算出部２２は、サンプリングデータＤ１のキャッシュミス数をアクセス数で除し、各セクタ構成のキャッシュミス率を算出する（Ｓ４０２）。また、有効性評価部２４は、セクタ構成ごとにアクセス数を命令数で除して各構成のキャッシュアクセス率を求める。
【００３９】
選択部２３は、キャッシュミス率が最も低い構成を最適構成とし（Ｓ４０４）、有効性評価部２４は、キャッシュアクセス率の相対標準偏差が所定値未満である場合に選択部２３による選択結果が有効であると判定する。
【００４０】
そして、出力部２７は、セクタキャッシュの最適構成と有効性の評価結果を出力して（Ｓ４０６）、処理を終了する。
【００４１】
［データの具体例］
図７は、サンプリングデータと結果出力の具体例についての説明図である。図７に示したように、サンプリングデータＤ１は、セクタ構成、実行命令数、キャッシュアクセス数、キャッシュミス数の情報を有する。
【００４２】
図７に示した例では、セクタ構成ｃ１の実行命令数が２０００、キャッシュアクセス数が１０００、キャッシュミス数が５００である。また、セクタ構成ｃ２の実行命令数が４０００、キャッシュアクセス数が２０００、キャッシュミス数が１３００である。そして、セクタ構成ｃ８２の実行命令数が３０００、キャッシュアクセス数が１６００、キャッシュミス数が８００である。
【００４３】
このサンプリングデータＤ１からもとめた最適構成と有効性の判断結果が出力データＤ２である。図７の例では、最適セクタ構成は、セクタ構成ｃ３３、キャッシュミス率は３０％、キャッシュアクセス率の相対標準偏差が５％であり、結果は有効である。
【００４４】
ここで、有効性の判断について説明する。キャッシュアクセス数を実行命令数で割ったキャッシュアクセス率は、セクタキャッシュ構成によって変化しない。このため、各構成における測定がプログラムの各種部分をまんべんなく実行した場合には、各構成におけるキャッシュアクセス率は同一になるという特徴があるので、有効性の判定に利用することができる。
【００４５】
具体的には、各構成におけるキャッシュアクセス率は計８２個になるが、これらの相対標準偏差を求め、キャッシュアクセス率のブレを求める。それが一定値以上であれば、統計的に不適切な値であるため、構成の選択は失敗していると判断し、測定失敗の結論を出す。利用者は、アプリケーションの動作時間を延ばして再測定することになる。一定値以下であれば、統計的に適切な値であるため、キャッシュミス率が最も低かったセクタキャッシュ構成が決定する。
【００４６】
このように、８２通りのセクタキャッシュの組み合わせ設定について、分析装置２０は、アプリケーションプログラムを１回実行だけで最適な組み合わせを求めることが可能である。
【００４７】
アプリケーションプログラムは数時間程度動作することが多いが、１００ｍｓｅｃを単位として、セクタキャッシュの構成をラウンドロビン的に変更するので、８２通りでは、８．２秒で全組み合わせで一回ずつの測定が完了する。したがって、アプリケーションプログラムを１時間実行すれば、約４４０回ずつの測定を行なうことが可能である。
【００４８】
それぞれの構成の場合ごとにＣＰＵ−ＰＡ機能により得られる、実行命令数、キャッシュアクセス数、キャッシュミス数を測定し加算し、アプリケーションの実行が完了した時点で、各構成のキャッシュミス率を求め、キャッシュミス率が最も低かったセクタキャッシュ構成を最適な構成として選択する。
【００４９】
このように、アプリケーションプログラムの一回の実行で多くの試行を行い最良の結果を求めることができ、また、その際にキャッシュアクセス率が所定範囲内に収束するというプログラム特性を利用した統計的判断により、結果の有効性を判定することができる。
【００５０】
なお、一定時間間隔でセクタ構成をラウンドロビン的に変更することで、サンプリング的に各構成でのキャッシュミス率を求める例を説明したが、サンプリング方式をベースとしているために、実行時間が少ない場合に統計的に不適切な値となる可能性がある。
【００５１】
そこで、サブルーチンの開始と終了時にセクタキャッシュの構成をラウンドロビン的に変更することで、各構成でのキャッシュミス率を求めることとしてもよい。サブルーチンの実行に応じて構成を変更することにより、時間間隔で構成を変更する場合に比べて、より精度の高い計測を行うことができる。なお、サブルーチンの開始と終了時に何らかの処理を行うことは、一般に、コンパイラの機能により可能である。
【００５２】
［スラッシング多重度の算出］
キャッシュ性能を著しく低下させる現象としてスラッシングがある。一般にウェイ数が減少するとスラッシングが発生するが、高度にチューニングされたアプリケーションでは、少ないウェイ数でも性能の低下は限定的である。スラッシングを減少するようにチューニングされたアプリケーションは、性能ぶれ等の問題を起こしにくいという優良な特性を持つ。分析装置２０は、ウェイ数の減少と性能の関係を調べることで、アプリケーションがスラッシングに対応しているかどうかを調査することができる。
【００５３】
分析装置２０は、８２通りのセクタキャッシュの組み合わせのうち、１０ウェイを過不足なく二つに割る９通りの組み合わせの性能を取り上げ、ウェイ数と性能の関係を分析する。
【００５４】
図８は、スラッシングの評価について説明する説明図である。図８に示したように、分析装置２０は、（セクタ０，セクタ１）のウェイ数が(１，９)、（２，８）、（３，７）、（４，６）、（５，５）、（６，４）、（７，３）、（８，２）、（９，１）の組み合わせを取り上げる。
【００５５】
図８の例は、セクタ１のキャッシュミス率Ｄ４は、(１，９)で３．０％、（２，８）で１．７％、（３，７）で１．２％、（４，６）で１．０％、（５，５）で１．１％、（６，４）で２．５％、（７，３）で２．６％、（８，２）で２．８％、（９，１）で３．０％である。
【００５６】
スラッシング対策が行なわれている場合は、セクタのウェイ数が減少してもキャッシュミス率が上がることは無い。図８に示したキャッシュミス率Ｄ３のように上昇する場合は、スラッシング対策が不十分であることを示している。具体的には、セクタ１に割り当てられたデータのうち、再利用性が低いと判断された複数のデータにおいて、１ウェイのキャッシュ量に対し、近接したアドレスでのメモリアクセスが多いために、スラッシングが発生し、キャッシュミス率が増加していることを示している。この場合は、５ウェイまでキャッシュミス率Ｄ４は増加してないため、５個のデータが競合している可能性が高い。
【００５７】
このように、キャッシュミス率からセクタ１に割り当てられ、再利用性が低いと判断された複数のデータでスラッシングが発生していると判断できる。その場合は、スラッシングが発生するセクタ構成を選択した上で、既存の性能チューニングツールを使いキャッシュミスの多発箇所を特定し、キャッシュミスを減少させる。この手順は、任意のキャッシュ・チューニング手法を用いればよい。
【００５８】
スラッシング発生を判断する場合、ウェイ数によるキャッシュミス率の微分（変化）を求め、この変化が大きな部分をスラッシング発生ウェイ数と判断する。このウェイ数をスラッシング多重度と呼ぶ。
【００５９】
図８の例では、キャッシュミス率微分値Ｄ４は、（２，８）で−１．３、（３，７）で−０．５、（４，６）で−０．２、（５，５）で０．１、（６，４）で１．４、（７，３）で０．１、（８，２）で０．２、（９，１）で０．２である。
【００６０】
この例では、(６，４)で変化が大きくなっており、セクタ１側に着目しているため、スラッシング多重度は５である。このスラッシング多重度に基づいてアプリケーションプログラムをチューニングした結果の例をキャッシュミス率Ｄ６に示す。
【００６１】
改善したキャッシュミス率は、(１，９)で３．０％、（２，８）で１．７％、（３，７）で１．２％、（４，６）で１．０％、（５，５）で１．０％、（６，４）で０．９％、（７，３）で０．８％、（８，２）で０．９％、（９，１）で０．８％である。
【００６２】
改善前のキャッシュミス率Ｄ３は、セクタ構成が(４，６)の時に最も小さくなり、１．０％であるが、改善後のキャッシュミス率Ｄ６は、セクタ構成が(８，２)の時に最小となり、０．７％である。このように、改善前の１．０％より３０％のキャッシュミスの減少が実現されている。
【００６３】
図９は、スラッシング多重度の算出にかかる処理動作を説明するフローチャートである。図９に示したように、分析装置２０のデータ取得部３１がサンプリングデータＤ１を取得し（Ｓ５０１）、キャッシュミス率算出部２２がキャッシュミス率を算出する。キャッシュミス率微分処理部２５は、８２通りのセクタ構成から対象とするセクタ構成を選出し（Ｓ５０２）、キャッシュミス率の微分値を算出する（Ｓ５０３）。スラッシング多重度算出部２２は、キャッシュミス率の微分値に基づいてスラッシング多重度を算出し（Ｓ５０４）、出力部２７が解析結果としてスラッシング多重度を出力して（Ｓ５０５）、処理を終了する。
【００６４】
［セクタの選択］
セクタキャッシュには二つのセクタがあるが、各メモリアクセスをどちらのセクタに割り当てると高性能を得られるかを判断する指標の設定について説明する。プログラムを静的に解析してデータの再利用性を判断することは難しい。データの再利用性は、プログラムの動的な特性であるためである。ここでは、セクタを選択するための手段の一つとして、データの宣言形状（大きさ）に基づいて再利用性を判断する手法を示す。
【００６５】
まず、二つのセクタを次のように用途分けする。
セクタ０：再利用性が高いと思われるデータのために利用する
セクタ１：再利用性が低いと思われるデータのために利用する
【００６６】
このように用途分けすると、再利用性が高いものと低いものを分けたことにより、再利用性が低いメモリアクセスがキャッシュ全体を汚すことを防止することができる。また、再利用性が低いと思われるデータにもウェイを残すことで、プリフェッチ等のアドレス空間的ローカリティが高いメモリアクセスのキャッシュ効率を保つことができる。
【００６７】
一般にデータの宣言形状が大きい場合、データ参照も大きな範囲に及ぶことが予想されるため、アクセスの局所性が低く、再利用性も低いと推測することができる。キャッシュの１ウェイの大きさは一例として５１２ＫＢｙｔｅである。データの大きさがわかる場合には、次のような判断を行なう。
・５１２ＫＢｙｔｅ以下のデータは、再利用性が高いと判断し、セクタ０を利用する。
・５１２ＫＢｙｔｅより大きいデータは、再利用性が低いと判断し、セクタ１を利用する。
【００６８】
データの大きさがわからない場合は、配列の次元数から類推する。
・次元数が所定数、例えば２以下のデータは、再利用性が高いと判断し、セクタ０を利用する。
・次元数が２より大きいデータは、再利用性が低いと判断し、セクタ１を利用する。
【００６９】
上記の判断に従い、セクタキャッシュ最適化コンパイラにより、セクタキャッシュ対応オブジェクトプログラムを生成する。図１０は、コンパイル時におけるセクタ選択処理を説明するフローチャートである。
【００７０】
図１０に示したように、セクタキャッシュ最適化コンパイラは、まず変数を選択し（Ｓ６０１）、データの大きさが求められるかを判定する（Ｓ６０２）。データの大きさが求められる場合（Ｓ６０２，Ｙｅｓ）、所定サイズ以下のデータはセクタ０、それ以外のデータはセクタ１を利用する（Ｓ６０３）。一方、データの大きさが求められない場合（Ｓ６０２，Ｎｏ）、次元数が例えば２以下のデータはセクタ０、それ以外のデータはセクタ１を利用する（Ｓ６０４）。
【００７１】
セクタキャッシュ最適化コンパイラは、Ｓ６０３，Ｓ６０４の後、全ての変数を選択したか判定し（Ｓ６０５）、選択していない変数が残っている場合には（Ｓ６０５，Ｎｏ）、変数の選択（Ｓ６０１）に戻る。そして、全ての変数を選択している場合（Ｓ６０５，Ｙｅｓ）、セクタキャッシュ最適化コンパイラは処理を終了する。
【００７２】
図１１は、変数の形状と使用セクタの判断結果の説明図である。図１１に示した利用セクタ判断結果Ｄ７は、変数Ｖａ１の形状が(100,100)、すなわちサイズが判り、５１２ＫＢ以下であるのでセクタ０を利用することを示している。
【００７３】
同様に、利用セクタ判断結果Ｄ７は、変数Ｖａ２の形状が(100,100,100)、すなわち、サイズが判り、５１２ＫＢ以下でないのでセクタ１を利用することを示している。また、利用セクタ判断結果Ｄ７は、変数Ｖａ３の形状が(NN,MM)、すなわちサイズがわからず、次元数が２以下であるので、セクタ０を利用することを示している。そして、利用セクタ判断結果Ｄ７は、変数Ｖａ４の形状が(AA,BB,CC)、すなわちサイズが判らず、次元数が２以下でないので、セクタ１を利用することを示している。
【００７４】
図１２は、プログラムの修正による改善についての説明図である。図１２に示したソースプログラム４１では、real*8 a(256,256)、real*8 d(256,256)、a(i,j)=b(i,j)+c(i,j)*d(i,j)+e(i,j)*f(i,j)の関係から、同一のキャッシュインデクスを引いてキャッシュ競合が発生する可能性が高くなる。この結果、ソースプログラム４１のハードウェアモニタ情報Ｄ８では、Ｌ２データキャッシュのミス率が9.1415%にのぼり、実行時間が長くなっている。
【００７５】
このように、キャッシュ機構の特性から２のべき乗のデータサイズを持つ大きなデータ間でキャッシュの競合が発生しやすい。
【００７６】
一方、修正したソースプログラム４１ａは、real*8 a(257,256)、b(257,256)として、データサイズが２のべき乗にならないようにしている。このため、ソースプログラム４１ａのハードウェアモニタ情報Ｄ８ａでは、Ｌ２データキャッシュのミス率が7.7722%に下がり、実行時間が改善している。
【００７７】
上述してきたように、本実施例にかかる分析装置２０は、アプリケーションプログラムの実行中にキャッシュメモリのセクタ構成を切り替えながらサンプリングしたアクセス数やキャッシュミス数を収集する。サンプリングデータを取得した分析装置２０は、セクタ構成ごとにキャッシュミス数をアクセス数で除してキャッシュミス率を算出する。このキャッシュミス率は、その値が小さいセクタ構成を適切なセクタ構成として選択する際に利用できる。
【００７８】
また、分析装置２０は、キャッシュミス率のセクタ構成変化に対する微分値を求め、キャッシュミス率の微分値の変化からアプリケーションプログラムによるキャッシュメモリの利用状態を求める。
【００７９】
このため、分析装置２０は、セクタキャッシュの構成を高精度に分析し、もってアプリケーションプログラムの性能向上に寄与することが出来る。加えて、アプリケーションプログラムを１回実行する間にセクタキャッシュの構成を評価することができるので、セクタキャッシュの構成を高速に分析可能である。
【００８０】
なお、本実施例はあくまで一例であり、構成及び動作は適宜変更して実施することができる。例えば、分析装置２０の各処理部をソフトウェアによって実現すれば、コンピュータを分析装置として動作させる分析プログラムを得ることができる。この分析プログラムを実行するのは、対象となるアプリケーションプログラムを実行するプロセッサ１０自身であってもよいし、他のコンピュータであっても良い。また、Ｌ１キャッシュのセクタキャッシュに対しても開示の技術は適用可能である。マルチプロセッサに対して適用することも出来る。
【００８１】
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
【００８２】
（付記１）アプリケーションプログラムの実行中にキャッシュメモリのセクタ構成を切り替えながら少なくとも前記キャッシュメモリに対するアクセス数とキャッシュミス数を前記セクタ構成に対応付けてサンプリングしたデータを収集する収集部と、
前記セクタ構成ごとに前記キャッシュミス数を前記アクセス数で除してキャッシュミス率を算出するキャッシュミス率算出部と、
他のセクタ構成に比して前記キャッシュミス率の小さいセクタ構成を適切なセクタ構成として選択する選択部と
を備えたことを特徴とする分析装置。
【００８３】
（付記２）他のセクタ構成に比して前記キャッシュミス率の小さいセクタ構成を適切なセクタ構成として選択する選択部をさらに備えたことを特徴とする付記１に記載の分析装置。
【００８４】
（付記３）前記取得部は、前記アプリケーションプログラムが実行した命令数を前記セクタ構成に対応付けて更に取得し、
前記セクタ構成ごとに前記アクセス数を前記命令数で除してキャッシュアクセス率を求め、前記キャッシュアクセス率の相対標準偏差が所定値未満である場合に前記選択部による選択結果が有効であると評価する有効性評価部をさらに備えたことを特徴とする付記２に記載の分析装置。
【００８５】
（付記４）アプリケーションプログラムの実行中にキャッシュメモリのセクタ構成を切り替えながら少なくとも前記キャッシュメモリに対するアクセス数とキャッシュミス数を前記セクタ構成に対応付けてサンプリングしたデータを収集する収集部と、
前記セクタ構成ごとに前記キャッシュミス数を前記アクセス数で除してキャッシュミス率を算出するキャッシュミス率算出部と、
前記キャッシュミス率のセクタ構成変化に対する微分値を求めるキャッシュミス率微分処理部と、
前記キャッシュミス率の微分値の変化から前記アプリケーションプログラムによる前記キャッシュメモリの利用状態を求める利用状態算出部と
を備えたことを特徴とする分析装置。
【００８６】
（付記５）前記アプリケーションプログラムは、変数が使用するデータの大きさと次元数に基づいて使用するセクタを決定することを特徴とする付記１〜４のいずれか一つに記載の分析装置。
【００８７】
（付記６）前記収集部は、前記アプリケーションプログラムによるサブルーチン処理の開始後と終了前にセクタ構成を切り替えながらサンプリングしたデータを収集することを特徴とする付記１〜５のいずれか一つに記載の分析装置。
【００８８】
（付記７）アプリケーションプログラムの実行中にキャッシュメモリのセクタ構成を切り替えながら少なくとも前記キャッシュメモリに対するアクセス数とキャッシュミス数を前記セクタ構成に対応付けてサンプリングしたデータを収集するステップと、
前記セクタ構成ごとに前記キャッシュミス数を前記アクセス数で除してキャッシュミス率を算出するステップと
を含んだことを特徴とする分析方法。
【００８９】
（付記８）他のセクタ構成に比して前記キャッシュミス率の小さいセクタ構成を適切なセクタ構成として選択するステップをさらに含んだことを特徴とする付記７に記載の分析方法。
【００９０】
（付記９）アプリケーションプログラムの実行中にキャッシュメモリのセクタ構成を切り替えながら少なくとも前記キャッシュメモリに対するアクセス数とキャッシュミス数を前記セクタ構成に対応付けてサンプリングしたデータを収集するステップと、
前記セクタ構成ごとに前記キャッシュミス数を前記アクセス数で除してキャッシュミス率を算出するステップと、
前記キャッシュミス率のセクタ構成変化に対する微分値を求めるステップと、
前記キャッシュミス率の微分値の変化から前記アプリケーションプログラムによる前記キャッシュメモリの利用状態を求めるステップと
を含んだことを特徴とする分析方法。
【００９１】
（付記１０）アプリケーションプログラムの実行中にキャッシュメモリのセクタ構成を切り替えながら少なくとも前記キャッシュメモリに対するアクセス数とキャッシュミス数を前記セクタ構成に対応付けてサンプリングしたデータを収集する手順と、
前記セクタ構成ごとに前記キャッシュミス数を前記アクセス数で除してキャッシュミス率を算出する手順と、
をコンピュータに実行させることを特徴とする分析プログラム。
【００９２】
（付記１１）他のセクタ構成に比して前記キャッシュミス率の小さいセクタ構成を適切なセクタ構成として選択する手順をさらにコンピュータに実行させることを特徴とする付記１０に記載の分析プログラム。
【００９３】
（付記１２）アプリケーションプログラムの実行中にキャッシュメモリのセクタ構成を切り替えながら少なくとも前記キャッシュメモリに対するアクセス数とキャッシュミス数を前記セクタ構成に対応付けてサンプリングしたデータを収集する手順と、
前記セクタ構成ごとに前記キャッシュミス数を前記アクセス数で除してキャッシュミス率を算出する手順と、
前記キャッシュミス率のセクタ構成変化に対する微分値を求める手順と、
前記キャッシュミス率の微分値の変化から前記アプリケーションプログラムによる前記キャッシュメモリの利用状態を求める手順と
をコンピュータに実行させることを特徴とする分析プログラム。
【符号の説明】
【００９４】
１０    プロセッサ
１１    アプリケーションプロセス
１２    サンプリングスレッド
１３    セクタ構成変更部
１４    サンプリング処理部
２０    分析装置
２１    データ収集部
２２    キャッシュミス率算出部
２３    選択部
２４    有効性評価部
２５    キャッシュミス率微分処理部
２６    スラッシング多重度算出部
２７    出力部
３１    ＣＰＵ
４１    ソースプログラム
４２    セクタキャッシュ最適化コンパイラ
４３    セクタキャッシュ対応オブジェクトプログラム
【図１】
0005521687.tif 000002
【図２】
0005521687.tif 000003
【図３】
0005521687.tif 000004
【図４】
0005521687.tif 000005
【図５】
0005521687.tif 000006
【図６】
0005521687.tif 000007
【図７】
0005521687.tif 000008
【図８】
0005521687.tif 000009
【図９】
0005521687.tif 000010
【図１０】
0005521687.tif 000011
【図１１】
0005521687.tif 000012
【図１２】
0005521687.tif 000013