(57)【特許請求の範囲】
【請求項１】
所定のキャッシュメモリのキャッシュブロック数に対応させた複数のメモリブロックに区分されているメインメモリ装置へのメモリアクセスが実施されて命令が実行されるシミュレーションにおける前記メインメモリ装置へのメモリアクセスの状況を分析し、分析結果に基づいて、前記メインメモリ装置内の複数のメモリブロックのうち、メモリアクセスの対象がメモリブロック内の一部のデータに偏っているメモリブロックを非効率ブロックとして抽出する非効率ブロック抽出部と、
前記非効率ブロック抽出部により抽出された非効率ブロックへのメモリアクセスを発生させた命令のうち所定の条件に合致する命令を非効率命令として抽出する非効率命令抽出部とを有することを特徴とする命令実行分析装置。
【請求項２】
前記命令実行分析装置は、表示装置に接続されており、
前記非効率命令抽出部は、
抽出した非効率命令を、当該非効率命令のアドレスとともに前記表示装置に出力することを特徴とする請求項１に記載の命令実行分析装置。
【請求項３】
前記非効率ブロック抽出部は、
メモリブロックごとに、メモリブロック内のデータのうち、前記シミュレーションの際のアクセス頻度が高い高アクセスデータとアクセス頻度が低い低アクセスデータとを抽出し、
各メモリブロックの高アクセスデータの数と低アクセスデータの数に基づいて、非効率ブロックを抽出することを特徴とする請求項１又は２に記載の命令実行分析装置。
【請求項４】
前記非効率ブロック抽出部は、
前記シミュレーションの際の前記複数のメモリブロックにおける平均メモリアクセス回数に基づいて、高アクセスデータを抽出するための抽出基準と、低アクセスデータを抽出するための抽出基準とを導出することを特徴とする請求項３に記載の命令実行分析装置。
【請求項５】
前記非効率命令抽出部は、
メインメモリ装置へのメモリアクセスが実施されて命令が実行されるシミュレーションにおける前記メインメモリ装置へのメモリアクセスの状況を分析し、分析結果に基づいて、前記非効率ブロックへのメモリアクセスを発生させた命令を特定し、特定した命令のうち、前記非効率ブロックへのメモリアクセスを所定回数以上発生させた命令を非効率命令として抽出することを特徴とする請求項１〜４のいずれかに記載の命令実行分析装置。
【請求項６】
前記命令実行分析装置は、更に、
前記シミュレーションで実行される命令が記述されるバイナリコードのソースプログラム内で、前記非効率命令抽出部により抽出された非効率命令が記述されている位置を非効率命令記述位置として特定し、前記ソースプログラム内の非効率命令記述位置に、当該非効率命令記述位置に記述されている命令が非効率命令であることを通知する通知メッセージを挿入するソースプログラム加工部を有することを特徴とする請求項１〜５のいずれかに記載の命令実行分析装置。
【請求項７】
前記ソースプログラム加工部は、
前記ソースプログラム内の非効率命令記述位置に記述されている命令に含まれている変数の設定が非効率であることを通知する通知メッセージを、前記ソースプログラム内の非効率命令記述位置に挿入することを特徴とする請求項６に記載の命令実行分析装置。
【請求項８】
コンピュータが、
所定のキャッシュメモリのキャッシュブロック数に対応させた複数のメモリブロックに区分されているメインメモリ装置へのメモリアクセスが実施されて命令が実行されるシミュレーションにおける前記メインメモリ装置へのメモリアクセスの状況を分析し、分析結果に基づいて、前記メインメモリ装置内の複数のメモリブロックのうち、メモリアクセスの対象がメモリブロック内の一部のデータに偏っているメモリブロックを非効率ブロックとして抽出する非効率ブロック抽出ステップと、
前記コンピュータが、
前記非効率ブロック抽出ステップにより抽出された非効率ブロックへのメモリアクセスを発生させた命令のうち所定の条件に合致する命令を非効率命令として抽出する非効率命令抽出ステップとを有することを特徴とする命令実行分析方法。
【請求項９】
所定のキャッシュメモリのキャッシュブロック数に対応させた複数のメモリブロックに区分されているメインメモリ装置へのメモリアクセスが実施されて命令が実行されるシミュレーションにおける前記メインメモリ装置へのメモリアクセスの状況を分析し、分析結果に基づいて、前記メインメモリ装置内の複数のメモリブロックのうち、メモリアクセスの対象がメモリブロック内の一部のデータに偏っているメモリブロックを非効率ブロックとして抽出する非効率ブロック抽出ステップと、
前記非効率ブロック抽出ステップにより抽出された非効率ブロックへのメモリアクセスを発生させた命令のうち所定の条件に合致する命令を非効率命令として抽出する非効率命令抽出ステップとをコンピュータに実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、キャッシュメモリの利用効率を向上させる技術に関する。
【背景技術】
【０００２】
情報処理装置は、プロセッサ装置、メインメモリ装置、入出力装置から構成され、特に実行性能が要求される装置については、高い周波数で動作し、キャッシュメモリを有するプロセッサ装置を活用する。
このとき、キャッシュメモリのヒット率が性能に影響する。
一般に、ヒット率は９５％以上、高速なものは９９％近いヒット率を実現する。
言いかえれば、キャッシュメモリのヒット率が数％低下するだけで、システム全体の性能が大幅に低下することは珍しいことではない。
そのため、例えば、特許文献１のように、ヒット率を中心とするキャッシュメモリの挙動情報を収集し、チューニングを行うことが提案されている。
【０００３】
特許文献１に記載の方式は、命令を模擬するシミュレータを有し、命令をシミュレーションするとともにキャッシュメモリもシミュレーションする。
特許文献１に記載の方式によれば、大規模な配列をもつプログラムに対して、配列の要素ごとにアクセス回数やキャッシュミス回数（アクセス回数−ヒット回数）を表示することができる。
また、特許文献１に記載の方式は、アクセス回数とキャッシュミス回数の多い行を検出して、キャッシュを有効に使用するようソースプログラムを改善する。
つまり、キャッシュミスの大きい配列は、遅延が大きいのでコンパイラによりその間に別の命令を実行するようにコード生成させる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平０８−２６３３７２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかし、特許文献１の手法で得られる情報は、プログラムのデータ配列のアクセス回数とミス回数であり、キャッシュ全体に対してどういう影響を与えているかが不明である。
例えば、キャッシュミス回数＝０と表示されれば、キャッシュとしては有効に機能しているように見えるが、同一のキャッシュブロックにのっている、ある要素だけがアクセス回数＝１０，０００回、ミス回数＝１回で、他の要素はアクセス回数＝１回、ミス回数＝０回である場合、キャッシュは有効に使われているとはいえない。
アクセス回数＝１回の要素は利用頻度が低いため、本来はキャッシュメモリに乗らなくても影響がない。
むしろ、利用頻度が高い別の配列の別のデータがそのキャッシュメモリを使うのが効率的といえる。
いいかえると、このような配列があると、他の配列のキャッシュミス回数を増やしていることが想像される。
すなわち、キャッシュミスも少なく効率的にアクセスしている配列の要素が、他の配列に対して悪影響を及ぼしていることがあるが、特許文献１の方式では、そのような原因に遡ることは容易にはできない。
キャッシュメモリを有効に使う一つのテクニックとしては、キャッシュのブロックには、アクセス回数が高いものだけを固めてのせ、アクセス回数が低いものも固めておき、キャッシュのブロックには乗らないようにしておくことが必要である。
アクセス頻度が高いものと低いものが混在することがキャッシュ利用効率の低下の要因の一つである。
特に、近年の高性能プロセッサは、キャッシュ容量の大規模化に伴い、キャッシュブロックのサイズが大きくなる傾向にあるため、このような傾向がだんだん顕著になってきた。
また、特許文献１の方式では、このような原因がプログラムのどの部分に起因して発生したのかが容易にはわからないので、効率的なプログラム修正が困難である。
【０００６】
この発明は、上記のような課題を解決することを主な目的の一つとしており、キャッシュメモリの同一ブロックにアクセス頻度の高いデータと低いデータが混在することを防止し、キャッシュメモリの利用効率を向上させることを主な目的とする。
【課題を解決するための手段】
【０００７】
本発明に係る命令実行分析装置は、
メインメモリ装置へのメモリアクセスが実施されて命令が実行されるシミュレーションにおける前記メインメモリ装置へのメモリアクセスの状況を分析し、分析結果に基づいて、前記メインメモリ装置内の複数のメモリブロックのうち、メモリアクセスの対象がメモリブロック内の一部のデータに偏っているメモリブロックを非効率ブロックとして抽出する非効率ブロック抽出部と、
前記非効率ブロック抽出部により抽出された非効率ブロックへのメモリアクセスを発生させた命令のうち所定の条件に合致する命令を非効率命令として抽出する非効率命令抽出部とを有することを特徴とする。
【発明の効果】
【０００８】
本発明によれば、シミュレーションにおいてメモリアクセスの対象がメモリブロック内の一部のデータに偏っているメモリブロックを非効率ブロックとして抽出するとともに、非効率ブロックへのメモリアクセスを発生させた命令を非効率命令として抽出するため、キャッシュメモリの同一ブロックにアクセス頻度の高いデータと低いデータが混在することを防止し、キャッシュメモリの利用効率を向上させることができる。
【図面の簡単な説明】
【０００９】
【図１】実施の形態１に係る処理手順を示すフローチャート図。
【図２】実施の形態１に係る非効率ブロックの抽出処理を示すフローチャート図。
【図３】実施の形態１に係る高アクセス頻度と低アクセス頻度のバイト数の算出処理を示すフローチャート図。
【図４】実施の形態１に係る非効率命令の抽出処理を示すフローチャート図。
【図５】実施の形態１に係る非効率ブロック及び非効率命令の出力例を示す図。
【図６】実施の形態２に係るソースプログラムの例を示す図。
【図７】実施の形態２に係るメッセージが挿入されたソースプログラムの例を示す図。
【図８】実施の形態２に係る処理手順を示すフローチャート図。
【図９】実施の形態２に係るソースプログラムとバイナリコードの対応表の例を示す図。
【図１０】実施の形態１に係る命令実行分析装置の構成例を示す図。
【図１１】実施の形態２に係る命令実行分析装置の構成例を示す図。
【図１２】実施の形態１及び２に係る命令実行分析装置のハードウェア構成例を示す図。
【発明を実施するための形態】
【００１０】
実施の形態１及び実施の形態２では、例えば、高性能な情報処理装置において、キャッシュメモリのブロックに、アクセス頻度の高いものと低いものが混在し、キャッシュメモリが効率的に活用できず、情報処理装置が持つ本来の性能が発揮できないようなケースにおいて、その原因を明らかにし、性能改善のためのソースプログラムの修正箇所を指示する手法を説明する。
より具体的には、本手法の中核の部分、すなわち、バイナリコードから非効率命令を取り出すところまでを実施の形態１に示し、中核の部分を実際に適用した例、すなわち、ソースプログラムに対して修正箇所を指示する例を実施の形態２で示す。
【００１１】
実施の形態１．
図１から図４にて、上記手法の中核部分の説明をする。
図１は、本実施の形態に係る命令実行分析方法の全体のフローを示す。
図２と図４では、図１で示したフローのうち重要構成要素を説明する。
図３は、図２での特定要素の説明を追加する。
図１０は、図１に示した命令実行分析方法を実現する命令実行分析装置の構成例を示す。
【００１２】
図１は、本実施の形態に係る命令実行分析方法の全体のフローである。
【００１３】
１は、入力データであり、バイナリコードと実行環境である。
実行環境とは、初期データや実行中に外部要因により変化するデータを指す。
２は非効率ブロックの抽出処理、３は非効率命令の抽出処理である。
非効率ブロックとは、ひとつのキャッシュブロックに対して、一部のデータのみ頻繁に使われ、他の部分はほとんど使われないため、ブロック全体としては、利用効率が低くなっているものを指す。
非効率命令とは、非効率ブロックの生成要因となっている命令を指す。
非効率ブロックの抽出処理２は、図２に示すように、メモリアクセス数の計測処理と非効率ブロックの判定処理に大別される。
非効率命令の抽出処理３は、図４に示すように、非効率ブロックへのアクセス回数の計測処理と非効率命令の判定処理に大別される。
図２及び図４の詳細は後述する。
４は、出力データであり、非効率命令の一覧表と非効率命令に関する情報である。
図５に具体的な出力例を示す。
図５の詳細は後述する。
【００１４】
図１０は、図１に示した命令実行分析方法を実現する命令実行分析装置１００の構成例を示す。
命令実行分析装置１００は、例えば、情報処理装置に実装されているツール（命令実行分析ツール）である。
【００１５】
命令実行分析装置１００において、シミュレーション部１０１は、バイナリコード、実行環境２００を用いて、命令実行のシミュレーションを行う。
より具体的には、シミュレーション部１０１は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）などのプロセッサ装置を模擬し、メインメモリ装置（例えば、命令実行分析装置１００が実装されている情報処理装置のメインメモリ装置）へのメモリアクセスを実施してバイナリコードの命令の実行をシミュレートする。
メインメモリ装置は、プロセッサ装置に含まれているキャッシュメモリのキャッシュブロック数に対応させた複数のメモリブロックに区分されている。
なお、シミュレーション部１０１は、後述する図２の２０３、２０４、２０６、２０７の処理、図４の３０３、３０４、３０７、３０８の処理を行う。
【００１６】
非効率ブロック抽出部１０２は、開始指示３００があった際に、図１の非効率ブロックの抽出処理２を行う。
より具体的には、非効率ブロック抽出部１０２は、シミュレーション部１０１のシミュレーションにおけるメインメモリ装置へのメモリアクセスの状況を分析し、分析結果に基づいて、メインメモリ装置内の複数のメモリブロックのうち、メモリアクセスの対象がメモリブロック内の一部のデータに偏っているメモリブロックを非効率ブロックとして抽出する。
【００１７】
非効率命令抽出部１０３は、図１の非効率命令の抽出処理３を行い、非効率命令の一覧表と非効率命令に関連する情報４００を出力する。
より具体的には、非効率命令抽出部１０３は、非効率ブロック抽出部１０２により抽出された非効率ブロックへのメモリアクセスを発生させた命令のうち所定の条件に合致する命令を非効率命令として抽出する。
また、命令実行分析装置１００には、図示していない表示装置が接続されており、非効率命令抽出部１０３は、図５のように、抽出した非効率命令と当該非効率命令のアドレスの情報を、非効率命令の一覧表と非効率命令に関連する情報４００として表示装置に出力する。
【００１８】
非効率ブロック抽出部１０２において、メモリアクセス計測部１０２１は、後述する図２の２０１、２０２、２０５の処理（メモリアクセス数の計測処理）を行う。
非効率ブロック判定部１０２２は、後述する図２の２０８〜２１２の処理（非効率ブロックの判定処理）を行う。
【００１９】
非効率命令抽出部１０３において、非効率ブロックアクセス計測部１０３１は、後述する図４の３０１、３０２、３０５、３０６の処理（非効率ブロックへのアクセス回数の計測処理）を行う。
非効率命令判定部１０３２は、後述する図４の３０９〜３１２の処理（非効率命令の判定処理）を行う。
【００２０】
図２は、図１の非効率ブロックの抽出処理２のフローを示す。
２０１から２１２のステップで構成されるが、大きく２つの処理に分けることができ、前半の２０１から２０７がメモリアクセス回数の計測であり、後半の２０８から２１２が非効率ブロックの判定フローとなっている。
以下では、図１に示した命令実行分析方法を、図１０に示した命令実行分析装置１００を用いて実行する例として説明する。
【００２１】
前半（２０１〜２０７）は、命令実行をシミュレータ（図１０のシミュレーション部１０１）でシミュレーションし、メモリアクセス回数を計測するのが目的である。
【００２２】
２０１で、メモリアクセス計測部１０２１が、メモリアクセスカウンタＭＣ［Ａｄｄｒ］をすべてのアドレス（Ａｄｄｒ）について初期化、即ちゼロクリアする。
【００２３】
２０２で、メモリアクセス計測部１０２１が、命令ポインタ（ＩＰ）を初期値に初期化する。即ち、ＩＰは最初に実行する命令のアドレスを指す。
【００２４】
２０３で、シミュレーション部１０１が、ＩＰの指すアドレスから命令（Ｉｎｓｔ）をフェッチしてくる。
一般に１命令は、１バイトとは限らないので、命令を構成するのに必要なバイト数がＩｎｓｔに入る。
【００２５】
２０４で、シミュレーション部１０１が、命令（Ｉｎｓｔ）をシミュレーションする。
シミュレーション部１０１は、内部に本物のプロセッサ装置と同じ内部リソース（演算装置やレジスタやキャッシュメモリなど）をソフトウェアで実現し、それらのリソースに中間状態を格納し、各種処理を行わせることにより、本物のプロセッサ装置と同じ状態を作り出す。
【００２６】
２０５で、メモリアクセス計測部１０２１が、命令（Ｉｎｓｔ）の実行に、メインメモリ装置へのメモリアクセスがある場合、該当アドレス（Ａｄｄｒ）のアクセス回数を更新する。
具体的にはＭＣ［Ａｄｄｒ］に１を加算する。
【００２７】
２０６で、シミュレーション部１０１が、命令実行が終了したかどうかを判断する。終了の条件は実行命令数、実行サイクル数、特定命令の実行、特定のアドレスにＩＰが到達するなど様々な条件が考えられるが、本明細書では特定はしない。
【００２８】
２０７で、シミュレーション部１０１が、命令ポインタ（ＩＰ）を次の命令を指す値に更新する。
実行した命令が分岐命令でなければ、新しいＩＰは古いＩＰに命令長を加算した値になる。
分岐命令であれば、ＩＰは分岐先のアドレスを指す。
【００２９】
２０３から２０７までのループを２０６の終了条件が成立するまで繰り返し、２０６の終了条件が成立したとき、シミュレーションは終了し、メモリアクセス回数の計測が完了する。
【００３０】
次に、後半（２０８〜２１２）の非効率ブロックの判定処理について説明する。
【００３１】
２０８で、非効率ブロック判定部１０２２が、ブロック番号（Ｎ）を０に初期化する。
【００３２】
２０９で、非効率ブロック判定部１０２２が、ブロック内のアクセス頻度が高いバイト数と低いバイト数を算出する。
アクセス頻度の高いバイト数は配列ＢＡ＿Ｈｉｇｈ［Ｎ］に、アクセス頻度の低いバイト数は配列ＢＡ＿Ｌｏｗ［Ｎ］に算出される。
詳細は図３で説明する。
【００３３】
２１０で、非効率ブロック判定部１０２２が、非効率ブロックか否かの判定を行う。
アクセス頻度が高いバイトがあり、しかも、アクセス頻度が低いバイトが多数ある場合、非効率ブロックと判断する。
具体的には、ＢＡ＿Ｈｉｇｈ［Ｎ］≧１  かつ  ＢＡ＿Ｈｉｇｈ［Ｎ］  ≧  ＢｌｏｃｋＳｉｚｅ  ×  ＪｕｄｇｅＲａｔｉｏ  で表す。
ＪｕｄｇｅＲａｔｉｏは、判断基準を変更するパラメータであり０から１までの値を取り得るが、例えば０．５を指定すれば、全ブロックのうち半数以上のバイトが低頻度アクセスで、高頻度アクセスが１バイト以上あるときに非効率ブロックと判断することになる。
非効率ブロックであれば、非効率ブロック判定部１０２２は、ブロックＮが非効率（Ｎｏｔ  Ｅｆｆｅｃｉｅｎｃｙ）であることを表す配列ＮＥ［Ｎ］に１をセットし、そうでなければ０をセットする。
【００３４】
２１１で、非効率ブロック判定部１０２２は、以上の処理をすべてのブロックに対して実施したかを確認し、実施済みであれば、処理を完了し、そうでなければ、２１２でブロック番号Ｎに１を加え更新し、２０９のステップに戻り、２０９から２１２の処理を繰り返す。
【００３５】
以上の処理により、すべてのブロックに対して非効率ブロックを示す配列ＮＥ［］が求められる。
【００３６】
ここで、図３により２０９でのブロック内のアクセス頻度が高いバイト数と低いバイト数の算出方法を説明する。
図２の２０９の処理は、ブロックＮの配列ＢＡ＿Ｈｉｇｈ［Ｎ］と配列ＢＡ＿Ｌｏｗ［Ｎ］を求めるのが目的である。
図２の２０９の処理は、２０９１から２０９７の７個のステップから構成される。
【００３７】
２０９１で、非効率ブロック判定部１０２２は、配列ＢＡ＿Ｈｉｇｈ［Ｎ］と配列ＢＡ＿Ｌｏｗ［Ｎ］を０に初期化する。
２０９２で、非効率ブロック判定部１０２２は、閾値ＴｈＨとＴｈＬを求める。
閾値ＴｈＨは、高アクセス頻度か否かの判断の閾値であり、閾値ＴｈＬは、低アクセス頻度か否かの判断の閾値である。
これらの閾値は、プログラムの振る舞いが明確な場合は、外部パラメータとして与えることも可能であるが、一般的には、閾値を決定するほど明確な情報を外部にもつことは困難である。
従って、閾値を内部の動作結果に応じて作成することにする。
具体的には、ブロックについて、平均的なメモリアクセス回数（ＡｖｅｒａｇｅＭＣ）に対して、十分に大きい値をＴｈＨ、十分に小さい値をＴｈＬとする。
この例では、平均メモリアクセスの４倍をＴｈＨとし、平均メモリアクセスの１／２をＴｈＬとした。
ＡｖｅｒａｇｅＭＣは、そのメモリブロック（メモリブロックＮ）の総メモリアクセス回数（ＭＣ［Ａｄｄｒ］の総和（但し、Ａｄｄｒ∈ブロックＮ））をブロックのバイト数（ＢｌｏｃｋＳｉｚｅ）で除算すれば求められる。
【００３８】
２０９３で、非効率ブロック判定部１０２２は、以下のループで使用する変数である、アドレス（Ａｄｄｒ）とカウンタ（Ｉ）を初期化する。
【００３９】
２０９４で、非効率ブロック判定部１０２２は、バイト毎のアクセス数の閾値判定を行う。
メモリアクセス回数ＭＣ［Ａｄｄｒ］が閾値ＴｈＨ以上であれば、ＢＡ＿Ｈｉｇｈ［Ｎ］に１を加算する。
メモリアクセス回数ＭＣ［Ａｄｄｒ］が閾値ＴｈＬ以下であれば、ＢＡ＿Ｌｏｗ［Ｎ］に１を加算する。
【００４０】
２０９５で、非効率ブロック判定部１０２２は、カウンタ値（Ｉ）に１を加算し更新する。
【００４１】
２０９６で、非効率ブロック判定部１０２２は、ループの終了判定を行う。
即ち、カウンタ（Ｉ）がブロックのバイト数（ＢｌｏｃｋＳｉｚｅ）と等しくなれば、本処理を終了する。
そうでなければ、非効率ブロック判定部１０２２は、２０９７で、アドレス（Ａｄｄｒ）に１を加算し、２０９４に戻り、終了条件が成立するまで２０９４〜２０９７の処理を繰り返す。
【００４２】
上記のループが終了したとき、配列ＢＡ＿Ｈｉｇｈ［Ｎ］と配列ＢＡ＿Ｌｏｗ［Ｎ］には、それぞれ、高アクセス頻度と低アクセス頻度のバイト数が入力されている。
【００４３】
図４は、図１の非効率命令の抽出処理３のフローを示す。
３０１から３１２のステップで構成されるが、大きく２つの処理に分けることができ、前半の３０１から３０８が非効率ブロックへのアクセス回数の計測であり、後半の３０９から３１２が非効率命令の判定フローとなっている。
前半（３０１〜３０８）は、命令実行をシミュレータ（図１０のシミュレーション部１０１）でシミュレーションし、非効率ブロックへのアクセス回数を計測するのが目的である。
【００４４】
３０１で、非効率ブロックアクセス計測部１０３１が、命令毎の非効率アクセスカウンタＭＣ＿ＩｎｓｔＡＣ［ＩＰ］をすべての命令ポインタ（ＩＰ）について初期化、即ちゼロクリアする。
【００４５】
３０２で、非効率ブロックアクセス計測部１０３１が、命令ポインタ（ＩＰ）を初期値に初期化する。
即ち、ＩＰは最初に実行する命令のアドレスを指す。
【００４６】
３０３で、シミュレーション部１０１が、ＩＰの指すアドレスから命令（Ｉｎｓｔ）をフェッチしてくる。
【００４７】
３０４で、シミュレーション部１０１が、命令（Ｉｎｓｔ）を内部のシミュレータでシミュレーションする。
【００４８】
３０５で、非効率ブロックアクセス計測部１０３１が、命令（Ｉｎｓｔ）の実行に、メインメモリ装置へのメモリアクセスがある場合、該当アドレス（Ａｄｄｒ）が非効率ブロックか否かを検索する。
具体的には、Ａｄｄｒ／ＢｌｏｃｋＳｉｚｅの商（整数値）がブロック番号Ｎになるので、非効率ブロック抽出で求めた配列ＮＥ［Ｎ］を読むことで非効率ブロックかどうかが分かる。
ＮＥ［Ｎ］＝１のとき、非効率ブロックなので変数ＮｏＥｆｆｅｃｉｅｎｃｙ＝１にセットし、ＮＥ［Ｎ］＝０のときは、非効率ブロックでないので変数ＮｏＥｆｆｅｃｉｅｎｃｙ＝０にセットする。
【００４９】
３０６で、非効率ブロックアクセス計測部１０３１が、非効率ブロックのアクセスなら命令毎の非効率アクセスカウンタＮＥ＿ＩｎｓｔＡＣ［ＩＰ］に１を加えて更新する。
【００５０】
３０７で、シミュレーション部１０１が、命令実行が終了したかどうかを判断する。
終了の条件は実行命令数、実行サイクル数、特定命令の実行、特定のアドレスにＩＰが到達するなど様々な条件が考えられるが、本明細書では特定はしない。
【００５１】
３０８で、シミュレーション部１０１が、命令ポインタ（ＩＰ）を次の命令を指す値に更新する。
実行した命令が分岐命令でなければ、新しいＩＰは古いＩＰに命令長を加算した値になる。
分岐命令であれば、ＩＰは分岐先のアドレスを指す。
【００５２】
３０３から３０８までのループを３０７の終了条件が成立するまで繰り返す。
３０７の終了条件が成立したとき、シミュレーションは終了し、メモリアクセス回数の計測が完了する。
【００５３】
次に後半（３０９〜３１２）の非効率ブロックの判定処理について説明する。
【００５４】
３０９で、非効率命令判定部１０３２が、命令の格納アドレスの最小値をＡｄｄｒにセットする。
この値はシステム依存であるが、本実施の形態では０をセットしている。
【００５５】
３１０で、非効率命令判定部１０３２が、非効率命令の判定を行う。
命令毎の非効率アクセスカウンタＮＥ＿ＩｎｓｔＡＣ［Ａｄｄｒ］が閾値Ｔｈ＿ＮＥ＿Ｉｎｓｔ以上であれば、非効率命令と判断し、結果を表す配列ＮＥ＿Ｉｎｓｔ［Ａｄｄｒ］に１をセットし、非効率命令でなければ０をセットする。
閾値Ｔｈ＿ＮＥ＿Ｉｎｓｔは、目的に応じてシステムの外部から与える。
すべての非効率ブロックアクセスしている命令が知りたければ、Ｔｈ＿ＮＥ＿Ｉｎｓｔ＝１を与え、もっと絞り込んだ情報が知りたければ、Ｔｈ＿ＮＥ＿Ｉｎｓｔに大きな値を与える。
【００５６】
３１１で、非効率命令判定部１０３２が、ループの終了を判定する。
すなわち、命令の格納アドレスの最大値に到達したか否かを調べ、到達していれば、この処理が終了する。
そうでなければ、３１２で命令の格納アドレスに１加えて更新して、３１０に戻り、３１０〜３１２の処理を繰り返す。
【００５７】
上記の処理が終了すると、非効率命令か否かを表す配列ＮＥ＿Ｉｎｓｔ［］と、その命令が非効率ブロックにアクセスした回数を表す配列ＮＥ＿Ｉｎｓｔ＿ＡＣ［］が求められる。
【００５８】
図５に出力例を示す。
ＮＥ＿Ｉｎｓｔ［Ａｄｄｒ］＝１となるＡｄｄｒについて、アドレスＡｄｄｒ、命令Ｉｎｓｔ＝Ｍｅｍ［Ａｄｄｒ］、非効率ブロックへのアクセス回数Ｎｅ＿Ｉｎｓｔ＿ＡＣ［Ａｄｄｒ］を表示した例である。
【００５９】
このように、本実施の形態では、シミュレーションにおいてメモリアクセスの対象がメモリブロック内の一部のデータに偏っているメモリブロックを非効率ブロックとして抽出するとともに、非効率ブロックへのメモリアクセスを発生させた命令を非効率命令として抽出する。
そして、図５に例示するように、抽出した非効率命令を、当該非効率命令のアドレスとともに表示するため、キャッシュメモリの同一ブロックにアクセス頻度の高いデータと低いデータが混在することを防止し、キャッシュメモリの利用効率を向上させることができる。
【００６０】
以上、本実施の形態では、
以下の手段を備えた命令実行分析装置を説明した。
（ａ）特定のプロセッサに対応したプログラムのバイナリコードと実行環境を入力する手段、
実行環境とは、初期データや実行中に外部要因により変化するデータを指す。
（ｂ）プロセッサの命令の実行を模擬する手段、
このプロセッサは、メモリをアクセスするとき、実行時間の短縮のためキャッシュメモリを有することを前提とする。
（ｃ）命令のメモリアクセスにおける非効率ブロックの抽出手段、
非効率ブロックとは、ひとつのキャッシュブロックに対して、一部のデータのみ頻繁に使われ、他の部分はほとんど使われないため、ブロック全体としては、利用効率が低くなっているものを指す。
（ｄ）非効率命令の抽出手段、
非効率命令とは、前記非効率ブロックの生成要因となっている命令を指す。
【００６１】
また、本実施の形態では、非効率ブロックの抽出手段の実現方法として、
（ａ）プロセッサの命令の実行を模擬する手段、
（ｂ）メモリアクセス回数を計測する手段、
（ｃ）ブロック内のバイトに対して、高頻度のアクセスの個数を計測する手段、
（ｄ）ブロック内のバイトに対して、低頻度のアクセスの個数を計測する手段、
（ｅ）該当ブロックが非効率化か否かを、高頻度アクセスのバイト数と低頻度アクセスのバイト数を用いて判断する手段
を説明した。
【００６２】
また、本実施の形態では、以下の手段を備えた命令実行分析装置を説明した。
（ａ）高頻度アクセスか否かを判定するための閾値を算出する手段、
（ｂ）低頻度アクセスか否かを判定するための閾値を算出する手段。
【００６３】
また、本実施の形態では、非効率命令の抽出手段の実現方法として、
（ａ）プロセッサの命令の実行を模擬する手段、
（ｂ）命令毎の非効率ブロックへのアクセス回数を計測する手段、
（ｃ）すべての命令に対し、非効率ブロックへのアクセス回数と閾値を比較する手段
を説明した。
【００６４】
実施の形態２．
次に、実施の形態１で示した命令実行分析方法をさらに有効に活用する手法を説明する。
ユーザが実際に実施の形態１に係る命令実行分析方法を活用する場合、図５のような形式より、ソースプログラムに直接指示やヒントが書かれることが望ましい。
【００６５】
例えば図６のようなソースプログラムを考える。
このプログラムは、Ｃ言語の文法で、本実施の形態に関係があるところのみを記載している。
図６において、１行目でプログラム名を定義し、２行目で変数と配列を定義している。
配列はａ、ｂ、ｃと３つあり、要素数はいずれも１００００である。
３行目から６行目まで制御変数ｉでループを構成し、配列ａに配列ｂと配列ｃを加算し代入している。
このとき、４行目に示すように、配列ｂのインデックスｊは、変数ｉの一の位を切り落とし１０の倍数のみを取るようになっている。
従って、配列ｂは要素毎にアクセス数が異なり、非効率ブロックとなっている。
一方、配列ａと配列ｃは、効率的なブロックである。
【００６６】
図７は、非効率命令のマーキング付きソースプログラムの例である。
図６のプログラムに対して、６行目に／＊  配列ｂ［ｊ］の参照が非効率です  ＊／というメッセージが挿入されている。
このようなメッセージがあるとユーザは、５行目の式のｂ［ｊ］のメモリ参照が非効率であり、この配列を改善すればよいことが分かる。
例えば、配列ｂを必要最小限の配列（ｂ［１０００］）として定義し、ｊ＝ｉｎｔ（ｉ／１０）とすれば、配列ｂ［ｊ］の利用効率が上がることは容易に想像できる。
一般に、このようにデータサイズを小さくすると、キャッシュメモリの利用効率が向上し、システムの性能が向上する。
【００６７】
図８では、上記のようなことを実現するためのフローを説明する。
図において、１１はソースプログラムで、例えば図６のようなものである。
１２はコンパイラとリンカである。
１３はバイナリコードである。
１４はリンカの出力の一つで、ソースプログラムとバイナリコードの対応をつける表（以降、対応表と呼ぶ）で、例えば図９のようなものである。
１５は実行環境である。
２は非効率ブロックの抽出処理である。
３は、非効率命令の抽出処理である。
４は非効率命令の一覧である。
５は非効率命令をソースプログラムへひもづけする処理である。
６は非効率命令のマーキング付きソースプログラムで、例えば図７のようなものである。
【００６８】
図１１は、本実施の形態に係る命令実行分析装置１００の構成例を示す。
図１１において、図１０と同じ符号の要素は図１０と同じであり、説明を省略する。
ソースプログラム加工部１０４は、図８の非効率命令のソースプログラムへのひもづけ処理５を実施して、図７に示すようなメッセージをソースプログラムに挿入する。
つまり、ソースプログラム加工部１０４は、シミュレーションの対象となる命令が記述されるバイナリコードのソースプログラム６００内で非効率命令が記述されている位置を非効率命令記述位置として特定し、非効率命令記述位置に、当該非効率命令記述位置に記述されている命令が非効率命令であることを通知するメッセージを挿入する。
【００６９】
ソースプログラムとバイナリコードの対応表５００は、図８のソースプログラムとバイナリコードの対応表１４に相当し、例えば、図９に示すものである。
【００７０】
ソースプログラム６００は、図８のソースプログラム１１に対応する。
【００７１】
非効率命令のマーキング付きソースプログラム７００は、図８の非効率命令のマーキング付きソースプログラム６に対応し、例えば図７に示すものである。
【００７２】
以下、図８及び図１１を参照して、本実施の形態に係る処理を説明する。
【００７３】
１１のソースプログラムを１２のコンパイラとリンカで処理すると、実行可能なバイナリコード１３と対応表１４が生成される。
バイナリコード１３と実行環境１５を非効率ブロックの抽出処理２（非効率ブロック抽出部１０）に入力すると、実施の形態１で説明したように非効率ブロックの一覧が出力される。
非効率命令の抽出処理３（非効率命令抽出部１０３）に非効率ブロックの一覧を入力すると実施の形態１で説明したように、非効率命令一覧４が出力される。
非効率命令一覧４と対応表１４を非効率命令のソースプログラムへのひもづけ処理５（ソースプログラム加工部１０４）に入力することで、非効率命令のマーキング付きソースプログラム６、即ち、図７のようなソースプログラムが出力される。
対応表１４は、具体的には図９のようなもので、ソースプログラムの行番号、それに対応する命令のアドレスと命令と命令がアクセスする変数などの情報が記載されている。
ソースプログラム加工部１０４は、非効率命令一覧（図５）に掲載されている命令アドレスを対応表（図９）で見つけ、その行番号と変数名を検索することで、ソースプログラムの修正行番号と非効率命令でアクセスされている変数が見つけられる。
この例では、図５の表の１行目に命令アドレス＝１０００Ｈがあるので、図９の対応表で命令アドレス＝１０００Ｈを探し、そのときのソースプログラム行番号は５行目で、変数名は配列ｂ［ｊ］であることが分かる。
この情報をもとに、ソースプログラム加工部１０４は、非効率命令記述位置である図６の５行目のあとにメッセージを挿入すると図７を生成することができる。
【００７４】
このように、本実施の形態によれば、ユーザに対して、キャッシュメモリの利用効率を改善するための修正箇所をソースプログラムにおいて提示することができる。
【００７５】
以上、本実施の形態では、実施の形態１の構成に加えて、以下の手段を備えた命令実行分析装置を説明した。
（ａ）ソースプログラムとバイナリコードの対応表（リンカの出力）により、非効率命令とソースプログラムのひもづけをする手段、
（ｂ）非効率命令にひもづけされたソースプログラムの変数名にマーキングをする手段。
【００７６】
最後に、実施の形態１及び２に示した命令実行分析装置１００を実現するためのハードウェア構成例について説明する。
図１２は、実施の形態１及び２に示す命令実行分析装置１００を実現するためのハードウェア資源の一例を示す図である。
なお、図１２の構成は、あくまでもハードウェア構成の一例を示すものであり、命令実行分析装置１００は図１２に記載の構成に限らず、他の構成によって実現されてもよい。
【００７７】
図１２において、命令実行分析装置１００は、プログラムを実行するＣＰＵ９１１（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、プロセッサともいう）を備えている。
ＣＰＵ９１１は、バス９１２を介して、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）９１３、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）９１４、通信ボード９１５、表示装置９０１、キーボード９０２、マウス９０３、磁気ディスク装置９２０と接続され、これらのハードウェアデバイスを制御する。
更に、ＣＰＵ９１１は、ＦＤＤ９０４（Ｆｌｅｘｉｂｌｅ  Ｄｉｓｋ  Ｄｒｉｖｅ）、コンパクトディスク装置９０５（ＣＤＤ）、プリンタ装置９０６、スキャナ装置９０７と接続していてもよい。また、磁気ディスク装置９２０の代わりに、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）、光ディスク装置、メモリカード（登録商標）読み書き装置などの記憶装置でもよい。
ＲＡＭ９１４は、揮発性メモリの一例である。ＲＯＭ９１３、ＦＤＤ９０４、ＣＤＤ９０５、磁気ディスク装置９２０の記憶媒体は、不揮発性メモリの一例である。これらは、記憶装置の一例である。
通信ボード９１５、キーボード９０２、マウス９０３、スキャナ装置９０７、ＦＤＤ９０４などは、入力装置の一例である。
また、通信ボード９１５、表示装置９０１、プリンタ装置９０６などは、出力装置の一例である。
【００７８】
通信ボード９１５は、ネットワークに接続されている。
例えば、通信ボード９１５は、ＬＡＮ（ローカルエリアネットワーク）、インターネット、ＷＡＮ（ワイドエリアネットワーク）、ＳＡＮ（ストレージエリアネットワーク）などに接続されている。
【００７９】
磁気ディスク装置９２０には、オペレーティングシステム９２１（ＯＳ）、ウィンドウシステム９２２、プログラム群９２３、ファイル群９２４が記憶されている。
プログラム群９２３のプログラムは、ＣＰＵ９１１がオペレーティングシステム９２１、ウィンドウシステム９２２を利用しながら実行する。
【００８０】
また、ＲＡＭ９１４には、ＣＰＵ９１１に実行させるオペレーティングシステム９２１のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。
また、ＲＡＭ９１４には、ＣＰＵ９１１による処理に必要な各種データが格納される。
【００８１】
また、ＲＯＭ９１３には、ＢＩＯＳ（Ｂａｓｉｃ  Ｉｎｐｕｔ  Ｏｕｔｐｕｔ  Ｓｙｓｔｅｍ）プログラムが格納され、磁気ディスク装置９２０にはブートプログラムが格納されている。
命令実行分析装置１００の起動時には、ＲＯＭ９１３のＢＩＯＳプログラム及び磁気ディスク装置９２０のブートプログラムが実行され、ＢＩＯＳプログラム及びブートプログラムによりオペレーティングシステム９２１が起動される。
【００８２】
上記プログラム群９２３には、実施の形態１及び２の説明において「〜部」、「〜手段」として説明している機能を実行するプログラムが記憶されている。プログラムは、ＣＰＵ９１１により読み出され実行される。
【００８３】
ファイル群９２４には、実施の形態１及び２の説明において、「〜の判定」、「〜のシミュレーション」、「〜の算出」、「〜の検索」、「〜の計測」、「〜の更新」、「〜の設定」、「〜の加工」、「〜の挿入」、「〜の選択」、「〜の入力」、「〜の出力」等として説明している処理の結果を示す情報やデータや信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」の各項目として記憶されている。
「〜ファイル」や「〜データベース」は、ディスクやメモリなどの記録媒体に記憶される。
ディスクやメモリなどの記憶媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してＣＰＵ９１１によりメインメモリやキャッシュメモリに読み出される。
そして、読み出された情報やデータや信号値や変数値やパラメータは、抽出・検索・参照・比較・演算・計算・処理・編集・出力・印刷・表示などのＣＰＵの動作に用いられる。
抽出・検索・参照・比較・演算・計算・処理・編集・出力・印刷・表示のＣＰＵの動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリ、レジスタ、キャッシュメモリ、バッファメモリ等に一時的に記憶される。
また、実施の形態１及び２で説明しているフローチャートの矢印の部分は主としてデータや信号の入出力を示す。
データや信号値は、ＲＡＭ９１４のメモリ、ＦＤＤ９０４のフレキシブルディスク、ＣＤＤ９０５のコンパクトディスク、磁気ディスク装置９２０の磁気ディスク、その他光ディスク、ミニディスク、ＤＶＤ等の記録媒体に記録される。
また、データや信号は、バス９１２や信号線やケーブルその他の伝送媒体によりオンライン伝送される。
【００８４】
また、実施の形態１及び２の説明において「〜部」、「〜手段」として説明しているものは、「〜回路」、「〜装置」、「〜機器」であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。
すなわち、実施の形態１及び２で説明したフローチャートに示すステップ、手順、処理により、本発明に係る「命令実行分析方法」を実現することができる。
また、「〜部」、「〜手段」として説明しているものは、ＲＯＭ９１３に記憶されたファームウェアで実現されていても構わない。
或いは、ソフトウェアのみ、或いは、素子・デバイス・基板・配線などのハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。
ファームウェアとソフトウェアは、プログラムとして、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、ＤＶＤ等の記録媒体に記憶される。
プログラムはＣＰＵ９１１により読み出され、ＣＰＵ９１１により実行される。
すなわち、プログラムは、実施の形態１及び２の「〜部」、「〜手段」としてコンピュータを機能させるものである。あるいは、実施の形態１及び２の「〜部」、「〜手段」の手順や方法をコンピュータに実行させるものである。
【００８５】
このように、実施の形態１及び２に示す命令実行分析装置１００は、処理装置たるＣＰＵ、記憶装置たるメモリ、磁気ディスク等、入力装置たるキーボード、マウス、通信ボード等、出力装置たる表示装置、通信ボード等を備えるコンピュータにより実現される。
そして、上記したように「〜部」、「〜手段」として示された機能をこれら処理装置、記憶装置、入力装置、出力装置を用いて実現するものである。
【符号の説明】
【００８６】
１００  命令実行分析装置、１０１  シミュレーション部、１０２  非効率ブロック抽出部、１０３  非効率命令抽出部、１０４  ソースプログラム加工部、１０２１  メモリアクセス計測部、１０２２  非効率ブロック判定部、１０３１  非効率ブロックアクセス計測部、１０３２  非効率命令判定部。
【図１】
0005597584.tif 000002
【図２】
0005597584.tif 000003
【図３】
0005597584.tif 000004
【図４】
0005597584.tif 000005
【図５】
0005597584.tif 000006
【図６】
0005597584.tif 000007
【図７】
0005597584.tif 000008
【図８】
0005597584.tif 000009
【図９】
0005597584.tif 000010
【図１０】
0005597584.tif 000011
【図１１】
0005597584.tif 000012
【図１２】
0005597584.tif 000013