(57)【要約】【課題】性能値の計算にかかる時間の短縮を図ること。【解決手段】（１）において、計算装置１００は、複数の組み合わせ１０４の各々について、キャッシュメモリ１０２の動作結果が組み合わせ１０４となった場合における対象ブロック内の各命令のサイクル数を取得する。（２）において、計算装置１００は、キャッシュメモリ１０２の動作シミュレーションｃｓｉｍの実行結果によって、複数回のアクセスをターゲットＣＰＵ１０１が実行した場合のキャッシュメモリ１０２の動作結果の組み合わせ１０４を取得する。（３Ａ）において、取得した組み合わせ１０４が複数の組み合わせ１０４に含まれる場合、計算装置１００は、取得した各命令のサイクル数のうち、取得した組み合わせ１０４に対応する各命令のサイクル数によって、対象ブロックのサイクル数を計算する。【選択図】図１
2015130067.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサに記憶領域への複数回のアクセスを指示する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータが、
前記複数回のアクセスを前記プロセッサが実行した場合の前記プロセッサがアクセス可能なキャッシュメモリの動作結果の複数の組み合わせの各々について、前記動作結果が前記組み合わせとなった場合における前記特定コード内の各命令の性能値を取得し、
前記特定コードが性能値の計算対象となった場合に、
前記プロセッサが前記プログラムを実行した場合の前記キャッシュメモリの動作シミュレーションの実行結果によって、前記複数回のアクセスを前記プロセッサが実行した場合の前記キャッシュメモリの動作結果の組み合わせを取得し、
取得した前記組み合わせが前記複数の組み合わせに含まれる場合、取得した前記各命令の性能値のうち、取得した前記組み合わせに対応する前記各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を計算する、
処理を実行することを特徴とする計算方法。
【請求項２】
前記コンピュータが、
取得した前記組み合わせが前記複数の組み合わせに含まれない場合、前記動作結果が取得した前記組み合わせとなった場合における前記特定コード内の各命令の性能値を、前記プロセッサが前記特定コードを実行した場合の前記プロセッサの動作シミュレーションを実行することによって導出し、導出した前記各命令の性能値によって前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を計算することを特徴とする請求項１に記載の計算方法。
【請求項３】
前記複数の組み合わせは、前記複数回のアクセスについて前記キャッシュメモリの動作結果がすべてキャッシュミスヒットとなる組み合わせと異なる組み合わせであることを特徴とする請求項１または２に記載の計算方法。
【請求項４】
前記複数の組み合わせは、前記複数回のアクセスについて前記キャッシュメモリの動作結果がすべてキャッシュヒットとなる組み合わせと、前記複数回のアクセスのうちの一つのアクセスについて前記キャッシュメモリの動作結果がキャッシュミスヒットとなる組み合わせと、であることを特徴とする請求項１〜３のいずれか一つに記載の計算方法。
【請求項５】
前記各命令の性能値を取得する処理は、前記特定コードの性能値を計算する処理において最初に計算対象となった場合、前記複数の組み合わせの各々について、前記動作結果が前記組み合わせとなった場合における前記特定コード内の各命令の性能値を、前記プロセッサが前記特定コードを実行した場合の前記プロセッサの動作シミュレーションを実行することによって、取得することを特徴とする請求項１〜４のいずれか一つに記載の計算方法。
【請求項６】
プロセッサに記憶領域への複数回のアクセスを指示する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータに、
前記複数回のアクセスを前記プロセッサが実行した場合の前記プロセッサがアクセス可能なキャッシュメモリの動作結果の複数の組み合わせの各々について、前記動作結果が前記組み合わせとなった場合における前記特定コード内の各命令の性能値を取得し、
前記特定コードが性能値の計算対象となった場合に、
前記プロセッサが前記プログラムを実行した場合の前記キャッシュメモリの動作シミュレーションの実行結果によって、前記複数回のアクセスを前記プロセッサが実行した場合の前記キャッシュメモリの動作結果の組み合わせを取得し、
取得した前記組み合わせが前記複数の組み合わせに含まれる場合、取得した前記各命令の性能値のうち、取得した前記組み合わせに対応する前記各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を計算する、
処理を実行させることを特徴とする計算プログラム。
【請求項７】
第１プロセッサに記憶領域への複数回のアクセスを指示する特定コードを有するプログラムを前記第１プロセッサが実行した場合の前記プログラムの性能値を計算する計算装置であって、
前記複数回のアクセスを前記第１プロセッサが実行した場合の前記第１プロセッサがアクセス可能なキャッシュメモリの動作結果の複数の組み合わせの各々について、前記動作結果が前記組み合わせとなった場合における前記特定コード内の各命令の性能値を取得し、
前記特定コードが性能値の計算対象となった場合に、
前記第１プロセッサが前記プログラムを実行した場合の前記キャッシュメモリの動作シミュレーションの実行結果によって、前記複数回のアクセスを前記第１プロセッサが実行した場合の前記キャッシュメモリの動作結果の組み合わせを取得し、
取得した前記組み合わせが前記複数の組み合わせに含まれる場合、取得した前記各命令の性能値のうち、取得した前記組み合わせに対応する前記各命令の性能値によって、前記第１プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を計算する、
処理を実行する第２プロセッサを有することを特徴とする計算装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算方法、計算プログラム、および計算装置に関する。
【背景技術】
【０００２】
従来、プログラムの開発を支援するために、プログラムをプロセッサ上で動作させた場合のプログラムの実行時間などの性能を見積もる技術がある（例えば、以下特許文献１参照。）。また、従来、多階層のキャッシュメモリの動作をシミュレーションする技術がある（例えば、以下特許文献２参照。）。
【０００３】
また、従来、プログラムを複数のブロックに分割し、各ブロックにおいてパイプラインインタロックを考慮した静的な実行サイクル数を算出する技術がある（例えば、以下特許文献３参照。）。
【０００４】
また、各ブロックについて、プロセッサがロード命令やストア命令などのメモリアクセス命令を実行した場合にキャッシュメモリの動作結果によって性能が異なる。そのため、従来、キャッシュヒットの場合についてのブロックの各命令の性能値を用意し、各ブロックについてキャッシュメモリの動作シミュレーションによって、キャッシュヒットとなった場合には用意された性能値によりブロックの性能値を計算する技術がある。そして、各ブロックについてキャッシュメモリの動作シミュレーションによって、キャッシュミスヒットとなった場合にキャッシュはキャッシュミスヒットとなった場合におけるプロセッサの動作シミュレーションを行うことによりブロックの性能値を計算する技術がある（例えば、以下特許文献４参照。）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０００−１２２８９８号公報
【特許文献２】特開２００１−２４９８２９号公報
【特許文献３】特開平７−２１０６１号公報
【特許文献４】特開２０１３−８４１７８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、ブロック内にメモリアクセス命令が複数あると、複数のメモリアクセス命令についてのキャッシュメモリの動作結果がすべてキャッシュヒットとなる可能性が低くなる。そのため、いずれかのアクセス命令についてキャッシュミスヒットが発生すると、用意しておいたキャッシュヒットの場合の各命令の性能値を使用できないため、ブロックの性能値の計算を効率よく行うことができないという問題点がある。
【０００７】
１つの側面では、本発明は、性能値の計算の効率化を図ることができる計算方法、計算プログラム、および計算装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明の一側面によれば、プロセッサに記憶領域への複数回のアクセスを指示する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータが、前記複数回のアクセスを前記プロセッサが実行した場合の前記プロセッサがアクセス可能なキャッシュメモリの動作結果の複数の組み合わせの各々について、前記動作結果が前記組み合わせとなった場合における前記特定コード内の各命令の性能値を取得し、前記特定コードが性能値の計算対象となった場合に、前記プロセッサが前記プログラムを実行した場合の前記キャッシュメモリの動作シミュレーションの実行結果によって、前記複数回のアクセスを前記プロセッサが実行した場合の前記キャッシュメモリの動作結果の組み合わせを取得し、取得した前記組み合わせが前記複数の組み合わせに含まれる場合、取得した前記各命令の性能値のうち、取得した前記組み合わせに対応する前記各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を計算する計算方法、計算プログラム、および計算装置が提案される。
【発明の効果】
【０００９】
本発明の一態様によれば、性能値の計算の効率化を図ることができる。
【図面の簡単な説明】
【００１０】
【図１】図１は、本発明にかかる計算装置による一動作例を示す説明図である。
【図２】図２は、計算装置１００のハードウェア構成例を示すブロック図である。
【図３】図３は、計算装置１００の機能的構成例を示すブロック図である。
【図４】図４は、ターゲットプログラムｐｇｒに含まれるブロックＢＢ例を示す説明図である。
【図５】図５は、タイミング情報３３０の記憶内容の一例を示す説明図である。
【図６】図６は、予測情報３３１の記憶内容例を示す説明図である。
【図７】図７は、すべてキャッシュヒットまたは先頭のＬＤ命令についてキャッシュヒットとなった場合の動作例を示す説明図である。
【図８】図８は、補正値情報例を示す説明図である。
【図９】図９は、ホストコードＨＣ生成例を示す説明図である。
【図１０】図１０は、ホストコードＨＣ例を示す説明図である。
【図１１】図１１は、ヘルパー関数ｃａｃｈｅ＿ｌｄ例を示す説明図である。
【図１２】図１２は、連続してキャッシュミスヒットとなった場合の動作例を示す説明図である。
【図１３】図１３は、計算装置１００による計算処理手順例を示すフローチャート（その１）である。
【図１４】図１４は、計算装置１００による計算処理手順例を示すフローチャート（その２）である。
【図１５】図１５は、補正部３２２による補正処理の詳細な説明を示すフローチャートである。
【発明を実施するための形態】
【００１１】
以下に添付図面を参照して、本発明にかかる計算方法、計算プログラム、および計算装置の実施の形態を詳細に説明する。
【００１２】
図１は、本発明にかかる計算装置による一動作例を示す説明図である。計算装置１００は、ターゲットプログラムｐｇｒを第１プロセッサが実行した場合のターゲットプログラムｐｇｒの性能値を計算するコンピュータである。性能値とは、例えば、ターゲットプログラムｐｇｒの実行に要する実行時間、サイクル数などが挙げられる。本実施の形態では、性能値をサイクル数として説明する。計算装置１００は、第２プロセッサを有する。ここで、第１プロセッサはターゲットＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０１と称し、第２プロセッサはホストＣＰＵと称する。
【００１３】
ここでのターゲットプログラムｐｇｒは特定コードを有する。ここで、特定コードは、ターゲットプログラムｐｇｒから分割して得られる一部のコードである。また、特定コードは、ターゲットＣＰＵ１０１に記憶領域へのアクセスを指示するメモリアクセス命令を複数有する。ここでの記憶領域は、例えば、メインメモリである。また、ここでは、ターゲットプログラムｐｇｒから分割して得られる特定コードなどの各コードをブロックＢＢと称する。計算対象となったブロックＢＢは対象ブロックと称する。図１の例では、対象ブロックはＢＢｋである。ブロックＢＢｋは、特定コードであって、記憶領域への複数回のアクセスを指示するメモリアクセス命令を複数有する。例えば、メモリアクセス命令は、メインメモリなどからデータを読み出すロード命令（以下、「ＬＤ（ＬＯＡＤ）命令」と称する。）やデータを書き込むストア命令（以下、「ＳＴ（ＳＴＯＲＥ）命令」と称する。）が挙げられる。図１の例では、ブロックＢＢｋは、連続して実行されるＬＤ命令１とＬＤ命令２とを有する。
【００１４】
例えば、ターゲットＣＰＵ１０１は、ＬＤ命令やＳＴ命令を実行すると、ターゲットＣＰＵ１０１は、データキャッシュや命令キャッシュやＴＬＢ（Ｔｒａｎｓｌａｔｉｏｎ  Ｌｏｏｋａｓｉｄｅ  Ｂｕｆｆｅｒ）などのキャッシュメモリ１０２にアクセスする。キャッシュメモリ１０２は、制御部と、記憶部と、を有する。制御部は、メモリアクセス命令が指示するアクセス先のデータが記憶部にあるか否かを判断する機能を有する。ここで、記憶部にある場合、キャッシュヒットと呼ばれ、記憶部にない場合、キャッシュミスヒットと呼ばれる。
【００１５】
例えば、所定範囲内にＬＤ命令が複数ある場合、先頭のＬＤ命令についてのキャッシュメモリ１０２の動作結果がキャッシュヒットであれば、後続のＬＤ命令についてもキャッシュメモリ１０２の動作結果がキャッシュヒットとなる可能性が高い。また、例えば、先頭のＬＤ命令についてキャッシュメモリ１０２の動作結果がキャッシュミスヒットであれば、後続のＬＤ命令についてもキャッシュメモリ１０２の動作結果がキャッシュヒットとなる可能性が高い。これに対して、先頭のＬＤ命令についてキャッシュメモリ１０２の動作結果がキャッシュミスヒットである場合に、後続のＬＤ命令についてもキャッシュメモリ１０２の動作結果がキャッシュミスヒットとなる可能性は低い。例えば、先頭のＬＤ命令についてキャッシュメモリ１０２の動作結果がキャッシュミスヒットであると、ターゲットＣＰＵ１０１がメインメモリからＬＤ命令のアクセス先のデータを読み出す際、キャッシュメモリ１０２のサイズに基づいて周辺のデータも一緒に読み出す。そして、ターゲットＣＰＵ１０１は、読み出したデータをキャッシュメモリ１０２に格納するため、後続のＬＤ命令のアクセス先のデータはキャッシュメモリ１０２に格納されている可能性が高い。そのため、キャッシュメモリ１０２の動作結果が連続してキャッシュミスヒットとなる可能性は低い。また、先頭のＬＤ命令と後続のＬＤ命令とが異なるキャッシュメモリ１０２から読み出す場合でも、それぞれの最初の読み出しはキャッシュミスヒットとなるが、例えばループ処理などの場合、次の読み出しからはキャッシュヒットとなり、ループ回数が多いと連続してキャッシュミスヒットとなる可能性はやはり低い。
【００１６】
そこで、本実施の形態では、計算装置１００は、ブロック内の各メモリアクセス命令を実行した場合のキャッシュメモリ１０２の動作結果の各組み合わせについての該ブロックＢＢ内の各命令のサイクル数を用意しておく。そして、計算装置１００は、ブロックＢＢを実行した場合の該キャッシュメモリ１０２のシミュレーション結果におけるキャッシュメモリ１０２の動作結果に応じたサイクル数により該ブロックのサイクル数を計算する。
【００１７】
まず、図１（１）において計算装置１００は、複数の組み合わせ１０４の各々について、動作結果が組み合わせ１０４となった場合における対象ブロック内の各命令のサイクル数を取得する。組み合わせ１０４とは、複数回のアクセスをターゲットＣＰＵ１０１が実行した場合のキャッシュメモリ１０２の動作結果の組み合わせである。複数の組み合わせ１０４は、例えば、複数回のアクセスについてキャッシュメモリ１０２の動作結果がすべてキャッシュミスヒットとなる組み合わせ１０４と異なる組み合わせ１０４である。また、複数の組み合わせ１０４は、複数回のアクセスについてキャッシュメモリ１０２の動作結果がすべてキャッシュヒットとなる組み合わせ１０４である。また、複数の組み合わせ１０４は、複数回のアクセスのうちの一つのアクセスについてキャッシュメモリ１０２の動作結果がキャッシュミスヒットとなる組み合わせ１０４である。図１の例では、組み合わせ１０４−１〜組み合わせ１０４−３の各々について、ブロックＢＢｋ内の各命令のサイクル数が用意される。組み合わせ１０４−１では、ＬＤ命令１についての動作結果がキャッシュヒットであり、ＬＤ命令２についての動作結果がキャッシュヒットである。組み合わせ１０４−２では、ＬＤ命令１についての動作結果がキャッシュミスヒットであり、ＬＤ命令２についての動作結果がキャッシュヒットである。組み合わせ１０４−３では、ＬＤ命令１についての動作結果がキャッシュヒットであり、ＬＤ命令２についての動作結果がキャッシュミスヒットである。
【００１８】
より具体的には、計算装置１００は、対象ブロックのサイクル数を計算する処理において最初に計算対象となった場合、複数の組み合わせ１０４の各々について、動作結果が組み合わせ１０４となった場合における対象ブロック内の各命令のサイクル数を取得する。組み合わせ１０４の各々についての各命令のサイクル数は、レコード（例えば、１０３−１〜１０３−３）として、テーブル１０３に含まれる。テーブル１０３はホストＣＰＵがアクセス可能なＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）やディスクなどの記憶装置に記憶される。例えば、計算装置１００は、複数の組み合わせ１０４の各々について、動作シミュレーションｐｓｉｍを実行することによって、各命令のサイクル数を取得する。動作シミュレーションｐｓｉｍは、ターゲットＣＰＵ１０１が対象ブロックを実行した場合のターゲットＣＰＵ１０１の動作のシミュレーションである。具体的には、動作シミュレーションｐｓｉｍの方法については、公知技術（例えば、上述した特許文献４参照。）であるため、詳細な説明については省略する。
【００１９】
つぎに、図１（２）において計算装置１００は、動作シミュレーションｃｓｉｍの実行結果によって、複数回のアクセスをターゲットＣＰＵ１０１が実行した場合のキャッシュメモリ１０２の動作結果の組み合わせ１０４を取得する。動作シミュレーションｃｓｉｍとは、ターゲットＣＰＵ１０１がターゲットプログラムｐｇｒを実行した場合のキャッシュメモリ１０２の動作のシミュレーションである。動作シミュレーションｃｓｉｍは、例えば、キャッシュメモリ１０２をモデル化した情報と、各メモリアクセス命令のアクセス先のアドレスと、によって簡易的に行う。
【００２０】
つぎに、また、計算装置１００は、取得した組み合わせ１０４が複数の組み合わせ１０４に含まれるか否かを判断する。図１（３Ａ）において計算装置１００は、複数の組み合わせ１０４に含まれる場合、取得した各命令のサイクル数のうち、取得した組み合わせ１０４に対応する各命令のサイクル数によって、対象ブロックのサイクル数を計算する。対象ブロックのサイクル数とは、ターゲットＣＰＵ１０１が対象ブロックを実行した場合の対象ブロックのサイクル数である。
【００２１】
例えば、取得された組み合わせ１０４は、ＬＤ命令１についての動作結果がキャッシュヒットであり、ＬＤ命令２についての動作結果がキャッシュヒットであるとする。計算装置１００は、レコード１０３−１に含まれる各命令のサイクル数によって対象ブロックのサイクル数を算出する。ここでは、対象ブロックのサイクル数は、レコード１０３−１に含まれる各命令のサイクル数の合計値とする。
【００２２】
また、計算装置１００は、取得した組み合わせ１０４が複数の組み合わせ１０４に含まれるか否かを判断する。図１（３Ｂ）において計算装置１００は、複数の組み合わせ１０４に含まれない場合、動作結果が取得した組み合わせ１０４となった場合における対象ブロック内の各命令のサイクル数を、動作シミュレーションｐｓｉｍを実行することによって導出する。計算装置１００は、導出した各命令のサイクル数によってターゲットＣＰＵ１０１が対象ブロックを実行した場合の対象ブロックのサイクル数を計算する。
【００２３】
図１によれば、用意された各命令の性能値によって直ぐに対象ブロックのサイクル数を算出可能であるため、性能値の計算の効率化を図ることができる。性能値の計算の効率とは、精度に対する時間である。
【００２４】
また、図１（２），（３Ａ），（３Ｂ）については、計算装置１００が、ブロックＢＢをコンパイルすることによって得られる機能コードＦＣと、タイミングコードＴＣと、を含むホストコードＨＣを実行することによって実現する。具体的には、タイミングコードＴＣには、動作シミュレーションｃｓｉｍにおける組み合わせ１０４を取得する処理と、取得した組み合わせ１０４であった場合における対象ブロックのサイクル数を計算する処理と、が記述される。
【００２５】
そこで、計算装置１００は、複数のアクセスについて動作結果が特定の組み合わせ１０４に対応する各命令のサイクル数によってターゲットＣＰＵ１０１が対象ブロックを実行した場合の対象ブロックのサイクル数を計算可能な計算用コードを生成してもよい。特定の組み合わせ１０４とは、例えば、すべてキャッシュヒットである組み合わせ１０４である。また、計算装置１００は、複数の組み合わせ１０４のうち、特定の組み合わせ１０４以外の各々について、組み合わせ１０４に対応する各命令のサイクル数と、特定の組み合わせ１０４に対応する各命令のサイクル数と、の差分値を用意しておいてもよい。そして、計算装置１００は、動作シミュレーションｃｓｉｍにおける組み合わせ１０４が特定の組み合わせ１０４でない場合、特定の組み合わせ１０４に対応する各命令のサイクル数により計算した対象ブロックのサイクル数を、差分値によって補正してもよい。これにより、各命令のサイクル数をすべてＲＡＭやディスクなどの記憶装置させておかなくてもよいため、省メモリ化を図ることができる。
【００２６】
また、複数のメモリアクセス命令が対象ブロックに含まれていても、メモリアクセス命令間が所定数以上離れている場合には、異なる動作シミュレーションが行われてもよい。
【００２７】
（計算装置１００のハードウェア構成例）
図２は、計算装置１００のハードウェア構成例を示すブロック図である。図２において、計算装置１００は、ホストＣＰＵ２０１と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）２０２と、ＲＡＭ２０３と、ディスクドライブ２０４と、ディスク２０５と、を有する。計算装置１００は、Ｉ／Ｆ（Ｉｎｔｅｒ  Ｆａｃｅ）２０６と、入力装置２０７と、出力装置２０８と、を有する。また、各部はバス２００によってそれぞれ接続される。
【００２８】
ここで、ホストＣＰＵ２０１は、計算装置１００の全体の制御を司る。また、ホストＣＰＵ２０１は、ターゲットＣＰＵ１０１の性能シミュレーションを実行するホストＣＰＵである。ＲＯＭ２０２は、ブートターゲットプログラムｐｇｒなどのターゲットプログラムｐｇｒを記憶する。ＲＡＭ２０３は、ホストＣＰＵ２０１のワークエリアとして使用される記憶部である。ディスクドライブ２０４は、ホストＣＰＵ２０１の制御にしたがってディスク２０５に対するデータのリード／ライトを制御する。ディスク２０５は、ディスクドライブ２０４の制御で書き込まれたデータを記憶する。ディスク２０５としては、磁気ディスク、光ディスクなどが挙げられる。
【００２９】
Ｉ／Ｆ２０６は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワークＮＥＴに接続され、ネットワークＮＥＴを介して他のコンピュータに接続される。そして、Ｉ／Ｆ２０６は、ネットワークＮＥＴと内部のインターフェースを司り、他のコンピュータからのデータの入出力を制御する。Ｉ／Ｆ２０６には、例えばモデムやＬＡＮアダプタなどを採用することができる。
【００３０】
入力装置２０７は、キーボード、マウス、タッチパネルなどを用いた利用者の操作入力により、各種データの入力を行うインターフェースである。出力装置２０８は、ホストＣＰＵ２０１の指示により、データを出力するインターフェースである。出力装置２０８としては、ディスプレイやプリンタなどが挙げられる。
【００３１】
（計算装置１００の機能的構成例）
図３は、計算装置１００の機能的構成例を示すブロック図である。計算装置１００は、コード変換部３０１と、シミュレーション実行部３０２と、シミュレーション情報収集部３０３と、を含む。また、コード変換部３０１、シミュレーション実行部３０２およびシミュレーション情報収集部３０３は、制御部となる機能である。各部の処理は、例えば、ホストＣＰＵ２０１がアクセス可能なＲＯＭ２０２やディスク２０５などの記憶装置に記憶された計算ターゲットプログラムｐｇｒにコーディングされる。そして、ホストＣＰＵ２０１が記憶装置から計算ターゲットプログラムｐｇｒを読み出して、計算ターゲットプログラムｐｇｒにコーディングされた処理を実行する。これにより、各部の処理が実現される。また、各部の処理結果は、例えば、ＲＡＭ２０３、ディスク２０５などの記憶装置に記憶される。
【００３２】
ここで、計算装置１００には、ターゲットプログラムｐｇｒと、ターゲットプログラムｐｇｒに関するタイミング情報と、予測情報と、が入力される。具体的には、例えば、計算装置１００は、図２に示した入力装置２０７を用いた利用者の操作入力により、ターゲットプログラムｐｇｒとタイミング情報３３０と予測情報３３１の入力を受け付ける。
【００３３】
コード変換部３０１は、対象ブロックの各命令の性能値によって対象ブロックがターゲットＣＰＵ１０１によって実行された場合の性能値を算出可能なホストコードＨＣを生成する。ここでは、性能値をサイクル数として説明する。シミュレーション実行部３０２は、ホストコードＨＣを実行することによって、対象ブロックがターゲットＣＰＵ１０１によって実行された場合のサイクル数を算出する。シミュレーション情報収集部３０３は、シミュレーション実行部３０２によって得られるサイクル数の情報を出力する。
【００３４】
まず、入力されるターゲットプログラムｐｇｒと、ターゲットプログラムｐｇｒに関するタイミング情報３３０と、予測情報３３１と、について説明する。
【００３５】
図４は、ターゲットプログラムｐｇｒに含まれるブロックＢＢ例を示す説明図である。ブロックＢＢは、連続するＬＤ命令と、ＭＵＬＴ命令と、を含む。１行目のＬＤ命令から３行目のＭＵＬＴ命令の順にターゲットＣＰＵ１０１のパイプラインに投入される。
【００３６】
図５は、タイミング情報３３０の記憶内容の一例を示す説明図である。タイミング情報３３０は、命令実行時の各処理要素（ステージ）と使用可能なレジスタとの対応を示す情報と、命令のうち外部依存命令ごとに、実行結果に応じた遅延時間を定めるペナルティ時間（ペナルティサイクル数）とを示す情報である。
【００３７】
外部依存命令とは、命令の実行時にターゲットＣＰＵ１０１がアクセスするハードウェア資源の状態に依存してサイクル数が変化する命令である。例えば、外部依存命令が実行されると、例えば、命令キャッシュ、データキャッシュ、ＴＬＢ検索などを行ったり、または、分岐予測、コール／リターンのスタックなどの処理が行われる。具体的な外部依存命令としては、ＬＤ命令またはＳＴ命令などが挙げられる。図５で示すタイミング情報３３０は、レコード３３０−１〜レコード３３０−３を記憶している。
【００３８】
タイミング情報３３０は、命令種別、ソースレジスタ、宛先レジスタ、ペナルティという４つのフィールドを含む。命令種別フィールドには、命令のオペコードが格納される。ソースレジスタフィールドには、オペランドのうち入力元となるレジスタが格納される。宛先レジスタフィールドには、オペランドのうち出力先となるレジスタが格納される。ペナルティフィールドには、実行結果に応じた遅延時間が格納される。
【００３９】
レコード３３０−１は、ＬＤ命令について、ソースレジスタｒｓ１（ｒ１）が１番目の処理要素（ｅ１）で、宛先レジスタｒｄ（ｒ２）が２番目の処理要素（ｅ２）で使用可能となることを示す。また、レコード３３０−１は、キャッシュミスヒットが発生した場合に、６サイクルの遅延時間が発生することを示す。なお、ｅｘは、パイプラインステージのうちエグゼキュートステージのｘ番目の処理要素であることを示している。ｘは１以上の整数である。
【００４０】
レコード３３０−２は、ＬＤ命令について、ソースレジスタｒｓ１（ｒ３）が１番目の処理要素（ｅ１）で、宛先レジスタｒｄ（ｒ４）が２番目の処理要素（ｅ２）で使用可能となることを示す。また、レコード３３０−２は、キャッシュミスヒットが発生した場合に、６サイクルの遅延時間が発生することを示している。
【００４１】
また、レコード３３０−３は、ＭＵＬＴ命令では、第１ソースレジスタｒｓ１（ｒ２）が処理要素ｅ１、第２ソースレジスタｒｓ２（ｒ４）が処理要素ｅ２、宛先レジスタｒｄ（ｒ５）は処理要素ｅ３で使用可能であることを示す。
【００４２】
図６は、予測情報３３１の記憶内容例を示す説明図である。予測情報３３１は、ターゲットプログラムｐｇｒの外部依存命令の処理において、生じる確率が高い実行結果（予測結果）を定めた情報である。例えば、予測情報３３１は、処理内容、予測結果という２つのフィールドを含む。処理内容フィールドには、ターゲットコードの外部依存命令の処理内容が格納される。予測結果フィールドには、外部依存命令の処理の予測結果が格納される。各フィールドに情報が設定されることにより、レコード（例えば、３３１−１〜３３１−５など）として記憶される。予測情報３３１では、例えば、命令キャッシュについての予測はヒットであり、データキャッシュについての予測はヒットであり、ＴＬＢ検索についての予測はヒットである。また、予測情報３３１では、分岐予測についての予測はヒットであり、コール／リターンについての予測はヒットであることが定められてある。
【００４３】
まず、コード分割部３１１は、例えば、計算装置１００に入力されたターゲットプログラムｐｇｒを所定基準によってブロックＢＢに分割する。分割タイミングは、例えば、対象ブロックが変化した場合にあらたな対象ブロックを分割してもよいし、事前にターゲットプログラムｐｇｒを複数のブロックＢＢに分割してもよい。分割されるブロック単位は、例えば、ベーシックブロック単位でよく、または、予め定められた任意のコード単位でよい。ベーシックブロック単位とは、分岐命令からつぎの分岐命令前までの命令群である。
【００４４】
判断部３１２は、対象ブロックをコンパイル済みか否か判断する。これにより、対象ブロックが最初に計算対象となったか否かを判断する。過去に計算対象になっていれば対象ブロックはコンパイル済みであり、最初に計算対象となった場合、対象ブロックはコンパイル済みでない。判断部３１２は、例えば、性能のシミュレーションの実行結果に応じてつぎに計算対象となるブロックＢＢを判断可能である。より具体的には、判断部３１２は、対象ブロックに関連付けられたホストコードＨＣがあるか否かを判断する。例えば、ホストコードリスト３３２では、ブロックＩＤ、ホストコード、補正値情報のフィールドを有する。ブロックＩＤのフィールドには、ブロックを示す識別情報が設定され、ホストコードのフィールドには、ブロックに対応するホストコードが設定され、補正値情報のフィールドには、ホストコードＨＣにより利用される補正値情報が設定される。このように、判断部３１２は、ホストコードリスト３３２を参照すれば、対象ブロックに関連付けられたホストコードＨＣの有無を判定可能である。対象ブロックに関連付けられたホストコードＨＣがある場合、判断部３１２は、対象ブロックがコンパイル済みであると判断する。対象ブロックに関連付けられたホストコードＨＣがない場合、判断部３１２は、対象ブロックがコンパイル済みでないと判断する。
【００４５】
対象ブロックがコンパイル済みであると判断部３１２によって判断された場合、予測シミュレーション実行部３１３は、予測情報３３１に基づいて、対象ブロックに含まれる外部依存命令についての各予測ケースを設定する。そして、予測シミュレーション実行部３１３は、タイミング情報３３０を参照して、予測ケースを前提とするブロックＢＢ内の各命令の実行の進み具合の動作シミュレーションｐｓｉｍを実行する。これにより、予測シミュレーション実行部３１３は、設定した予測ケースを前提とする場合のブロックＢＢ内の各命令のサイクル数を導出する。また、予測シミュレーション実行部３１３は、導出した各命令のサイクル数を後述する補正値情報に格納する。
【００４６】
また、予測シミュレーション実行部３１３は、ブロックＢＢ内に複数のメモリアクセス命令が含まれる場合、タイミング情報３３０を参照して、予測ケースと異なるケースを前提とするブロックＢＢ内の各命令の実行の進み具合をシミュレーションする。これにより、予測シミュレーション実行部３１３は、設定した予測ケースと異なるケースを前提とする場合のブロックＢＢ内の各命令のサイクル数を導出する。
【００４７】
つぎに、予測シミュレーション実行部３１３は、設定した予測ケースを前提とした場合の算出したブロックＢＢのサイクル数と、設定した予測ケースと異なるケースを前提とした場合の算出したブロックＢＢのサイクル数と、の差分値を、出力する。出力先は、例えば、後述する補正値情報である。
【００４８】
図７は、すべてキャッシュヒットまたは先頭のＬＤ命令についてキャッシュヒットとなった場合の動作例を示す説明図である。ブロックＢＢ１の各命令は、ｆステージ、ｄステージ、ｅステージを順に実行する。ｆステージ、ｄステージは命令によらず１サイクルで処理を行い、ｅステージは、各命令によって異なるサイクル数で処理を行う。また、本実施の形態では、ＬＤ命令やＳＴ命令については、基準となるサイクル数を２とし、ＭＵＬＴ命令については、基準となるサイクル数を３とし、ＡＤＤ命令やＳＵＢ命令などのその他の命令については、基準となるサイクル数を１とする。基準となるサイクル数については、ターゲットＣＰＵ１０１の構成に応じて定まるため、種々変更可能であり、特に限定しない。
【００４９】
図５に示すタイミング情報３３０によれば、１行目のＬＤ命令のｆステージについてはタイミングｔ−２に行われ、２行目のＬＤ命令のｆステージについてはタイミングｔ−１に行われる。また、３行目のＭＵＬＴ命令のｆステージについてはタイミングｔに行われる。
【００５０】
また、図７（Ａ）では、１行目のＬＤ命令および２行目のＬＤ命令についてのキャッシュメモリ１０２の動作結果がいずれもキャッシュヒットの組み合わせについての動作シミュレーション結果例を示す。図７（Ａ）において、３行目のＭＵＬＴ命令についてのｅ３ステージについてはタイミングｔ＋４に行われる。また、例えば、１行目のＬＤ命令のｆステージから３行目のＭＵＬＴ命令のｅ３ステージまでの差分値（ｘ）は６である。
【００５１】
また、図７（Ｂ）では、１行目のＬＤ命令についてのキャッシュメモリ１０２の動作結果がキャッシュミスヒットであり、２行目のＬＤ命令についてのキャッシュメモリ１０２の動作結果がキャッシュヒットである組み合わせについての動作シミュレーション結果例を示す。
【００５２】
図７（Ｂ）において、３行目のＭＵＬＴ命令のｅ３ステージについてはタイミングｔ＋１０である。また、例えば、１行目のＬＤ命令のｆステージから３行目のＭＵＬＴ命令のｅ３ステージまでの差分値（ｙ）は１２である。
【００５３】
予測シミュレーション実行部３１３は、「差分値（ｙ）−差分値（ｘ）」が１行目のＬＤ命令を実行した場合のキャッシュメモリ１０２の動作結果がキャッシュミスヒットである場合における補正値となる。導出された補正値は、後述する補正値情報の補正値Ｂのフィールドに出力される。ここでは、補正値は、６である。
【００５４】
図８は、補正値情報例を示す説明図である。補正値情報ＴＴ１は、ホストコードＨＣ１の実行に用いるサイクル数が設定される。例えば、補正値情報ＴＴ１は、補正値Ａと、補正値Ｂと、のフィールドを有する。各フィールドに情報が設定されることにより、レコード（例えば、８００−１〜８００−３など）として記憶される。補正値Ａのフィールドには、各命令のｅステージの数を、予測ケースを前提とした場合における動作シミュレーション結果に基づいて補正した値である。
【００５５】
図７（Ａ）に示したように、ブロックＢＢ１については、予測ケースがキャッシュヒットを前提とした場合において、ストールなどが発生しないため、補正値Ａのフィールドには、各命令のｅステージの数がそのまま設定されてある。
【００５６】
また、１行目のＬＤ命令を実行した場合のキャッシュメモリ１０２の動作結果が予測ケースと異なるキャッシュミスヒットとなった場合についての補正値Ｂのフィールドには、上述した「差分値（ｙ）−差分値（ｘ）」である６が設定される。
【００５７】
また、図示しないが、２行目のＬＤ命令を実行した場合のキャッシュメモリ１０２の動作結果がキャッシュミスヒットとなった場合についての補正値は、１行目のＬＤ命令についての補正値と同様に算出される。ここでは、補正値は６とする。ただし、１行目のＬＤ命令についてキャッシュヒットとなった後に、２行目のＬＤ命令についてキャッシュミスヒットとなる可能性は低い。例えば、１行目のＬＤ命令についてのキャッシュメモリ１０２の動作結果がキャッシュミスヒットとなった場合、キャッシュメモリ１０２に含まれる制御部が、メインメモリから該当のデータを含む所定幅のデータを取得してキャッシュメモリ１０２に格納する。そのため、２行目のＬＤ命令を実行した場合のロードされるデータが当該所定幅のデータに含まれている可能性が高い。そのため、キャッシュメモリ１０２の動作がキャッシュヒットとなる可能性が高い。
【００５８】
コード生成部３１４は、予測シミュレーション結果に基づいて、ターゲットＣＰＵ１０１が対象ブロックを実行した場合の対象ブロックのサイクル数を計算するホストコードＨＣを生成する。生成されたホストコードＨＣは、例えば、対象ブロックと関連付けられてＲＡＭ２０３やディスク２０５などの記憶装置に記憶される。例えば、対象ブロックを示すＩＤと関連付けられてホストコードリストに３３２登録される。
【００５９】
図９は、ホストコードＨＣ生成例を示す説明図である。図９（Ａ）は、ブロックＢＢ１からホストコードＨＣ（機能コードＦＣのみ）が生成される例を示し、図９（Ｂ）は、ホストコードＨＣ（機能コードＦＣのみ）に、タイミングコードＴＣが組み込まれる例を示す。
【００６０】
図９（Ａ）に示すように、コード生成部３１４は、ブロックＢＢ１に含まれるターゲットコードＩｎｓｔ＿Ａをコンパイルすることにより、ホストコードＨｏｓｔ＿Ｉｎｓｔ＿Ａ０＿ｆｕｎｃ、Ｈｏｓｔ＿Ｉｎｓｔ＿Ａ１＿ｆｕｎｃに変換する。コード生成部３１４は、ブロックＢＢ１に含まれるターゲットコードＩｎｓｔ＿Ｂをコンパイルすることによって、ホストコードＨｏｓｔ＿Ｉｎｓｔ＿Ｂ０＿ｆｕｎｃ、Ｈｏｓｔ＿Ｉｎｓｔ＿Ｂ１＿ｆｕｎｃ、Ｈｏｓｔ＿Ｉｎｓｔ＿Ｂ２＿ｆｕｎｃ、Ｈｏｓｔ＿Ｉｎｓｔ＿Ｂ３＿ｆｕｎｃに変換する。また、コード生成部３１４は、ブロックＢＢ１に含まれるターゲットコードＩｎｓｔ＿Ｃをコンパイルすることによって、ホストコードＨｏｓｔ＿Ｉｎｓｔ＿Ｃ０＿ｆｕｎｃ、Ｈｏｓｔ＿Ｉｎｓｔ＿Ｃ１＿ｆｕｎｃ、Ｈｏｓｔ＿Ｉｎｓｔ＿Ｃ２＿ｆｕｎｃに変換する。これにより、機能コードＦＣのみのホストコードＨＣが生成される。
【００６１】
さらに、図９（Ｂ）に示すように、コード生成部３１４は、機能コードＦＣのみのホストコードＨＣに、ターゲットコードＩｎｓｔ＿ＡのタイミングコードＨｏｓｔ＿Ｉｎｓｔ＿Ａ２＿ｃｙｃｌｅ、Ｈｏｓｔ＿Ｉｎｓｔ＿Ａ３＿ｃｙｃｌｅを組み込む。コード生成部３１４は、ターゲットコードＩｎｓｔ＿ＢのタイミングコードＨｏｓｔ＿Ｉｎｓｔ＿Ｂ４＿ｃｙｃｌｅ、Ｈｏｓｔ＿Ｉｎｓｔ＿Ｂ５＿ｃｙｃｌｅを組み込む。コード生成部３１４は、ターゲットコードＩｎｓｔ＿ＣのタイミングコードＨｏｓｔ＿Ｉｎｓｔ＿Ｃ３＿ｃｙｃｌｅを組み込む。
【００６２】
タイミングコードＴＣは、対象ブロックに含まれる命令のサイクル数を定数化し、命令のサイクル数を合計して対象ブロックのサイクル数を求めるコードである。これにより、ブロックＢＢ実行中の進み具合を示す情報を得ることができる。なお、ホストコードＨＣのうち、機能コードＦＣ、外部依存命令以外の命令についてのタイミングコードＴＣは既知のコードを使用して実施できる。外部依存命令についてのタイミングコードＴＣは、補正処理を呼び出すヘルパー関数呼び出し命令として用意される。本実施の形態におけるヘルパー関数呼び出し命令については後述する。
【００６３】
図１０は、ホストコードＨＣ例を示す説明図である。ブロックＢＢ１に対応するホストコードＨＣ１は、機能コードＦＣ１と、タイミングコードＴＣ１と、を有する。機能コードＦＣ１は、１行目のＬＤ命令についての機能コードと、２行目のＬＤ命令についての機能コードと、３行目のＭＵＬＴ命令についての機能コードと、を有する。
【００６４】
タイミングコードＴＣ１は、１行目のＬＤ命令についてヘルパー関数ｃａｃｈｅ＿ｌｄの呼び出し命令と、予測ケースであった場合における１行目のＬＤ命令のサイクル数を加算する計算命令と、を有する。また、タイミングコードＴＣ１は、ヘルパー関数ｃａｃｈｅ＿ｌｄの呼び出し命令と、予測ケースであった場合における１行目のＬＤ命令のサイクル数を加算する計算命令と、３行目のＭＵＬＴ命令のサイクル数を加算する計算命令と、を有する。
【００６５】
図１０の例では、計算命令によって、「ｃｕｒｒｅｎｔ＿ｔｉｍｅ」にサイクル数を加算していくことにより、ターゲットＣＰＵ１０１がブロックＢＢ１を実行した場合のブロックＢＢ１のサイクル数が算出される。例えば、「ｄｅｌｔａ＿ｈｉｔ（１）」〜「Ｄｅｌｔａ＿ｈｉｔ（３）」は、補正値情報ＴＴ１の補正値Ａのフィールドに設定された値である。「ｄｅｌｔａ＿ｈｉｔ（１）」は、レコード８００−１の補正値Ａのフィールドに設定された値である。「ｄｅｌｔａ＿ｈｉｔ（２）」は、レコード８００−２の補正値Ａのフィールドに設定された値である。「ｄｅｌｔａ＿ｈｉｔ（３）」は、レコード８００−３の補正値Ａのフィールドに設定された値である。
【００６６】
図１０に示すように、ヘルパー関数ｃａｃｈｅ＿ｌｄの引数は、ＬＤ命令におけるアクセス先の記憶領域を示すアドレスと、命令番号と、である。命令番号については、補正値情報ＴＴ１のレコードから補正値Ｂのフィールドに設定された値を取得するためのインデックス情報である。例えば、２行目の「ｃａｌｌ  ｃａｃｈｅ＿ｌｄ（Ａｄｄｒｅｓｓ１，１）」では、補正値情報ＴＴ１のレコード８００−１の補正値Ｂのフィールドに設定された値が補正値として利用される。ヘルパー関数ｃａｃｈｅ＿ｌｄの詳細については図１１を用いて後述する。
【００６７】
つぎに、シミュレーション実行部３０２は、コード生成部３１４が生成したホストコードＨＣを実行することにより、ターゲットＣＰＵ１０１が対象ブロックを実行した場合のサイクル数を算出する。すなわち、シミュレーション実行部３０２は、ターゲットプログラムｐｇｒを実行するターゲットＣＰＵ１０１の命令実行の機能および性能のシミュレーションを行う。
【００６８】
具体的には、シミュレーション実行部３０２は、コード実行部３２１と、補正部３２２とを含む。コード実行部３２１は、対象ブロックのホストコードＨＣを実行する。具体的には、例えば、コード実行部３２１は、ホストコードリスト３３２から、対象ブロックのＩＤに対応するホストコードＨＣを取得して、取得したホストコードＨＣを実行する。
【００６９】
また、シミュレーション実行部３０２は、対象ブロックのホストコードＨＣが実行されると、次に処理対象となるブロックＢＢが特定できる。そのため、シミュレーション実行部３０２は、動作シミュレーションｐｓｉｍにおけるＰＣ（Ｐｒｏｇｒａｍ  Ｃｏｕｎｔｅｒ）の値をそのブロックＢＢが格納されてあるアドレスを指すように変更する。または、シミュレーション実行部３０２は、例えば、次に処理対象となるブロックＢＢの情報（例えば、ブロックＢＢＩＤ）をコード変換部３０１に出力する。これにより、コード変換部３０１は、ホストコードＨＣの実行による動作シミュレーションｐｓｉｍにおいて対象ブロックが切り替わったことを認識することができるとともに、動作シミュレーションｐｓｉｍにおける次の対象ブロックを認識することができる。
【００７０】
また、コード実行部３２１は、ホストコードＨＣの実行において、へルパー関数ｃａｃｈｅ＿ｌｄ呼び出し命令を実行すると、ヘルパー関数ｃａｃｈｅ＿ｌｄである補正部３２２を呼び出す。補正部３２２は、外部依存命令の実行結果が、設定されていた予測ケースと異なる場合に、外部依存命令のサイクル数を、予測ケースでのサイクル数を補正して求める。
【００７１】
具体的には、例えば、補正部３２２は、ターゲットＣＰＵ１０１が対象ブロックを実行した場合の動作シミュレーションｃｓｉｍを実行することにより、外部依存命令の実行結果が、設定されていた予測結果と異なるか否かを判断する。補正部３２２での動作シミュレーションｃｓｉｍは、例えば、ターゲットＣＰＵ１０１と、ターゲットＣＰＵ１０１がアクセス可能なキャッシュなどのハードウェア資源と、を有するシステムのモデルにターゲットプログラムｐｇｒを与えることにより実行される。例えば、外部依存命令がＬＤ命令であれば、ハードウェア資源は、キャッシュメモリ１０２である。
【００７２】
ＬＤ命令を例に挙げると、補正部３２２は、予測ケースであるキャッシュヒットとなった場合には、何もせずに処理を終了する。補正部３２２は、予測ケースと異なった場合に、同一のブロックＢＢ内であって、直近に実行された所定数命令に含まれるＬＤ命令についての動作シミュレーションｃｓｉｍにおける動作結果が予測ケースと異なるか否かを判断する。所定数については、例えば、５程度とするが、これに限らず、利用者などによって種々変更可能である。
【００７３】
補正部３２２は、キャッシュミスヒットとなったと判断した場合に、対象ブロック内の命令であって、対象となるＬＤ命令を含む前後所定数の命令を実行した場合の動作シミュレーションｃｓｉｍを実行する。これにより、補正部３２２は、動作シミュレーション結果によって得られるサイクル数に基づいて、キャッシュヒットとなった場合におけるサイクル数とキャッシュミスヒットとなった場合におけるサイクル数との差分を、対象ブロックのサイクル数に加算する。具体的には、例えば、補正部３２２は、差分を上述した「ｃｕｒｒｅｎｔ＿ｔｉｍｅ」に加算する。
【００７４】
図１１は、ヘルパー関数ｃａｃｈｅ＿ｌｄ例を示す説明図である。まず、補正部３２２は、ヘルパー関数ｃａｃｈｅ＿ｌｄによって、引数ａｄｄｒｅｓｓによって対象のＬＤ命令を実行した場合のキャッシュメモリ１０２の動作シミュレーションｃｓｉｍを行う。ここでの動作シミュレーションｃｓｉｍは、上述したように、例えば、ターゲットＣＰＵ１０１と、ターゲットＣＰＵ１０１がアクセス可能なキャッシュと、を有するシステムのモデルに対象となるＬＤ命令のアクセス先のアドレスを与えることにより実行される。
【００７５】
つぎに、補正部３２２は、キャッシュミスヒットとなった場合に、同一のブロックＢＢ内であって、直近に実行された５命令に含まれるＬＤ命令を実行した場合のキャッシュメモリ１０２の動作シミュレーションｃｓｉｍにおいてキャッシュミスヒットとなったかを判断する。直近に実行された５命令に含まれるＬＤ命令についての動作シミュレーションｃｓｉｍにおける動作結果が予測ケースと異なったかは、「ｐｒｅｖ＿ｃａｃｈｅ＿ｍｉｓｓ＿ｆｌａｇ」と「ｐｒｅｖ＿ｃａｃｈｅ＿ｍｉｓｓ＿ｏｆｆｓｅｔ」によって判定可能である。直近に実行された５命令に含まれるＬＤ命令を直近のＬＤ命令とも呼ぶ。
【００７６】
補正部３２２は、直近のＬＤ命令についてキャッシュミスヒットであると判断された場合、対象ブロック内の対象となるＬＤ命令と前後５命令とについての動作シミュレーションｐｓｉｍを行う。図示していないが、補正部３２２は、動作シミュレーション結果によって得られるサイクル数に基づいて、キャッシュヒットとなった場合におけるサイクル数とキャッシュミスヒットとなった場合におけるサイクル数との差分を、対象ブロックのサイクル数に加算する。
【００７７】
また、補正部３２２は、直近のＬＤ命令についてキャッシュミスヒットでないと判断された場合、補正値情報ＴＴ１内のレコード８００−ｉｎｕｍの補正値Ｂのフィールドに設定された値を取得して、「ｃｕｒｒｅｎｔ＿ｔｉｍｅ」に加算する。ここでの加算は、補正値Ｂを加算する加算命令「ｃｕｒｒｅｎｔ＿ｔｉｍｅ＋＝ｄｅｌｔａ＿ｍｉｓｓ［ｉｎｕｍ］」によって行われる。
【００７８】
また、補正部３２２は、対象となるＬＤ命令についてキャッシュミスヒットであると判断された場合、「ｐｒｅｖ＿ｃａｃｈｅ＿ｍｉｓｓ＿ｆｌａｇ」を１に設定し、「ｐｒｅｖ＿ｃａｃｈｅ＿ｍｉｓｓ＿ｏｆｆｓｅｔ」にｉｎｕｍを設定する。これにより、つぎのＬＤ命令についてキャッシュミスヒットとなった場合に、直近のＬＤ命令においてキャッシュミスヒットとなったか否かを判断することが可能となる。
【００７９】
また、例えば、１行目のＬＤ命令についてキャッシュヒットであり、２行目のＬＤ命令についてキャッシュヒットであると判定された場合、ｃｕｒｒｅｎｔ＿ｔｉｍｅは、加算命令が順に実行されて、「２」＋「２」＋「３」となり７となる。また、例えば、１行目のＬＤ命令についてキャッシュミスヒットであり、２行目のＬＤ命令についてキャッシュヒットであると判定された場合、ｃｕｒｒｅｎｔ＿ｔｉｍｅは、加算命令が順に実行されて、「６」＋「２」＋「２」＋「３」となり１３となる。また、例えば、１行目のＬＤ命令についてキャッシュヒットであり、２行目のＬＤ命令についてキャッシュミスヒットであると判定された場合、ｃｕｒｒｅｎｔ＿ｔｉｍｅは、加算命令が順に実行されて、「２」＋「６」＋「２」＋「３」となり１３となる。
【００８０】
また、例えば、１行目のＬＤ命令についてキャッシュミスヒットであり、２行目のＬＤ命令についてキャッシュミスヒットであると判定された場合、補正部３２２は、動作シミュレーションｐｓｉｍが行われる。
【００８１】
図１２は、連続してキャッシュミスヒットとなった場合の動作例を示す説明図である。図１２（Ｃ）に示すように、３行目のＭＵＬＴ命令のｅ３ステージについてはタイミングｔ＋１１に行われる。また、例えば、１行目のＬＤ命令のｆステージから３行目のＭＵＬＴ命令のｅ３ステージまでの差分値（ｚ）は１３である。
【００８２】
補正部３２２は、「差分値（ｚ）−差分値（ｘ）」を算出することにより１および２行目の各ＬＤ命令を実行した場合のキャッシュメモリ１０２の動作結果がキャッシュミスヒットである場合における補正値を算出する。差分値（ｘ）については、例えば、補正値情報ＴＴ１の補正値Ａのフィールドに設定された各値と、１行目のＬＤ命令に対応する補正値情報ＴＴ１のレコード８００−１の補正値Ｂのフィールドに設定された各値と、の合計値である。ここでの補正値は１である。
【００８３】
そして、補正部３２２は、算出された補正値をｃｕｒｒｅｎｔ＿ｔｉｍｅに加算する。また、例えば、１行目のＬＤ命令についてキャッシュミスヒットであり、２行目のＬＤ命令についてキャッシュミスヒットであると判定された場合、ｃｕｒｒｅｎｔ＿ｔｉｍｅは、加算命令が順に実行されて、「６」＋「２」＋「１」＋「２」＋「３」となり１４となる。
【００８４】
このように、すべてキャッシュヒットとなった場合と単独でキャッシュミスヒットが発生する場合とについての動作シミュレーションｐｓｉｍは事前に行っておき、キャッシュミスヒットが連続した場合にだけ再度動作シミュレーションｐｓｉｍを行う。これにより、シミュレーションの高速化を行うことができる。
【００８５】
また、対象ブロックのつぎに実行されるブロックＢＢが判明している場合、補正部３２２は、対象ブロックとつぎに実行されるブロックＢＢのうち、対象となるＬＤ命令と対象となるＬＤ命令から前後５命令について動作シミュレーションｐｓｉｍを行ってもよい。
【００８６】
つぎに、シミュレーション情報収集部３０３は、シミュレーション実行部３０２によって得られるサイクル数の情報であるシミュレーション情報３３３を出力する。
【００８７】
（計算装置１００による計算処理手順例を示すフローチャート）
図１３、図１４は、計算装置１００による計算処理手順例を示すフローチャートである。計算装置１００は、ターゲットプログラムｐｇｒの実行が終了したか否かを判断する（ステップＳ１３０１）。ターゲットプログラムｐｇｒの実行が終了していないと判断された場合（ステップＳ１３０１：Ｎｏ）、計算装置１００は、対象ブロックが変化したか否かを判断する（ステップＳ１３０２）。対象ブロックが変化していないと判断された場合（ステップＳ１３０２：Ｎｏ）、計算装置１００は、ステップＳ１３０１へ戻る。
【００８８】
対象ブロックが変化したと判断された場合（ステップＳ１３０２：Ｙｅｓ）、計算装置１００は、対象ブロックがコンパイル済みであるか否かを判断する（ステップＳ１３０３）。
【００８９】
対象ブロックがコンパイル済みでないと判断された場合（ステップＳ１３０３：Ｎｏ）、計算装置１００は、機能コードＦＣを含むホストコードＨＣを生成する（ステップＳ１３０４）。計算装置１００は、対象ブロック内の命令のうち、未選択の命令があるか否かを判断する（ステップＳ１３０５）。未選択の命令があると判断された場合（ステップＳ１３０５：Ｙｅｓ）、計算装置１００は、未選択の命令のうち、実行順が先頭の命令を選択する（ステップＳ１３０６）。ただし、後述するようにＬＤ命令やＳＴ命令と一緒に動作シミュレーションｐｓｉｍが行われることによってサイクル数をすでに取得済みである命令についてはあらたに選択しなくてもよい。
【００９０】
計算装置１００は、ＬＤ命令またはＳＴ命令か否かを判断する（ステップＳ１３０７）。ＬＤ命令またはＳＴ命令であると判断された場合（ステップＳ１３０７：Ｙｅｓ）、計算装置１００は、予測ケースを取得する（ステップＳ１３０８）。計算装置１００は、つぎのブロックＢＢを特定する（ステップＳ１３０９）。ここで、つぎのブロックＢＢとは、現在の対象ブロックのつぎに計算対象となるブロックＢＢである。例えば、ブロックＢＢ１のつぎにブロックＢＢ２になるという保証はないが、ブロックＢＢ１のつぎにブロックＢＢ２が実行されることが１００［％］または高確率で行われることが判明している場合に、ブロックＢＢ２がつぎのブロックＢＢとして特定される。
【００９１】
つぎに、計算装置１００は、予測ケースを前提とし、選択した命令と後続５命令との動作シミュレーションｐｓｉｍを行うことにより、選択した命令と後続５命令との各命令のサイクル数を取得する（ステップＳ１３１０）。ここでは、つぎのブロックＢＢが特定されなかった場合に対象ブロック内に選択した命令に後続する命令が５命令より少ない場合は５命令より少ない命令と選択した命令との動作シミュレーションｐｓｉｍが行われる。
【００９２】
つぎに、計算装置１００は、予測ケースと異なるケースを前提とし、選択した命令と後続５命令との動作シミュレーションｐｓｉｍを行うことにより、選択した命令と後続５命令との各命令のサイクル数を取得する（ステップＳ１３１１）。計算装置１００は、補正値情報ＴＴ１に結果を設定し（ステップＳ１３１２）、ステップＳ１３１４へ移行する。
【００９３】
一方、ＬＤ命令またはＳＴ命令でないと判断された場合（ステップＳ１３０７：Ｎｏ）、計算装置１００は、選択した命令の動作シミュレーションｐｓｉｍを行うことにより、選択した命令のサイクル数を取得し（ステップＳ１３１３）、ステップＳ１３１２へ移行する。
【００９４】
つぎに、計算装置１００は、補正値情報ＴＴ１に基づいて、ホストコードＨＣにタイミングコードＴＣを追加し（ステップＳ１３１４）、ステップＳ１３０５へ戻る。また、ステップＳ１３０５において、未選択の命令がないと判断された場合（ステップＳ１３０５：Ｎｏ）、計算装置１００は、ステップＳ１４０１へ移行する。また、ステップＳ１３０３において、対象ブロックがコンパイル済みであると判断された場合（ステップＳ１３０３：Ｙｅｓ）、計算装置１００は、ステップＳ１４０１へ移行する。
【００９５】
つぎに、計算装置１００は、ホストコードＨＣの各命令を実行する（ステップＳ１４０１）。そして、計算装置１００は、ヘルパー関数ｃａｃｈｅ＿ｌｄの呼び出しが発生したか否かを判断する（ステップＳ１４０２）。ヘルパー関数ｃａｃｈｅ＿ｌｄの呼び出しが発生していないと判断された場合（ステップＳ１４０２：Ｎｏ）、計算装置１００は、ステップＳ１４０４へ移行する。ヘルパー関数ｃａｃｈｅ＿ｌｄの呼び出しが発生したと判断された場合（ステップＳ１４０２：Ｙｅｓ）、計算装置１００は、ヘルパー関数を呼び出し（ステップＳ１４０３）、ステップＳ１４０４へ移行する。
【００９６】
つぎに、計算装置１００は、実行を終了したか否かを判断する（ステップＳ１４０４）。実行を終了していないと判断された場合（ステップＳ１４０４：Ｎｏ）、計算装置１００は、ステップＳ１４０２へ移行する。実行を終了したと判断された場合（ステップＳ１４０４：Ｙｅｓ）、計算装置１００は、シミュレーション情報３３３を出力し（ステップＳ１４０５）、ステップＳ１３０１へ移行する。
【００９７】
また、ステップＳ１３０１において、ターゲットプログラムｐｇｒの実行が終了したと判断された場合（ステップＳ１３０１：Ｙｅｓ）、一連の処理を終了する。
【００９８】
図１５は、補正部３２２による補正処理の詳細な説明を示すフローチャートである。補正部３２２とは、ヘルパー関数モジュールである。ここでは、ＬＤ命令についてのキャッシュアクセスがヒットしたか否かについてのヘルパー関数を例に挙げて説明する。図１５の例では、計算装置１００は、複数回のアクセスについてのキャッシュメモリ１０２の動作結果のいずれか一つがキャッシュヒットの組み合わせ１０４について補正値情報ＴＴ１により対象ブロックのサイクル数を補正できる。また、直近５命令以内のＬＤ命令のすべての動作結果がキャッシュヒットの場合における対象ブロックのサイクル数を基準として、補正が行われる。
【００９９】
まず、計算装置１００は、キャッシュメモリ１０２の動作シミュレーションｃｓｉｍを行う（ステップＳ１５０１）。上述したように、ここでの動作シミュレーションｃｓｉｍは、ホストＣＰＵと、キャッシュメモリ１０２と、をモデル化したシステムモデルによる簡易的なシミュレーションである。そして、計算装置１００は、動作シミュレーションｃｓｉｍによるキャッシュメモリ１０２の動作結果は予測ケースと同じか否かを判断する（ステップＳ１５０２）。
【０１００】
同じであると判断された場合（ステップＳ１５０２：Ｙｅｓ）、計算装置１００は、対象ブロックのサイクル数を補正しなくてよいため、一連の処理を終了する。同じでないと判断された場合（ステップＳ１５０２：Ｎｏ）、計算装置１００は、対象ブロック内の直近の５命令にＬＤ命令があるか否かを判断する（ステップＳ１５０３）。
【０１０１】
対象ブロック内の直近の５命令にＬＤ命令がないと判断された場合（ステップＳ１５０３：Ｎｏ）、計算装置１００は、ステップＳ１５０８へ移行する。一方、対象ブロック内の直近の５命令にＬＤ命令があると判断された場合（ステップＳ１５０３：Ｙｅｓ）、計算装置１００は、直近のＬＤ命令についての動作結果が予測ケースと同じか否かを判断する（ステップＳ１５０４）。直近のＬＤ命令についての動作結果が予測ケースと同じであると判断された場合（ステップＳ１５０４：Ｙｅｓ）、計算装置１００は、補正値情報ＴＴ１に含まれる対象のＬＤ命令に対応するレコード８００の補正値Ｂのフィールドに設定された補正値を取得する（ステップＳ１５０８）。そして、計算装置１００は、補正値を加算することにより対象ブロックのサイクル数を補正し（ステップＳ１５０９）、一連の処理を終了する。
【０１０２】
直近のＬＤ命令についての動作結果が予測ケースと同じでないと判断された場合（ステップＳ１５０４：Ｎｏ）、計算装置１００は、動作結果に基づいて、直近の５命令と対象のＬＤ命令と後続の５命令との動作シミュレーションｐｓｉｍを行う（ステップＳ１５０５）。そして、計算装置１００は、シミュレーション結果に基づいて、予測ケースの場合のサイクル数との差分を計算する（ステップＳ１５０６）。つぎに、計算装置１００は、算出した差分を対象ブロックのサイクル数に加算することにより補正し（ステップＳ１５０７）、一連の処理を終了する。
【０１０３】
以上説明したように、本実施の形態にかかる計算装置１００は、特定コード内の複数のメモリアクセス命令の実行によるキャッシュメモリの動作結果の複数の組み合わせの各々について該特定コード内の各命令の性能値を用意しておく。そして、計算装置１００は、各メモリアクセス命令を実行した場合のキャッシュメモリのシミュレーションによる動作結果の組み合わせに応じた該性能値によって、該特定コードの性能値を計算する。これにより、性能値の計算にかかる時間の短縮を図ることができるため、性能の計算の効率化を図ることができる。
【０１０４】
また、計算装置１００は、予め用意された組み合わせに、キャッシュメモリのシミュレーションによる動作結果の組み合わせがない場合、当該組み合わせになった場合の特定コードの動作シミュレーションによって特定コードの性能値を計算する。
【０１０５】
また、用意された複数の組み合わせは、複数回のアクセスについてキャッシュメモリの動作結果がすべてキャッシュミスヒットとなる組み合わせと異なる組み合わせである。これにより、最も発生する可能性が低い組み合わせに対応する各命令の性能値を事前に用意するための時間を短縮することができる。
【０１０６】
また、用意された複数の組み合わせは、複数回のアクセスについてキャッシュメモリの動作結果がすべてキャッシュヒットとなる組み合わせを含む。また、用意された複数の組み合わせは、複数回のアクセスのうちの一つのアクセスについてキャッシュメモリの動作結果がキャッシュミスヒットとなる組み合わせを含む。これにより、発生する可能性が高い組み合わせに対応する各命令の性能値が事前に用意されるため、特定コードの性能値の計算にかかる時間の短縮を図ることができる。
【０１０７】
また、計算装置１００は、最初に計算対象となった場合に、複数の組み合わせの各々について、特定コード内の各命令の性能値を、プロセッサの動作シミュレーションを実行することによって、各命令の性能値を取得する。これにより、最初に計算対象となった場合にだけ、動作シミュレーションが実行されるため、各命令の性能値が何度も取得されない。これにより、動作シミュレーションの回数を低減させることができ、性能値の計算にかかる時間の短縮を図ることができる。
【０１０８】
また、計算装置１００は、複数回のアクセスについての動作結果がすべてキャッシュヒットである組み合わせに対応する各命令の性能値によって特定コードを計算可能なホストコードを生成する。また、計算装置１００は、すべてキャッシュヒットである組み合わせ以外になった場合には特定コードの性能値を補正する。これにより、最も発生する可能性の高い組み合わせについてのホストコードが生成されるため、補正しない回数が向上し、補正に要する時間を短縮することができる。また、計算装置１００は、最初に計算対象となった場合にだけホストコードを生成することにより、同一のホストコードが何度も生成されなくなる。これにより、ホストコードの生成にかかる時間を短縮させることができる。また、ブロックに対応してホストコードは１つとなるため、省メモリ化を図ることができる。
【０１０９】
また、計算装置１００は、特定コードのつぎに実行対象となるコードが判明している場合、つぎに実行対象となるコードも含めて各命令の性能値を算出する動作シミュレーションを行ってもよい。これにより、特定コード内のメモリアクセス命令と、当該メモリアクセス命令に後続するつぎに実行対象となるコード内のメモリアクセス命令と、のキャッシュメモリの動作結果の組み合わせによって変化する対象ブロックの性能値を見積もることができる。したがって、性能値の見積もり精度を向上させることができる。
【０１１０】
なお、本実施の形態で説明した計算方法は、予め用意された計算プログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本計算プログラムは、磁気ディスク、光ディスク、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）フラッシュメモリなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、計算プログラムは、インターネット等のネットワークＮＥＴを介して配布してもよい。
【０１１１】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１１２】
（付記１）プロセッサに記憶領域への複数回のアクセスを指示する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータが、
前記複数回のアクセスを前記プロセッサが実行した場合の前記プロセッサがアクセス可能なキャッシュメモリの動作結果の複数の組み合わせの各々について、前記動作結果が前記組み合わせとなった場合における前記特定コード内の各命令の性能値を取得し、
前記特定コードが性能値の計算対象となった場合に、
前記プロセッサが前記プログラムを実行した場合の前記キャッシュメモリの動作シミュレーションの実行結果によって、前記複数回のアクセスを前記プロセッサが実行した場合の前記キャッシュメモリの動作結果の組み合わせを取得し、
取得した前記組み合わせが前記複数の組み合わせに含まれる場合、取得した前記各命令の性能値のうち、取得した前記組み合わせに対応する前記各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を計算する、
処理を実行することを特徴とする計算方法。
【０１１３】
（付記２）前記コンピュータが、
取得した前記組み合わせが前記複数の組み合わせに含まれない場合、前記動作結果が取得した前記組み合わせとなった場合における前記特定コード内の各命令の性能値を、前記プロセッサが前記特定コードを実行した場合の前記プロセッサの動作シミュレーションを実行することによって導出し、導出した前記各命令の性能値によって前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を計算することを特徴とする付記１に記載の計算方法。
【０１１４】
（付記３）前記複数の組み合わせは、前記複数回のアクセスについて前記キャッシュメモリの動作結果がすべてキャッシュミスヒットとなる組み合わせと異なる組み合わせであることを特徴とする付記１または２に記載の計算方法。
【０１１５】
（付記４）前記複数の組み合わせは、前記複数回のアクセスについて前記キャッシュメモリの動作結果がすべてキャッシュヒットとなる組み合わせと、前記複数回のアクセスのうちの一つのアクセスについて前記キャッシュメモリの動作結果がキャッシュミスヒットとなる組み合わせと、であることを特徴とする付記１〜３のいずれか一つに記載の計算方法。
【０１１６】
（付記５）前記各命令の性能値を取得する処理は、前記特定コードの性能値を計算する処理において最初に計算対象となった場合、前記複数の組み合わせの各々について、前記動作結果が前記組み合わせとなった場合における前記特定コード内の各命令の性能値を、前記プロセッサが前記特定コードを実行した場合の前記プロセッサの動作シミュレーションを実行することによって、取得することを特徴とする付記１〜４のいずれか一つに記載の計算方法。
【０１１７】
（付記６）前記複数の組み合わせに含まれる特定の組み合わせは、前記複数回のアクセスのすべてについての前記動作結果がキャッシュヒットである組み合わせであって、
前記コンピュータが、
前記特定コードの性能値を計算する処理において最初に計算対象となった場合、取得した前記各命令の性能値のうち、前記特定の組み合わせに対応する前記各命令の性能値によって前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を計算可能な計算用コードを生成する処理を実行し、
前記特定コードの性能値を計算する処理では、生成した前記計算用コードを実行し、前記計算用コードによって計算された前記特定コードの性能値を、取得した前記各命令の性能値のうち、取得した前記組み合わせに対応する前記各命令の性能値によって補正することを特徴とする付記１〜５のいずれか一つに記載の計算方法。
【０１１８】
（付記７）前記複数の組み合わせに含まれる特定の組み合わせは、前記複数回のアクセスのすべてについての前記動作結果がキャッシュヒットである組み合わせであって、
前記コンピュータが、
前記特定コードが最初に性能値の計算対象となった場合、取得した前記各命令の性能値のうち、前記特定の組み合わせに対応する前記各命令の性能値によって前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を計算可能な計算用コードを生成する処理を実行し、
取得した前記組み合わせが前記複数の組み合わせに含まれない場合、前記特定コードの性能値を計算する処理では、生成した前記計算用コードを実行し、前記計算用コードによって計算された前記特定コードの性能値を、導出した前記各命令の性能値によって補正することを特徴とする付記２に記載の計算方法。
【０１１９】
（付記８）前記各命令の性能値を取得する処理では、前記特定コードの性能値を計算する処理において最初に計算対象となった場合、前記プログラムが有する前記特定コードと、前記特定コードのつぎに実行対象となるコードと、の各々に含まれる各命令の性能値を導出することを特徴とする付記４または５に記載の計算方法。
【０１２０】
（付記９）プロセッサに記憶領域への複数回のアクセスを指示する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータに、
前記複数回のアクセスを前記プロセッサが実行した場合の前記プロセッサがアクセス可能なキャッシュメモリの動作結果の複数の組み合わせの各々について、前記動作結果が前記組み合わせとなった場合における前記特定コード内の各命令の性能値を取得し、
前記特定コードが性能値の計算対象となった場合に、
前記プロセッサが前記プログラムを実行した場合の前記キャッシュメモリの動作シミュレーションの実行結果によって、前記複数回のアクセスを前記プロセッサが実行した場合の前記キャッシュメモリの動作結果の組み合わせを取得し、
取得した前記組み合わせが前記複数の組み合わせに含まれる場合、取得した前記各命令の性能値のうち、取得した前記組み合わせに対応する前記各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を計算する、
処理を実行させることを特徴とする計算プログラム。
【０１２１】
（付記１０）第１プロセッサに記憶領域への複数回のアクセスを指示する特定コードを有するプログラムを前記第１プロセッサが実行した場合の前記プログラムの性能値を計算する計算装置であって、
前記複数回のアクセスを前記第１プロセッサが実行した場合の前記第１プロセッサがアクセス可能なキャッシュメモリの動作結果の複数の組み合わせの各々について、前記動作結果が前記組み合わせとなった場合における前記特定コード内の各命令の性能値を取得し、
前記特定コードが性能値の計算対象となった場合に、
前記第１プロセッサが前記プログラムを実行した場合の前記キャッシュメモリの動作シミュレーションの実行結果によって、前記複数回のアクセスを前記第１プロセッサが実行した場合の前記キャッシュメモリの動作結果の組み合わせを取得し、
取得した前記組み合わせが前記複数の組み合わせに含まれる場合、取得した前記各命令の性能値のうち、取得した前記組み合わせに対応する前記各命令の性能値によって、前記第１プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を計算する、
処理を実行する第２プロセッサを有することを特徴とする計算装置。
【０１２２】
（付記１１）プロセッサに記憶領域への複数回のアクセスを指示する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータに、
前記複数回のアクセスを前記プロセッサが実行した場合の前記プロセッサがアクセス可能なキャッシュメモリの動作結果の複数の組み合わせの各々について、前記動作結果が前記組み合わせとなった場合における前記特定コード内の各命令の性能値を取得し、
前記特定コードが性能値の計算対象となった場合に、
前記プロセッサが前記プログラムを実行した場合の前記キャッシュメモリの動作シミュレーションの実行結果によって、前記複数回のアクセスを前記プロセッサが実行した場合の前記キャッシュメモリの動作結果の組み合わせを取得し、
取得した前記組み合わせが前記複数の組み合わせに含まれる場合、取得した前記各命令の性能値のうち、取得した前記組み合わせに対応する前記各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を計算する、
処理を実行させる計算プログラムを記録したことを特徴とする記録媒体。
【符号の説明】
【０１２３】
１００  計算装置
１０１  ターゲットＣＰＵ
１０２  キャッシュメモリ
１０３  テーブル
１０４  組み合わせ
２０１  ホストＣＰＵ
３０１  コード変換部
３０２  シミュレーション実行部
３０３  シミュレーション情報収集部
３１１  コード分割部
３１２  判断部
３１３  予測シミュレーション実行部
３１４  コード生成部
３２１  コード実行部
３２２  補正部
３３０  タイミング情報
３３１  予測情報
３３３  シミュレーション情報
ｐｇｒ  ターゲットプログラム
ＨＣ，ＨＣ１  ホストコード
ＦＣ，ＦＣ１  機能コード
ＴＣ，ＴＣ１  タイミングコード
【図１】
2015130067.tif 000003
【図２】
2015130067.tif 000004
【図３】
2015130067.tif 000005
【図４】
2015130067.tif 000006
【図５】
2015130067.tif 000007
【図６】
2015130067.tif 000008
【図７】
2015130067.tif 000009
【図８】
2015130067.tif 000010
【図９】
2015130067.tif 000011
【図１０】
2015130067.tif 000012
【図１１】
2015130067.tif 000013
【図１２】
2015130067.tif 000014
【図１３】
2015130067.tif 000015
【図１４】
2015130067.tif 000016
【図１５】
2015130067.tif 000017