"パイプライン処理を制御するターゲットプロセッサに対するプログラムの命令実行のシミュレーションを実行するシミュレーション装置であって,前記プログラムのコードを所定のブロックに分割し,前記ブロックに含まれる命令のうち,該命令の実行結果が外部環境に依存する外部依存命令の処理の実行結果を予測結果として設定する処理と,前記予測結果を前提とする命令実行の機能シミュレーションを行い,前記ブロックに含まれる命令の実行タイミングを示すタイミング情報を得て,前記機能シミュレーションの結果と前記タイミング情報とをもとに,前記予測結果での外部依存命令の実行時間を算出する処理と,前記機能シミュレーションの結果をもとに,前記予測結果を前提とする命令実行の性能シミュレーションを,前記ターゲットプロセッサを動作させるホストプロセッサに実行させるホストコードを生成する処理とを行うコード変換部と,前記ホストプロセッサが前記生成されたホストコードを実行した実行結果において,該ホストコードに含まれる外部依存命令の実行結果が前記予測結果と異なる場合に,該外部依存命令の所定の遅延時間と前記外部依存命令の前後に実行される命令の実行時間とを用いて求めた補正値で,前記予測結果での外部依存命令の実行時間を補正して,前記機能シミュレーションでの該外部依存命令の実行時間とするシミュレーション実行部とを,備えることを特徴とするシミュレーション装置。前記シミュレーション実行部は,前記外部依存命令の次に実行される次命令の実行時間が,前記外部依存命令に付加される遅延時間を超えない場合に,前記次命令の実行時間を前記補正値として前記外部依存命令の遅延時間から減算する処理を行うことを特徴とする請求項1に記載のシミュレーション装置。前記コード変換部は,前記ターゲットプロセッサを動作させるホストプロセッサに実行させるホストコードを生成する処理において,前記ブロックに含まれる命令のうち,該命令の実行時間の計算に直前の命令の実行時間が必要な命令を検出し,該検出した命令のみについて実行時間を計算するホスト命令を含むホストコードを生成することを特徴とする請求項1または請求項2に記載のシミュレーション装置。前記ホストコードの命令セットの各命令の1実行当たりの消費電力量を定めた電力情報を得て,前記電力情報と前記機能シミュレーションの結果とをもとに,前記ブロックの実行時の電力シミュレーション情報を求める電力シミュレーション情報生成部を備えることを特徴とする請求項1ないし請求項3のいずれか一項に記載のシミュレーション装置。パイプライン処理を制御するターゲットプロセッサに対するプログラムの命令実行のシミュレーションを実行するシミュレーション方法であって,ホストCPUが,前記プログラムのコードを所定のブロックに分割し,前記ブロックに含まれる命令のうち,該命令の実行結果が外部環境に依存する外部依存命令の処理の実行結果を予測結果として設定する処理過程と,前記予測結果を前提とする命令実行の機能シミュレーションを行い,前記ブロックに含まれる命令の実行タイミングを示すタイミング情報を得て,前記機能シミュレーション結果と前記タイミング情報とをもとに,前記予測結果での外部依存命令の実行時間を算出する処理過程と,前記機能シミュレーション結果をもとに,前記予測結果を前提とする命令実行の性能シミュレーションを,前記ターゲットプロセッサを動作させるホストプロセッサに実行させるホストコードを生成する処理過程と,前記ホストプロセッサが前記生成されたホストコードを実行した実行結果において,該ホストコードに含まれる外部依存命令の実行結果が前記予測結果と異なる場合に,該外部依存命令の所定の遅延時間と前記外部依存命令の前後に実行される命令の実行時間とを用いて求めた補正値で,前記予測結果での外部依存命令の実行時間を補正して,前記機能シミュレーションでの該外部依存命令の実行時間とする処理過程とを,実行することを特徴とするシミュレーション方法。前記ホストコードを生成する処理過程において,前記ブロックに含まれる命令のうち,該命令の実行時間の計算に直前の命令の実行時間が必要な命令を検出し,該検出した命令のみについて実行時間を計算するホスト命令を含むホストコードを生成することを特徴とする請求項5に記載のシミュレーション方法。パイプライン処理を制御するターゲットプロセッサに対するプログラムの命令実行のシミュレーションを実行させるためのシミュレーションプログラムであって,ホストCPUに,前記プログラムのコードを所定のブロックに分割し,前記ブロックに含まれる命令のうち,実行結果が外部環境に依存する外部依存命令の処理の実行結果を予測結果として設定する処理と,前記予測結果を前提とする命令実行の機能シミュレーションを行い,前記ブロックに含まれる命令の実行タイミングを示すタイミング情報を得て,前記機能シミュレーション結果と前記タイミング情報とをもとに,前記予測結果での外部依存命令の実行時間を算出する処理と,前記機能シミュレーション結果をもとに,前記予測結果を前提とする命令実行の性能シミュレーションを,前記ターゲットプロセッサを動作させるホストプロセッサに実行させるホストコードを生成する処理と,前記ホストプロセッサが前記生成されたホストコードを実行した実行結果において,該ホストコードに含まれる外部依存命令の実行結果が前記予測結果と異なる場合に,該外部依存命令の所定の遅延時間と前記外部依存命令の前後に実行される命令の実行時間とを用いて求めた補正値で,前記予測結果での外部依存命令の実行時間を補正して,前記機能シミュレーションでの該外部依存命令の実行時間とする処理とを,実行させることを特徴とするシミュレーションプログラム。前記ホストコードを生成する処理において,前記ブロックに含まれる命令のうち,該命令の実行時間の計算に直前の命令の実行時間が必要な命令を検出し,該検出した命令のみについて実行時間を計算するホスト命令を含むホストコードを生成することを特徴とする請求項7に記載のシミュレーションプログラム。上記のように,パイプライン処理やアウトオブオーダ処理を制御するCPUに対する機能,性能,電力のシミュレーションにインタープリタ方式を採用する場合,一般的に,処理速度が非常に遅くなり,現実的な手法として活用できないという問題があった。また,昨今の高速なCPUの場合,機能シミュレーションにJITコンパイラ方式を採用した場合に,なんとか実用的な速度で処理が行える。しかし,性能や電力のシミュレーションにJITコンパイラ方式を採用した場合に,ターゲットCPUではパイプラインの制御により処理の前後の状況は多様であり,内部状態に対応した膨大なシミュレーション用コードの追加とその命令実行が必要なため,処理負担が非常に大きいものとなる。さらに,性能シミュレーションで,ターゲットCPUで見込まれる実行遅延に対するタイミングの適応を行うためにも,ホストコードに膨大なシミュレーション用コードを追加する必要がある。例えば,ロード命令LD:loadのサイクルシミュレーションを実行する際に,この命令によるキャッシュアクセスで,キャッシュミスまたはキャッシュヒットのどちらが生じるか,キャッシュミスの場合に全タイミングを計上し,考慮するべきペナルティサイクルがあるかなどを調べるために,これらの条件記述をホストコードに追加する必要がある。しかし,一方で,高い動作性を維持するために,機能コードに追加される性能シミュレーションサイクルシミュレーション用のコード量をできる限り抑制する必要がある。本発明は,高速なシミュレーションを行える技術を提供することを目的とする。本発明の一態様として開示するシミュレーション装置は,パイプライン処理を制御するターゲットプロセッサに対するプログラムの命令実行のシミュレーションを実行するシミュレーション装置であって,1前記プログラムのコードを所定のブロックに分割し,前記ブロックに含まれる命令のうち,該命令の実行結果が外部環境に依存する外部依存命令の処理の実行結果を予測結果として設定する処理と,前記予測結果を前提とする命令実行の機能シミュレーションを行い,前記ブロックに含まれる命令の実行タイミングを示すタイミング情報を得て,前記機能シミュレーションの結果と前記タイミング情報とをもとに,前記予測結果での外部依存命令の実行時間を算出する処理と,前記機能シミュレーションの結果をもとに,前記予測結果を前提とする命令実行の性能シミュレーションを,前記ターゲットプロセッサを動作させるホストプロセッサに実行させるホストコードを生成する処理とを行うコード変換部と,2前記ホストプロセッサが前記生成されたホストコードを実行した実行結果において,該ホストコードに含まれる外部依存命令の実行結果が前記予測結果と異なる場合に,該外部依存命令の所定の遅延時間と前記外部依存命令の前後に実行される命令の実行時間とを用いて求めた補正値で,前記予測結果での外部依存命令の実行時間を補正して,前記機能シミュレーションでの該外部依存命令の実行時間とするシミュレーション実行部とを,備える。また,本発明の別の一態様として開示するシミュレーション方法は,前記シミュレーション装置が実行する各処理ステップを備えるものである。さらに,本発明の別の一態様として開示するシミュレーションプログラムは,コンピュータに,前記シミュレーション方法を実行させるためのものである。開示されたシミュレーション装置によれば,高速にシミュレーションを行うことが可能となる。図1は,本発明の一実施態様として開示するシミュレーション装置の一実施形態における構成例を示す図である。シミュレーション装置1は,パイプライン処理を制御するターゲットCPUにおける命令実行の性能シミュレーションを実行する装置である。ターゲットCPUは,シミュレーションの対象となるCPUの制御モデルである。シミュレーション装置1は,ターゲットCPUの命令実行の性能シミュレーションとして各命令のサイクルシミュレーション情報を出力する。ここで,ターゲットCPUは,例えばARMアーキテクチャのCPUである。ホストCPUに相当するシミュレーション装置1は,例えばX86アーキテクチャのCPUを搭載するコンピュータである。シミュレーション装置1は,コード変換部11とシミュレーション実行部12とシミュレーション情報収集部13とを有する。コード変換部11は,ターゲットCPUのプログラムの実行時に,ターゲットCPUが実行するプログラムのコードターゲットコードから,シミュレーションを実行するホストCPUのコードホストコードを生成する処理部である。コード変換部11は,ブロック分割部111,予測シミュレーション実行部113,コード生成部115を有する。ブロック分割部111は,シミュレーション装置1に入力されたプログラムのターゲットコードを,所定のブロックに分割する。分割されるブロック単位は,例えば,一般的なベーシックブロック分岐から次の分岐前までのコード単位でよく,または,予め定められた任意のコード単位でよい。図2は,ブロックに含まれる命令の例を示す図である。図2に示すように,あるブロックには,ターゲットコードの3つの命令;1LDr1,r2ロード;2MULTr3,r4,r5乗算;3ADDr2,r5,r6加算の命令が含まれ,1~3の順でターゲットCPUのパイプラインに投入されて実行されるとする。各命令のr1~r6は,レジスタアドレスを表す。予測シミュレーション実行部113は,タイミング情報3と予測情報4とを得て,入力されたブロックをある実行結果を前提とした条件下で実行する性能シミュレーションを行う処理部である。タイミング情報3は,ターゲットコードの各命令について,命令実行時の各処理要素段階と使用可能なレジスタとの対応を示す情報と,命令のうち外部依存命令ごとに,実行結果に応じた遅延時間を定めるペナルティ時間ペナルティサイクル数とを示す情報である。外部依存命令は,外部環境が関係する処理を行う命令,例えば,ロード命令またはストア命令などのように,命令の実行結果がターゲットCPU外の外部環境に依存するような処理,例えば,命令キャッシュ,データキャッシュ,TLB検索などであったり,さらには,分岐予測,コール/リターンのスタックなどの処理を行う命令である。図3は,タイミング情報3の例を示す図である。図3に示すタイミング情報3では,LD命令について,ソースレジスタrs1r1は1番目の処理要素e1で,宛先レジスタrdr2は2番目の処理要素e2で使用可能であることを表す。また,MULT命令では,第1ソースレジスタrs1r3は1番目の処理要素e1,第2ソースレジスタrs2r4は2番目の処理要素e2,宛先レジスタrdr5は3番目の処理要素e3で,それぞれ使用可能であることを示す。また,ADD命令では,第1ソースレジスタrs1r2,第2ソースレジスタrs2r5は1番目の処理要素e1,宛先レジスタrdr6は2番目の処理要素e2で使用可能であることを示す。図4は,図2に示すブロックの各命令の実行タイミング例を示す図である。図3に示すタイミング情報3から,パイプラインに各命令が投入されるタイミングは,LD命令の実行開始がタイミングtとすると,MULT命令はタイミングt1,ADD命令はタイミングt2となる。ADD命令の第1ソースレジスタr2と第2ソースレジスタr5は,LD命令とMULT命令で使用されているため,ADD命令の開始は,LD命令とMULT命令の実行完了のタイミングt4以降となり,2サイクル分の待機時間2サイクル分のストールが生じる。したがって,図4Aに示すように,図2に示すブロックをシミュレーションした場合に,LD命令の実行結果がキャッシュヒットであるケースでは,ブロックの実行時間が6サイクルであることがわかる。図4Bは,図2に示すブロックのLD命令の実行結果がキャッシュミスである場合のタイミング例を表す。LD命令の結果がキャッシュミスであると,タイミング情報3に,ペナルティとして,再実行に十分と考えられる任意の時間ここでは6サイクル分が設定されているため,このペナルティサイクルが遅延時間として追加される。したがって,2番目の処理要素e2の実行は,タイミングt7に遅延する。LD命令の次に実行されるMULT命令は,遅延の影響を受けずにそのまま実行されるが,ADD命令は,LD命令の実行完了のタイミングt8以降となり,4サイクル分の待機時間4サイクル分のストールが生じる。したがって,図4Bに示すように,図2に示すブロックの命令実行をシミュレーションした場合に,LD命令の実行結果がキャッシュミスであるケースでは,実行時間が10サイクルとなることがわかる。予測情報4は,ターゲットコードの外部依存命令の処理において,生じる確率が高い実行結果予測結果を定めた情報である。予測情報には,例えば,命令キャッシュ:予測=ヒット,データキャッシュ:予測=ヒット,TLB検索:予測=ヒット,分岐予測:予測=ヒット,コール/リターン:予測=ヒット,...が定められる。予測シミュレーション実行部113は,上記の予測情報4をもとに,入力されたブロックに含まれる外部依存命令の予測結果を設定し,タイミング情報3を参照して,設定した予測結果を前提とする場合予測ケースの命令を実行して,命令実行の進み具合をシミュレーションする。予測シミュレーション実行部113は,シミュレーション結果として,ブロックに含まれる各命令の実行時間所要サイクル数を求める。コード生成部115は,予測シミュレーション実行部113のシミュレーション結果をもとに,処理したブロックに対応するホストコードとして,設定された予測ケースにおける命令実行時の性能シミュレーションを行うためのホストコード性能シミュレーション用ホストコードを生成する処理部である。コード生成部115は,ブロックのターゲットコードをもとに,外部依存命令が予測結果である予測ケースの場合の命令実行を行うホストコードを生成し,さらに,各命令の実行時間を加算して,ブロックの処理時間を計算する処理を行うシミュレーション用コードを組み込む。例えば,コード生成部115は,データのLD命令の予測結果としてキャッシュヒットが設定されている処理については,そのブロック内のLD命令によるキャッシュアクセスがヒットである場合の処理実行をシミュレーションして,この予測ケースでの実行時間を求め,LD命令によるキャッシュアクセスがミスである場合の実行時間は,予測ケースであるヒット時の実行時間の加算/減算を用いた補正計算により求める処理を行うホストコードを生成する。シミュレーション実行部12は,コード生成部115が生成したホストコードを実行して,プログラムターゲットコードを実行するターゲットCPUの命令実行の機能および性能シミュレーションを行う処理部である。シミュレーション実行部12は,コード実行部121,補正部123を有する。コード実行部121は,ホストコードを用いて,プログラムターゲットコードを実行する処理部である。補正部123は,プログラムの実行中に,外部依存命令の実行結果が,設定されていた予測結果と異なる場合予測外ケースに,その命令の実行時間を,既に求めた予想ケースでの実行時間を補正して求める処理部である。補正部123は,外部依存命令に与えられるペナルティ時間,外部依存命令の前後で実行される命令の実行時間,1つ前の命令の遅延時間などを用いて補正を行う。なお,補正処理の詳細は後述する。シミュレーション情報収集部13は,性能シミュレーションの実行結果として,各命令の実行時間を含むログ情報シミュレーション情報5を収集する処理部である。以下に,第1の実施例におけるシミュレーション装置1の処理の流れを説明する。コード変換処理1シミュレーション装置1のコード変換部11のブロック分割部111は,ターゲットプログラム2のターゲットコードを得て記憶部図1に図示しないに保持し,保持したターゲットコードを任意のブロックに分割する図2参照。2予測シミュレーション実行部113は,入力されるターゲットプログラム2に関するタイミング情報3,予測情報4を得て記憶部に保存する。そして,予測シミュレーション実行部113は,予測情報4をもとに,分割されたブロックの外部依存命令のそれぞれについて予測結果を設定する。例えば,予測シミュレーション実行部113は,図2に示すブロックの命令のうち,LD命令のデータキャッシュの予測結果としてヒットを設定する。3予測シミュレーション実行部113は,ブロックのコードを解釈して,設定された予測結果を前提とする場合の命令実行をシミュレーションする。すなわち,予測シミュレーション実行部113は,図4Aに示すタイミング例の命令実行をシミュレーションすることになる。4次に,コード生成部115は,予測ケースのシミュレーション結果をもとに,ターゲットコードからホストコードを生成する。さらに,コード生成部115は,ターゲットコードから変換したホストコード機能コードのみに,性能シミュレーションサイクルシミュレーションを実行するためのサイクルシミュレーション用コードを組み込む。図5Aは,ターゲットコードから機能シミュレーションのホストコードが生成される例を示す図,図5Bは,機能シミュレーションのホストコードに,サイクルシミュレーション用コードが組み込まれる例を示す図である。図5Aに示すように,ターゲットコードInst_Aは,ホストコードHost_Inst_A0_func,Host_Inst_A1_funcに変換され,ターゲットコードInst_Bは,ホストコードHost_Inst_B0_func,Host_Inst_B1_func,Host_Inst_B2_func,...に変換されて,機能コードのみのホストコードが生成される。さらに,機能コードのみのホストコードに,ターゲットコードInst_Aのサイクルシミュレーション用コードHost_Inst_A2_cycle,Host_Inst_A3_cycleが,ターゲットコードInst_Bのサイクルシミュレーション用コードHost_Inst_B4_cycle,Host_Inst_B5_cycleが,それぞれ組み込まれる。サイクルシミュレーション用コードは,各命令の実行時間所要サイクル数を定数化し,各命令の実行時間を合計してブロックの処理時間を求めるコードである。これにより,ブロック実行中の進み具合を示す情報を得ることができる。ここで,ホストコードのうち,機能コード,外部依存命令以外の命令についてのサイクルシミュレーション用コードは既知のコードを使用して実施できるので,具体例の説明を省略する。外部依存命令についてのサイクルシミュレーション用コードは,補正処理を呼び出すヘルパー関数として用意される。ヘルパー関数については後述する。シミュレーション処理1シミュレーション実行部12のコード実行部121は,コード変換部11が生成したホストコードを用いて,ターゲットプログラム2の性能シミュレーションを行う。コード実行部121は,ターゲットプログラム2の命令実行をシミュレーションし,各命令の実行時間を得ていく。2コード実行部121は,シミュレーションの実行中に,外部依存命令例えばLD命令を検出した場合に,その実行結果が,設定された予測結果と異なっているかを判定し,実行結果が予測結果と違っている場合に,補正部123の起動を要求する。例えば,命令LD,r1,r2を検出し,データキャッシュの予測結果キャッシュヒットと,実際の実行結果キャッシュミスとが異なっていた場合に,補正部123が呼び出される。3補正部123は,呼び出しを受けて起動し,検出された命令LD,r1,r2の実行時間サイクル数を補正する。さらに,補正部123は,この補正により,次命令の実行タイミングtnも変更する。補正部123は,外部依存命令の実行結果が予測結果と異なる度に,命令の実行時間を補正する。ここで,予測ケースでの外部依存命令の実行時間は既に定数化されているため,補正部123は,予測外ケースでの外部依存命令の実行時間を,その命令に対するペナルティ時間,前後に実行される命令の実行時間,前に処理された命令の遅延時間等の値を単に加算または減算して計算することができる。図6は,補正部123の処理動作を示す図である。補正部123は,ヘルパー関数モジュールとして実施される。本実施形態では,例えば,LD命令のキャッシュの実行結果ごとにシミュレーションを行う従来の関数cache_ldaddressの代わりに,ヘルパー関数cache_ldaddress,rep_delay,pre_delayがホストコードに組み込まれることにより,実現している。ヘルパー関数のrep_delayは,このロードld命令の返り値を使用する次の命令の実行までに,ペナルティ時間のうち遅延時間として処理されなかった時間猶予時間である。pre_delayは,1つ前の命令から受ける遅延時間である。-1は,前の命令に遅延がないことを示す。rep_delayとpre_delayは,性能シミュレーション結果とタイミング情報3との静的分析処理の結果から得られる時間情報である。図6に示す動作例では,補正部123は,現タイミングcurrent_timeと1つ前のld命令の実行タイミングpreld_timeとの差が,1つ前のld命令の遅延時間分pre_delayを超えているときは,1つ前のld命令の実行タイミングpreld_timeと現タイミングcurrent_timeまでの時間で遅延時間pre_delayを調整して有効遅延時間avail_delayを求める。次に,補正部123は,実行結果がキャッシュミスであれば,予測結果の誤りであり,有効遅延時間avail_delayにキャッシュミス時のペナルティ時間cache_miss_latencyを加算して,猶予時間rep_delayをもとに,LD命令の実行時間を補正する。図7~図9は,補正部123のLD命令の実行結果に対する補正例を示す図である。図7は,1つのキャッシュ処理が実行されるケースで1つのキャッシュミスが生じた場合の補正例を説明するための図である。図7の例では,以下の3命令のシミュレーションが実行される。ld[r1],r2:[r1]→r2;multr3,r4,r5:r3r4→r5;addr2,r5,r6:r2r5→r6図7Aは,予測結果がキャッシュヒットの場合の命令実行タイミングのチャート例を示す図である。この予測ケースにおいて,3番目に実行されるadd命令に,2サイクルストールが生じている。図7Bは,予測結果と異なるキャッシュミスの場合の命令実行タイミングのチャート例を示す図である。この予測ミスのケースでは,ld命令の実行結果がキャッシュミスであると,ペナルティサイクル6サイクル分の遅延が生じる。そのため,mult命令は,遅延の影響を受けずに実行されるが,add命令の実行は,ld命令の完了を待つため,4サイクル分遅延することになる。図7Cは,補正部123による補正後の命令実行タイミングチャートの例を示す図である。補正部123は,ld命令の実行結果がキャッシュミスであるので予測結果のミス,残りの実行時間2-1=1サイクルに所定のキャッシュミス時のペナルティ時間6サイクルを加算して有効遅延時間7サイクルとする。有効遅延時間は,最大の遅延時間となる。さらに,補正部123は,次のmult命令の実行時間3サイクルを得て,次命令の実行時間が遅延時間を超過しないと判定して,有効遅延時間から次命令の実行時間を差し引いた時間7-3=4サイクルを,ld命令の遅延が生じた実行時間遅延時間とする。また,補正部123は,有効遅延時間から上記の遅延時間を差し引いた時間3サイクルを猶予時間とする。猶予時間は,ペナルティとしての遅延が猶予された時間である。補正部123は,ヘルパー関数cache_ldaddr,rep_delay,pre_delayで,猶予時間rep_delay=3,前命令の遅延時間pre_delay=-1遅延なしを返す。この補正により,ld命令の実行時間は,実行された時間と遅延時間を加算した実行時間14=5サイクルとなり,実行完了のタイミングt1から,後続のmult命令,add命令の実行時間が計算される。すなわち,補正したld命令の実行時間5サイクルに,予測シミュレーション実行部113の処理結果予測結果による予測シミュレーションの結果で求められていたmult命令とadd命令の各々の実行時間3サイクル,3サイクルを単純に加算するだけで,このブロックの実行時間サイクル数を得ることができる。よって,実行結果が予測と異なる命令の実行時間のみを加算または減算による補正処理を行って,その他の命令については,予測結果にもとづくシミュレーション時に求められた実行時間を加算するだけで,高精度に,キャッシュミス時のシミュレーションの実行サイクル数をも求めることができる。図7Dは,シミュレーション装置1の処理と比較するために,従来技術によるキャッシュミス時のサイクル数を単純な加算により求めた場合の誤差の大きさを示す図である。図7Dの場合には,ld命令の遅延時間をそのまま加算しているため,実際には,ld命令の実行中に実行が完了するmult命令の実行タイミングのずれによる誤差が生じていることがわかる。図8は,2つのキャッシュ処理が実行されるケースで2つのキャッシュミスが生じた場合の補正例を説明するための図である。図8の例では,以下の5命令のシミュレーションが実行される。ld[r1],r2:[r1]→r2;ld[r3],r4:[r3]→r4;multr5,r6,r7:r5r6→r7;addr2,r4,r2:r2r4→r2;addr2,r7,r2:r2r7→r2図8Aは,2つのキャッシュ処理での予測結果がキャッシュヒットの場合の命令実行タイミングのチャート例を示す図である。この予測ケースでは,2つのld命令が,2サイクル分通常の1サイクル付加した1サイクルをあけて実行されるものとする。図8Bは,2つのキャッシュ処理の両方が予測結果と異なるキャッシュミスの場合の命令実行タイミングのチャート例を示す図である。この予測ミスのケースでは,2つのld命令のそれぞれでキャッシュミスがあり,ペナルティサイクル6サイクル分の遅延が生じる。しかし,2つのld命令の遅延時間は重なる時間があり,mult命令も,遅延の影響を受けずに実行され,2つのadd命令の実行が2つめのld命令の完了まで遅延することになる。図8Cは,補正部123による補正後の命令実行タイミングチャートの例を示す図である。補正部123は,図7を用いて説明したように,タイミングt0において,1つめのld命令の遅延時間を補正し,ヘルパー関数cache_ldaddr,3,-1を返す。次に,現タイミングt1において,補正部123は,2つめのld命令の実行結果がキャッシュミスであるので予測結果のミス,このld命令の残りの実行時間にペナルティサイクル6を追加して有効遅延時間16=7サイクルとする。補正部123は,有効遅延時間から,現タイミングt1までに消費した遅延時間<現タイミングt1-前命令の実行タイミングt0>-設定された間隔を差し引いて,現タイミングt1から超過した有効遅延時間を求め7-6-2=3サイクル,この超過した有効遅延時間を,2つめのld命令の実行時間とする。さらに,補正部123は,超過した有効遅延時間から本来の実行時間を差し引いて3-1=2サイクル,前命令の遅延時間とする。また,補正部123は,有効遅延時間から,現タイミングt1までに消費した遅延時間と現タイミングt1で超過した有効遅延時間との合計を差し引いて7-33=1サイクル,猶予時間とする。補正部123は,タイミングt1において,2つめのld命令の遅延時間を補正した後,ヘルパー関数cache_ldaddr,2,1を返す。この補正により,現タイミングt1に補正値3サイクルを付加したタイミングがld命令の実行完了のタイミングとなり,そのタイミングから,以降のmult命令,add命令の実行時間が加算されていくことになる。図8Dは,シミュレーション装置1の処理と比較するために,従来技術によるキャッシュミス時のサイクル数を単純な加算により求めた場合の誤差の大きさを示す図である。図8Dの場合には,2つのld命令それぞれに与えられたペナルティにもとづく遅延時間をそのまま加算しているため,大きな誤差9サイクルが生じていることがわかる。図8Cに示す補正部123の処理でも,図8Bに示すように正しくシミュレーションされる場合に比べて誤差1サイクルがあるが,従来手法に比べて,非常に高精度に求められることがわかる。図9は,2つのキャッシュ処理が実行されるケースで1つのキャッシュミスが生じた場合の補正例を説明するための図である。図9の例では,図8で示す説明例と同様の5つの命令のシミュレーションが実行される。図9Aは,2つのキャッシュ処理での予測結果がキャッシュヒットの場合の命令実行タイミングのチャート例を示す図である。この予測ケースでは,図8Aの場合と同様に,2つのld命令が,2サイクル分通常の1サイクル付加した1サイクルをあけて実行されるものとする。図9Bは,1つめのld命令が予測結果と異なるキャッシュミスとなり,2つめのld命令の結果が予測結果キャッシュヒットである場合の命令実行タイミングのチャート例を示す図である。この予測ミスのケースでは,2つのld命令のそれぞれにペナルティサイクル6サイクル分の遅延が生じる。しかし,2つのld命令の遅延時間は重なる時間があり,mult命令も,遅延の影響を受けずに実行され,2つのadd命令の実行が2つめのld命令の完了まで遅延することになる。図9Cは,補正部123による補正後の命令実行タイミングチャートの例を示す図である。補正部123は,図7を用いて説明したように,タイミングt0において,1つめのld命令の遅延時間を補正し,ヘルパー関数cache_ldaddr,3,-1を返す。次に,現タイミングt1において,補正部123は,2つめのld命令の実行結果がキャッシュヒットであるので予測結果,このld命令の実行開始から現タイミングt1までの時間<t1-t0-設定された間隔6-0-2=4サイクル>が,このld命令の実行時間2サイクルより大きいかを判断する。補正部123は,2つめのld命令の実行開始から現タイミングt1までの時間が,このld命令の実行時間2サイクルより大きいので,現タイミングt1を,次のmult命令の実行タイミングとする。そして,補正部123は,2つめのld命令の実行完了から現タイミングt1までの時間を2サイクル,次の命令に対する遅延時間として扱い,前命令の遅延時間pre_delay=2とする。また,補正部123は,1つめのld命令の有効遅延時間から,現タイミングt1までに消費した遅延時間と現タイミングt1で超過した有効遅延時間との合計を差し引いて7-60=1サイクル,猶予時間rep_delay=1とし,ヘルパー関数cache_ldaddr,1,2を返す。図9Dは,シミュレーション装置1の処理と比較するために,従来技術によるキャッシュミス時のサイクル数を単純な加算により求めた場合の誤差の大きさを示す図である。図9Dの場合には,1つめのld命令のペナルティによる遅延時間をそのまま加算しているため誤差が生じていることがわかる。図10は,第1の実施例におけるシミュレーション装置1のコード変換部11の概要処理フロー図である。シミュレーション装置1において,コード変換部11のブロック分割部111は,ターゲットプログラムのコードターゲットオードを所定の単位のブロックに分割して入力するステップS1。予測シミュレーション実行部113は,ブロックの命令を分析して,外部依存命令を検出してステップS2,検出した全ての命令について,予測情報4をもとに,確率が高い実行結果を予測ケースとして決定するステップS3。さらに,予測シミュレーション実行部113は,タイミング情報3を参照して,ブロックの各命令について予測結果として設定された実行結果を前提とする性能シミュレーションを実行するステップS4。コード生成部115は,シミュレーション結果をもとに,シミュレーション実行部12が実行する性能シミュレーション用ホストコードを生成するステップS5。以上のステップS1~S5の処理により,設定された実行結果の場合予測ケースでの機能コードに,ターゲットCPUの性能をシミュレーションするコードが組み込まれたホストコードが出力される。図11は,第1の実施例におけるシミュレーション装置1のシミュレーション実行部12の概要処理フロー図である。シミュレーション装置1において,シミュレーション実行部12のコード実行部121は,コード生成部115が生成したホストコードを実行し,性能シミュレーションを行うステップS10。コード実行部121は,実行中に外部依存命令を検出するとステップS11,その命令の実行結果が予測結果として設定されたものと同じであるかを判定するステップS12。外部依存命令の実行結果が設定された予測結果と同じではない場合にのみステップS12のN,補正部123が呼び出され,補正部123は,その外部依存命令の実行時間を補正するステップS13。そして,シミュレーション情報収集部13は,ターゲットプログラムに相当するホストコード全てのシミュレーション処理についてのシミュレーション情報5を出力するステップS14。以上のステップS10~S14の処理ステップにより,ターゲットプログラム2を実行するターゲットCPUのシミュレーション情報サイクルシミュレーション情報5が出力される。図12は,外部依存命令の一例として,ロードld命令の処理についての予測結果の判定および補正の処理フロー例を示す図である。コード実行部121は,処理中のブロックの命令から,外部依存命令を検出すると,補正部123に相当するヘルパー関数を呼び出すステップS20。コード実行部121は,ld命令で,キャッシュアクセスが要求されているかを判定しステップS21,キャッシュアクセスが要求されていればステップS21のY,キャッシュアクセスをシミュレーションするステップS22。キャッシュアクセスの結果がキャッシュミスであればステップS23のミス,補正部123は,ld命令の実行時間サイクル数の補正を行いステップS24,補正された実行時間サイクル数を出力するステップS25。ステップS21で,キャッシュアクセスが要求されていない場合ステップS21のN,または,要求されたキャッシュアクセスがキャッシュヒットであればステップS23のヒット,補正部123は,未補正の予測された実行時間サイクル数を出力するステップS26。次に,第2の実施例におけるシミュレーション装置1の処理の流れを説明する。第1の実施例において,シミュレーション装置1のコード変換部11は,ターゲットコードから外部依存命令を検出して,ヘルパー関数を呼び出すホスト命令を含む性能シミュレーション用コードを生成している。すなわち,コード変換部11では,ターゲットコードの外部依存命令以外の命令については,既知の性能計算用ホストコードを作成する。既知の性能計算用ホストコードは,以下の3つのホスト命令を含むものである。性能計算命令1:現在の性能値実行時間をメモリから読み込む,性能計算命令2:対象の命令の性能値を加算する,性能計算命令3:結果をメモリに書き込む図13は,ターゲットプログラムの命令と変換後のホストプログラムのホスト命令数との関係を示す図である。図13Aに示すターゲットプログラムにおいて,命令i0,i1,i2の3命令があり,命令i2が外部依存命令であるとする。この場合に,第1の実施例では,図13Bに示す変換後のホストプログラムにおいて,ターゲットの命令i0,i1については,ターゲットの命令を変換したホスト命令機能コードと性能計算命令1~3の合計4命令を含むホストコードが生成される。また,命令i2については,機能コードホスト命令1,2と,第1の実施例で説明した処理による性能計算命令ヘルパー関数を含む性能シミュレーション用コードが生成される。したがって,外部依存命令以外の命令に対応するホストコード内では,性能シミュレーション用の性能計算命令数が,ターゲットの命令の機能に対応するホスト命令数より多くなり,性能シミュレーションの実行時間において性能計算に要する時間の方が支配的となっていることがわかる。第2の実施例では,シミュレーション装置1のコード変換部11において,ターゲットコードから,性能計算において直前の命令の性能値が必要となるような種類の命令以下,コード生成対象命令を検出し,検出したコード生成対象命令に対してのみ,性能計算命令を含むホストコードシミュレーション用コードを生成する。そして,コード生成対象命令以外の命令については,その命令の性能値を記録する。コード生成対象命令は,例えば,外部依存命令LD命令,STストア命令など,CPUアーキテクチャにもとづいて提供される性能情報取得命令x86のtscレジスタ読み込み命令,ARMのサイクルカウントレジスタ読み込み命令などである。さらに,第2の実施例では,シミュレーション装置1のコード変換部11において,ユーザに指定された,ターゲットプログラムの性能値を測定したい範囲以下,トレース範囲とするを受け付け,トレース範囲に含まれる命令についてのみ性能シミュレーション用コードを生成する。コード変換部11では,トレース範囲内の命令についてコード生成対象命令を検出し,コード生成対象命令については性能計算命令を組み込んだホストコードを生成する。この場合には,シミュレーション装置1のコード変換部11は,ユーザによって指定されたトレース範囲を示す情報を保持する。トレース範囲を示す情報には,関数,ターゲットのプログラム,システムコールなどを範囲単位として,ユーザによって指定された範囲の[開始アドレス,終了アドレス]が含まれる。さらに,コード変換部11は,シミュレーションの開始前または実行中に,トレース範囲の指定を受け付け,受け付けたトレース範囲を保持し,または保持するトレース範囲の[開始アドレス,終了アドレス]を更新することができる。また,コード変換部11は,予めトレース範囲を保持しておき,シミュレーション中のユーザ操作によって,トレース範囲を有効にする指定を受け付けることができる。コード生成部115は,シミュレーションの開始時に保持しているトレース範囲の指定を無効に設定し,トレース範囲の有効の指示を受け付けた時点で,トレース範囲の指定を有効に変更して,トレース範囲に含まれる命令からコード生成対象命令を検出するようにする。第2の実施例で,シミュレーション装置1のコード変換部11によるコード変換処理の一部のみが第1の実施例の処理と相違する。そこで,以下の説明では,シミュレーション装置1の処理のうち,第1の実施例と相違する処理ついてのみ説明し,同様の他の処理およびシミュレーション処理については説明を省略する。第2の実施例において,シミュレーション装置1のコード変換部11は,コード生成対象命令を特定する検出用情報を予め保持しているものとする。検出用情報には,コード生成対象命令となる命令種が記述されている。検出用情報に外部依存命令または性能情報取得命令が示されている場合には,コード変換部11の予測シミュレーション実行部113は,ブロック分割部111によって分割されたターゲットプログラムのブロックから,検出用情報をもとに,コード生成対象命令を検出する。そして,コード生成部115は,コード生成対象命令以外の命令について,その命令の機能を変換したホスト命令機能コードを含むホストコードを生成し,その命令の実行時間所要サイクル数を記録する。コード生成部115は,コード生成対象命令について,その命令の機能を変換したホスト命令機能コードと,性能計算命令を含むホストコードを生成する。生成されるホストコードには,例えば以下のようなホスト命令が含まれる。性能計算命令1:現在の性能値実行時間を読み込む,性能計算命令2:命令i2の前の命令i0,i1の記録された性能値実行時間を加算する,性能計算命令3:性能値を更新する,性能計算命令4:命令i2に対するヘルパー関数を呼び出し,命令i2の実行時間を性能値に加算する。図14は,第2の実施例におけるシミュレーション装置1のコード変換部11の概要処理フロー図である。シミュレーション装置1において,コード変換部11のブロック分割部111は,ターゲットプログラムのコードを所定の単位のブロックに分割して入力するステップS31。予測シミュレーション実行部113は,ブロックの命令を分析して,コード生成対象命令を検出するステップS32。コード生成部115は,検出したコード生成対象命令に対して,性能計算命令を組み込んだホストコードを生成するステップS33。シミュレーション装置1のコード変換部11に,トレース範囲の指定を示す開始アドレスと終了アドレスが保持されている場合には,コード変換部11の予測シミュレーション実行部113は,ブロック分割部111によって分割されたターゲットプログラムのブロックから,トレース範囲の指定をもとに,開始アドレスを検出する。予測シミュレーション実行部113は,開始アドレスが検出された以降,ターゲットプログラムのブロックから検出用情報をもとにコード生成対象命令を検出し,トレース範囲の終了アドレスを検出するまで,コード生成対象命令の検出を続ける。コード生成部115は,コード生成対象命令以外の命令について,その命令の機能を変換したホスト命令機能コードを生成して,その命令の実行時間を記録し,コード生成対象命令について,その命令の機能を変換したホスト命令機能コードと,性能計算命令を含むホストコードとを生成する。図15は,第2の実施例におけるシミュレーション装置1のコード変換部11の概要処理フロー図である。シミュレーション装置1において,コード変換部11のブロック分割部111は,ターゲットプログラムのコードを所定の単位のブロックに分割して入力するステップS41。予測シミュレーション実行部113は,ブロックを分析して,トレース範囲の開始アドレスまたは終了アドレスを検出するステップS42。開始アドレスの検出から終了アドレスの検出までの範囲において,以下のステップS43,S44の処理を繰り返す。予測シミュレーション実行部113は,ブロックの命令を分析して,コード生成対象命令を検出するステップS43。コード生成部115は,検出したコード生成対象命令に対して,性能計算命令を組み込んだホストコードを生成するステップS44。シミュレーション装置1の第2の実施例によれば,ターゲットプログラムの一部の命令について,性能値計算のホスト命令の生成が省略できるため,シミュレーションにおいて実行するホスト命令数を減少させ,シミュレーションの実行時間を減少させることができる。また,コード変換処理において,性能値計算のホスト命令の生成を省略するだけであるため,取得される性能値の精度を維持しつつ,シミュレーション速度を向上させることができる。また,シミュレーション中に,ユーザが指定したトレース範囲についてのみターゲットプログラムの性能を測定するため,効率的なシミュレーションを実現し,シミュレーションの実行時間をより減少させることができる。なお,ユーザによって指定されるトレース範囲の設定は,第1の実施例におけるコード変換処理にも適用することができる。この場合に,図10に示す処理フローのステップS1およびステップS2の処理の間で,予測シミュレーション実行部113は,ブロックを分析して,トレース範囲の開始アドレスまたは終了アドレスを検出する。そして,トレース範囲について,ステップS2~S5の処理が行われる。図16は,別の実施形態におけるシミュレーション装置1の構成例を示す図である。シミュレーション装置1は,図1に示す構成例に,さらに,電力シミュレーション情報生成部15を備える。電力シミュレーション情報生成部15は,電力情報6を得て,シミュレーション情報収集部13が出力したシミュレーション情報5をもとに,ブロックの実行時の消費電力を計算し,電力シミュレーション情報7として出力する処理部である。図17は,電力シミュレーション情報生成部15を,性能シミュレーション用のホストコードに組み込む関数電力シミュレーション関数として実施した場合の例を示す図である。電力情報6として,LD命令,MULT命令,ADD命令の1実行当たりの消費電力が,それぞれ4u[W],0.5u[W],0.3u[W]と設定されている。電力シミュレーション関数Host_Inst_A-C_powerは,シミュレーションで実行された各命令の実行回数にもとづいて,電力を計算する。次に,シミュレーション装置1のハードウェア構成例を説明する。シミュレーション装置1は,演算装置CPU,一時記憶装置DRAM,フラッシュメモリ等,永続性記憶装置HDD,フラッシュメモリ等,およびネットワークNとのネットワークインターフェースを有するコンピュータPCと,入力装置キーボード,マウス等と出力装置ディスプレイ,プリンタ等とによって実施することができる。また,シミュレーション装置1は,コンピュータPCが実行可能なプログラムによって実施することができる。この場合に,シミュレーション装置1が有すべき機能の処理内容を記述したプログラムが提供される。提供されたプログラムをコンピュータPCが実行することによって,上記で説明したシミュレーション装置1の処理機能がコンピュータPC上で実現される。なお,コンピュータPCは,可搬型記録媒体から直接プログラムを読み取り,そのプログラムに従った処理を実行することもできる。また,コンピュータPCは,サーバコンピュータからプログラムが転送されるごとに,逐次,受け取ったプログラムに従った処理を実行することもできる。さらに,このプログラムは,コンピュータPCで読み取り可能な記録媒体に記録しておくことができる。以上説明したように,シミュレーション装置1によれば,パイプライン処理を制御するCPUの命令実行の性能シミュレーションを高速に行うことが可能となる。シミュレーション装置1は,JITコンパイラ方式のように,ターゲットCPUのプログラムのコード変換処理において,コード変換部11が,分割したブロックごとに,外部依存命令の実行結果を予測した場合予測ケースでの実行について機能シミュレーションを行い,タイミング情報3をもとに各命令の実行時間を定数化しておく。シミュレーション装置1のコード変換部11では,予測ケース以外の実行についての性能シミュレーション情報サイクルシミュレーション情報を得るためのシミュレーション実行コードをホストコードに組み込む代わりに,予測ケースでの命令の実行時間の補正処理を行うコードを組み込む。また,シミュレーション装置1のシミュレーション実行部12では,予測ケースの場合の命令実行について性能シミュレーションを行い,予測外ケースでのシミュレーションの代わりに,その命令に対する遅延時間,前後に実行される命令の実行時間等を用いて,予測ケースでの実行時間を補正して,外部依存命令の実行時間を得る。そのため,従来に比べて,機能コードに追加するシミュレーション用コード量を少なくすることができ,性能シミュレーション処理の負荷増大を抑制しつつ,高速に行うことが可能となる。また,シミュレーション装置1では,予測ケースを前提として機能シミュレーションを行うことにより,1つのケース予測ケースにおける各命令の実行時間を,静的分析処理により得ておき,予測ケース以外のケースにおける命令の実行時間は,予測ケースでの実行時間を,ペナルティ時間,前後に実行される命令の実行時間,前の命令の遅延時間等の加算または減算により補正する。シミュレーション装置1によれば,CPUを含むシステムの性能,電力のシミュレーションを高速に実施することが可能となり,従来では現実レベルでの実行が困難であった,大規模なシステム全体の性能,電力の評価や解析,予測などを容易に行えるようになる。さらに,シミュレーション装置1によれば,電力情報と性能シミュレーション情報とをもとに,プログラムの消費電力シミュレーションを,高速かつ高精度に行うことが可能となる。よって,各ケースでの性能シミュレーションを行う必要がなく,性能シミュレーション処理の負荷増大を抑制しつつ,高精度に行うという効果を奏する。"