説明

シミュレーション装置及びプログラム

【課題】プロセッサの性能シミュレーションを行うシミュレーション装置へのトレースデータの入力に係るボトルネックを改善する。
【解決手段】トレースデータにおけるアドレスをアドレステーブルに従ってインデックス化することによって圧縮された圧縮トレースデータを入力し、トレース復元部がアドレステーブルを参照して圧縮トレースデータからトレースデータを復元し、復元したトレースデータを用いて性能シミュレータがプロセッサの性能シミュレーションを実行するようにして、トレースデータにおけるアドレスのデータ削減によりシミュレーション装置に入力するデータ量を削減し、トレースデータの入力に係るボトルネックを改善する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プロセッサの性能シミュレーション技術に関する。
【背景技術】
【0002】
プロセッサのアーキテクチャを検討する際にプロセッサの性能シミュレーションが行われている。図18に示すように、プロセッサの性能シミュレーションでは、アーキテクチャ設定情報101及びトレースデータ102を性能シミュレータ103に入力する。アーキテクチャ設定情報101は、例えばプロセッサのキャッシュサイズやキャッシュプロトコルを含む。また、トレースデータ102は、予め実機(実プロセッサ)や命令セットシミュレータ(ISS)でプログラムを実行して取得した命令列(命令トレース)であり、プログラムカウンタ値(PC)及び命令(さらに、命令によってアドレス、データ)を有する。
【0003】
性能シミュレータ103は、入力されたアーキテクチャ設定情報101及びトレースデータ102を用いて、実際には命令を実行せずにパイプラインやキャッシュやメモリアクセス等のタイミングのみについてシミュレーションを行う。そして、性能シミュレータ103は、シミュレーション結果として、CPI(Cycles Per Instruction)、キャッシュヒット率等の性能指標値を含む性能情報レポート104を出力する。プロセッサのアーキテクチャを検討する際には、アーキテクチャ設定情報101(例えばキャッシュサイズやメモリレイテンシ等のパラメータ)を変更しながら繰り返しシミュレーションを実行して性能の見積もりを行い、最適なパラメータを決定する。
【0004】
従来、プロセッサの性能シミュレーションは、ソフトウェアによる性能シミュレータで行われていた。しかし、ソフトウェアによる性能シミュレータは、基本的には逐次実行であるので、近年のプロセッサの複雑化やマルチコア化のために十分な実行速度を確保できない場合が多くなってきている。プロセッサのアーキテクチャを検討する際には、パラメータの変更を行って多数のパラメータで性能シミュレーションを実行するために、実行速度の低下により、適切なパラメータを決定するためのアーキテクチャ探索に時間がかかる。
【0005】
前述のような実行速度の低下を改善する方法としては、例えば性能シミュレータをFPGA等の再構成可能なハードウェアによって実現する方法がある。性能シミュレータをハードウェア化することで、処理の並列化が可能となりシミュレーションの実行速度を大幅に向上させることが可能になる。つまり、性能シミュレータをハードウェア化することで、高速なシミュレーションが可能となる。
【0006】
下記特許文献1には、トレースデータのエクスポートに関し、トレース・アドレスと比較アドレスとをバイト単位で比較して、不一致が検出されたバイトを含む下位側のバイトをエクスポートすることで、トレース圧縮を行う技術が開示されています。下記特許文献2には、データトレース情報を収集する際、アドレス情報の上位ビットが比較アドレスレジスタに記憶された値と一致する場合には、その上位アドレスの識別子を出力することで、アドレス情報を圧縮する技術が開示されています。
【先行技術文献】
【特許文献】
【0007】
【特許文献1】特開2004−178591号公報
【特許文献2】特許第3609794号公報
【発明の概要】
【発明が解決しようとする課題】
【0008】
性能シミュレータをハードウェア化した場合には、シミュレーションの実行部分の高速化に伴って、性能シミュレータへのトレースデータの入力も高速に行う必要がある。ここで、一般的な32bitアーキテクチャのプロセッサでのトレースデータのサイズは、128bit(PC:32bit、命令:32bit、アドレス:32bit、データ:32bit)である。性能シミュレータが100MHzで動作した場合、無駄なく性能シミュレータでのシミュレーションを実行するには、トレースデータの入力に16Byte(=128bit)×100MHz=1.6GByte/secの帯域が必要になる。性能シミュレータへトレースデータを入力するためのポートとして、例えばPCI Express x1(1レーン構成のPCI Expressポート)を用いると、そのデータ転送に係る帯域は理論最大値で200MByte/sec(実際には100MByte/sec以下)であるので、転送帯域が不足することになる。つまり、性能シミュレータをハードウェア化することでシミュレーションの実行部分は高速化されるが、トレースデータの入力がボトルネックとなって、性能シミュレーション全体としての高速化を十分には図ることができない。
【課題を解決するための手段】
【0009】
本発明の一観点によれば、入力される圧縮トレースデータからトレースデータを復元する復元部と、復元されたトレースデータを用いてプロセッサの性能シミュレーションを実行するシミュレータ部とを有するシミュレーション装置が提供される。圧縮トレースデータの少なくとも一部はトレースデータにおけるアドレスがインデックスで示され、復元部は、インデックスとアドレスを対応付けるアドレステーブルを参照してインデックスからトレースデータにおけるアドレスを復元する。
【発明の効果】
【0010】
開示のシミュレーション装置は、トレースデータにおけるアドレスがインデックスで示されているものを含む圧縮トレースデータの入力を受け、装置内部で圧縮トレースデータをトレースデータに復元して性能シミュレーションを行う。したがって、トレースデータにおけるアドレス部分のデータを削減しシミュレーション装置に入力するデータ量を削減でき、トレースデータの入力に係るボトルネックを解消し高速な性能シミュレーションが実行可能になる。
【図面の簡単な説明】
【0011】
【図1】本発明の実施形態によるシミュレーション装置の構成例を示す図である。
【図2】本実施形態におけるトレース復元部の構成例を示す図である。
【図3】本実施形態におけるシミュレーション全体の流れを示すフローチャートである。
【図4】本実施形態におけるトレースデータ圧縮環境の構成例を示す図である。
【図5】本実施形態における圧縮トレースデータのフォーマット例を示す図である。
【図6】本実施形態におけるアドレス発生回数検出処理の一例を示すフローチャートである。
【図7】本実施形態におけるアドレステーブル作成例を示す図である。
【図8】本実施形態におけるトレースデータ圧縮処理の一例を示すフローチャートである。
【図9】本実施形態におけるトレースデータ復元処理の一例を示すフローチャートである。
【図10】トレース分割を説明するための図である。
【図11】固定幅でのトレース分割の一例を示す図である。
【図12】関数深さでのトレース分割の一例を示す図である。
【図13】関数深さでのトレース分割処理の一例を示すフローチャートである。
【図14】関数深さでのトレース分割処理を説明するための図である。
【図15】アドレス発生回数でのトレース分割の一例を示す図である。
【図16】アドレス発生回数でのトレース分割処理を説明するための図である。
【図17】アドレス発生回数でのトレース分割処理の一例を示すフローチャートである。
【図18】プロセッサ性能シミュレーションを説明するための図である。
【発明を実施するための形態】
【0012】
以下、本発明の実施形態を図面に基づいて説明する。
【0013】
図1は、本発明の実施形態によるシミュレーション装置の構成例を示すブロック図である。本実施形態によるシミュレーション装置10は、プロセッサの性能シミュレーションを実行するシミュレーション装置であり、トレースバッファ12、トレース復元部13、及び性能シミュレータ14を有する。
【0014】
トレースバッファ12は、トレースデータ転送装置16からインタフェース部11を介して入力される圧縮トレースデータ17を一時的に格納する。トレースデータ転送装置16は、例えばホストコンピュータである。ここで、本実施形態においてシミュレーション装置10に供給するトレースデータは、予め実機やISS等でプログラムを実行して取得したトレースデータそのものではなく、それを事前に解析して圧縮した圧縮トレースデータである。なお、以下の説明では、実機やISS等でプログラムを実行することで取得したトレースデータを「オリジナルのトレースデータ」とも称す。
【0015】
トレース復元部13は、トレースバッファ12に格納された圧縮トレースデータ17を実際のトレースデータに復元し、性能シミュレータ14に出力する。性能シミュレータ14は、トレース復元部13で復元されたトレースデータを用いて、実際には命令を実行せずにパイプラインやキャッシュやメモリアクセス等のタイミングのみについてシミュレーションを行う。
【0016】
性能シミュレータ14は、実行したシミュレーションの結果として、CPIやキャッシュヒット率等の性能指標値を含む情報を、インタフェース部15を介して結果取得装置18に出力する。結果取得装置18は、例えばリアルタイムで結果を表示可能なコンピュータである。また、結果取得装置18は、例えばシミュレーション装置10(性能シミュレータ14)から供給されるシミュレーション結果を保持する記憶装置(メモリやハードディスクドライブなど)であっても良い。
【0017】
なお、図1においては、図示していないがプロセッサのキャッシュサイズやキャッシュプロトコル等を示すアーキテクチャ設定情報もシミュレーション装置10に入力されており、それに基づいて性能シミュレータ14でシミュレーションが実行される。プロセッサのアーキテクチャを検討する際には、アーキテクチャ設定情報を変更しながら繰り返しシミュレーションを実行して性能の見積もりを行い、最適なパラメータを決定する。また、インタフェース部11、15は、PCI Express等の汎用インタフェースであっても良いし、シミュレーション装置10専用のインタフェースであっても良い。
【0018】
本実施形態での性能シミュレーションの実行に際しては、オリジナルのトレースデータを事前に解析して圧縮し、圧縮したトレースデータをシミュレーション装置10に入力する。そして、シミュレーション装置10内部で、トレース復元部13が圧縮されたトレースデータから元のトレースデータを復元し、復元されたトレースデータを用いて性能シミュレータ14がシミュレーションを行う。このようにオリジナルのトレースデータそのものではなく、圧縮したトレースデータをシミュレーション装置10に入力するので、トレースデータの入力に係るボトルネックを改善することができ、性能シミュレーションの高速化を実現することができる。
【0019】
図2は、本実施形態におけるトレース復元部13の構成例を示すブロック図である。トレース復元部13は、制御部21、アドレステーブル保持部22、PC保持部23、命令メモリ24、及び出力バッファ25を有する。
【0020】
アドレステーブル保持部22は、アドレスインデックスとアドレス値とを対応付けるアドレステーブルを保持する。アドレステーブル保持部22は、複数のアドレステーブルを保持することが可能であり、保持された複数のアドレステーブルから使用するアドレステーブルを適宜切り替えることが可能となっている。PC保持部23は、復元する圧縮トレースデータに対応するプログラムのプログラムカウンタ値を保持する。命令メモリ24は、圧縮トレースデータの元になったプログラムの命令コードを保持する。
【0021】
制御部21は、トレースバッファ12に保持された復元する圧縮トレースデータが入力されると、アドレステーブル保持部22、PC保持部23、命令メモリ24にアクセスして、トレースデータを復元する。出力バッファ25は、制御部21で復元されたトレースデータを保持し、性能シミュレータ14に順次出力する。
【0022】
例えば、制御部21は、復元する圧縮トレースデータが入力されると、それに対応するプログラムのプログラムカウンタ値をPC保持部23から取得し、取得したプログラムカウンタ値の命令を命令メモリ24から読み出す。また、制御部21は、復元する圧縮トレースデータにアドレスインデックスが含まれている場合には、アドレステーブル保持部22に保持されているアドレステーブルを参照してアドレス値を読み出す。なお、制御部21は、アドレステーブルの切り替えを指示する圧縮トレースデータが入力されたときには、使用するアドレステーブルの切り替えを行う。
【0023】
図3は、本実施形態におけるシミュレーション全体の流れを示すフローチャートである。
まず、実機やISS等でプログラムを実行することで、オリジナルのトレースデータを取得する(S101)。ステップS101でのトレースデータの取得では、アドレスやデータを含めたすべての情報を有するトレースデータを取得する。トレースデータの取得方法には、プロセッサの種類や環境によって様々な方法があるが取得方法は任意である。
【0024】
次に、ステップS101において取得したトレースデータを解析してアドレステーブルを作成する単位にトレースデータを分割し(S102)、分割したトレースデータ毎にアドレスインデックスとアドレス値を対応付けるアドレステーブルを作成する(S103)。なお、分割したトレースデータ毎にアドレステーブルを作成するようにしているが、トレースデータを分割せずにトレースデータ全体に対して1つのアドレステーブルを作成するようにしても良い。
【0025】
続いて、ステップS101において取得したオリジナルのトレースデータと、ステップS103において作成したアドレステーブルとを用いて、圧縮トレースデータを作成する(S104)。すなわち、ステップS103において作成したアドレステーブルを用いて、オリジナルのトレースデータにおけるアドレス部分をインデックス化し、トレースデータを圧縮する。
【0026】
取得したオリジナルのトレースデータから圧縮トレースデータが作成されると、ステップS103において作成したアドレステーブルをシミュレーション装置10に転送し、アドレステーブル保持部22に保持させる(S105)。そして、ステップS104において作成した圧縮トレースデータをシミュレーション装置10に転送し、シミュレーション装置10内部で圧縮トレースデータから元のトレースデータを復元して性能シミュレーションを実行する(S106)。トレースデータの復元に際しては、インデックス化されたトレースデータのアドレス部分を、アドレステーブルを用いてアドレス値に変換する処理が行われる。
【0027】
前述したオリジナルのトレースデータ取得から圧縮トレースデータ作成までの処理(S101〜S104)は、シミュレーションの実行とは別に事前にトレースデータの元となるプログラム毎に1回実行すれば良い。また、圧縮トレース転送及びシミュレーション実行の処理(S106)は、パラメータ(アーキテクチャ設定情報におけるプロセッサのキャッシュサイズやパイプライン数など)を変えて繰り返し実行される。なお、アドレステーブル転送(S105)は、必要に応じて適宜行えば良い。
【0028】
図3に示したトレース分割(S102)、アドレステーブル作成(S103)、及び圧縮トレースデータ作成(S104)の処理は、例えば図4に示すトレース圧縮ツールを用いて行われる。図4は、本実施形態におけるトレースデータ圧縮環境の構成例を示す図である。
【0029】
トレース圧縮ツール31は、例えばソフトウェアによって実現され、トレース圧縮に係るプログラムをコンピュータが有するCPUで実行することで実現される。なお、トレース圧縮ツール31をハードウェアにより実現しても良い。トレース圧縮ツール31は、圧縮トレース作成部32及びアドレステーブル作成部33を有する。
【0030】
トレース圧縮ツール31は、オリジナルのトレースデータ34が入力される。トレース圧縮ツール31は、入力されたトレースデータ34に基づいて、圧縮トレース作成部32により圧縮トレースデータ35を作成して出力し、アドレステーブル作成部33によりアドレステーブル36を作成して出力する。なお、圧縮トレース作成部32とアドレステーブル作成部33とが1つのトレース圧縮ツール31として実現されてなくとも良く、それぞれの機能が実現できれば別々であっても良い。
【0031】
ここで、本実施形態における圧縮トレースデータのフォーマットについて説明する。図5は、本実施形態における圧縮トレースデータのフォーマットの一例を示す図である。本実施形態では、圧縮トレースデータのフォーマットとしてフォーマット<A>〜<F>の6種類のフォーマットを設けている。
【0032】
圧縮トレースデータのフォーマットは、大きく分けてフォーマット<A>〜<E>とフォーマット<F>の2種類に分類される。フォーマット<A>〜<E>の圧縮トレースデータは、オリジナルのトレースデータ内の分岐命令又はロード/ストア命令と置き換えられる。フォーマット<F>の圧縮トレースデータは、オリジナルのトレースデータには含まれず圧縮する際に追加されるもので、アドレステーブルの切り替えと切り替える先のテーブル番号を示す。フォーマット<F>の圧縮トレースデータは、圧縮トレースデータを作成する際に、トレース分割の位置に挿入され、トレース復元部13ではこのフォーマット<F>の圧縮トレースデータが現れた位置でアドレステーブルを切り替える。
【0033】
フォーマット<A>〜<F>における前半部分のフィールドは、その圧縮トレースデータが分岐命令(分岐した/分岐していない)、ロード/ストア命令、テーブル切り替えのいずれの命令であるかを示す。また、分岐命令又はロード/ストア命令の場合(フォーマット<B>〜<E>の場合)には、アドレスインデックスを保持するか、あるいは実アドレスを保持するかを示す。
【0034】
フォーマット<B>〜<E>における後半部分のフィールドは、アドレスインデックス又は実アドレスを示し、フォーマット<F>における後半部分のフィールドは、切り替える先のテーブル番号を示す。なお、フォーマット<A>については、分岐なしでありアドレス情報は不要であるので後半部分のフィールドを設けていない。
【0035】
なお、フォーマット<F>の圧縮トレースデータにおける後半部分のフィールドに示される情報は、アドレス番号に限らず、アドレステーブルが一意に識別できる情報であれば良い。また、オリジナルのトレースデータ全体に対して1つのアドレステーブルを作成する場合には、フォーマット<F>の圧縮トレースデータを用いる必要はない。しかし、オリジナルのトレースデータを分割して複数のアドレステーブルを作成し、フォーマット<F>の圧縮トレースデータを用いてアドレステーブルの切り替えを行うことで、効率良くアドレステーブルを利用することができる。例えば、アドレス発生頻度の局所性等に応じたアドレステーブルの作成及び切り替えが可能になり、効率性を考慮したサイズやインデックス化するアドレスの選択等を行うことができ、適切なアドレステーブルの利用を実現することができる。
【0036】
また、分岐命令又はロード/ストア命令において発生する実アドレスのすべてをインデックス化する場合、すなわち発生する実アドレスのすべてをアドレステーブルに含ませることができる場合には、フォーマット<C>、<E>は設けなくとも良い。
【0037】
次に、本実施形態におけるアドレステーブル作成について説明する。本実施形態におけるアドレステーブル作成では、トレース圧縮ツール31内のアドレステーブル作成部33が、アドレス発生回数検出処理を行い、その結果に基づいてアドレステーブルを作成する。アドレステーブルの作成は、前述したように分割したトレースデータ毎に行う。
【0038】
図6は、本実施形態におけるアドレス発生回数検出処理の一例を示すフローチャートである。
アドレステーブル作成部33は、オリジナルのトレースデータを1つ読み出し(S201)、それが分岐命令又はロード/ストア命令であるか否かを判断する(S202)。その結果、読み出したトレースデータが分岐命令又はロード/ストア命令でない場合には、ステップS201に戻り、アドレステーブル作成部33は、次のオリジナルのトレースデータを1つ読み出す。
【0039】
一方、読み出したトレースデータが分岐命令又はロード/ストア命令である場合には、アドレステーブル作成部33は、そのトレースデータに示されるアドレスがアドレス頻度表に登録済みのアドレスであるか否かを判断する(S203)。ここで、アドレス頻度表は、図7(A)に一例を示すようにアドレス値とそのアドレスの発生回数を示すものである。
【0040】
ステップS203での判断の結果、アドレス頻度表に登録済みのアドレスである場合には、アドレステーブル作成部33は、そのアドレスの発生回数を示すカウンタ値を1増加させ(S204)、ステップS201に戻る。一方、判断の結果、アドレス頻度表に登録済みのアドレスでない場合には、アドレステーブル作成部33は、アドレス頻度表にそのアドレスを登録し(S205)、そのアドレスのカウンタ値を1増加させ(S204)、ステップS201に戻る。
【0041】
ステップS201に戻った後、アドレステーブル作成部33は、次のオリジナルのトレースデータを1つ読み出してステップS202以降の処理を行う。そして、各トレースデータについて前述した処理を行い、アドレステーブルの作成単位に含まれるトレースデータのすべてについて処理が終了すると、アドレステーブル作成部33は、その処理結果に基づいてアドレステーブルを作成する。
【0042】
アドレス発生回数検出処理により、図7(A)に示すような処理結果(アドレス頻度表)が得られたとする。アドレステーブル作成部33は、例えばアドレス頻度表において発生回数が多い所定数のアドレスをインデックス化することでアドレステーブルを作成する。図7に示す例では、図7(A)に示したアドレス頻度表において発生回数が多い方から順に4つ選択して、図7(B)に示すようなアドレスインデックスとアドレス値を対応付けるアドレステーブルを作成する。図7(B)に示すアドレステーブルは、例えばインデックスをアクセスアドレスとしたメモリで実現することができる。また、例えばアドレステーブルをレジスタ等で実現しても良い。
【0043】
次に、本実施形態における圧縮トレースデータ作成について説明する。本実施形態における圧縮トレースデータ作成は、トレース圧縮ツール31内の圧縮トレース作成部32により行われる。図8は、本実施形態における圧縮トレース作成部32によるトレースデータ圧縮処理の一例を示すフローチャートである。
【0044】
圧縮トレース作成部32は、オリジナルのトレースデータを1つ読み出し(S301)、トレースカウンタのカウンタ値がトレースファイルサイズ以上であるか否かを判断する(S302)。ここで、トレースファイルサイズは、アドレステーブルの作成単位に含まれるトレースデータの数、言い換えれば使用されるアクセステーブルを作成するために読み出したトレースデータの数に相当する。
【0045】
ステップS302での判断の結果、トレースカウンタのカウンタ値がトレースファイルサイズ以上である場合には、トレース分割の位置であるので、圧縮トレース作成部32は、ステップS303〜S305の処理を行い、ステップS301に戻る。すなわち、圧縮トレース作成部32は、トレースカウンタのカウンタ値の初期化(S303)、使用するアドレステーブルの切り替え(S304)、そのアドレステーブルへの切り替えを指示するフォーマット<F>の圧縮トレースデータを出力する(S305)。ステップS301に戻った後、圧縮トレース作成部32は、次のオリジナルのトレースデータを1つ読み出してステップS302以降の処理を行う。
【0046】
ステップS302での判断の結果、トレースカウンタのカウンタ値がトレースファイルサイズ以上でない場合には、圧縮トレース作成部32は、読み出したトレースデータが分岐命令であるか否かを判断する(S306)。判断の結果、トレースデータが分岐命令である場合には、圧縮トレース作成部32は、分岐したか否かを判断し(S307)、分岐していない場合にはフォーマット<A>の圧縮トレースデータを出力する(S308)。
【0047】
ステップS307での判断の結果、分岐した場合には、圧縮トレース作成部32は、分岐先アドレスがアドレステーブルに含まれるか否かを判断する(S309)。ステップS309での判断の結果、分岐先アドレスがアドレステーブルに含まれる場合には、圧縮トレース作成部32は、そのアドレスに対応するインデックスを付加してフォーマット<B>の圧縮トレースデータを出力する(S310)。一方、ステップS309での判断の結果、分岐先アドレスがアドレステーブルに含まれない場合には、圧縮トレース作成部32は、そのアドレスをそのまま付加してフォーマット<C>の圧縮トレースデータを出力する(S311)。
【0048】
ステップS306での判断の結果、トレースデータが分岐命令でない場合には、圧縮トレース作成部32は、読み出したトレースデータがロード/ストア命令であるか否かを判断する(S312)。判断の結果、トレースデータがロード/ストア命令である場合には、圧縮トレース作成部32は、アクセス先アドレスがアドレステーブルに含まれるか否かを判断する(S313)。ステップS313での判断の結果、アクセス先アドレスがアドレステーブルに含まれる場合には、圧縮トレース作成部32は、そのアドレスに対応するインデックスを付加してフォーマット<D>の圧縮トレースデータを出力する(S314)。一方、ステップS313での判断の結果、分岐先アドレスがアドレステーブルに含まれない場合には、圧縮トレース作成部32は、そのアドレスをそのまま付加してフォーマット<E>の圧縮トレースデータを出力する(S315)。
【0049】
ステップS308、S310、S311、S314、S315のいずれかでの処理が終了した後、圧縮トレース作成部32は、トレースカウンタのカウンタ値を1増加させ(S316)、ステップS301に戻る。また、ステップS312での判断の結果、トレースデータがロード/ストア命令でない場合、すなわちトレースデータが分岐命令でもロード/ストア命令でもない場合には、圧縮トレース作成部32は、トレースカウンタのカウンタ値を1増加させ(S316)、ステップS301に戻る。このように、トレースデータが分岐命令でもロード/ストア命令でもない場合には、圧縮トレースデータは出力されない。ステップS301に戻った後、圧縮トレース作成部32は、次のオリジナルのトレースデータを1つ読み出してステップS302以降の処理を行う。
【0050】
なお、ステップS302での判定の結果、トレースカウンタのカウンタ値がトレースファイルサイズ以上でないとき、トレースデータが分岐命令であるか否かの判断(S306)及びロード/ストア命令であるか否かの判断(S312)を実行する順序は逆であっても良い。
【0051】
次に、本実施形態におけるトレースデータの復元について説明する。本実施形態におけるトレースデータの復元は、シミュレーション装置10のトレース復元部13(制御部21)により行われる。図9は、本実施形態におけるトレース復元部13の制御部21によるトレースデータ復元処理の一例を示すフローチャートである。なお、アドレステーブル保持部22に保持されるアドレステーブル、及び命令メモリ24に保持されるプログラムの命令コードは、トレースデータ復元処理を開始する前にトレース復元部13にロードされているものとする。
【0052】
トレース復元部13の制御部21は、PC保持部23に保持されているプログラムカウンタ値に対応する命令を命令メモリ24から読み出し(S401)、読み出した命令が分岐命令であるか否かを判断する(S402)。判断の結果、命令が分岐命令である場合には、制御部21は、トレースバッファ12から圧縮トレースデータを1つ読み出し(S403)、それがフォーマット<F>の圧縮トレースデータであるか否かを判断する(S404)。判断の結果、フォーマット<F>の圧縮トレースデータである場合には、制御部21は、アドレステーブルを切り替え(S405)、ステップS403に戻ってトレースバッファ12から次の圧縮トレースデータを1つ読み出す。
【0053】
ステップS404での判断の結果、フォーマット<F>の圧縮トレースデータでない場合には、制御部21は、さらにフォーマット<A>の圧縮トレースデータであるか否かを判断する(S406)。判断の結果、フォーマット<A>の圧縮トレースデータである場合にはアドレスなしなので、制御部21は、プログラムカウンタ値と命令メモリ24から読み出した命令を用いてトレースデータを復元して出力する(S407)。続いて、制御部21は、プログラムカウンタ値を次のアドレスまで増加させ(S408)、ステップS401に戻る。図9に示す例では、32ビット命令としてプログラムカウンタ値を4増加(4バイト分)増加させている。
【0054】
ステップS406での判断の結果、フォーマット<A>の圧縮トレースデータでない場合には、制御部21は、さらにフォーマット<B>の圧縮トレースデータであるか否かを判断する(S409)。判断の結果、フォーマット<B>の圧縮トレースデータである場合には、制御部21は、アドレステーブルからアドレスインデックスに対応するアドレスを読み出して(S410)、そのアドレスを用いてトレースデータを復元し出力する(S411)。この場合には分岐命令で分岐しているので、制御部21は、アドレステーブルから読み出したアドレスをプログラムカウンタ値に設定し(S412)、ステップS401に戻る。
【0055】
ステップS409での判断の結果、フォーマット<B>の圧縮トレースデータでない場合には、すなわちフォーマット<C>の圧縮トレースデータである場合には、制御部21は、その圧縮トレースデータから実アドレスを取り出す(S413)。そして、制御部21は、ステップS413において取り出したアドレスを用いてトレースデータを復元し出力する(S411)。この場合には分岐命令で分岐しているので、制御部21は、圧縮トレースデータから取り出したアドレスをプログラムカウンタ値に設定し(S415)、ステップS401に戻る。
【0056】
ステップS402での判断の結果、読み出した命令が分岐命令でない場合には、読み出した命令がロード/ストア命令であるか否かを判断する(S416)。判断の結果、命令がロード/ストア命令である場合には、制御部21は、トレースバッファ12から圧縮トレースデータを1つ読み出し(S417)、それがフォーマット<F>の圧縮トレースデータであるか否かを判断する(S418)。判断の結果、フォーマット<F>の圧縮トレースデータである場合には、制御部21は、アドレステーブルを切り替え(S419)、ステップS417に戻ってトレースバッファ12から次の圧縮トレースデータを1つ読み出す。
【0057】
ステップS418での判断の結果、フォーマット<F>の圧縮トレースデータでない場合には、制御部21は、さらにフォーマット<D>の圧縮トレースデータであるか否かを判断する(S420)。判断の結果、フォーマット<D>の圧縮トレースデータである場合には、制御部21は、アドレステーブルからアドレスインデックスに対応するアドレスを読み出す(S421)。一方、フォーマット<D>の圧縮トレースデータでない場合には、すなわちフォーマット<E>の圧縮トレースデータである場合には、制御部21は、圧縮トレースデータから実アドレスを取り出す(S422)。そして、制御部21は、ステップS421又はS422において取得したアドレスを用いてトレースデータを復元し出力する(S423)。続いて、制御部21は、プログラムカウンタ値を次のアドレスまで増加させ(S424)、ステップS401に戻る。
【0058】
ステップS416での判断の結果、読み出した命令がロード/ストア命令でもない場合には、制御部21は、トレースバッファ12からの読み出しは行わず、プログラムカウンタ値と読み出した命令を用いてトレースデータを復元して出力する(S425)。続いて、制御部21は、プログラムカウンタ値を次のアドレスまで増加させ(S426)、ステップS401に戻る。
【0059】
以上のように本実施形態によれば、オリジナルのトレースデータ内に出現する分岐命令における分岐先アドレス、ロード/ストア命令におけるアクセス先アドレスをテーブル化する。例えば、分岐命令、ロード/ストア命令におけるアドレスのうち、頻繁に出現するアドレスをテーブル化する。そして、テーブルにアドレスが存在する場合にはそのインデックスを送信するようにして、オリジナルのトレースデータを圧縮してシミュレーション装置10に入力する。シミュレーション装置10では、トレース復元部13が圧縮されたトレースデータから元の(オリジナルに相当する)トレースデータを復元し、復元したトレースデータを用いて性能シミュレータ14がシミュレーションを行う。したがって、シミュレーション装置10に入力されるトレースデータにおいてアドレス部分のデータが削減し入力するデータ量を削減でき、トレースデータの入力に係るボトルネックを解消することができ、高速に性能シミュレーションを実行可能になる。
【0060】
例えば、オリジナルのトレースデータのサイズが128bit(PC:32bit、命令:32bit、アドレス:32bit、データ:32bit)であるとする。また、トレースデータにおける分岐命令、ロード/ストア命令が全体の50%であり、そのうち90%についてアドレスを8bitでインデックス化できたとする。アドレスがインデックス化されていないトレースデータは4bit(種別)と32bit(実アドレス)との36bitであるが、アドレスをインデックス化した場合のトレースデータは、4bit(種別)と8bit(アドレスインデックス)との12bitとなる。したがって、平均の圧縮トレースデータのサイズは、0.5×(12bit×0.9+36bit×0.1)=7.2bitとなる。トレースデータの入力に必要な帯域は、7.2bit/128bit=0.05625≒1/18となり、従来と比較して18倍に高速化することが可能となる。
【0061】
また、本実施形態では、トレースデータのうち分岐命令及びロード/ストア命令に係るトレースデータだけの圧縮トレースデータをシミュレーション装置10に入力する。そして、シミュレーション装置10のトレース復元部13が、入力された圧縮トレースデータと命令メモリ24に保持されているトレース取得時のプログラムの命令コードとを組み合わせてトレースデータを復元する。これにより、圧縮トレースデータとしてはプログラムにおける分岐命令及びロード/ストア命令のトレースデータを圧縮して入力するだけで、プログラム全体のトレースデータを復元して性能シミュレーションを実行することができ、シミュレーション装置10に入力するデータ量を削減することができる。
【0062】
以下、トレースデータの分割について説明する。
一般的にプログラムの実行において出現するアドレスには局所性がある。したがって、トレースデータを複数に分割し、それぞれのトレースに対応するアドレステーブルを用意して切り替えることでトレースデータの転送に要する帯域を削減することができる。
【0063】
例えば、アドレスA、B、Cが頻繁に出現するトレースデータで、それぞれのアドレスの発生回数がトレースの位置によって図10(A)に示すように変化していたとする。トレースデータを分割しない場合には、アドレスA、B、Cをインデックス化するため、インデックスは2ビット必要となる。
【0064】
それに対して、図10(A)に示すトレースブロック1とトレースブロック2との2つに分割すると、トレースブロック1ではアドレスA、Cだけが頻繁に発生し、トレースブロック2ではアドレスB、Cだけが頻繁に発生することとなる。したがって、トレースブロック1及びトレースブロック2の各ブロックで、図10(B)、(C)に示すようにテーブルを作成することで、インデックスは1ビットで済む。このように、オリジナルのトレースデータの内容に応じて分割位置を変更し、それぞれにおいてアドレステーブルを作成することで、インデックスに要するビット数を削減しデータ量を削減することができる。
【0065】
トレース分割の方法としては、例えば(1)固定幅、(2)関数単位、(3)関数深さ、(4)ブロック分割+発生頻度、(5)関数単位+発生頻度がある。以下、(1)〜(5)の分割方法についてそれぞれ説明する。
【0066】
(1)固定幅
図11は、固定幅でのトレース分割の一例を示す図である。なお、図11に例示したように、オリジナルのトレースデータは、PC、命令、アドレス、データの4つの要素からなる。PCはその命令のプログラムカウンタ値である。アドレスは、分岐命令の場合には分岐先アドレスであり、ロード/ストア命令の場合にはアクセス先アドレスである。データは、ロード/ストア命令のデータである。命令によっては、アドレスやデータのフィールドは必要ではない。その場合には、必要でないフィールドに不定値等を保持してシミュレータ側で無視したり、命令長を示すフィールドを持たせて可変長のトレースデータを入力したりするようにすれば良い。固定幅でトレース分割を行う場合には、トレースデータの内部は解析せずに、単純に所定数のトレースデータ毎に分割してアドレステーブルを作成する。
【0067】
(2)関数単位
例えば、図12に示すように関数呼び出しが行われた場合の関数単位によるトレース分割について説明する。すなわち、関数<A>が最上位の関数(例えばmain関数)であり、その中で関数<B>及び関数<C>が呼び出されている。さらに、関数<B>の中で関数<D>が呼び出され、関数<D>の中で関数<H>が呼び出されている。また、関数<C>の中で関数<E>及び関数<F>が呼び出され、関数<E>及び関数<F>のそれぞれの中で関数<I>が呼び出されている。
【0068】
このような関数の呼び出し構造において、関数単位でトレース分割を行う場合には、すべての関数の境界でトレースを分割し、それぞれ分割したトレースに対してアドレステーブルを作成する。関数の境界の位置については、コンパイル時のデバック情報から取得するか、命令セットによっては、関数呼び出しやリターン命令により判断すれば良い。
【0069】
(3)関数深さ
前述のように関数の境界でトレース分割を行った場合には、場合によっては分割単位が多くなりすぎ、圧縮トレースデータにおいて挿入されるテーブル切り替えの命令の数が多くなり、データ量が増加してしまうことも考えられる。それを回避するには、関数の呼び出し構造を解析して、細かくなりすぎない深さの関数境界で分割すれば良い。
【0070】
図13は、関数深さでのトレース分割処理の一例を示すフローチャートである。図13には、トレースデータにおける関数深さの解析に係る処理の流れを示している。
トレース圧縮ツールは、オリジナルのトレースデータを1つ読み出し(S501)、そのプログラムカウンタ値が関数の開始(Start)アドレス又は終了(End)アドレスに一致するか否かを判断する(S502)。
【0071】
判断の結果、プログラムカウンタ値が関数の開始アドレス又は終了アドレスに一致した場合には、トレース圧縮ツールは、トレース番号、開始(Start)/終了(End)の種別、そのときの深さ、及び関数名を出力する(S503)。続いて、トレース圧縮ツールは、開始(Start)/終了(End)の種別が開始であるか否かを判断し、開始(Start)である場合には深さを1増やし(S505)、終了(End)である場合には深さを1減らす(S506)。そして、トレース圧縮ツールは、トレース番号を1増加して(S507)、ステップS501に戻り、次のトレースデータを読み出す。以上の処理を、すべてのトレースデータを読み出すまで繰り返し行う。
【0072】
このようにトレースデータを最初から順に読み出していき、関数の最初の位置及び最後の位置でのトレース番号、開始(Start)/終了(End)の種別、関数深さ、及び関数名を求めることで、図14に示すような表が作成される。この表から深さ毎の関数の個数を求め、予め決めておいた閾値を超えない範囲で最も深い関数深さを決めて、その深さの関数の開始又は終了位置でトレースを分割する。例えば、1つの深さに含まれる関数の個数の閾値を5とした場合には、図12に示す例では関数深さが4であると関数の個数が6となり閾値を超えてしまうので、関数深さが3の関数の終了位置(図14に示す例では関数<D>の終了位置)でトレースを分割し、分割したトレース毎にアドレステーブルを作成する。
【0073】
(4)ブロック分割+発生頻度
図15に示すようにオリジナルのトレースデータをある程度細かい単位(例えば1000個程度のトレースデータを1単位として)に分割する。この分割した単位をトレースブロックとする。そして、それぞれのトレースブロックに対して、アドレスの発生回数を求めて、トレースブロック毎のすべてのアドレスの発生回数を含む図16に示すような表を作成する。そして、最初のトレースブロックから順にアドレスの発生回数を参照していき、閾値(例えば100回)を超えるアドレスの数を求める。閾値を超えたアドレスの数が、予め決めておいたインデックスの数(例えば3)になったら、そのブロックの最後の位置を境界位置とする。例えば、図16に示した例では、閾値を100回とし、予め決めておいたインデックスの数を3とすると、トレースブロック6の最終位置、及びトレースブロック8の最終位置が分割位置として出力される。すなわち、トレースブロック1からトレースブロック6までを一群とし、トレースブロック7からトレースブロック8までを一群として、トレースの分割が行われる。
【0074】
図17は、前述したトレース分割位置を決定する処理の一例を示すフローチャートである。トレース圧縮ツールは、図16に一例を示した表から順にアドレスの発生回数を1つ読み出し(S601)、発生回数が閾値(本例では100)を超えており、かつ未登録(未検出)のアドレスである場合には(S602のno)、インデックスカウントを1増やす(S603)。次に、トレース圧縮ツールは、インデックスカウントの値が最大値(予め決めておいたインデックスの数)になったか否かを判断し、最大値でない場合にはステップS601に戻る。
【0075】
一方、ステップS604での判断の結果、インデックスカウントの値が最大値である場合には、トレース圧縮ツールは、読み出したアドレス発生回数が含まれるトレースブロックの最後の位置をトレース分割位置として出力する(S605)。そして、トレース圧縮ツールは、インデックスカウントの値をクリアし(S606)、ステップS601に戻る。なお、アドレスの読み出しは、図16に示すように表が構成されている場合、トレースブロック1の左側から順に読み出していき、トレースブロック1の最後まで読み出したら、次のブロック(トレースブロック2)の左側に戻って読み出し、それを表のすべてのアドレスの回数を読み出すまで繰り返す。
【0076】
(5)関数単位+発生頻度
前述した(4)ブロック分割+発生頻度による分割方法において、ブロックに相当する部分の境界を関数の境界としてトレース分割する。図12に示した例では、関数の開始及び終了を境界として分割したブロックが前述したトレースブロックに相当する。
【0077】
なお、前記実施形態は、何れも本発明を実施するにあたっての具体化のほんの一例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。
本発明の諸態様を付記として以下に示す。
【0078】
(付記1)
トレースデータに基づいてプロセッサの性能シミュレーションを行うシミュレーション装置であって、
入力される圧縮トレースデータからトレースデータを復元する復元部と、
前記復元部により復元されたトレースデータを用いて前記性能シミュレーションを実行するシミュレータ部とを有し、
前記圧縮トレースデータの少なくとも一部はトレースデータにおけるアドレスがインデックスで示され、
前記復元部は、前記インデックスと前記アドレスを対応付けるアドレステーブルを保持し、当該アドレステーブルを参照して前記インデックスからトレースデータにおけるアドレスを復元することを特徴とするシミュレーション装置。
(付記2)
前記トレースデータが分割され、分割されたトレースデータ毎に作成された複数の前記アドレステーブルを前記復元部が保持し、
前記復元部は、入力される前記圧縮トレースデータに応じて、参照するアドレステーブルを切り替えることを特徴とする付記1記載のシミュレーション装置。
(付記3)
前記圧縮トレースデータは、切り替え先のアドレステーブルを指定し、参照するアドレステーブルの切り替えを指示する命令を含むことを特徴とする付記2記載のシミュレーション装置。
(付記4)
前記トレースデータを取得したプログラムの命令コードを前記復元部が保持し、
前記復元部には、取得された前記トレースデータのうち、分岐命令及びロード/ストア命令に係るトレースデータだけを前記圧縮トレースデータにより入力し、
前記復元部は、入力された前記圧縮トレースデータ及び保持している前記プログラムの命令コードを用いてトレースデータを復元することを特徴とする付記1〜3の何れか1項に記載のシミュレーション装置。
(付記5)
プロセッサの性能シミュレーションで用いるトレースデータにおけるアドレスとインデックスとを対応付けるアドレステーブルを作成するテーブル作成ステップと、
作成した前記アドレステーブルを参照し、前記トレースデータにおけるアドレスに代えて対応する前記インデックスを付加することによって圧縮トレースデータを作成するデータ作成ステップとをコンピュータに実行させるためのプログラム。
(付記6)
前記テーブル作成ステップでは、前記トレースデータを分割し、分割したトレースデータ毎に前記アドレステーブルを作成することを特徴とする付記5記載のプログラム。
(付記7)
固定幅、前記トレースデータを取得したプログラムにて呼び出す関数単位、又は関数の呼び出し構造における深さによって、前記トレースデータを分割し前記アドレステーブルを作成することを特徴とする付記6記載のプログラム。
(付記8)
所定数のトレースデータ、又は前記トレースデータを取得したプログラムにて呼び出す関数単位でトレースデータを分割してアドレスの発生回数をそれぞれ検出し、検出したアドレスの発生回数に基づいて、前記トレースデータを分割し前記アドレステーブルを作成することを特徴とする付記6記載のプログラム。
(付記9)
前記トレースデータを、トレースデータにおけるアドレスの発生回数によって分割することを特徴とする付記6記載のプログラム。
【符号の説明】
【0079】
10 シミュレーション装置
11、15 インタフェース部
12 トレースバッファ
13 トレース復元部
14 性能シミュレータ
16 トレースデータ転送装置
17 圧縮トレースデータ
21 制御部
22 アドレステーブル保持部
23 PC保持部
24 命令メモリ
25 出力バッファ
31 トレース圧縮ツール
32 圧縮トレース作成部
33 アドレステーブル作成部
34 トレースデータ
35 圧縮トレースデータ
36 アドレステーブル

