JP5597584B2 - 命令実行分析装置及び命令実行分析方法及びプログラム - Google Patents

命令実行分析装置及び命令実行分析方法及びプログラム Download PDF

Info

Publication number
JP5597584B2
JP5597584B2 JP2011072473A JP2011072473A JP5597584B2 JP 5597584 B2 JP5597584 B2 JP 5597584B2 JP 2011072473 A JP2011072473 A JP 2011072473A JP 2011072473 A JP2011072473 A JP 2011072473A JP 5597584 B2 JP5597584 B2 JP 5597584B2
Authority
JP
Japan
Prior art keywords
instruction
inefficient
block
memory
access
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2011072473A
Other languages
English (en)
Other versions
JP2012208615A (ja
Inventor
敏久 亀丸
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Priority to JP2011072473A priority Critical patent/JP5597584B2/ja
Publication of JP2012208615A publication Critical patent/JP2012208615A/ja
Application granted granted Critical
Publication of JP5597584B2 publication Critical patent/JP5597584B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Description

本発明は、キャッシュメモリの利用効率を向上させる技術に関する。
情報処理装置は、プロセッサ装置、メインメモリ装置、入出力装置から構成され、特に実行性能が要求される装置については、高い周波数で動作し、キャッシュメモリを有するプロセッサ装置を活用する。
このとき、キャッシュメモリのヒット率が性能に影響する。
一般に、ヒット率は95%以上、高速なものは99%近いヒット率を実現する。
言いかえれば、キャッシュメモリのヒット率が数%低下するだけで、システム全体の性能が大幅に低下することは珍しいことではない。
そのため、例えば、特許文献1のように、ヒット率を中心とするキャッシュメモリの挙動情報を収集し、チューニングを行うことが提案されている。
特許文献1に記載の方式は、命令を模擬するシミュレータを有し、命令をシミュレーションするとともにキャッシュメモリもシミュレーションする。
特許文献1に記載の方式によれば、大規模な配列をもつプログラムに対して、配列の要素ごとにアクセス回数やキャッシュミス回数(アクセス回数−ヒット回数)を表示することができる。
また、特許文献1に記載の方式は、アクセス回数とキャッシュミス回数の多い行を検出して、キャッシュを有効に使用するようソースプログラムを改善する。
つまり、キャッシュミスの大きい配列は、遅延が大きいのでコンパイラによりその間に別の命令を実行するようにコード生成させる。
特開平08−263372号公報
しかし、特許文献1の手法で得られる情報は、プログラムのデータ配列のアクセス回数とミス回数であり、キャッシュ全体に対してどういう影響を与えているかが不明である。
例えば、キャッシュミス回数=0と表示されれば、キャッシュとしては有効に機能しているように見えるが、同一のキャッシュブロックにのっている、ある要素だけがアクセス回数=10,000回、ミス回数=1回で、他の要素はアクセス回数=1回、ミス回数=0回である場合、キャッシュは有効に使われているとはいえない。
アクセス回数=1回の要素は利用頻度が低いため、本来はキャッシュメモリに乗らなくても影響がない。
むしろ、利用頻度が高い別の配列の別のデータがそのキャッシュメモリを使うのが効率的といえる。
いいかえると、このような配列があると、他の配列のキャッシュミス回数を増やしていることが想像される。
すなわち、キャッシュミスも少なく効率的にアクセスしている配列の要素が、他の配列に対して悪影響を及ぼしていることがあるが、特許文献1の方式では、そのような原因に遡ることは容易にはできない。
キャッシュメモリを有効に使う一つのテクニックとしては、キャッシュのブロックには、アクセス回数が高いものだけを固めてのせ、アクセス回数が低いものも固めておき、キャッシュのブロックには乗らないようにしておくことが必要である。
アクセス頻度が高いものと低いものが混在することがキャッシュ利用効率の低下の要因の一つである。
特に、近年の高性能プロセッサは、キャッシュ容量の大規模化に伴い、キャッシュブロックのサイズが大きくなる傾向にあるため、このような傾向がだんだん顕著になってきた。
また、特許文献1の方式では、このような原因がプログラムのどの部分に起因して発生したのかが容易にはわからないので、効率的なプログラム修正が困難である。
この発明は、上記のような課題を解決することを主な目的の一つとしており、キャッシュメモリの同一ブロックにアクセス頻度の高いデータと低いデータが混在することを防止し、キャッシュメモリの利用効率を向上させることを主な目的とする。
本発明に係る命令実行分析装置は、
メインメモリ装置へのメモリアクセスが実施されて命令が実行されるシミュレーションにおける前記メインメモリ装置へのメモリアクセスの状況を分析し、分析結果に基づいて、前記メインメモリ装置内の複数のメモリブロックのうち、メモリアクセスの対象がメモリブロック内の一部のデータに偏っているメモリブロックを非効率ブロックとして抽出する非効率ブロック抽出部と、
前記非効率ブロック抽出部により抽出された非効率ブロックへのメモリアクセスを発生させた命令のうち所定の条件に合致する命令を非効率命令として抽出する非効率命令抽出部とを有することを特徴とする。
本発明によれば、シミュレーションにおいてメモリアクセスの対象がメモリブロック内の一部のデータに偏っているメモリブロックを非効率ブロックとして抽出するとともに、非効率ブロックへのメモリアクセスを発生させた命令を非効率命令として抽出するため、キャッシュメモリの同一ブロックにアクセス頻度の高いデータと低いデータが混在することを防止し、キャッシュメモリの利用効率を向上させることができる。
実施の形態1に係る処理手順を示すフローチャート図。 実施の形態1に係る非効率ブロックの抽出処理を示すフローチャート図。 実施の形態1に係る高アクセス頻度と低アクセス頻度のバイト数の算出処理を示すフローチャート図。 実施の形態1に係る非効率命令の抽出処理を示すフローチャート図。 実施の形態1に係る非効率ブロック及び非効率命令の出力例を示す図。 実施の形態2に係るソースプログラムの例を示す図。 実施の形態2に係るメッセージが挿入されたソースプログラムの例を示す図。 実施の形態2に係る処理手順を示すフローチャート図。 実施の形態2に係るソースプログラムとバイナリコードの対応表の例を示す図。 実施の形態1に係る命令実行分析装置の構成例を示す図。 実施の形態2に係る命令実行分析装置の構成例を示す図。 実施の形態1及び2に係る命令実行分析装置のハードウェア構成例を示す図。
実施の形態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は、CPU(Central Processing Unit)などのプロセッサ装置を模擬し、メインメモリ装置(例えば、命令実行分析装置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が非効率(Not Effeciency)であることを表す配列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=int(i/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は、プログラムを実行するCPU911(Central Processing Unit、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、プロセッサともいう)を備えている。
CPU911は、バス912を介して、例えば、ROM(Read Only Memory)913、RAM(Random Access Memory)914、通信ボード915、表示装置901、キーボード902、マウス903、磁気ディスク装置920と接続され、これらのハードウェアデバイスを制御する。
更に、CPU911は、FDD904(Flexible Disk Drive)、コンパクトディスク装置905(CDD)、プリンタ装置906、スキャナ装置907と接続していてもよい。また、磁気ディスク装置920の代わりに、SSD(Solid State Drive)、光ディスク装置、メモリカード(登録商標)読み書き装置などの記憶装置でもよい。
RAM914は、揮発性メモリの一例である。ROM913、FDD904、CDD905、磁気ディスク装置920の記憶媒体は、不揮発性メモリの一例である。これらは、記憶装置の一例である。
通信ボード915、キーボード902、マウス903、スキャナ装置907、FDD904などは、入力装置の一例である。
また、通信ボード915、表示装置901、プリンタ装置906などは、出力装置の一例である。
通信ボード915は、ネットワークに接続されている。
例えば、通信ボード915は、LAN(ローカルエリアネットワーク)、インターネット、WAN(ワイドエリアネットワーク)、SAN(ストレージエリアネットワーク)などに接続されている。
磁気ディスク装置920には、オペレーティングシステム921(OS)、ウィンドウシステム922、プログラム群923、ファイル群924が記憶されている。
プログラム群923のプログラムは、CPU911がオペレーティングシステム921、ウィンドウシステム922を利用しながら実行する。
また、RAM914には、CPU911に実行させるオペレーティングシステム921のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。
また、RAM914には、CPU911による処理に必要な各種データが格納される。
また、ROM913には、BIOS(Basic Input Output System)プログラムが格納され、磁気ディスク装置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、記憶装置たるメモリ、磁気ディスク等、入力装置たるキーボード、マウス、通信ボード等、出力装置たる表示装置、通信ボード等を備えるコンピュータにより実現される。
そして、上記したように「〜部」、「〜手段」として示された機能をこれら処理装置、記憶装置、入力装置、出力装置を用いて実現するものである。
100 命令実行分析装置、101 シミュレーション部、102 非効率ブロック抽出部、103 非効率命令抽出部、104 ソースプログラム加工部、1021 メモリアクセス計測部、1022 非効率ブロック判定部、1031 非効率ブロックアクセス計測部、1032 非効率命令判定部。

Claims (9)

  1. 所定のキャッシュメモリのキャッシュブロック数に対応させた複数のメモリブロックに区分されているメインメモリ装置へのメモリアクセスが実施されて命令が実行されるシミュレーションにおける前記メインメモリ装置へのメモリアクセスの状況を分析し、分析結果に基づいて、前記メインメモリ装置内の複数のメモリブロックのうち、メモリアクセスの対象がメモリブロック内の一部のデータに偏っているメモリブロックを非効率ブロックとして抽出する非効率ブロック抽出部と、
    前記非効率ブロック抽出部により抽出された非効率ブロックへのメモリアクセスを発生させた命令のうち所定の条件に合致する命令を非効率命令として抽出する非効率命令抽出部とを有することを特徴とする命令実行分析装置。
  2. 前記命令実行分析装置は、表示装置に接続されており、
    前記非効率命令抽出部は、
    抽出した非効率命令を、当該非効率命令のアドレスとともに前記表示装置に出力することを特徴とする請求項1に記載の命令実行分析装置。
  3. 前記非効率ブロック抽出部は、
    メモリブロックごとに、メモリブロック内のデータのうち、前記シミュレーションの際のアクセス頻度が高い高アクセスデータとアクセス頻度が低い低アクセスデータとを抽出し、
    各メモリブロックの高アクセスデータの数と低アクセスデータの数に基づいて、非効率ブロックを抽出することを特徴とする請求項1又は2に記載の命令実行分析装置。
  4. 前記非効率ブロック抽出部は、
    前記シミュレーションの際の前記複数のメモリブロックにおける平均メモリアクセス回数に基づいて、高アクセスデータを抽出するための抽出基準と、低アクセスデータを抽出するための抽出基準とを導出することを特徴とする請求項に記載の命令実行分析装置。
  5. 前記非効率命令抽出部は、
    メインメモリ装置へのメモリアクセスが実施されて命令が実行されるシミュレーションにおける前記メインメモリ装置へのメモリアクセスの状況を分析し、分析結果に基づいて、前記非効率ブロックへのメモリアクセスを発生させた命令を特定し、特定した命令のうち、前記非効率ブロックへのメモリアクセスを所定回数以上発生させた命令を非効率命令として抽出することを特徴とする請求項1〜のいずれかに記載の命令実行分析装置。
  6. 前記命令実行分析装置は、更に、
    前記シミュレーションで実行される命令が記述されるバイナリコードのソースプログラム内で、前記非効率命令抽出部により抽出された非効率命令が記述されている位置を非効率命令記述位置として特定し、前記ソースプログラム内の非効率命令記述位置に、当該非効率命令記述位置に記述されている命令が非効率命令であることを通知する通知メッセージを挿入するソースプログラム加工部を有することを特徴とする請求項1〜のいずれかに記載の命令実行分析装置。
  7. 前記ソースプログラム加工部は、
    前記ソースプログラム内の非効率命令記述位置に記述されている命令に含まれている変数の設定が非効率であることを通知する通知メッセージを、前記ソースプログラム内の非効率命令記述位置に挿入することを特徴とする請求項に記載の命令実行分析装置。
  8. コンピュータが、
    所定のキャッシュメモリのキャッシュブロック数に対応させた複数のメモリブロックに区分されているメインメモリ装置へのメモリアクセスが実施されて命令が実行されるシミュレーションにおける前記メインメモリ装置へのメモリアクセスの状況を分析し、分析結果に基づいて、前記メインメモリ装置内の複数のメモリブロックのうち、メモリアクセスの対象がメモリブロック内の一部のデータに偏っているメモリブロックを非効率ブロックとして抽出する非効率ブロック抽出ステップと、
    前記コンピュータが、
    前記非効率ブロック抽出ステップにより抽出された非効率ブロックへのメモリアクセスを発生させた命令のうち所定の条件に合致する命令を非効率命令として抽出する非効率命令抽出ステップとを有することを特徴とする命令実行分析方法。
  9. 所定のキャッシュメモリのキャッシュブロック数に対応させた複数のメモリブロックに区分されているメインメモリ装置へのメモリアクセスが実施されて命令が実行されるシミュレーションにおける前記メインメモリ装置へのメモリアクセスの状況を分析し、分析結果に基づいて、前記メインメモリ装置内の複数のメモリブロックのうち、メモリアクセスの対象がメモリブロック内の一部のデータに偏っているメモリブロックを非効率ブロックとして抽出する非効率ブロック抽出ステップと、
    前記非効率ブロック抽出ステップにより抽出された非効率ブロックへのメモリアクセスを発生させた命令のうち所定の条件に合致する命令を非効率命令として抽出する非効率命令抽出ステップとをコンピュータに実行させることを特徴とするプログラム。
JP2011072473A 2011-03-29 2011-03-29 命令実行分析装置及び命令実行分析方法及びプログラム Expired - Fee Related JP5597584B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2011072473A JP5597584B2 (ja) 2011-03-29 2011-03-29 命令実行分析装置及び命令実行分析方法及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2011072473A JP5597584B2 (ja) 2011-03-29 2011-03-29 命令実行分析装置及び命令実行分析方法及びプログラム

Publications (2)

Publication Number Publication Date
JP2012208615A JP2012208615A (ja) 2012-10-25
JP5597584B2 true JP5597584B2 (ja) 2014-10-01

Family

ID=47188317

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011072473A Expired - Fee Related JP5597584B2 (ja) 2011-03-29 2011-03-29 命令実行分析装置及び命令実行分析方法及びプログラム

Country Status (1)

Country Link
JP (1) JP5597584B2 (ja)

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH01173135A (ja) * 1987-12-26 1989-07-07 Fujitsu Ltd ソースコンバータによる変換処理方式
JPH08263372A (ja) * 1995-03-28 1996-10-11 Hitachi Ltd キャッシュミス情報の収集とチューニングを行う装置
JP4199519B2 (ja) * 2002-11-05 2008-12-17 パナソニック株式会社 メモリ管理装置及びメモリ管理方法
JP4047788B2 (ja) * 2003-10-16 2008-02-13 松下電器産業株式会社 コンパイラ装置およびリンカ装置
JP2007018254A (ja) * 2005-07-07 2007-01-25 Toshiba Corp 言語処理装置
US7707379B2 (en) * 2006-07-13 2010-04-27 International Business Machines Corporation Dynamic latency map for memory optimization

Also Published As

Publication number Publication date
JP2012208615A (ja) 2012-10-25

Similar Documents

Publication Publication Date Title
US7752414B2 (en) Splash tables: an efficient hash scheme for processors
CN107239392B (zh) 一种测试方法、装置、终端及存储介质
US20110307688A1 (en) Synthesis system for pipelined digital circuits
US11636122B2 (en) Method and apparatus for data mining from core traces
US10437949B1 (en) Scheduling events in hardware design language simulation
CN113868068B (zh) 一种内核性能测试方法、计算设备及存储介质
US10380313B1 (en) Implementation and evaluation of designs for heterogeneous computing platforms with hardware acceleration
US8612952B2 (en) Performance optimization based on data accesses during critical sections
JP6234639B2 (ja) シミュレーション装置及びシミュレーション方法及びシミュレーションプログラム
US11055458B1 (en) Functional coverage of designs using transition bins and cross coverage
JP6471615B2 (ja) 性能情報生成プログラム、性能情報生成方法及び情報処理装置
JP5597584B2 (ja) 命令実行分析装置及び命令実行分析方法及びプログラム
CN105447213A (zh) 用于对电路设计进行仿真的方法和装置
US8756580B2 (en) Instance-based field affinity optimization
CN116149917A (zh) 评估处理器性能的方法及装置、计算设备、可读存储介质
US7707560B2 (en) Analyzing software performance without requiring hardware
US10740521B1 (en) System and method for localized logic simulation replay using emulated values
Zielasko et al. Virtual Prototype Driven Application Specific Hardware Optimization
JP6234640B2 (ja) シミュレーション装置及びシミュレーション方法及びシミュレーションプログラム
JPH05158740A (ja) 計算機性能評価装置
JP3214459B2 (ja) シミュレーション方法及び装置
CN115543719B (zh) 基于芯片设计的组件优化方法、装置、计算机设备及介质
WO2018163387A1 (ja) 解析装置、解析方法及び解析プログラム
CN104462368A (zh) 数据计算方法、装置和服务器
US7917739B2 (en) Storage medium storing calculation processing visualization program, calculation processing visualization apparatus, and calculation processing visualization method

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20131114

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140430

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140513

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140602

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20140715

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140811

R150 Certificate of patent or registration of utility model

Ref document number: 5597584

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees