(57)【特許請求の範囲】
【請求項１】
トレースデータに基づいてプロセッサの性能シミュレーションを行うシミュレーション装置であって、
入力される圧縮トレースデータからトレースデータを復元する復元部と、
前記復元部により復元されたトレースデータを用いて前記性能シミュレーションを実行するシミュレータ部とを有し、
前記圧縮トレースデータの少なくとも一部はトレースデータにおけるアドレスがインデックスで示され、
前記復元部は、前記インデックスと前記アドレスを対応付けるアドレステーブルを保持し、当該アドレステーブルを参照して前記インデックスからトレースデータにおけるアドレスを復元し、
前記トレースデータを取得したプログラムの命令コードを前記復元部が保持し、取得された前記トレースデータのうちの分岐命令及びロード／ストア命令に係るトレースデータだけを前記圧縮トレースデータにより前記復元部に入力することを特徴とするシミュレーション装置。
【請求項２】
前記トレースデータが分割され、分割されたトレースデータ毎に作成された複数の前記アドレステーブルを前記復元部が保持し、
前記復元部は、入力される前記圧縮トレースデータに応じて、参照するアドレステーブルを切り替えることを特徴とする請求項１記載のシミュレーション装置。
【請求項３】
前記復元部は、入力された前記圧縮トレースデータ及び保持している前記プログラムの命令コードを用いてトレースデータを復元することを特徴とする請求項１又は２記載のシミュレーション装置。
【請求項４】
プロセッサの性能シミュレーションで用いるトレースデータにおけるアドレスとインデックスとを対応付けるアドレステーブルを作成するテーブル作成ステップと、
作成した前記アドレステーブルを参照し、前記トレースデータにおけるアドレスに代えて対応する前記インデックスを付加することによって圧縮トレースデータを作成するデータ作成ステップとをコンピュータに実行させ、
前記データ作成ステップでは、前記トレースデータのうちの分岐命令及びロード／ストア命令に係るトレースデータを前記圧縮トレースデータとして出力し、分岐命令及びロード／ストア命令に係るトレースデータでない場合には圧縮トレースデータとしては出力しないことを特徴とするプログラム。
【請求項５】
前記テーブル作成ステップでは、前記トレースデータを分割し、分割したトレースデータ毎に前記アドレステーブルを作成することを特徴とする請求項４記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサの性能シミュレーション技術に関する。
【背景技術】
【０００２】
プロセッサのアーキテクチャを検討する際にプロセッサの性能シミュレーションが行われている。図１８に示すように、プロセッサの性能シミュレーションでは、アーキテクチャ設定情報１０１及びトレースデータ１０２を性能シミュレータ１０３に入力する。アーキテクチャ設定情報１０１は、例えばプロセッサのキャッシュサイズやキャッシュプロトコルを含む。また、トレースデータ１０２は、予め実機（実プロセッサ）や命令セットシミュレータ（ＩＳＳ）でプログラムを実行して取得した命令列（命令トレース）であり、プログラムカウンタ値（ＰＣ）及び命令（さらに、命令によってアドレス、データ）を有する。
【０００３】
性能シミュレータ１０３は、入力されたアーキテクチャ設定情報１０１及びトレースデータ１０２を用いて、実際には命令を実行せずにパイプラインやキャッシュやメモリアクセス等のタイミングのみについてシミュレーションを行う。そして、性能シミュレータ１０３は、シミュレーション結果として、ＣＰＩ（Cycles Per Instruction）、キャッシュヒット率等の性能指標値を含む性能情報レポート１０４を出力する。プロセッサのアーキテクチャを検討する際には、アーキテクチャ設定情報１０１（例えばキャッシュサイズやメモリレイテンシ等のパラメータ）を変更しながら繰り返しシミュレーションを実行して性能の見積もりを行い、最適なパラメータを決定する。
【０００４】
従来、プロセッサの性能シミュレーションは、ソフトウェアによる性能シミュレータで行われていた。しかし、ソフトウェアによる性能シミュレータは、基本的には逐次実行であるので、近年のプロセッサの複雑化やマルチコア化のために十分な実行速度を確保できない場合が多くなってきている。プロセッサのアーキテクチャを検討する際には、パラメータの変更を行って多数のパラメータで性能シミュレーションを実行するために、実行速度の低下により、適切なパラメータを決定するためのアーキテクチャ探索に時間がかかる。
【０００５】
前述のような実行速度の低下を改善する方法としては、例えば性能シミュレータをＦＰＧＡ等の再構成可能なハードウェアによって実現する方法がある。性能シミュレータをハードウェア化することで、処理の並列化が可能となりシミュレーションの実行速度を大幅に向上させることが可能になる。つまり、性能シミュレータをハードウェア化することで、高速なシミュレーションが可能となる。
【０００６】
下記特許文献１には、トレースデータのエクスポートに関し、トレース・アドレスと比較アドレスとをバイト単位で比較して、不一致が検出されたバイトを含む下位側のバイトをエクスポートすることで、トレース圧縮を行う技術が開示されています。下記特許文献２には、データトレース情報を収集する際、アドレス情報の上位ビットが比較アドレスレジスタに記憶された値と一致する場合には、その上位アドレスの識別子を出力することで、アドレス情報を圧縮する技術が開示されています。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００４−１７８５９１号公報
【特許文献２】特許第３６０９７９４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
性能シミュレータをハードウェア化した場合には、シミュレーションの実行部分の高速化に伴って、性能シミュレータへのトレースデータの入力も高速に行う必要がある。ここで、一般的な32bitアーキテクチャのプロセッサでのトレースデータのサイズは、128bit（ＰＣ：32bit、命令：32bit、アドレス：32bit、データ：32bit）である。性能シミュレータが100MHzで動作した場合、無駄なく性能シミュレータでのシミュレーションを実行するには、トレースデータの入力に16Byte（＝128bit）×100MHz＝1.6GByte／secの帯域が必要になる。性能シミュレータへトレースデータを入力するためのポートとして、例えばPCI Express x1（１レーン構成のPCI Expressポート）を用いると、そのデータ転送に係る帯域は理論最大値で200MByte／sec（実際には100MByte／sec以下）であるので、転送帯域が不足することになる。つまり、性能シミュレータをハードウェア化することでシミュレーションの実行部分は高速化されるが、トレースデータの入力がボトルネックとなって、性能シミュレーション全体としての高速化を十分には図ることができない。
【課題を解決するための手段】
【０００９】
本発明の一観点によれば、入力される圧縮トレースデータからトレースデータを復元する復元部と、復元されたトレースデータを用いてプロセッサの性能シミュレーションを実行するシミュレータ部とを有するシミュレーション装置が提供される。圧縮トレースデータの少なくとも一部はトレースデータにおけるアドレスがインデックスで示され、復元部は、インデックスとアドレスを対応付けるアドレステーブルを参照してインデックスからトレースデータにおけるアドレスを復元する。トレースデータを取得したプログラムの命令コードを復元部が保持し、取得されたトレースデータのうちの分岐命令及びロード／ストア命令に係るトレースデータだけを圧縮トレースデータにより復元部に入力する。
【発明の効果】
【００１０】
開示のシミュレーション装置は、トレースデータにおけるアドレスがインデックスで示されているものを含む圧縮トレースデータの入力を受け、装置内部で圧縮トレースデータをトレースデータに復元して性能シミュレーションを行う。したがって、トレースデータにおけるアドレス部分のデータを削減しシミュレーション装置に入力するデータ量を削減でき、トレースデータの入力に係るボトルネックを解消し高速な性能シミュレーションが実行可能になる。
【図面の簡単な説明】
【００１１】
【図１】本発明の実施形態によるシミュレーション装置の構成例を示す図である。
【図２】本実施形態におけるトレース復元部の構成例を示す図である。
【図３】本実施形態におけるシミュレーション全体の流れを示すフローチャートである。
【図４】本実施形態におけるトレースデータ圧縮環境の構成例を示す図である。
【図５】本実施形態における圧縮トレースデータのフォーマット例を示す図である。
【図６】本実施形態におけるアドレス発生回数検出処理の一例を示すフローチャートである。
【図７】本実施形態におけるアドレステーブル作成例を示す図である。
【図８】本実施形態におけるトレースデータ圧縮処理の一例を示すフローチャートである。
【図９】本実施形態におけるトレースデータ復元処理の一例を示すフローチャートである。
【図１０】トレース分割を説明するための図である。
【図１１】固定幅でのトレース分割の一例を示す図である。
【図１２】関数深さでのトレース分割の一例を示す図である。
【図１３】関数深さでのトレース分割処理の一例を示すフローチャートである。
【図１４】関数深さでのトレース分割処理を説明するための図である。
【図１５】アドレス発生回数でのトレース分割の一例を示す図である。
【図１６】アドレス発生回数でのトレース分割処理を説明するための図である。
【図１７】アドレス発生回数でのトレース分割処理の一例を示すフローチャートである。
【図１８】プロセッサ性能シミュレーションを説明するための図である。
【発明を実施するための形態】
【００１２】
以下、本発明の実施形態を図面に基づいて説明する。
【００１３】
図１は、本発明の実施形態によるシミュレーション装置の構成例を示すブロック図である。本実施形態によるシミュレーション装置１０は、プロセッサの性能シミュレーションを実行するシミュレーション装置であり、トレースバッファ１２、トレース復元部１３、及び性能シミュレータ１４を有する。
【００１４】
トレースバッファ１２は、トレースデータ転送装置１６からインタフェース部１１を介して入力される圧縮トレースデータ１７を一時的に格納する。トレースデータ転送装置１６は、例えばホストコンピュータである。ここで、本実施形態においてシミュレーション装置１０に供給するトレースデータは、予め実機やＩＳＳ等でプログラムを実行して取得したトレースデータそのものではなく、それを事前に解析して圧縮した圧縮トレースデータである。なお、以下の説明では、実機やＩＳＳ等でプログラムを実行することで取得したトレースデータを「オリジナルのトレースデータ」とも称す。
【００１５】
トレース復元部１３は、トレースバッファ１２に格納された圧縮トレースデータ１７を実際のトレースデータに復元し、性能シミュレータ１４に出力する。性能シミュレータ１４は、トレース復元部１３で復元されたトレースデータを用いて、実際には命令を実行せずにパイプラインやキャッシュやメモリアクセス等のタイミングのみについてシミュレーションを行う。
【００１６】
性能シミュレータ１４は、実行したシミュレーションの結果として、ＣＰＩやキャッシュヒット率等の性能指標値を含む情報を、インタフェース部１５を介して結果取得装置１８に出力する。結果取得装置１８は、例えばリアルタイムで結果を表示可能なコンピュータである。また、結果取得装置１８は、例えばシミュレーション装置１０（性能シミュレータ１４）から供給されるシミュレーション結果を保持する記憶装置（メモリやハードディスクドライブなど）であっても良い。
【００１７】
なお、図１においては、図示していないがプロセッサのキャッシュサイズやキャッシュプロトコル等を示すアーキテクチャ設定情報もシミュレーション装置１０に入力されており、それに基づいて性能シミュレータ１４でシミュレーションが実行される。プロセッサのアーキテクチャを検討する際には、アーキテクチャ設定情報を変更しながら繰り返しシミュレーションを実行して性能の見積もりを行い、最適なパラメータを決定する。また、インタフェース部１１、１５は、PCI Express等の汎用インタフェースであっても良いし、シミュレーション装置１０専用のインタフェースであっても良い。
【００１８】
本実施形態での性能シミュレーションの実行に際しては、オリジナルのトレースデータを事前に解析して圧縮し、圧縮したトレースデータをシミュレーション装置１０に入力する。そして、シミュレーション装置１０内部で、トレース復元部１３が圧縮されたトレースデータから元のトレースデータを復元し、復元されたトレースデータを用いて性能シミュレータ１４がシミュレーションを行う。このようにオリジナルのトレースデータそのものではなく、圧縮したトレースデータをシミュレーション装置１０に入力するので、トレースデータの入力に係るボトルネックを改善することができ、性能シミュレーションの高速化を実現することができる。
【００１９】
図２は、本実施形態におけるトレース復元部１３の構成例を示すブロック図である。トレース復元部１３は、制御部２１、アドレステーブル保持部２２、ＰＣ保持部２３、命令メモリ２４、及び出力バッファ２５を有する。
【００２０】
アドレステーブル保持部２２は、アドレスインデックスとアドレス値とを対応付けるアドレステーブルを保持する。アドレステーブル保持部２２は、複数のアドレステーブルを保持することが可能であり、保持された複数のアドレステーブルから使用するアドレステーブルを適宜切り替えることが可能となっている。ＰＣ保持部２３は、復元する圧縮トレースデータに対応するプログラムのプログラムカウンタ値を保持する。命令メモリ２４は、圧縮トレースデータの元になったプログラムの命令コードを保持する。
【００２１】
制御部２１は、トレースバッファ１２に保持された復元する圧縮トレースデータが入力されると、アドレステーブル保持部２２、ＰＣ保持部２３、命令メモリ２４にアクセスして、トレースデータを復元する。出力バッファ２５は、制御部２１で復元されたトレースデータを保持し、性能シミュレータ１４に順次出力する。
【００２２】
例えば、制御部２１は、復元する圧縮トレースデータが入力されると、それに対応するプログラムのプログラムカウンタ値をＰＣ保持部２３から取得し、取得したプログラムカウンタ値の命令を命令メモリ２４から読み出す。また、制御部２１は、復元する圧縮トレースデータにアドレスインデックスが含まれている場合には、アドレステーブル保持部２２に保持されているアドレステーブルを参照してアドレス値を読み出す。なお、制御部２１は、アドレステーブルの切り替えを指示する圧縮トレースデータが入力されたときには、使用するアドレステーブルの切り替えを行う。
【００２３】
図３は、本実施形態におけるシミュレーション全体の流れを示すフローチャートである。
まず、実機やＩＳＳ等でプログラムを実行することで、オリジナルのトレースデータを取得する（Ｓ１０１）。ステップＳ１０１でのトレースデータの取得では、アドレスやデータを含めたすべての情報を有するトレースデータを取得する。トレースデータの取得方法には、プロセッサの種類や環境によって様々な方法があるが取得方法は任意である。
【００２４】
次に、ステップＳ１０１において取得したトレースデータを解析してアドレステーブルを作成する単位にトレースデータを分割し（Ｓ１０２）、分割したトレースデータ毎にアドレスインデックスとアドレス値を対応付けるアドレステーブルを作成する（Ｓ１０３）。なお、分割したトレースデータ毎にアドレステーブルを作成するようにしているが、トレースデータを分割せずにトレースデータ全体に対して１つのアドレステーブルを作成するようにしても良い。
【００２５】
続いて、ステップＳ１０１において取得したオリジナルのトレースデータと、ステップＳ１０３において作成したアドレステーブルとを用いて、圧縮トレースデータを作成する（Ｓ１０４）。すなわち、ステップＳ１０３において作成したアドレステーブルを用いて、オリジナルのトレースデータにおけるアドレス部分をインデックス化し、トレースデータを圧縮する。
【００２６】
取得したオリジナルのトレースデータから圧縮トレースデータが作成されると、ステップＳ１０３において作成したアドレステーブルをシミュレーション装置１０に転送し、アドレステーブル保持部２２に保持させる（Ｓ１０５）。そして、ステップＳ１０４において作成した圧縮トレースデータをシミュレーション装置１０に転送し、シミュレーション装置１０内部で圧縮トレースデータから元のトレースデータを復元して性能シミュレーションを実行する（Ｓ１０６）。トレースデータの復元に際しては、インデックス化されたトレースデータのアドレス部分を、アドレステーブルを用いてアドレス値に変換する処理が行われる。
【００２７】
前述したオリジナルのトレースデータ取得から圧縮トレースデータ作成までの処理（Ｓ１０１〜Ｓ１０４）は、シミュレーションの実行とは別に事前にトレースデータの元となるプログラム毎に１回実行すれば良い。また、圧縮トレース転送及びシミュレーション実行の処理（Ｓ１０６）は、パラメータ（アーキテクチャ設定情報におけるプロセッサのキャッシュサイズやパイプライン数など）を変えて繰り返し実行される。なお、アドレステーブル転送（Ｓ１０５）は、必要に応じて適宜行えば良い。
【００２８】
図３に示したトレース分割（Ｓ１０２）、アドレステーブル作成（Ｓ１０３）、及び圧縮トレースデータ作成（Ｓ１０４）の処理は、例えば図４に示すトレース圧縮ツールを用いて行われる。図４は、本実施形態におけるトレースデータ圧縮環境の構成例を示す図である。
【００２９】
トレース圧縮ツール３１は、例えばソフトウェアによって実現され、トレース圧縮に係るプログラムをコンピュータが有するＣＰＵで実行することで実現される。なお、トレース圧縮ツール３１をハードウェアにより実現しても良い。トレース圧縮ツール３１は、圧縮トレース作成部３２及びアドレステーブル作成部３３を有する。
【００３０】
トレース圧縮ツール３１は、オリジナルのトレースデータ３４が入力される。トレース圧縮ツール３１は、入力されたトレースデータ３４に基づいて、圧縮トレース作成部３２により圧縮トレースデータ３５を作成して出力し、アドレステーブル作成部３３によりアドレステーブル３６を作成して出力する。なお、圧縮トレース作成部３２とアドレステーブル作成部３３とが１つのトレース圧縮ツール３１として実現されてなくとも良く、それぞれの機能が実現できれば別々であっても良い。
【００３１】
ここで、本実施形態における圧縮トレースデータのフォーマットについて説明する。図５は、本実施形態における圧縮トレースデータのフォーマットの一例を示す図である。本実施形態では、圧縮トレースデータのフォーマットとしてフォーマット＜Ａ＞〜＜Ｆ＞の６種類のフォーマットを設けている。
【００３２】
圧縮トレースデータのフォーマットは、大きく分けてフォーマット＜Ａ＞〜＜Ｅ＞とフォーマット＜Ｆ＞の２種類に分類される。フォーマット＜Ａ＞〜＜Ｅ＞の圧縮トレースデータは、オリジナルのトレースデータ内の分岐命令又はロード／ストア命令と置き換えられる。フォーマット＜Ｆ＞の圧縮トレースデータは、オリジナルのトレースデータには含まれず圧縮する際に追加されるもので、アドレステーブルの切り替えと切り替える先のテーブル番号を示す。フォーマット＜Ｆ＞の圧縮トレースデータは、圧縮トレースデータを作成する際に、トレース分割の位置に挿入され、トレース復元部１３ではこのフォーマット＜Ｆ＞の圧縮トレースデータが現れた位置でアドレステーブルを切り替える。
【００３３】
フォーマット＜Ａ＞〜＜Ｆ＞における前半部分のフィールドは、その圧縮トレースデータが分岐命令（分岐した／分岐していない）、ロード／ストア命令、テーブル切り替えのいずれの命令であるかを示す。また、分岐命令又はロード／ストア命令の場合（フォーマット＜Ｂ＞〜＜Ｅ＞の場合）には、アドレスインデックスを保持するか、あるいは実アドレスを保持するかを示す。
【００３４】
フォーマット＜Ｂ＞〜＜Ｅ＞における後半部分のフィールドは、アドレスインデックス又は実アドレスを示し、フォーマット＜Ｆ＞における後半部分のフィールドは、切り替える先のテーブル番号を示す。なお、フォーマット＜Ａ＞については、分岐なしでありアドレス情報は不要であるので後半部分のフィールドを設けていない。
【００３５】
なお、フォーマット＜Ｆ＞の圧縮トレースデータにおける後半部分のフィールドに示される情報は、アドレス番号に限らず、アドレステーブルが一意に識別できる情報であれば良い。また、オリジナルのトレースデータ全体に対して１つのアドレステーブルを作成する場合には、フォーマット＜Ｆ＞の圧縮トレースデータを用いる必要はない。しかし、オリジナルのトレースデータを分割して複数のアドレステーブルを作成し、フォーマット＜Ｆ＞の圧縮トレースデータを用いてアドレステーブルの切り替えを行うことで、効率良くアドレステーブルを利用することができる。例えば、アドレス発生頻度の局所性等に応じたアドレステーブルの作成及び切り替えが可能になり、効率性を考慮したサイズやインデックス化するアドレスの選択等を行うことができ、適切なアドレステーブルの利用を実現することができる。
【００３６】
また、分岐命令又はロード／ストア命令において発生する実アドレスのすべてをインデックス化する場合、すなわち発生する実アドレスのすべてをアドレステーブルに含ませることができる場合には、フォーマット＜Ｃ＞、＜Ｅ＞は設けなくとも良い。
【００３７】
次に、本実施形態におけるアドレステーブル作成について説明する。本実施形態におけるアドレステーブル作成では、トレース圧縮ツール３１内のアドレステーブル作成部３３が、アドレス発生回数検出処理を行い、その結果に基づいてアドレステーブルを作成する。アドレステーブルの作成は、前述したように分割したトレースデータ毎に行う。
【００３８】
図６は、本実施形態におけるアドレス発生回数検出処理の一例を示すフローチャートである。
アドレステーブル作成部３３は、オリジナルのトレースデータを１つ読み出し（Ｓ２０１）、それが分岐命令又はロード／ストア命令であるか否かを判断する（Ｓ２０２）。その結果、読み出したトレースデータが分岐命令又はロード／ストア命令でない場合には、ステップＳ２０１に戻り、アドレステーブル作成部３３は、次のオリジナルのトレースデータを１つ読み出す。
【００３９】
一方、読み出したトレースデータが分岐命令又はロード／ストア命令である場合には、アドレステーブル作成部３３は、そのトレースデータに示されるアドレスがアドレス頻度表に登録済みのアドレスであるか否かを判断する（Ｓ２０３）。ここで、アドレス頻度表は、図７（Ａ）に一例を示すようにアドレス値とそのアドレスの発生回数を示すものである。
【００４０】
ステップＳ２０３での判断の結果、アドレス頻度表に登録済みのアドレスである場合には、アドレステーブル作成部３３は、そのアドレスの発生回数を示すカウンタ値を１増加させ（Ｓ２０４）、ステップＳ２０１に戻る。一方、判断の結果、アドレス頻度表に登録済みのアドレスでない場合には、アドレステーブル作成部３３は、アドレス頻度表にそのアドレスを登録し（Ｓ２０５）、そのアドレスのカウンタ値を１増加させ（Ｓ２０４）、ステップＳ２０１に戻る。
【００４１】
ステップＳ２０１に戻った後、アドレステーブル作成部３３は、次のオリジナルのトレースデータを１つ読み出してステップＳ２０２以降の処理を行う。そして、各トレースデータについて前述した処理を行い、アドレステーブルの作成単位に含まれるトレースデータのすべてについて処理が終了すると、アドレステーブル作成部３３は、その処理結果に基づいてアドレステーブルを作成する。
【００４２】
アドレス発生回数検出処理により、図７（Ａ）に示すような処理結果（アドレス頻度表）が得られたとする。アドレステーブル作成部３３は、例えばアドレス頻度表において発生回数が多い所定数のアドレスをインデックス化することでアドレステーブルを作成する。図７に示す例では、図７（Ａ）に示したアドレス頻度表において発生回数が多い方から順に４つ選択して、図７（Ｂ）に示すようなアドレスインデックスとアドレス値を対応付けるアドレステーブルを作成する。図７（Ｂ）に示すアドレステーブルは、例えばインデックスをアクセスアドレスとしたメモリで実現することができる。また、例えばアドレステーブルをレジスタ等で実現しても良い。
【００４３】
次に、本実施形態における圧縮トレースデータ作成について説明する。本実施形態における圧縮トレースデータ作成は、トレース圧縮ツール３１内の圧縮トレース作成部３２により行われる。図８は、本実施形態における圧縮トレース作成部３２によるトレースデータ圧縮処理の一例を示すフローチャートである。
【００４４】
圧縮トレース作成部３２は、オリジナルのトレースデータを１つ読み出し（Ｓ３０１）、トレースカウンタのカウンタ値がトレースファイルサイズ以上であるか否かを判断する（Ｓ３０２）。ここで、トレースファイルサイズは、アドレステーブルの作成単位に含まれるトレースデータの数、言い換えれば使用されるアクセステーブルを作成するために読み出したトレースデータの数に相当する。
【００４５】
ステップＳ３０２での判断の結果、トレースカウンタのカウンタ値がトレースファイルサイズ以上である場合には、トレース分割の位置であるので、圧縮トレース作成部３２は、ステップＳ３０３〜Ｓ３０５の処理を行い、ステップＳ３０１に戻る。すなわち、圧縮トレース作成部３２は、トレースカウンタのカウンタ値の初期化（Ｓ３０３）、使用するアドレステーブルの切り替え（Ｓ３０４）、そのアドレステーブルへの切り替えを指示するフォーマット＜Ｆ＞の圧縮トレースデータを出力する（Ｓ３０５）。ステップＳ３０１に戻った後、圧縮トレース作成部３２は、次のオリジナルのトレースデータを１つ読み出してステップＳ３０２以降の処理を行う。
【００４６】
ステップＳ３０２での判断の結果、トレースカウンタのカウンタ値がトレースファイルサイズ以上でない場合には、圧縮トレース作成部３２は、読み出したトレースデータが分岐命令であるか否かを判断する（Ｓ３０６）。判断の結果、トレースデータが分岐命令である場合には、圧縮トレース作成部３２は、分岐したか否かを判断し（Ｓ３０７）、分岐していない場合にはフォーマット＜Ａ＞の圧縮トレースデータを出力する（Ｓ３０８）。
【００４７】
ステップＳ３０７での判断の結果、分岐した場合には、圧縮トレース作成部３２は、分岐先アドレスがアドレステーブルに含まれるか否かを判断する（Ｓ３０９）。ステップＳ３０９での判断の結果、分岐先アドレスがアドレステーブルに含まれる場合には、圧縮トレース作成部３２は、そのアドレスに対応するインデックスを付加してフォーマット＜Ｂ＞の圧縮トレースデータを出力する（Ｓ３１０）。一方、ステップＳ３０９での判断の結果、分岐先アドレスがアドレステーブルに含まれない場合には、圧縮トレース作成部３２は、そのアドレスをそのまま付加してフォーマット＜Ｃ＞の圧縮トレースデータを出力する（Ｓ３１１）。
【００４８】
ステップＳ３０６での判断の結果、トレースデータが分岐命令でない場合には、圧縮トレース作成部３２は、読み出したトレースデータがロード／ストア命令であるか否かを判断する（Ｓ３１２）。判断の結果、トレースデータがロード／ストア命令である場合には、圧縮トレース作成部３２は、アクセス先アドレスがアドレステーブルに含まれるか否かを判断する（Ｓ３１３）。ステップＳ３１３での判断の結果、アクセス先アドレスがアドレステーブルに含まれる場合には、圧縮トレース作成部３２は、そのアドレスに対応するインデックスを付加してフォーマット＜Ｄ＞の圧縮トレースデータを出力する（Ｓ３１４）。一方、ステップＳ３１３での判断の結果、分岐先アドレスがアドレステーブルに含まれない場合には、圧縮トレース作成部３２は、そのアドレスをそのまま付加してフォーマット＜Ｅ＞の圧縮トレースデータを出力する（Ｓ３１５）。
【００４９】
ステップＳ３０８、Ｓ３１０、Ｓ３１１、Ｓ３１４、Ｓ３１５のいずれかでの処理が終了した後、圧縮トレース作成部３２は、トレースカウンタのカウンタ値を１増加させ（Ｓ３１６）、ステップＳ３０１に戻る。また、ステップＳ３１２での判断の結果、トレースデータがロード／ストア命令でない場合、すなわちトレースデータが分岐命令でもロード／ストア命令でもない場合には、圧縮トレース作成部３２は、トレースカウンタのカウンタ値を１増加させ（Ｓ３１６）、ステップＳ３０１に戻る。このように、トレースデータが分岐命令でもロード／ストア命令でもない場合には、圧縮トレースデータは出力されない。ステップＳ３０１に戻った後、圧縮トレース作成部３２は、次のオリジナルのトレースデータを１つ読み出してステップＳ３０２以降の処理を行う。
【００５０】
なお、ステップＳ３０２での判定の結果、トレースカウンタのカウンタ値がトレースファイルサイズ以上でないとき、トレースデータが分岐命令であるか否かの判断（Ｓ３０６）及びロード／ストア命令であるか否かの判断（Ｓ３１２）を実行する順序は逆であっても良い。
【００５１】
次に、本実施形態におけるトレースデータの復元について説明する。本実施形態におけるトレースデータの復元は、シミュレーション装置１０のトレース復元部１３（制御部２１）により行われる。図９は、本実施形態におけるトレース復元部１３の制御部２１によるトレースデータ復元処理の一例を示すフローチャートである。なお、アドレステーブル保持部２２に保持されるアドレステーブル、及び命令メモリ２４に保持されるプログラムの命令コードは、トレースデータ復元処理を開始する前にトレース復元部１３にロードされているものとする。
【００５２】
トレース復元部１３の制御部２１は、ＰＣ保持部２３に保持されているプログラムカウンタ値に対応する命令を命令メモリ２４から読み出し（Ｓ４０１）、読み出した命令が分岐命令であるか否かを判断する（Ｓ４０２）。判断の結果、命令が分岐命令である場合には、制御部２１は、トレースバッファ１２から圧縮トレースデータを１つ読み出し（Ｓ４０３）、それがフォーマット＜Ｆ＞の圧縮トレースデータであるか否かを判断する（Ｓ４０４）。判断の結果、フォーマット＜Ｆ＞の圧縮トレースデータである場合には、制御部２１は、アドレステーブルを切り替え（Ｓ４０５）、ステップＳ４０３に戻ってトレースバッファ１２から次の圧縮トレースデータを１つ読み出す。
【００５３】
ステップＳ４０４での判断の結果、フォーマット＜Ｆ＞の圧縮トレースデータでない場合には、制御部２１は、さらにフォーマット＜Ａ＞の圧縮トレースデータであるか否かを判断する（Ｓ４０６）。判断の結果、フォーマット＜Ａ＞の圧縮トレースデータである場合にはアドレスなしなので、制御部２１は、プログラムカウンタ値と命令メモリ２４から読み出した命令を用いてトレースデータを復元して出力する（Ｓ４０７）。続いて、制御部２１は、プログラムカウンタ値を次のアドレスまで増加させ（Ｓ４０８）、ステップＳ４０１に戻る。図９に示す例では、３２ビット命令としてプログラムカウンタ値を４増加（４バイト分）増加させている。
【００５４】
ステップＳ４０６での判断の結果、フォーマット＜Ａ＞の圧縮トレースデータでない場合には、制御部２１は、さらにフォーマット＜Ｂ＞の圧縮トレースデータであるか否かを判断する（Ｓ４０９）。判断の結果、フォーマット＜Ｂ＞の圧縮トレースデータである場合には、制御部２１は、アドレステーブルからアドレスインデックスに対応するアドレスを読み出して（Ｓ４１０）、そのアドレスを用いてトレースデータを復元し出力する（Ｓ４１１）。この場合には分岐命令で分岐しているので、制御部２１は、アドレステーブルから読み出したアドレスをプログラムカウンタ値に設定し（Ｓ４１２）、ステップＳ４０１に戻る。
【００５５】
ステップＳ４０９での判断の結果、フォーマット＜Ｂ＞の圧縮トレースデータでない場合には、すなわちフォーマット＜Ｃ＞の圧縮トレースデータである場合には、制御部２１は、その圧縮トレースデータから実アドレスを取り出す（Ｓ４１３）。そして、制御部２１は、ステップＳ４１３において取り出したアドレスを用いてトレースデータを復元し出力する（Ｓ４１１）。この場合には分岐命令で分岐しているので、制御部２１は、圧縮トレースデータから取り出したアドレスをプログラムカウンタ値に設定し（Ｓ４１５）、ステップＳ４０１に戻る。
【００５６】
ステップＳ４０２での判断の結果、読み出した命令が分岐命令でない場合には、読み出した命令がロード／ストア命令であるか否かを判断する（Ｓ４１６）。判断の結果、命令がロード／ストア命令である場合には、制御部２１は、トレースバッファ１２から圧縮トレースデータを１つ読み出し（Ｓ４１７）、それがフォーマット＜Ｆ＞の圧縮トレースデータであるか否かを判断する（Ｓ４１８）。判断の結果、フォーマット＜Ｆ＞の圧縮トレースデータである場合には、制御部２１は、アドレステーブルを切り替え（Ｓ４１９）、ステップＳ４１７に戻ってトレースバッファ１２から次の圧縮トレースデータを１つ読み出す。
【００５７】
ステップＳ４１８での判断の結果、フォーマット＜Ｆ＞の圧縮トレースデータでない場合には、制御部２１は、さらにフォーマット＜Ｄ＞の圧縮トレースデータであるか否かを判断する（Ｓ４２０）。判断の結果、フォーマット＜Ｄ＞の圧縮トレースデータである場合には、制御部２１は、アドレステーブルからアドレスインデックスに対応するアドレスを読み出す（Ｓ４２１）。一方、フォーマット＜Ｄ＞の圧縮トレースデータでない場合には、すなわちフォーマット＜Ｅ＞の圧縮トレースデータである場合には、制御部２１は、圧縮トレースデータから実アドレスを取り出す（Ｓ４２２）。そして、制御部２１は、ステップＳ４２１又はＳ４２２において取得したアドレスを用いてトレースデータを復元し出力する（Ｓ４２３）。続いて、制御部２１は、プログラムカウンタ値を次のアドレスまで増加させ（Ｓ４２４）、ステップＳ４０１に戻る。
【００５８】
ステップＳ４１６での判断の結果、読み出した命令がロード／ストア命令でもない場合には、制御部２１は、トレースバッファ１２からの読み出しは行わず、プログラムカウンタ値と読み出した命令を用いてトレースデータを復元して出力する（Ｓ４２５）。続いて、制御部２１は、プログラムカウンタ値を次のアドレスまで増加させ（Ｓ４２６）、ステップＳ４０１に戻る。
【００５９】
以上のように本実施形態によれば、オリジナルのトレースデータ内に出現する分岐命令における分岐先アドレス、ロード／ストア命令におけるアクセス先アドレスをテーブル化する。例えば、分岐命令、ロード／ストア命令におけるアドレスのうち、頻繁に出現するアドレスをテーブル化する。そして、テーブルにアドレスが存在する場合にはそのインデックスを送信するようにして、オリジナルのトレースデータを圧縮してシミュレーション装置１０に入力する。シミュレーション装置１０では、トレース復元部１３が圧縮されたトレースデータから元の（オリジナルに相当する）トレースデータを復元し、復元したトレースデータを用いて性能シミュレータ１４がシミュレーションを行う。したがって、シミュレーション装置１０に入力されるトレースデータにおいてアドレス部分のデータが削減し入力するデータ量を削減でき、トレースデータの入力に係るボトルネックを解消することができ、高速に性能シミュレーションを実行可能になる。
【００６０】
例えば、オリジナルのトレースデータのサイズが128bit（ＰＣ：32bit、命令：32bit、アドレス：32bit、データ：32bit）であるとする。また、トレースデータにおける分岐命令、ロード／ストア命令が全体の５０％であり、そのうち９０％についてアドレスを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倍に高速化することが可能となる。
【００６１】
また、本実施形態では、トレースデータのうち分岐命令及びロード／ストア命令に係るトレースデータだけの圧縮トレースデータをシミュレーション装置１０に入力する。そして、シミュレーション装置１０のトレース復元部１３が、入力された圧縮トレースデータと命令メモリ２４に保持されているトレース取得時のプログラムの命令コードとを組み合わせてトレースデータを復元する。これにより、圧縮トレースデータとしてはプログラムにおける分岐命令及びロード／ストア命令のトレースデータを圧縮して入力するだけで、プログラム全体のトレースデータを復元して性能シミュレーションを実行することができ、シミュレーション装置１０に入力するデータ量を削減することができる。
【００６２】
以下、トレースデータの分割について説明する。
一般的にプログラムの実行において出現するアドレスには局所性がある。したがって、トレースデータを複数に分割し、それぞれのトレースに対応するアドレステーブルを用意して切り替えることでトレースデータの転送に要する帯域を削減することができる。
【００６３】
例えば、アドレスＡ、Ｂ、Ｃが頻繁に出現するトレースデータで、それぞれのアドレスの発生回数がトレースの位置によって図１０（Ａ）に示すように変化していたとする。トレースデータを分割しない場合には、アドレスＡ、Ｂ、Ｃをインデックス化するため、インデックスは２ビット必要となる。
【００６４】
それに対して、図１０（Ａ）に示すトレースブロック１とトレースブロック２との２つに分割すると、トレースブロック１ではアドレスＡ、Ｃだけが頻繁に発生し、トレースブロック２ではアドレスＢ、Ｃだけが頻繁に発生することとなる。したがって、トレースブロック１及びトレースブロック２の各ブロックで、図１０（Ｂ）、（Ｃ）に示すようにテーブルを作成することで、インデックスは１ビットで済む。このように、オリジナルのトレースデータの内容に応じて分割位置を変更し、それぞれにおいてアドレステーブルを作成することで、インデックスに要するビット数を削減しデータ量を削減することができる。
【００６５】
トレース分割の方法としては、例えば（１）固定幅、（２）関数単位、（３）関数深さ、（４）ブロック分割＋発生頻度、（５）関数単位＋発生頻度がある。以下、（１）〜（５）の分割方法についてそれぞれ説明する。
【００６６】
（１）固定幅
図１１は、固定幅でのトレース分割の一例を示す図である。なお、図１１に例示したように、オリジナルのトレースデータは、ＰＣ、命令、アドレス、データの４つの要素からなる。ＰＣはその命令のプログラムカウンタ値である。アドレスは、分岐命令の場合には分岐先アドレスであり、ロード／ストア命令の場合にはアクセス先アドレスである。データは、ロード／ストア命令のデータである。命令によっては、アドレスやデータのフィールドは必要ではない。その場合には、必要でないフィールドに不定値等を保持してシミュレータ側で無視したり、命令長を示すフィールドを持たせて可変長のトレースデータを入力したりするようにすれば良い。固定幅でトレース分割を行う場合には、トレースデータの内部は解析せずに、単純に所定数のトレースデータ毎に分割してアドレステーブルを作成する。
【００６７】
（２）関数単位
例えば、図１２に示すように関数呼び出しが行われた場合の関数単位によるトレース分割について説明する。すなわち、関数＜Ａ＞が最上位の関数（例えばｍａｉｎ関数）であり、その中で関数＜Ｂ＞及び関数＜Ｃ＞が呼び出されている。さらに、関数＜Ｂ＞の中で関数＜Ｄ＞が呼び出され、関数＜Ｄ＞の中で関数＜Ｈ＞が呼び出されている。また、関数＜Ｃ＞の中で関数＜Ｅ＞及び関数＜Ｆ＞が呼び出され、関数＜Ｅ＞及び関数＜Ｆ＞のそれぞれの中で関数＜Ｉ＞が呼び出されている。
【００６８】
このような関数の呼び出し構造において、関数単位でトレース分割を行う場合には、すべての関数の境界でトレースを分割し、それぞれ分割したトレースに対してアドレステーブルを作成する。関数の境界の位置については、コンパイル時のデバック情報から取得するか、命令セットによっては、関数呼び出しやリターン命令により判断すれば良い。
【００６９】
（３）関数深さ
前述のように関数の境界でトレース分割を行った場合には、場合によっては分割単位が多くなりすぎ、圧縮トレースデータにおいて挿入されるテーブル切り替えの命令の数が多くなり、データ量が増加してしまうことも考えられる。それを回避するには、関数の呼び出し構造を解析して、細かくなりすぎない深さの関数境界で分割すれば良い。
【００７０】
図１３は、関数深さでのトレース分割処理の一例を示すフローチャートである。図１３には、トレースデータにおける関数深さの解析に係る処理の流れを示している。
トレース圧縮ツールは、オリジナルのトレースデータを１つ読み出し（Ｓ５０１）、そのプログラムカウンタ値が関数の開始（Ｓｔａｒｔ）アドレス又は終了（Ｅｎｄ）アドレスに一致するか否かを判断する（Ｓ５０２）。
【００７１】
判断の結果、プログラムカウンタ値が関数の開始アドレス又は終了アドレスに一致した場合には、トレース圧縮ツールは、トレース番号、開始（Ｓｔａｒｔ）／終了（Ｅｎｄ）の種別、そのときの深さ、及び関数名を出力する（Ｓ５０３）。続いて、トレース圧縮ツールは、開始（Ｓｔａｒｔ）／終了（Ｅｎｄ）の種別が開始であるか否かを判断し、開始（Ｓｔａｒｔ）である場合には深さを１増やし（Ｓ５０５）、終了（Ｅｎｄ）である場合には深さを１減らす（Ｓ５０６）。そして、トレース圧縮ツールは、トレース番号を１増加して（Ｓ５０７）、ステップＳ５０１に戻り、次のトレースデータを読み出す。以上の処理を、すべてのトレースデータを読み出すまで繰り返し行う。
【００７２】
このようにトレースデータを最初から順に読み出していき、関数の最初の位置及び最後の位置でのトレース番号、開始（Ｓｔａｒｔ）／終了（Ｅｎｄ）の種別、関数深さ、及び関数名を求めることで、図１４に示すような表が作成される。この表から深さ毎の関数の個数を求め、予め決めておいた閾値を超えない範囲で最も深い関数深さを決めて、その深さの関数の開始又は終了位置でトレースを分割する。例えば、１つの深さに含まれる関数の個数の閾値を５とした場合には、図１２に示す例では関数深さが４であると関数の個数が６となり閾値を超えてしまうので、関数深さが３の関数の終了位置（図１４に示す例では関数＜Ｄ＞の終了位置）でトレースを分割し、分割したトレース毎にアドレステーブルを作成する。
【００７３】
（４）ブロック分割＋発生頻度
図１５に示すようにオリジナルのトレースデータをある程度細かい単位（例えば１０００個程度のトレースデータを１単位として）に分割する。この分割した単位をトレースブロックとする。そして、それぞれのトレースブロックに対して、アドレスの発生回数を求めて、トレースブロック毎のすべてのアドレスの発生回数を含む図１６に示すような表を作成する。そして、最初のトレースブロックから順にアドレスの発生回数を参照していき、閾値（例えば１００回）を超えるアドレスの数を求める。閾値を超えたアドレスの数が、予め決めておいたインデックスの数（例えば３）になったら、そのブロックの最後の位置を境界位置とする。例えば、図１６に示した例では、閾値を１００回とし、予め決めておいたインデックスの数を３とすると、トレースブロック６の最終位置、及びトレースブロック８の最終位置が分割位置として出力される。すなわち、トレースブロック１からトレースブロック６までを一群とし、トレースブロック７からトレースブロック８までを一群として、トレースの分割が行われる。
【００７４】
図１７は、前述したトレース分割位置を決定する処理の一例を示すフローチャートである。トレース圧縮ツールは、図１６に一例を示した表から順にアドレスの発生回数を１つ読み出し（Ｓ６０１）、発生回数が閾値（本例では１００）を超えており、かつ未登録（未検出）のアドレスである場合には（Ｓ６０２のｎｏ）、インデックスカウントを１増やす（Ｓ６０３）。次に、トレース圧縮ツールは、インデックスカウントの値が最大値（予め決めておいたインデックスの数）になったか否かを判断し、最大値でない場合にはステップＳ６０１に戻る。
【００７５】
一方、ステップＳ６０４での判断の結果、インデックスカウントの値が最大値である場合には、トレース圧縮ツールは、読み出したアドレス発生回数が含まれるトレースブロックの最後の位置をトレース分割位置として出力する（Ｓ６０５）。そして、トレース圧縮ツールは、インデックスカウントの値をクリアし（Ｓ６０６）、ステップＳ６０１に戻る。なお、アドレスの読み出しは、図１６に示すように表が構成されている場合、トレースブロック１の左側から順に読み出していき、トレースブロック１の最後まで読み出したら、次のブロック（トレースブロック２）の左側に戻って読み出し、それを表のすべてのアドレスの回数を読み出すまで繰り返す。
【００７６】
（５）関数単位＋発生頻度
前述した（４）ブロック分割＋発生頻度による分割方法において、ブロックに相当する部分の境界を関数の境界としてトレース分割する。図１２に示した例では、関数の開始及び終了を境界として分割したブロックが前述したトレースブロックに相当する。
【００７７】
なお、前記実施形態は、何れも本発明を実施するにあたっての具体化のほんの一例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。
本発明の諸態様を付記として以下に示す。
【００７８】
（付記１）
トレースデータに基づいてプロセッサの性能シミュレーションを行うシミュレーション装置であって、
入力される圧縮トレースデータからトレースデータを復元する復元部と、
前記復元部により復元されたトレースデータを用いて前記性能シミュレーションを実行するシミュレータ部とを有し、
前記圧縮トレースデータの少なくとも一部はトレースデータにおけるアドレスがインデックスで示され、
前記復元部は、前記インデックスと前記アドレスを対応付けるアドレステーブルを保持し、当該アドレステーブルを参照して前記インデックスからトレースデータにおけるアドレスを復元することを特徴とするシミュレーション装置。
（付記２）
前記トレースデータが分割され、分割されたトレースデータ毎に作成された複数の前記アドレステーブルを前記復元部が保持し、
前記復元部は、入力される前記圧縮トレースデータに応じて、参照するアドレステーブルを切り替えることを特徴とする付記１記載のシミュレーション装置。
（付記３）
前記圧縮トレースデータは、切り替え先のアドレステーブルを指定し、参照するアドレステーブルの切り替えを指示する命令を含むことを特徴とする付記２記載のシミュレーション装置。
（付記４）
前記トレースデータを取得したプログラムの命令コードを前記復元部が保持し、
前記復元部には、取得された前記トレースデータのうち、分岐命令及びロード／ストア命令に係るトレースデータだけを前記圧縮トレースデータにより入力し、
前記復元部は、入力された前記圧縮トレースデータ及び保持している前記プログラムの命令コードを用いてトレースデータを復元することを特徴とする付記１〜３の何れか１項に記載のシミュレーション装置。
（付記５）
プロセッサの性能シミュレーションで用いるトレースデータにおけるアドレスとインデックスとを対応付けるアドレステーブルを作成するテーブル作成ステップと、
作成した前記アドレステーブルを参照し、前記トレースデータにおけるアドレスに代えて対応する前記インデックスを付加することによって圧縮トレースデータを作成するデータ作成ステップとをコンピュータに実行させるためのプログラム。
（付記６）
前記テーブル作成ステップでは、前記トレースデータを分割し、分割したトレースデータ毎に前記アドレステーブルを作成することを特徴とする付記５記載のプログラム。
（付記７）
固定幅、前記トレースデータを取得したプログラムにて呼び出す関数単位、又は関数の呼び出し構造における深さによって、前記トレースデータを分割し前記アドレステーブルを作成することを特徴とする付記６記載のプログラム。
（付記８）
所定数のトレースデータ、又は前記トレースデータを取得したプログラムにて呼び出す関数単位でトレースデータを分割してアドレスの発生回数をそれぞれ検出し、検出したアドレスの発生回数に基づいて、前記トレースデータを分割し前記アドレステーブルを作成することを特徴とする付記６記載のプログラム。
（付記９）
前記トレースデータを、トレースデータにおけるアドレスの発生回数によって分割することを特徴とする付記６記載のプログラム。
【符号の説明】
【００７９】
１０  シミュレーション装置
１１、１５  インタフェース部
１２  トレースバッファ
１３  トレース復元部
１４  性能シミュレータ
１６  トレースデータ転送装置
１７  圧縮トレースデータ
２１  制御部
２２  アドレステーブル保持部
２３  ＰＣ保持部
２４  命令メモリ
２５  出力バッファ
３１  トレース圧縮ツール
３２  圧縮トレース作成部
３３  アドレステーブル作成部
３４  トレースデータ
３５  圧縮トレースデータ
３６  アドレステーブル
【図１】
0005682386.tif 000002
【図２】
0005682386.tif 000003
【図３】
0005682386.tif 000004
【図４】
0005682386.tif 000005
【図５】
0005682386.tif 000006
【図６】
0005682386.tif 000007
【図７】
0005682386.tif 000008
【図８】
0005682386.tif 000009
【図９】
0005682386.tif 000010
【図１０】
0005682386.tif 000011
【図１１】
0005682386.tif 000012
【図１２】
0005682386.tif 000013
【図１３】
0005682386.tif 000014
【図１４】
0005682386.tif 000015
【図１５】
0005682386.tif 000016
【図１６】
0005682386.tif 000017
【図１７】
0005682386.tif 000018
【図１８】
0005682386.tif 000019