【特許請求の範囲】
【請求項1】
トレースデータに基づいてプロセッサの性能シミュレーションを行うシミュレーション装置であって、
入力される圧縮トレースデータからトレースデータを復元する復元部と、
前記復元部により復元されたトレースデータを用いて前記性能シミュレーションを実行するシミュレータ部とを有し、
前記圧縮トレースデータの少なくとも一部はトレースデータにおけるアドレスがインデックスで示され、
前記復元部は、前記インデックスと前記アドレスを対応付けるアドレステーブルを保持し、当該アドレステーブルを参照して前記インデックスからトレースデータにおけるアドレスを復元することを特徴とするシミュレーション装置。
【請求項2】
前記トレースデータが分割され、分割されたトレースデータ毎に作成された複数の前記アドレステーブルを前記復元部が保持し、
前記復元部は、入力される前記圧縮トレースデータに応じて、参照するアドレステーブルを切り替えることを特徴とする請求項1記載のシミュレーション装置。
【請求項3】
前記トレースデータを取得したプログラムの命令コードを前記復元部が保持し、
前記復元部には、取得された前記トレースデータのうち、分岐命令及びロード/ストア命令に係るトレースデータだけを前記圧縮トレースデータにより入力し、
前記復元部は、入力された前記圧縮トレースデータ及び保持している前記プログラムの命令コードを用いてトレースデータを復元することを特徴とする請求項1又は2記載のシミュレーション装置。
【請求項4】
プロセッサの性能シミュレーションで用いるトレースデータにおけるアドレスとインデックスとを対応付けるアドレステーブルを作成するテーブル作成ステップと、
作成した前記アドレステーブルを参照し、前記トレースデータにおけるアドレスに代えて対応する前記インデックスを付加することによって圧縮トレースデータを作成するデータ作成ステップとをコンピュータに実行させるためのプログラム。
【請求項5】
前記テーブル作成ステップでは、前記トレースデータを分割し、分割したトレースデータ毎に前記アドレステーブルを作成することを特徴とする請求項4記載のプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate