説明

シミュレーション装置,方法,およびプログラム

【課題】 パイプライン処理を制御するCPUの性能シミュレーションを,高速かつ高精度で実行できるようにする。
【解決手段】 シミュレーション装置1のコード変換部11は,ターゲットCPUのプログラムの実行時に,分割した各ブロックで,外部環境が影響する外部依存命令を検出し,外部依存命令の実行結果を予測し,予測結果での命令実行をシミュレーションし,そのシミュレーション結果をもとに性能シミュレーション用コードを組み込んだホストコードを生成する。シミュレーション実行部12は,ホストコードを用いてプログラムの予測結果での命令実行について性能シミュレーションを行い,実行中に外部依存命令の実行結果が予測結果の設定と違う場合に,予想結果での命令の実行時間を,その命令前後に実行される命令の実行時間等を用いて補正する。シミュレーション情報収集部13は,性能シミュレーション情報を収集,出力する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は,仮想的にモデル化されたシステム中でのプロセッサの命令実行について,性能または電力のシミュレーション情報を取得する処理技術に関する。
【背景技術】
【0002】
システムが複雑化して,複数プロセッサ(たとえばCPU)を搭載するマルチコア構成が一般的となっている現況では,各コア(CPU)の機能,性能,電力等のシミュレーション処理について,より高い処理速度や処理精度を実現することが要求されている。
【0003】
機能,性能,消費電力のシミュレーションで,評価対象となるターゲットCPUを,ホストCPUで動作させる場合のターゲットCPUの命令コード(ターゲットコード)からホストCPUの命令コード(ホストコード)への変換手法として,インタープリタ方式またはJIT(Just-in-Time)コンパイラ方式を採用することが知られている。
【0004】
JITコンパイラ方式によるシミュレーションでは,シミュレーション対象であるターゲットCPUについて,実行中のプログラムに出現するターゲットCPUの命令を,シミュレーションを実行するホストCPUの命令に置き換え,以降では,その置き換えた命令を実行している。そのため,JITコンパイラ方式の処理は,インタープリタ方式の処理に比べて高速であり,CPUの機能シミュレーションでは,特に高速性が求められる場合にJITコンパイル方式が採用されていた。
【0005】
JITコンパイラ方式を採用するCPUの性能シミュレーションも提案されている。
【0006】
しかし,クロックごとに各ユニットが独立して動作できるようにした上で,次々に命令を投入・並列で実行するパイプライン処理の制御では,処理実行の度にCPUの内部状態が変化することから,一旦生成したホスト命令を繰り返し利用するというJITコンパイラ方式の利点が活かせない。
【0007】
そのため,一般的に,パイプライン処理やアウトオブオーダ処理を制御するようなCPUに対する性能シミュレーションや電力シミュレーションには,JITコンパイラ方式は適さないとされている。
【先行技術文献】
【特許文献】
【0008】
【非特許文献1】米国特許6,751,583 B1
【発明の概要】
【発明が解決しようとする課題】
【0009】
上記のように,パイプライン処理やアウトオブオーダ処理を制御するCPUに対する機能,性能,電力のシミュレーションにインタープリタ方式を採用する場合,一般的に,処理速度が非常に遅くなり,現実的な手法として活用できないという問題があった。
【0010】
また,昨今の高速なCPUの場合,機能シミュレーションにJITコンパイラ方式を採用した場合に,なんとか実用的な速度で処理が行える。
【0011】
しかし,性能や電力のシミュレーションにJITコンパイラ方式を採用した場合に,ターゲットCPUではパイプラインの制御により処理の前後の状況は多様であり,内部状態に対応した膨大なシミュレーション用コードの追加とその命令実行が必要なため,処理負担が非常に大きいものとなる。
【0012】
さらに,性能シミュレーションで,ターゲットCPUで見込まれる実行遅延に対するタイミングの適応を行うためにも,ホストコードに膨大なシミュレーション用コードを追加する必要がある。例えば,ロード命令(LD:load)のサイクルシミュレーションを実行する際に,この命令によるキャッシュアクセスで,キャッシュミスまたはキャッシュヒットのどちらが生じるか,キャッシュミスの場合に全タイミングを計上し,考慮するべきペナルティサイクルがあるかなどを調べるために,これらの条件記述をホストコードに追加する必要がある。
【0013】
しかし,一方で,高い動作性を維持するために,機能コードに追加される性能シミュレーション(サイクルシミュレーション)用のコード量をできる限り抑制する必要がある。
【0014】
本発明は,高速なシミュレーションを行える技術を提供することを目的とする。
【課題を解決するための手段】
【0015】
本発明の一態様として開示するシミュレーション装置は,パイプライン処理を制御するターゲットプロセッサに対するプログラムの命令実行のシミュレーションを実行するシミュレーション装置であって,1)前記プログラムのコードを所定のブロックに分割し,前記ブロックに含まれる命令のうち,該命令の実行結果が外部環境に依存する外部依存命令の処理の実行結果を予測結果として設定する処理と,前記予測結果を前提とする命令実行の機能シミュレーションを行い,前記ブロックに含まれる命令の実行タイミングを示すタイミング情報を得て,前記機能シミュレーションの結果と前記タイミング情報とをもとに,前記予測結果での外部依存命令の実行時間を算出する処理と,前記機能シミュレーションの結果をもとに,前記予測結果を前提とする命令実行の性能シミュレーションを,前記ターゲットプロセッサを動作させるホストプロセッサに実行させるホストコードを生成する処理とを行うコード変換部と,2)前記ホストプロセッサが前記生成されたホストコードを実行した実行結果において,該ホストコードに含まれる外部依存命令の実行結果が前記予測結果と異なる場合に,該外部依存命令の所定の遅延時間と前記外部依存命令の前後に実行される命令の実行時間とを用いて求めた補正値で,前記予測結果での外部依存命令の実行時間を補正して,前記機能シミュレーションでの該外部依存命令の実行時間とするシミュレーション実行部とを,備える。
【0016】
また,本発明の別の一態様として開示するシミュレーション方法は,前記シミュレーション装置が実行する各処理ステップを備えるものである。
【0017】
さらに,本発明の別の一態様として開示するシミュレーションプログラムは,コンピュータに,前記シミュレーション方法を実行させるためのものである。
【発明の効果】
【0018】
開示されたシミュレーション装置によれば,高速にシミュレーションを行うことが可能となる。
【図面の簡単な説明】
【0019】
【図1】本発明の一実施態様として開示するシミュレーション装置の構成例を示す図である。
【図2】ブロックに含まれる命令の例を示す図である。
【図3】タイミング情報の例を示す図である。
【図4】図2に示す命令実行のタイミング例を示す図である。
【図5】サイクルシミュレーション用コードが組み込まれる例を示す図である。
【図6】シミュレーション装置の補正部の処理動作を示す図である。
【図7】シミュレーション装置の補正部のLD命令の実行結果に対する補正例を示す図である。
【図8】シミュレーション装置の補正部のLD命令の実行結果に対する補正例を示す図である。
【図9】補正部123のLD命令の実行結果に対する補正例を示す図である。
【図10】第1の実施例におけるシミュレーション装置のコード変換部の概要処理フロー図である。
【図11】第1の実施例におけるシミュレーション装置のシミュレーション実行部の概要処理フロー図である。
【図12】外部依存命令の一例として,ロード(ld)命令の処理についての予測結果の判定および補正の処理フロー例を示す図である。
【図13】ターゲットプログラムの命令と変換後のホストプログラムのホスト命令数との関係を示す図である。
【図14】第2の実施例におけるシミュレーション装置1のコード変換部11の概要処理フロー図である。
【図15】第2の実施例におけるシミュレーション装置1のコード変換部11の概要処理フロー図である。
【図16】別の実施形態におけるシミュレーション装置の構成例を示す図である。
【図17】シミュレーション装置の電力シミュレーション情報生成部の実施例を示す図である。
【発明を実施するための形態】
【0020】
図1は,本発明の一実施態様として開示するシミュレーション装置の一実施形態における構成例を示す図である。
【0021】
シミュレーション装置1は,パイプライン処理を制御するターゲットCPUにおける命令実行の性能シミュレーションを実行する装置である。
【0022】
ターゲットCPUは,シミュレーションの対象となるCPUの制御モデルである。シミュレーション装置1は,ターゲットCPUの命令実行の性能シミュレーションとして各命令のサイクルシミュレーション情報を出力する。
【0023】
ここで,ターゲットCPUは,例えばARMアーキテクチャのCPUである。ホストCPUに相当するシミュレーション装置1は,例えばX86アーキテクチャのCPUを搭載するコンピュータである。
【0024】
シミュレーション装置1は,コード変換部11とシミュレーション実行部12とシミュレーション情報収集部13とを有する。
【0025】
コード変換部11は,ターゲットCPUのプログラムの実行時に,ターゲットCPUが実行するプログラムのコード(ターゲットコード)から,シミュレーションを実行するホストCPUのコード(ホストコード)を生成する処理部である。
【0026】
コード変換部11は,ブロック分割部111,予測シミュレーション実行部113,コード生成部115を有する。
【0027】
ブロック分割部111は,シミュレーション装置1に入力されたプログラムのターゲットコードを,所定のブロックに分割する。分割されるブロック単位は,例えば,一般的なベーシックブロック(分岐から次の分岐前までのコード)単位でよく,または,予め定められた任意のコード単位でよい。
【0028】
図2は,ブロックに含まれる命令の例を示す図である。
【0029】
図2に示すように,あるブロックには,ターゲットコードの3つの命令;(1)“LD r1,r2”(ロード);(2)“MULT r3,r4, r5(乗算)”;(3)“ADD r2,r5, r6(加算)”の命令が含まれ,(1)〜(3)の順でターゲットCPUのパイプラインに投入されて実行されるとする。各命令のr1〜r6は,レジスタ(アドレス)を表す。
【0030】
予測シミュレーション実行部113は,タイミング情報3と予測情報4とを得て,入力されたブロックをある実行結果を前提とした条件下で実行する性能シミュレーションを行う処理部である。
【0031】
タイミング情報3は,ターゲットコードの各命令について,命令実行時の各処理要素(段階)と使用可能なレジスタとの対応を示す情報と,命令のうち外部依存命令ごとに,実行結果に応じた遅延時間を定めるペナルティ時間(ペナルティサイクル数)とを示す情報である。
【0032】
外部依存命令は,外部環境が関係する処理を行う命令,例えば,ロード命令またはストア命令などのように,命令の実行結果がターゲットCPU外の外部環境に依存するような処理,例えば,命令キャッシュ,データキャッシュ,TLB検索などであったり,さらには,分岐予測,コール/リターンのスタックなどの処理を行う命令である。
【0033】
図3は,タイミング情報3の例を示す図である。
【0034】
図3に示すタイミング情報3では,LD命令について,ソースレジスタrs1(r1)は1番目の処理要素(e1)で,宛先レジスタrd(r2)は2番目の処理要素(e2)で使用可能であることを表す。
【0035】
また,MULT命令では,第1ソースレジスタrs1(r3)は1番目の処理要素(e1),第2ソースレジスタrs2(r4)は2番目の処理要素(e2),宛先レジスタrd(r5)は3番目の処理要素(e3)で,それぞれ使用可能であることを示す。また,ADD命令では,第1ソースレジスタrs1(r2),第2ソースレジスタrs2(r5)は1番目の処理要素(e1),宛先レジスタrd(r6)は2番目の処理要素(e2)で使用可能であることを示す。
【0036】
図4は,図2に示すブロックの各命令の実行タイミング例を示す図である。
【0037】
図3に示すタイミング情報3から,パイプラインに各命令が投入されるタイミングは,LD命令の実行開始がタイミングtとすると,MULT命令はタイミングt+1,ADD命令はタイミングt+2となる。
【0038】
ADD命令の第1ソースレジスタ(r2)と第2ソースレジスタ(r5)は,LD命令とMULT命令で使用されているため,ADD命令の開始は,LD命令とMULT命令の実行完了のタイミングt+4以降となり,2サイクル分の待機時間(2サイクル分のストール)が生じる。
【0039】
したがって,図4(A)に示すように,図2に示すブロックをシミュレーションした場合に,LD命令の実行結果がキャッシュヒットであるケースでは,ブロックの実行時間が6サイクルであることがわかる。
【0040】
図4(B)は,図2に示すブロックのLD命令の実行結果がキャッシュミスである場合のタイミング例を表す。
【0041】
LD命令の結果がキャッシュミスであると,タイミング情報3に,ペナルティとして,再実行に十分と考えられる任意の時間(ここでは6サイクル分)が設定されているため,このペナルティサイクルが遅延時間として追加される。したがって,2番目の処理要素(e2)の実行は,タイミングt+7に遅延する。LD命令の次に実行されるMULT命令は,遅延の影響を受けずにそのまま実行されるが,ADD命令は,LD命令の実行完了のタイミングt+8以降となり,4サイクル分の待機時間(4サイクル分のストール)が生じる。
【0042】
したがって,図4(B)に示すように,図2に示すブロックの命令実行をシミュレーションした場合に,LD命令の実行結果がキャッシュミスであるケースでは,実行時間が10サイクルとなることがわかる。
【0043】
予測情報4は,ターゲットコードの外部依存命令の処理において,生じる確率が高い実行結果(予測結果)を定めた情報である。予測情報には,例えば,
「命令キャッシュ:予測=ヒット,
データキャッシュ:予測=ヒット,
TLB検索:予測=ヒット,
分岐予測:予測=ヒット,
コール/リターン:予測=ヒット,…」
が定められる。
【0044】
予測シミュレーション実行部113は,上記の予測情報4をもとに,入力されたブロックに含まれる外部依存命令の予測結果を設定し,タイミング情報3を参照して,設定した予測結果を前提とする場合(予測ケース)の命令を実行して,命令実行の進み具合をシミュレーションする。予測シミュレーション実行部113は,シミュレーション結果として,ブロックに含まれる各命令の実行時間(所要サイクル数)を求める。
【0045】
コード生成部115は,予測シミュレーション実行部113のシミュレーション結果をもとに,処理したブロックに対応するホストコードとして,設定された予測ケースにおける命令実行時の性能シミュレーションを行うためのホストコード(性能シミュレーション用ホストコード)を生成する処理部である。
【0046】
コード生成部115は,ブロックのターゲットコードをもとに,外部依存命令が予測結果である予測ケースの場合の命令実行を行うホストコードを生成し,さらに,各命令の実行時間を加算して,ブロックの処理時間を計算する処理を行うシミュレーション用コードを組み込む。
【0047】
例えば,コード生成部115は,データのLD命令の予測結果として“キャッシュヒット”が設定されている処理については,そのブロック内のLD命令によるキャッシュアクセスが“ヒット”である場合の処理実行をシミュレーションして,この予測ケースでの実行時間を求め,LD命令によるキャッシュアクセスが“ミス”である場合の実行時間は,予測ケースである“ヒット”時の実行時間の加算/減算を用いた補正計算により求める処理を行うホストコードを生成する。
【0048】
シミュレーション実行部12は,コード生成部115が生成したホストコードを実行して,プログラム(ターゲットコード)を実行するターゲットCPUの命令実行の機能および性能シミュレーションを行う処理部である。
【0049】
シミュレーション実行部12は,コード実行部121,補正部123を有する。
【0050】
コード実行部121は,ホストコードを用いて,プログラム(ターゲットコード)を実行する処理部である。
【0051】
補正部123は,プログラムの実行中に,外部依存命令の実行結果が,設定されていた予測結果と異なる場合(予測外ケース)に,その命令の実行時間を,既に求めた予想ケースでの実行時間を補正して求める処理部である。
【0052】
補正部123は,外部依存命令に与えられるペナルティ時間,外部依存命令の前後で実行される命令の実行時間,1つ前の命令の遅延時間などを用いて補正を行う。なお,補正処理の詳細は後述する。
【0053】
シミュレーション情報収集部13は,性能シミュレーションの実行結果として,各命令の実行時間を含むログ情報(シミュレーション情報)5を収集する処理部である。
【0054】
以下に,第1の実施例におけるシミュレーション装置1の処理の流れを説明する。
【0055】
〔コード変換処理〕
(1) シミュレーション装置1のコード変換部11のブロック分割部111は,ターゲットプログラム2のターゲットコードを得て記憶部(図1に図示しない)に保持し,保持したターゲットコードを任意のブロックに分割する(図2参照)。
【0056】
(2) 予測シミュレーション実行部113は,入力されるターゲットプログラム2に関するタイミング情報3,予測情報4を得て記憶部に保存する。
【0057】
そして,予測シミュレーション実行部113は,予測情報4をもとに,分割されたブロックの外部依存命令のそれぞれについて予測結果を設定する。例えば,予測シミュレーション実行部113は,図2に示すブロックの命令のうち,LD命令のデータキャッシュの予測結果として「ヒット」を設定する。
【0058】
(3) 予測シミュレーション実行部113は,ブロックのコードを解釈して,設定された予測結果を前提とする場合の命令実行をシミュレーションする。すなわち,予測シミュレーション実行部113は,図4(A)に示すタイミング例の命令実行をシミュレーションすることになる。
【0059】
(4) 次に,コード生成部115は,予測ケースのシミュレーション結果をもとに,ターゲットコードからホストコードを生成する。さらに,コード生成部115は,ターゲットコードから変換したホストコード(機能コードのみ)に,性能シミュレーション(サイクルシミュレーション)を実行するためのサイクルシミュレーション用コードを組み込む。
【0060】
図5(A)は,ターゲットコードから機能シミュレーションのホストコードが生成される例を示す図,図5(B)は,機能シミュレーションのホストコードに,サイクルシミュレーション用コードが組み込まれる例を示す図である。
【0061】
図5(A)に示すように,ターゲットコードInst_Aは,ホストコードHost_Inst_A0_func,Host_Inst_A1_funcに変換され,ターゲットコードInst_Bは,ホストコードHost_Inst_B0_func,Host_Inst_B1_func,Host_Inst_B2_func,…に変換されて,機能コードのみのホストコードが生成される。
【0062】
さらに,機能コードのみのホストコードに,ターゲットコードInst_Aのサイクルシミュレーション用コードHost_Inst_A2_cycle,Host_Inst_A3_cycleが,ターゲットコードInst_Bのサイクルシミュレーション用コードHost_Inst_B4_cycle,Host_Inst_B5_cycleが,それぞれ組み込まれる。
【0063】
サイクルシミュレーション用コードは,各命令の実行時間(所要サイクル数)を定数化し,各命令の実行時間を合計してブロックの処理時間を求めるコードである。これにより,ブロック実行中の進み具合を示す情報を得ることができる。
【0064】
ここで,ホストコードのうち,機能コード,外部依存命令以外の命令についてのサイクルシミュレーション用コードは既知のコードを使用して実施できるので,具体例の説明を省略する。外部依存命令についてのサイクルシミュレーション用コードは,補正処理を呼び出すヘルパー関数として用意される。ヘルパー関数については後述する。
【0065】
〔シミュレーション処理〕
(1) シミュレーション実行部12のコード実行部121は,コード変換部11が生成したホストコードを用いて,ターゲットプログラム2の性能シミュレーションを行う。
【0066】
コード実行部121は,ターゲットプログラム2の命令実行をシミュレーションし,各命令の実行時間を得ていく。
【0067】
(2) コード実行部121は,シミュレーションの実行中に,外部依存命令(例えばLD命令)を検出した場合に,その実行結果が,設定された予測結果と異なっているかを判定し,実行結果が予測結果と違っている場合に,補正部123の起動を要求する。例えば,命令「LD,r1,r2」を検出し,データキャッシュの予測結果(キャッシュヒット)と,実際の実行結果(キャッシュミス)とが異なっていた場合に,補正部123が呼び出される。
【0068】
(3) 補正部123は,呼び出しを受けて起動し,検出された命令「LD,r1,r2」の実行時間(サイクル数)を補正する。さらに,補正部123は,この補正により,次命令の実行タイミングt+nも変更する。
【0069】
補正部123は,外部依存命令の実行結果が予測結果と異なる度に,命令の実行時間を補正する。ここで,予測ケースでの外部依存命令の実行時間は既に定数化されているため,補正部123は,予測外ケースでの外部依存命令の実行時間を,その命令に対するペナルティ時間,前後に実行される命令の実行時間,前に処理された命令の遅延時間等の値を単に加算または減算して計算することができる。
【0070】
図6は,補正部123の処理動作を示す図である。
【0071】
補正部123は,ヘルパー関数モジュールとして実施される。
【0072】
本実施形態では,例えば,LD命令のキャッシュの実行結果ごとにシミュレーションを行う従来の関数「cache_ld(address)」の代わりに,ヘルパー関数「cache_ld(address,rep_delay,pre_delay)」がホストコードに組み込まれることにより,実現している。
【0073】
ヘルパー関数の“rep_delay”は,このロード(ld)命令の返り値を使用する次の命令の実行までに,ペナルティ時間のうち遅延時間として処理されなかった時間(猶予時間)である。“pre_delay”は,1つ前の命令から受ける遅延時間である。“−1”は,前の命令に遅延がないことを示す。“rep_delay”と“pre_delay”は,性能シミュレーション結果とタイミング情報3との静的分析処理の結果から得られる時間情報である。
【0074】
図6に示す動作例では,補正部123は,現タイミングcurrent_timeと1つ前のld命令の実行タイミングpreld_timeとの差が,1つ前のld命令の遅延時間分pre_delayを超えているときは,1つ前のld命令の実行タイミングpreld_timeと現タイミングcurrent_timeまでの時間で遅延時間pre_delayを調整して有効遅延時間avail_delayを求める。
【0075】
次に,補正部123は,実行結果がキャッシュミスであれば,予測結果の誤りであり,有効遅延時間avail_delayにキャッシュミス時のペナルティ時間cache_miss_latencyを加算して,猶予時間rep_delayをもとに,LD命令の実行時間を補正する。
【0076】
図7〜図9は,補正部123のLD命令の実行結果に対する補正例を示す図である。
【0077】
図7は,1つのキャッシュ処理が実行されるケースで1つのキャッシュミスが生じた場合の補正例を説明するための図である。
【0078】
図7の例では,以下の3命令のシミュレーションが実行される。
「ld [r1],r2 :[r1]→r2;
mult r3,r4,r5 :r3*r4→r5;
add r2,r5,r6 :r2+r5→r6」
図7(A)は,予測結果が「キャッシュヒット」の場合の命令実行タイミングのチャート例を示す図である。この予測ケースにおいて,3番目に実行されるadd命令に,2サイクルストールが生じている。
【0079】
図7(B)は,予測結果と異なる「キャッシュミス」の場合の命令実行タイミングのチャート例を示す図である。この予測ミスのケースでは,ld命令の実行結果がキャッシュミスであると,ペナルティサイクル(6サイクル)分の遅延が生じる。そのため,mult命令は,遅延の影響を受けずに実行されるが,add命令の実行は,ld命令の完了を待つため,4サイクル分遅延することになる。
【0080】
図7(C)は,補正部123による補正後の命令実行タイミングチャートの例を示す図である。
【0081】
補正部123は,ld命令の実行結果がキャッシュミスであるので(予測結果のミス),残りの実行時間(2−1=1サイクル)に所定のキャッシュミス時のペナルティ時間(6サイクル)を加算して有効遅延時間(7サイクル)とする。有効遅延時間は,最大の遅延時間となる。
【0082】
さらに,補正部123は,次のmult命令の実行時間(3サイクル)を得て,次命令の実行時間が遅延時間を超過しないと判定して,有効遅延時間から次命令の実行時間を差し引いた時間(7−3=4サイクル)を,ld命令の遅延が生じた実行時間(遅延時間)とする。
【0083】
また,補正部123は,有効遅延時間から上記の遅延時間を差し引いた時間(3サイクル)を猶予時間とする。猶予時間は,ペナルティとしての遅延が猶予された時間である。
【0084】
補正部123は,ヘルパー関数cache_ld(addr,rep_delay,pre_delay)で,猶予時間rep_delay=3,前命令の遅延時間pre_delay=−1(遅延なし)を返す。
【0085】
この補正により,ld命令の実行時間は,実行された時間と遅延時間を加算した実行時間(1+4=5サイクル)となり,実行完了のタイミングtから,後続のmult命令,add命令の実行時間が計算される。
【0086】
すなわち,補正したld命令の実行時間(5サイクル)に,予測シミュレーション実行部113の処理結果(予測結果による予測シミュレーションの結果)で求められていたmult命令とadd命令の各々の実行時間(3サイクル,3サイクル)を単純に加算するだけで,このブロックの実行時間(サイクル数)を得ることができる。
【0087】
よって,実行結果が予測と異なる命令の実行時間のみを加算または減算による補正処理を行って,その他の命令については,予測結果にもとづくシミュレーション時に求められた実行時間を加算するだけで,高精度に,キャッシュミス時のシミュレーションの実行サイクル数をも求めることができる。
【0088】
図7(D)は,シミュレーション装置1の処理と比較するために,従来技術によるキャッシュミス時のサイクル数を単純な加算により求めた場合の誤差の大きさを示す図である。図7(D)の場合には,ld命令の遅延時間をそのまま加算しているため,実際には,ld命令の実行中に実行が完了するmult命令の実行タイミングのずれによる誤差が生じていることがわかる。
【0089】
図8は,2つのキャッシュ処理が実行されるケースで2つのキャッシュミスが生じた場合の補正例を説明するための図である。
【0090】
図8の例では,以下の5命令のシミュレーションが実行される。
「ld [r1],r2 :[r1]→r2;
ld [r3],r4 :[r3]→r4;
mult r5,r6,r7 :r5*r6→r7;
add r2,r4,r2 :r2+r4→r2;
add r2,r7,r2 :r2+r7→r2」
図8(A)は,2つのキャッシュ処理での予測結果が「キャッシュヒット」の場合の命令実行タイミングのチャート例を示す図である。この予測ケースでは,2つのld命令が,2サイクル分(通常の1サイクル+付加した1サイクル)をあけて実行されるものとする。
【0091】
図8(B)は,2つのキャッシュ処理の両方が予測結果と異なる「キャッシュミス」の場合の命令実行タイミングのチャート例を示す図である。この予測ミスのケースでは,2つのld命令のそれぞれでキャッシュミスがあり,ペナルティサイクル(6サイクル)分の遅延が生じる。しかし,2つのld命令の遅延時間は重なる時間があり,mult命令も,遅延の影響を受けずに実行され,2つのadd命令の実行が2つめのld命令の完了まで遅延することになる。
【0092】
図8(C)は,補正部123による補正後の命令実行タイミングチャートの例を示す図である。
【0093】
補正部123は,図7を用いて説明したように,タイミングtにおいて,1つめのld命令の遅延時間を補正し,ヘルパー関数cache_ld(addr,3,−1)を返す。
【0094】
次に,現タイミングtにおいて,補正部123は,2つめのld命令の実行結果がキャッシュミスであるので(予測結果のミス),このld命令の残りの実行時間にペナルティサイクル(6)を追加して有効遅延時間(1+6=7サイクル)とする。
【0095】
補正部123は,有効遅延時間から,現タイミングtまでに消費した遅延時間(<現タイミングt−前命令の実行タイミングt>−設定された間隔)を差し引いて,現タイミングtから超過した有効遅延時間を求め(7−(6−2)=3サイクル),この超過した有効遅延時間を,2つめのld命令の実行時間とする。
【0096】
さらに,補正部123は,超過した有効遅延時間から本来の実行時間を差し引いて(3−1=2サイクル),前命令の遅延時間とする。
【0097】
また,補正部123は,有効遅延時間から,現タイミングtまでに消費した遅延時間と現タイミングtで超過した有効遅延時間との合計を差し引いて(7−(3+3)=1サイクル),猶予時間とする。
【0098】
補正部123は,タイミングtにおいて,2つめのld命令の遅延時間を補正した後,ヘルパー関数cache_ld(addr,2,1)を返す。
【0099】
この補正により,現タイミングtに補正値(3サイクル)を付加したタイミングがld命令の実行完了のタイミングとなり,そのタイミングから,以降のmult命令,add命令の実行時間が加算されていくことになる。
【0100】
図8(D)は,シミュレーション装置1の処理と比較するために,従来技術によるキャッシュミス時のサイクル数を単純な加算により求めた場合の誤差の大きさを示す図である。図8(D)の場合には,2つのld命令それぞれに与えられたペナルティにもとづく遅延時間をそのまま加算しているため,大きな誤差(9サイクル)が生じていることがわかる。図8(C)に示す補正部123の処理でも,図8(B)に示すように正しくシミュレーションされる場合に比べて誤差(1サイクル)があるが,従来手法に比べて,非常に高精度に求められることがわかる。
【0101】
図9は,2つのキャッシュ処理が実行されるケースで1つのキャッシュミスが生じた場合の補正例を説明するための図である。図9の例では,図8で示す説明例と同様の5つの命令のシミュレーションが実行される。
【0102】
図9(A)は,2つのキャッシュ処理での予測結果が「キャッシュヒット」の場合の命令実行タイミングのチャート例を示す図である。この予測ケースでは,図8(A)の場合と同様に,2つのld命令が,2サイクル分(通常の1サイクル+付加した1サイクル)をあけて実行されるものとする。
【0103】
図9(B)は,1つめのld命令が予測結果と異なる「キャッシュミス」となり,2つめのld命令の結果が予測結果(キャッシュヒット)である場合の命令実行タイミングのチャート例を示す図である。この予測ミスのケースでは,2つのld命令のそれぞれにペナルティサイクル(6サイクル)分の遅延が生じる。しかし,2つのld命令の遅延時間は重なる時間があり,mult命令も,遅延の影響を受けずに実行され,2つのadd命令の実行が2つめのld命令の完了まで遅延することになる。
【0104】
図9(C)は,補正部123による補正後の命令実行タイミングチャートの例を示す図である。
【0105】
補正部123は,図7を用いて説明したように,タイミングtにおいて,1つめのld命令の遅延時間を補正し,ヘルパー関数cache_ld(addr,3,−1)を返す。
【0106】
次に,現タイミングtにおいて,補正部123は,2つめのld命令の実行結果がキャッシュヒットであるので(予測結果),このld命令の実行開始から現タイミングtまでの時間<t−t−設定された間隔(6−0−2=4サイクル)>が,このld命令の実行時間(2サイクル)より大きいかを判断する。
【0107】
補正部123は,2つめのld命令の実行開始から現タイミングtまでの時間が,このld命令の実行時間(2サイクル)より大きいので,現タイミングtを,次のmult命令の実行タイミングとする。
【0108】
そして,補正部123は,2つめのld命令の実行完了から現タイミングt1までの時間を(2サイクル),次の命令に対する遅延時間として扱い,前命令の遅延時間pre_delay=2とする。また,補正部123は,1つめのld命令の有効遅延時間から,現タイミングtまでに消費した遅延時間と現タイミングtで超過した有効遅延時間との合計を差し引いて(7−(6+0)=1サイクル),猶予時間rep_delay=1とし,ヘルパー関数cache_ld(addr,1,2)を返す。
【0109】
図9(D)は,シミュレーション装置1の処理と比較するために,従来技術によるキャッシュミス時のサイクル数を単純な加算により求めた場合の誤差の大きさを示す図である。図9(D)の場合には,1つめのld命令のペナルティによる遅延時間をそのまま加算しているため誤差が生じていることがわかる。
【0110】
図10は,第1の実施例におけるシミュレーション装置1のコード変換部11の概要処理フロー図である。
【0111】
シミュレーション装置1において,コード変換部11のブロック分割部111は,ターゲットプログラムのコード(ターゲットオード)を所定の単位のブロックに分割して入力する(ステップS1)。
【0112】
予測シミュレーション実行部113は,ブロックの命令を分析して,外部依存命令を検出して(ステップS2),検出した全ての命令について,予測情報4をもとに,確率が高い実行結果を予測ケースとして決定する(ステップS3)。
【0113】
さらに,予測シミュレーション実行部113は,タイミング情報3を参照して,ブロックの各命令について予測結果として設定された実行結果を前提とする性能シミュレーションを実行する(ステップS4)。
【0114】
コード生成部115は,シミュレーション結果をもとに,シミュレーション実行部12が実行する性能シミュレーション用ホストコードを生成する(ステップS5)。
【0115】
以上のステップS1〜S5の処理により,設定された実行結果の場合(予測ケース)での機能コードに,ターゲットCPUの性能をシミュレーションするコードが組み込まれたホストコードが出力される。
【0116】
図11は,第1の実施例におけるシミュレーション装置1のシミュレーション実行部12の概要処理フロー図である。
【0117】
シミュレーション装置1において,シミュレーション実行部12のコード実行部121は,コード生成部115が生成したホストコードを実行し,性能シミュレーションを行う(ステップS10)。コード実行部121は,実行中に外部依存命令を検出すると(ステップS11),その命令の実行結果が予測結果として設定されたものと同じであるかを判定する(ステップS12)。外部依存命令の実行結果が設定された予測結果と同じではない場合にのみ(ステップS12のN),補正部123が呼び出され,補正部123は,その外部依存命令の実行時間を補正する(ステップS13)。
【0118】
そして,シミュレーション情報収集部13は,ターゲットプログラムに相当するホストコード全てのシミュレーション処理についてのシミュレーション情報5を出力する(ステップS14)。
【0119】
以上のステップS10〜S14の処理ステップにより,ターゲットプログラム2を実行するターゲットCPUのシミュレーション情報(サイクルシミュレーション情報)5が出力される。
【0120】
図12は,外部依存命令の一例として,ロード(ld)命令の処理についての予測結果の判定および補正の処理フロー例を示す図である。
【0121】
コード実行部121は,処理中のブロックの命令から,外部依存命令を検出すると,補正部123に相当するヘルパー関数を呼び出す(ステップS20)。
【0122】
コード実行部121は,ld命令で,キャッシュアクセスが要求されているかを判定し(ステップS21),キャッシュアクセスが要求されていれば(ステップS21のY),キャッシュアクセスをシミュレーションする(ステップS22)。キャッシュアクセスの結果が“キャッシュミス”であれば(ステップS23の“ミス”),補正部123は,ld命令の実行時間(サイクル数)の補正を行い(ステップS24),補正された実行時間(サイクル数)を出力する(ステップS25)。
【0123】
ステップS21で,キャッシュアクセスが要求されていない場合(ステップS21のN),または,要求されたキャッシュアクセスが“キャッシュヒット”であれば(ステップS23の“ヒット”),補正部123は,未補正の予測された実行時間(サイクル数)を出力する(ステップS26)。
【0124】
次に,第2の実施例におけるシミュレーション装置1の処理の流れを説明する。
【0125】
第1の実施例において,シミュレーション装置1のコード変換部11は,ターゲットコードから外部依存命令を検出して,ヘルパー関数を呼び出すホスト命令を含む性能シミュレーション用コードを生成している。すなわち,コード変換部11では,ターゲットコードの外部依存命令以外の命令については,既知の性能計算用ホストコードを作成する。既知の性能計算用ホストコードは,以下の3つのホスト命令を含むものである。
【0126】
「性能計算命令1:現在の性能値(実行時間)をメモリから読み込む,
性能計算命令2:対象の命令の性能値を加算する,
性能計算命令3:結果をメモリに書き込む」
図13は,ターゲットプログラムの命令と変換後のホストプログラムのホスト命令数との関係を示す図である。
【0127】
図13(A)に示すターゲットプログラムにおいて,命令i0,i1,i2の3命令があり,命令i2が外部依存命令であるとする。この場合に,第1の実施例では,図13(B)に示す変換後のホストプログラムにおいて,ターゲットの命令i0,i1については,ターゲットの命令を変換したホスト命令(機能コード)と性能計算命令1〜3の合計4命令を含むホストコードが生成される。また,命令i2については,機能コード(ホスト命令1,2)と,第1の実施例で説明した処理による性能計算命令(ヘルパー関数)を含む性能シミュレーション用コードが生成される。
【0128】
したがって,外部依存命令以外の命令に対応するホストコード内では,性能シミュレーション用の性能計算命令数が,ターゲットの命令の機能に対応するホスト命令数より多くなり,性能シミュレーションの実行時間において性能計算に要する時間の方が支配的となっていることがわかる。
【0129】
第2の実施例では,シミュレーション装置1のコード変換部11において,ターゲットコードから,性能計算において直前の命令の性能値が必要となるような種類の命令(以下,コード生成対象命令)を検出し,検出したコード生成対象命令に対してのみ,性能計算命令を含むホストコード(シミュレーション用コード)を生成する。そして,コード生成対象命令以外の命令については,その命令の性能値を記録する。
【0130】
コード生成対象命令は,例えば,外部依存命令(LD命令,ST(ストア)命令など),CPUアーキテクチャにもとづいて提供される性能情報取得命令(x86のtscレジスタ読み込み命令,ARMのサイクルカウントレジスタ読み込み命令)などである。
【0131】
さらに,第2の実施例では,シミュレーション装置1のコード変換部11において,ユーザに指定された,ターゲットプログラムの性能値を測定したい範囲(以下,トレース範囲とする)を受け付け,トレース範囲に含まれる命令についてのみ性能シミュレーション用コードを生成する。コード変換部11では,トレース範囲内の命令についてコード生成対象命令を検出し,コード生成対象命令については性能計算命令を組み込んだホストコードを生成する。
【0132】
この場合には,シミュレーション装置1のコード変換部11は,ユーザによって指定されたトレース範囲を示す情報を保持する。トレース範囲を示す情報には,関数,ターゲットのプログラム,システムコールなどを範囲単位として,ユーザによって指定された範囲の[開始アドレス,終了アドレス]が含まれる。
【0133】
さらに,コード変換部11は,シミュレーションの開始前または実行中に,トレース範囲の指定を受け付け,受け付けたトレース範囲を保持し,または保持するトレース範囲の[開始アドレス,終了アドレス]を更新することができる。
【0134】
また,コード変換部11は,予めトレース範囲を保持しておき,シミュレーション中のユーザ操作によって,トレース範囲を有効にする指定を受け付けることができる。コード生成部115は,シミュレーションの開始時に保持しているトレース範囲の指定を無効に設定し,トレース範囲の有効の指示を受け付けた時点で,トレース範囲の指定を有効に変更して,トレース範囲に含まれる命令からコード生成対象命令を検出するようにする。
【0135】
第2の実施例で,シミュレーション装置1のコード変換部11によるコード変換処理の一部のみが第1の実施例の処理と相違する。そこで,以下の説明では,シミュレーション装置1の処理のうち,第1の実施例と相違する処理ついてのみ説明し,同様の他の処理およびシミュレーション処理については説明を省略する。
【0136】
第2の実施例において,シミュレーション装置1のコード変換部11は,コード生成対象命令を特定する検出用情報を予め保持しているものとする。検出用情報には,コード生成対象命令となる命令種が記述されている。
【0137】
検出用情報に外部依存命令または性能情報取得命令が示されている場合には,コード変換部11の予測シミュレーション実行部113は,ブロック分割部111によって分割されたターゲットプログラムのブロックから,検出用情報をもとに,コード生成対象命令を検出する。
【0138】
そして,コード生成部115は,コード生成対象命令以外の命令について,その命令の機能を変換したホスト命令(機能コード)を含むホストコードを生成し,その命令の実行時間(所要サイクル数)を記録する。
【0139】
コード生成部115は,コード生成対象命令について,その命令の機能を変換したホスト命令(機能コード)と,性能計算命令を含むホストコードを生成する。生成されるホストコードには,例えば以下のようなホスト命令が含まれる。
【0140】
「性能計算命令1:現在の性能値(実行時間)を読み込む,
性能計算命令2:命令i2の前の命令i0,i1の記録された性能値(実行時間)を加算する,
性能計算命令3:性能値を更新する,
性能計算命令4:命令i2に対するヘルパー関数を呼び出し,命令i2の実行時間を性能値に加算する。」
図14は,第2の実施例におけるシミュレーション装置1のコード変換部11の概要処理フロー図である。
【0141】
シミュレーション装置1において,コード変換部11のブロック分割部111は,ターゲットプログラムのコードを所定の単位のブロックに分割して入力する(ステップS31)。予測シミュレーション実行部113は,ブロックの命令を分析して,コード生成対象命令を検出する(ステップS32)。コード生成部115は,検出したコード生成対象命令に対して,性能計算命令を組み込んだホストコードを生成する(ステップS33)。
【0142】
シミュレーション装置1のコード変換部11に,トレース範囲の指定を示す開始アドレスと終了アドレスが保持されている場合には,コード変換部11の予測シミュレーション実行部113は,ブロック分割部111によって分割されたターゲットプログラムのブロックから,トレース範囲の指定をもとに,開始アドレスを検出する。
【0143】
予測シミュレーション実行部113は,開始アドレスが検出された以降,ターゲットプログラムのブロックから検出用情報をもとにコード生成対象命令を検出し,トレース範囲の終了アドレスを検出するまで,コード生成対象命令の検出を続ける。
【0144】
コード生成部115は,コード生成対象命令以外の命令について,その命令の機能を変換したホスト命令(機能コード)を生成して,その命令の実行時間を記録し,コード生成対象命令について,その命令の機能を変換したホスト命令(機能コード)と,性能計算命令を含むホストコードとを生成する。
【0145】
図15は,第2の実施例におけるシミュレーション装置1のコード変換部11の概要処理フロー図である。
【0146】
シミュレーション装置1において,コード変換部11のブロック分割部111は,ターゲットプログラムのコードを所定の単位のブロックに分割して入力する(ステップS41)。
【0147】
予測シミュレーション実行部113は,ブロックを分析して,トレース範囲の開始アドレスまたは終了アドレスを検出する(ステップS42)。
【0148】
開始アドレスの検出から終了アドレスの検出までの範囲において,以下のステップS43,S44の処理を繰り返す。
【0149】
予測シミュレーション実行部113は,ブロックの命令を分析して,コード生成対象命令を検出する(ステップS43)。コード生成部115は,検出したコード生成対象命令に対して,性能計算命令を組み込んだホストコードを生成する(ステップS44)。
【0150】
シミュレーション装置1の第2の実施例によれば,ターゲットプログラムの一部の命令について,性能値計算のホスト命令の生成が省略できるため,シミュレーションにおいて実行するホスト命令数を減少させ,シミュレーションの実行時間を減少させることができる。
【0151】
また,コード変換処理において,性能値計算のホスト命令の生成を省略するだけであるため,取得される性能値の精度を維持しつつ,シミュレーション速度を向上させることができる。
【0152】
また,シミュレーション中に,ユーザが指定したトレース範囲についてのみターゲットプログラムの性能を測定するため,効率的なシミュレーションを実現し,シミュレーションの実行時間をより減少させることができる。
【0153】
なお,ユーザによって指定されるトレース範囲の設定は,第1の実施例におけるコード変換処理にも適用することができる。この場合に,図10に示す処理フローのステップS1およびステップS2の処理の間で,予測シミュレーション実行部113は,ブロックを分析して,トレース範囲の開始アドレスまたは終了アドレスを検出する。そして,トレース範囲について,ステップS2〜S5の処理が行われる。
【0154】
図16は,別の実施形態におけるシミュレーション装置1の構成例を示す図である。
【0155】
シミュレーション装置1は,図1に示す構成例に,さらに,電力シミュレーション情報生成部15を備える。
【0156】
電力シミュレーション情報生成部15は,電力情報6を得て,シミュレーション情報収集部13が出力したシミュレーション情報5をもとに,ブロックの実行時の消費電力を計算し,電力シミュレーション情報7として出力する処理部である。
【0157】
図17は,電力シミュレーション情報生成部15を,性能シミュレーション用のホストコードに組み込む関数(電力シミュレーション関数)として実施した場合の例を示す図である。
【0158】
電力情報6として,LD命令,MULT命令,ADD命令の1実行当たりの消費電力が,それぞれ4u[W],0.5u[W],0.3u[W]と設定されている。
【0159】
電力シミュレーション関数Host_Inst_A−C_powerは,シミュレーションで実行された各命令の実行回数にもとづいて,電力を計算する。
【0160】
次に,シミュレーション装置1のハードウェア構成例を説明する。
【0161】
シミュレーション装置1は,演算装置(CPU),一時記憶装置(DRAM,フラッシュメモリ等),永続性記憶装置(HDD,フラッシュメモリ等),およびネットワークNとのネットワークインターフェースを有するコンピュータPCと,入力装置(キーボード,マウス等)と出力装置(ディスプレイ,プリンタ等)とによって実施することができる。
【0162】
また,シミュレーション装置1は,コンピュータPCが実行可能なプログラムによって実施することができる。この場合に,シミュレーション装置1が有すべき機能の処理内容を記述したプログラムが提供される。提供されたプログラムをコンピュータPCが実行することによって,上記で説明したシミュレーション装置1の処理機能がコンピュータPC上で実現される。
【0163】
なお,コンピュータPCは,可搬型記録媒体から直接プログラムを読み取り,そのプログラムに従った処理を実行することもできる。また,コンピュータPCは,サーバコンピュータからプログラムが転送されるごとに,逐次,受け取ったプログラムに従った処理を実行することもできる。
【0164】
さらに,このプログラムは,コンピュータPCで読み取り可能な記録媒体に記録しておくことができる。
【0165】
以上説明したように,シミュレーション装置1によれば,パイプライン処理を制御するCPUの命令実行の性能シミュレーションを高速に行うことが可能となる。
【0166】
シミュレーション装置1は,JITコンパイラ方式のように,ターゲットCPUのプログラムのコード変換処理において,コード変換部11が,分割したブロックごとに,外部依存命令の実行結果を予測した場合(予測ケース)での実行について機能シミュレーションを行い,タイミング情報3をもとに各命令の実行時間を定数化しておく。
【0167】
シミュレーション装置1のコード変換部11では,予測ケース以外の実行についての性能シミュレーション情報(サイクルシミュレーション情報)を得るためのシミュレーション実行コードをホストコードに組み込む代わりに,予測ケースでの命令の実行時間の補正処理を行うコードを組み込む。
【0168】
また,シミュレーション装置1のシミュレーション実行部12では,予測ケースの場合の命令実行について性能シミュレーションを行い,予測外ケースでのシミュレーションの代わりに,その命令に対する遅延時間,前後に実行される命令の実行時間等を用いて,予測ケースでの実行時間を補正して,外部依存命令の実行時間を得る。
【0169】
そのため,従来に比べて,機能コードに追加するシミュレーション用コード量を少なくすることができ,性能シミュレーション処理の負荷増大を抑制しつつ,高速に行うことが可能となる。
【0170】
また,シミュレーション装置1では,予測ケースを前提として機能シミュレーションを行うことにより,1つのケース(予測ケース)における各命令の実行時間を,静的分析処理により得ておき,予測ケース以外のケースにおける命令の実行時間は,予測ケースでの実行時間を,ペナルティ時間,前後に実行される命令の実行時間,前の命令の遅延時間等の加算または減算により補正する。
【0171】
シミュレーション装置1によれば,CPUを含むシステムの性能,電力のシミュレーションを高速に実施することが可能となり,従来では現実レベルでの実行が困難であった,大規模なシステム全体の性能,電力の評価や解析,予測などを容易に行えるようになる。
【0172】
さらに,シミュレーション装置1によれば,電力情報と性能シミュレーション情報とをもとに,プログラムの消費電力シミュレーションを,高速かつ高精度に行うことが可能となる。
【0173】
よって,各ケースでの性能シミュレーションを行う必要がなく,性能シミュレーション処理の負荷増大を抑制しつつ,高精度に行うという効果を奏する。
【符号の説明】
【0174】
1 シミュレーション装置
11 コード変換部
111 ブロック分割部
113 予測シミュレーション実行部
115 コード生成部
12 シミュレーション実行部
121 コード実行部
123 補正部
13 シミュレーション情報収集部
15 電力シミュレーション情報生成部
2 ターゲットプログラム
3 タイミング情報
4 予測情報
5 シミュレーション情報
6 電力情報
7 電力シミュレーション情報


