トレースデータに基づいてプロセッサの性能シミュレーションを行うシミュレーション装置であって、入力される圧縮トレースデータからトレースデータを復元する復元部と、前記復元部により復元されたトレースデータを用いて前記性能シミュレーションを実行するシミュレータ部とを有し、前記圧縮トレースデータの少なくとも一部はトレースデータにおけるアドレスがインデックスで示され、前記復元部は、前記インデックスと前記アドレスを対応付けるアドレステーブルを保持し、当該アドレステーブルを参照して前記インデックスからトレースデータにおけるアドレスを復元することを特徴とするシミュレーション装置。前記トレースデータが分割され、分割されたトレースデータ毎に作成された複数の前記アドレステーブルを前記復元部が保持し、前記復元部は、入力される前記圧縮トレースデータに応じて、参照するアドレステーブルを切り替えることを特徴とする請求項1記載のシミュレーション装置。前記トレースデータを取得したプログラムの命令コードを前記復元部が保持し、前記復元部には、取得された前記トレースデータのうち、分岐命令及びロード/ストア命令に係るトレースデータだけを前記圧縮トレースデータにより入力し、前記復元部は、入力された前記圧縮トレースデータ及び保持している前記プログラムの命令コードを用いてトレースデータを復元することを特徴とする請求項1又は2記載のシミュレーション装置。プロセッサの性能シミュレーションで用いるトレースデータにおけるアドレスとインデックスとを対応付けるアドレステーブルを作成するテーブル作成ステップと、作成した前記アドレステーブルを参照し、前記トレースデータにおけるアドレスに代えて対応する前記インデックスを付加することによって圧縮トレースデータを作成するデータ作成ステップとをコンピュータに実行させるためのプログラム。前記テーブル作成ステップでは、前記トレースデータを分割し、分割したトレースデータ毎に前記アドレステーブルを作成することを特徴とする請求項4記載のプログラム。性能シミュレータをハードウェア化した場合には、シミュレーションの実行部分の高速化に伴って、性能シミュレータへのトレースデータの入力も高速に行う必要がある。ここで、一般的な32bitアーキテクチャのプロセッサでのトレースデータのサイズは、128bitPC:32bit、命令:32bit、アドレス:32bit、データ:32bitである。性能シミュレータが100MHzで動作した場合、無駄なく性能シミュレータでのシミュレーションを実行するには、トレースデータの入力に16Byte=128bit×100MHz=16GByte/secの帯域が必要になる。性能シミュレータへトレースデータを入力するためのポートとして、例えばPCIExpressx11レーン構成のPCIExpressポートを用いると、そのデータ転送に係る帯域は理論最大値で200MByte/sec実際には100MByte/sec以下であるので、転送帯域が不足することになる。つまり、性能シミュレータをハードウェア化することでシミュレーションの実行部分は高速化されるが、トレースデータの入力がボトルネックとなって、性能シミュレーション全体としての高速化を十分には図ることができない。本発明の一観点によれば、入力される圧縮トレースデータからトレースデータを復元する復元部と、復元されたトレースデータを用いてプロセッサの性能シミュレーションを実行するシミュレータ部とを有するシミュレーション装置が提供される。圧縮トレースデータの少なくとも一部はトレースデータにおけるアドレスがインデックスで示され、復元部は、インデックスとアドレスを対応付けるアドレステーブルを参照してインデックスからトレースデータにおけるアドレスを復元する。開示のシミュレーション装置は、トレースデータにおけるアドレスがインデックスで示されているものを含む圧縮トレースデータの入力を受け、装置内部で圧縮トレースデータをトレースデータに復元して性能シミュレーションを行う。したがって、トレースデータにおけるアドレス部分のデータを削減しシミュレーション装置に入力するデータ量を削減でき、トレースデータの入力に係るボトルネックを解消し高速な性能シミュレーションが実行可能になる。以下、本発明の実施形態を図面に基づいて説明する。図1は、本発明の実施形態によるシミュレーション装置の構成例を示すブロック図である。本実施形態によるシミュレーション装置10は、プロセッサの性能シミュレーションを実行するシミュレーション装置であり、トレースバッファ12、トレース復元部13、及び性能シミュレータ14を有する。トレースバッファ12は、トレースデータ転送装置16からインタフェース部11を介して入力される圧縮トレースデータ17を一時的に格納する。トレースデータ転送装置16は、例えばホストコンピュータである。ここで、本実施形態においてシミュレーション装置10に供給するトレースデータは、予め実機やISS等でプログラムを実行して取得したトレースデータそのものではなく、それを事前に解析して圧縮した圧縮トレースデータである。なお、以下の説明では、実機やISS等でプログラムを実行することで取得したトレースデータをオリジナルのトレースデータとも称す。トレース復元部13は、トレースバッファ12に格納された圧縮トレースデータ17を実際のトレースデータに復元し、性能シミュレータ14に出力する。性能シミュレータ14は、トレース復元部13で復元されたトレースデータを用いて、実際には命令を実行せずにパイプラインやキャッシュやメモリアクセス等のタイミングのみについてシミュレーションを行う。性能シミュレータ14は、実行したシミュレーションの結果として、CPIやキャッシュヒット率等の性能指標値を含む情報を、インタフェース部15を介して結果取得装置18に出力する。結果取得装置18は、例えばリアルタイムで結果を表示可能なコンピュータである。また、結果取得装置18は、例えばシミュレーション装置10性能シミュレータ14から供給されるシミュレーション結果を保持する記憶装置メモリやハードディスクドライブなどであっても良い。なお、図1においては、図示していないがプロセッサのキャッシュサイズやキャッシュプロトコル等を示すアーキテクチャ設定情報もシミュレーション装置10に入力されており、それに基づいて性能シミュレータ14でシミュレーションが実行される。プロセッサのアーキテクチャを検討する際には、アーキテクチャ設定情報を変更しながら繰り返しシミュレーションを実行して性能の見積もりを行い、最適なパラメータを決定する。また、インタフェース部11、15は、PCIExpress等の汎用インタフェースであっても良いし、シミュレーション装置10専用のインタフェースであっても良い。本実施形態での性能シミュレーションの実行に際しては、オリジナルのトレースデータを事前に解析して圧縮し、圧縮したトレースデータをシミュレーション装置10に入力する。そして、シミュレーション装置10内部で、トレース復元部13が圧縮されたトレースデータから元のトレースデータを復元し、復元されたトレースデータを用いて性能シミュレータ14がシミュレーションを行う。このようにオリジナルのトレースデータそのものではなく、圧縮したトレースデータをシミュレーション装置10に入力するので、トレースデータの入力に係るボトルネックを改善することができ、性能シミュレーションの高速化を実現することができる。図2は、本実施形態におけるトレース復元部13の構成例を示すブロック図である。トレース復元部13は、制御部21、アドレステーブル保持部22、PC保持部23、命令メモリ24、及び出力バッファ25を有する。アドレステーブル保持部22は、アドレスインデックスとアドレス値とを対応付けるアドレステーブルを保持する。アドレステーブル保持部22は、複数のアドレステーブルを保持することが可能であり、保持された複数のアドレステーブルから使用するアドレステーブルを適宜切り替えることが可能となっている。PC保持部23は、復元する圧縮トレースデータに対応するプログラムのプログラムカウンタ値を保持する。命令メモリ24は、圧縮トレースデータの元になったプログラムの命令コードを保持する。制御部21は、トレースバッファ12に保持された復元する圧縮トレースデータが入力されると、アドレステーブル保持部22、PC保持部23、命令メモリ24にアクセスして、トレースデータを復元する。出力バッファ25は、制御部21で復元されたトレースデータを保持し、性能シミュレータ14に順次出力する。例えば、制御部21は、復元する圧縮トレースデータが入力されると、それに対応するプログラムのプログラムカウンタ値をPC保持部23から取得し、取得したプログラムカウンタ値の命令を命令メモリ24から読み出す。また、制御部21は、復元する圧縮トレースデータにアドレスインデックスが含まれている場合には、アドレステーブル保持部22に保持されているアドレステーブルを参照してアドレス値を読み出す。なお、制御部21は、アドレステーブルの切り替えを指示する圧縮トレースデータが入力されたときには、使用するアドレステーブルの切り替えを行う。図3は、本実施形態におけるシミュレーション全体の流れを示すフローチャートである。まず、実機やISS等でプログラムを実行することで、オリジナルのトレースデータを取得するS101。ステップS101でのトレースデータの取得では、アドレスやデータを含めたすべての情報を有するトレースデータを取得する。トレースデータの取得方法には、プロセッサの種類や環境によって様々な方法があるが取得方法は任意である。次に、ステップS101において取得したトレースデータを解析してアドレステーブルを作成する単位にトレースデータを分割しS102、分割したトレースデータ毎にアドレスインデックスとアドレス値を対応付けるアドレステーブルを作成するS103。なお、分割したトレースデータ毎にアドレステーブルを作成するようにしているが、トレースデータを分割せずにトレースデータ全体に対して1つのアドレステーブルを作成するようにしても良い。続いて、ステップS101において取得したオリジナルのトレースデータと、ステップS103において作成したアドレステーブルとを用いて、圧縮トレースデータを作成するS104。すなわち、ステップS103において作成したアドレステーブルを用いて、オリジナルのトレースデータにおけるアドレス部分をインデックス化し、トレースデータを圧縮する。取得したオリジナルのトレースデータから圧縮トレースデータが作成されると、ステップS103において作成したアドレステーブルをシミュレーション装置10に転送し、アドレステーブル保持部22に保持させるS105。そして、ステップS104において作成した圧縮トレースデータをシミュレーション装置10に転送し、シミュレーション装置10内部で圧縮トレースデータから元のトレースデータを復元して性能シミュレーションを実行するS106。トレースデータの復元に際しては、インデックス化されたトレースデータのアドレス部分を、アドレステーブルを用いてアドレス値に変換する処理が行われる。前述したオリジナルのトレースデータ取得から圧縮トレースデータ作成までの処理S101~S104は、シミュレーションの実行とは別に事前にトレースデータの元となるプログラム毎に1回実行すれば良い。また、圧縮トレース転送及びシミュレーション実行の処理S106は、パラメータアーキテクチャ設定情報におけるプロセッサのキャッシュサイズやパイプライン数などを変えて繰り返し実行される。なお、アドレステーブル転送S105は、必要に応じて適宜行えば良い。図3に示したトレース分割S102、アドレステーブル作成S103、及び圧縮トレースデータ作成S104の処理は、例えば図4に示すトレース圧縮ツールを用いて行われる。図4は、本実施形態におけるトレースデータ圧縮環境の構成例を示す図である。トレース圧縮ツール31は、例えばソフトウェアによって実現され、トレース圧縮に係るプログラムをコンピュータが有するCPUで実行することで実現される。なお、トレース圧縮ツール31をハードウェアにより実現しても良い。トレース圧縮ツール31は、圧縮トレース作成部32及びアドレステーブル作成部33を有する。トレース圧縮ツール31は、オリジナルのトレースデータ34が入力される。トレース圧縮ツール31は、入力されたトレースデータ34に基づいて、圧縮トレース作成部32により圧縮トレースデータ35を作成して出力し、アドレステーブル作成部33によりアドレステーブル36を作成して出力する。なお、圧縮トレース作成部32とアドレステーブル作成部33とが1つのトレース圧縮ツール31として実現されてなくとも良く、それぞれの機能が実現できれば別々であっても良い。ここで、本実施形態における圧縮トレースデータのフォーマットについて説明する。図5は、本実施形態における圧縮トレースデータのフォーマットの一例を示す図である。本実施形態では、圧縮トレースデータのフォーマットとしてフォーマット<A>~<F>の6種類のフォーマットを設けている。圧縮トレースデータのフォーマットは、大きく分けてフォーマット<A>~<E>とフォーマット<F>の2種類に分類される。フォーマット<A>~<E>の圧縮トレースデータは、オリジナルのトレースデータ内の分岐命令又はロード/ストア命令と置き換えられる。フォーマット<F>の圧縮トレースデータは、オリジナルのトレースデータには含まれず圧縮する際に追加されるもので、アドレステーブルの切り替えと切り替える先のテーブル番号を示す。フォーマット<F>の圧縮トレースデータは、圧縮トレースデータを作成する際に、トレース分割の位置に挿入され、トレース復元部13ではこのフォーマット<F>の圧縮トレースデータが現れた位置でアドレステーブルを切り替える。フォーマット<A>~<F>における前半部分のフィールドは、その圧縮トレースデータが分岐命令分岐した/分岐していない、ロード/ストア命令、テーブル切り替えのいずれの命令であるかを示す。また、分岐命令又はロード/ストア命令の場合フォーマット<B>~<E>の場合には、アドレスインデックスを保持するか、あるいは実アドレスを保持するかを示す。フォーマット<B>~<E>における後半部分のフィールドは、アドレスインデックス又は実アドレスを示し、フォーマット<F>における後半部分のフィールドは、切り替える先のテーブル番号を示す。なお、フォーマット<A>については、分岐なしでありアドレス情報は不要であるので後半部分のフィールドを設けていない。なお、フォーマット<F>の圧縮トレースデータにおける後半部分のフィールドに示される情報は、アドレス番号に限らず、アドレステーブルが一意に識別できる情報であれば良い。また、オリジナルのトレースデータ全体に対して1つのアドレステーブルを作成する場合には、フォーマット<F>の圧縮トレースデータを用いる必要はない。しかし、オリジナルのトレースデータを分割して複数のアドレステーブルを作成し、フォーマット<F>の圧縮トレースデータを用いてアドレステーブルの切り替えを行うことで、効率良くアドレステーブルを利用することができる。例えば、アドレス発生頻度の局所性等に応じたアドレステーブルの作成及び切り替えが可能になり、効率性を考慮したサイズやインデックス化するアドレスの選択等を行うことができ、適切なアドレステーブルの利用を実現することができる。また、分岐命令又はロード/ストア命令において発生する実アドレスのすべてをインデックス化する場合、すなわち発生する実アドレスのすべてをアドレステーブルに含ませることができる場合には、フォーマット<C>、<E>は設けなくとも良い。次に、本実施形態におけるアドレステーブル作成について説明する。本実施形態におけるアドレステーブル作成では、トレース圧縮ツール31内のアドレステーブル作成部33が、アドレス発生回数検出処理を行い、その結果に基づいてアドレステーブルを作成する。アドレステーブルの作成は、前述したように分割したトレースデータ毎に行う。図6は、本実施形態におけるアドレス発生回数検出処理の一例を示すフローチャートである。アドレステーブル作成部33は、オリジナルのトレースデータを1つ読み出しS201、それが分岐命令又はロード/ストア命令であるか否かを判断するS202。その結果、読み出したトレースデータが分岐命令又はロード/ストア命令でない場合には、ステップS201に戻り、アドレステーブル作成部33は、次のオリジナルのトレースデータを1つ読み出す。一方、読み出したトレースデータが分岐命令又はロード/ストア命令である場合には、アドレステーブル作成部33は、そのトレースデータに示されるアドレスがアドレス頻度表に登録済みのアドレスであるか否かを判断するS203。ここで、アドレス頻度表は、図7Aに一例を示すようにアドレス値とそのアドレスの発生回数を示すものである。ステップS203での判断の結果、アドレス頻度表に登録済みのアドレスである場合には、アドレステーブル作成部33は、そのアドレスの発生回数を示すカウンタ値を1増加させS204、ステップS201に戻る。一方、判断の結果、アドレス頻度表に登録済みのアドレスでない場合には、アドレステーブル作成部33は、アドレス頻度表にそのアドレスを登録しS205、そのアドレスのカウンタ値を1増加させS204、ステップS201に戻る。ステップS201に戻った後、アドレステーブル作成部33は、次のオリジナルのトレースデータを1つ読み出してステップS202以降の処理を行う。そして、各トレースデータについて前述した処理を行い、アドレステーブルの作成単位に含まれるトレースデータのすべてについて処理が終了すると、アドレステーブル作成部33は、その処理結果に基づいてアドレステーブルを作成する。アドレス発生回数検出処理により、図7Aに示すような処理結果アドレス頻度表が得られたとする。アドレステーブル作成部33は、例えばアドレス頻度表において発生回数が多い所定数のアドレスをインデックス化することでアドレステーブルを作成する。図7に示す例では、図7Aに示したアドレス頻度表において発生回数が多い方から順に4つ選択して、図7Bに示すようなアドレスインデックスとアドレス値を対応付けるアドレステーブルを作成する。図7Bに示すアドレステーブルは、例えばインデックスをアクセスアドレスとしたメモリで実現することができる。また、例えばアドレステーブルをレジスタ等で実現しても良い。次に、本実施形態における圧縮トレースデータ作成について説明する。本実施形態における圧縮トレースデータ作成は、トレース圧縮ツール31内の圧縮トレース作成部32により行われる。図8は、本実施形態における圧縮トレース作成部32によるトレースデータ圧縮処理の一例を示すフローチャートである。圧縮トレース作成部32は、オリジナルのトレースデータを1つ読み出しS301、トレースカウンタのカウンタ値がトレースファイルサイズ以上であるか否かを判断するS302。ここで、トレースファイルサイズは、アドレステーブルの作成単位に含まれるトレースデータの数、言い換えれば使用されるアクセステーブルを作成するために読み出したトレースデータの数に相当する。ステップS302での判断の結果、トレースカウンタのカウンタ値がトレースファイルサイズ以上である場合には、トレース分割の位置であるので、圧縮トレース作成部32は、ステップS303~S305の処理を行い、ステップS301に戻る。すなわち、圧縮トレース作成部32は、トレースカウンタのカウンタ値の初期化S303、使用するアドレステーブルの切り替えS304、そのアドレステーブルへの切り替えを指示するフォーマット<F>の圧縮トレースデータを出力するS305。ステップS301に戻った後、圧縮トレース作成部32は、次のオリジナルのトレースデータを1つ読み出してステップS302以降の処理を行う。ステップS302での判断の結果、トレースカウンタのカウンタ値がトレースファイルサイズ以上でない場合には、圧縮トレース作成部32は、読み出したトレースデータが分岐命令であるか否かを判断するS306。判断の結果、トレースデータが分岐命令である場合には、圧縮トレース作成部32は、分岐したか否かを判断しS307、分岐していない場合にはフォーマット<A>の圧縮トレースデータを出力するS308。ステップS307での判断の結果、分岐した場合には、圧縮トレース作成部32は、分岐先アドレスがアドレステーブルに含まれるか否かを判断するS309。ステップS309での判断の結果、分岐先アドレスがアドレステーブルに含まれる場合には、圧縮トレース作成部32は、そのアドレスに対応するインデックスを付加してフォーマット<B>の圧縮トレースデータを出力するS310。一方、ステップS309での判断の結果、分岐先アドレスがアドレステーブルに含まれない場合には、圧縮トレース作成部32は、そのアドレスをそのまま付加してフォーマット<C>の圧縮トレースデータを出力するS311。ステップS306での判断の結果、トレースデータが分岐命令でない場合には、圧縮トレース作成部32は、読み出したトレースデータがロード/ストア命令であるか否かを判断するS312。判断の結果、トレースデータがロード/ストア命令である場合には、圧縮トレース作成部32は、アクセス先アドレスがアドレステーブルに含まれるか否かを判断するS313。ステップS313での判断の結果、アクセス先アドレスがアドレステーブルに含まれる場合には、圧縮トレース作成部32は、そのアドレスに対応するインデックスを付加してフォーマット<D>の圧縮トレースデータを出力するS314。一方、ステップS313での判断の結果、分岐先アドレスがアドレステーブルに含まれない場合には、圧縮トレース作成部32は、そのアドレスをそのまま付加してフォーマット<E>の圧縮トレースデータを出力するS315。ステップS308、S310、S311、S314、S315のいずれかでの処理が終了した後、圧縮トレース作成部32は、トレースカウンタのカウンタ値を1増加させS316、ステップS301に戻る。また、ステップS312での判断の結果、トレースデータがロード/ストア命令でない場合、すなわちトレースデータが分岐命令でもロード/ストア命令でもない場合には、圧縮トレース作成部32は、トレースカウンタのカウンタ値を1増加させS316、ステップS301に戻る。このように、トレースデータが分岐命令でもロード/ストア命令でもない場合には、圧縮トレースデータは出力されない。ステップS301に戻った後、圧縮トレース作成部32は、次のオリジナルのトレースデータを1つ読み出してステップS302以降の処理を行う。なお、ステップS302での判定の結果、トレースカウンタのカウンタ値がトレースファイルサイズ以上でないとき、トレースデータが分岐命令であるか否かの判断S306及びロード/ストア命令であるか否かの判断S312を実行する順序は逆であっても良い。次に、本実施形態におけるトレースデータの復元について説明する。本実施形態におけるトレースデータの復元は、シミュレーション装置10のトレース復元部13制御部21により行われる。図9は、本実施形態におけるトレース復元部13の制御部21によるトレースデータ復元処理の一例を示すフローチャートである。なお、アドレステーブル保持部22に保持されるアドレステーブル、及び命令メモリ24に保持されるプログラムの命令コードは、トレースデータ復元処理を開始する前にトレース復元部13にロードされているものとする。トレース復元部13の制御部21は、PC保持部23に保持されているプログラムカウンタ値に対応する命令を命令メモリ24から読み出しS401、読み出した命令が分岐命令であるか否かを判断するS402。判断の結果、命令が分岐命令である場合には、制御部21は、トレースバッファ12から圧縮トレースデータを1つ読み出しS403、それがフォーマット<F>の圧縮トレースデータであるか否かを判断するS404。判断の結果、フォーマット<F>の圧縮トレースデータである場合には、制御部21は、アドレステーブルを切り替えS405、ステップS403に戻ってトレースバッファ12から次の圧縮トレースデータを1つ読み出す。ステップS404での判断の結果、フォーマット<F>の圧縮トレースデータでない場合には、制御部21は、さらにフォーマット<A>の圧縮トレースデータであるか否かを判断するS406。判断の結果、フォーマット<A>の圧縮トレースデータである場合にはアドレスなしなので、制御部21は、プログラムカウンタ値と命令メモリ24から読み出した命令を用いてトレースデータを復元して出力するS407。続いて、制御部21は、プログラムカウンタ値を次のアドレスまで増加させS408、ステップS401に戻る。図9に示す例では、32ビット命令としてプログラムカウンタ値を4増加4バイト分増加させている。ステップS406での判断の結果、フォーマット<A>の圧縮トレースデータでない場合には、制御部21は、さらにフォーマット<B>の圧縮トレースデータであるか否かを判断するS409。判断の結果、フォーマット<B>の圧縮トレースデータである場合には、制御部21は、アドレステーブルからアドレスインデックスに対応するアドレスを読み出してS410、そのアドレスを用いてトレースデータを復元し出力するS411。この場合には分岐命令で分岐しているので、制御部21は、アドレステーブルから読み出したアドレスをプログラムカウンタ値に設定しS412、ステップS401に戻る。ステップS409での判断の結果、フォーマット<B>の圧縮トレースデータでない場合には、すなわちフォーマット<C>の圧縮トレースデータである場合には、制御部21は、その圧縮トレースデータから実アドレスを取り出すS413。そして、制御部21は、ステップS413において取り出したアドレスを用いてトレースデータを復元し出力するS411。この場合には分岐命令で分岐しているので、制御部21は、圧縮トレースデータから取り出したアドレスをプログラムカウンタ値に設定しS415、ステップS401に戻る。ステップS402での判断の結果、読み出した命令が分岐命令でない場合には、読み出した命令がロード/ストア命令であるか否かを判断するS416。判断の結果、命令がロード/ストア命令である場合には、制御部21は、トレースバッファ12から圧縮トレースデータを1つ読み出しS417、それがフォーマット<F>の圧縮トレースデータであるか否かを判断するS418。判断の結果、フォーマット<F>の圧縮トレースデータである場合には、制御部21は、アドレステーブルを切り替えS419、ステップS417に戻ってトレースバッファ12から次の圧縮トレースデータを1つ読み出す。ステップS418での判断の結果、フォーマット<F>の圧縮トレースデータでない場合には、制御部21は、さらにフォーマット<D>の圧縮トレースデータであるか否かを判断するS420。判断の結果、フォーマット<D>の圧縮トレースデータである場合には、制御部21は、アドレステーブルからアドレスインデックスに対応するアドレスを読み出すS421。一方、フォーマット<D>の圧縮トレースデータでない場合には、すなわちフォーマット<E>の圧縮トレースデータである場合には、制御部21は、圧縮トレースデータから実アドレスを取り出すS422。そして、制御部21は、ステップS421又はS422において取得したアドレスを用いてトレースデータを復元し出力するS423。続いて、制御部21は、プログラムカウンタ値を次のアドレスまで増加させS424、ステップS401に戻る。ステップS416での判断の結果、読み出した命令がロード/ストア命令でもない場合には、制御部21は、トレースバッファ12からの読み出しは行わず、プログラムカウンタ値と読み出した命令を用いてトレースデータを復元して出力するS425。続いて、制御部21は、プログラムカウンタ値を次のアドレスまで増加させS426、ステップS401に戻る。以上のように本実施形態によれば、オリジナルのトレースデータ内に出現する分岐命令における分岐先アドレス、ロード/ストア命令におけるアクセス先アドレスをテーブル化する。例えば、分岐命令、ロード/ストア命令におけるアドレスのうち、頻繁に出現するアドレスをテーブル化する。そして、テーブルにアドレスが存在する場合にはそのインデックスを送信するようにして、オリジナルのトレースデータを圧縮してシミュレーション装置10に入力する。シミュレーション装置10では、トレース復元部13が圧縮されたトレースデータから元のオリジナルに相当するトレースデータを復元し、復元したトレースデータを用いて性能シミュレータ14がシミュレーションを行う。したがって、シミュレーション装置10に入力されるトレースデータにおいてアドレス部分のデータが削減し入力するデータ量を削減でき、トレースデータの入力に係るボトルネックを解消することができ、高速に性能シミュレーションを実行可能になる。例えば、オリジナルのトレースデータのサイズが128bitPC:32bit、命令:32bit、アドレス:32bit、データ:32bitであるとする。また、トレースデータにおける分岐命令、ロード/ストア命令が全体の50であり、そのうち90についてアドレスを8bitでインデックス化できたとする。アドレスがインデックス化されていないトレースデータは4bit種別と32bit実アドレスとの36bitであるが、アドレスをインデックス化した場合のトレースデータは、4bit種別と8bitアドレスインデックスとの12bitとなる。したがって、平均の圧縮トレースデータのサイズは、05×12bit×0936bit×01=72bitとなる。トレースデータの入力に必要な帯域は、72bit/128bit=005625≒1/18となり、従来と比較して18倍に高速化することが可能となる。また、本実施形態では、トレースデータのうち分岐命令及びロード/ストア命令に係るトレースデータだけの圧縮トレースデータをシミュレーション装置10に入力する。そして、シミュレーション装置10のトレース復元部13が、入力された圧縮トレースデータと命令メモリ24に保持されているトレース取得時のプログラムの命令コードとを組み合わせてトレースデータを復元する。これにより、圧縮トレースデータとしてはプログラムにおける分岐命令及びロード/ストア命令のトレースデータを圧縮して入力するだけで、プログラム全体のトレースデータを復元して性能シミュレーションを実行することができ、シミュレーション装置10に入力するデータ量を削減することができる。以下、トレースデータの分割について説明する。一般的にプログラムの実行において出現するアドレスには局所性がある。したがって、トレースデータを複数に分割し、それぞれのトレースに対応するアドレステーブルを用意して切り替えることでトレースデータの転送に要する帯域を削減することができる。例えば、アドレスA、B、Cが頻繁に出現するトレースデータで、それぞれのアドレスの発生回数がトレースの位置によって図10Aに示すように変化していたとする。トレースデータを分割しない場合には、アドレスA、B、Cをインデックス化するため、インデックスは2ビット必要となる。それに対して、図10Aに示すトレースブロック1とトレースブロック2との2つに分割すると、トレースブロック1ではアドレスA、Cだけが頻繁に発生し、トレースブロック2ではアドレスB、Cだけが頻繁に発生することとなる。したがって、トレースブロック1及びトレースブロック2の各ブロックで、図10B、Cに示すようにテーブルを作成することで、インデックスは1ビットで済む。このように、オリジナルのトレースデータの内容に応じて分割位置を変更し、それぞれにおいてアドレステーブルを作成することで、インデックスに要するビット数を削減しデータ量を削減することができる。トレース分割の方法としては、例えば1固定幅、2関数単位、3関数深さ、4ブロック分割発生頻度、5関数単位発生頻度がある。以下、1~5の分割方法についてそれぞれ説明する。1固定幅図11は、固定幅でのトレース分割の一例を示す図である。なお、図11に例示したように、オリジナルのトレースデータは、PC、命令、アドレス、データの4つの要素からなる。PCはその命令のプログラムカウンタ値である。アドレスは、分岐命令の場合には分岐先アドレスであり、ロード/ストア命令の場合にはアクセス先アドレスである。データは、ロード/ストア命令のデータである。命令によっては、アドレスやデータのフィールドは必要ではない。その場合には、必要でないフィールドに不定値等を保持してシミュレータ側で無視したり、命令長を示すフィールドを持たせて可変長のトレースデータを入力したりするようにすれば良い。固定幅でトレース分割を行う場合には、トレースデータの内部は解析せずに、単純に所定数のトレースデータ毎に分割してアドレステーブルを作成する。2関数単位例えば、図12に示すように関数呼び出しが行われた場合の関数単位によるトレース分割について説明する。すなわち、関数<A>が最上位の関数例えばmain関数であり、その中で関数<B>及び関数<C>が呼び出されている。さらに、関数<B>の中で関数<D>が呼び出され、関数<D>の中で関数<H>が呼び出されている。また、関数<C>の中で関数<E>及び関数<F>が呼び出され、関数<E>及び関数<F>のそれぞれの中で関数<I>が呼び出されている。このような関数の呼び出し構造において、関数単位でトレース分割を行う場合には、すべての関数の境界でトレースを分割し、それぞれ分割したトレースに対してアドレステーブルを作成する。関数の境界の位置については、コンパイル時のデバック情報から取得するか、命令セットによっては、関数呼び出しやリターン命令により判断すれば良い。3関数深さ前述のように関数の境界でトレース分割を行った場合には、場合によっては分割単位が多くなりすぎ、圧縮トレースデータにおいて挿入されるテーブル切り替えの命令の数が多くなり、データ量が増加してしまうことも考えられる。それを回避するには、関数の呼び出し構造を解析して、細かくなりすぎない深さの関数境界で分割すれば良い。図13は、関数深さでのトレース分割処理の一例を示すフローチャートである。図13には、トレースデータにおける関数深さの解析に係る処理の流れを示している。トレース圧縮ツールは、オリジナルのトレースデータを1つ読み出しS501、そのプログラムカウンタ値が関数の開始Startアドレス又は終了Endアドレスに一致するか否かを判断するS502。判断の結果、プログラムカウンタ値が関数の開始アドレス又は終了アドレスに一致した場合には、トレース圧縮ツールは、トレース番号、開始Start/終了Endの種別、そのときの深さ、及び関数名を出力するS503。続いて、トレース圧縮ツールは、開始Start/終了Endの種別が開始であるか否かを判断し、開始Startである場合には深さを1増やしS505、終了Endである場合には深さを1減らすS506。そして、トレース圧縮ツールは、トレース番号を1増加してS507、ステップS501に戻り、次のトレースデータを読み出す。以上の処理を、すべてのトレースデータを読み出すまで繰り返し行う。このようにトレースデータを最初から順に読み出していき、関数の最初の位置及び最後の位置でのトレース番号、開始Start/終了Endの種別、関数深さ、及び関数名を求めることで、図14に示すような表が作成される。この表から深さ毎の関数の個数を求め、予め決めておいた閾値を超えない範囲で最も深い関数深さを決めて、その深さの関数の開始又は終了位置でトレースを分割する。例えば、1つの深さに含まれる関数の個数の閾値を5とした場合には、図12に示す例では関数深さが4であると関数の個数が6となり閾値を超えてしまうので、関数深さが3の関数の終了位置図14に示す例では関数<D>の終了位置でトレースを分割し、分割したトレース毎にアドレステーブルを作成する。4ブロック分割発生頻度図15に示すようにオリジナルのトレースデータをある程度細かい単位例えば1000個程度のトレースデータを1単位としてに分割する。この分割した単位をトレースブロックとする。そして、それぞれのトレースブロックに対して、アドレスの発生回数を求めて、トレースブロック毎のすべてのアドレスの発生回数を含む図16に示すような表を作成する。そして、最初のトレースブロックから順にアドレスの発生回数を参照していき、閾値例えば100回を超えるアドレスの数を求める。閾値を超えたアドレスの数が、予め決めておいたインデックスの数例えば3になったら、そのブロックの最後の位置を境界位置とする。例えば、図16に示した例では、閾値を100回とし、予め決めておいたインデックスの数を3とすると、トレースブロック6の最終位置、及びトレースブロック8の最終位置が分割位置として出力される。すなわち、トレースブロック1からトレースブロック6までを一群とし、トレースブロック7からトレースブロック8までを一群として、トレースの分割が行われる。図17は、前述したトレース分割位置を決定する処理の一例を示すフローチャートである。トレース圧縮ツールは、図16に一例を示した表から順にアドレスの発生回数を1つ読み出しS601、発生回数が閾値本例では100を超えており、かつ未登録未検出のアドレスである場合にはS602のno、インデックスカウントを1増やすS603。次に、トレース圧縮ツールは、インデックスカウントの値が最大値予め決めておいたインデックスの数になったか否かを判断し、最大値でない場合にはステップS601に戻る。一方、ステップS604での判断の結果、インデックスカウントの値が最大値である場合には、トレース圧縮ツールは、読み出したアドレス発生回数が含まれるトレースブロックの最後の位置をトレース分割位置として出力するS605。そして、トレース圧縮ツールは、インデックスカウントの値をクリアしS606、ステップS601に戻る。なお、アドレスの読み出しは、図16に示すように表が構成されている場合、トレースブロック1の左側から順に読み出していき、トレースブロック1の最後まで読み出したら、次のブロックトレースブロック2の左側に戻って読み出し、それを表のすべてのアドレスの回数を読み出すまで繰り返す。5関数単位発生頻度前述した4ブロック分割発生頻度による分割方法において、ブロックに相当する部分の境界を関数の境界としてトレース分割する。図12に示した例では、関数の開始及び終了を境界として分割したブロックが前述したトレースブロックに相当する。なお、前記実施形態は、何れも本発明を実施するにあたっての具体化のほんの一例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。本発明の諸態様を付記として以下に示す。付記1トレースデータに基づいてプロセッサの性能シミュレーションを行うシミュレーション装置であって、入力される圧縮トレースデータからトレースデータを復元する復元部と、前記復元部により復元されたトレースデータを用いて前記性能シミュレーションを実行するシミュレータ部とを有し、前記圧縮トレースデータの少なくとも一部はトレースデータにおけるアドレスがインデックスで示され、前記復元部は、前記インデックスと前記アドレスを対応付けるアドレステーブルを保持し、当該アドレステーブルを参照して前記インデックスからトレースデータにおけるアドレスを復元することを特徴とするシミュレーション装置。付記2前記トレースデータが分割され、分割されたトレースデータ毎に作成された複数の前記アドレステーブルを前記復元部が保持し、前記復元部は、入力される前記圧縮トレースデータに応じて、参照するアドレステーブルを切り替えることを特徴とする付記1記載のシミュレーション装置。付記3前記圧縮トレースデータは、切り替え先のアドレステーブルを指定し、参照するアドレステーブルの切り替えを指示する命令を含むことを特徴とする付記2記載のシミュレーション装置。付記4前記トレースデータを取得したプログラムの命令コードを前記復元部が保持し、前記復元部には、取得された前記トレースデータのうち、分岐命令及びロード/ストア命令に係るトレースデータだけを前記圧縮トレースデータにより入力し、前記復元部は、入力された前記圧縮トレースデータ及び保持している前記プログラムの命令コードを用いてトレースデータを復元することを特徴とする付記1~3の何れか1項に記載のシミュレーション装置。付記5プロセッサの性能シミュレーションで用いるトレースデータにおけるアドレスとインデックスとを対応付けるアドレステーブルを作成するテーブル作成ステップと、作成した前記アドレステーブルを参照し、前記トレースデータにおけるアドレスに代えて対応する前記インデックスを付加することによって圧縮トレースデータを作成するデータ作成ステップとをコンピュータに実行させるためのプログラム。付記6前記テーブル作成ステップでは、前記トレースデータを分割し、分割したトレースデータ毎に前記アドレステーブルを作成することを特徴とする付記5記載のプログラム。付記7固定幅、前記トレースデータを取得したプログラムにて呼び出す関数単位、又は関数の呼び出し構造における深さによって、前記トレースデータを分割し前記アドレステーブルを作成することを特徴とする付記6記載のプログラム。付記8所定数のトレースデータ、又は前記トレースデータを取得したプログラムにて呼び出す関数単位でトレースデータを分割してアドレスの発生回数をそれぞれ検出し、検出したアドレスの発生回数に基づいて、前記トレースデータを分割し前記アドレステーブルを作成することを特徴とする付記6記載のプログラム。付記9前記トレースデータを、トレースデータにおけるアドレスの発生回数によって分割することを特徴とする付記6記載のプログラム。