(57)【特許請求の範囲】
【請求項１】
ターゲットプロセッサに対するプログラムの命令実行のシミュレーションをコンピュータに実行させるシミュレーションプログラムであって、
前記プログラムのコードに含まれる主記憶アクセス命令の処理の実行結果を予測結果として設定する処理と、
前記予測結果を前提とする命令実行の機能シミュレーションを行い、前記主記憶アクセス命令の実行タイミングを示すタイミング情報を得て、前記機能シミュレーションの結果と前記タイミング情報とをもとに、前記予測結果での主記憶アクセス命令の実行時間を算出する処理と、
前記機能シミュレーションの結果をもとに、前記予測結果を前提とする命令実行の性能シミュレーションに用いられる、前記主記憶アクセス命令を含むホストコードを生成する処理と、
前記生成されたホストコードを実行する処理と、
前記ホストコードに含まれる前記主記憶アクセス命令におけるキャッシュアクセスの実行結果が前記予測結果と異なる場合に、前記主記憶アクセス命令においてアクセスする主記憶装置として用いられているメモリデバイスの種類を、前記キャッシュアクセスのシミュレーション時におけるキャッシュのアドレスに基づいて判定する処理と、
前記メモリデバイスの種類の判定結果に応じた補正値を用いて、前記予測結果での主記憶アクセス命令の実行時間を補正して、前記機能シミュレーションでの前記主記憶アクセス命令の実行時間とする処理と、
を前記コンピュータに実行させるシミュレーションプログラム。
【請求項２】
前記メモリデバイスの種類の判定結果に応じた補正値を用いて前記予測結果での主記憶アクセス命令の実行時間を補正する前記処理を実行させるように、前記ホストコードを書き換える処理をさらに前記コンピュータに実行させる請求項１記載のシミュレーションプログラム。
【請求項３】
前記ターゲットプロセッサは、第１のモードと前記第１のモードよりも動作の制限が大きい第２のモードを有し、
前記シミュレーションプログラムは、
前記主記憶アクセス命令の実行時の前記ターゲットプロセッサが前記第１のモードの場合には、前記ホストコードを生成する処理を前記コンピュータに実行させ、
前記主記憶アクセス命令の実行時の前記ターゲットプロセッサが前記第２のモードの場合には、前記ホストコードを生成する処理を前記コンピュータに実行させると共に、前記メモリデバイスの種類の判定結果に応じた補正値を用いて前記予測結果での主記憶アクセス命令の実行時間を補正する前記処理を実行させるように、前記ホストコードを書き換える処理をさらに前記コンピュータに実行させることを特徴とする請求項１記載のシミュレーションプログラム。
【請求項４】
ターゲットプロセッサに対するプログラムの命令実行のシミュレーションを実行する情報処理装置であって、
前記プログラムのコードに含まれる主記憶アクセス命令の処理の実行結果を予測結果として設定し、前記予測結果を前提とする命令実行の機能シミュレーションを行い、前記主記憶アクセス命令の実行タイミングを示すタイミング情報を得て、前記機能シミュレーションの結果と前記タイミング情報とをもとに、前記予測結果での主記憶アクセス命令の実行時間を算出する予測シミュレーション実行部と、
前記機能シミュレーションの結果をもとに、前記予測結果を前提とする命令実行の性能シミュレーションに用いられる、前記主記憶アクセス命令を含むホストコードを生成するコード生成部と、
前記生成されたホストコードを実行するコード実行部と、
前記ホストコードに含まれる前記主記憶アクセス命令におけるキャッシュアクセスの実行結果が前記予測結果と異なる場合に、前記主記憶アクセス命令においてアクセスする主記憶装置として用いられているメモリデバイスの種類を、前記キャッシュアクセスのシミュレーション時におけるキャッシュのアドレスに基づいて判定する判定部と、
前記メモリデバイスの種類の判定結果に応じた補正値を用いて、前記予測結果での主記憶アクセス命令の実行時間を補正して、前記機能シミュレーションでの前記主記憶アクセス命令の実行時間とする補正部と、
を備える情報処理装置。
【請求項５】
ターゲットプロセッサに対するプログラムの命令実行のシミュレーションを行うコンピュータが実行するシミュレーション方法であって、
前記プログラムのコードに含まれる主記憶アクセス命令の処理の実行結果を予測結果として設定する処理と、
前記予測結果を前提とする命令実行の機能シミュレーションを行い、前記主記憶アクセス命令の実行タイミングを示すタイミング情報を得て、前記機能シミュレーションの結果と前記タイミング情報とをもとに、前記予測結果での主記憶アクセス命令の実行時間を算出する処理と、
前記機能シミュレーションの結果をもとに、前記予測結果を前提とする命令実行の性能シミュレーションに用いられる、前記主記憶アクセス命令を含むホストコードを生成する処理と、
前記生成されたホストコードを実行する処理と、
前記ホストコードに含まれる前記主記憶アクセス命令におけるキャッシュアクセスの実行結果が前記予測結果と異なる場合に、前記主記憶アクセス命令においてアクセスする主記憶装置として用いられているメモリデバイスの種類を、前記キャッシュアクセスのシミュレーション時におけるキャッシュのアドレスに基づいて判定する処理と、
前記メモリデバイスの種類の判定結果に応じた補正値を用いて、前記予測結果での主記憶アクセス命令の実行時間を補正して、前記機能シミュレーションでの前記主記憶アクセス命令の実行時間とする処理と、
を備えるシミュレーション方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、シミュレーションプログラム、情報処理装置、およびシミュレーション方法に関する。
【背景技術】
【０００２】
機能、性能、消費電力のシミュレーションにおいて、評価対象であるターゲットＣＰＵの命令コード（ターゲットコード）からホストＣＰＵの命令コード（ホストコード）への変換手法として、インタープリタ方式またはJust-in-Time（ＪＩＴ）コンパイラ方式が知られている。
【０００３】
ＪＩＴコンパイラ方式によるシミュレーションでは、シミュレーション対象であるターゲットＣＰＵについて、実行中のプログラムに出現するターゲットＣＰＵの命令を、シミュレーションを実行するホストＣＰＵの命令に置き換え、以降では、その置き換えた命令を実行している。そのため、ＪＩＴコンパイラ方式の処理は、インタープリタ方式の処理に比べて高速であり、ＣＰＵの機能シミュレーションでは、特に高速性が求められる場合にＪＩＴコンパイル方式が採用されていた。ＪＩＴコンパイラ方式を採用するＣＰＵの性能シミュレーションも提案されている。
【０００４】
ＣＰＵの性能シミュレーションを高速に行うことが可能なシミュレーション装置が知られている（例えば、特許文献１参照）。
【０００５】
また、高密度、高速、且つバイトアクセス可能（ロード・ストア命令でアクセス可能）な不揮発性メモリ（Non-Volatile Random Access Memory：ＮＶＲＡＭ）が開発されている。このような不揮発性メモリとしては、例えば、相変化メモリ（Phase Change Random Access Memory：ＰＣＭ）、抵抗変化型メモリ（Resistance Random Access Memory：ＲｅＲＡＭ）、または磁気抵抗メモリ（Magnetoresistive Random Access Memory：ＭＲＡＭ）がある。そして、揮発性メモリ（例えば、Dynamic Random Access Memory：ＤＲＡＭ）と不揮発性メモリの両方を主記憶装置として用いたハイブリッドメモリシステムが登場している。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】国際公開第２０１２／０４９７２８号
【特許文献２】特開２０１４−１８２８３６号公報
【特許文献３】特開２０１４−１５３９６５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
従来の性能シミュレーションでは、主記憶装置に用いるメモリは１種類であることが前提であるため、２種類のメモリ（例えば、ＤＲＡＭとＮＶＲＡＭ）を主記憶装置に用いるハイブリッドメモリシステムの性能シミュレーションを行うことが困難である。
【０００８】
本発明の課題は、複数の種類のメモリを主記憶装置に用いた装置の性能シミュレーションを行うことである。
【課題を解決するための手段】
【０００９】
実施の形態に係るシミュレーションプログラムは、ターゲットプロセッサに対するプログラムの命令実行のシミュレーションをコンピュータに実行させる。
【００１０】
前記シミュレーションプログラムは、前記コンピュータに、前記プログラムのコードに含まれる主記憶アクセス命令の処理の実行結果を予測結果として設定させる。
【００１１】
前記シミュレーションプログラムは、前記コンピュータに、前記予測結果を前提とする命令実行の機能シミュレーションを行い、前記主記憶アクセス命令の実行タイミングを示すタイミング情報を得て、前記機能シミュレーションの結果と前記タイミング情報とをもとに、前記予測結果での主記憶アクセス命令の実行時間を算出させる。
【００１２】
前記シミュレーションプログラムは、前記コンピュータに、前記機能シミュレーションの結果をもとに、前記予測結果を前提とする命令実行の性能シミュレーションに用いられる、前記主記憶アクセス命令を含むホストコードを生成し、前記生成されたホストコードを実行させる。
【００１３】
前記シミュレーションプログラムは、前記コンピュータに、前記ホストコードに含まれる前記主記憶アクセス命令におけるキャッシュアクセスの実行結果が前記予測結果と異なる場合に、前記主記憶アクセス命令においてアクセスする主記憶装置として用いられているメモリデバイスの種類を、前記キャッシュアクセスのシミュレーション時におけるキャッシュのアドレスに基づいて判定させる。
【００１４】
前記シミュレーションプログラムは、前記コンピュータに、前記メモリデバイスの種類の判定結果に応じた補正値を用いて、前記予測結果での主記憶アクセス命令の実行時間を補正して、前記機能シミュレーションでの前記主記憶アクセス命令の実行時間とさせる。
【発明の効果】
【００１５】
実施の形態のシミュレーションプログラムによれば、複数の種類のメモリを主記憶装置に用いた装置の性能シミュレーションを行うことができる。
【図面の簡単な説明】
【００１６】
【図１Ａ】ハイブリッドメモリシステムの構成例（その１）である。
【図１Ｂ】ハイブリッドメモリシステムの構成例（その２）である。
【図２】第１の実施の形態に係るシミュレーション装置の構成図である。
【図３】ブロックに含まれる命令の例を示す図である。
【図４】タイミング情報の例を示す図である。
【図５Ａ】図３に示す命令実行のタイミング例を示す図である。
【図５Ｂ】図３に示す命令実行のタイミング例を示す図である。
【図６Ａ】ターゲットコードから機能シミュレーションのホストコードが生成される例を示す図である。
【図６Ｂ】機能シミュレーションのホストコードにサイクルシミュレーション用コードが組み込まれる例を示す図である。
【図７】第１の実施の形態に係るシミュレーション装置のホストコード生成処理のフローチャートである。
【図８】第１の実施の形態に係るシミュレーション装置のシミュレーション処理のフローチャートである。
【図９】第１の実施の形態に係る補正部（ヘルパー関数）の呼び出し処理の詳細なフローチャートである。
【図１０Ａ】補正部によるＬＤＲ命令の実行結果に対する補正例を示す図である。
【図１０Ｂ】補正部によるＬＤＲ命令の実行結果に対する補正例を示す図である。
【図１０Ｃ】補正部によるＬＤＲ命令の実行結果に対する補正例を示す図である。
【図１０Ｄ】従来のＬＤＲ命令の実行結果に対する補正例を示す図である。
【図１１】第２の実施の形態に係るシミュレーション装置の構成図である。
【図１２】第２の実施の形態に係る補正部（ヘルパー関数）の呼び出し処理の詳細なフローチャートである。
【図１３】第２の実施の形態に係るヘルパー関数呼び出し命令の書き換え後の補正部（ヘルパー関数）の呼び出し処理の詳細なフローチャート（その１）である。
【図１４】第２の実施の形態に係るヘルパー関数呼び出し命令の書き換え後の補正部（ヘルパー関数）の呼び出し処理の詳細なフローチャート（その２）である。
【図１５】第３の実施の形態に係るシミュレーション装置の構成図である。
【図１６】第３の実施の形態に係るシミュレーション装置のホストコード生成処理のフローチャートである。
【図１７】情報処理装置（コンピュータ）の構成図である。
【発明を実施するための形態】
【００１７】
以下、図面を参照しながら実施の形態について説明する。
初めに、実施の形態において、シミュレーションの対象となるＣＰＵ（ターゲットＣＰＵ）を含むハイブリッドメモリシステムについて説明する。
【００１８】
ハイブリッドメモリシステムは、揮発性メモリと不揮発性メモリ（ＮＶＲＡＭ）の両方を主記憶装置として用いたシステムである。主記憶装置に対して、ＣＰＵはロード命令およびストア命令でアクセス可能である。揮発性メモリは、例えば、ＤＲＡＭである。不揮発性メモリは、例えば、相変化メモリ（ＰＣＭ）、抵抗変化型メモリ（ＲｅＲＡＭ）、または磁気抵抗メモリ（ＭＲＡＭ）である。
【００１９】
図１Ａは、ハイブリッドメモリシステムの構成例（その１）である。
ハイブリッドメモリシステム１１は、ＣＰＵ１２、ＤＲＡＭ１３、およびＮＶＲＡＭ１４を備える。ＣＰＵ１２、ＤＲＡＭ１３、およびＮＶＲＡＭ１４は、バス１５を介して接続している。
【００２０】
ＣＰＵ１２はキャッシュ（不図示）を有し、ＣＰＵ１２がデータを読み出す場合に、当該データがキャッシュに格納されていれば、キャッシュからデータを読み出す。データがキャッシュに格納されていなければ、ＤＲＡＭ１３またはＮＶＲＡＭ１４からデータを読み出す。
【００２１】
図１Ｂは、ハイブリッドメモリシステムの構成例（その２）である。
ハイブリッドメモリシステム２１は、ＣＰＵ２２、ＤＲＡＭ２３、およびＮＶＲＡＭ２４を備える。ＣＰＵ２２とＤＲＡＭ２３はバス２５−１を介して接続し、ＤＲＡＭ２３とＮＶＲＡＭ２４は、バス２５−２を介して接続している。ハイブリッドメモリシステム２１において、ＤＲＡＭ２３はＮＶＲＡＭ２４のキャッシュとして動作する。
【００２２】
ＣＰＵ２２はキャッシュ（不図示）を有し、ＣＰＵ２２がデータを読み出す場合に、当該データがキャッシュに格納されていれば、キャッシュからデータを読み出す。データがキャッシュに格納されていなければ、ＤＲＡＭ２３またはＮＶＲＡＭ２４からデータを読み出す。
【００２３】
（第１の実施の形態）
図２は、第１の実施の形態に係るシミュレーション装置の構成図である。
【００２４】
シミュレーション装置１０１は、パイプライン処理を制御するターゲットＣＰＵにおける命令実行の性能シミュレーションを実行する装置である。シミュレーション装置１０１は、例えば、サーバやパーソナルコンピュータ（ＰＣ）等の情報処理装置である。
【００２５】
ターゲットＣＰＵは、シミュレーションの対象となるＣＰＵの制御モデルである。シミュレーション装置１０１は、ターゲットＣＰＵの命令実行の性能シミュレーションとして各命令のサイクルシミュレーション情報を出力する。
【００２６】
ここで、ターゲットＣＰＵは、例えばＡＲＭアーキテクチャのＣＰＵである。ホストＣＰＵに相当するシミュレーション装置１０１は、例えばｘ８６アーキテクチャのＣＰＵを搭載するコンピュータである。実施の形態において、ターゲットＣＰＵは、ハイブリッドメモリシステムに搭載されたＣＰＵとする。
【００２７】
シミュレーション装置１０１は、コード変換部１１０、シミュレーション実行部１２０、およびシミュレーション情報収集部１３０を有する。
【００２８】
コード変換部１１０は、ターゲットＣＰＵのプログラムの実行時に、ターゲットＣＰＵが実行するプログラムのコード（ターゲットコード）から、シミュレーションを実行するホストＣＰＵのコード（ホストコード）を生成する処理部である。
【００２９】
コード変換部１１０は、ブロック分割部１１１、予測シミュレーション実行部１１３、コード生成部１１５を有する。
【００３０】
ブロック分割部１１１は、シミュレーション装置１０１に入力されたプログラムのターゲットコードを、所定のブロックに分割する。分割されるブロック単位は、例えば、一般的なベーシックブロック（分岐から次の分岐前までのコード）単位でよく、または、予め定められた任意のコード単位でよい。
【００３１】
図３は、ブロックに含まれる命令の例を示す図である。
図３に示すように、あるブロックには、ターゲットコードの３つの命令；（１）“ＬＤＲ  [ｒ１]，ｒ２”（ロード）；（２）“ＭＵＬ  ｒ３，ｒ４，  ｒ５（乗算）”；（３）“ＡＤＤ  ｒ２，ｒ５，  ｒ６（加算）”の命令が含まれ、（１）〜（３）の順でターゲットＣＰＵのパイプラインに投入されて実行されるとする。各命令のｒ１〜ｒ６は、レジスタ（アドレス）を表す。
【００３２】
予測シミュレーション実行部１１３は、タイミング情報３０１と予測情報４０１とを得て、入力されたブロックをある実行結果を前提とした条件下で実行する性能シミュレーションを行う処理部である。
【００３３】
タイミング情報３０１は、ターゲットコードの各命令について、命令実行時の各処理要素（段階）と使用可能なレジスタとの対応を示す情報と、命令のうち外部依存命令ごとに、実行結果に応じた遅延時間を定めるペナルティ時間（ペナルティサイクル数）とを示す情報である。
【００３４】
外部依存命令は、外部環境が関係する処理を行う命令、例えば、ロード命令またはストア命令を含む主記憶アクセス命令などのように、命令の実行結果がターゲットＣＰＵ外の外部環境に依存するような処理、例えば、命令キャッシュ、データキャッシュ、ＴＬＢ検索などであったり、さらには、分岐予測、コール／リターンのスタックなどの処理を行う命令である。
【００３５】
図４は、タイミング情報３０１の例を示す図である。
図４に示すタイミング情報３０１では、ＬＤＲ命令について、ソースレジスタｒｓ１（ｒ１）は１番目の処理要素（ｅ１）で、宛先レジスタｒｄ（ｒ２）は２番目の処理要素（ｅ２）で使用可能であることを表す。タイミング情報３０１は、ＬＤＲ命令について、キャッシュミス時のペナルティを示す情報を含む。詳細には、キャッシュミス時にターゲットＣＰＵがアクセスする主記憶装置がＤＲＡＭの場合とＮＶＲＡＭの場合のそれぞれのペナルティ（サイクル）を示す情報を含む。図４のタイミング情報３０１において、キャッシュミス時にターゲットＣＰＵがアクセスする主記憶装置がＤＲＡＭの場合、ペナルティは６サイクル、キャッシュミス時にターゲットＣＰＵがアクセスする主記憶装置がＮＶＲＡＭの場合、ペナルティは２２サイクルである。
【００３６】
また、ＭＵＬ命令では、第１ソースレジスタｒｓ１（ｒ３）は１番目の処理要素（ｅ１）、第２ソースレジスタｒｓ２（ｒ４）は２番目の処理要素（ｅ２）、宛先レジスタｒｄ（ｒ５）は３番目の処理要素（ｅ３）で、それぞれ使用可能であることを示す。また、ＡＤＤ命令では、第１ソースレジスタｒｓ１（ｒ２）、第２ソースレジスタｒｓ２（ｒ５）は１番目の処理要素（ｅ１）、宛先レジスタｒｄ（ｒ６）は２番目の処理要素（ｅ２）で使用可能であることを示す。
【００３７】
図５Ａおよび５Ｂは、図３に示すブロックの各命令の実行タイミング例を示す図である。
【００３８】
図４に示すタイミング情報３０１から、パイプラインに各命令が投入されるタイミングは、ＬＤＲ命令の実行開始がタイミングｔとすると、ＭＵＬ命令はタイミングｔ＋１、ＡＤＤ命令はタイミングｔ＋２となる。
【００３９】
ＡＤＤ命令の第１ソースレジスタ（ｒ２）と第２ソースレジスタ（ｒ５）は、ＬＤＲ命令とＭＵＬ命令で使用されているため、ＡＤＤ命令の開始は、ＬＤＲ命令とＭＵＬ命令の実行完了のタイミングｔ＋４以降となり、２サイクル分の待機時間（２サイクル分のストール）が生じる。
【００４０】
したがって、図５Ａに示すように、図３に示すブロックをシミュレーションした場合に、ＬＤＲ命令の実行結果がキャッシュヒットであるケースでは、ブロックの実行時間が６サイクルであることがわかる。
【００４１】
図５Ｂは、図３に示すブロックのＬＤＲ命令の実行結果がキャッシュミスである場合のタイミング例を表す。
【００４２】
ＬＤＲ命令の結果がキャッシュミスであり且つＣＰＵがアクセスする主記憶装置がＤＲＡＭであるとすると、タイミング情報３０１に、ペナルティとして、再実行に十分と考えられる任意の時間（ここでは６サイクル分）が設定されているため、このペナルティサイクルが遅延時間として追加される。したがって、２番目の処理要素（ｅ２）の実行は、タイミングｔ＋７に遅延する。ＬＤＲ命令の次に実行されるＭＵＬ命令は、遅延の影響を受けずにそのまま実行されるが、ＡＤＤ命令は、ＬＤＲ命令の実行完了のタイミングｔ＋８以降となり、４サイクル分の待機時間（４サイクル分のストール）が生じる。
【００４３】
したがって、図５Ｂに示すように、図３に示すブロックの命令実行をシミュレーションした場合に、ＬＤＲ命令の実行結果がキャッシュミスであり且つＣＰＵがアクセスする主記憶装置がＤＲＡＭであるケースでは、実行時間が１０サイクルとなることがわかる。
【００４４】
予測情報４０１は、ターゲットコードの外部依存命令の処理において、生じる確率が高い実行結果（予測結果）を定めた情報である。予測情報４０１には、例えば、下記のような情報が定められている。
・命令キャッシュ：予測＝ヒット
・データキャッシュ：予測＝ヒット
・ＴＬＢ検索：予測＝ヒット
・分岐予測：予測＝ヒット
・コール／リターン：予測＝ヒット
【００４５】
予測シミュレーション実行部１１３は、上記の予測情報４０１をもとに、入力されたブロックに含まれる外部依存命令の予測結果を設定し、タイミング情報３０１を参照して、設定した予測結果を前提とする場合（予測ケース）の命令を実行して、命令実行の進み具合をシミュレーションする。予測シミュレーション実行部１１３は、シミュレーション結果として、ブロックに含まれる各命令の実行時間（所要サイクル数）を求める。
【００４６】
コード生成部１１５は、予測シミュレーション実行部１１３のシミュレーション結果をもとに、処理したブロックに対応するホストコードとして、設定された予測ケースにおける命令実行時の性能シミュレーションを行うためのホストコード（性能シミュレーション用ホストコード）を生成する処理部である。
【００４７】
コード生成部１１５は、ブロックのターゲットコードをもとに、外部依存命令が予測結果である予測ケースの場合の命令実行を行うホストコードを生成し、さらに、各命令の実行時間を加算して、ブロックの処理時間を計算する処理を行うシミュレーション用コードを組み込む。
【００４８】
例えば、コード生成部１１５は、データのＬＤＲ命令の予測結果として“キャッシュヒット”が設定されている処理については、そのブロック内のＬＤＲ命令によるキャッシュアクセスが“ヒット”である場合の処理実行をシミュレーションして、この予測ケースでの実行時間を求め、ＬＤＲ命令によるキャッシュアクセスが“ミス”である場合の実行時間は、予測ケースである“ヒット”時の実行時間に対する加算を用いた補正計算により求める処理を行うホストコードを生成する。
【００４９】
シミュレーション実行部１２０は、コード生成部１１５が生成したホストコードを実行して、プログラム（ターゲットコード）を実行するターゲットＣＰＵの命令実行の機能および性能シミュレーションを行う処理部である。
【００５０】
シミュレーション実行部１２０は、コード実行部１２１、補正部１２３、および判定部１２５を有する。
【００５１】
コード実行部１２１は、ホストコードを用いて、プログラム（ターゲットコード）を実行する処理部である。
【００５２】
補正部１２３は、プログラムの実行中に、外部依存命令の実行結果が、設定されていた予測結果と異なる場合（予測外ケース）に、判定部１２５による判定結果に基づいて、その命令の実行時間を、既に求めた予測ケースでの実行時間を補正して求める。
【００５３】
補正部１２３は、外部依存命令に与えられるペナルティ時間、外部依存命令の前後で実行される命令の実行時間、１つ前の命令の遅延時間などを用いて補正を行う。なお、補正処理の詳細は後述する。
【００５４】
判定部１２５は、プログラムの実行中に、外部依存命令の実行結果が、設定されていた予測結果と異なる場合（予測外ケース）に、ターゲットＣＰＵがアクセスする主記憶装置の種類を判定する。
【００５５】
シミュレーション情報収集部１３０は、性能シミュレーションの実行結果として、各命令の実行時間を含むシミュレーション情報５０１を収集する。
【００５６】
以下に、シミュレーション装置１０１の処理の流れを説明する。
〔コード変換処理〕
（１）  シミュレーション装置１０１のコード変換部１１０のブロック分割部１１１は、ターゲットプログラム２０１のターゲットコードを得て記憶部（図２に図示しない）に保持し、保持したターゲットコードを任意のブロックに分割する（図３参照）。
（２）  予測シミュレーション実行部１１３は、入力されるターゲットプログラム２０１に関するタイミング情報３０１、予測情報４０１を得て記憶部に保存する。
そして、予測シミュレーション実行部１１３は、予測情報４０１をもとに、分割されたブロックの外部依存命令のそれぞれについて予測結果を設定する。例えば、予測シミュレーション実行部１１３は、図４に示すブロックの命令のうち、ＬＤＲ命令のデータキャッシュの予測結果として「ヒット」を設定する。
（３）  予測シミュレーション実行部１１３は、ブロックのコードを解釈して、設定された予測結果を前提とする場合の命令実行をシミュレーションする。すなわち、予測シミュレーション実行部１１３は、図５Ａに示すタイミング例の命令実行をシミュレーションすることになる。
（４）  次に、コード生成部１１５は、予測ケースのシミュレーション結果をもとに、ターゲットコードからホストコードを生成する。さらに、コード生成部１１５は、ターゲットコードから変換したホストコード（機能コードのみ）に、性能シミュレーション（サイクルシミュレーション）を実行するためのサイクルシミュレーション用コードを組み込む。
【００５７】
図６Ａは、ターゲットコードから機能シミュレーションのホストコードが生成される例を示す図、図６Ｂは、機能シミュレーションのホストコードにサイクルシミュレーション用コードが組み込まれる例を示す図である。
【００５８】
図６Ａに示すように、ターゲットコードＩｎｓｔ＿Ａは、ホストコードＨｏｓｔ＿Ｉｎｓｔ＿Ａ０＿ｆｕｎｃ、Ｈｏｓｔ＿Ｉｎｓｔ＿Ａ１＿ｆｕｎｃに変換され、ターゲットコードＩｎｓｔ＿Ｂは、ホストコードＨｏｓｔ＿Ｉｎｓｔ＿Ｂ０＿ｆｕｎｃ、Ｈｏｓｔ＿Ｉｎｓｔ＿Ｂ１＿ｆｕｎｃ、Ｈｏｓｔ＿Ｉｎｓｔ＿Ｂ２＿ｆｕｎｃ、…に変換されて、機能コードのみのホストコードが生成される。
【００５９】
さらに、機能コードのみのホストコードに、ターゲットコードＩｎｓｔ＿Ａのサイクルシミュレーション用コードＨｏｓｔ＿Ｉｎｓｔ＿Ａ２＿ｃｙｃｌｅ、Ｈｏｓｔ＿Ｉｎｓｔ＿Ａ３＿ｃｙｃｌｅが、ターゲットコードＩｎｓｔ＿Ｂのサイクルシミュレーション用コードＨｏｓｔ＿Ｉｎｓｔ＿Ｂ４＿ｃｙｃｌｅ、Ｈｏｓｔ＿Ｉｎｓｔ＿Ｂ５＿ｃｙｃｌｅが、それぞれ組み込まれる。
【００６０】
サイクルシミュレーション用コードは、各命令の実行時間（所要サイクル数）を定数化し、各命令の実行時間を合計してブロックの処理時間を求めるコードである。これにより、ブロック実行中の進み具合を示す情報を得ることができる。
【００６１】
ここで、ホストコードのうち、機能コード、外部依存命令以外の命令についてのサイクルシミュレーション用コードは既知のコードを使用して実施できるので、具体例の説明を省略する。外部依存命令についてのサイクルシミュレーション用コードは、補正処理を行うヘルパー関数を呼び出すヘルパー関数呼び出し命令として用意される。ヘルパー関数については後述する。
【００６２】
〔シミュレーション処理〕
（１）  シミュレーション実行部１２０のコード実行部１２１は、コード変換部１１０が生成したホストコードを用いて、ターゲットプログラム２０１の性能シミュレーションを行う。
コード実行部１２１は、ターゲットプログラム２０１の命令実行をシミュレーションし、各命令の実行時間を得ていく。
（２）  コード実行部１２１は、シミュレーションの実行中に、外部依存命令（例えばＬＤＲ命令）を検出した場合に、補正部１２３が呼び出される。
（３）  補正部１２３は、外部依存命令の実行結果が、設定された予測結果と異なっているかを判定し、実行結果が予測結果と違っている場合に、補正する。例えば、命令「ＬＤＲ  [ｒ１]，ｒ２」が検出され、データキャッシュの予測結果（キャッシュヒット）と、実際の実行結果（キャッシュミス）と、が異なっていた場合に、補正部１２３は、検出された命令「ＬＤＲ  [ｒ１]，ｒ２」の実行時間（サイクル数）を補正する。さらに、補正部１２３は、この補正により、次命令の実行タイミングｔ＋ｎも変更する。
【００６３】
補正部１２３は、外部依存命令の実行結果が予測結果と異なる度に、命令の実行時間を補正する。ここで、予測ケースでの外部依存命令の実行時間は既に定数化されているため、補正部１２３は、予測外ケースでの外部依存命令の実行時間を、その命令に対するペナルティ時間、前後に実行される命令の実行時間、前に処理された命令の遅延時間等の値を単に加算または減算して計算することができる。
【００６４】
図７は、第１の実施の形態に係るシミュレーション装置のホストコード生成処理のフローチャートである。
【００６５】
ステップＳ７０１において、ブロック分割部１１１は、ターゲットプログラムのコード（ターゲットコード）を所定の単位のブロックに分割する。
【００６６】
ステップＳ７０２において、予測シミュレーション実行部１１３は、ブロックの命令を分析して，外部依存命令を検出する。
【００６７】
ステップＳ７０３において、予測シミュレーション実行部１１３は、検出した全ての命令について、予測情報４０１をもとに、確率が高い実行結果を予測ケースとして決定する。
【００６８】
ステップＳ７０４において、予測シミュレーション実行部１１３は、タイミング情報３０１を参照して、ブロックの各命令について予測結果として設定された実行結果を前提とする性能シミュレーションを実行する。
【００６９】
ステップＳ７０５において、コード生成部１１５は、シミュレーション結果をもとに、シミュレーション実行部１２０が実行する性能シミュレーション用ホストコードを生成する。
【００７０】
以上のステップＳ７０１〜Ｓ７０５の処理により，設定された実行結果の場合（予測ケース）での機能コードに，ターゲットＣＰＵの性能をシミュレーションするコードが組み込まれたホストコードが出力される。
【００７１】
図８は、第１の実施の形態に係るシミュレーション装置のシミュレーション処理のフローチャートである。
【００７２】
ステップＳ７１０において、コード実行部１２１は、コード生成部１１５が生成したホストコードを実行し、性能シミュレーションを行う。
【００７３】
ステップＳ７１１において、コード実行部１２１は、実行中に外部依存命令を検出する。
【００７４】
ステップＳ７１２において、コード実行部１２１は、補正部（ヘルパー関数）の呼び出し処理を行う。尚、補正部（ヘルパー関数）の呼び出し処理の詳細は後述する。
【００７５】
ステップＳ７１３において、シミュレーション情報収集部１３０は，ターゲットプログラムに相当するホストコード全てのシミュレーション処理についてのシミュレーション情報５０１を出力する。
【００７６】
以上のステップＳ７１０〜Ｓ７１３の処理ステップにより、ターゲットプログラム２０１を実行するターゲットＣＰＵのシミュレーション情報（サイクルシミュレーション情報）５０１が出力される。
【００７７】
図９は、第１の実施の形態に係る補正部（ヘルパー関数）の呼び出し処理の詳細なフローチャートである。図９は、外部依存命令のうちの一例として、主記憶アクセス命令のロード（ＬＤＲ）命令の処理についての予測結果の判定および補正の処理を示す。
【００７８】
図９は、図８のステップＳ７１２に相当する。
ステップＳ２７２０において、コード実行部１２１は、ヘルパー関数呼出し命令で指定されるヘルパー関数を呼び出す。第１の実施の形態において、ヘルパー関数（判定処理あり）が呼び出され、ヘルパー関数（判定処理あり）により以下のステップＳ７２１〜Ｓ７２５，Ｓ７２７，Ｓ７２８が実行される。
【００７９】
ステップＳ７２１において、コード実行部１２１は、ＬＤＲ命令によりキャッシュアクセスが要求されているかを判定する。キャッシュアクセスが要求されている場合、制御はステップＳ７２２に進み、キャッシュアクセスが要求されていない場合、制御はステップＳ７２４に進む。
【００８０】
ステップＳ７２２において、補正部１２３は、キャッシュアクセスをシミュレーションする。
【００８１】
ステップＳ７２３において、補正部１２３は、ステップＳ７２２のシミュレーションによるキャッシュアクセスの結果を判定する。キャッシュアクセスの結果が“キャッシュヒット”の場合、制御はステップＳ７２４に進み、キャッシュアクセスの結果が“キャッシュミス”の場合、制御はステップＳ７２５に進む。尚、図９では、“キャッシュヒット”を予測ケースとした場合を説明している。
【００８２】
ステップＳ７２４において、補正部１２３は，未補正の予測された実行時間（サイクル数）を出力する。
【００８３】
ステップＳ７２５において、判定部１２５は、キャッシュミス時にターゲットＣＰＵがアクセスするメモリデバイス（主記憶装置）の種類を判定する。メモリデバイスの種類は、キャッシュアクセスのシミュレーション時のキャッシュのアドレスに基づいて判定される。判定部１２５は、例えば、メモリデバイスがＤＲＡＭである、またはメモリデバイスがＮＶＲＡＭであると判定する。
【００８４】
ステップＳ７２７において、補正部１２３は、メモリデバイスの判定結果とタイミング情報３０１に基づいて、ＬＤＲ命令の実行時間（サイクル数）の補正を行う。例えば、メモリデバイスの判定結果がＤＲＡＭである場合、図４のタイミング情報３０１には「キャッシュミス（ＤＲＡＭ）：６」と記載されているので、補正部１２３は、６サイクルを用いて実行時間（サイクル数）の補正を行う。また、例えば、メモリデバイスの判定結果がＮＶＲＡＭである場合、図４のタイミング情報３０１には「キャッシュミス（ＮＶＲＡＭ）：２２」と記載されているので、補正部１２３は、２２サイクルを用いて実行時間（サイクル数）の補正を行う。
【００８５】
ステップＳ７２８において、補正部１２３は、補正された実行時間（サイクル数）を出力する。
【００８６】
図１０Ａ〜１０Ｃは、補正部１２３によるＬＤＲ命令の実行結果に対する補正例を示す図である。図１０Ｄは、従来のＬＤＲ命令の実行結果に対する補正例を示す図である。
【００８７】
図１０Ａ〜１０Ｄは、１つのキャッシュ処理が実行されるケースで１つのキャッシュミスが生じた場合の補正例を説明するための図である。
【００８８】
図１０Ａ〜１０Ｄの例では、以下の３命令のシミュレーションが実行される。
「ＬＤＲ  ［ｒ１］，ｒ２  ：［ｒ１］→ｒ２；
ＭＵＬ  ｒ３，ｒ４，ｒ５  ：ｒ３＊ｒ４→ｒ５；
ＡＤＤ  ｒ２，ｒ５，ｒ６  ：ｒ２＋ｒ５→ｒ６」
【００８９】
図１０Ａは、予測結果が「キャッシュヒット」の場合の命令実行タイミングのチャート例を示す図である。この予測ケースにおいて、３番目に実行されるＡＤＤ命令に、２サイクルストールが生じている。
【００９０】
図１０Ｂは、予測結果と異なる「キャッシュミス」の場合の命令実行タイミングのチャート例を示す図である。この予測ミスのケースでは、ＬＤＲ命令の実行結果がキャッシュミスであると、ペナルティサイクル（６サイクル）分の遅延が生じる。そのため、ＭＵＬ命令は、遅延の影響を受けずに実行されるが、ＡＤＤ命令の実行は、ＬＤＲ命令の完了を待つため、４サイクル分遅延することになる。
【００９１】
図１０Ｃは、補正部１２３による補正後の命令実行タイミングチャートの例を示す図である。尚、キャッシュミス時のターゲットＣＰＵのアクセス先のメモリデバイスの種類は、ＤＲＡＭと判定されたとする。
【００９２】
補正部１２３は、ＬＤＲ命令の実行結果がキャッシュミスであるので（予測結果のミス）、残りの実行時間（２−１＝１サイクル）に所定のキャッシュミス時のペナルティ時間（６サイクル）を加算して有効遅延時間（７サイクル）とする。有効遅延時間は、最大の遅延時間となる。ここでは、キャッシュミス時のターゲットＣＰＵのアクセス先のメモリデバイスの種類はＤＲＡＭと判定されているため、ペナルティ時間として６サイクル加算されている。
【００９３】
さらに、補正部１２３は、次のＭＵＬ命令の実行時間（３サイクル）を得て、次命令の実行時間が遅延時間を超過しないと判定して、有効遅延時間から次命令の実行時間を差し引いた時間（７−３＝４サイクル）を、ＬＤＲ命令の遅延が生じた実行時間（遅延時間）とする。
【００９４】
また、補正部１２３は、有効遅延時間から上記の遅延時間を差し引いた時間（３サイクル）を猶予時間とする。猶予時間は、ペナルティとしての遅延が猶予された時間である。
【００９５】
この補正により、ＬＤＲ命令の実行時間は、実行された時間と遅延時間を加算した実行時間（１＋４＝５サイクル）となり、実行完了のタイミングｔ１から、後続のＭＵＬ命令、ＡＤＤ命令の実行時間が計算される。
【００９６】
すなわち、補正したＬＤＲ命令の実行時間（５サイクル）に、予測シミュレーション実行部１１３の処理結果（予測結果による予測シミュレーションの結果）で求められていたＭＵＬ命令とＡＤＤ命令の各々の実行時間（３サイクル、３サイクル）を単純に加算するだけで、このブロックの実行時間（サイクル数）を得ることができる。
【００９７】
よって、実行結果が予測と異なる命令の実行時間のみを加算または減算による補正処理を行って、その他の命令については、予測結果にもとづくシミュレーション時に求められた実行時間を加算するだけで、高精度に、キャッシュミス時のシミュレーションの実行サイクル数をも求めることができる。
【００９８】
図１０Ｄは、シミュレーション装置１０１の処理と比較するために、従来技術によるキャッシュミス時のサイクル数を単純な加算により求めた場合の誤差の大きさを示す図である。図１０Ｄの場合には、ＬＤＲ命令の遅延時間をそのまま加算しているため、実際には、ＬＤＲ命令の実行中に実行が完了するＭＵＬ命令の実行タイミングのずれによる誤差が生じていることがわかる。
【００９９】
第１の実施の形態に係るシミュレーション装置によれば、キャッシュミス時のアクセス先のメモリの種類に応じたペナルティを用いて実行時間を補正するので、異なる種類のメモリを主記憶装置に用いた装置の性能シミュレーションを行うことができる。
【０１００】
（第２の実施の形態）
第２の実施の形態では、メモリデバイスの種類の判定結果に基づいて、ホストコードのメモリデバイスの種類の判定を行うヘルパー関数を呼び出すヘルパー関数呼び出し命令をメモリデバイスの種類の判定を行わないヘルパー関数を呼び出すヘルパー関数呼び出し命令書き換える。これにより、シミュレーション装置がホストコードを再度実行したときに、初回実行時に比べ、メモリデバイスの種類の判定が省略されるため、シミュレーション時間が短縮される。
【０１０１】
図１１は、第２の実施の形態に係るシミュレーション装置の構成図である。
シミュレーション装置２１０１は、コード変換部２１１０、シミュレーション実行部２１２０、およびシミュレーション情報収集部２１３０を有する。コード変換部２１１０は、ブロック分割部２１１１、予測シミュレーション予測部２１１３、およびコード生成部２１１５を有する。
【０１０２】
ブロック分割部２１１１、予測シミュレーション予測部２１１３、コード生成部２１１５およびシミュレーション情報収集部２１３０は、第１の実施の形態のブロック分割部１１１、予測シミュレーション予測部１１３、コード生成部１１５、およびシミュレーション情報収集部１３０とそれぞれ同様の機能を有するため説明は省略する。
【０１０３】
シミュレーション実行部２１２０は、コード実行部２１２１、補正部２１２３、判定部２１２５、および最適化部２１２７を有する。
【０１０４】
コード実行部２１２１は、ヘルパー関数呼び出し命令を含むホストコードを用いて、プログラム（ターゲットコード）を実行する処理部である。
【０１０５】
補正部２１２３は、プログラムの実行中に、外部依存命令の実行結果が、設定されていた予測結果と異なる場合（予測外ケース）に、判定部２１２５による判定結果に基づいて、その命令の実行時間を、既に求めた予測ケースでの実行時間を補正して求める。
【０１０６】
補正部２１２３は、外部依存命令に与えられるペナルティ時間、外部依存命令の前後で実行される命令の実行時間、１つ前の命令の遅延時間などを用いて補正を行う。なお、補正処理の詳細は後述する。
【０１０７】
判定部２１２５は、プログラムの実行中に、外部依存命令の実行結果が、設定されていた予測結果と異なる場合（予測外ケース）に、ターゲットＣＰＵがアクセスする主記憶装置の種類（ＤＲＡＭまたはＮＶＲＡＭ）を判定する。
【０１０８】
最適化部２１２７は、判定部２１２５による判定結果に基づいて、ヘルパー関数の最適化を行う。詳細には、最適化部２１２７は、判定部２１２５による判定結果に基づいて、ホストコードに含まれるヘルパー関数を呼び出すヘルパー関数呼出し命令を、判定結果に応じたヘルパー関数を呼び出すヘルパー関数呼出し命令に置き換える。
【０１０９】
判定結果に応じたヘルパー関数は、判定結果がＤＲＡＭの場合、例えば、図４のタイミング情報３０１には「キャッシュミス（ＤＲＡＭ）：６」と記載されているので、６サイクルを用いて実行時間（サイクル数）の補正を行うヘルパー関数である。判定結果に応じたヘルパー関数は、判定結果がＮＶＲＡＭの場合、例えば、図４のタイミング情報３０１には「キャッシュミス（ＮＶＲＡＭ）：２２」と記載されているので、２２サイクルを用いて実行時間（サイクル数）の補正を行うヘルパー関数である。
【０１１０】
シミュレーション装置２１０１は、第１の実施の形態のホストコード生成処理と同様の処理でホストコードを生成する。ただし、第２の実施の形態において生成されるホストコードに含まれるヘルパー関数呼出し命令が呼び出すヘルパー関数は、後述のヘルパー関数（最適化あり）とする。
【０１１１】
コード実行部２１２１は、第１の実施の形態のシミュレーション処理（図８）と同様のシミュレーション処理を行う。
【０１１２】
以下、第２の実施の形態に係る補正部（ヘルパー関数）の呼び出し処理について説明する。
【０１１３】
図１２は、第２の実施の形態に係る補正部（ヘルパー関数）の呼び出し処理の詳細なフローチャートである。図１２は、外部依存命令のうちの一例として、主記憶（メモリ）アクセス命令のロード（ＬＤＲ）命令の処理についての予測結果の判定および補正の処理を示す。
【０１１４】
ステップＳ２７２０において、コード実行部２１２１は、ヘルパー関数呼出し命令で指定されるヘルパー関数（最適化あり）を呼び出す。呼び出されたヘルパー関数（最適化あり）により、以下のステップＳ２７２１〜Ｓ２７２８が実行される。以下に述べるように、ヘルパー関数（最適化あり）は、最適化部２１２７によるメモリデバイスの判定結果に応じたホストコードに含まれるヘルパー関数呼出し命令の書き換えを行う。
【０１１５】
ステップＳ２７２１〜Ｓ２７２５，Ｓ２７２７，Ｓ２７２８は、第１の実施の形態のステップＳ７２１〜Ｓ７２５，Ｓ７２７，Ｓ７２８とそれぞれ同様の処理であるため説明は省略する。
【０１１６】
ステップＳ２７２６において、最適化部２１２７は、ホストコードのヘルパー関数呼び出し命令をＳ２７２５の判定結果（ＤＲＡＭまたはＮＶＲＡＭ）に応じたヘルパー関数を呼び出すヘルパー関数呼出し命令に書き換える。判定結果に応じたヘルパー関数は、判定結果がＤＲＡＭの場合、キャッシュミス時にＤＲＡＭアクセス時のペナルティを用いて実行時間（サイクル数）の補正を行うヘルパー関数（ＤＲＡＭ）である。ＤＲＡＭアクセス時のペナルティは、例えば、図４のタイミング情報３０１に記載の６サイクルである。また、判定結果に応じたヘルパー関数は、判定結果がＮＶＲＡＭの場合、キャッシュミス時にＮＶＲＡＭアクセス時のペナルティを用いて実行時間（サイクル数）の補正を行うヘルパー関数（ＮＶＲＡＭ）である。ＮＶＲＡＭアクセス時のペナルティは、例えば、図４のタイミング情報３０１に記載の２２サイクルである。
【０１１７】
コード実行部２１２１は、シミュレーション処理を再度実行する場合、図１２に示す処理によりヘルパー関数呼び出し命令が書き換えられたホストコードを実行する。
【０１１８】
次に、ヘルパー関数（最適化あり）を呼び出すヘルパー関数呼び出し命令がヘルパー関数（ＤＲＡＭ）を呼び出すヘルパー関数呼び出し命令に書き換えられた場合の処理について説明する。
【０１１９】
図１３は、第２の実施の形態に係るヘルパー関数呼び出し命令の書き換え後の補正部（ヘルパー関数）の呼び出し処理の詳細なフローチャート（その１）である。
【０１２０】
ステップＳ２７２０’において、コード実行部２１２１は、ヘルパー関数呼出し命令で指定されるヘルパー関数（ＤＲＡＭ）を呼び出す。呼び出されたヘルパー関数（ＤＲＡＭ）により、以下のステップＳ２７２１’〜Ｓ２７２４’，２７２７’，Ｓ２７２８’が実行される。
【０１２１】
ステップＳ２７２１’〜Ｓ２７２４’，Ｓ２７２８’は、第１の実施の形態のステップＳ７２１〜Ｓ７２４，Ｓ７２８とそれぞれ同様の処理であるため説明は省略する。
【０１２２】
ステップＳ２７２７’において、補正部２１２３は、タイミング情報３０１のキャッシュミス時のＤＲＡＭのペナルティ（サイクル）を示す情報（キャッシュミス（ＤＲＡＭ）に基づいて、ＬＤＲ命令の実行時間（サイクル数）の補正を行う。例えば、図４のタイミング情報３０１には「キャッシュミス（ＤＲＡＭ）：６」と記載されているので、補正部２１２３は、６サイクルを用いて実行時間（サイクル数）の補正を行う。
【０１２３】
次に、ヘルパー関数（最適化あり）を呼び出すヘルパー関数呼び出し命令がヘルパー関数（ＮＶＲＡＭ）を呼び出すヘルパー関数呼び出し命令に書き換えられた場合の処理について説明する。
【０１２４】
図１４は、第２の実施の形態に係るヘルパー関数呼び出し命令の書き換え後の補正部（ヘルパー関数）の呼び出し処理の詳細なフローチャート（その２）である。
【０１２５】
ステップＳ２７２０’’において、コード実行部２１２１は、ヘルパー関数呼出し命令で指定されるヘルパー関数（ＮＶＲＡＭ）を呼び出す。呼び出されたヘルパー関数（ＮＶＲＡＭ）により、以下のステップＳ２７２１’’〜Ｓ２７２４’’，２７２７’’，Ｓ２７２８’’が実行される。
【０１２６】
ステップＳ２７２１’’〜Ｓ２７２４’’，Ｓ２７２８’’は、第１の実施の形態のステップＳ７２１〜Ｓ７２４，Ｓ７２８とそれぞれ同様の処理であるため説明は省略する。
【０１２７】
ステップＳ２７２７’’において、補正部２１２３は、タイミング情報３０１のキャッシュミス時のＮＶＲＡＭのペナルティ（サイクル）を示す情報（キャッシュミス（ＮＶＲＡＭ）に基づいて、ＬＤＲ命令の実行時間（サイクル数）の補正を行う。例えば、図４のタイミング情報３０１には「キャッシュミス（ＮＶＲＡＭ）：２２」と記載されているので、補正部２１２３は、２２サイクルを用いて実行時間（サイクル数）の補正を行う。
【０１２８】
第２の実施の形態に係るシミュレーション装置は、メモリデバイスの判定結果に応じて、メモリデバイスの種類の判定を行うヘルパー関数を呼び出すヘルパー関数呼出し命令を、メモリデバイスの種類の判定を行わないヘルパー関数を呼び出すヘルパー関数呼出し命令に書き換えている。これにより、第２の実施の形態に係るシミュレーション装置よれば、再度ホストコードを実行する場合に、メモリデバイスの種類の判定を行わないので、シミュレーション時間を短縮できる。
（第３の実施の形態）
例えば、ターゲットＣＰＵがＡＲＭプロセッサの場合、ターゲットＣＰＵは、カーネルモード（特権モード）とユーザモードの２つの動作モードを有する。カーネルモードは、ユーザモードよりもターゲットＣＰＵの動作の制限が小さいモードである。ユーザモードは、カーネルモードよりもターゲットＣＰＵの動作の制限が大きいモードである。カーネルモードではカーネルなどが記憶されたシステム領域にアクセスすることが出来る。
【０１２９】
第３の実施の形態のシミュレーション装置は、ターゲットＣＰＵのモードに応じたヘルパー関数を用いて、ホストコードを生成する。
【０１３０】
図１５は、第３の実施の形態に係るシミュレーション装置の構成図である。
シミュレーション装置３１０１は、コード変換部３１１０、シミュレーション実行部３１２０、およびシミュレーション情報収集部３１３０を有する。
【０１３１】
シミュレーション情報収集部３１３０は、第１の実施の形態のシミュレーション情報収集部１３０と同様の機能を有するため説明は省略する。
【０１３２】
コード変換部３１１０は、ターゲットＣＰＵのプログラムの実行時に、ターゲットＣＰＵが実行するプログラムのコード（ターゲットコード）から、シミュレーションを実行するホストＣＰＵのコード（ホストコード）を生成する処理部である。
【０１３３】
コード変換部３１１０は、ブロック分割部３１１１、予測シミュレーション実行部３１１３、コード生成部３１１５を有する。
【０１３４】
ブロック分割部３１１１は第１の実施の形態のブロック分割部１１１と同様の機能を有するため説明は省略する。
【０１３５】
予測シミュレーション実行部３１１３は、予測情報４０１をもとに、入力されたブロックに含まれる外部依存命令の予測結果を設定し、タイミング情報３０１を参照して、設定した予測結果を前提とする場合（予測ケース）の命令を実行して、命令実行の進み具合をシミュレーションする。予測シミュレーション実行部３１１３は、シミュレーション結果として、ブロックに含まれる各命令の実行時間（所要サイクル数）を求める。予測シミュレーション実行部３１１３は、外部命令実行時のターゲットＣＰＵのモードを判定する。
【０１３６】
コード生成部３１１５は、予測シミュレーション実行部３１１３のシミュレーション結果をもとに、処理したブロックに対応するホストコードとして、設定された予測ケースにおける命令実行時の性能シミュレーションを行うためのホストコード（性能シミュレーション用ホストコード）を生成する処理部である。
【０１３７】
コード生成部３１１５は、ブロックのターゲットコードをもとに、外部依存命令が予測結果である予測ケースの場合の命令実行を行うホストコードを生成し、さらに、各命令の実行時間を加算して、ブロックの処理時間を計算する処理を行うシミュレーション用コードを組み込む。
【０１３８】
例えば、コード生成部３１１５は、データのＬＤＲ命令の予測結果として“キャッシュヒット”が設定されている処理については、そのブロック内のＬＤＲ命令によるキャッシュアクセスが“ヒット”である場合の処理実行をシミュレーションして、この予測ケースでの実行時間を求め、ＬＤＲ命令によるキャッシュアクセスが“ミス”である場合の実行時間は、予測ケースである“ヒット”時の実行時間の加算／減算を用いた補正計算により求める処理を行うホストコードを生成する。
【０１３９】
コード生成部３１１５は、ターゲットコードから変換したホストコード（機能コードのみ）に、性能シミュレーション（サイクルシミュレーション）を実行するためのサイクルシミュレーション用コードを組み込む。コード生成部３１１５は、ターゲットＣＰＵのモードの判定結果に基づいて、ヘルパー関数を呼び出すヘルパー関数呼び出し命令を含むサイクルシミュレーション用コードを組み込む。
【０１４０】
シミュレーション実行部３１２０は、コード実行部３１２１、補正部３１２３、判定部３１２５、および最適化部３１２７を有する。
【０１４１】
コード実行部３１２１は、ヘルパー関数呼び出し命令を含むホストコードを用いて、プログラム（ターゲットコード）を実行する処理部である。
【０１４２】
補正部３１２３は、プログラムの実行中に、外部依存命令の実行結果が、設定されていた予測結果と異なる場合（予測外ケース）に、判定部２１２５による判定結果に基づいて、その命令の実行時間を、既に求めた予測ケースでの実行時間を補正して求める。
【０１４３】
補正部３１２３は、外部依存命令に与えられるペナルティ時間、外部依存命令の前後で実行される命令の実行時間、１つ前の命令の遅延時間などを用いて補正を行う。補正部３１２３は、第１の実施の形態の補正部１２３および第２の実施の形態の補正部２１２３の両方の機能を有する。
【０１４４】
判定部３１２５は、プログラムの実行中に、外部依存命令の実行結果が、設定されていた予測結果と異なる場合（予測外ケース）に、ターゲットＣＰＵがアクセスする主記憶装置の種類（ＤＲＡＭまたはＮＶＲＡＭ）を判定する。
【０１４５】
最適化部３１２７は、判定部３１２５による判定結果に基づいて、ヘルパー関数の最適化を行う。詳細には、最適化部２１２７は、判定部２１２５による判定結果に基づいて、ホストコードに含まれるヘルパー関数を呼び出すヘルパー関数呼出し命令を、判定結果に応じたヘルパー関数を呼び出すヘルパー関数呼出し命令に置き換える。最適化部３１２７は、第２の実施の形態の最適化部２１２７と同様の機能を有する。
【０１４６】
以下、第３の実施の形態に係るホストコード生成処理について説明する。
図１６は、第３の実施の形態に係るシミュレーション装置のホストコード生成処理のフローチャートである。
【０１４７】
ステップＳ７５１において、ブロック分割部３１１１は、ターゲットプログラムのコード（ターゲットコード）を所定の単位のブロックに分割する。
【０１４８】
ステップＳ７５２において、予測シミュレーション実行部３１１３は、ブロックの命令を分析して、外部依存命令を検出する。予測シミュレーション実行部３１１３は、外部依存命令の実行時のターゲットＣＰＵのモードを判定する。ターゲットＣＰＵのモードは、ターゲットＣＰＵの内部状態（システム制御レジスタ）を参照して判定される。または、ターゲットＣＰＵのモードは、命令が格納されているアドレスに基づいて判定される。
【０１４９】
ステップＳ７５３において、予測シミュレーション実行部３１１３は、検出した全ての命令について、予測情報４０１をもとに、確率が高い実行結果を予測ケースとして決定する。
【０１５０】
ステップＳ７５４において、予測シミュレーション実行部３１１３は、タイミング情報３０１を参照して、ブロックの各命令について予測結果として設定された実行結果を前提とする性能シミュレーションを実行する。
【０１５１】
ステップＳ７５５において、コード生成部３１１５は、シミュレーション結果およびターゲットＣＰＵのモードの判定結果をもとに、シミュレーション実行部３１２０が実行する性能シミュレーション用ホストコードを生成する。コード生成部３１１５は、例えば、ターゲットＣＰＵのモードの判定結果がカーネルモードの場合に、第１の実施の形態で述べたヘルパー関数（判定処理あり）を読み出すヘルパー関数呼び出し命令を含む性能シミュレーション用ホストコードを生成する。コード生成部３１１５は、例えば、ターゲットＣＰＵのモードの判定結果がユーザモードの場合に、第２の実施の形態で述べたヘルパー関数（最適化あり）を読み出すヘルパー関数呼び出し命令を含む性能シミュレーション用ホストコードを生成する。
【０１５２】
以上のステップＳ７５１〜Ｓ７５５の処理により，設定された実行結果の場合（予測ケース）での機能コードに、ターゲットＣＰＵの性能をシミュレーションするコードが組み込まれたホストコードが出力される。
【０１５３】
第３の実施の形態に係るシミュレーション装置によれば、ターゲットＣＰＵのモードを判定し、判定結果に応じたヘルパー関数を呼び出すヘルパー関数呼び出し命令を含むホストコードを生成している。例えば、ターゲットＣＰＵのモードがカーネルモードの場合、ＤＲＡＭとＮＶＲＡＭの両方にアクセスするので、ヘルパー関数（判定処理あり）を呼び出すヘルパー関数を含むホストコードを生成している。ターゲットＣＰＵのモードがカーネルモードの場合、ＤＲＡＭとＮＶＲＡＭの両方にアクセスするので、メモリデバイスの種類の判定があるヘルパー関数を用いることで、精度良くシミュレーションを実行可能である。
【０１５４】
図１７は、情報処理装置（コンピュータ）の構成図である。
実施の形態のシミュレーション装置１０１，２１０１、３１０１は、例えば、図１７に示すような情報処理装置（コンピュータ）１によって実現可能である。
【０１５５】
情報処理装置１は、ＣＰＵ２、メモリ３、入力部４、出力部５、記憶部６、記録媒体駆動部７、及びネットワーク接続部８を備え、それらはバス９により互いに接続されている。
【０１５６】
ＣＰＵ２は、情報処理装置１全体を制御する中央処理装置である。ＣＰＵ２は、コード変換部１１０，２１１０，３１１０、シミュレーション実行部１２０，２１２０，３１２０、およびシミュレーション情報収集部１３０，２１３０，３１３０として動作する。
【０１５７】
メモリ３は、プログラム実行の際に、記憶部６（あるいは可搬記録媒体１０）に記憶されているプログラムあるいはデータを一時的に格納するRead Only Memory(ＲＯＭ)やRandom Access Memory(ＲＡＭ)等のメモリである。ＣＰＵ２は、メモリ３を利用してプログラムを実行することにより、上述した各種処理を実行する。
【０１５８】
この場合、可搬記録媒体１０等から読み出されたプログラムコード自体が実施の形態の機能を実現する。
【０１５９】
入力装置４は、例えば、キーボード、マウス、タッチパネル、カメラ、またはセンサ等であり、ユーザ又はオペレータからの指示や情報の入力、情報処理装置１で用いられるデータの取得等に用いられる。
【０１６０】
出力装置５は、例えば、ディスプレイ、またはプリンタ等である。出力部５は、ユーザ又はオペレータへの問い合わせや処理結果を出力したり、ＣＰＵ２による制御により動作する装置である。
【０１６１】
記憶部６は、例えば、磁気ディスク装置、光ディスク装置、テープ装置等である。情報処理装置１は、記憶部６に、上述のプログラムとデータを保存しておき、必要に応じて、それらをメモリ３に読み出して使用する。メモリ３および記憶部６は、ターゲットプロ部ラム２０１、タイミング情報３０１、予測情報４０１、およびシミュレーション情報５０１を格納する。
【０１６２】
記録媒体駆動部７は、可搬記録媒体１０を駆動し、その記録内容にアクセスする。可搬記録媒体としては、メモリカード、フレキシブルディスク、Compact Disk Read Only Memory(ＣＤ−ＲＯＭ)、光ディスク、光磁気ディスク等、任意のコンピュータ読み取り可能な記録媒体が用いられる。ユーザは、この可搬記録媒体１０に上述のプログラムとデータを格納しておき、必要に応じて、それらをメモリ３に読み出して使用する。
【０１６３】
ネットワーク接続装置８は、Local Area Network（ＬＡＮ）やWide Area Network（ＷＡＮ）等の任意の通信ネットワークに接続され、通信に伴うデータ変換を行う通信インターフェースである。ネットワーク接続装置８は、通信ネットワークを介して接続された装置へデータの送信または通信ネットワークを介して接続された装置からデータを受信する。
【０１６４】
以上の実施の形態に関し、さらに以下の付記を開示する。
（付記１）
ターゲットプロセッサに対するプログラムの命令実行のシミュレーションをコンピュータに実行させるシミュレーションプログラムであって、
前記プログラムのコードに含まれる主記憶アクセス命令の処理の実行結果を予測結果として設定し、
前記予測結果を前提とする命令実行の機能シミュレーションを行い、前記主記憶アクセス命令の実行タイミングを示すタイミング情報を得て、前記機能シミュレーションの結果と前記タイミング情報とをもとに、前記予測結果での主記憶アクセス命令の実行時間を算出し、
前記機能シミュレーションの結果をもとに、前記予測結果を前提とする命令実行の性能シミュレーションに用いられる、前記主記憶アクセス命令を含むホストコードを生成し、
前記生成されたホストコードを実行し、
前記ホストコードに含まれる前記主記憶アクセス命令におけるキャッシュアクセスの実行結果が前記予測結果と異なる場合に、前記主記憶アクセス命令においてアクセスするメモリの種類を判定し、
前記メモリの種類の判定結果に応じた補正値を用いて、前記予測結果での主記憶アクセス命令の実行時間を補正して、前記機能シミュレーションでの前記主記憶アクセス命令の実行時間とする、
処理を実行させるシミュレーションプログラム。
（付記２）
前記主記憶アクセス命令においてアクセスするメモリの種類を判定する処理を行わず、前記メモリの種類の判定結果に応じた補正値を用いて、前記予測結果での主記憶アクセス命令の実行時間を補正して、前記機能シミュレーションでの前記主記憶アクセス命令の実行時間とする処理を実行させるように、前記メモリの種類の判定結果に基づいて、前記ホストコードを書き換える処理をさらに前記コンピュータに実行させる付記１記載のシミュレーションプログラム。
（付記３）
前記ターゲットプロセッサは、第１のモードと前記第１のモードよりも動作の制限が大きい第２のモードを有し、
前記ホストコードを生成する処理は、
前記主記憶アクセス命令の実行時の前記ターゲットプロセッサが前記第１のモードの場合、前記ホストコードに含まれる前記主記憶アクセス命令におけるキャッシュアクセスの実行結果が前記予測結果と異なる場合に、前記主記憶アクセス命令においてアクセスするメモリの種類を判定し、前記メモリの種類の判定結果に応じた補正値を用いて、前記予測結果での前記主記憶アクセス命令の実行時間を補正して、前記機能シミュレーションでの前記前記主記憶アクセス命令の実行時間とする処理を実行させる前記ホストコードを生成し、
前記主記憶アクセス命令の実行時の前記ターゲットプロセッサが前記第２のモードの場合、前記ホストコードに含まれる前記主記憶アクセス命令におけるキャッシュアクセスの実行結果が前記予測結果と異なる場合に、前記主記憶アクセス命令においてアクセスするメモリの種類を判定し、前記メモリの種類の判定結果に応じた補正値を用いて、前記予測結果での前記主記憶アクセス命令の実行時間を補正して、前記機能シミュレーションでの前記主記憶アクセス命令の実行時間とし、前記主記憶アクセス命令においてアクセスするメモリの種類を判定する処理を行わず、前記メモリの種類の判定結果に応じた補正値を用いて、前記予測結果での前記主記憶アクセス命令の実行時間を補正して、前記機能シミュレーションでの前記主記憶アクセス命令の実行時間とする処理を実行させるように、前記メモリの種類の判定結果に基づいて、前記ホストコードを書き換える処理を実行させる前記ホストコードを生成することを特徴とする付記１記載のシミュレーションプログラム。
（付記４）
ターゲットプロセッサに対するプログラムの命令実行のシミュレーションを実行する情報処理装置であって、
前記プログラムのコードに含まれる主記憶アクセス命令の処理の実行結果を予測結果として設定し、前記予測結果を前提とする命令実行の機能シミュレーションを行い、前記主記憶アクセス命令に含まれる命令の実行タイミングを示すタイミング情報を得て、前記機能シミュレーションの結果と前記タイミング情報とをもとに、前記予測結果での主記憶アクセス命令の実行時間を算出する予測シミュレーション実行部と、
前記機能シミュレーションの結果をもとに、前記予測結果を前提とする命令実行の性能シミュレーションに用いられる前記主記憶アクセス命令を含むホストコードを生成するコード生成部と、
前記生成されたホストコードを実行するコード実行部と、
前記ホストコードに含まれる主記憶アクセス命令におけるキャッシュアクセスの実行結果が前記予測結果と異なる場合に、前記主記憶アクセス命令においてアクセスするメモリの種類を判定する判定部と、
前記メモリの種類の判定結果に応じた補正値を用いて、前記予測結果での主記憶アクセス命令の実行時間を補正して、前記機能シミュレーションでの前記主記憶アクセス命令の実行時間とする補正部と
を備える情報処理装置。
（付記５）
前記主記憶アクセス命令においてアクセスするメモリの種類を判定する処理を行わず、前記メモリの種類の判定結果に応じた補正値を用いて、前記予測結果での主記憶アクセス命令の実行時間を補正して、前記機能シミュレーションでの前記主記憶アクセス命令の実行時間とする処理を前記補正部に実行させるように、前記メモリの種類の判定結果に基づいて、前記ホストコードを書き換える最適化部をさらに備えることを特徴とする付記４記載の情報処理装置。
（付記６）
前記ターゲットプロセッサは、第１のモードと前記第１のモードよりも動作の制限が大きい第２のモードを有し、
前記コード生成部は、
前記主記憶アクセス命令の実行時の前記ターゲットプロセッサが前記第１のモードの場合、前記ホストコードに含まれる前記主記憶アクセス命令におけるキャッシュアクセスの実行結果が前記予測結果と異なる場合に、前記主記憶アクセス命令においてアクセスするメモリの種類を判定し、前記メモリの種類の判定結果に応じた補正値を用いて、前記予測結果での前記主記憶アクセス命令の実行時間を補正して、前記機能シミュレーションでの前記前記主記憶アクセス命令の実行時間とする処理を実行させる前記ホストコードを生成し、
前記主記憶アクセス命令の実行時の前記ターゲットプロセッサが前記第２のモードの場合、前記ホストコードに含まれる前記主記憶アクセス命令におけるキャッシュアクセスの実行結果が前記予測結果と異なる場合に、前記主記憶アクセス命令においてアクセスするメモリの種類を判定し、前記メモリの種類の判定結果に応じた補正値を用いて、前記予測結果での前記主記憶アクセス命令の実行時間を補正して、前記機能シミュレーションでの前記主記憶アクセス命令の実行時間とし、前記主記憶アクセス命令においてアクセスするメモリの種類を判定する処理を行わず、前記メモリの種類の判定結果に応じた補正値を用いて、前記予測結果での前記主記憶アクセス命令の実行時間を補正して、前記機能シミュレーションでの前記主記憶アクセス命令の実行時間とする処理を実行させるように、前記メモリの種類の判定結果に基づいて、前記ホストコードを書き換える処理を実行させる前記ホストコードを生成することを特徴とする付記４記載の情報処理装置。
（付記７）
ターゲットプロセッサに対するプログラムの命令実行のシミュレーションを行うコンピュータが実行するシミュレーション方法であって、
前記プログラムのコードに含まれる主記憶アクセス命令の処理の実行結果を予測結果として設定し、
前記予測結果を前提とする命令実行の機能シミュレーションを行い、前記主記憶命令の実行タイミングを示すタイミング情報を得て、前記機能シミュレーションの結果と前記タイミング情報とをもとに、前記予測結果での主記憶アクセス命令の実行時間を算出し、
前記機能シミュレーションの結果をもとに、前記予測結果を前提とする命令実行の性能シミュレーションに用いられる前記主記憶アクセス命令を含むホストコードを生成し、
前記生成されたホストコードを実行し、前記ホストコードに含まれる前記主記憶アクセス命令におけるキャッシュアクセスの実行結果が前記予測結果と異なる場合に、前記主記憶アクセス命令においてアクセスするメモリの種類を判定し、
前記メモリの種類の判定結果に応じた補正値を用いて、前記予測結果での主記憶アクセス命令の実行時間を補正して、前記機能シミュレーションでの前記主記憶アクセス命令の実行時間とする、
処理を備えるシミュレーション方法。
（付記８）
前記主記憶アクセス命令においてアクセスするメモリの種類を判定する処理を行わず、前記メモリの種類の判定結果に応じた補正値を用いて、前記予測結果での主記憶アクセス命令の実行時間を補正して、前記機能シミュレーションでの前記主記憶アクセス命令の実行時間とする処理を実行させるように、前記メモリの種類の判定結果に基づいて、前記ホストコードを書き換える処理をさらに備える付記７記載のシミュレーション方法。
（付記９）
前記ターゲットプロセッサは、第１のモードと前記第１のモードよりも動作の制限が大きい第２のモードを有し、
前記ホストコードを生成する処理は、
前記主記憶アクセス命令の実行時の前記ターゲットプロセッサが前記第１のモードの場合、前記ホストコードに含まれる前記主記憶アクセス命令におけるキャッシュアクセスの実行結果が前記予測結果と異なる場合に、前記主記憶アクセス命令においてアクセスするメモリの種類を判定し、前記メモリの種類の判定結果に応じた補正値を用いて、前記予測結果での前記主記憶アクセス命令の実行時間を補正して、前記機能シミュレーションでの前記前記主記憶アクセス命令の実行時間とする処理を実行させる前記ホストコードを生成し、
前記主記憶アクセス命令の実行時の前記ターゲットプロセッサが前記第２のモードの場合、前記ホストコードに含まれる前記主記憶アクセス命令におけるキャッシュアクセスの実行結果が前記予測結果と異なる場合に、前記主記憶アクセス命令においてアクセスするメモリの種類を判定し、前記メモリの種類の判定結果に応じた補正値を用いて、前記予測結果での前記主記憶アクセス命令の実行時間を補正して、前記機能シミュレーションでの前記主記憶アクセス命令の実行時間とし、前記主記憶アクセス命令においてアクセスするメモリの種類を判定する処理を行わず、前記メモリの種類の判定結果に応じた補正値を用いて、前記予測結果での前記主記憶アクセス命令の実行時間を補正して、前記機能シミュレーションでの前記主記憶アクセス命令の実行時間とする処理を実行させるように、前記メモリの種類の判定結果に基づいて、前記ホストコードを書き換える処理を実行させる前記ホストコードを生成することを特徴とする付記７記載のシミュレーション方法。
【符号の説明】
【０１６５】
１１，２１    ハイブリッドメモリシステム
１２，２２    ＣＰＵ
１３，２３    ＤＲＡＭ
１４，２４    ＮＶＲＡＭ
１５，２５    バス
１０１，２１０１，３１０１    シミュレーション装置
１１０，２１１０，３１１０    コード変換部
１１１，２１１１，３１１１    ブロック分割部
１１３，２１１３，３１１３    予測シミュレーション実行部
１１５，２１１５，３１１５    コード生成部
１２０，２１２０，３１２０    シミュレーション実行部
１２１，２１２１，３１２１    コード実行部
１２３，２１２３，３１２３    補正部
１２５，２１２５，３１２５    判定部
２１２７，３１２７    最適化部
１３０，２１３０，３１３０    シミュレーション情報収集部
【図１Ａ】
0006740607.tif 000002
【図１Ｂ】
0006740607.tif 000003
【図２】
0006740607.tif 000004
【図３】
0006740607.tif 000005
【図４】
0006740607.tif 000006
【図５Ａ】
0006740607.tif 000007
【図５Ｂ】
0006740607.tif 000008
【図６Ａ】
0006740607.tif 000009
【図６Ｂ】
0006740607.tif 000010
【図７】
0006740607.tif 000011
【図８】
0006740607.tif 000012
【図９】
0006740607.tif 000013
【図１０Ａ】
0006740607.tif 000014
【図１０Ｂ】
0006740607.tif 000015
【図１０Ｃ】
0006740607.tif 000016
【図１０Ｄ】
0006740607.tif 000017
【図１１】
0006740607.tif 000018
【図１２】
0006740607.tif 000019
【図１３】
0006740607.tif 000020
【図１４】
0006740607.tif 000021
【図１５】
0006740607.tif 000022
【図１６】
0006740607.tif 000023
【図１７】
0006740607.tif 000024