"メインメモリ装置へのメモリアクセスが実施されて命令が実行されるシミュレーションにおける前記メインメモリ装置へのメモリアクセスの状況を分析し、分析結果に基づいて、前記メインメモリ装置内の複数のメモリブロックのうち、メモリアクセスの対象がメモリブロック内の一部のデータに偏っているメモリブロックを非効率ブロックとして抽出する非効率ブロック抽出部と、前記非効率ブロック抽出部により抽出された非効率ブロックへのメモリアクセスを発生させた命令のうち所定の条件に合致する命令を非効率命令として抽出する非効率命令抽出部とを有することを特徴とする命令実行分析装置。前記命令実行分析装置は、表示装置に接続されており、前記非効率命令抽出部は、抽出した非効率命令を、当該非効率命令のアドレスとともに前記表示装置に出力することを特徴とする請求項1に記載の命令実行分析装置。前記非効率ブロック抽出部は、所定のキャッシュメモリのキャッシュブロック数に対応させた複数のメモリブロックの中から非効率ブロックを抽出することを特徴とする請求項1又は2に記載の命令実行分析装置。前記非効率ブロック抽出部は、メモリブロックごとに、メモリブロック内のデータのうち、前記シミュレーションの際のアクセス頻度が高い高アクセスデータとアクセス頻度が低い低アクセスデータとを抽出し、各メモリブロックの高アクセスデータの数と低アクセスデータの数に基づいて、非効率ブロックを抽出することを特徴とする請求項1~3のいずれかに記載の命令実行分析装置。前記非効率ブロック抽出部は、前記シミュレーションの際の前記複数のメモリブロックにおける平均メモリアクセス回数に基づいて、高アクセスデータを抽出するための抽出基準と、低アクセスデータを抽出するための抽出基準とを導出することを特徴とする請求項4に記載の命令実行分析装置。前記非効率命令抽出部は、メインメモリ装置へのメモリアクセスが実施されて命令が実行されるシミュレーションにおける前記メインメモリ装置へのメモリアクセスの状況を分析し、分析結果に基づいて、前記非効率ブロックへのメモリアクセスを発生させた命令を特定し、特定した命令のうち、前記非効率ブロックへのメモリアクセスを所定回数以上発生させた命令を非効率命令として抽出することを特徴とする請求項1~5のいずれかに記載の命令実行分析装置。前記命令実行分析装置は、更に、前記シミュレーションで実行される命令が記述されるバイナリコードのソースプログラム内で、前記非効率命令抽出部により抽出された非効率命令が記述されている位置を非効率命令記述位置として特定し、前記ソースプログラム内の非効率命令記述位置に、当該非効率命令記述位置に記述されている命令が非効率命令であることを通知する通知メッセージを挿入するソースプログラム加工部を有することを特徴とする請求項1~6のいずれかに記載の命令実行分析装置。前記ソースプログラム加工部は、前記ソースプログラム内の非効率命令記述位置に記述されている命令に含まれている変数の設定が非効率であることを通知する通知メッセージを、前記ソースプログラム内の非効率命令記述位置に挿入することを特徴とする請求項7に記載の命令実行分析装置。コンピュータが、メインメモリ装置へのメモリアクセスが実施されて命令が実行されるシミュレーションにおける前記メインメモリ装置へのメモリアクセスの状況を分析し、分析結果に基づいて、前記メインメモリ装置内の複数のメモリブロックのうち、メモリアクセスの対象がメモリブロック内の一部のデータに偏っているメモリブロックを非効率ブロックとして抽出する非効率ブロック抽出ステップと、前記コンピュータが、前記非効率ブロック抽出ステップにより抽出された非効率ブロックへのメモリアクセスを発生させた命令のうち所定の条件に合致する命令を非効率命令として抽出する非効率命令抽出ステップとを有することを特徴とする命令実行分析方法。メインメモリ装置へのメモリアクセスが実施されて命令が実行されるシミュレーションにおける前記メインメモリ装置へのメモリアクセスの状況を分析し、分析結果に基づいて、前記メインメモリ装置内の複数のメモリブロックのうち、メモリアクセスの対象がメモリブロック内の一部のデータに偏っているメモリブロックを非効率ブロックとして抽出する非効率ブロック抽出ステップと、前記非効率ブロック抽出ステップにより抽出された非効率ブロックへのメモリアクセスを発生させた命令のうち所定の条件に合致する命令を非効率命令として抽出する非効率命令抽出ステップとをコンピュータに実行させることを特徴とするプログラム。しかし、特許文献1の手法で得られる情報は、プログラムのデータ配列のアクセス回数とミス回数であり、キャッシュ全体に対してどういう影響を与えているかが不明である。例えば、キャッシュミス回数=0と表示されれば、キャッシュとしては有効に機能しているように見えるが、同一のキャッシュブロックにのっている、ある要素だけがアクセス回数=10,000回、ミス回数=1回で、他の要素はアクセス回数=1回、ミス回数=0回である場合、キャッシュは有効に使われているとはいえない。アクセス回数=1回の要素は利用頻度が低いため、本来はキャッシュメモリに乗らなくても影響がない。むしろ、利用頻度が高い別の配列の別のデータがそのキャッシュメモリを使うのが効率的といえる。いいかえると、このような配列があると、他の配列のキャッシュミス回数を増やしていることが想像される。すなわち、キャッシュミスも少なく効率的にアクセスしている配列の要素が、他の配列に対して悪影響を及ぼしていることがあるが、特許文献1の方式では、そのような原因に遡ることは容易にはできない。キャッシュメモリを有効に使う一つのテクニックとしては、キャッシュのブロックには、アクセス回数が高いものだけを固めてのせ、アクセス回数が低いものも固めておき、キャッシュのブロックには乗らないようにしておくことが必要である。アクセス頻度が高いものと低いものが混在することがキャッシュ利用効率の低下の要因の一つである。特に、近年の高性能プロセッサは、キャッシュ容量の大規模化に伴い、キャッシュブロックのサイズが大きくなる傾向にあるため、このような傾向がだんだん顕著になってきた。また、特許文献1の方式では、このような原因がプログラムのどの部分に起因して発生したのかが容易にはわからないので、効率的なプログラム修正が困難である。この発明は、上記のような課題を解決することを主な目的の一つとしており、キャッシュメモリの同一ブロックにアクセス頻度の高いデータと低いデータが混在することを防止し、キャッシュメモリの利用効率を向上させることを主な目的とする。本発明に係る命令実行分析装置は、メインメモリ装置へのメモリアクセスが実施されて命令が実行されるシミュレーションにおける前記メインメモリ装置へのメモリアクセスの状況を分析し、分析結果に基づいて、前記メインメモリ装置内の複数のメモリブロックのうち、メモリアクセスの対象がメモリブロック内の一部のデータに偏っているメモリブロックを非効率ブロックとして抽出する非効率ブロック抽出部と、前記非効率ブロック抽出部により抽出された非効率ブロックへのメモリアクセスを発生させた命令のうち所定の条件に合致する命令を非効率命令として抽出する非効率命令抽出部とを有することを特徴とする。本発明によれば、シミュレーションにおいてメモリアクセスの対象がメモリブロック内の一部のデータに偏っているメモリブロックを非効率ブロックとして抽出するとともに、非効率ブロックへのメモリアクセスを発生させた命令を非効率命令として抽出するため、キャッシュメモリの同一ブロックにアクセス頻度の高いデータと低いデータが混在することを防止し、キャッシュメモリの利用効率を向上させることができる。実施の形態1及び実施の形態2では、例えば、高性能な情報処理装置において、キャッシュメモリのブロックに、アクセス頻度の高いものと低いものが混在し、キャッシュメモリが効率的に活用できず、情報処理装置が持つ本来の性能が発揮できないようなケースにおいて、その原因を明らかにし、性能改善のためのソースプログラムの修正箇所を指示する手法を説明する。より具体的には、本手法の中核の部分、すなわち、バイナリコードから非効率命令を取り出すところまでを実施の形態1に示し、中核の部分を実際に適用した例、すなわち、ソースプログラムに対して修正箇所を指示する例を実施の形態2で示す。実施の形態1.図1から図4にて、上記手法の中核部分の説明をする。図1は、本実施の形態に係る命令実行分析方法の全体のフローを示す。図2と図4では、図1で示したフローのうち重要構成要素を説明する。図3は、図2での特定要素の説明を追加する。図10は、図1に示した命令実行分析方法を実現する命令実行分析装置の構成例を示す。図1は、本実施の形態に係る命令実行分析方法の全体のフローである。1は、入力データであり、バイナリコードと実行環境である。実行環境とは、初期データや実行中に外部要因により変化するデータを指す。2は非効率ブロックの抽出処理、3は非効率命令の抽出処理である。非効率ブロックとは、ひとつのキャッシュブロックに対して、一部のデータのみ頻繁に使われ、他の部分はほとんど使われないため、ブロック全体としては、利用効率が低くなっているものを指す。非効率命令とは、非効率ブロックの生成要因となっている命令を指す。非効率ブロックの抽出処理2は、図2に示すように、メモリアクセス数の計測処理と非効率ブロックの判定処理に大別される。非効率命令の抽出処理3は、図4に示すように、非効率ブロックへのアクセス回数の計測処理と非効率命令の判定処理に大別される。図2及び図4の詳細は後述する。4は、出力データであり、非効率命令の一覧表と非効率命令に関する情報である。図5に具体的な出力例を示す。図5の詳細は後述する。図10は、図1に示した命令実行分析方法を実現する命令実行分析装置100の構成例を示す。命令実行分析装置100は、例えば、情報処理装置に実装されているツール命令実行分析ツールである。命令実行分析装置100において、シミュレーション部101は、バイナリコード、実行環境200を用いて、命令実行のシミュレーションを行う。より具体的には、シミュレーション部101は、CPUCentralProcessingUnitなどのプロセッサ装置を模擬し、メインメモリ装置例えば、命令実行分析装置100が実装されている情報処理装置のメインメモリ装置へのメモリアクセスを実施してバイナリコードの命令の実行をシミュレートする。メインメモリ装置は、プロセッサ装置に含まれているキャッシュメモリのキャッシュブロック数に対応させた複数のメモリブロックに区分されている。なお、シミュレーション部101は、後述する図2の203、204、206、207の処理、図4の303、304、307、308の処理を行う。非効率ブロック抽出部102は、開始指示300があった際に、図1の非効率ブロックの抽出処理2を行う。より具体的には、非効率ブロック抽出部102は、シミュレーション部101のシミュレーションにおけるメインメモリ装置へのメモリアクセスの状況を分析し、分析結果に基づいて、メインメモリ装置内の複数のメモリブロックのうち、メモリアクセスの対象がメモリブロック内の一部のデータに偏っているメモリブロックを非効率ブロックとして抽出する。非効率命令抽出部103は、図1の非効率命令の抽出処理3を行い、非効率命令の一覧表と非効率命令に関連する情報400を出力する。より具体的には、非効率命令抽出部103は、非効率ブロック抽出部102により抽出された非効率ブロックへのメモリアクセスを発生させた命令のうち所定の条件に合致する命令を非効率命令として抽出する。また、命令実行分析装置100には、図示していない表示装置が接続されており、非効率命令抽出部103は、図5のように、抽出した非効率命令と当該非効率命令のアドレスの情報を、非効率命令の一覧表と非効率命令に関連する情報400として表示装置に出力する。非効率ブロック抽出部102において、メモリアクセス計測部1021は、後述する図2の201、202、205の処理メモリアクセス数の計測処理を行う。非効率ブロック判定部1022は、後述する図2の208~212の処理非効率ブロックの判定処理を行う。非効率命令抽出部103において、非効率ブロックアクセス計測部1031は、後述する図4の301、302、305、306の処理非効率ブロックへのアクセス回数の計測処理を行う。非効率命令判定部1032は、後述する図4の309~312の処理非効率命令の判定処理を行う。図2は、図1の非効率ブロックの抽出処理2のフローを示す。201から212のステップで構成されるが、大きく2つの処理に分けることができ、前半の201から207がメモリアクセス回数の計測であり、後半の208から212が非効率ブロックの判定フローとなっている。以下では、図1に示した命令実行分析方法を、図10に示した命令実行分析装置100を用いて実行する例として説明する。前半201~207は、命令実行をシミュレータ図10のシミュレーション部101でシミュレーションし、メモリアクセス回数を計測するのが目的である。201で、メモリアクセス計測部1021が、メモリアクセスカウンタMC[Addr]をすべてのアドレスAddrについて初期化、即ちゼロクリアする。202で、メモリアクセス計測部1021が、命令ポインタIPを初期値に初期化する。即ち、IPは最初に実行する命令のアドレスを指す。203で、シミュレーション部101が、IPの指すアドレスから命令Instをフェッチしてくる。一般に1命令は、1バイトとは限らないので、命令を構成するのに必要なバイト数がInstに入る。204で、シミュレーション部101が、命令Instをシミュレーションする。シミュレーション部101は、内部に本物のプロセッサ装置と同じ内部リソース演算装置やレジスタやキャッシュメモリなどをソフトウェアで実現し、それらのリソースに中間状態を格納し、各種処理を行わせることにより、本物のプロセッサ装置と同じ状態を作り出す。205で、メモリアクセス計測部1021が、命令Instの実行に、メインメモリ装置へのメモリアクセスがある場合、該当アドレスAddrのアクセス回数を更新する。具体的にはMC[Addr]に1を加算する。206で、シミュレーション部101が、命令実行が終了したかどうかを判断する。終了の条件は実行命令数、実行サイクル数、特定命令の実行、特定のアドレスにIPが到達するなど様々な条件が考えられるが、本明細書では特定はしない。207で、シミュレーション部101が、命令ポインタIPを次の命令を指す値に更新する。実行した命令が分岐命令でなければ、新しいIPは古いIPに命令長を加算した値になる。分岐命令であれば、IPは分岐先のアドレスを指す。203から207までのループを206の終了条件が成立するまで繰り返し、206の終了条件が成立したとき、シミュレーションは終了し、メモリアクセス回数の計測が完了する。次に、後半208~212の非効率ブロックの判定処理について説明する。208で、非効率ブロック判定部1022が、ブロック番号Nを0に初期化する。209で、非効率ブロック判定部1022が、ブロック内のアクセス頻度が高いバイト数と低いバイト数を算出する。アクセス頻度の高いバイト数は配列BA_High[N]に、アクセス頻度の低いバイト数は配列BA_Low[N]に算出される。詳細は図3で説明する。210で、非効率ブロック判定部1022が、非効率ブロックか否かの判定を行う。アクセス頻度が高いバイトがあり、しかも、アクセス頻度が低いバイトが多数ある場合、非効率ブロックと判断する。具体的には、BA_High[N]≧1かつBA_High[N]≧BlockSize×JudgeRatioで表す。JudgeRatioは、判断基準を変更するパラメータであり0から1までの値を取り得るが、例えば0.5を指定すれば、全ブロックのうち半数以上のバイトが低頻度アクセスで、高頻度アクセスが1バイト以上あるときに非効率ブロックと判断することになる。非効率ブロックであれば、非効率ブロック判定部1022は、ブロックNが非効率NotEffeciencyであることを表す配列NE[N]に1をセットし、そうでなければ0をセットする。211で、非効率ブロック判定部1022は、以上の処理をすべてのブロックに対して実施したかを確認し、実施済みであれば、処理を完了し、そうでなければ、212でブロック番号Nに1を加え更新し、209のステップに戻り、209から212の処理を繰り返す。以上の処理により、すべてのブロックに対して非効率ブロックを示す配列NE[]が求められる。ここで、図3により209でのブロック内のアクセス頻度が高いバイト数と低いバイト数の算出方法を説明する。図2の209の処理は、ブロックNの配列BA_High[N]と配列BA_Low[N]を求めるのが目的である。図2の209の処理は、2091から2097の7個のステップから構成される。2091で、非効率ブロック判定部1022は、配列BA_High[N]と配列BA_Low[N]を0に初期化する。2092で、非効率ブロック判定部1022は、閾値ThHとThLを求める。閾値ThHは、高アクセス頻度か否かの判断の閾値であり、閾値ThLは、低アクセス頻度か否かの判断の閾値である。これらの閾値は、プログラムの振る舞いが明確な場合は、外部パラメータとして与えることも可能であるが、一般的には、閾値を決定するほど明確な情報を外部にもつことは困難である。従って、閾値を内部の動作結果に応じて作成することにする。具体的には、ブロックについて、平均的なメモリアクセス回数AverageMCに対して、十分に大きい値をThH、十分に小さい値をThLとする。この例では、平均メモリアクセスの4倍をThHとし、平均メモリアクセスの1/2をThLとした。AverageMCは、そのメモリブロックメモリブロックNの総メモリアクセス回数MC[Addr]の総和但し、Addr∈ブロックNをブロックのバイト数BlockSizeで除算すれば求められる。2093で、非効率ブロック判定部1022は、以下のループで使用する変数である、アドレスAddrとカウンタIを初期化する。2094で、非効率ブロック判定部1022は、バイト毎のアクセス数の閾値判定を行う。メモリアクセス回数MC[Addr]が閾値ThH以上であれば、BA_High[N]に1を加算する。メモリアクセス回数MC[Addr]が閾値ThL以下であれば、BA_Low[N]に1を加算する。2095で、非効率ブロック判定部1022は、カウンタ値Iに1を加算し更新する。2096で、非効率ブロック判定部1022は、ループの終了判定を行う。即ち、カウンタIがブロックのバイト数BlockSizeと等しくなれば、本処理を終了する。そうでなければ、非効率ブロック判定部1022は、2097で、アドレスAddrに1を加算し、2094に戻り、終了条件が成立するまで2094~2097の処理を繰り返す。上記のループが終了したとき、配列BA_High[N]と配列BA_Low[N]には、それぞれ、高アクセス頻度と低アクセス頻度のバイト数が入力されている。図4は、図1の非効率命令の抽出処理3のフローを示す。301から312のステップで構成されるが、大きく2つの処理に分けることができ、前半の301から308が非効率ブロックへのアクセス回数の計測であり、後半の309から312が非効率命令の判定フローとなっている。前半301~308は、命令実行をシミュレータ図10のシミュレーション部101でシミュレーションし、非効率ブロックへのアクセス回数を計測するのが目的である。301で、非効率ブロックアクセス計測部1031が、命令毎の非効率アクセスカウンタMC_InstAC[IP]をすべての命令ポインタIPについて初期化、即ちゼロクリアする。302で、非効率ブロックアクセス計測部1031が、命令ポインタIPを初期値に初期化する。即ち、IPは最初に実行する命令のアドレスを指す。303で、シミュレーション部101が、IPの指すアドレスから命令Instをフェッチしてくる。304で、シミュレーション部101が、命令Instを内部のシミュレータでシミュレーションする。305で、非効率ブロックアクセス計測部1031が、命令Instの実行に、メインメモリ装置へのメモリアクセスがある場合、該当アドレスAddrが非効率ブロックか否かを検索する。具体的には、Addr/BlockSizeの商整数値がブロック番号Nになるので、非効率ブロック抽出で求めた配列NE[N]を読むことで非効率ブロックかどうかが分かる。NE[N]=1のとき、非効率ブロックなので変数NoEffeciency=1にセットし、NE[N]=0のときは、非効率ブロックでないので変数NoEffeciency=0にセットする。306で、非効率ブロックアクセス計測部1031が、非効率ブロックのアクセスなら命令毎の非効率アクセスカウンタNE_InstAC[IP]に1を加えて更新する。307で、シミュレーション部101が、命令実行が終了したかどうかを判断する。終了の条件は実行命令数、実行サイクル数、特定命令の実行、特定のアドレスにIPが到達するなど様々な条件が考えられるが、本明細書では特定はしない。308で、シミュレーション部101が、命令ポインタIPを次の命令を指す値に更新する。実行した命令が分岐命令でなければ、新しいIPは古いIPに命令長を加算した値になる。分岐命令であれば、IPは分岐先のアドレスを指す。303から308までのループを307の終了条件が成立するまで繰り返す。307の終了条件が成立したとき、シミュレーションは終了し、メモリアクセス回数の計測が完了する。次に後半309~312の非効率ブロックの判定処理について説明する。309で、非効率命令判定部1032が、命令の格納アドレスの最小値をAddrにセットする。この値はシステム依存であるが、本実施の形態では0をセットしている。310で、非効率命令判定部1032が、非効率命令の判定を行う。命令毎の非効率アクセスカウンタNE_InstAC[Addr]が閾値Th_NE_Inst以上であれば、非効率命令と判断し、結果を表す配列NE_Inst[Addr]に1をセットし、非効率命令でなければ0をセットする。閾値Th_NE_Instは、目的に応じてシステムの外部から与える。すべての非効率ブロックアクセスしている命令が知りたければ、Th_NE_Inst=1を与え、もっと絞り込んだ情報が知りたければ、Th_NE_Instに大きな値を与える。311で、非効率命令判定部1032が、ループの終了を判定する。すなわち、命令の格納アドレスの最大値に到達したか否かを調べ、到達していれば、この処理が終了する。そうでなければ、312で命令の格納アドレスに1加えて更新して、310に戻り、310~312の処理を繰り返す。上記の処理が終了すると、非効率命令か否かを表す配列NE_Inst[]と、その命令が非効率ブロックにアクセスした回数を表す配列NE_Inst_AC[]が求められる。図5に出力例を示す。NE_Inst[Addr]=1となるAddrについて、アドレスAddr、命令Inst=Mem[Addr]、非効率ブロックへのアクセス回数Ne_Inst_AC[Addr]を表示した例である。このように、本実施の形態では、シミュレーションにおいてメモリアクセスの対象がメモリブロック内の一部のデータに偏っているメモリブロックを非効率ブロックとして抽出するとともに、非効率ブロックへのメモリアクセスを発生させた命令を非効率命令として抽出する。そして、図5に例示するように、抽出した非効率命令を、当該非効率命令のアドレスとともに表示するため、キャッシュメモリの同一ブロックにアクセス頻度の高いデータと低いデータが混在することを防止し、キャッシュメモリの利用効率を向上させることができる。以上、本実施の形態では、以下の手段を備えた命令実行分析装置を説明した。a特定のプロセッサに対応したプログラムのバイナリコードと実行環境を入力する手段、実行環境とは、初期データや実行中に外部要因により変化するデータを指す。bプロセッサの命令の実行を模擬する手段、このプロセッサは、メモリをアクセスするとき、実行時間の短縮のためキャッシュメモリを有することを前提とする。c命令のメモリアクセスにおける非効率ブロックの抽出手段、非効率ブロックとは、ひとつのキャッシュブロックに対して、一部のデータのみ頻繁に使われ、他の部分はほとんど使われないため、ブロック全体としては、利用効率が低くなっているものを指す。d非効率命令の抽出手段、非効率命令とは、前記非効率ブロックの生成要因となっている命令を指す。また、本実施の形態では、非効率ブロックの抽出手段の実現方法として、aプロセッサの命令の実行を模擬する手段、bメモリアクセス回数を計測する手段、cブロック内のバイトに対して、高頻度のアクセスの個数を計測する手段、dブロック内のバイトに対して、低頻度のアクセスの個数を計測する手段、e該当ブロックが非効率化か否かを、高頻度アクセスのバイト数と低頻度アクセスのバイト数を用いて判断する手段を説明した。また、本実施の形態では、以下の手段を備えた命令実行分析装置を説明した。a高頻度アクセスか否かを判定するための閾値を算出する手段、b低頻度アクセスか否かを判定するための閾値を算出する手段。また、本実施の形態では、非効率命令の抽出手段の実現方法として、aプロセッサの命令の実行を模擬する手段、b命令毎の非効率ブロックへのアクセス回数を計測する手段、cすべての命令に対し、非効率ブロックへのアクセス回数と閾値を比較する手段を説明した。実施の形態2.次に、実施の形態1で示した命令実行分析方法をさらに有効に活用する手法を説明する。ユーザが実際に実施の形態1に係る命令実行分析方法を活用する場合、図5のような形式より、ソースプログラムに直接指示やヒントが書かれることが望ましい。例えば図6のようなソースプログラムを考える。このプログラムは、C言語の文法で、本実施の形態に関係があるところのみを記載している。図6において、1行目でプログラム名を定義し、2行目で変数と配列を定義している。配列はa、b、cと3つあり、要素数はいずれも10000である。3行目から6行目まで制御変数iでループを構成し、配列aに配列bと配列cを加算し代入している。このとき、4行目に示すように、配列bのインデックスjは、変数iの一の位を切り落とし10の倍数のみを取るようになっている。従って、配列bは要素毎にアクセス数が異なり、非効率ブロックとなっている。一方、配列aと配列cは、効率的なブロックである。図7は、非効率命令のマーキング付きソースプログラムの例である。図6のプログラムに対して、6行目に/配列b[j]の参照が非効率です/というメッセージが挿入されている。このようなメッセージがあるとユーザは、5行目の式のb[j]のメモリ参照が非効率であり、この配列を改善すればよいことが分かる。例えば、配列bを必要最小限の配列b[1000]として定義し、j=inti/10とすれば、配列b[j]の利用効率が上がることは容易に想像できる。一般に、このようにデータサイズを小さくすると、キャッシュメモリの利用効率が向上し、システムの性能が向上する。図8では、上記のようなことを実現するためのフローを説明する。図において、11はソースプログラムで、例えば図6のようなものである。12はコンパイラとリンカである。13はバイナリコードである。14はリンカの出力の一つで、ソースプログラムとバイナリコードの対応をつける表以降、対応表と呼ぶで、例えば図9のようなものである。15は実行環境である。2は非効率ブロックの抽出処理である。3は、非効率命令の抽出処理である。4は非効率命令の一覧である。5は非効率命令をソースプログラムへひもづけする処理である。6は非効率命令のマーキング付きソースプログラムで、例えば図7のようなものである。図11は、本実施の形態に係る命令実行分析装置100の構成例を示す。図11において、図10と同じ符号の要素は図10と同じであり、説明を省略する。ソースプログラム加工部104は、図8の非効率命令のソースプログラムへのひもづけ処理5を実施して、図7に示すようなメッセージをソースプログラムに挿入する。つまり、ソースプログラム加工部104は、シミュレーションの対象となる命令が記述されるバイナリコードのソースプログラム600内で非効率命令が記述されている位置を非効率命令記述位置として特定し、非効率命令記述位置に、当該非効率命令記述位置に記述されている命令が非効率命令であることを通知するメッセージを挿入する。ソースプログラムとバイナリコードの対応表500は、図8のソースプログラムとバイナリコードの対応表14に相当し、例えば、図9に示すものである。ソースプログラム600は、図8のソースプログラム11に対応する。非効率命令のマーキング付きソースプログラム700は、図8の非効率命令のマーキング付きソースプログラム6に対応し、例えば図7に示すものである。以下、図8及び図11を参照して、本実施の形態に係る処理を説明する。11のソースプログラムを12のコンパイラとリンカで処理すると、実行可能なバイナリコード13と対応表14が生成される。バイナリコード13と実行環境15を非効率ブロックの抽出処理2非効率ブロック抽出部10に入力すると、実施の形態1で説明したように非効率ブロックの一覧が出力される。非効率命令の抽出処理3非効率命令抽出部103に非効率ブロックの一覧を入力すると実施の形態1で説明したように、非効率命令一覧4が出力される。非効率命令一覧4と対応表14を非効率命令のソースプログラムへのひもづけ処理5ソースプログラム加工部104に入力することで、非効率命令のマーキング付きソースプログラム6、即ち、図7のようなソースプログラムが出力される。対応表14は、具体的には図9のようなもので、ソースプログラムの行番号、それに対応する命令のアドレスと命令と命令がアクセスする変数などの情報が記載されている。ソースプログラム加工部104は、非効率命令一覧図5に掲載されている命令アドレスを対応表図9で見つけ、その行番号と変数名を検索することで、ソースプログラムの修正行番号と非効率命令でアクセスされている変数が見つけられる。この例では、図5の表の1行目に命令アドレス=1000Hがあるので、図9の対応表で命令アドレス=1000Hを探し、そのときのソースプログラム行番号は5行目で、変数名は配列b[j]であることが分かる。この情報をもとに、ソースプログラム加工部104は、非効率命令記述位置である図6の5行目のあとにメッセージを挿入すると図7を生成することができる。このように、本実施の形態によれば、ユーザに対して、キャッシュメモリの利用効率を改善するための修正箇所をソースプログラムにおいて提示することができる。以上、本実施の形態では、実施の形態1の構成に加えて、以下の手段を備えた命令実行分析装置を説明した。aソースプログラムとバイナリコードの対応表リンカの出力により、非効率命令とソースプログラムのひもづけをする手段、b非効率命令にひもづけされたソースプログラムの変数名にマーキングをする手段。最後に、実施の形態1及び2に示した命令実行分析装置100を実現するためのハードウェア構成例について説明する。図12は、実施の形態1及び2に示す命令実行分析装置100を実現するためのハードウェア資源の一例を示す図である。なお、図12の構成は、あくまでもハードウェア構成の一例を示すものであり、命令実行分析装置100は図12に記載の構成に限らず、他の構成によって実現されてもよい。図12において、命令実行分析装置100は、プログラムを実行するCPU911CentralProcessingUnit、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、プロセッサともいうを備えている。CPU911は、バス912を介して、例えば、ROMReadOnlyMemory913、RAMRandomAccessMemory914、通信ボード915、表示装置901、キーボード902、マウス903、磁気ディスク装置920と接続され、これらのハードウェアデバイスを制御する。更に、CPU911は、FDD904FlexibleDiskDrive、コンパクトディスク装置905CDD、プリンタ装置906、スキャナ装置907と接続していてもよい。また、磁気ディスク装置920の代わりに、SSDSolidStateDrive、光ディスク装置、メモリカード登録商標読み書き装置などの記憶装置でもよい。RAM914は、揮発性メモリの一例である。ROM913、FDD904、CDD905、磁気ディスク装置920の記憶媒体は、不揮発性メモリの一例である。これらは、記憶装置の一例である。通信ボード915、キーボード902、マウス903、スキャナ装置907、FDD904などは、入力装置の一例である。また、通信ボード915、表示装置901、プリンタ装置906などは、出力装置の一例である。通信ボード915は、ネットワークに接続されている。例えば、通信ボード915は、LANローカルエリアネットワーク、インターネット、WANワイドエリアネットワーク、SANストレージエリアネットワークなどに接続されている。磁気ディスク装置920には、オペレーティングシステム921OS、ウィンドウシステム922、プログラム群923、ファイル群924が記憶されている。プログラム群923のプログラムは、CPU911がオペレーティングシステム921、ウィンドウシステム922を利用しながら実行する。また、RAM914には、CPU911に実行させるオペレーティングシステム921のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、RAM914には、CPU911による処理に必要な各種データが格納される。また、ROM913には、BIOSBasicInputOutputSystemプログラムが格納され、磁気ディスク装置920にはブートプログラムが格納されている。命令実行分析装置100の起動時には、ROM913のBIOSプログラム及び磁気ディスク装置920のブートプログラムが実行され、BIOSプログラム及びブートプログラムによりオペレーティングシステム921が起動される。上記プログラム群923には、実施の形態1及び2の説明において~部、~手段として説明している機能を実行するプログラムが記憶されている。プログラムは、CPU911により読み出され実行される。ファイル群924には、実施の形態1及び2の説明において、~の判定、~のシミュレーション、~の算出、~の検索、~の計測、~の更新、~の設定、~の加工、~の挿入、~の選択、~の入力、~の出力等として説明している処理の結果を示す情報やデータや信号値や変数値やパラメータが、~ファイルや~データベースの各項目として記憶されている。~ファイルや~データベースは、ディスクやメモリなどの記録媒体に記憶される。ディスクやメモリなどの記憶媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してCPU911によりメインメモリやキャッシュメモリに読み出される。そして、読み出された情報やデータや信号値や変数値やパラメータは、抽出検索参照比較演算計算処理編集出力印刷表示などのCPUの動作に用いられる。抽出検索参照比較演算計算処理編集出力印刷表示のCPUの動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリ、レジスタ、キャッシュメモリ、バッファメモリ等に一時的に記憶される。また、実施の形態1及び2で説明しているフローチャートの矢印の部分は主としてデータや信号の入出力を示す。データや信号値は、RAM914のメモリ、FDD904のフレキシブルディスク、CDD905のコンパクトディスク、磁気ディスク装置920の磁気ディスク、その他光ディスク、ミニディスク、DVD等の記録媒体に記録される。また、データや信号は、バス912や信号線やケーブルその他の伝送媒体によりオンライン伝送される。また、実施の形態1及び2の説明において~部、~手段として説明しているものは、~回路、~装置、~機器であってもよく、また、~ステップ、~手順、~処理であってもよい。すなわち、実施の形態1及び2で説明したフローチャートに示すステップ、手順、処理により、本発明に係る命令実行分析方法を実現することができる。また、~部、~手段として説明しているものは、ROM913に記憶されたファームウェアで実現されていても構わない。或いは、ソフトウェアのみ、或いは、素子デバイス基板配線などのハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。ファームウェアとソフトウェアは、プログラムとして、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、DVD等の記録媒体に記憶される。プログラムはCPU911により読み出され、CPU911により実行される。すなわち、プログラムは、実施の形態1及び2の~部、~手段としてコンピュータを機能させるものである。あるいは、実施の形態1及び2の~部、~手段の手順や方法をコンピュータに実行させるものである。このように、実施の形態1及び2に示す命令実行分析装置100は、処理装置たるCPU、記憶装置たるメモリ、磁気ディスク等、入力装置たるキーボード、マウス、通信ボード等、出力装置たる表示装置、通信ボード等を備えるコンピュータにより実現される。そして、上記したように~部、~手段として示された機能をこれら処理装置、記憶装置、入力装置、出力装置を用いて実現するものである。"