【特許請求の範囲】
【請求項1】
パイプライン処理を制御するターゲットプロセッサに対するプログラムの命令実行のシミュレーションを実行するシミュレーション装置であって,
前記プログラムのコードを所定のブロックに分割し,前記ブロックに含まれる命令のうち,該命令の実行結果が外部環境に依存する外部依存命令の処理の実行結果を予測結果として設定する処理と,前記予測結果を前提とする命令実行の機能シミュレーションを行い,前記ブロックに含まれる命令の実行タイミングを示すタイミング情報を得て,前記機能シミュレーションの結果と前記タイミング情報とをもとに,前記予測結果での外部依存命令の実行時間を算出する処理と,前記機能シミュレーションの結果をもとに,前記予測結果を前提とする命令実行の性能シミュレーションを,前記ターゲットプロセッサを動作させるホストプロセッサに実行させるホストコードを生成する処理とを行うコード変換部と,
前記ホストプロセッサが前記生成されたホストコードを実行した実行結果において,該ホストコードに含まれる外部依存命令の実行結果が前記予測結果と異なる場合に,該外部依存命令の所定の遅延時間と前記外部依存命令の前後に実行される命令の実行時間とを用いて求めた補正値で,前記予測結果での外部依存命令の実行時間を補正して,前記機能シミュレーションでの該外部依存命令の実行時間とするシミュレーション実行部とを,備える
ことを特徴とするシミュレーション装置。
【請求項2】
前記シミュレーション実行部は,前記外部依存命令の次に実行される次命令の実行時間が,前記外部依存命令に付加される遅延時間を超えない場合に,前記次命令の実行時間を前記補正値として前記外部依存命令の遅延時間から減算する処理を行う
ことを特徴とする請求項1に記載のシミュレーション装置。
【請求項3】
前記コード変換部は,前記ターゲットプロセッサを動作させるホストプロセッサに実行させるホストコードを生成する処理において,前記ブロックに含まれる命令のうち,該命令の実行時間の計算に直前の命令の実行時間が必要な命令を検出し,該検出した命令のみについて実行時間を計算するホスト命令を含むホストコードを生成する
ことを特徴とする請求項1または請求項2に記載のシミュレーション装置。
【請求項4】
前記ホストコードの命令セットの各命令の1実行当たりの消費電力量を定めた電力情報を得て,前記電力情報と前記機能シミュレーションの結果とをもとに,前記ブロックの実行時の電力シミュレーション情報を求める電力シミュレーション情報生成部を備える
ことを特徴とする請求項1ないし請求項3のいずれか一項に記載のシミュレーション装置。
【請求項5】
パイプライン処理を制御するターゲットプロセッサに対するプログラムの命令実行のシミュレーションを実行するシミュレーション方法であって,
ホストCPUが,
前記プログラムのコードを所定のブロックに分割し,前記ブロックに含まれる命令のうち,該命令の実行結果が外部環境に依存する外部依存命令の処理の実行結果を予測結果として設定する処理過程と,
前記予測結果を前提とする命令実行の機能シミュレーションを行い,前記ブロックに含まれる命令の実行タイミングを示すタイミング情報を得て,前記機能シミュレーション結果と前記タイミング情報とをもとに,前記予測結果での外部依存命令の実行時間を算出する処理過程と,
前記機能シミュレーション結果をもとに,前記予測結果を前提とする命令実行の性能シミュレーションを,前記ターゲットプロセッサを動作させるホストプロセッサに実行させるホストコードを生成する処理過程と,
前記ホストプロセッサが前記生成されたホストコードを実行した実行結果において,該ホストコードに含まれる外部依存命令の実行結果が前記予測結果と異なる場合に,該外部依存命令の所定の遅延時間と前記外部依存命令の前後に実行される命令の実行時間とを用いて求めた補正値で,前記予測結果での外部依存命令の実行時間を補正して,前記機能シミュレーションでの該外部依存命令の実行時間とする処理過程とを,実行する
ことを特徴とするシミュレーション方法。
【請求項6】
前記ホストコードを生成する処理過程において,前記ブロックに含まれる命令のうち,該命令の実行時間の計算に直前の命令の実行時間が必要な命令を検出し,該検出した命令のみについて実行時間を計算するホスト命令を含むホストコードを生成する
ことを特徴とする請求項5に記載のシミュレーション方法。
【請求項7】
パイプライン処理を制御するターゲットプロセッサに対するプログラムの命令実行のシミュレーションを実行させるためのシミュレーションプログラムであって,
ホストCPUに,
前記プログラムのコードを所定のブロックに分割し,前記ブロックに含まれる命令のうち,実行結果が外部環境に依存する外部依存命令の処理の実行結果を予測結果として設定する処理と,
前記予測結果を前提とする命令実行の機能シミュレーションを行い,前記ブロックに含まれる命令の実行タイミングを示すタイミング情報を得て,前記機能シミュレーション結果と前記タイミング情報とをもとに,前記予測結果での外部依存命令の実行時間を算出する処理と,
前記機能シミュレーション結果をもとに,前記予測結果を前提とする命令実行の性能シミュレーションを,前記ターゲットプロセッサを動作させるホストプロセッサに実行させるホストコードを生成する処理と,
前記ホストプロセッサが前記生成されたホストコードを実行した実行結果において,該ホストコードに含まれる外部依存命令の実行結果が前記予測結果と異なる場合に,該外部依存命令の所定の遅延時間と前記外部依存命令の前後に実行される命令の実行時間とを用いて求めた補正値で,前記予測結果での外部依存命令の実行時間を補正して,前記機能シミュレーションでの該外部依存命令の実行時間とする処理とを,実行させる
ことを特徴とするシミュレーションプログラム。
【請求項8】
前記ホストコードを生成する処理において,前記ブロックに含まれる命令のうち,該命令の実行時間の計算に直前の命令の実行時間が必要な命令を検出し,該検出した命令のみについて実行時間を計算するホスト命令を含むホストコードを生成する
ことを特徴とする請求項7に記載のシミュレーションプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate


【公開番号】特開2013−84178(P2013−84178A)
【公開日】平成25年5月9日(2013.5.9)
【国際特許分類】
【出願番号】特願2011−224714(P2011−224714)
【出願日】平成23年10月12日(2011.10.12)
【出願人】(000005223)富士通株式会社 (25,993)