(57)【特許請求の範囲】
【請求項１】
同一のキャッシュメモリを介して同一の記憶装置にアクセス可能な第１コアおよび第２コアを有するマルチコアプロセッサについて、
前記記憶装置へのアクセスを指示する第１アクセス命令を有する第１コードを前記第１コアが実行した場合の前記第１コードの第１性能値を、前記第１コアが前記第１コードを実行する動作の第１シミュレーションによって計算する第１計算処理と、
前記記憶装置へのアクセスを指示する第２アクセス命令を有する第２コードを前記第２コアが実行した場合の前記第２コードの第２性能値を、前記第２コアが前記第２コードを実行する動作の第２シミュレーションによって計算する第２計算処理と、
前記第１シミュレーションにおいて前記第１アクセス命令が実行される場合に、前記第１シミュレーションと前記第２シミュレーションとの同期を行う同期処理と、
前記同期処理による前記同期の後に、前記第１アクセス命令によって前記第１コアが前記キャッシュメモリを介して前記記憶装置にアクセスする場合の前記キャッシュメモリの動作の第３シミュレーションによって、前記第１計算処理によって計算される前記第１性能値の補正を行う補正処理と、
を実行する制御部を有することを特徴とする計算装置。
【請求項２】
前記制御部は、
前記第１シミュレーションにおける時刻が前記第２シミュレーションにおける時刻よりも遅れている場合に、前記同期処理を実行せずに前記補正処理を行うことを特徴とする請求項１に記載の計算装置。
【請求項３】
前記制御部は、
前記第１シミュレーションにおいて前記第１アクセス命令が実行される場合に、前記記憶装置のうちの前記第１シミュレーションにおいて前記第１コアが利用する第１の記憶領域と、前記記憶装置のうちの前記第２シミュレーションにおいて前記第２コアが利用する第２の記憶領域と、が一致しているか否かを判断する判断処理を実行し、
前記判断処理によって一致していないと判断された場合、前記同期処理を実行せずに前記補正処理を行うことを特徴とする請求項１または２に記載の計算装置。
【請求項４】
前記制御部は、
前記第１シミュレーションにおいて前記第１アクセス命令が実行される場合に、前記第１シミュレーションと、前記記憶装置にアクセス可能なアクセラレータの動作をシミュレートするアクセラレータシミュレーションとの同期を行う第２同期処理を実行し、
前記第２同期処理の後に、前記補正処理を行うことを特徴とする請求項１に記載の計算装置。
【請求項５】
前記制御部は、前記第１シミュレーションにおける時刻が前記アクセラレータシミュレーションにおける時刻よりも遅れている場合に、前記第２同期処理を省くことを特徴とする請求項４に記載の計算装置。
【請求項６】
前記制御部は、前記第１シミュレーションにおいて前記第１アクセス命令が実行される場合に、前記記憶装置のうちの前記第１シミュレーションにおいて前記第１コアが利用する第１の記憶領域と、前記記憶装置のうちの前記アクセラレータシミュレーションにおいて前記アクセラレータが利用する第３の記憶領域とが一致していない場合、前記第２同期処理を省くことを特徴とする請求項４または５に記載の計算装置。
【請求項７】
コンピュータが、
同一のキャッシュメモリを介して同一の記憶装置にアクセス可能な第１コアおよび第２コアを有するマルチコアプロセッサについて、
前記記憶装置へのアクセスを指示する第１アクセス命令を有する第１コードを前記第１コアが実行した場合の前記第１コードの第１性能値を、前記第１コアが前記第１コードを実行する動作の第１シミュレーションによって計算する第１計算処理と、
前記記憶装置へのアクセスを指示する第２アクセス命令を有する第２コードを前記第２コアが実行した場合の前記第２コードの第２性能値を、前記第２コアが前記第２コードを実行する動作の第２シミュレーションによって計算する第２計算処理と、
前記第１シミュレーションにおいて前記第１アクセス命令が実行される場合に、前記第１シミュレーションと前記第２シミュレーションとの同期を行う同期処理と、
前記同期処理による前記同期の後に、前記第１アクセス命令によって前記第１コアが前記キャッシュメモリを介して前記記憶装置にアクセスする場合の前記キャッシュメモリの動作の第３シミュレーションによって、前記第１計算処理によって計算される前記第１性能値の補正を行う補正処理と、
を実行することを特徴とする計算方法。
【請求項８】
コンピュータに、
同一のキャッシュメモリを介して同一の記憶装置にアクセス可能な第１コアおよび第２コアを有するマルチコアプロセッサについて、
前記記憶装置へのアクセスを指示する第１アクセス命令を有する第１コードを前記第１コアが実行した場合の前記第１コードの第１性能値を、前記第１コアが前記第１コードを実行する動作の第１シミュレーションによって計算する第１計算処理と、
前記記憶装置へのアクセスを指示する第２アクセス命令を有する第２コードを前記第２コアが実行した場合の前記第２コードの第２性能値を、前記第２コアが前記第２コードを実行する動作の第２シミュレーションによって計算する第２計算処理と、
前記第１シミュレーションにおいて前記第１アクセス命令が実行される場合に、前記第１シミュレーションと前記第２シミュレーションとの同期を行う同期処理と、
前記同期処理による前記同期の後に、前記第１アクセス命令によって前記第１コアが前記キャッシュメモリを介して前記記憶装置にアクセスする場合の前記キャッシュメモリの動作の第３シミュレーションによって、前記第１計算処理によって計算される前記第１性能値の補正を行う補正処理と、
を実行させることを特徴とする計算プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算装置、計算方法、および計算プログラムに関する。
【背景技術】
【０００２】
従来、プログラムの開発を支援するために、プログラムをプロセッサ上で動作させた場合のプログラムの実行時間などの性能値を見積もる技術がある。例えば、実際のホストプロセッサが、評価対象となるプロセッサが実行可能なコードをホストプロセッサが実行可能なコードに変換する。そして、ホストプロセッサが変換後のコードを実行することによって評価対象となるプロセッサがコードを実行した場合の動作のシミュレーションを行う。これにより、ホストプロセッサがコードの性能値を見積もる。例えば、ロード命令やストア命令などの記憶装置へのアクセス命令の場合、評価対象のプロセッサがキャッシュメモリを介して記憶装置にアクセスするため、キャッシュアクセスがキャッシュミスとキャッシュヒットとに応じて性能値が異なる。そこで、従来、キャッシュミスとキャッシュヒットとのいずれかが予測結果とされ、予測結果の場合の性能値がアクセス命令の性能値とされる。そして、ホストプロセッサが、変換後のアクセス命令を実行した際に、モデル化したキャッシュメモリの動作のシミュレーションによって予測結果と異なるか否かによってアクセス命令の性能値を補正する技術がある（例えば、以下特許文献１参照。）。
【０００３】
また、複数の実行ブロックのサイクルを同期させて並列にシミュレーションを行うサイクルシミュレーションが公知である（例えば、以下特許文献２参照。）。また、複数のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）の動作と、複数のＣＰＵによって共有されるハードウェア資源とを模擬する際に、並列に実行されるプログラムの潜在的な不具合を検出する技術が公知である（例えば、以下特許文献３参照。）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１３−８４１７８号公報
【特許文献２】特開２００７−２０７１５８号公報
【特許文献３】特開２０１１−２０３８０３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、評価対象のプロセッサが複数のコアを有し、コア間でキャッシュメモリを共有する場合に、コア間でアクセス命令のアクセス先が同一または近傍であると、アクセス順に応じてキャッシュヒットとミスヒットとが異なる場合がある。このような場合、従来技術では、性能値をコアごとに計算するため、プログラムの性能値の計算精度が低くなるという問題点がある。
【０００６】
１つの側面では、本発明は、プログラムの性能値の計算精度の向上を図ることができる計算装置、計算方法、および計算プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の一側面によれば、同一のキャッシュメモリを介して同一の記憶装置にアクセス可能な第１コアおよび第２コアを有するマルチコアプロセッサについて、前記記憶装置へのアクセスを指示する第１アクセス命令を有する第１コードを前記第１コアが実行した場合の前記第１コードの第１性能値を、前記第１コアが前記第１コードを実行する動作の第１シミュレーションによって計算する第１計算処理と、前記記憶装置へのアクセスを指示する第２アクセス命令を有する第２コードを前記第２コアが実行した場合の前記第２コードの第２性能値を、前記第２コアが前記第２コードを実行する動作の第２シミュレーションによって計算する第２計算処理と、前記第１シミュレーションにおいて前記第１アクセス命令が実行される場合に、前記第１シミュレーションと前記第２シミュレーションとの同期を行う同期処理と、前記同期処理による前記同期の後に、前記第１アクセス命令によって前記第１コアが前記キャッシュメモリを介して前記記憶装置にアクセスする場合の前記キャッシュメモリの動作の第３シミュレーションによって、前記第１計算処理によって計算される前記第１性能値の補正を行う補正処理と、を実行する制御部を有する計算装置、計算方法、および計算プログラムが提案される。
【発明の効果】
【０００８】
本発明の一態様によれば、プログラムの性能値の計算精度の向上を図ることができる。
【図面の簡単な説明】
【０００９】
【図１】第１の実施の形態の計算装置の一動作例を示す説明図である。
【図２】マルチコアプロセッサシステムの一例を示す説明図である。
【図３】計算装置のハードウェア構成例を示すブロック図である。
【図４】実施例１にかかる計算装置の機能的構成例を示すブロック図である。
【図５】ホストコード例を示す説明図である。
【図６】アクセス時刻記録例を示す説明図である。
【図７】実施例１にかかる動作例を示す説明図（その１）である。
【図８】実施例１にかかる動作例を示す説明図（その２）である。
【図９】ｌｄ命令についてのヘルパー関数に含まれる補正処理の関数例を示す説明図である。
【図１０】実施例１にかかる計算装置が行う計算処理手順例を示すフローチャートである。
【図１１】図１０に示す生成処理手順例を示すフローチャートである。
【図１２】実施例１にかかる計算装置によるキャッシュメモリについてのヘルパー関数に従う計算処理手順例を示すフローチャートである。
【図１３】実施例２にかかる前提条件例を示す説明図である。
【図１４】実施例２にかかる計算装置の機能的構成例を示すブロック図である。
【図１５】システム制御レジスタ変更命令のホストコード生成例を示す説明図である。
【図１６】共有状況テーブル例を示す説明図である。
【図１７】実施例２にかかる計算装置によるキャッシュメモリについてのヘルパー関数に従う計算処理手順例を示すフローチャートである。
【図１８】計算装置によるシステム制御レジスタ変更命令についてのヘルパー関数に従う計算処理手順例を示すフローチャートである。
【図１９】異種混合プロセッサシステムの一例を示す説明図である。
【図２０】実施例３にかかる計算装置の機能的構成例を示すブロック図である。
【図２１】実施例３にかかる計算装置によるキャッシュメモリについてのヘルパー関数に従う計算処理手順例を示すフローチャートである。
【図２２】実施例４にかかる計算装置の機能的構成例を示すブロック図である。
【図２３】実施例４にかかる計算装置によるキャッシュメモリについてのヘルパー関数に従う計算処理手順例を示すフローチャートである。
【発明を実施するための形態】
【００１０】
以下に添付図面を参照して、本発明にかかる計算装置、計算方法、および計算プログラムの実施の形態を詳細に説明する。
（第１の実施の形態）
図１は、第１の実施の形態の計算装置の一動作例を示す説明図である。計算装置１００は、同一のキャッシュメモリ１０２を介して同一の記憶装置１０３にアクセス可能な第１コア１１１および第２コア１１２を有するマルチコアプロセッサ１０１について、各コアが実行するコードの性能値を計算するコンピュータである。
【００１１】
マルチコアプロセッサ１０１は、第１コア１１１と第２コア１１２とを有する。第１コア１１１と第２コア１１２とは、第１コア１１１と第２コア１１２とによって共有されるキャッシュメモリ１０２を介して記憶装置１０３にアクセスする。
【００１２】
従来、上述したように、ターゲットのプロセッサがコードを実行した場合のコードの性能値をプロセッサの動作のシミュレーションによって計算する技術がある。ターゲットのプロセッサがマルチコアプロセッサ１０１であり、コア間でキャッシュメモリ１０２を共有していると、アクセス命令のアクセス先が同一または近傍である場合がある。この場合、いずれのコアが先にアクセスしたかによってキャッシュメモリ１０２に対するキャッシュヒットとミスヒットとが異なる。より具体的には、例えば、アクセス命令が第１コア１１１または第２コア１１２において実行されると、キャッシュメモリ１０２がアクセス命令のアクセス先の内容が記憶されているか否かを判断する。記憶されている場合、キャッシュメモリ１０２は、ヒットとして記憶内容を更新または読み出しする。記憶されていない場合、キャッシュメモリ１０２は、ミスヒットとし、記憶装置１０３にアクセスすることとなる。そのため、ヒットの場合とミスヒットの場合とによってアクセス命令の性能値が異なる。これに対して、従来技術では、コアごとにコードの性能値を計算するため、コードの性能値の計算精度が低くなるという問題点がある。
【００１３】
そこで、本実施の形態では、計算装置１００は、コードのコアによる実行のシミュレーションにおいて記憶装置へのアクセス命令の実行時に、各コアのシミュレーションの同期後に行ったキャッシュメモリのシミュレーション結果により該命令の性能値を補正する。これにより、計算精度の向上を図ることができる。
【００１４】
また、本実施の形態では、例えば、ターゲットのマルチコアプロセッサ１０１は、ＡＲＭ（登録商標）であり、計算装置１００が有するホストＣＰＵはＩｎｔｅｌ６４である。また、マルチコアプロセッサ１０１では、１つのＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）を動作させるＳＭＰ（Ｓｙｍｍｅｔｒｉｃ  Ｍｕｌｔｉ  Ｐｒｏｃｅｓｓｏｒ）構成とする。例えば、計算対象の性能値は実行時間であり、シミュレーション精度はクロックサイクルである。
【００１５】
まず、図１（１）に示すように、計算装置１００は、第１コードｃ１を第１コア１１１が実行した場合の第１コードｃ１の第１性能値を、第１コア１１１が第１コードｃ１を実行する動作の第１シミュレーションｓｉｍ１によって計算する第１計算処理を実行する。第１コードｃ１は、記憶装置１０３へのアクセスを指示する第１アクセス命令を有する。第１アクセス命令は、例えば、ｌｄ命令またはｓｔ命令である。例えば、第１コードｃ１は、プログラムを分割した場合のブロックである。ここでのプログラムからの分割についての詳細は、特許文献１に記載された例と同じである。
【００１６】
計算装置１００は、第２コードｃ２を第２コア１１２が実行した場合の第２コードｃ２の第２性能値を、第２コア１１２が第２コードｃ２を実行する動作の第２シミュレーションｓｉｍ２によって計算する第２計算処理を実行する。第２コードｃ２は、記憶装置１０３へのアクセスを指示する第２アクセス命令を有する。第２アクセス命令は、例えば、ｌｄ命令またはｓｔ命令である。例えば、第２コードｃ２は、プログラムを分割した場合のブロックである。
【００１７】
計算装置１００は、第１シミュレーションｓｉｍ１において第１アクセス命令が実行される場合に、第１シミュレーションｓｉｍ１と第２シミュレーションｓｉｍ２との同期を行う同期処理を実行する。
【００１８】
また、図１（２）に示すように、計算装置１００は、同期処理による同期の後に、第１計算処理によって計算される第１性能値の補正を行う補正処理を実行する。補正処理は、第１アクセス命令によって第１コア１１１がキャッシュメモリ１０２を介して記憶装置１０３にアクセスする場合のキャッシュメモリ１０２の動作の第３シミュレーションｓｉｍ３によって補正を行う。
【００１９】
このように、第１シミュレーションｓｉｍ１と第２シミュレーションｓｉｍ２との同期が行われることによって、コア間のアクセス命令の実行順序のシミュレーション精度が向上する。そのため、アクセス命令のキャッシュメモリ１０２のヒットとミスヒットのシミュレーション精度が向上するため、計算精度の向上を図ることができる。
【００２０】
図２は、マルチコアプロセッサシステムの一例を示す説明図である。性能値を計算する対象となるマルチコアプロセッサシステム２００の一例について説明する。マルチコアプロセッサシステム２００は、例えば、ターゲットプロセッサであるマルチコアプロセッサ１０１と、キャッシュメモリ１０２と、デバイス２０１と、記憶装置１０３と、を有する。
【００２１】
マルチコアプロセッサ１０１は、マルチコアプロセッサシステム２００の全体の制御を行う。マルチコアプロセッサ１０１は、第１コア１１１と第２コア１１２とを有する。第１コア１１１と第２コア１１２とは、プロセッサコアである。キャッシュメモリ１０２は、第１コア１１１と第２コア１１２とによって共有される共有資源であり、記憶装置１０３とマルチコアプロセッサ１０１との間に設けられる一時記憶装置である。記憶装置１０３は、例えば、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。
【００２２】
デバイス２０１は、第１コア１１１と第２コア１１２とによって共有される共有資源である。例えば、デバイス２０１は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワークＮＥＴに接続されるＩ／Ｆである。また、例えば、デバイス２０１は、キーボード、マウス、タッチパネルなどの入力装置であり、ディスプレイやプリンタなどの出力装置である。また、例えば、デバイス２０１は、磁気ディスク、光ディスクなどのディスクとディスクドライブなどである。
【００２３】
（計算装置１００のハードウェア構成例）
図３は、計算装置のハードウェア構成例を示すブロック図である。計算装置１００は、ホストＣＰＵ３０１と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）３０２と、ＲＡＭ３０３と、ディスクドライブ３０４と、ディスク３０５と、を有する。計算装置１００は、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）３０６と、入力装置３０７と、出力装置３０８と、を有する。また、各部はバス３００によってそれぞれ接続される。
【００２４】
ここで、ホストＣＰＵ３０１は、計算装置１００の全体の制御を司る。ＲＯＭ３０２は、ブートプログラムなどのプログラムを記憶する。ＲＡＭ３０３は、ホストＣＰＵ３０１のワークエリアとして使用される記憶部である。ディスクドライブ３０４は、ホストＣＰＵ３０１の制御に従ってディスク３０５に対するデータのリード／ライトを制御する。ディスク３０５は、ディスクドライブ３０４の制御で書き込まれたデータを記憶する。ディスク３０５としては、磁気ディスク、光ディスクなどが挙げられる。
【００２５】
Ｉ／Ｆ３０６は、通信回線を通じてＬＡＮ、ＷＡＮ、インターネットなどのネットワークＮＥＴに接続され、このネットワークＮＥＴを介して他の装置に接続される。そして、Ｉ／Ｆ３０６は、ネットワークＮＥＴと内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ３０６には、例えばモデムやＬＡＮアダプタなどを採用することができる。
【００２６】
入力装置３０７は、キーボード、マウス、タッチパネルなどユーザの操作により、各種データの入力を行うインターフェースである。また、入力装置３０７は、カメラから画像や動画を取り込むこともできる。また、入力装置３０７は、マイクから音声を取り込むこともできる。出力装置３０８は、ホストＣＰＵ３０１の指示により、データを出力するインターフェースである。出力装置３０８には、ディスプレイやプリンタが挙げられる。
【００２７】
本実施の形態では、実施例１と実施例２とに分けて説明する。実施例１では、記憶装置１０３へのアクセス命令を含むコードのコアによる実行のシミュレーションにより該コードの性能値の計算時に、各コアのシミュレーションの同期後に行った共有キャッシュのシミュレーション結果により該命令の性能値を補正する。実施例２では、各コアが異なる物理アドレス空間にアクセスする場合には、各コアのシミュレーションの同期を行わずに共有キャッシュのシミュレーションを行ったシミュレーション結果により命令の性能値を補正する。
【００２８】
（実施例１）
実施例１では、記憶装置１０３へのアクセス命令を含むコードのコアによる実行のシミュレーションにより該コードの性能値の計算時に、各コアの模擬の同期後に行った共有キャッシュのシミュレーション結果により該命令の性能値を補正する。これにより、計算精度が向上する。
【００２９】
（実施例１にかかる計算装置１００の機能的構成例）
図４は、実施例１にかかる計算装置の機能的構成例を示すブロック図である。計算装置１００は、コード変換部４０１と、シミュレーション実行部４０２と、シミュレーション情報収集部４０３と、を有する。
【００３０】
コード変換部４０１からシミュレーション情報収集部４０３の処理は、例えば、ホストＣＰＵ３０１がアクセス可能なディスク３０５などの記憶装置に記憶された計算プログラムにコーディングされる。そして、ホストＣＰＵ３０１が記憶装置に記憶された計算プログラムを読み出して、計算プログラムにコーディングされている処理を実行する。これにより、コード変換部４０１からシミュレーション情報収集部４０３の処理が実現される。また、各部の処理結果は、例えば、ＲＡＭ３０３、ディスク３０５などの記憶装置に記憶される。また、タイミング情報４３０と、ターゲットのプログラムｐｒｇと、予測情報４３１と、は予め取得され、ＲＡＭ３０３やディスク３０５などの記憶装置に記憶される。
【００３１】
本実施の形態では、図２に示したように、ターゲットのマルチコアプロセッサ１０１が有するコアが２つの場合を例に挙げるが、コアが２より多い数である場合、コアごとに各部を有する。「−１」については第１コア１１１に対応する処理部であり、「−２」については第２コア１１２に対応する処理部であり、同じ機能である場合には、「−１」と「−２」とを省略して説明する。
【００３２】
また、タイミング情報４３０と、予測情報４３１と、の例については、特許文献１に記載されたタイミング情報と予測情報と同じであるため、詳細な例を省略する。
コード変換部４０１の処理については、特許文献１に記載されたコード変換部と同じであるため、ここでのコード変換部４０１の説明は簡単にする。コード変換部４０１は、対象ブロックの各命令の性能値によって対象ブロックがマルチコアプロセッサ１０１によって実行された場合の性能値を算出可能な計算用コードを生成する。コード実行部４２１は、計算用コードを実行することによって、対象ブロックがマルチコアプロセッサ１０１によって実行された場合の性能値を算出する。
【００３３】
具体的には、コード変換部４０１は、ブロック分割部４１１と、予測シミュレーション実行部４１２と、コード生成部４１３と、を有する。
ブロック分割部４１１は、計算装置１００に入力されたターゲットのプログラムｐｒｇを所定基準によってブロックに分割する。分割タイミングは、例えば、対象ブロックが変化した場合にあらたな対象ブロックを分割してもよいし、事前にターゲットのプログラムｐｒｇを複数のブロックに分割してもよい。分割されるブロック単位は、例えば、ベーシックブロック単位でよく、または、予め定められた任意のコード単位でよい。ベーシックブロック単位とは、分岐命令からつぎの分岐命令前までの命令群である。
【００３４】
予測シミュレーション実行部４１２は、予測情報４３１に基づいて、対象ブロックに含まれる外部依存命令についての各予測ケースを設定する。そして、予測シミュレーション実行部４１２は、タイミング情報４３０を参照して、予測ケースを前提とするブロック内の各命令の実行の進み具合をシミュレーションする。これにより、予測シミュレーション実行部４１２は、設定した予測ケースを前提とする場合のブロック内の各命令の性能値を求める。
【００３５】
コード生成部４１３は、予測シミュレーション結果に基づいて、ホストコードを生成する。ホストコードは、コアが対象ブロックを実行する動作のシミュレーションを行う機能用コードと、コアが対象ブロックを実行した場合の対象ブロックの性能値を計算する計算用コードと、を有する。
【００３６】
図５は、ホストコード例を示す説明図である。例えば、ホストコードｈｃは、対象ブロックｂに含まれる各命令をコンパイルすることによって得られるホストＣＰＵ３０１が実行可能なホスト命令が含まれる機能用コードを有する。また、ホストコードｈｃは、対象ブロックｂに含まれる各命令の性能値を計算可能な計算命令が含まれる計算用コードｃｃを有する。例えば、ｌｄ命令やｓｔ命令などの記憶装置１０３へのアクセスを指示するアクセス命令については、ヘルパー関数呼び出し命令によって性能値が計算される。本実施の形態では、ヘルパー関数は、各補正部４２３である。ヘルパー関数が呼び出されてヘルパー関数が実行されることは、補正部４２３が補正を行うことに相当する。
【００３７】
シミュレーション実行部４０２は、コード生成部４１３が生成したホストコードｈｃを実行して、プログラムｐｒｇを実行するコアの命令実行の機能および性能シミュレーションを行う処理部である。シミュレーション実行部４０２は、コード実行部４２１と、同期部４２２と、補正部４２３と、を有する。
【００３８】
コード実行部４２１−１は、第１コードｃ１を第１コア１１１が実行した場合の第１コードｃ１の第１性能値を、第１コア１１１が第１コードｃ１を実行する動作の第１シミュレーションｓｉｍ１によって計算する第１計算処理を行う。第１コードｃ１は、記憶装置１０３へのアクセスを指示する第１アクセス命令を有する。例えば、コード実行部４２１−１は、第１ホストコードｈｃを用いて、マルチコアプロセッサ１０１がプログラムｐｒｇを実行した場合の機能シミュレーションおよび性能シミュレーションを行う処理部である。機能シミュレーションは、ホストコードｈｃに含まれる機能コードｆｃを実行することによって行われる。性能シミュレーションは、ホストコードｈｃに含まれる計算用コードｃｃを実行することによって行われる。特許文献１に示すように、機能シミュレーションによってつぎに対象となる対象ブロックｂが特定可能となる。
【００３９】
コード実行部４２１−２は、第２コードｃ２を第２コア１１２が実行した場合の第２コードｃ２の第２性能値を、第２コア１１２が第２コードｃ２を実行する動作の第２シミュレーションｓｉｍ２によって計算する第２計算処理を行う。第２コードｃ２は、記憶装置１０３へのアクセスを指示する第２アクセス命令を有する。例えば、コード実行部４２１−２は、第２ホストコードｈｃを用いて、マルチコアプロセッサ１０１がプログラムｐｒｇを実行した場合の機能シミュレーションおよび性能シミュレーションを行う処理部である。機能シミュレーションは、機能コードｆｃを実行することによって行われる。性能シミュレーションは、計算用コードｃｃを実行することによって行われる。
【００４０】
同期部４２２−１は、第１シミュレーションｓｉｍ１において第１アクセス命令が実行される場合に、第１シミュレーションｓｉｍ１と第２シミュレーションｓｉｍ２との同期を行う。
【００４１】
補正部４２３−１は、同期部４２２−１による同期の後に、第１計算処理によって計算される第１性能値を補正する第１補正処理を行う。第１補正処理は、第１アクセス命令によって第１コア１１１がキャッシュメモリ１０２を介して記憶装置１０３にアクセスする場合のキャッシュメモリ１０２の動作の第３シミュレーションｓｉｍ３によって補正を行う。第３シミュレーションｓｉｍ３については、モデル化したキャッシュメモリ１０２にアドレスを与えることによって行われる。
【００４２】
また、同期部４２２−１は、第１シミュレーションｓｉｍ１における時刻が第２シミュレーションｓｉｍ２における時刻よりも遅れている場合に、第２シミュレーションｓｉｍ２と第１シミュレーションｓｉｍ１との同期を行わない。補正部４２３−１は、第３シミュレーションｓｉｍ３によって、第１計算処理によって計算される第１性能値を補正する。
【００４３】
また、同期部４２２−２は、第２シミュレーションｓｉｍ２において第２アクセス命令が実行される場合に、第１シミュレーションｓｉｍ１と第２シミュレーションｓｉｍ２との同期を行う。
【００４４】
補正部４２３−２は、同期部４２２−２による同期の後に、第２計算処理によって計算される第２性能値を補正する第２補正処理を行う。第２補正処理は、第２アクセス命令によって第２コア１１２がキャッシュメモリ１０２を介して記憶装置１０３にアクセスする場合のキャッシュメモリ１０２の動作の第３シミュレーションｓｉｍ３によって、補正を行う。
【００４５】
また、シミュレーション実行部４０２−２は、第２シミュレーションｓｉｍ２における時刻が第１シミュレーションｓｉｍ１における時刻よりも遅れている場合に、同期部４２２−２による第２同期処理を行わずに、補正部４２３−２による第２補正処理を行う。
【００４６】
例えば、補正部４２３−１は、第１シミュレーションｓｉｍ１における第１アクセス命令を実行する場合に、第１シミュレーションｓｉｍ１におけるアクセス時刻を記録する。また、例えば、補正部４２３−２は、第２シミュレーションｓｉｍ２における第２アクセス命令を実行する場合に、第２シミュレーションｓｉｍ２におけるアクセス時刻を記録する。
【００４７】
図６は、アクセス時刻記録例を示す説明図である。アクセス時刻テーブル６００は、アクセス命令が発生したシミュレーションの時刻であるアクセス時刻と、アクセス命令におけるアクセス先のアドレスと、を設定可能である。
【００４８】
アクセス時刻テーブル６００は、例えば、第１コア時刻、第１コアアドレス、第２コア時刻、第２コアアドレスのフィールドを有する。第１コア時刻のフィールドには、第１シミュレーションｓｉｍ１におけるアクセス命令を実行する場合の第１シミュレーションｓｉｍ１における時刻が設定される。第１コアアドレスのフィールドには、第１シミュレーションｓｉｍ１におけるアクセス命令のアクセス先が設定される。第２コア時刻のフィールドには、第２シミュレーションｓｉｍ２におけるアクセス命令を実行する場合の第２シミュレーションｓｉｍ２における時刻が設定される。第２コアアドレスのフィールドには、第２シミュレーションｓｉｍ２におけるアクセス命令のアクセス先が設定される。
【００４９】
図７および図８は、実施例１にかかる動作例を示す説明図である。ここでのアクセス時刻テーブル６００についてはアドレスのフィールドを省略して示す。図７（１）に示すように、第１シミュレーションｓｉｍ１において対象ブロックｂがブロックＢ１１であり、第１シミュレーションｓｉｍ１において対象ブロックｂのシミュレーションが終了した時のシミュレーション時刻が７である。シミュレーション時刻は、例えば、サイクル数によって表される。
【００５０】
図７（２）に示すように、第２シミュレーションｓｉｍ２において対象ブロックｂがブロックＢ２１であり、第２シミュレーションｓｉｍ２において対象ブロックｂのシミュレーションが終了した時の第２シミュレーションｓｉｍ２における時刻が２である。
【００５１】
図７（３）に示すように、第１シミュレーションｓｉｍ１において対象ブロックｂがブロックＢ１２であり、第１シミュレーションｓｉｍ１における時刻が１２にてアクセス命令が実行される。図７（３）に示すように、補正部４２３−１は、例えば、アクセス命令を実行するシミュレーション時刻をアクセス時刻テーブル６００に記録する。そして、図７（３）に示すように、同期部４２２−１は、第１シミュレーションｓｉｍ１における時刻が第２シミュレーションｓｉｍ２における時刻よりも遅れているかを判断する。図７（３）に示すように、同期部４２２−１は、第１シミュレーションｓｉｍ１における時刻が第２シミュレーションｓｉｍ２におけるシミュレーション時刻よりも遅れていないため、第１シミュレーションｓｉｍ１と第２シミュレーションｓｉｍ２とを同期させる。このため、同期部４２２−１は、第１シミュレーションｓｉｍ１を待機させる。
【００５２】
図８（１）に示すように、第２シミュレーションｓｉｍ２において対象ブロックｂがブロックＢ２３であり、第２シミュレーションｓｉｍ２における時刻が１０にてアクセス命令が実行される。図８（１）に示すように、補正部４２３−２は、例えば、第２シミュレーションｓｉｍ２においてアクセス命令を実行する時刻をアクセス時刻テーブル６００に記録する。そして、図８（１）に示すように、同期部４２２−２は、第２シミュレーションｓｉｍ２における時刻が第１シミュレーションｓｉｍ１における時刻よりも遅れているかを判断する。図８（１）に示すように、同期部４２２−２は、第２シミュレーションｓｉｍ２における時刻が第１シミュレーションｓｉｍ１におけるシミュレーション時刻よりも遅れているため、第１シミュレーションｓｉｍ１と第２シミュレーションｓｉｍ２との同期を行わない。
【００５３】
そのため、補正部４２３−２は、アクセス時刻テーブル６００から、第２シミュレーションｓｉｍ２における時刻よりも早いシミュレーションの時刻の中で最も近いシミュレーションの時刻を取得する。ここでは、第２シミュレーションｓｉｍ２における時刻よりも早いシミュレーションの時刻が記録されていないため、０が取得される。そして、例えば、補正部４２３−２は、第２シミュレーションｓｉｍ２における時刻と取得した時刻とに基づいて、第２シミュレーションｓｉｍ２におけるアクセス命令についての性能値を補正する処理を行う。より具体的に、例えば、補正部４２３−２は、第２シミュレーションｓｉｍ２におけるアクセス命令のアクセス先のアドレスと、第２シミュレーションｓｉｍ２における時刻と、取得した時刻と、補正処理の関数と、によってアクセス命令の性能値を補正する。補正処理の具体例については、図９に示す。
【００５４】
つぎに、図８（２）に示すように、補正部４２３−１は、第１シミュレーションｓｉｍ１と第２シミュレーションｓｉｍ２とが同期された後に、アクセス時刻テーブル６００から、最も近いシミュレーションの時刻を取得する。最も近いシミュレーションの時刻は、第２シミュレーションｓｉｍ２における時刻よりも早いシミュレーションの時刻の中で最も近いシミュレーションの時刻である。そして、例えば、補正部４２３−１は、第１シミュレーションｓｉｍ１における時刻と取得した時刻とに基づいて、第１シミュレーションｓｉｍ１におけるアクセス命令についての性能値を補正する処理を行う。より具体的に、例えば、補正部４２３−１は、第１シミュレーションｓｉｍ１におけるアクセス命令のアクセス先のアドレスと、第１シミュレーションｓｉｍ１における時刻と、取得した時刻と、補正処理の関数と、によってアクセス命令の性能値を補正する。
【００５５】
図９は、ｌｄ命令についてのヘルパー関数に含まれる補正処理の関数例を示す説明図である。ヘルパー関数の“ｒｅｐ＿ｄｅｌａｙ”は、ｌｄ命令の返り値を使用するつぎの命令の実行までに、ペナルティ時間のうち遅延時間として処理されなかった時間（猶予時間）である。“ｐｒｅ＿ｄｅｌａｙ”は、１つ前の命令から受ける遅延時間である。“−１”は、前の命令に遅延がないことを示す。“ｒｅｐ＿ｄｅｌａｙ”と“ｐｒｅ＿ｄｅｌａｙ”は、予測シミュレーション実行部４１２によって得られる性能シミュレーション結果とタイミング情報４３０との静的分析処理の結果から得られる時間情報である。
【００５６】
図９に示す例では、補正部４２３は、現タイミングｃｕｒｒｅｎｔ＿ｔｉｍｅと１つ前のｌｄ命令の実行タイミングｐｒｅｌｄ＿ｔｉｍｅとの差が、１つ前のｌｄ命令の遅延時間ｐｒｅ＿ｄｅｌａｙを超えているときは、１つ前のｌｄ命令の実行タイミングｐｒｅｌｄ＿ｔｉｍｅと現タイミングｃｕｒｒｅｎｔ＿ｔｉｍｅまでの時間で遅延時間ｐｒｅ＿ｄｅｌａｙを調整して有効遅延時間ａｖａｉｌ＿ｄｅｌａｙを求める。
【００５７】
つぎに、補正部４２３は、キャッシュメモリ１０２の動作結果が“キャッシュミス”であれば、予測ケースの誤りであり、有効遅延時間ａｖａｉｌ＿ｄｅｌａｙにキャッシュミス時のペナルティ時間ｃａｃｈｅ＿ｍｉｓｓ＿ｌａｔｅｎｃｙを加算して、猶予時間ｒｅｐ＿ｄｅｌａｙをもとに、ｌｄ命令の性能値を補正する。ここでの補正の具体的な処理については、特許文献１と同じであるため、詳細な説明を省略する。
【００５８】
シミュレーション情報収集部４０３は、性能シミュレーションの実行結果として、各命令の実行時間を含むシミュレーション情報を収集する処理部である。
（実施例１にかかる計算装置１００が行う計算処理手順例）
図１０は、実施例１にかかる計算装置が行う計算処理手順例を示すフローチャートである。計算装置１００は、マルチコアプロセッサ１０１に含まれるコアの各々について計算処理手順を行う。例えば、計算装置１００は、ターゲットのプログラムｐｒｇの性能値の計算を終了したか否かを判断する（ステップＳ１００１）。例えば、終了していないと判断された場合（ステップＳ１００１：Ｎｏ）、計算装置１００は、ホストコードｈｃの生成処理を行う（ステップＳ１００２）。
【００５９】
例えば、計算装置１００は、ホストコードｈｃを実行する（ステップＳ１００３）。そして、例えば、計算装置１００は、計算結果を収集し（ステップＳ１００４）、ステップＳ１００１へ戻る。終了したと判断された場合（ステップＳ１００１：Ｙｅｓ）、計算装置１００は、一連の処理を終了する。
【００６０】
図１１は、図１０に示す生成処理手順例を示すフローチャートである。例えば、計算装置１００は、対象ブロックｂがコンパイル済みか否かを判断する（ステップＳ１１０１）。対象ブロックｂがコンパイル済みでないと判断された場合（ステップＳ１１０１：Ｎｏ）、計算装置１００は、ターゲットのプログラムｐｒｇから対象ブロックｂを分割して取得する（ステップＳ１１０２）。計算装置１００は、外部依存命令を検出する（ステップＳ１１０３）。
【００６１】
つぎに、計算装置１００は、検出した外部依存命令についての予測ケースを設定する（ステップＳ１１０４）。そして、計算装置１００は、タイミング情報４３０に基づいて、設定した予測ケースにおける各命令の性能値の予測シミュレーションを行う（ステップＳ１１０５）。つぎに、計算装置１００は、機能コードｆｃと、予測シミュレーション結果に基づく計算用コードｃｃと、を有するホストコードｈｃを生成し（ステップＳ１１０６）、一連の処理を終了する。対象ブロックｂがコンパイル済みであると判断された場合（ステップＳ１１０１：Ｙｅｓ）、計算装置１００は、一連の処理を終了する。
【００６２】
図１２は、実施例１にかかる計算装置によるキャッシュメモリについてのヘルパー関数に従う計算処理手順例を示すフローチャートである。まず、計算装置１００は、キャッシュアクセスが要求されているか否かを判断する（ステップＳ１２０１）。キャッシュアクセスが要求されていないと判断された場合（ステップＳ１２０１：Ｎｏ）、計算装置１００は、ステップＳ１２１０へ移行する。
【００６３】
キャッシュアクセスが要求されていると判断された場合（ステップＳ１２０１：Ｙｅｓ）、計算装置１００は、アクセス時刻とアクセス先アドレスとを記録する（ステップＳ１２０２）。計算装置１００は、自コアのシミュレーションの時刻が他のコアのシミュレーションの時刻よりも遅れているか否かを判断する（ステップＳ１２０３）。遅れていると判断された場合（ステップＳ１２０３：Ｙｅｓ）、計算装置１００は、ステップＳ１２０５へ移行する。一方、遅れていないと判断された場合（ステップＳ１２０３：Ｎｏ）、計算装置１００は、同期を行う（ステップＳ１２０４）。計算装置１００は、前回のアクセス命令のアクセス時刻を取得する（ステップＳ１２０５）。
【００６４】
そして、計算装置１００は、アクセス時刻を考慮したキャッシュアクセスのシミュレーションを行う（ステップＳ１２０６）。つぎに、計算装置１００は、キャッシュアクセスの結果はヒットかミスヒットかを判断する（ステップＳ１２０７）。
【００６５】
ミスヒットであると判断された場合（ステップＳ１２０７：ミス）、計算装置１００は、サイクル数の補正を行う（ステップＳ１２０８）。そして、計算装置１００は、補正されたサイクル数を出力し（ステップＳ１２０９）、一連の処理を終了する。
【００６６】
ヒットであると判断された場合（ステップＳ１２０７：ヒット）、計算装置１００は、予測されたサイクル数を出力し（ステップＳ１２１０）、一連の処理を終了する。
（実施例２）
例えば、異なるコアが異なる物理アドレス領域にアクセスしている場合、いずれのコアからのアクセスが先であるかに性能値が依存しない。例えば、異なる物理アドレス領域にアクセスする場合とは、第１コア１１１と第２コア１１２とがそれぞれ異なるアプリケーションプログラムを実行している場合などである。そこで、実施例２では、第１コア１１１と第２コア１１２とで異なる物理アドレス空間にアクセスする場合には、２つのシミュレーションの同期を行わない。これにより、性能値の計算精度を維持しつつ、計算速度の向上を図る。実施例２では、実施例１と同一構成には同一符号を付し、詳細な説明を省略する。
【００６７】
図１３は、実施例２にかかる前提条件例を示す説明図である。実施例２では、例えば、第１コア１１１と第２コア１１２とは、１つのＯＳ２０２を動作させる。また、例えば、第１コア１１１と第２コア１１２とは、ＯＳ２０２の上でそれぞれ異なるプログラムを動作させることを前提とする。例えば、アクセス先となる物理アドレスはプログラムごとに異なる場合、プログラムごとにアドレス空間識別子が割り振られる。例えば、アドレス空間識別子は、ＡＳＩＤ（Ａｄｄｒｅｓｓ  Ｓｐａｃｅ  ＩＤｅｎｔｉｆｉｃａｔｉｏｎ）と称する。図１３の例では、第１プログラムｐｒｇ１のＡＳＩＤは１であり、第２プログラムｐｒｇ２のＡＳＩＤは２であり、ＯＳ２０２のＡＳＩＤは０である。
【００６８】
（実施例２にかかる計算装置１００の機能的構成例）
図１４は、実施例２にかかる計算装置の機能的構成例を示すブロック図である。計算装置１００は、コード変換部４０１と、シミュレーション実行部４０２と、シミュレーション情報収集部４０３と、を有する。
【００６９】
コード変換部４０１は、実施例１と同様に、ブロック分割部４１１と、予測シミュレーション実行部４１２と、コード生成部４１３と、がある。ブロック分割部４１１と、予測シミュレーション実行部４１２と、シミュレーション情報収集部４０３とについては実施例１と同様であるため、詳細な説明を省略する。また、コード変換部４０１からシミュレーション情報収集部４０３の処理は、例えば、ホストＣＰＵ３０１がアクセス可能なディスク３０５などの記憶装置に記憶された計算プログラムにコーディングされる。そして、ホストＣＰＵ３０１が記憶装置に記憶された計算プログラムを読み出して、計算プログラムにコーディングされている処理を実行する。これにより、コード変換部４０１からシミュレーション情報収集部４０３の処理が実現される。また、各部の処理結果は、例えば、ＲＡＭ３０３、ディスク３０５などの記憶装置に記憶される。また、タイミング情報４３０と、ターゲットのプログラムｐｒｇと、予測情報４３１と、は予め取得され、ＲＡＭ３０３やディスク３０５などの記憶装置に記憶される。
【００７０】
また、例えば、ターゲットのマルチコアプロセッサシステム２００がＡＲＭのプロセッサを有する場合、ＯＳ２０２のカーネルでは、スケジューラによりコンテキストスイッチなどが行われる際に、システム制御レジスタ変更命令が発生する。システム制御レジスタ変更命令は、例えば、システム制御レジスタの設定値を変更する命令であり、物理アドレス空間を変更可能な命令である。ＡＲＭのプロセッサであれば、システム制御レジスタ変更命令はｍｃｒ命令である。ｍｃｒ命令の一例は以下の通りである。
【００７１】
ｍｃｒ  ｐ１５，０，ｒ０，ｃ１３，ｃ０，１
上記のｍｃｒ命令は、ｒ０の値をｃ１３レジスタに書き込む命令である。ＡＲＭのプロセッサのシステム制御レジスタにおいてｃ１３レジスタは、プログラムごとのＡＳＩＤが格納されるレジスタである。
【００７２】
図１５は、システム制御レジスタ変更命令のホストコード生成例を示す説明図である。例えば、図１５に示す対象ブロックｂは、システム制御レジスタ変更命令を有する。コード生成部４１３は、対象ブロックｂにシステム制御レジスタ変更命令が含まれる場合、システム制御レジスタ変更命令のホスト命令と、システム制御レジスタ変更命令のヘルパー関数呼び出し命令と、を有するホストコードｈｃを生成する。システム制御レジスタ変更命令のホスト命令は機能コードｆｃである。システム制御レジスタ変更命令のヘルパー関数呼び出し命令は、計算用コードｃｃである。システム制御レジスタ変更命令のヘルパー関数による処理については更新部１４０２によって実現される。
【００７３】
シミュレーション実行部４０２は、コード生成部４１３が生成したホストコードｈｃを実行して、プログラムを実行するコアの命令実行の機能および性能シミュレーションを行う処理部である。シミュレーション実行部４０２は、コード実行部４２１と、同期部４２２と、補正部４２３と、共有判断部１４０１と、更新部１４０２と、を有する。
【００７４】
更新部１４０２−１は、第１シミュレーションｓｉｍ１においてシステム制御レジスタ変更命令が実行される場合に、第１シミュレーションｓｉｍ１においてシステム制御レジスタの値を変更する。システム制御レジスタについては、第１シミュレーションｓｉｍ１と第２シミュレーションｓｉｍ２とにおいて共通でモデルが利用されることとする。そして、更新部１４０２は、システム制御レジスタのうち、システム制御レジスタ変更命令による変更対象のレジスタが、ＡＳＩＤが格納されているレジスタであるか否かを判断する。
【００７５】
ＡＳＩＤが格納されているレジスタである場合、更新部１４０２は、自コアについてのＡＳＩＤと他コアについてのＡＳＩＤとを比較する。更新部１４０２は、比較結果に基づいて共有状況テーブルに登録する。
【００７６】
図１６は、共有状況テーブル例を示す説明図である。例えば、共有状況テーブル１６００は、各コアについてのシミュレーションにおいてアドレス空間を共有しているか否かを示す表である。共有状況テーブル１６００は、コアと、共有と、のフィールドを有する。コアのフィールドには、コアを識別する識別子が設定される。共有状況テーブル１６００の例では、コアの数が４つの場合を例に挙げてある。共有のフィールドには、自コアとアドレス空間を共有するコアの識別子、または「なし」が設定される。「なし」は、物理アドレス空間を共有するコアがないことを示す。
【００７７】
例えば、更新部１４０２−１は、自コアについてのＡＳＩＤと一致するコアがない場合に、共有状況テーブル１６００の自コアについてのレコードに「なし」を登録する。例えば、更新部１４０２は、自コアについてのＡＳＩＤと一致するコアがある場合、共有状況テーブル１６００の自コアについてのレコードに、一致するコアの識別子を登録する。
【００７８】
共有判断部１４０１−１は、第１シミュレーションｓｉｍ１において第１アクセス命令が実行される場合に、記憶装置１０３のうちのシミュレーションにおいてコア間で利用する記憶領域が一致しているか否かの判断を行う。例えば、共有判断部１４０１は、記憶装置１０３のうちの第１シミュレーションｓｉｍ１において第１コア１１１が利用する記憶領域と、記憶装置１０３のうちの第２シミュレーションｓｉｍ２において第２コア１１２が利用する記憶領域と、の一致を判断する。例えば、共有判断部１４０１は、システム制御レジスタをモデル化したシミュレーションにおけるシステム制御レジスタの設定内容に基づき判断を行う。より具体的には、例えば、共有判断部１４０１は、共有状況テーブル１６００から自コアについてのレコードを参照することによって物理アドレス空間を共有するコアがあるか否かの判断を行うことで、該一致を判断する。
【００７９】
シミュレーション実行部４０２−１は、共有判断部１４０１−１によって一致しないと判断された場合に、同期部４２２−１による第１同期処理を行わずに、補正部４２３−１による第１補正処理を行う。シミュレーション実行部４０２−１は、共有判断部１４０１−１によって一致すると判断された場合に、同期部４２２−１による第１同期処理を行った後に、補正部４２３−１による第１補正処理を行う。
【００８０】
また、シミュレーション実行部４０２−２の各部の処理については、シミュレーション実行部４０２−１の各部の処理と同様の処理であるため、詳細な説明を省略する。
（実施例２にかかる計算装置１００による計算処理手順）
実施例２にかかる計算装置による計算処理手順については、図１０と図１１とに示す実施例１にかかる計算装置１００による計算処理手順についてと同じである。そのため、ここでは、実施例２にかかるキャッシュメモリ１０２についてのヘルパー関数が行う処理手順例と、実施例２にかかるシステム制御レジスタ変更命令のヘルパー関数が行う処理手順例と、について説明する。
【００８１】
図１７は、実施例２にかかる計算装置によるキャッシュメモリについてのヘルパー関数に従う計算処理手順例を示すフローチャートである。まず、計算装置１００は、キャッシュアクセスが要求されているか否かを判断する（ステップＳ１７０１）。キャッシュアクセスが要求されていないと判断された場合（ステップＳ１７０１：Ｎｏ）、計算装置１００は、ステップＳ１７１１へ移行する。
【００８２】
キャッシュアクセスが要求されていると判断された場合（ステップＳ１７０１：Ｙｅｓ）、計算装置１００は、アクセス時刻とアクセス先アドレスとを記録する（ステップＳ１７０２）。計算装置１００は、共有状況テーブル１６００に基づいて、物理アドレス空間を共有するコアがあるか否かを判断する（ステップＳ１７０３）。物理アドレス空間を共有するコアがないと判断された場合（ステップＳ１７０３：Ｎｏ）、計算装置１００は、ステップＳ１７０６へ移行する。物理アドレス空間を共有するコアがあると判断された場合（ステップＳ１７０３：Ｙｅｓ）、計算装置１００は、自コアのシミュレーションの時刻が他のコアのシミュレーションの時刻よりも遅れているか否かを判断する（ステップＳ１７０４）。遅れていると判断された場合（ステップＳ１７０４：Ｙｅｓ）、計算装置１００は、ステップＳ１７０６へ移行する。一方、遅れていないと判断された場合（ステップＳ１７０４：Ｎｏ）、計算装置１００は、同期を行う（ステップＳ１７０５）。計算装置１００は、前回のアクセス命令のアクセス時刻を取得する（ステップＳ１７０６）。
【００８３】
そして、計算装置１００は、アクセス時刻を考慮したキャッシュアクセスのシミュレーションを行う（ステップＳ１７０７）。つぎに、計算装置１００は、キャッシュアクセスの結果はヒットかミスヒットかを判断する（ステップＳ１７０８）。
【００８４】
ミスヒットであると判断された場合（ステップＳ１７０８：ミス）、計算装置１００は、サイクル数の補正を行う（ステップＳ１７０９）。そして、計算装置１００は、補正されたサイクル数を出力し（ステップＳ１７１０）、一連の処理を終了する。ヒットであると判断された場合（ステップＳ１７０８：ヒット）、計算装置１００は、予測されたサイクル数を出力し（ステップＳ１７１１）、一連の処理を終了する。
【００８５】
図１８は、計算装置によるシステム制御レジスタ変更命令についてのヘルパー関数に従う計算処理手順例を示すフローチャートである。計算装置１００は、モデル化されたシステム制御レジスタの値を変更する（ステップＳ１８０１）。計算装置１００は、変更先のレジスタが、アドレス空間を示す情報が格納されているレジスタであるか否かを判断する（ステップＳ１８０２）。
【００８６】
変更先のレジスタがアドレス空間を示す情報が格納されているレジスタでないと判断された場合（ステップＳ１８０２：Ｎｏ）、計算装置１００は、一連の処理を終了する。変更先のレジスタがアドレス空間を示す情報が格納されているレジスタであると判断された場合（ステップＳ１８０２：Ｙｅｓ）、計算装置１００は、自コアについてのＡＳＩＤと他コアについてのＡＳＩＤとを比較する（ステップＳ１８０３）。計算装置１００は、ＡＳＩＤが一致するコアがあるか否かを判断する（ステップＳ１８０４）。
【００８７】
ＡＳＩＤが一致するコアがあると判断された場合（ステップＳ１８０４：Ｙｅｓ）、計算装置１００は、一致するコアの識別子を記録し（ステップＳ１８０５）、一連の処理を終了する。ＡＳＩＤが一致するコアがないと判断された場合（ステップＳ１８０４：Ｎｏ）、計算装置１００は、「なし」を記録し（ステップＳ１８０６）、一連の処理を終了する。
【００８８】
以上説明したように、計算装置１００は、記憶装置へのアクセス命令を含むコードのコアによる実行のシミュレーションによりコードの性能値の計算時に、各コアのシミュレーションの同期後に行った共有キャッシュのシミュレーションを行う。計算装置１００は、共有キャッシュのシミュレーション結果により該命令の性能値を補正する。このように、第１シミュレーションｓｉｍ１と第２シミュレーションｓｉｍ２との同期が行われることによって、コア間のアクセス命令の実行順序のシミュレーション精度が向上する。そのため、アクセス命令のキャッシュメモリ１０２のヒットとミスヒットのシミュレーション精度が向上するため、計算精度の向上を図ることができる。
【００８９】
また、計算装置１００は、第１シミュレーションにおける時刻が第２シミュレーションにおける時刻よりも遅れている場合に、同期を行わずに共有キャッシュのシミュレーションを行ったシミュレーション結果によりアクセス命令の性能値を補正する。このように、第１シミュレーションｓｉｍ１が第２シミュレーションｓｉｍ２よりも遅れている場合、第１シミュレーションｓｉｍ１におけるアクセス命令よりも前の第２シミュレーションｓｉｍ２におけるアクセス命令は実行済みである。そのため、コア間のアクセス命令の実行順序が保たれていると判別できるため、同期処理を行わないことによってシミュレーションに要する時間の短縮化を図ることができる。
【００９０】
また、計算装置１００は、各コアが異なる物理アドレス空間にアクセスする場合には、各コアのシミュレーションの同期処理を実行せずに共有キャッシュのシミュレーションを行ったシミュレーション結果によりアクセス命令の性能値を補正する。このように、物理アドレス空間が異なる場合、アクセス先が重ならないと判別されるため、同期処理を行わないことによってシミュレーションに要する時間の短縮化を図ることができる。
【００９１】
（第２の実施の形態）
以下第２の実施の形態の計算装置および計算方法を説明する。第２の実施の形態の計算装置および計算方法は、異種混合プロセッサ（ヘテロジニアスプロセッサ）システムにおける性能値を計算するものである。異種混合プロセッサシステムでは、ＣＰＵとアクセラレータとで同じ物理アドレス空間・データが共有される。
【００９２】
なお、アクセラレータとは、ＣＰＵの処理を代替して処理の効率を向上させる装置のことである。アクセラレータとして、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）、ＦＰＧＡ（Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）などがある。
【００９３】
以下では、アクセラレータとしてＧＰＵを用いた場合について説明するが、これに限定されるものではない。
図１９は、異種混合プロセッサシステムの一例を示す説明図である。図２に示したマルチコアプロセッサシステムと同じ要素については同一符号を付し、その説明を省略する。
【００９４】
異種混合プロセッサシステム２００ａは、ＧＰＵ１０４を有している。図１９の例では、ＧＰＵ１０４は、キャッシュメモリ１０２と記憶装置１０３を、マルチコアプロセッサ１０１と共有している。以下では、マルチコアプロセッサ１０１は、ＣＰＵであるものとして説明する。
【００９５】
第２の実施の形態の計算方法は、図３に示したようなハードウェア構成の計算装置１００で実現できる。
以下、第２の実施の形態の計算方法を、実施例３と実施例４とに分けて説明する。
【００９６】
（実施例３）
（実施例３にかかる計算装置１００の機能的構成例）
図２０は、実施例３にかかる計算装置の機能的構成例を示すブロック図である。図２０において、図４に示した実施例１と同様の要素については、同一符号を付し説明を省略する。
【００９７】
計算装置１００は、ＧＰＵシミュレーション部４０４を有している。ＧＰＵシミュレーション部４０４は、例えば、図１９に示した、性能値を計算する対象となる異種混合プロセッサシステム２００ａに含まれるＧＰＵ１０４のシミュレーションを行う。
【００９８】
ＧＰＵシミュレーション部４０４は、ＧＰＵ１０４が記憶装置１０３にアクセスする時刻を記録する機能、ＧＰＵ１０４の動作を一時停止および再開する機能を有する。さらに、ＧＰＵシミュレーション部４０４は、ＣＰＵ側のシミュレーションを行うシミュレーション実行部４０２ａ−１，４０２ａ−２と同期して処理を行う機能を有する。
【００９９】
なお、ＧＰＵシミュレーション部４０４の処理も、例えば、ホストＣＰＵ３０１がアクセス可能なディスク３０５などの記憶装置に記憶された計算プログラムにコーディングされる。そして、ホストＣＰＵ３０１が記憶装置に記憶された計算プログラムを読み出して、計算プログラムにコーディングされている処理を実行する。これにより、ＧＰＵシミュレーション部４０４の処理が実現される。また、ＧＰＵシミュレーション部４０４の処理結果は、例えば、ＲＡＭ３０３、ディスク３０５などの記憶装置に記憶される。
【０１００】
シミュレーション実行部４０２ａ−１，４０２ａ−２は、図４に示したシミュレーション実行部４０２−１，４０２−２とほぼ同様の機能を有しているが、ＧＰＵシミュレーション部４０４と同期処理を行う機能を有している。
【０１０１】
例えば、シミュレーション実行部４０２ａ−１の同期部４２２ａ−１は、前述した第１シミュレーションｓｉｍ１と第２シミュレーションｓｉｍ２との同期処理を行うとともに、第１シミュレーションｓｉｍ１とＧＰＵシミュレーションとの同期処理を行う。
【０１０２】
同期部４２２ａ−１は、ＧＰＵシミュレーション部４０４から、ＧＰＵ１０４の記憶装置１０３へのアクセス時刻を取得する。これにより、第１シミュレーションｓｉｍ１と第２シミュレーションｓｉｍ２との間の同期処理と同様に、第１シミュレーションｓｉｍ１と、ＧＰＵシミュレーションとの同期処理を行うことができる。
【０１０３】
例えば、第１シミュレーションｓｉｍ１で、記憶装置１０３の、あるアドレスへのアクセス命令が発生した時刻が、ＧＰＵシミュレーションでそのアドレスへのアクセス命令が発生した時刻より速いときには、第１シミュレーションｓｉｍ１が待機される。第１シミュレーションｓｉｍ１で、記憶装置１０３のあるアドレスへのアクセス命令が発生した時刻が、ＧＰＵシミュレーションでそのアドレスへのアクセス命令が発生した時刻より遅いときには、同期部４２２ａ−１は、ＧＰＵシミュレーションを待機させる。
【０１０４】
また、補正部４２３ａ−１は、前述した第１シミュレーションｓｉｍ１と第２シミュレーションｓｉｍ２との同期処理に基づく補正処理と同様に、第１シミュレーションｓｉｍ１とＧＰＵシミュレーションとの同期処理に基づく補正処理も行う。
【０１０５】
第２シミュレーションｓｉｍ２と、ＧＰＵシミュレーションとの同期処理および、その同期処理に基づく補正処理についても同様である。
また、シミュレーション情報収集部４０３ａ−１，４０３ａ−２は、上記のようなＧＰＵシミュレーションと、第１シミュレーションｓｉｍ１および第２シミュレーションｓｉｍ２との同期処理、補正処理を考慮した性能シミュレーションの実行結果を収集する。
【０１０６】
（実施例３にかかる計算装置１００が行う計算処理手順例）
全体の計算処理の流れと、ホストコードの生成処理の流れは、図１０、図１１に示したフローチャートと同様であるため、説明を省略する。
【０１０７】
図２１は、実施例３にかかる計算装置によるキャッシュメモリについてのヘルパー関数に従う計算処理手順例を示すフローチャートである。
ステップＳ２１０１の処理は、図１２に示したステップＳ１２０１の処理と同じであるため説明を省略する。ステップＳ２１０２の処理では、計算装置１００は、シミュレーションｓｉｍ１，ｓｉｍ２のアクセス時刻とアクセス先アドレスだけでなく、ＧＰＵシミュレーションのアクセス時刻とアクセス先アドレスも記録する。
【０１０８】
ステップＳ２１０３の処理では、計算装置１００は、自コアのシミュレーションの時刻が、他のコアのシミュレーションの時刻またはＧＰＵシミュレーションの時刻よりも遅れているか否かを判断する。遅れていると判断された場合（ステップＳ２１０３：Ｙｅｓ）、計算装置１００は、ステップＳ２１０５へ移行する。つまり、自コアを待機させなくてよいため、同期処理が省かれる。
【０１０９】
一方、遅れていないと判断された場合（ステップＳ２１０３：Ｎｏ）、計算装置１００は、同期を行う（ステップＳ２１０４）。例えば、自コアでのアクセス命令の発生時のシミュレーションの時刻が、ＧＰＵ１０４のアクセス命令の発生時のシミュレーションの時刻よりも早い場合、計算装置１００は、自コアのシミュレーションを待機させ、ＧＰＵシミュレーションと同期させる。
【０１１０】
ステップＳ２１０５〜Ｓ２１１０の処理は、図１２に示したステップＳ１２０５〜Ｓ１２１０の処理と同じであるため説明を省略する。
（実施例４）
（実施例４にかかる計算装置１００の機能的構成例）
図２２は、実施例４にかかる計算装置の機能的構成例を示すブロック図である。図２２において、図１４、図２０と同様の要素については、同一符号を付し説明を省略する。
【０１１１】
計算装置１００において、シミュレーション実行部４０２ｂ−１は、図２０に示したシミュレーション実行部４０２ａ−１と異なり、共有判断部１４０１ａ−１と更新部１４０２ａ−１をさらに有している。図示を省略しているが、シミュレーション実行部４０２ｂ−２も、同様の要素を有している。
【０１１２】
更新部１４０２ａ−１は、図１４の更新部１４０２−１とほぼ同様の機能を有しているが、図１６に示した共有状況テーブル１６００に自コアについてのＡＳＩＤとＧＰＵ１０４についてのＡＳＩＤとが一致するときに、ＧＰＵ１０４を識別する識別子を設定する。
【０１１３】
共有判断部１４０１ａ−１は、図１４の共有判断部１４０１−１とほぼ同様の機能を有しているが、自コアと他コアで物理アドレス空間を共有しているか否かを判断するとともに、自コアとＧＰＵ１０４とで物理アドレス空間を共有しているか否かを判断する。すなわち、共有判断部１４０１ａ−１は、第１シミュレーションにおいて自コアが利用する記憶装置１０３の記憶領域と、ＧＰＵシミュレーションにおいてＧＰＵ１０４が利用する記憶領域とが一致しているか否かを判断する。第１シミュレーションにおいて自コアが利用する記憶装置１０３の記憶領域と、ＧＰＵシミュレーションにおいてＧＰＵ１０４が利用する記憶領域とが一致しない場合には、自コアとＧＰＵ１０４との同期をとらなくてもよい。
【０１１４】
例えば、共有判断部１４０１ａ−１は、前述した共有状況テーブル１６００から自コアについてのレコードを参照することによって物理アドレス空間を共有するコアまたはＧＰＵがあるか否かの判断を行う。
【０１１５】
（実施例４にかかる計算装置１００が行う計算処理手順例）
全体の計算処理の流れと、ホストコードの生成処理の流れは、図１０、図１１に示したフローチャートと同じであるため、説明を省略する。
【０１１６】
図２３は、実施例４にかかる計算装置によるキャッシュメモリについてのヘルパー関数に従う計算処理手順例を示すフローチャートである。
ステップＳ２３０１の処理は、図１２に示したステップＳ１２０１の処理と同じであるため説明を省略する。ステップＳ２３０２の処理では、計算装置１００は、シミュレーションｓｉｍ１，ｓｉｍ２のアクセス時刻とアクセス先アドレスだけでなく、ＧＰＵシミュレーションのアクセス時刻とアクセス先アドレスも記録する。
【０１１７】
ステップＳ２１０３の処理では、計算装置１００は、前述した共有状況テーブル１６００に基づいて、物理アドレス空間を共有するコアがあるか否か、または、ＧＰＵ利用時には、ＧＰＵと物理アドレス空間を共有するコアがあるか否かを判断する。物理アドレス空間を共有するコアまたは、ＧＰＵ利用時であってＧＰＵと物理アドレス空間を共有するコアがあると判断された場合（ステップＳ２３０３：Ｙｅｓ）、ステップＳ２３０４の処理が行われる。物理アドレス空間を共有するコアがなく、ＧＰＵが利用されない、もしくはＧＰＵ利用時であってもＧＰＵと物理アドレス空間を共有するコアがないと判断された場合（ステップＳ２３０３：Ｎｏ）、ステップＳ２３０６の処理が行われる。
【０１１８】
例えば、ＧＰＵ１０４が描画処理などで単独で動作していて、物理アドレス空間を共有するコアもない場合には、ステップＳ２３０３の処理から、ステップＳ２３０６の処理への遷移が行われる。
【０１１９】
ステップＳ２３０４，Ｓ２３０５の処理は、図２１に示したステップＳ２１０３，Ｓ２１０４の処理と同じであり、ステップＳ２３０６〜Ｓ２３１１の処理は、図１２に示したステップＳ１２０５〜Ｓ１２１０の処理と同じであるため説明を省略する。
【０１２０】
以上説明したような第２の実施の形態の計算装置および計算方法でも、第１の実施の形態の計算装置および計算方法と同様の効果が得られる。さらに、ＣＰＵ（マルチコアプロセッサ）でのシミュレーションとＧＰＵシミュレーションとの同期が行われることによって、ＣＰＵとＧＰＵ間の記憶装置へのアクセス命令の実行順序のシミュレーション精度が向上する。これによりＧＰＵの記憶装置へのアクセスを考慮した性能値が算出できるため、性能値の計算精度が向上する。
【０１２１】
また、記憶装置へのアクセス命令発生時の、第１シミュレーションにおける時刻がＧＰＵシミュレーションにおける時刻よりも遅れている場合には、同期処理を行わないことによってシミュレーションに要する時間の短縮化を図ることができる。
【０１２２】
また、ＣＰＵとＧＰＵとで共有する、記憶装置の記憶領域（物理アドレス空間）がない場合、もしくは、ＧＰＵを利用していない場合、同期処理を行わないことによってシミュレーションに要する時間の短縮化を図ることができる。
【０１２３】
なお、本実施の形態で説明した計算方法は、予め用意された計算プログラムをパーソナル・コンピュータやワークステーションなどのコンピュータで実行することにより実現することができる。本計算プログラムは、磁気ディスク、光ディスク、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）フラッシュメモリなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、計算プログラムは、インターネットなどのネットワークを介して配布してもよい。
【０１２４】
上述した実施の形態に関し、さらに以下の付記を開示する。
（付記１）  同一のキャッシュメモリを介して同一の記憶装置にアクセス可能な第１コアおよび第２コアを有するマルチコアプロセッサについて、
前記記憶装置へのアクセスを指示する第１アクセス命令を有する第１コードを前記第１コアが実行した場合の前記第１コードの第１性能値を、前記第１コアが前記第１コードを実行する動作の第１シミュレーションによって計算する第１計算処理と、
前記記憶装置へのアクセスを指示する第２アクセス命令を有する第２コードを前記第２コアが実行した場合の前記第２コードの第２性能値を、前記第２コアが前記第２コードを実行する動作の第２シミュレーションによって計算する第２計算処理と、
前記第１シミュレーションにおいて前記第１アクセス命令が実行される場合に、前記第１シミュレーションと前記第２シミュレーションとの同期を行う同期処理と、
前記同期処理による前記同期の後に、前記第１アクセス命令によって前記第１コアが前記キャッシュメモリを介して前記記憶装置にアクセスする場合の前記キャッシュメモリの動作の第３シミュレーションによって、前記第１計算処理によって計算される前記第１性能値の補正を行う補正処理と、
を実行する制御部を有することを特徴とする計算装置。
【０１２５】
（付記２）  前記制御部は、
前記第１シミュレーションにおける時刻が前記第２シミュレーションにおける時刻よりも遅れている場合に、前記同期処理を実行せずに前記補正処理を行うことを特徴とする付記１に記載の計算装置。
【０１２６】
（付記３）  前記制御部は、
前記第１シミュレーションにおいて前記第１アクセス命令が実行される場合に、前記記憶装置のうちの前記第１シミュレーションにおいて前記第１コアが利用する第１の記憶領域と、前記記憶装置のうちの前記第２シミュレーションにおいて前記第２コアが利用する第２の記憶領域と、が一致しているか否かを判断する判断処理を実行し、
前記判断処理によって一致していないと判断された場合、前記同期処理を実行せずに前記補正処理を行うことを特徴とする付記１または２に記載の計算装置。
【０１２７】
（付記４）  前記制御部は、
前記第１シミュレーションにおいて前記第１アクセス命令が実行される場合に、前記第１シミュレーションと、前記記憶装置にアクセス可能なアクセラレータの動作をシミュレートするアクセラレータシミュレーションとの同期を行う第２同期処理を実行し、
前記第２同期処理の後に、前記補正処理を行うことを特徴とする付記１に記載の計算装置。
【０１２８】
（付記５）  前記制御部は、前記第１シミュレーションにおける時刻が前記アクセラレータシミュレーションにおける時刻よりも遅れている場合に、前記第２同期処理を省くことを特徴とする付記４に記載の計算装置。
【０１２９】
（付記６）  前記制御部は、前記第１シミュレーションにおいて前記第１アクセス命令が実行される場合に、前記記憶装置のうちの前記第１シミュレーションにおいて前記第１コアが利用する第１の記憶領域と、前記記憶装置のうちの前記アクセラレータシミュレーションにおいて前記アクセラレータが利用する第３の記憶領域とが一致していない場合、前記第２同期処理を省くことを特徴とする付記４または５に記載の計算装置。
【０１３０】
（付記７）  前記制御部は、
前記第２シミュレーションにおいて前記第２アクセス命令が実行される場合に、前記第１シミュレーションと前記第２シミュレーションとの同期を行う第３同期処理と、
前記第３同期処理による前記同期の後に、前記第２アクセス命令によって前記第２コアが前記キャッシュメモリを介して前記記憶装置にアクセスする場合の前記第３シミュレーションによって、前記第２計算処理によって計算される前記第２性能値の補正を行う第２補正処理と、
を実行することを特徴とする付記１〜３のいずれか一つに記載の計算装置。
【０１３１】
（付記８）  前記制御部は、
前記第２シミュレーションにおける時刻が前記第１シミュレーションにおける時刻よりも遅れている場合に、前記第３同期処理を実行せずに前記第２性能値の補正を行うことを特徴とする付記７に記載の計算装置。
【０１３２】
（付記９）  前記制御部は、
前記第２シミュレーションにおいて前記第１アクセス命令が実行される場合に、前記記憶装置のうちの前記第１シミュレーションにおいて前記第２コアが利用する記憶領域と、前記記憶装置のうちの前記第１シミュレーションにおいて前記第２コアが利用する記憶領域と、が一致しているか否かを判断する第２判断処理を実行し、
前記第２判断処理によって一致していないと判断された場合、前記第３同期処理を実行せずに前記第２性能値の補正を行うことを特徴とする付記７または８に記載の計算装置。
【０１３３】
（付記１０）  コンピュータが、
同一のキャッシュメモリを介して同一の記憶装置にアクセス可能な第１コアおよび第２コアを有するマルチコアプロセッサについて、
前記記憶装置へのアクセスを指示する第１アクセス命令を有する第１コードを前記第１コアが実行した場合の前記第１コードの第１性能値を、前記第１コアが前記第１コードを実行する動作の第１シミュレーションによって計算する第１計算処理と、
前記記憶装置へのアクセスを指示する第２アクセス命令を有する第２コードを前記第２コアが実行した場合の前記第２コードの第２性能値を、前記第２コアが前記第２コードを実行する動作の第２シミュレーションによって計算する第２計算処理と、
前記第１シミュレーションにおいて前記第１アクセス命令が実行される場合に、前記第１シミュレーションと前記第２シミュレーションとの同期を行う同期処理と、
前記同期処理による前記同期の後に、前記第１アクセス命令によって前記第１コアが前記キャッシュメモリを介して前記記憶装置にアクセスする場合の前記キャッシュメモリの動作の第３シミュレーションによって、前記第１計算処理によって計算される前記第１性能値の補正を行う補正処理と、
を実行することを特徴とする計算方法。
【０１３４】
（付記１１）  コンピュータに、
同一のキャッシュメモリを介して同一の記憶装置にアクセス可能な第１コアおよび第２コアを有するマルチコアプロセッサについて、
前記記憶装置へのアクセスを指示する第１アクセス命令を有する第１コードを前記第１コアが実行した場合の前記第１コードの第１性能値を、前記第１コアが前記第１コードを実行する動作の第１シミュレーションによって計算する第１計算処理と、
前記記憶装置へのアクセスを指示する第２アクセス命令を有する第２コードを前記第２コアが実行した場合の前記第２コードの第２性能値を、前記第２コアが前記第２コードを実行する動作の第２シミュレーションによって計算する第２計算処理と、
前記第１シミュレーションにおいて前記第１アクセス命令が実行される場合に、前記第１シミュレーションと前記第２シミュレーションとの同期を行う同期処理と、
前記同期処理による前記同期の後に、前記第１アクセス命令によって前記第１コアが前記キャッシュメモリを介して前記記憶装置にアクセスする場合の前記キャッシュメモリの動作の第３シミュレーションによって、前記第１計算処理によって計算される前記第１性能値の補正を行う補正処理と、
を実行させることを特徴とする計算プログラム。
【符号の説明】
【０１３５】
１００  計算装置
１０１  マルチコアプロセッサ
１０２  キャッシュメモリ
１０３  記憶装置
１１１  第１コア
１１２  第２コア
４２１  コード実行部
４２２  同期部
４２３  補正部
１４０１  共有判断部
ｓｉｍ１  第１シミュレーション
ｓｉｍ２  第２シミュレーション
ｓｉｍ３  第３シミュレーション
ｃ１  第１コード
ｃ２  第２コード
【図１】
0006394341.tif 000002
【図２】
0006394341.tif 000003
【図３】
0006394341.tif 000004
【図４】
0006394341.tif 000005
【図５】
0006394341.tif 000006
【図６】
0006394341.tif 000007
【図７】
0006394341.tif 000008
【図８】
0006394341.tif 000009
【図９】
0006394341.tif 000010
【図１０】
0006394341.tif 000011
【図１１】
0006394341.tif 000012
【図１２】
0006394341.tif 000013
【図１３】
0006394341.tif 000014
【図１４】
0006394341.tif 000015
【図１５】
0006394341.tif 000016
【図１６】
0006394341.tif 000017
【図１７】
0006394341.tif 000018
【図１８】
0006394341.tif 000019
【図１９】
0006394341.tif 000020
【図２０】
0006394341.tif 000021
【図２１】
0006394341.tif 000022
【図２２】
0006394341.tif 000023
【図２３】
0006394341.tif 000024