(57)【要約】【課題】性能値の計算にかかる計算量の低減を図ること。【解決手段】計算装置１００は、ヘルパー関数１に従って、動作のシミュレーションにおける命令ｉ２の実行時の記憶領域Ａの属性が、ターゲットＣＰＵ１０１がキャッシュメモリ１０２を使用可能なことを示す属性であるか否かを判断する。計算装置１００は、キャッシュメモリ１０２を使用可能なことを示す属性でないと判断した場合、キャッシュメモリ１０２を使用しない場合におけるブロックｂｔ内の各命令の性能値によって、ターゲットＣＰＵ１０１がブロックｂｔを実行した場合のブロックｂｔの性能値を属性によらずに計算する計算用コードｃｃ１２を生成する。計算装置１００は、ブロックｂｔがあらたに性能値の計算対象となった場合、生成した計算用コードｃｃ１２を実行する。これにより、ブロックｂｔがあらたに計算対象となった場合の計算量を削減することができる。【選択図】図１
2014241031.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算する計算装置であって、
前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時の前記記憶領域の属性が、前記アクセス命令の指示に対して前記プロセッサがキャッシュメモリを使用可能なことを示す属性であるか否かを判断する判断部と、
前記キャッシュメモリを使用可能なことを示す属性でないと前記判断部が判断した場合、前記キャッシュメモリを使用しない場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記属性によらずに計算する計算用コードを生成する生成部と、
前記特定コードがあらたに性能値の計算対象となった場合、生成した前記計算用コードを実行する実行部と、
を有することを特徴とする計算装置。
【請求項２】
前記生成部は、前記キャッシュメモリを使用可能なことを示す属性であると判断した場合、前記キャッシュメモリを使用する場合における前記特定コード内の各命令の性能値によって、前記特定コードの性能値を前記属性によらずに計算する計算用コードを生成することを特徴とする請求項１に記載の計算装置。
【請求項３】
前記計算用コード（以下、「第１計算用コード」と称する。）を生成する前記生成部は、
前記特定コード内の前記アクセス命令と異なる命令の各々について、前記命令の性能値を前記特定コードの性能値に加算させる第１計算命令と、前記アクセス命令の各々について、前記属性に基づく前記アクセス命令の性能値を前記特定コードの性能値に加算させる第２計算命令と、を有する第２計算用コードを取得し、
取得した前記第２計算用コードの中から、前記キャッシュメモリを使用可能なことを示す属性でないと判断した前記アクセス命令についての第２計算命令を検出し、
検出した前記第２計算命令から、前記キャッシュメモリを使用可能なことを示す属性であると判断した前記アクセス命令についての第２計算命令までの間にある前記第１計算命令を前記第２計算用コードの中から検出し、
検出した前記第１計算命令が前記特定コードの性能値に加算させる前記命令の性能値と、前記キャッシュメモリを使用可能なことを示す属性でないと判断した前記アクセス命令の実行時に前記キャッシュメモリを使用しない場合における前記アクセス命令の性能値と、の合計値を算出し、
前記第２計算用コードのうち、検出した前記第１計算命令と検出した前記第２計算命令とを、前記合計値を前記特定コードの性能値に加算させる第３計算命令に置換する、
ことにより、前記第１計算用コードを生成することを特徴とする請求項１または２に記載の計算装置。
【請求項４】
プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算する計算装置であって、
前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時の前記記憶領域の属性が、前記アクセス命令の指示に対して前記プロセッサがキャッシュメモリを使用可能なことを示す属性であるか否かを判断する判断部と、
前記キャッシュメモリを使用可能なことを示す属性であると前記判断部が判断した場合、前記キャッシュメモリを使用する場合における前記特定コード内の各命令の性能値によって、前記特定コードの性能値を前記属性によらずに計算する計算用コードを生成する生成部と、
前記特定コードがあらたに性能値の計算対象となった場合、生成した前記計算用コードを実行する実行部と、
を有することを特徴とする計算装置。
【請求項５】
プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算する計算装置であって、
前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時に前記プロセッサがアクセス可能なキャッシュメモリが使用可能な状態であるか否かを、前記シミュレーションにおける前記アクセス命令の実行前に判断する第１判断部と、
使用可能な状態でないと前記第１判断部が判断した場合、前記キャッシュメモリを使用しない場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記キャッシュメモリの状態によらずに計算する計算用コードを生成する生成部と、
前記生成部が生成した前記計算用コードを実行する第１実行部と、
前記特定コードがあらたに性能値の計算対象となった場合に、前記シミュレーションにおける前記アクセス命令の実行時に前記プロセッサがアクセス可能なキャッシュメモリが使用可能な状態であるか否かを、前記シミュレーションにおける前記アクセス命令の実行前に判断する第２判断部と、
使用可能な状態でないと前記第２判断部が判断した場合、前記計算用コードを実行する第２実行部と、
を有することを特徴とする計算装置。
【請求項６】
プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算する計算装置であって、
前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時に前記プロセッサがアクセス可能なＴＬＢ（Ｔｒａｎｓｌａｔｉｏｎ  Ｌｏｏｋａｓｉｄｅ  Ｂｕｆｆｅｒ）が使用可能な状態か否かを判断する第１判断部と、
使用可能であると前記第１判断部が判断した場合、前記ＴＬＢを使用しない場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記ＴＬＢの状態によらずに計算する計算用コードを生成する生成部と、
前記生成部が生成した前記計算用コードを実行する第１実行部と、
前記特定コードがあらたに性能値の計算対象となった場合に、前記シミュレーションにおける前記アクセス命令の実行時に前記ＴＬＢが使用可能な状態であるか否かを判断する第２判断部と、
使用可能な状態でないと前記第２判断部が判断した場合、前記計算用コードを実行する第２実行部と、
を有することを特徴とする計算装置。
【請求項７】
第１モードと、前記第１モードよりも動作の制限が少ない第２モードと、の動作モードを有するプロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算する計算装置であって、
前記特定コードが性能値の計算対象となった場合、前記プログラムを前記プロセッサが実行する動作のシミュレーションにおける前記アクセス命令の実行時の前記動作モードが前記第２モードであるか否かを判断する判断部と、
前記第２モードであると前記判断部が判断した場合、前記プロセッサがアクセス可能なＴＬＢ（Ｔｒａｎｓｌａｔｉｏｎ  Ｌｏｏｋａｓｉｄｅ  Ｂｕｆｆｅｒ）に前記記憶領域を示す論理アドレスと前記記憶領域を示す物理アドレスとの変換情報が格納されている場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記動作モードによらずに計算する計算用コードを生成する生成部と、
前記特定コードがあらたに性能値の計算対象となった場合、前記生成部が生成した前記計算用コードを実行する実行部と、
を有することを特徴とする計算装置。
【請求項８】
前記生成部は、前記判断部が前記第２モードでないと判断した場合、前記ＴＬＢを使用する場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記動作モードによらずに計算する計算用コードを生成することを特徴とする請求項７に記載の計算装置。
【請求項９】
前記計算用コード（以下、「第１計算用コード」と称する。）を生成する前記生成部は、
前記特定コード内の前記アクセス命令と異なる命令の各々について、前記命令の性能値を前記特定コードの性能値に加算させる第１計算命令と、前記アクセス命令の各々について、前記ＴＬＢに前記変換情報が格納されているか否かに基づく前記アクセス命令の性能値を前記特定コードの性能値に加算させる第２計算命令と、を有する第２計算用コードを取得し、
取得した前記第２計算用コードの中から、前記第２モードであると判断した前記アクセス命令についての第２計算命令を検出し、
検出した前記第２計算命令から、前記第２モードでないと判断した前記アクセス命令についての第２計算命令までの間にある前記第１計算命令を前記第２計算用コードの中から検出し、
検出した前記第１計算命令が前記特定コードの性能値に加算させる前記命令の性能値と、前記第２モードであると判断した前記アクセス命令の実行時に前記ＴＬＢに変換情報が格納されている場合における前記アクセス命令の性能値と、の合計値を算出し、
前記第２計算用コードのうち、検出した前記第１計算命令と検出した前記第２計算命令とを、前記合計値を前記特定コードの性能値に加算させる第３計算命令に置換する、
ことにより、前記第１計算用コードを生成することを特徴とする請求項７に記載の計算装置。
【請求項１０】
プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータが、
前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時の前記記憶領域の属性が、前記アクセス命令の指示に対して前記プロセッサがキャッシュメモリを使用可能なことを示す属性であるか否かを判断し、
前記キャッシュメモリを使用可能なことを示す属性でないと判断した場合、前記キャッシュメモリを使用しない場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記属性によらずに計算する計算用コードを生成し、
前記特定コードがあらたに性能値の計算対象となった場合、生成した前記計算用コードを実行する、
処理を実行することを特徴とする計算方法。
【請求項１１】
プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータが、
前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時の前記記憶領域の属性が、前記アクセス命令の指示に対して前記プロセッサがキャッシュメモリを使用可能なことを示す属性であるか否かを判断し、
前記キャッシュメモリを使用可能なことを示す属性であると判断した場合、前記キャッシュメモリを使用する場合における前記特定コード内の各命令の性能値によって、前記特定コードの性能値を前記属性によらずに計算する計算用コードを生成し、
前記特定コードがあらたに性能値の計算対象となった場合、生成した前記計算用コードを実行する、
処理を実行することを特徴とする計算方法。
【請求項１２】
プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータが、
前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時に前記プロセッサがアクセス可能なキャッシュメモリが使用可能な状態であるか否かを、前記シミュレーションにおける前記アクセス命令の実行前に判断し、
使用可能な状態でないと判断した場合、前記キャッシュメモリを使用しない場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記キャッシュメモリの状態によらずに計算する計算用コードを生成し、
生成した前記計算用コードを実行し、
前記特定コードがあらたに性能値の計算対象となった場合に、前記シミュレーションにおける前記アクセス命令の実行時に前記プロセッサがアクセス可能なキャッシュメモリが使用可能な状態であるか否かを、前記シミュレーションにおける前記アクセス命令の実行前に判断し、
使用可能な状態でないと判断した場合、前記計算用コードを実行する、
ことを特徴とする計算方法。
【請求項１３】
プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータが、
前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時に前記プロセッサがアクセス可能なＴＬＢ（Ｔｒａｎｓｌａｔｉｏｎ  Ｌｏｏｋａｓｉｄｅ  Ｂｕｆｆｅｒ）が使用可能な状態か否かを判断し、
使用可能であると判断した場合、前記ＴＬＢを使用しない場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記ＴＬＢの状態によらずに計算する計算用コードを生成し、
生成した前記計算用コードを実行し、
前記特定コードがあらたに性能値の計算対象となった場合に、前記シミュレーションにおける前記アクセス命令の実行時に前記ＴＬＢが使用可能な状態であるか否かを判断し、
使用可能な状態でないと判断した場合、前記計算用コードを実行する、
処理を実行することを特徴とする計算方法。
【請求項１４】
第１モードと、前記第１モードよりも動作の制限が少ない第２モードと、の動作モードを有するプロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータが、
前記特定コードが性能値の計算対象となった場合、前記プログラムを前記プロセッサが実行する動作のシミュレーションにおける前記アクセス命令の実行時の前記動作モードが前記第２モードであるか否かを判断し、
前記第２モードであると判断した場合、前記プロセッサがアクセス可能なＴＬＢ（Ｔｒａｎｓｌａｔｉｏｎ  Ｌｏｏｋａｓｉｄｅ  Ｂｕｆｆｅｒ）に前記記憶領域を示す論理アドレスと前記記憶領域を示す物理アドレスとの変換情報が格納されている場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記動作モードによらずに計算する計算用コードを生成し、
前記特定コードがあらたに性能値の計算対象となった場合、生成した前記計算用コードを実行する、
処理を実行することを特徴とする計算方法。
【請求項１５】
プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータに、
前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時の前記記憶領域の属性が、前記アクセス命令の指示に対して前記プロセッサがキャッシュメモリを使用可能なことを示す属性であるか否かを判断し、
前記キャッシュメモリを使用可能なことを示す属性でないと判断した場合、前記キャッシュメモリを使用しない場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記属性によらずに計算する計算用コードを生成し、
前記特定コードがあらたに性能値の計算対象となった場合、生成した前記計算用コードを実行する、
処理を実行させることを特徴とする計算プログラム。
【請求項１６】
プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータに、
前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時の前記記憶領域の属性が、前記アクセス命令の指示に対して前記プロセッサがキャッシュメモリを使用可能なことを示す属性であるか否かを判断し、
前記キャッシュメモリを使用可能なことを示す属性であると判断した場合、前記キャッシュメモリを使用する場合における前記特定コード内の各命令の性能値によって、前記特定コードの性能値を前記属性によらずに計算する計算用コードを生成し、
前記特定コードがあらたに性能値の計算対象となった場合、生成した前記計算用コードを実行する、
処理を実行させることを特徴とする計算プログラム。
【請求項１７】
プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータに、
前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時に前記プロセッサがアクセス可能なキャッシュメモリが使用可能な状態であるか否かを、前記シミュレーションにおける前記アクセス命令の実行前に判断し、
使用可能な状態でないと判断した場合、前記キャッシュメモリを使用しない場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記キャッシュメモリの状態によらずに計算する計算用コードを生成し、
生成した前記計算用コードを実行し、
前記特定コードがあらたに性能値の計算対象となった場合に、前記シミュレーションにおける前記アクセス命令の実行時に前記プロセッサがアクセス可能なキャッシュメモリが使用可能な状態であるか否かを、前記シミュレーションにおける前記アクセス命令の実行前に判断し、
使用可能な状態でないと判断した場合、前記計算用コードを実行する、
ことを特徴とする計算プログラム。
【請求項１８】
プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータに、
前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時に前記プロセッサがアクセス可能なＴＬＢ（Ｔｒａｎｓｌａｔｉｏｎ  Ｌｏｏｋａｓｉｄｅ  Ｂｕｆｆｅｒ）が使用可能な状態か否かを判断し、
使用可能であると判断した場合、前記ＴＬＢを使用しない場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記ＴＬＢの状態によらずに計算する計算用コードを生成し、
生成した前記計算用コードを実行し、
前記特定コードがあらたに性能値の計算対象となった場合に、前記シミュレーションにおける前記アクセス命令の実行時に前記ＴＬＢが使用可能な状態であるか否かを判断し、
使用可能な状態でないと判断した場合、前記計算用コードを実行する、
処理を実行させることを特徴とする計算プログラム。
【請求項１９】
第１モードと、前記第１モードよりも動作の制限が少ない第２モードと、の動作モードを有するプロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータに、
前記特定コードが性能値の計算対象となった場合、前記プログラムを前記プロセッサが実行する動作のシミュレーションにおける前記アクセス命令の実行時の前記動作モードが前記第２モードであるか否かを判断し、
前記第２モードであると判断した場合、前記プロセッサがアクセス可能なＴＬＢ（Ｔｒａｎｓｌａｔｉｏｎ  Ｌｏｏｋａｓｉｄｅ  Ｂｕｆｆｅｒ）に前記記憶領域を示す論理アドレスと前記記憶領域を示す物理アドレスとの変換情報が格納されている場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記動作モードによらずに計算する計算用コードを生成し、
前記特定コードがあらたに性能値の計算対象となった場合、生成した前記計算用コードを実行する、
処理を実行させることを特徴とする計算プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算装置、計算方法、および計算プログラムに関する。
【背景技術】
【０００２】
従来では、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）がプログラムを実行する動作のシミュレーション中にＣＰＵがアクセス可能なキャッシュメモリの動作結果を出力し、ＣＰＵがプログラムを実行した場合のプログラムの性能値を動作結果に基づいて計算する技術がある（例えば、下記特許文献１参照。）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００１−２４９８２９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来では、ＣＰＵに記憶領域へのアクセスを指示するアクセス命令が動作のシミュレーション中に実行される都度、キャッシュメモリの動作結果を参照してプログラムの性能値を計算する。そのため、アクセス命令の性能値の計算にかかる計算量が多くなるという問題点がある。
【０００５】
１つの側面では、本発明は、計算量の低減を図ることができる計算装置、計算方法、および計算プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の一側面によれば、プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算する場合に、前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時の前記記憶領域の属性が、前記アクセス命令の指示に対して前記プロセッサがキャッシュメモリを使用可能なことを示す属性であるか否かを判断し、前記キャッシュメモリを使用可能なことを示す属性でないと判断した場合、前記キャッシュメモリを使用しない場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記属性によらずに計算する計算用コードを生成し、前記特定コードがあらたに性能値の計算対象となった場合、生成した前記計算用コードを実行する計算装置、計算方法、および計算プログラムが提案される。
【発明の効果】
【０００７】
本発明の一態様によれば、計算量の低減を図ることができる。
【図面の簡単な説明】
【０００８】
【図１】図１は、実施の形態にかかる計算装置による一動作例を示す説明図である。
【図２】図２は、実施の形態にかかる計算装置のハードウェア構成例を示すブロック図である。
【図３】図３は、実施例１にかかる計算装置の機能的構成例を示すブロック図である。
【図４】図４は、ブロックに含まれる命令例を示す図である。
【図５】図５は、タイミング情報の例を示す図である。
【図６】図６は、図４に示すブロックの各命令の実行タイミング例を示す図である。
【図７】図７は、予測情報例を示す説明図である。
【図８】図８は、第１計算用コードの生成例を示す説明図である。
【図９】図９は、実施例１にかかるコード実行部の機能的構成例を示すブロック図である。
【図１０】図１０は、実施例１にかかるコード実行部による実行例を示す説明図である。
【図１１】図１１は、実施例１にかかる第２計算用コードの生成例を示す説明図である。
【図１２】図１２は、実施例２にかかる第２計算用コードの生成例を示す説明図である。
【図１３】図１３は、ｌｄ命令のデータキャッシュメモリについてのヘルパー関数２の詳細例を示す説明図である。
【図１４】図１４は、補正部によるｌｄ命令の実行結果に対する補正例を示す説明図である。
【図１５】図１５は、補正部によるｌｄ命令の実行結果に対する補正例を示す図である。
【図１６】図１６は、補正部によるｌｄ命令の実行結果に対する補正例を示す図である。
【図１７】図１７は、実施例１および実施例２にかかる計算装置による計算処理手順例を示すフローチャートである。
【図１８】図１８は、実施例１および実施例２にかかる図１７で示した生成処理の詳細な説明を示すフローチャートである。
【図１９】図１９は、実施例１および実施例２にかかる図１７で示したコード最適化処理の詳細な説明を示すフローチャートである。
【図２０】図２０は、実施例１にかかる計算装置によるデータキャッシュメモリについてのヘルパー関数１に従う計算処理手順例を示すフローチャートである。
【図２１】図２１は、実施例１にかかる計算装置によるデータキャッシュメモリについてのヘルパー関数２に従う計算処理手順の一例を示すフローチャートである。
【図２２】図２２は、実施例３にかかる計算装置の機能的構成例を示すブロック図である。
【図２３】図２３は、実施例３にかかるデータキャッシュメモリについての計算用コードの生成例１を示す説明図である。
【図２４】図２４は、実施例３にかかるＴＬＢについての計算用コードの生成例２を示す説明図である。
【図２５】図２５は、実施例３にかかる図１７で示した生成処理の詳細な説明を示すフローチャートである。
【図２６】図２６は、実施例３にかかる図１７で示したコード最適化処理の詳細な説明を示すフローチャートである。
【図２７】図２７は、実施例４にかかるコード実行部による実行例を示す説明図である。
【図２８】図２８は、実施例４にかかる計算装置によるＴＬＢについてのヘルパー関数１に従う計算処理手順例を示すフローチャートである。
【図２９】図２９は、実施例４にかかる計算装置によるＴＬＢについてのヘルパー関数２に従う計算処理手順例を示すフローチャートである。
【図３０】図３０は、実施例５にかかる計算装置によるコード最適化例を示す説明図である。
【図３１】図３１は、コード最適化部の詳細例を示すブロック図である。
【図３２】図３２は、コード最適化部による詳細な動作例１を示す説明図（その１）である。
【図３３】図３３は、コード最適化部による詳細な動作例１を示す説明図（その２）である。
【図３４】図３４は、コード最適化部による詳細な動作例１を示す説明図（その３）である。
【図３５】図３５は、コード最適化部による詳細な動作例１を示す説明図（その４）である。
【図３６】図３６は、コード最適化部による詳細な動作例１を示す説明図（その５）である。
【図３７】図３７は、コード最適化部による詳細な動作例２を示す説明図（その１）である。
【図３８】図３８は、コード最適化部による詳細な動作例２を示す説明図（その２）である。
【図３９】図３９は、コード最適化部による詳細な動作例２を示す説明図（その３）である。
【図４０】図４０は、コード最適化部による詳細な動作例２を示す説明図（その４）である。
【図４１】図４１は、コード最適化部による詳細な動作例２を示す説明図（その５）である。
【図４２】図４２は、コード最適化部による詳細な動作例２を示す説明図（その６）である。
【図４３】図４３は、図１７で示したコード最適化処理の詳細な説明を示すフローチャート（その１）である。
【図４４】図４４は、図１７で示したコード最適化処理の詳細な説明を示すフローチャート（その２）である。
【発明を実施するための形態】
【０００９】
本実施の形態では、評価対象となる第１プロセッサがターゲットプログラムを実行した場合の機能および性能のシミュレーションを、計算装置が有する第２プロセッサによって実行する。第２プロセッサによって機能および性能のシミュレーションを行う際に第１プロセッサのターゲットプログラムから第２プロセッサが実行可能なコードへの変換手法として、例えば、インタープリタ方式またはＪＩＴ（Ｊｕｓｔ−ｉｎ−Ｔｉｍｅ）コンパイラ方式がある。本実施の形態にかかる計算装置は、ＪＩＴコンパイラ方式による性能のシミュレーションを行う。第１プロセッサは、ターゲットＣＰＵと称し、第２プロセッサは、ホストＣＰＵと称する。
【００１０】
以下に添付図面を参照して、本発明にかかる計算装置、計算方法、および計算プログラムの実施の形態を詳細に説明する。
【００１１】
図１は、実施の形態にかかる計算装置による一動作例を示す説明図である。計算装置１００は、ターゲットＣＰＵ１０１がターゲットプログラムｐｇｒを実行した場合のターゲットプログラムｐｇｒの性能値を計算するコンピュータである。ここで、性能値とは、サイクル数や実行時間である。計算装置１００が有するプロセッサをホストＣＰＵと称する。ここで、ターゲットプログラムｐｇｒから分割した各コードをブロックと称する。ターゲットプログラムｐｇｒには、メモリ１０３内の記憶領域ＡへのアクセスをターゲットＣＰＵ１０１に指示するアクセス命令を有するブロックｂｔであって、ターゲットＣＰＵ１０１に複数回実行されるブロックｂｔを有する。アクセス命令は、例えば、ｌｄ命令やｓｔ命令である。ここでは、例えば、ブロックｂｔは、命令ｉ１と命令ｉ２とを有し、命令ｉ２が、メモリ１０３内の記憶領域ＡへのアクセスをターゲットＣＰＵ１０１に指示するアクセス命令である。
【００１２】
また、計算装置１００は、ターゲットＣＰＵ１０１がターゲットプログラムｐｇｒを実行した場合の動作のシミュレーションｓｉｍを実行する。ここでの動作のシミュレーションｓｉｍは、例えば、ターゲットＣＰＵ１０１と、ターゲットＣＰＵ１０１がアクセス可能なハードウェア資源と、を有するシステムのモデルにターゲットプログラムｐｇｒを与えることによるシミュレーションである。図１の例では、ハードウェア資源としては、キャッシュメモリ１０２、メモリ１０３などが挙げられる。本実施の形態で使用されるシステムのモデルは、例えば、ハードウェア記述言語などによってシステムの機能のみを再現したビヘイビアモデルである。ここでは、動作のシミュレーションｓｉｍの各ブロックｂｔの実行タイミングは、ブロックｂｔの性能値を計算する計算用コードｃｃ１１が実行されるタイミングと同一とする。ここでは、例えば、ターゲットＣＰＵ１０１がＡＲＭ（登録商標）アーキテクチャのＣＰＵであり、計算装置１００が有するホストＣＰＵは、例えば、ｘ８６アーキテクチャのＣＰＵである。
【００１３】
計算装置１００は、ブロックｂｔが計算対象となった場合に、計算用コードｃｃ１１を生成する。計算用コードｃｃ１１は、機能コードｆｃ１と、性能評価コードｐｃ１と、を有する。機能コードｆｃ１は、ブロックｂｔをコンパイルして得られるブロックｂｔ内の各命令のホスト命令を有する。性能評価コードｐｃ１は、ターゲットＣＰＵ１０１がアクセス可能なキャッシュメモリ１０２の属性に基づくブロックｂｔ内の各命令の性能値によって、ターゲットＣＰＵ１０１がブロックｂｔを実行した場合のブロックｂｔの性能値を計算する命令を有する。具体的には、性能評価コードｐｃ１は、命令ｉ１の第１命令である性能計算命令と、命令ｉ２の第２命令であるヘルパー関数１呼び出し命令と、を有する。命令ｉ１の性能計算命令は、ターゲットＣＰＵ１０１に命令ｉ１の性能値をブロックｂｔの性能値に加算させる命令である。命令ｉ２のヘルパー関数１呼び出し命令は、動作のシミュレーションｓｉｍの命令ｉ２の実行時の記憶領域Ａの属性とキャッシュメモリ１０２の動作結果とに応じて命令ｉ２の性能値を補正させるヘルパー関数１を呼び出させる命令である。また、命令ｉ２のヘルパー関数１呼び出し命令は、ヘルパー関数１の実行によって出力される性能値をブロックｂｔの性能値に加算させる命令である。
【００１４】
そして、計算装置１００は、計算用コードｃｃ１１を実行する。ここで、計算装置１００が計算用コードｃｃ１１内の機能コードｆｃ１を実行することにより機能のシミュレーションを行う。また、計算装置１００が計算用コードｃｃ１１内の性能評価コードｐｃ１を実行することにより性能のシミュレーションを行う。計算装置１００は計算用コードｃｃ１１内の命令ｉ２のヘルパー関数１呼び出し命令を実行すると、ヘルパー関数１を呼び出す。つぎに、計算装置１００は、呼び出したヘルパー関数１を実行する。計算装置１００は、ヘルパー関数１に従って、動作のシミュレーションｓｉｍにおける命令ｉ２の実行時の記憶領域Ａの属性が、ターゲットＣＰＵ１０１がキャッシュメモリ１０２を使用可能なことを示す属性であるか否かを判断する。例えば、ターゲットＣＰＵ１０１がＡＲＭプロセッサの場合、記憶領域Ａの属性は、記憶領域Ａについてのページテーブルエントリに設定されたＴＥＸ，Ｂ，Ｃビットの値とする。例えば、ＴＥＸ，Ｂ，Ｃビットの値がすべて１である場合、計算装置１００は、記憶領域Ａの属性がキャッシュメモリ１０２を使用可能なことを示す属性であると判断する。また、ＴＥＸ，Ｂ，Ｃビットのうちのいずれかの値が１でない場合、計算装置１００は、記憶領域Ａの属性がキャッシュメモリ１０２を使用可能なことを示す属性でないと判断する。
【００１５】
そして、計算装置１００は、キャッシュメモリ１０２を使用可能なことを示す属性であると判断した場合、動作のシミュレーションｓｉｍにおけるキャッシュメモリ１０２の動作結果に基づいて性能値を補正してブロックｂｔの性能値に加算する。キャッシュメモリ１０２の動作結果とは、キャッシュヒット、またはミスヒットのいずれかである。
【００１６】
つぎに、計算装置１００は、キャッシュメモリ１０２を使用可能なことを示す属性でないと判断した場合、キャッシュメモリ１０２を使用しない場合の性能値に補正し、補正した性能値をブロックｂｔの性能値に加算する。そして、計算装置１００は、ブロックｂｔがあらたに性能値の計算対象となった場合、計算用コードｃｃ１１を実行する。
【００１７】
また、計算装置１００は、キャッシュメモリ１０２を使用可能なことを示す属性でないと判断した場合、計算用コードｃｃ１２を生成する。計算用コードｃｃ１２は、キャッシュメモリ１０２を使用しない場合におけるブロックｂｔ内の各命令の性能値によって、ターゲットＣＰＵ１０１がブロックｂｔを実行した場合のブロックｂｔの性能値を属性によらずに計算するコードである。具体的に計算装置１００は、命令ｉ２のヘルパー関数１呼び出し命令を、キャッシュメモリ１０２を使用しない場合における命令ｉ２の性能値をブロックｂｔの性能値に加算させる性能計算命令に置換する。これにより、計算装置１００は、命令ｉ２の性能計算命令を有する性能評価コードｐｃ２を有する計算用コードｃｃ１２を生成する。計算装置１００は、ブロックｂｔがあらたに性能値の計算対象となった場合、生成した計算用コードｃｃ１２を実行する。これにより、ブロックｂｔがあらたに計算対象となった場合の計算量を削減することができる。
【００１８】
（計算装置１００のハードウェア構成例）
図２は、実施の形態にかかる計算装置のハードウェア構成例を示すブロック図である。計算装置１００は、ホストＣＰＵ２０１と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）２０２と、ＲＡＭ２０３と、ディスクドライブ２０４と、ディスク２０５と、を有する。計算装置１００は、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）２０６と、入力装置２０７と、出力装置２０８と、を有する。また、各部はバス２００によってそれぞれ接続される。
【００１９】
ここで、ホストＣＰＵ２０１は、計算装置１００の全体の制御を司る。ＲＯＭ２０２は、ブートプログラムなどのプログラムを記憶する。ＲＡＭ２０３は、ホストＣＰＵ２０１のワークエリアとして使用される記憶部である。ディスクドライブ２０４は、ホストＣＰＵ２０１の制御に従ってディスク２０５に対するデータのリード／ライトを制御する。ディスク２０５は、ディスクドライブ２０４の制御で書き込まれたデータを記憶する。ディスク２０５としては、磁気ディスク、光ディスクなどが挙げられる。
【００２０】
Ｉ／Ｆ２０６は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワークＮＥＴに接続され、このネットワークＮＥＴを介して他の装置に接続される。そして、Ｉ／Ｆ２０６は、ネットワークＮＥＴと内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ２０６には、例えばモデムやＬＡＮアダプタなどを採用することができる。
【００２１】
入力装置２０７は、キーボード、マウス、タッチパネルなどユーザの操作により、各種データの入力を行うインターフェースである。また、入力装置２０７は、カメラから画像や動画を取り込むこともできる。また、入力装置２０７は、マイクから音声を取り込むこともできる。出力装置２０８は、ホストＣＰＵ２０１の指示により、データを出力するインターフェースである。出力装置２０８には、ディスプレイやプリンタが挙げられる。
【００２２】
本実施の形態は、実施例１〜実施例５に分けて説明する。実施例１では、アクセス命令を含むブロックの動作のシミュレーションにおいてアクセス命令のアクセス先がキャッシュメモリの使用不可の場合、キャッシュメモリの不使用を前提とした該ブロックの性能値を計算する計算用コードを生成する。
【００２３】
実施例２では、対象ブロック内のアクセス命令がキャッシュメモリを使用可能である場合、キャッシュメモリの動作によって性能値を記憶領域の属性によらずに補正してブロックの性能値を計算する計算用コードを生成する。
【００２４】
実施例３では、キャッシュメモリが使用可能でない状態から使用可能な状態に変化するまでの間、キャッシュメモリを使用しない場合のアクセス命令の性能値によって対象ブロックの性能値を計算する計算用コードを実行する。また、実施例３では、ＴＬＢ（Ｔｒａｎｓｌａｔｉｏｎ  Ｌｏｏｋａｓｉｄｅ  Ｂｕｆｆｅｒ）が使用可能でない状態から使用可能な状態に変化するまでの間、ＴＬＢを使用しない場合のアクセス命令の性能値によって対象ブロックの性能値を計算する計算用コードを実行する。
【００２５】
実施例４では、動作のシミュレーションにおけるアクセス命令の実行時にターゲットＣＰＵの動作モードが特権モードである場合、ＴＬＢがヒットとなる場合の対象ブロックの各命令の性能値によって、対象ブロックの性能値を計算する計算用コードを生成する。
【００２６】
実施例５では、実施例１または４においてヘルパー関数１呼び出し命令を性能計算用命令に置き換える際に、連続する性能計算用命令を集約して１つの性能計算命令とする。
【００２７】
（実施例１）
メモリアドレス空間には、データキャッシュメモリを使用可能な領域と、データキャッシュメモリを使用不可能な領域と、がある。例えば、デバイスがマップされている領域などは、データキャッシュメモリを使用不可能な領域である。そのため、データキャッシュメモリを使用不可能な領域へのアクセス命令の性能値は、一定となる。そこで、実施例１では、アクセス命令を含むブロックの動作のシミュレーションにおいてアクセス命令のアクセス先がキャッシュメモリ使用不可の場合、キャッシュメモリの不使用を前提とした該ブロックの性能値を計算する計算用コードを生成する。これにより、該ブロックが再度対象となった際の計算量を低減させることができる。
【００２８】
（実施例１にかかる計算装置１００の機能的構成例）
図３は、実施例１にかかる計算装置の機能的構成例を示すブロック図である。計算装置１００は、コード変換部３０１と、コード実行部３０２と、コード最適化部３０３と、シミュレーション情報収集部３０４と、を有する。
【００２９】
コード変換部３０１からシミュレーション情報収集部３０４の処理は、例えば、ホストＣＰＵ２０１がアクセス可能なディスク２０５などの記憶装置に記憶されたシミュレーションプログラムにコーディングされる。そして、ホストＣＰＵ２０１が記憶装置に記憶された計算プログラムを読み出して、計算プログラムにコーディングされている処理を実行する。これにより、コード変換部３０１からシミュレーション情報収集部３０４の処理が実現される。また、各部の処理結果は、例えば、ＲＡＭ２０３、ディスク２０５などの記憶装置に記憶される。
【００３０】
また、タイミング情報３２０と、ターゲットプログラムｐｇｒと、予測情報３２１と、は予め取得され、ＲＡＭ２０３やディスク２０５などの記憶装置に記憶される。
【００３１】
コード変換部３０１は、対象ブロックの各命令の性能値によって対象ブロックがターゲットＣＰＵ１０１によって実行された場合の性能値を算出可能な計算用コードを生成する。コード実行部３０２は、計算用コードを実行することによって、対象ブロックがターゲットＣＰＵ１０１によって実行された場合の性能値を算出する。
【００３２】
具体的には、コード変換部３０１は、ブロック分割部３１１と、判断部３１２と、予測シミュレーション実行部３１３と、コード生成部３１４と、を有する。
【００３３】
ブロック分割部３１１は、計算装置１００に入力されたターゲットプログラムｐｇｒを所定基準によってブロックに分割する。分割タイミングは、例えば、対象ブロックが変化した場合にあらたな対象ブロックを分割してもよいし、事前にターゲットプログラムｐｇｒを複数のブロックに分割してもよい。分割されるブロック単位は、例えば、ベーシックブロック単位でよく、または、予め定められた任意のコード単位でよい。ベーシックブロック単位とは、分岐命令からつぎの分岐命令前までの命令群である。
【００３４】
図４は、ブロックに含まれる命令例を示す図である。図４に示すように、ターゲットプログラムｐｇｒの内のあるブロックｂには、３つの命令；（１）“ｌｄ  ［ｒ１］，ｒ２”（ロード）；（２）“ｍｕｌｔ  ｒ３，ｒ４，  ｒ５”（乗算）；（３）“ａｄｄ  ｒ２，ｒ５，  ｒ６”（加算）の命令が含まれ、（１）〜（３）の順でターゲットＣＰＵ１０１のパイプラインに投入されて実行されるとする。各命令のｒ１〜ｒ６は、レジスタ（アドレス）を表す。以降、図４に示すブロックと同一でなくともブロックや対象ブロックについてはすべてｂの符号を付す。
【００３５】
図５は、タイミング情報の例を示す図である。図５に示すタイミング情報３２０では、ｌｄ命令について、ソースレジスタｒｓ１（ｒ１）は１番目の処理要素（ｅ１）で、宛先レジスタｒｄ（ｒ２）は２番目の処理要素（ｅ２）で使用可能であることを表す。また、ｍｕｌｔ命令では、第１ソースレジスタｒｓ１（ｒ３）は１番目の処理要素（ｅ１）、第２ソースレジスタｒｓ２（ｒ４）は２番目の処理要素（ｅ２）、宛先レジスタｒｄ（ｒ５）は３番目の処理要素（ｅ３）で、それぞれ使用可能であることを示す。また、ａｄｄ命令では、第１ソースレジスタｒｓ１（ｒ２）、第２ソースレジスタｒｓ２（ｒ５）は１番目の処理要素（ｅ１）、宛先レジスタｒｄ（ｒ６）は２番目の処理要素（ｅ２）で使用可能であることを示す。
【００３６】
図６は、図４に示すブロックの各命令の実行タイミング例を示す図である。図５に示すタイミング情報３２０から、パイプラインに各命令が投入されるタイミングは、ｌｄ命令の実行開始をタイミングｔとすると、ｍｕｌｔ命令はタイミングｔ＋１、ａｄｄ命令はタイミングｔ＋２となる。ａｄｄ命令の第１ソースレジスタ（ｒ２）と第２ソースレジスタ（ｒ５）は、ｌｄ命令とｍｕｌｔ命令で使用されているため、ａｄｄ命令の開始は、ｌｄ命令とｍｕｌｔ命令の実行完了のタイミングｔ＋４以降となり、２サイクル分の待機時間（２サイクル分のストール）が生じる。
【００３７】
したがって、図６（Ａ）に示すように、図４に示すブロックｂをシミュレーションした場合に、ｌｄ命令を実行した場合のキャッシュメモリの動作結果がキャッシュヒットであるケースでは、ブロックｂの実行時間が６サイクルであることがわかる。ここで、外部依存命令を実行した場合のターゲットＣＰＵ１０１やハードウェア資源の動作結果を、外部依存命令の実行結果と称する。外部依存命令は、ターゲットＣＰＵ１０１が実行した場合に、ターゲットＣＰＵ１０１またはターゲットＣＰＵ１０１がアクセス可能なハードウェア資源の動作が複数の動作のいずれかの動作となる命令である。例えば、外部依存命令としては、例えば、ｌｄ命令、ｓｔ命令、分岐命令などが挙げられる。図６（Ｂ）は、図４に示すブロックｂのｌｄ命令の実行結果がキャッシュミスである場合のタイミング例を表す。ｌｄ命令の結果がキャッシュミスであると、タイミング情報３２０に、ペナルティとして、再実行に十分と考えられる任意の時間（ここでは６サイクル分）が設定されているため、このペナルティサイクルが遅延時間として追加される。したがって、２番目の処理要素（ｅ２）の実行は、タイミングｔ＋７に遅延する。ｌｄ命令のつぎに実行されるｍｕｌｔ命令は、遅延の影響を受けずにそのまま実行されるが、ａｄｄ命令は、ｌｄ命令の実行完了のタイミングｔ＋８以降となり、４サイクル分の待機時間（４サイクル分のストール）が生じる。
【００３８】
したがって、図６（Ｂ）に示すように、図４に示すブロックｂの命令実行をシミュレーションした場合に、ｌｄ命令の実行結果がキャッシュミスであるケースでは、実行時間が１０サイクルとなることがわかる。
【００３９】
図７は、予測情報例を示す説明図である。予測情報３２１は、ターゲットプログラムｐｇｒ内の外部依存命令をターゲットＣＰＵ１０１が実行した場合におけるターゲットＣＰＵ１０１やターゲットＣＰＵ１０１がアクセス可能なハードウェア資源の動作結果のうち、生じる確率が高い結果を定めた情報である。この動作結果を予測ケースと称する。
【００４０】
また、例えば、ターゲットＣＰＵ１０１がアクセス可能なハードウェア資源は、命令キャッシュメモリ、データキャッシュメモリ、ＭＭＵ内のＴＬＢなどがある。命令キャッシュメモリは、使用頻度の高い命令を一時的に記憶するメモリである。データキャッシュメモリは、使用頻度の高いデータを一時的に記憶するメモリである。ＴＬＢは、使用頻度の高い変換情報を一時的に記憶するメモリである。変換情報は、論理アドレスと物理アドレスとを変換するための情報である。例えば、ｌｄ命令、ｓｔ命令などの記憶領域へのアクセス命令の実行時に、ターゲットＣＰＵ１０１は、データキャッシュメモリ、ＴＬＢなどを利用する。例えば、図４に示したブロックｂ内には、ｌｄ命令があるため、ｌｄ命令については、データキャッシュの予測ケースが“キャッシュヒット”となり、ＴＬＢ検索の予測ケースが“ＴＬＢヒット”となる。
【００４１】
判断部３１２は、対象ブロックｂをコンパイル済みか否か判断する。判断部３１２は、例えば、性能のシミュレーションの実行結果や動作のシミュレーションｓｉｍの実行結果に応じてつぎに計算対象となるブロックを判断可能である。より具体的には、判断部３１２は、対象ブロックｂに関連付けられた計算用コードがあるか否かを判断する。対象ブロックｂに関連付けられた計算用コードがある場合、判断部３１２は、対象ブロックｂがコンパイル済みであると判断する。対象ブロックｂに関連付けられた計算用コードがない場合、判断部３１２は、対象ブロックｂがコンパイル済みでないと判断する。
【００４２】
対象ブロックｂが以前に計算対象となっていないと判断された場合、予測シミュレーション実行部３１３は、予測情報３２１に基づいて、対象ブロックｂに含まれる外部依存命令についての各予測ケースを設定する。そして、予測シミュレーション実行部３１３は、タイミング情報３２０を参照して、予測ケースを前提とするブロックｂ内の各命令の実行の進み具合をシミュレーションする。これにより、予測シミュレーション実行部３１３は、設定した予測ケースを前提とする場合のブロックｂ内の各命令の性能値を求める。
【００４３】
コード生成部３１４は、予測シミュレーション結果に基づいて、ターゲットＣＰＵ１０１が対象ブロックｂを実行した場合の対象ブロックｂの性能値を計算する第１計算用コードを生成する。生成された第１計算用コードは、例えば、対象ブロックｂと関連付けられてＲＡＭ２０３やディスク２０５などの記憶装置に記憶される。
【００４４】
図８は、第１計算用コードの生成例を示す説明図である。コード生成部３１４は、対象ブロックｂをコンパイルすることによる機能コードを生成する。さらに、コード生成部３１４は、予測シミュレーションによって得た対象ブロックｂ内の各命令の性能値を、対象ブロックｂの性能値に加算させる性能計算命令を生成する。また、コード生成部３１４は、外部依存命令について、ヘルパー関数１を呼び出すヘルパー関数１呼び出し命令を生成する。ヘルパー関数１呼び出し命令は、ヘルパー関数１を呼び出し、ヘルパー関数１に従う処理によって出力される性能値を、対象ブロックｂの性能値に加算する命令である。実施例１にかかるヘルパー関数１に従う処理は、アクセス命令が指示するアクセス先の記憶領域の属性とキャッシュメモリの動作とに基づきアクセス命令の性能値を補正して出力する処理である。
【００４５】
また、アクセス命令以外の外部依存命令についても、コード生成部３１４は、外部依存命令の実行結果が予測ケースと一致するか否かに基づいて、予測ケースの場合の外部依存命令の性能値を補正する処理を指示するヘルパー関数を生成する。そして、コード生成部３１４は、機能コードに、生成した各性能計算命令およびヘルパー関数１呼び出し命令を含む性能評価コードを追加した第１計算用コードを生成する。生成された第１計算用コードは、対象ブロックｂに関連付けられて、ＲＡＭ２０３やディスク２０５などの記憶装置に記憶される。コード実行部３０２は、第１計算用コードを実行することにより、対象ブロックｂの性能値を計算する性能シミュレーションを実行する。
【００４６】
図９は、実施例１にかかるコード実行部の機能的構成例を示すブロック図である。コード実行部３０２は、実行部９０１と、第１判断部９０２と、第２判断部９０３と、出力部９０４と、補正部９０５と、を有する。第１判断部９０２と、第２判断部９０３と、出力部９０４と、補正部９０５と、の処理は、ホストＣＰＵ２０１がアクセス可能なディスク２０５などの記憶装置に記憶されたヘルパー関数１にコーディングされる。そして、ホストＣＰＵ２０１が記憶装置に記憶されたヘルパー関数１を読み出して、ヘルパー関数１にコーディングされている処理を実行する。これにより、第１判断部９０２と、第２判断部９０３と、出力部９０４と、補正部９０５と、の処理が実現される。また、各部の処理結果は、例えば、ＲＡＭ２０３、ディスク２０５などの記憶装置に記憶される。
【００４７】
図１０は、実施例１にかかるコード実行部による実行例を示す説明図である。例えば、コード実行部３０２は、第１計算用コードｃｃ１０１に含まれる命令を順に実行する。例えば、実行部９０１は、ｌｄ命令のデータキャッシュメモリ１００１についてのヘルパー関数１呼び出し命令を実行すると、ヘルパー関数１を呼び出し、ヘルパー関数１が指示する処理を実行する。これにより、第１判断部９０２から補正部９０５までの処理が実行される。また、キャッシュメモリとして、データキャッシュメモリ１００１を例に挙げるが、命令キャッシュメモリであっても同様の処理となる。
【００４８】
図１０の例では、第１判断部９０２は、ターゲットＣＰＵ１０１がターゲットプログラムｐｇｒを実行する動作のシミュレーションｓｉｍにおける対象ブロックｂの実行時にキャッシュメモリが使用可能な状態か否かを判断する。例えば、ターゲットＣＰＵ１０１がＡＲＭプロセッサの場合、第１判断部９０２は、動作のシミュレーションｓｉｍのうちの対象ブロックｂの実行時の動作において、システム制御レジスタＳＣＴＲＬのＣビットの値を検出する。そして、第１判断部９０２は、システム制御レジスタＳＣＴＲＬのＣビットの値が０であるか１であるかを判断する。第１判断部９０２は、システム制御レジスタＳＣＴＲＬのＣビットの値が０である場合、データキャッシュメモリ１００１が使用可能な状態でないと判断する。第１判断部９０２は、システム制御レジスタＳＣＴＲＬのＣビットの値が１である場合、データキャッシュメモリ１００１が使用可能な状態であると判断する。
【００４９】
データキャッシュメモリ１００１が使用可能な状態であると判断された場合、第２判断部９０３は、動作のシミュレーションｓｉｍにおけるアクセス命令を実行時のアクセス先の属性を判断する。具体的に第２判断部９０３は、データキャッシュメモリ１００１を使用可能なことを示す属性であるかを判断する。第２判断部９０３は、アクセス先の属性として、動作のシミュレーションｓｉｍにおけるアクセス命令の実行時のアクセス先についてのページテーブルエントリに設定されたＴＥＸ，Ｂ，Ｃビットの値を検出する。例えば、ターゲットＣＰＵ１０１がＡＲＭプロセッサの場合、第２判断部９０３は、動作のシミュレーションｓｉｍにおいてｌｄ命令を実行時のアクセス先に関するＴＬＢ内のページテーブルエントリに設定されたＴＥＸ，Ｂ，Ｃビットの値を検出する。
【００５０】
そして、第２判断部９０３は、検出したＴＥＸ，Ｂ，Ｃビットの値がすべて１である場合、アクセス先の属性がデータキャッシュメモリ１００１を使用可能なことを示す属性であると判断する。また、第２判断部９０３は、検出したＴＥＸ，Ｂ，Ｃビットのうちのいずれかの値が１でない場合、アクセス先の属性がデータキャッシュメモリ１００１を使用可能なことを示す属性でないと判断する。
【００５１】
データキャッシュメモリ１００１を使用可能でないと判断された場合、出力部９０４は、呼び出し元であるヘルパー関数１呼び出し命令が記憶された記憶領域のアドレスを呼び出し命令リストＬ＿ｈｅｌｐｅｒに出力する。
【００５２】
データキャッシュメモリ１００１を使用可能なことを示す属性でないと判断された場合、補正部９０５は、予測ケースが“キャッシュヒット”の場合、予測シミュレーションによって得られた性能値を“ミスヒット”の場合の性能値となるように補正する。そして、補正部９０５は、補正した性能値を出力する。また、データキャッシュメモリ１００１を使用可能なことを示す属性でないと判断された場合、補正部９０５は、予測ケースが“ミスヒット”の場合、予測シミュレーションによって得られたアクセス命令の性能値を補正せずに出力する。上述例では、予測ケースが“キャッシュヒット”であるため、補正部９０５は、例えば、ｌｄ命令の性能値にタイミング情報３２０に含まれるペナルティの値を加算する。
【００５３】
データキャッシュメモリ１００１を使用可能なことを示す属性であると判断された場合、補正部９０５は、動作のシミュレーションｓｉｍにおけるデータキャッシュメモリ１００１の動作が予測ケースと一致するか否かを判断する。補正部９０５は、予測ケースと一致する場合、予測シミュレーションによって得られた性能値を補正せずに当該性能値を出力する。補正部９０５は、予測ケースと一致しない場合、予測シミュレーションによって得られた性能値を補正して当該性能値を出力する。ここでは予測ケースが“キャッシュヒット”であるため、補正部９０５は、動作のシミュレーションｓｉｍにおけるデータキャッシュメモリ１００１の動作結果が“キャッシュミス”であるか否かを判断する。そして、“キャッシュミス”であれば、補正部９０５は、ｌｄ命令の性能値にタイミング情報３２０内のペナルティの値を加算する。補正部９０５による補正処理の詳細例については、実施例２に示す。
【００５４】
また、データキャッシュメモリ１００１を使用可能でないことを示すと判断された場合、コード最適化部３０３は、第２計算用コードを生成する。第２計算用コードは、データキャッシュメモリ１００１を使用しない場合における対象ブロックｂ内の各命令の性能値によって、ホストＣＰＵ２０１が対象ブロックｂを実行した場合の対象ブロックｂの性能値を記憶領域の属性によらずに計算するコードである。
【００５５】
図１１は、実施例１にかかる第２計算用コードの生成例を示す説明図である。具体的にコード最適化部３０３は、第１計算用コードｃｃ１０１のうちの、呼び出し命令リストＬ＿ｈｅｌｐｅｒ内のアドレスが示すヘルパー関数１呼び出し命令を、“キャッシュミス”の場合におけるｌｄ命令の性能値を加算させる性能計算命令に置換する。これにより、コード最適化部３０３は、第２計算用コードｃｃ１１２を生成する。生成された第２計算用コードｃｃ１１２は、対象ブロックｂに関連付けられて、ＲＡＭ２０３やディスク２０５などの記憶装置に記憶される。また、以前に対象ブロックｂに関連付けられた第１計算用コードｃｃ１０１は、新たに第２計算用コードｃｃ１１２が対象ブロックｂに関連付けられる際に削除される。
【００５６】
また、ブロックｂがあらたに対象ブロックｂになった場合、判断部３１２は、対象ブロックｂが以前に計算対象となったと判断する。そして、コード実行部３０２は、第２計算用コードｃｃ１１２を実行することにより、対象ブロックｂの性能値を計算する性能シミュレーションを実行する。上述したように、コード実行部３０２が有する第１判断部９０２から補正部９０５までの処理は、ヘルパー関数１にコーディングされる。そのため、ヘルパー関数１呼び出し命令がコーディングされていない第２計算用コードｃｃ１１２の実行時には、第１判断部９０２から補正部９０５までの処理は、実行されない。これにより、アクセス命令を含む対象ブロックｂがあらたに計算対象となった場合の性能値の計算を高速化することができる。
【００５７】
また、シミュレーション情報収集部３０４は、各ブロックｂの性能値の計算結果を収集し、ターゲットＣＰＵ１０１がターゲットプログラムｐｇｒを実行した場合のターゲットプログラムｐｇｒの性能値を計算する。
【００５８】
（実施例２）
実施例２では、ブロックｂ内のアクセス命令がキャッシュメモリを使用可能である場合、キャッシュメモリの動作によって性能値を記憶領域の属性によらずに補正してブロックｂの性能値を計算する計算用コードを生成する。これにより、ブロックｂがあらたに計算対象となった場合に、記憶領域の属性を判断しないため、性能値の計算量の低減を図ることができる。実施例２では、実施例１で説明した機能や構成と同一の機能や構成についての詳細な説明を省略する。また、実施例２では、実施例１と同様にデータキャッシュメモリ１００１を例に挙げるが、命令キャッシュメモリであってもよい。
【００５９】
まず、データキャッシュメモリ１００１を使用可能であることを示すと判断された場合、コード最適化部３０３は、第２計算用コードを生成する。第２計算用コードは、ホストＣＰＵ２０１が実行可能なコードであって、データキャッシュメモリ１００１を使用する場合における対象コード内の各命令の性能値によって、対象ブロックｂの性能値を記憶領域の属性によらずに計算するコードである。生成された第２計算用コードは、対象ブロックｂに関連付けられて、ＲＡＭ２０３やディスク２０５などの記憶装置に記憶される。また、以前に対象ブロックｂに関連付けられた第１計算用コードは、新たに第２計算用コードが対象ブロックｂに関連付けられる際に削除される。
【００６０】
図１２は、実施例２にかかる第２計算用コードの生成例を示す説明図である。具体的にコード最適化部３０３は、第１計算用コードｃｃ１０１内のヘルパー関数１呼び出し命令のうち、呼び出し命令リストＬ＿ｈｅｌｐｅｒ内のアドレスが示すヘルパー関数１呼び出し命令以外のヘルパー関数１呼び出し命令を検出する。そして、コード最適化部３０３は、検出したヘルパー関数１呼び出し命令をヘルパー関数２呼び出し命令に置換することにより、第２計算用コードｃｃ１２３を生成する。ヘルパー関数２呼び出し命令は、ヘルパー関数２を呼び出し、ヘルパー関数２に従う処理によって出力される性能値を、対象ブロックｂの性能値に加算する命令である。ここで、実施例２では、理解の容易化のために、第１計算用コードｃｃ１０１にはヘルパー関数１呼び出し命令についてはデータキャッシュについてのヘルパー関数１呼び出し命令のみとして説明する。ヘルパー関数２は、ヘルパー関数１に含まれるアクセス命令のアクセス先の記憶領域の属性を検出する処理と、データキャッシュメモリ１００１が使用可能か否かを判断する処理と、を指示する命令を含まない関数である。具体的には、ヘルパー関数２には、補正部９０５の処理がコーディングされてある。
【００６１】
これにより、対象ブロックｂがあらたに計算対象となった場合、データキャッシュメモリ１００１を使用可能なことを示す属性であると判断されたアクセス命令についてのアクセス先の属性を判断する処理が行われなくなる。そのため、性能値の計算量の低減を図ることができ、ターゲットプログラムｐｇｒの性能値の計算の高速化を図ることができる。
【００６２】
図１３は、ｌｄ命令のデータキャッシュメモリについてのヘルパー関数２の詳細例を示す説明図である。第２計算用コードｃｃ１２３には、ヘルパー関数２「ｃａｃｈｅ＿ｌｄ（ａｄｄｒｅｓｓ，ｒｅｐ＿ｄｅｌａｙ，ｐｒｅ＿ｄｅｌａｙ）」呼び出し命令が組み込まれる。
【００６３】
ヘルパー関数２の“ｒｅｐ＿ｄｅｌａｙ”は、このロード（ｌｄ）命令の返り値を使用するつぎの命令の実行までに、ペナルティ時間のうち遅延時間として処理されなかった時間（猶予時間）である。“ｐｒｅ＿ｄｅｌａｙ”は、１つ前の命令から受ける遅延時間である。“−１”は、前の命令に遅延がないことを示す。“ｒｅｐ＿ｄｅｌａｙ”と“ｐｒｅ＿ｄｅｌａｙ”は、予測シミュレーション実行部３１３によって得られる性能シミュレーション結果とタイミング情報３２０との静的分析処理の結果から得られる時間情報である。
【００６４】
図１３に示す例では、補正部９０５は、現タイミングｃｕｒｒｅｎｔ＿ｔｉｍｅと１つ前のｌｄ命令の実行タイミングｐｒｅｌｄ＿ｔｉｍｅとの差が、１つ前のｌｄ命令の遅延時間分ｐｒｅ＿ｄｅｌａｙを超えているときは、１つ前のｌｄ命令の実行タイミングｐｒｅｌｄ＿ｔｉｍｅと現タイミングｃｕｒｒｅｎｔ＿ｔｉｍｅまでの時間で遅延時間ｐｒｅ＿ｄｅｌａｙを調整して有効遅延時間ａｖａｉｌ＿ｄｅｌａｙを求める。
【００６５】
つぎに、補正部９０５は、データキャッシュメモリ１００１の動作結果が“キャッシュミス”であれば、予測ケースの誤りであり、有効遅延時間ａｖａｉｌ＿ｄｅｌａｙにキャッシュミス時のペナルティ時間ｃａｃｈｅ＿ｍｉｓｓ＿ｌａｔｅｎｃｙを加算して、猶予時間ｒｅｐ＿ｄｅｌａｙをもとに、ｌｄ命令の性能値を補正する。
【００６６】
図１４〜１６では、補正部によるｌｄ命令の実行結果に対する補正例を示す。図１４は、補正部によるｌｄ命令の実行結果に対する補正例を示す説明図である。図１４では、１つのキャッシュ処理が実行されるケースで１つのキャッシュミスが生じた場合の補正例を説明する。
【００６７】
図１４の例では、以下の３命令のシミュレーションが実行される。
「ｌｄ  ［ｒ１］，ｒ２  ：［ｒ１］→ｒ２；
ｍｕｌｔ  ｒ３，ｒ４，ｒ５  ：ｒ３＊ｒ４→ｒ５；
ａｄｄ  ｒ２，ｒ５，ｒ６  ：ｒ２＋ｒ５→ｒ６」
【００６８】
図１４（Ａ）は、予測ケースが“キャッシュヒット”の場合の命令実行タイミングのチャート例を示す。この予測ケースにおいて、３番目に実行されるａｄｄ命令に、２サイクルストールが生じている。図１４（Ｂ）は、予測ケースと異なる“キャッシュミス”の場合の命令実行タイミングのチャート例を示す。この予測ケースと異なる実行結果では、ｌｄ命令の実行結果がキャッシュミスであると、ペナルティサイクル（６サイクル）分の遅延が生じる。そのため、ｍｕｌｔ命令は、遅延の影響を受けずに実行されるが、ａｄｄ命令の実行は、ｌｄ命令の完了を待つため、４サイクル分遅延することになる。図１４（Ｃ）は、補正部９０５による補正後の命令実行タイミングチャートの例を示す図である。
【００６９】
補正部９０５は、ｌｄ命令の実行結果がキャッシュミスであるので（予測ケースと異なる実行結果）、残りの実行時間（２−１＝１サイクル）に所定のキャッシュミス時のペナルティ時間（６サイクル）を加算して有効遅延時間（７サイクル）とする。有効遅延時間は、最大の遅延時間となる。さらに、補正部９０５は、つぎのｍｕｌｔ命令の実行時間（３サイクル）を得て、次命令の実行時間が遅延時間を超過しないと判定して、有効遅延時間から次命令の実行時間を差し引いた時間（７−３＝４サイクル）を、ｌｄ命令の遅延が生じた実行時間（遅延時間）とする。また、補正部９０５は、有効遅延時間から上述の遅延時間を差し引いた時間（３サイクル）を猶予時間とする。猶予時間は、ペナルティとしての遅延が猶予された時間である。補正部９０５は、ヘルパー関数２ｃａｃｈｅ＿ｌｄ（ａｄｄｒｅｓｓ,ｒｅｐ＿ｄｅｌａｙ,ｐｒｅ＿ｄｅｌａｙ）で、猶予時間ｒｅｐ＿ｄｅｌａｙ＝３、前命令の遅延時間ｐｒｅ＿ｄｅｌａｙ＝−１（遅延なし）を返す。
【００７０】
この補正により、ｌｄ命令の実行時間は、実行された時間と遅延時間を加算した実行時間（１＋４＝５サイクル）となり、実行完了のタイミングｔ1から、後続のｍｕｌｔ命令、ａｄｄ命令の実行時間が計算される。すなわち、補正したｌｄ命令の実行時間（５サイクル）に、予測シミュレーション実行部３１３の処理結果（予測結果による予測シミュレーションの結果）で求められていたｍｕｌｔ命令とａｄｄ命令の各々の実行時間（３サイクル、３サイクル）を単純に加算するだけで、このブロックｂの実行時間（サイクル数）を得ることができる。
【００７１】
これにより、実行結果が予測と異なる命令の実行時間のみを加算または減算することによる補正処理を行って、その他の命令については、予測結果にもとづくシミュレーション時に求められた実行時間を加算するだけで、高精度に、キャッシュミス時のシミュレーションの実行サイクル数をも求めることができる。
【００７２】
図１４（Ｄ）は、計算装置１００の処理と比較するために、従来技術によるキャッシュミス時のサイクル数を単純な加算により求めた場合の誤差の大きさを示す図である。図１４（Ｄ）の場合には、ｌｄ命令の遅延時間をそのまま加算しているため、実際には、ｌｄ命令の実行中に実行が完了するｍｕｌｔ命令の実行タイミングのずれによる誤差が生じていることがわかる。
【００７３】
図１５は、補正部によるｌｄ命令の実行結果に対する補正例を示す図である。図１５では、２つのキャッシュ処理が実行されるケースで２つのキャッシュミスが生じた場合の補正例を説明する。図１５の例では、以下の５命令の予測シミュレーションが実行される。
「ｌｄ  ［ｒ１］，ｒ２  ：［ｒ１］→ｒ２；
ｌｄ  ［ｒ３］，ｒ４  ：［ｒ３］→ｒ４；
ｍｕｌｔ  ｒ５，ｒ６，ｒ７  ：ｒ５＊ｒ６→ｒ７；
ａｄｄ  ｒ２，ｒ４，ｒ２  ：ｒ２＋ｒ４→ｒ２；
ａｄｄ  ｒ２，ｒ７，ｒ２  ：ｒ２＋ｒ７→ｒ２」
【００７４】
図１５（Ａ）は、２つのキャッシュ処理での予測結果が“キャッシュヒット”の場合の命令実行タイミングのチャート例を示す。この予測ケースでは、２つのｌｄ命令が、２サイクル分（通常の１サイクル＋付加した１サイクル）をあけて実行されるものとする。図１５（Ｂ）は、２つのキャッシュ処理の両方が予測結果と異なる「キャッシュミス」の場合の命令実行タイミングのチャート例を示す。この予測ミスのケースでは、２つのｌｄ命令のそれぞれでキャッシュミスがあり、ペナルティサイクル（６サイクル）分の遅延が生じる。しかし、２つのｌｄ命令の遅延時間は重なる時間があり、ｍｕｌｔ命令も、遅延の影響を受けずに実行され、２つのａｄｄ命令の実行が２つ目のｌｄ命令の完了まで遅延することになる。図１５（Ｃ）は、補正部９０５による補正後の命令実行タイミングチャートの例を示す。
【００７５】
補正部９０５は、図１４を用いて説明したように、タイミングｔ0において、１つ目のｌｄ命令の遅延時間を補正し、ヘルパー関数２ｃａｃｈｅ＿ｌｄ（ａｄｄｒ，３，−１）を返す。つぎに、現タイミングｔ1において、補正部９０５は、２つ目のｌｄ命令の実行結果がキャッシュミスであるので（予測結果のミス）、このｌｄ命令の残りの実行時間にペナルティサイクル（６）を追加して有効遅延時間（１＋６＝７サイクル）とする。
【００７６】
補正部９０５は、有効遅延時間から、現タイミングｔ1までに消費した遅延時間（＜現タイミングｔ1−前命令の実行タイミングｔ0＞−設定された間隔）を差し引いて、現タイミングｔ1から超過した有効遅延時間を求め（７−（６−２）＝３サイクル）、この超過した有効遅延時間を、２つ目のｌｄ命令の実行時間とする。さらに、補正部９０５は、超過した有効遅延時間から本来の実行時間を差し引いて（３−１＝２サイクル）、前命令の遅延時間とする。また、補正部９０５は、有効遅延時間から、現タイミングｔ1までに消費した遅延時間と現タイミングｔ1で超過した有効遅延時間との合計を差し引いて（７−（３＋３）＝１サイクル）、猶予時間とする。
【００７７】
補正部９０５は、タイミングｔ1において、２つ目のｌｄ命令の遅延時間を補正した後、ヘルパー関数２ｃａｃｈｅ＿ｌｄ（ａｄｄｒ，２，１）を返す。この補正により、現タイミングｔ1に補正値（３サイクル）を付加したタイミングがｌｄ命令の実行完了のタイミングとなり、そのタイミングから、以降のｍｕｌｔ命令、ａｄｄ命令の実行時間が加算されていくことになる。
【００７８】
図１５（Ｄ）は、計算装置１００の処理と比較するために、従来技術によるキャッシュミス時のサイクル数を単純な加算により求めた場合の誤差の大きさを示す。図１５（Ｄ）の場合には、２つのｌｄ命令それぞれに与えられたペナルティにもとづく遅延時間をそのまま加算しているため、大きな誤差（８サイクル）が生じていることがわかる。図１５（Ｃ）に示す補正部９０５の処理でも、図１５（Ｂ）に示すように正しくシミュレーションされる場合に比べて誤差（１サイクル）があるが、従来手法に比べて、非常に高精度に求められることがわかる。
【００７９】
図１６は、補正部によるｌｄ命令の実行結果に対する補正例を示す図である。２つのキャッシュ処理が実行されるケースで１つのキャッシュミスが生じた場合の補正例を説明する。図１６の例では、図１５で示す説明例と同様の５つの命令のシミュレーションが実行される。
【００８０】
図１６（Ａ）は、２つのキャッシュ処理での予測結果が「キャッシュヒット」の場合の命令実行タイミングのチャート例を示す。この予測ケースでは、図１５（Ａ）の場合と同様に、２つのｌｄ命令が、２サイクル分（通常の１サイクル＋付加した１サイクル）をあけて実行されるものとする。図１６（Ｂ）は、１つ目のｌｄ命令が予測結果と異なる「キャッシュミス」となり、２つ目のｌｄ命令の結果が予測結果（キャッシュヒット）である場合の命令実行タイミングのチャート例を示す。この予測ミスのケースでは、１つ目のｌｄ命令にペナルティサイクル（６サイクル）分の遅延が生じる。２つ目のｌｄ命令とｍｕｌｔ命令は、遅延の影響を受けずに実行される。２つのａｄｄ命令の実行は、１つ目のｌｄ命令の完了まで遅延することになる。図１６（Ｃ）は、補正部９０５による補正後の命令実行タイミングチャートの例を示す。
【００８１】
補正部９０５は、図１４を用いて説明したように、タイミングｔ0において、１つ目のｌｄ命令の遅延時間を補正し、ヘルパー関数２ｃａｃｈｅ＿ｌｄ（ａｄｄｒ，３，−１）を返す。つぎに、現タイミングｔ1において、補正部９０５は、２つ目のｌｄ命令の実行結果がキャッシュヒットであるので（予測結果）、このｌｄ命令の実行開始から現タイミングｔ1までの時間＜ｔ1−ｔ0−設定された間隔（６−０−２＝４サイクル）＞が、このｌｄ命令の実行時間（２サイクル）より大きいかを判断する。補正部９０５は、２つ目のｌｄ命令の実行開始から現タイミングｔ1までの時間が、このｌｄ命令の実行時間（２サイクル）より大きいので、現タイミングｔ1を、つぎのｍｕｌｔ命令の実行タイミングとする。
【００８２】
そして、補正部９０５は、２つ目のｌｄ命令の実行完了から現タイミングｔ１までの時間を（２サイクル）、つぎの命令に対する遅延時間として扱い、前命令の遅延時間ｐｒｅ＿ｄｅｌａｙ＝２とする。また、補正部９０５は、１つ目のｌｄ命令の有効遅延時間から、現タイミングｔ1までに消費した遅延時間と現タイミングｔ1で超過した有効遅延時間との合計を差し引いて（７−（６＋０）＝１サイクル）、猶予時間ｒｅｐ＿ｄｅｌａｙ＝１とし、ヘルパー関数２ｃａｃｈｅ＿ｌｄ（ａｄｄｒ，１，２）を返す。
【００８３】
図１６（Ｄ）は、計算装置１００の処理と比較するために、従来技術によるキャッシュミス時のサイクル数を単純な加算により求めた場合の誤差の大きさを示す。図１６（Ｄ）の場合には、１つ目のｌｄ命令のペナルティによる遅延時間をそのまま加算しているため誤差が生じていることがわかる。
【００８４】
（実施例１および実施例２にかかる計算装置１００による計算処理手順例）
図１７は、実施例１および実施例２にかかる計算装置による計算処理手順例を示すフローチャートである。計算装置１００は、ターゲットプログラムｐｇｒの性能値の計算を終了したか否かを判断する（ステップＳ１７０１）。終了していない場合（ステップＳ１７０１：Ｎｏ）、計算装置１００は、計算用コードの生成処理を行う（ステップＳ１７０２）。
【００８５】
つぎに、計算装置１００は、対象ブロックｂに関連付けられた計算用コードを実行する（ステップＳ１７０３）。また、計算装置１００は、ターゲットＣＰＵ１０１が対象ブロックｂを実行した場合の対象ブロックｂについての動作のシミュレーションｓｉｍを実行する（ステップＳ１７０４）。対象ブロックｂについての動作のシミュレーションｓｉｍの実行結果を計算用コードの実行に利用する場合、計算用コードの実行では、対象ブロックｂについて動作のシミュレーションｓｉｍの実行が終了するのを待機する。
【００８６】
ステップＳ１７０３およびステップＳ１７０４のつぎに、計算装置１００は、計算用コードの最適化処理を行い（ステップＳ１７０５）、ステップＳ１７０１へ戻る。ステップＳ１７０１において、終了した場合（ステップＳ１７０１：Ｙｅｓ）、計算装置１００は、計算結果を収集し（ステップＳ１７０６）、一連の処理を終了する。ステップＳ１７０６では、例えば、計算装置１００は、各ブロックｂの性能値を合計することによりターゲットＣＰＵ１０１がターゲットプログラムｐｇｒに実行された場合のターゲットプログラムｐｇｒの性能値を得る。
【００８７】
図１８は、実施例１および実施例２にかかる図１７で示した生成処理の詳細な説明を示すフローチャートである。計算装置１００は、対象ブロックｂがコンパイル済みか否かを判断する（ステップＳ１８０１）。計算装置１００は、つぎに計算対象となる対象ブロックｂを、動作のシミュレーションｓｉｍにおけるＰＣ（Ｐｒｏｇｒａｍ  Ｃｏｕｎｔｅｒ）の値によって特定できる。また、計算装置１００は、対象ブロックｂを計算用コードに含まれる機能コードの実行結果に基づいて特定できる。
【００８８】
対象ブロックｂがコンパイル済みでない場合（ステップＳ１８０１：Ｎｏ）、計算装置１００は、ターゲットプログラムｐｇｒから対象ブロックｂを分割して取得する（ステップＳ１８０２）。つぎに、計算装置１００は、対象ブロックｂ内の外部依存命令を検出する（ステップＳ１８０３）。
【００８９】
そして、計算装置１００は、予測情報３２１に基づいて、外部依存命令についての予測ケースを設定する（ステップＳ１８０４）。つづいて、計算装置１００は、タイミング情報３２０に基づいて、設定した予測ケースにおける各命令の性能値の予測シミュレーションを行う（ステップＳ１８０５）。つぎに、計算装置１００は、対象ブロックｂをコンパイルして得られる機能コードと、予測シミュレーション結果に基づくコードと、を有する計算用コードを生成し（ステップＳ１８０６）、一連の処理を終了する。ステップＳ１８０６において生成される計算用コードは、例えば、第１計算用コードである。
【００９０】
また、ステップＳ１８０１において、対象ブロックｂがコンパイル済みである場合（ステップＳ１８０１：Ｙｅｓ）、一連の処理を終了する。
【００９１】
図１９は、実施例１および実施例２にかかる図１７で示したコード最適化処理の詳細な説明を示すフローチャートである。計算装置１００は、計算用コードを取得する（ステップＳ１９０１）。計算装置１００は、計算用コードのうち、呼び出し命令リストＬ＿ｈｅｌｐｅｒ内のアドレスが示すヘルパー関数１呼び出し命令を性能計算命令に置換する（ステップＳ１９０２）。計算装置１００は、計算用コードのうち、呼び出し命令リストＬ＿ｈｅｌｐｅｒ内のアドレスが示すヘルパー関数１呼び出し命令以外の、データキャッシュメモリ１００１についてのヘルパー関数１呼び出し命令を検出する（ステップＳ１９０３）。計算装置１００は、検出したヘルパー関数１呼び出し命令を、データキャッシュメモリ１００１についてのヘルパー関数２呼び出し命令に置換し（ステップＳ１９０４）、一連の処理を終了する。
【００９２】
図２０は、実施例１にかかる計算装置によるデータキャッシュメモリについてのヘルパー関数１に従う計算処理手順例を示すフローチャートである。計算装置１００は、データキャッシュメモリ１００１が使用可能な状態か否かを判断する（ステップＳ２００１）。データキャッシュメモリ１００１が使用可能な状態である場合（ステップＳ２００１：Ｙｅｓ）、計算装置１００は、動作のシミュレーションｓｉｍにおけるアクセス先の属性がデータキャッシュメモリ１００１を使用可能なことを示す属性か否かを判断する（ステップＳ２００２）。
【００９３】
属性がデータキャッシュメモリ１００１を使用可能なことを示す属性であると判断された場合（ステップＳ２００２：Ｙｅｓ）、計算装置１００は、動作のシミュレーションｓｉｍにおいてキャッシュアクセスの結果が予測ケースと一致しているか否かを判断する（ステップＳ２００３）。キャッシュアクセスの結果とは、データキャッシュメモリ１００１の動作結果である。キャッシュアクセスの結果が予測ケースと一致している場合（ステップＳ２００３：Ｙｅｓ）、計算装置１００は、予測シミュレーションによって得られた性能値を出力し（ステップＳ２００４）、一連の処理を終了する。キャッシュアクセスの結果が予測ケースと一致していない場合（ステップＳ２００３：Ｎｏ）、計算装置１００は、ステップＳ２００７へ移行する。
【００９４】
属性がデータキャッシュメモリ１００１を使用可能なことを示す属性でないと判断された場合（ステップＳ２００２：Ｎｏ）、計算装置１００は、現ヘルパー関数１呼び出し命令のアドレスを呼び出し命令リストＬ＿ｈｅｌｐｅｒへ出力する（ステップＳ２００５）。計算装置１００は、予測ケースがヒットであるか否かを判断する（ステップＳ２００６）。予測ケースがヒットである場合（ステップＳ２００６：Ｙｅｓ）、計算装置１００は、予測シミュレーションによって得られた性能値を補正する（ステップＳ２００７）。そして、計算装置１００は、補正した性能値を出力し（ステップＳ２００８）、一連の処理を終了する。予測ケースがヒットでない場合（ステップＳ２００６：Ｎｏ）、計算装置１００は、ステップＳ２００４へ移行する。
【００９５】
ステップＳ２００１において、データキャッシュメモリ１００１が使用可能な状態でない場合（ステップＳ２００１：Ｎｏ）、計算装置１００は、ステップＳ２００６へ移行する。
【００９６】
図２１は、実施例１にかかる計算装置によるデータキャッシュメモリについてのヘルパー関数２に従う計算処理手順の一例を示すフローチャートである。データキャッシュメモリ１００１についてのヘルパー関数２は、データキャッシュメモリ１００１についてのヘルパー関数１内の、データキャッシュメモリ１００１の使用可能状態の判断処理、アクセス先の属性の判断処理を指示する命令が省略された関数である。
【００９７】
まず、計算装置１００は、動作のシミュレーションｓｉｍにおいてキャッシュアクセスの結果が予測ケースと一致しているか否かを判断する（ステップＳ２１０１）。一致している場合（ステップＳ２１０１：Ｙｅｓ）、計算装置１００は、予測シミュレーションによって得られた性能値を出力し（ステップＳ２１０２）、一連の処理を終了する。
【００９８】
一致していない場合（ステップＳ２１０１：Ｎｏ）、計算装置１００は、予測シミュレーションによって得られた性能値を補正する（ステップＳ２１０３）。計算装置１００は、補正された性能値を出力し（ステップＳ２１０４）、一連の処理を終了する。
【００９９】
（実施例３）
ターゲットＣＰＵ１０１の初期化中においてキャッシュメモリは使用可能でない状態になる。そのため、ターゲットＣＰＵ１０１の初期化が完了すれば、キャッシュメモリは使用可能な状態になる。そこで、実施例３では、キャッシュメモリが使用可能でない状態から使用可能な状態に変化するまでの間、キャッシュメモリを使用しない場合のアクセス命令の性能値によって対象ブロックｂの性能値を計算する計算用コードを実行する。これにより、キャッシュメモリを使用可能でない状態の期間における対象ブロックｂの性能値の計算量の減少を図ることができ、ターゲットプログラムｐｇｒの性能値の計算を高速化させることができる。
【０１００】
また、実施例３では、実施例１または２で説明した機能や構成と同一の機能や構成についての詳細な説明を省略する。また、実施例３では、実施例１および実施例２と同様にデータキャッシュメモリ１００１を例に挙げるが、命令キャッシュメモリであってもよい。
【０１０１】
また、ターゲットＣＰＵ１０１の初期化中においてＴＬＢは使用可能でない状態になる。そのため、ターゲットＣＰＵ１０１の初期化が完了すれば、ＴＬＢは使用可能な状態になる。そこで、実施例３では、ＴＬＢが使用可能でない状態から使用可能な状態に変化するまでの間、ＴＬＢを使用しない場合のアクセス命令の性能値によって対象ブロックｂの性能値を計算する計算用コードを実行する。これにより、ＴＬＢを使用可能でない状態の期間における対象ブロックｂの性能値の計算量の減少を図ることができ、ターゲットプログラムｐｇｒの性能値の計算を高速化させることができる。
【０１０２】
（実施例３にかかる計算装置１００の機能的構成例）
図２２は、実施例３にかかる計算装置の機能的構成例を示すブロック図である。計算装置１００は、コード変換部３０１と、コード実行部３０２と、コード最適化部２２０１と、シミュレーション情報収集部３０４と、を有する。
【０１０３】
図２２に示すコード変換部３０１からシミュレーション情報収集部３０４の処理は、例えば、ホストＣＰＵ２０１がアクセス可能なディスク２０５などの記憶装置に記憶された計算プログラムにコーディングされる。そして、ホストＣＰＵ２０１が記憶装置に記憶された計算プログラムを読み出して、計算プログラムにコーディングされている処理を実行する。これにより、コード変換部３０１からシミュレーション情報収集部３０４の処理が実現される。また、各部の処理結果は、例えば、ＲＡＭ２０３、ディスク２０５などの記憶装置に記憶される。
【０１０４】
具体的には、コード変換部３０１は、ブロック分割部３１１と、第１判断部２２１１と、第２判断部２２１２と、予測シミュレーション実行部３１３と、コード生成部３１４と、を有する。ブロック分割部３１１は実施例１で説明したブロック分割部３１１と同一の機能を有する。
【０１０５】
まず、第１判断部２２１１は、対象ブロックｂをコンパイル済みか否か判断する。第１判断部２２１１による具体的な判断方法は、実施例１で説明した判断部３１２による判断方法と同じである。
【０１０６】
（データキャッシュメモリ）
図２３は、実施例３にかかるデータキャッシュメモリについての計算用コードの生成例１を示す説明図である。コンパイル済みでないと判断された場合、第２判断部２２１２は、動作のシミュレーションｓｉｍにおける対象ブロックｂ内のアクセス命令の実行時にデータキャッシュメモリ１００１が使用可能な状態であるか否かを判断する。なお、ここでは、動作シミュレーションｓｉｍにおいて対象ブロックｂを実行していない。そのため、第２判断部２２１２は、現在の動作シミュレーションｓｉｍにおける状態に基づいて動作シミュレーションｓｉｍにおいて対象ブロックｂ内のアクセス命令の実行時にデータキャッシュメモリ１００１が使用可能な状態であるか否かを判断する。
【０１０７】
データキャッシュメモリ１００１が使用可能な状態であるか否かを判断する。具体的には、第２判断部２２１２は、システム制御レジスタＳＣＴＲＬのＣビットの値を検出する。第２判断部２２１２は、システム制御レジスタＳＣＴＲＬのＣビットの値が０である場合、データキャッシュメモリ１００１が使用可能な状態でないと判断する。第２判断部２２１２は、システム制御レジスタＳＣＴＲＬのＣビットの値が１である場合、データキャッシュメモリ１００１が使用可能な状態であると判断する。
【０１０８】
予測シミュレーション実行部３１３は、予測情報３２１から、対象ブロックｂに含まれる外部依存命令についての各予測ケースを取得して設定する。また、予測シミュレーション実行部３１３は、アクセス命令についてのデータキャッシュメモリ１００１に関する予測ケースを第２判断部２２１２による判断結果に基づいて設定する。例えば、予測シミュレーション実行部３１３は、データキャッシュメモリ１００１が使用可能な状態でないと判断した場合、アクセス命令が実行された場合のデータキャッシュメモリ１００１についての予測ケースを“キャッシュミス”に設定する。例えば、予測シミュレーション実行部３１３は、データキャッシュメモリ１００１が使用可能な状態であると判断した場合、アクセス命令が実行された場合のデータキャッシュメモリ１００１についての予測ケースを“キャッシュヒット”に設定する。
【０１０９】
そして、予測シミュレーション実行部３１３は、タイミング情報３２０を参照して、設定した予測ケースを前提とする場合のブロックｂ内の各命令の実行の進み具合をシミュレーションする。これにより、予測シミュレーション実行部３１３は、設定した予測ケースを前提とする場合の対象ブロックｂ内の各命令の性能値を求める。
【０１１０】
また、コード生成部３１４は、データキャッシュメモリ１００１が使用可能な状態でないと判断した場合、計算用コードｃｃ２３２を生成する。生成された計算用コードｃｃ２３２は、対象ブロックｂに関連付けられて、ＲＡＭ２０３やディスク２０５などの記憶装置に記憶される。計算用コードｃｃ２３２は、データキャッシュメモリ１００１を使用しない場合における対象ブロックｂ内の各命令の性能値によって、対象ブロックｂの性能値をデータキャッシュメモリ１００１の状態によらずに計算するコードである。図２３に示すように、データキャッシュメモリ１００１が使用可能な状態でない場合、計算用コードｃｃ２３２は、データキャッシュメモリ１００１を使用しない場合の性能値を対象ブロックｂの性能値に加算するｌｄ命令の性能計算命令を有する。また、コード実行部３０２は、生成された計算用コードｃｃ２３２を実行する。これにより、計算量の低減を図ることができる。
【０１１１】
データキャッシュメモリ１００１が使用可能な状態でないと判断された場合、コード最適化部２２０１は、コード実行部３０２が対象ブロックｂに関連付けられた計算用コードｃｃ２３２の実行後に、すべての計算用コードを無効化するかを判断する。具体的には、コード最適化部２２０１は、判断部２２２１と、無効化部２２２２と、を有する。
【０１１２】
データキャッシュメモリ１００１が使用可能な状態でないと判断された場合、計算用コードｃｃ２３２の実行後に、判断部２２２１は、データキャッシュメモリ１００１が使用可能な状態であるか否かを判断する。判断部２２２１による判断によって、データキャッシュメモリ１００１が使用可能でない状態から使用可能な状態への変化が検出される。判断部２２２１による判断方法は、第２判断部２２１２による判断方法と同一である。
【０１１３】
データキャッシュメモリ１００１が使用可能な状態でないと判断部２２２１によって判断された場合、無効化部２２２２は、各ブロックｂについての計算用コードｃｃ２３２を無効化しない。例えば、データキャッシュメモリ１００１が使用可能な状態でないと判断部２２２１が判断し、対象ブロックｂがあらたに性能値の計算対象となった場合、コード実行部３０２は、計算用コードｃｃ２３２を実行する。これにより、データキャッシュメモリ１００１が使用可能な状態でない期間は、計算用コードｃｃ２３２によって対象ブロックｂの性能値が計算される。
【０１１４】
一方、データキャッシュメモリ１００１が使用可能な状態であると判断部２２２１が判断した場合、無効化部２２２２は、各ブロックｂについての計算用コードｃｃ２３２を無効化する。具体的には、無効化部２２２２は、各ブロックｂに対応付けられて記憶された計算用コードｃｃ２３２を削除することにより、計算用コードｃｃ２３２を無効化する。これにより、第１判断部２２１１は、あらたに計算対象となった対象ブロックｂに関連付けられた計算用コードが無効化部２２２２によって無効化されたため、対象ブロックｂをコンパイル済みでないと判断する。
【０１１５】
そして、対象ブロックｂをコンパイル済みでないと判断された場合、第２判断部２２１２は、データキャッシュメモリ１００１が使用可能な状態であるか否かを判断する。上述したように、データキャッシュメモリ１００１が使用可能な状態であると判断された場合、予測シミュレーション実行部３１３は、アクセス命令が実行された場合のデータキャッシュメモリ１００１についての予測ケースを“キャッシュヒット”に設定する。予測シミュレーション実行部３１３は、タイミング情報３２０を参照して、設定した予測ケースを前提とする場合のブロックｂ内の各命令の実行の進み具合をシミュレーションする。これにより、予測シミュレーション実行部３１３は、設定した予測ケースを前提とする場合の対象ブロックｂ内の各命令の性能値を求める。
【０１１６】
また、システム制御レジスタＳＣＴＲＬのＣビットの値が１であるため、データキャッシュメモリ１００１が使用可能な状態であると第２判断部２２１２が判断した場合、コード生成部３１４は、計算用コードｃｃ２３３を生成する。計算用コードｃｃ２３３はデータキャッシュメモリ１００１を使用する場合における対象ブロックｂ内の各命令の性能値によって、ブロックｂの性能値を計算するコードである。図２３に示すように、計算用コードｃｃ２３３は、データキャッシュメモリ１００１のキャッシュアクセスの結果に応じてｌｄ命令の性能値を補正するヘルパー関数を呼び出すｌｄ命令のヘルパー関数呼び出し命令を有する。例えば、ここで実施例１に示したヘルパー関数１呼び出し命令を有する計算用コードｃｃ２３３を生成してもよく、これにより、実施例１と実施例３とを組み合わせることができる。
【０１１７】
そして、コード実行部３０２は、生成された計算用コードｃｃ２３３を実行する。また、データキャッシュメモリ１００１が使用可能でない状態から使用可能な状態に一旦変化すると、再度使用可能でない状態に変化しない。ターゲットＣＰＵ１０１の初期化中においてデータキャッシュメモリ１００１は使用可能でない状態になる。そのため、ターゲットＣＰＵ１０１の初期化が完了すれば、データキャッシュメモリ１００１は使用可能な状態になる。また、データキャッシュメモリ１００１が使用可能な状態であると第２判断部２２１２が判断した場合、実施例３にかかるコード最適化部２２０１は処理を行わない。
【０１１８】
（ＴＬＢ）
図２４は、実施例３にかかるＴＬＢについての計算用コードの生成例２を示す説明図である。ＴＬＢ２４０１の場合もデータキャッシュメモリ１００１の場合と同様に、各部の処理が行われる。そのため、第２判断部２２１２は、ＴＬＢ２４０１が使用可能な状態であるか否かを判断する。具体的には、第２判断部２２１２は、システム制御レジスタＳＣＴＲＬのＭビットの値を検出する。第２判断部２２１２は、システム制御レジスタＳＣＴＲＬのＭビットの値が０である場合、ＴＬＢ２４０１が使用可能な状態でないと判断する。第２判断部２２１２は、システム制御レジスタＳＣＴＲＬのＭビットの値が１である場合、ＴＬＢ２４０１が使用可能な状態であると判断する。
【０１１９】
予測シミュレーション実行部３１３は、予測情報３２１に基づいて、対象ブロックｂに含まれる外部依存命令についての各予測ケースを取得して設定する。また、予測シミュレーション実行部３１３は、アクセス命令についてのデータキャッシュメモリ１００１に関する予測ケースを第２判断部２２１２による判断結果に基づいて設定する。例えば、ＴＬＢ２４０１が使用可能な状態でないと判断された場合、予測シミュレーション実行部３１３は、アクセス命令が実行された場合のデータキャッシュメモリ１００１についての予測ケースを“ＴＬＢ使用不可”に設定する。例えば、予測シミュレーション実行部３１３は、ＴＬＢ２４０１が使用可能な状態であると判断した場合、アクセス命令が実行された場合のＴＬＢ２４０１についての予測ケースを“キャッシュヒット”に設定する。
【０１２０】
そして、予測シミュレーション実行部３１３は、上述したように、設定した予測ケースを前提とする場合の対象ブロックｂ内の各命令の性能値を求める。
【０１２１】
また、コード生成部３１４は、ＴＬＢ２４０１が使用可能な状態でないと第２判断部２２１２が判断した場合、計算用コードｃｃ２４２を生成する。計算用コードｃｃ２４２は、データキャッシュメモリ１００１を使用しない場合における対象ブロックｂ内の各命令の性能値によって、対象ブロックｂの性能値をＴＬＢ２４０１の状態によらずに計算するコードである。コード実行部３０２は、生成された計算用コードｃｃ２４２を実行する。図２４に示すように、ＴＬＢ２４０１が使用可能な状態でない場合、計算用コードｃｃ２４２は、ＴＬＢ２４０１を使用しない場合の性能値を対象ブロックｂの性能値に加算するｌｄ命令の性能計算命令を有する。
【０１２２】
コード実行部３０２とコード最適化部２２０１などの処理については、データキャッシュメモリ１００１の場合と同様であるため、詳細な説明を省略する。
【０１２３】
また、コード生成部３１４は、ＴＬＢ２４０１が使用可能な状態であると第２判断部２２１２が判断した場合、計算用コードｃｃ２４３を生成する。計算用コードｃｃ２４３は、ＴＬＢ２４０１を使用する場合における対象ブロックｂ内の各命令の性能値によって、対象ブロックｂの性能値を計算するコードである。図２４に示すように、計算用コードｃｃ２４３は、ＴＬＢ２４０１検索の結果に応じてｌｄ命令の性能値を補正するヘルパー関数を呼び出すｌｄ命令のヘルパー関数呼び出し命令を有する。例えば、ここで実施例４に示すヘルパー関数１呼び出し命令を有する計算用コードｃｃ２４３を生成してもよく、これにより、実施例３と実施例４とを組み合わせることができる。
【０１２４】
理解の容易化のために、ＴＬＢ２４０１とデータキャッシュメモリ１００１との各々について計算用コードｃｃ２４３の生成例を区別して説明したが、実際には同一の性能計算命令や同一のヘルパー関数によって表される。
【０１２５】
（実施例３にかかる計算装置１００による計算処理手順例）
実施例３では、実施例１および実施例２にかかる計算装置による計算処理手順例と同一の計算処理手順例については説明せずに、異なる計算処理手順について詳細に説明する。
【０１２６】
図２５は、実施例３にかかる図１７で示した生成処理の詳細な説明を示すフローチャートである。計算装置１００は、対象ブロックｂがコンパイル済みか否かを判断する（ステップＳ２５０１）。計算装置１００は、つぎに計算対象となる対象ブロックｂを、動作のシミュレーションｓｉｍにおけるＰＣの値によって特定できる。また、計算装置１００は、対象ブロックｂを計算用コードに含まれる機能コードの実行結果に基づいて特定できる。
【０１２７】
対象ブロックｂがコンパイル済みでない場合（ステップＳ２５０１：Ｎｏ）、計算装置１００は、ターゲットプログラムｐｇｒから対象ブロックｂを分割して取得する（ステップＳ２５０２）。計算装置１００は、対象ブロックｂ内の外部依存命令を検出する（ステップＳ２５０３）。
【０１２８】
計算装置１００は、動作のシミュレーションｓｉｍにおけるデータキャッシュメモリ１００１が使用可能な状態かを判断する（ステップＳ２５０４）。具体的には、計算装置１００は、動作のシミュレーションｓｉｍにおけるシステム制御レジスタＳＣＴＲＬのＣビットの値に基づいて判断する。計算装置１００は、動作のシミュレーションｓｉｍにおけるＴＬＢ２４０１が使用可能な状態かを判断する（ステップＳ２５０５）。具体的には、計算装置１００は、動作のシミュレーションｓｉｍにおけるシステム制御レジスタＳＣＴＲＬのＣビットの値に基づいて判断する。
【０１２９】
計算装置１００は、予測情報３２１と使用可能な状態であるかの判断結果と、に基づいて、外部依存命令についての予測ケースを設定する（ステップＳ２５０６）。計算装置１００は、タイミング情報３２０に基づいて、設定した予測ケースにおける各命令の性能値の予測シミュレーションを行う（ステップＳ２５０７）。計算装置１００は、対象ブロックｂをコンパイルして得られる機能コードと、予測シミュレーション結果に基づくコードと、を有する計算用コードを生成し（ステップＳ２５０８）、一連の処理を終了する。ステップＳ２５０８において生成される計算用コードは、第１計算用コードである。
【０１３０】
また、ステップＳ２５０１において、対象ブロックｂがコンパイル済みである場合（ステップＳ２５０１：Ｙｅｓ）、一連の処理を終了する。
【０１３１】
図２６は、実施例３にかかる図１７で示したコード最適化処理の詳細な説明を示すフローチャートである。計算装置１００は、データキャッシュメモリ１００１が使用可能でない状態から使用可能な状態に変化したか否かを判断する（ステップＳ２６０１）。変化していない場合（ステップＳ２６０１：Ｎｏ）、計算装置１００は、ＴＬＢ２４０１が使用可能でない状態から使用可能な状態に変化したか否かを判断する（ステップＳ２６０２）。ステップＳ２６０２において変化した場合（ステップＳ２６０２：Ｙｅｓ）、またはステップＳ２６０１において変化した場合（ステップＳ２６０１：Ｙｅｓ）、計算装置１００は、各ブロックｂに関連付けられて記憶された計算用コードを無効化し（ステップＳ２６０３）、一連の処理を終了する。具体的には、計算装置１００は、各ブロックｂに関連付けられて記憶された計算用コードを削除する。
【０１３２】
一方、変化していない場合（ステップＳ２６０２：Ｎｏ）、計算装置１００は、一連の処理を終了する。また、ステップＳ２６０１とステップＳ２６０２とについては、いずれが先に実行されてもよい。例えば、ステップＳ２６０３において、計算用コードが無効化された場合、ステップＳ２５０１においてコンパイル済みでないと判断され、対象ブロックｂについてのあらたな計算用コードが生成される。
【０１３３】
（実施例４）
ターゲットＣＰＵ１０１がＡＲＭプロセッサの場合、ターゲットＣＰＵ１０１は第１モードと、第１モードよりもターゲットＣＰＵ１０１の動作の制限が小さい第２モードと、の２つの動作モードを有する。第１モードは、ユーザモードと称し、第２モードは、特権モードである。特権モードとユーザモードとの２つの動作モードを有する。ユーザモード以外の動作モードはすべて特権モードと呼ばれる。特権モードは、ユーザモードよりプロセッサの動作の制限が少ない動作モードである。そのため、特権モードではカーネルなどが記憶されたシステム領域にアクセスすることができる。特権モード時のシステム領域へのアクセスは、ＴＬＢ２４０１にヒットするように予め設計される。例えば、ＴＬＢ２４０１では、システム領域を１個のページテーブルエントリで管理する。そして、ＴＬＢ２４０１は、システム領域用の特別なフラグを用いてＴＬＢ２４０１から当該ページテーブルエントリが消去されないように予め設計される。これにより、当該アクセスがＴＬＢ２４０１にヒットするように実現できる。そのため、特権モード時のアクセス命令をターゲットＣＰＵ１０１が実行した場合、システム領域へのアクセスが行われるため、当該アクセス命令についてのＴＬＢ２４０１の動作は“ヒット”となる。
【０１３４】
そこで、実施例４では、動作のシミュレーションｓｉｍにおけるアクセス命令の実行時に動作モードが特権モードの場合、ＴＬＢがヒットを前提とした対象ブロックｂの各命令の性能値によって対象ブロックｂの性能値を計算する計算用コードを生成する。これにより、対象ブロックｂがあらたに計算対象となった場合に、ＴＬＢがヒットであるか否かを判断する処理が行われないため、対象ブロックｂがあらたに計算対象となった場合の計算量の低減を図ることができる。実施例４では、実施例１〜実施例３のいずれかで説明した機能や構成と同一の機能や構成についての詳細な説明を省略する。
【０１３５】
まず、コード生成部３１４は、対象ブロックｂをコンパイルすることによって機能コードを生成する。さらに、コード生成部３１４は、予測シミュレーションによって得た対象ブロックｂ内の各命令の性能値を、対象ブロックｂの性能値に加算させる性能計算命令を生成する。また、コード生成部３１４は、外部依存命令について、ヘルパー関数１を呼び出すヘルパー関数１呼び出し命令を生成する。ヘルパー関数１呼び出し命令は、ヘルパー関数１を呼び出し、ヘルパー関数１に従う処理によって出力される性能値を、対象ブロックｂの性能値に加算する命令である。実施例４にかかるヘルパー関数１に従う処理は、アクセス命令の実行時のターゲットＣＰＵ１０１の動作モードとＴＬＢ２４０１の状態とに基づきアクセス命令の性能値を補正して出力する処理である。
【０１３６】
また、アクセス命令以外の外部依存命令についても、コード生成部３１４は、外部依存命令の実行結果が予測ケースと一致するか否かに基づいて、予測ケースの場合の外部依存命令の性能値を補正する処理を指示するヘルパー関数を生成する。そして、コード生成部３１４は、機能コードに、生成した各性能計算命令およびヘルパー関数１呼び出し命令を追加した第１計算用コードを生成する。生成された第１計算用コードは、対象ブロックｂに関連付けられて、ＲＡＭ２０３やディスク２０５などの記憶装置に記憶される。
【０１３７】
つぎに、コード実行部３０２は、第１計算用コードを実行することにより、対象ブロックｂの性能値を計算する性能シミュレーションを行う。コード実行部３０２は、実施例１と同様に、実行部９０１と、第１判断部９０２と、第２判断部９０３と、出力部９０４と、補正部９０５と、を有する。
【０１３８】
図２７は、実施例４にかかるコード実行部による実行例を示す説明図である。例えば、コード実行部３０２は、第１計算用コードｃｃ２７０１に含まれる命令を順に実行する。そして、実行部９０１は、ｌｄ命令のＴＬＢ２４０１についてのヘルパー関数１呼び出し命令を実行すると、ヘルパー関数１を呼び出し、ヘルパー関数１が指示する処理を実行する。これにより、第１判断部９０２から補正部９０５までの処理が実行される。
【０１３９】
図２７の例では、第１判断部９０２は、ターゲットＣＰＵ１０１がターゲットプログラムｐｇｒを実行する動作のシミュレーションｓｉｍのうちの対象ブロックｂの実行時の動作において、ＴＬＢ２４０１が有効か否かを判断する。例えば、ターゲットＣＰＵ１０１がＡＲＭプロセッサの場合、第１判断部９０２は、動作のシミュレーションｓｉｍのうちの対象ブロックｂの実行時の動作において、システム制御レジスタＳＣＴＲＬのＭビットの値を検出する。そして、第１判断部９０２は、システム制御レジスタＳＣＴＲＬのＭビットの値が０であるか１であるかを判断する。第１判断部９０２は、システム制御レジスタＳＣＴＲＬのＭビットの値が０である場合、ＴＬＢ２４０１が使用可能な状態でないと判断し、システム制御レジスタＳＣＴＲＬのＭビットの値が１である場合、ＴＬＢ２４０１が使用可能な状態であると判断する。
【０１４０】
ＴＬＢ２４０１が使用可能な状態であると判断された場合、第２判断部９０３は、動作のシミュレーションｓｉｍにおいて対象ブロックｂ内のアクセス命令を実行時のターゲットＣＰＵ１０１の動作モードが、特権モードか否かを判断する。
【０１４１】
具体的には、ターゲットＣＰＵ１０１がＡＲＭプロセッサの場合、第２判断部９０３は、ＣＰＳＲレジスタのＭフィールドの値を検出する。そして、第２判断部９０３は、ＣＰＳＲレジスタのＭフィールドの値が“１０００ｂ”の場合、ターゲットＣＰＵ１０１の動作モードが、ユーザモードであると判断する。そして、第２判断部９０３は、ＣＰＳＲレジスタのＭフィールドの値が“１０００ｂ”以外の場合、ターゲットＣＰＵ１０１の動作モードが特権モードであると判断する。
【０１４２】
出力部９０４は、動作モードが特権モードであると判断された場合、呼び出し元であるヘルパー関数１呼び出し命令が記憶された記憶領域のアドレスを呼び出し命令リストＬ＿ｈｅｌｐｅｒに出力する。
【０１４３】
補正部９０５は、動作モードが特権モードであると判断された場合、予測ケースが“ヒット”であれば、アクセス命令の性能値を補正せずに出力する。動作モードが特権モードであると判断された場合、補正部９０５は、予測ケースが“ミスヒット”であれば、タイミング情報３２０に基づいて、ＴＬＢ２４０１の動作が“ヒット”の場合におけるアクセス命令の性能値となるように補正して出力する。
【０１４４】
補正部９０５は、動作モードがユーザモードであると判断された場合、予測ケースが“ミスヒット”であれば、動作のシミュレーションｓｉｍにおけるＴＬＢ２４０１の動作結果が予測ケースと一致するか否かを判断する。補正部９０５は、予測ケースと一致する場合、アクセス命令の性能値を補正せずに出力する。補正部９０５は、予測ケースと一致しない場合、アクセス命令の性能値を補正して出力する。上述例では、予測ケースが“キャッシュヒット”であるため、補正部９０５は、動作のシミュレーションｓｉｍにおけるＴＬＢ２４０１の動作が“ミスヒット”であるか否かを判断する。そして、補正部９０５は、“ミスヒット”であれば、アクセス命令の性能値にタイミング情報３２０内のペナルティの値を加算することにより、性能値を補正して出力する。補正部９０５による補正処理の詳細例については、実施例２に示す。
【０１４５】
また、補正部９０５は、ＴＬＢ２４０１が無効であると判断された場合、タイミング情報３２０に基づいて、アクセス命令の性能値をＴＬＢ２４０１が無効である場合のペナルティの値を加算することにより、性能値を補正して出力する。
【０１４６】
動作モードが特権モードであると判断された場合、コード最適化部２２０１は、第２計算用コードを生成する。第２計算用コードは、ＴＬＢ２４０１の動作が“ヒット”である場合における対象ブロックｂ内の各命令の性能値によって、ホストＣＰＵ２０１が対象ブロックｂを実行した場合の対象ブロックｂの性能値を動作モードによらずに計算するコードである。上述したように、システム領域へのアクセスは、ＴＬＢ２４０１の動作が“ヒット”となるため、ＴＬＢ２４０１の動作が“ヒット”であるか否かに基づいてアクセス命令の性能値を補正する処理を行わなくてよい。
【０１４７】
具体的には、コード最適化部２２０１は、第１計算用コードｃｃ２７０１のうちの、呼び出し命令リストＬ＿ｈｅｌｐｅｒ内のアドレスが示すヘルパー関数１呼び出し命令を、“ヒット”の場合におけるｌｄ命令の性能値を加算させる性能計算命令に置換する。これにより、コード最適化部２２０１は、第２計算用コードを生成する。生成された第２計算用コードは、対象ブロックｂに関連付けられて、ＲＡＭ２０３やディスク２０５などの記憶装置に記憶される。
【０１４８】
また、第２計算用コードが生成されたブロックｂが対象ブロックｂになった場合、判断部３１２は、第２計算コードが対象ブロックｂに関連付けられているため、コンパイル済みであると判断する。そして、コード実行部３０２は、第２計算用コードを実行することにより、対象ブロックｂの性能値を計算する性能のシミュレーションを実行する。上述したように、コード実行部３０２が有する第１判断部９０２から補正部９０５までの処理は、ヘルパー関数１にコーディングされる。そのため、ヘルパー関数１呼び出し命令がコーディングされていない第２計算用コードの実行時には、第１判断部９０２から補正部９０５までの処理は、実行されない。
【０１４９】
これにより、アクセス命令を含む対象ブロックｂがあらたに計算対象となった場合の性能値の計算を高速化することができる。
【０１５０】
動作モードが特権モードでないと判断された場合、コード最適化部２２０１は、第２計算用コードを生成する。第２計算用コードは、ＴＬＢ２４０１の動作が予測ケースの場合における対象ブロックｂ内の各命令の性能値によって、ホストＣＰＵ２０１が対象ブロックｂを実行した場合の対象ブロックｂの性能値を動作モードによらずに計算するコードである。
【０１５１】
（実施例４にかかる計算装置１００による計算処理手順例）
実施例４では、実施例１および実施例２にかかる計算装置１００による計算処理手順例と同一の計算処理手順例については説明せずに、異なる計算処理手順について詳細に説明する。
【０１５２】
図２８は、実施例４にかかる計算装置によるＴＬＢについてのヘルパー関数１に従う計算処理手順例を示すフローチャートである。ＴＬＢ２４０１についてのヘルパー関数１は、例えば、ｓｔ命令、ｌｄ命令などのアクセス命令についての性能シミュレーション用のコードであるヘルパー関数１呼び出し命令がホストＣＰＵ２０１に実行されることによって呼び出される。
【０１５３】
計算装置１００は、動作のシミュレーションｓｉｍにおいてターゲットＣＰＵ１０１のＴＬＢ２４０１が使用可能な状態か否かを判断する（ステップＳ２８０１）。上述したように、ターゲットＣＰＵ１０１がＡＲＭプロセッサの場合、計算装置１００は、動作のシミュレーションｓｉｍにおいてシステム制御レジスタＳＣＴＲＬのＭビットの値が０であるか１であるかを判断する。計算装置１００は、システム制御レジスタＳＣＴＲＬのＭビットの値が０である場合、ＴＬＢ２４０１が使用可能な状態でないと判断し、システム制御レジスタＳＣＴＲＬのＭビットの値が１である場合、ＴＬＢ２４０１が使用可能な状態であると判断する。
【０１５４】
ＴＬＢ２４０１が使用可能な状態である場合（ステップＳ２８０１：Ｙｅｓ）、計算装置１００は、動作のシミュレーションｓｉｍにおいてターゲットＣＰＵ１０１の動作モードが特権モードか否かを判断する（ステップＳ２８０２）。例えば、ターゲットＣＰＵ１０１がＡＲＭプロセッサの場合、計算装置１００は、ＣＰＳＲのＭビットの値に基づいて、特権モードか否かを判断する。計算装置１００は、ＣＰＳＲのＭビットの値が１０００ｂである場合、ユーザモードであると判断する。計算装置１００は、ＣＰＳＲのＭフィールドの値が１０００ｂ以外である場合、特権モードであると判断する。
【０１５５】
特権モードである場合（ステップＳ２８０２：Ｙｅｓ）、計算装置１００は、現ヘルパー関数呼び出し命令のアドレスを呼び出し命令リストＬ＿ｈｅｌｐｅｒへ出力する（ステップＳ２８０３）。計算装置１００は、予測ケースがヒットか否かを判断する（ステップＳ２８０４）。予測ケースがヒットである場合（ステップＳ２８０４：Ｙｅｓ）、計算装置１００は、ステップＳ２８０６へ移行する。予測ケースがヒットでない場合（ステップＳ２８０４：Ｎｏ）、計算装置１００は、ステップＳ２８０９へ移行する。
【０１５６】
特権モードでは、ｌｄ命令やｓｔ命令においてシステム領域へのアクセスが行われる。上述したように、システム領域へのアクセスについては、ＴＬＢ２４０１検査の結果がヒットとなる。そのため、ＴＬＢ２４０１ヒットの場合の性能値が出力される。
【０１５７】
また、ステップＳ２８０２において、特権モードでない場合（ステップＳ２８０２：Ｎｏ）、計算装置１００は、動作のシミュレーションｓｉｍにおけるＴＬＢ２４０１検索の結果が予測ケースと一致しているか否かを判断する（ステップＳ２８０５）。一致している場合（ステップＳ２８０５：Ｙｅｓ）、計算装置１００は、予測シミュレーションによって得られた性能値を出力し（ステップＳ２８０６）、一連の処理を終了する。一致していない場合（ステップＳ２８０５：Ｎｏ）、計算装置１００は、予測シミュレーションによって得られた性能値を補正する（ステップＳ２８０９）。ここでは、タイミング情報３２０に含まれるＴＬＢ使用可能のペナルティの値によって補正される。そして、計算装置１００は、補正された性能値を出力し（ステップＳ２８１０）、一連の処理を終了する。
【０１５８】
また、ステップＳ２８０１において、ＴＬＢ２４０１が使用可能な状態でない場合（ステップＳ２８０１：Ｎｏ）、計算装置１００は、予測シミュレーションによって得られた性能値を補正する（ステップＳ２８０７）。ここでは、タイミング情報３２０に含まれるＴＬＢ使用不可のペナルティの値によって補正される。計算装置１００は、補正された性能値を出力し（ステップＳ２８０８）、一連の処理を終了する。
【０１５９】
図２９は、実施例４にかかる計算装置によるＴＬＢについてのヘルパー関数２に従う計算処理手順例を示すフローチャートである。ＴＬＢ２４０１についてのヘルパー関数２は、ヘルパー関数１における特権モードであるか否かの判断が省略された関数である。計算装置１００は、動作のシミュレーションｓｉｍにおけるＴＬＢ２４０１検索の結果が予測ケースと一致しているか否かを判断する（ステップＳ２９０１）。一致している場合（ステップＳ２９０１：Ｙｅｓ）、計算装置１００は、予測シミュレーションによって得られた性能値を出力し（ステップＳ２９０２）、一連の処理を終了する。一致していない場合（ステップＳ２９０１：Ｎｏ）、計算装置１００は、予測シミュレーションによって得られた性能値を補正する（ステップＳ２９０３）。そして、計算装置１００は、補正された性能値を出力し（ステップＳ２９０４）、一連の処理を終了する。
【０１６０】
（実施例５）
実施例５では、実施例１または４においてヘルパー関数１呼び出し命令を性能計算用命令に置き換える際に、連続する性能計算用命令を集約して１つの性能計算命令とする。これにより、対象ブロックｂがあらたに計算対象となった場合の計算量の低減を図ることができる。また、実施例５では、実施例１〜実施例４のいずれかで説明した機能や構成と同一の機能や構成についての詳細な説明を省略する。
【０１６１】
図３０は、実施例５にかかる計算装置によるコード最適化例を示す説明図である。実施例５にかかるコード最適化部２２０１は、計算用コードｃｃ３０１内のヘルパー関数１呼び出し命令と、連続しうる性能計算命令と、を併合した性能計算命令に置き換えた計算用コードｃｃ３０２−２を生成する。ヘルパー関数１呼び出し命令を単に性能計算命令に置き換えた場合の計算用コードｃｃ３０２−１と比較して、計算量の減少を図ることができる。
【０１６２】
図３１は、コード最適化部の詳細例を示すブロック図である。コード最適化部２２０１は、取得部３１０１と、第１検出部３１０２と、第２検出部３１０３と、算出部３１０４と、置換部３１０５と、を有する。
【０１６３】
まず、実施例１で説明したデータキャッシュメモリ１００１を使用しないと判断したヘルパー関数１呼び出し命令を性能計算命令に置換する例について説明する。取得部３１０１は、対象ブロックｂに関連付けて記憶された計算用コードｃｃ３０１を取得する。
【０１６４】
第１検出部３１０２は、取得された計算用コードｃｃ３０１のうち、データキャッシュメモリ１００１を使用可能なことを示す属性でないと判断されたアクセス命令についてのヘルパー関数１呼び出し命令を検出する。第２検出部３１０３は、検出されたヘルパー関数１呼び出し命令から、データキャッシュメモリ１００１を使用可能なことを示す属性であると判断したアクセス命令についてのヘルパー関数１呼び出し命令までの間にある性能計算命令を検出する。
【０１６５】
例えば、算出部３１０４は、検出された性能計算命令が対象ブロックｂの性能値に加算させる性能値と、データキャッシュメモリ１００１を使用しない場合におけるアクセス命令の性能値と、の合計値を算出する。
【０１６６】
置換部３１０５は、計算用コードｃｃ３０１のうち、検出された性能計算命令と、検出されたヘルパー関数１呼び出し命令とを、算出された合計値を対象ブロックｂの性能値に加算させる性能計算命令に置換する。
【０１６７】
つぎに、実施例４で説明したターゲットＣＰＵ１０１の動作モードが特権モードであると判断されたヘルパー関数１呼び出し命令を性能計算命令に置換する例について説明する。取得部３１０１は、計算用コードｃｃ３０１を取得する。
【０１６８】
第１検出部３１０２は、取得された計算用コードｃｃ３０１のうち、特権モードであると判断されたアクセス命令についてのヘルパー関数１呼び出し命令を検出する。第２検出部３１０３は、検出されたヘルパー関数１呼び出し命令から、特権モードでないと判断されたアクセス命令についてのヘルパー関数１呼び出し命令までの間にある性能計算命令を検出する。
【０１６９】
例えば、算出部３１０４は、検出された性能計算命令が対象ブロックｂの性能値に加算させる性能値と、ＴＬＢに論理アドレスと物理アドレスとの変換情報が格納されている場合におけるアクセス命令の性能値と、の合計値を算出する。
【０１７０】
置換部３１０５は、計算用コードｃｃ３０１のうち、検出された性能計算命令と、検出されたヘルパー関数１呼び出し命令とを、算出された合計値を対象ブロックｂの性能値に加算させる性能計算命令に置換する。
【０１７１】
つぎに、図３２〜図３６を用いてコード最適化部２２０１による詳細な動作例１を示し、図３７〜図４２を用いてコード最適化部２２０１による詳細な動作例２を示す。
【０１７２】
図３２〜図３６は、コード最適化部による詳細な動作例１を示す説明図である。まず、取得部３１０１は、計算用コードｃｃ３２１を取得する。対象ブロックｂ内の各命令についての性能計算命令の数はホストＣＰＵ２０１の構成に基づいて定まる。計算用コードｃｃ３２１の例では、各命令の性能値を対象ブロックｂに加算するための性能計算命令は以下のように３つの命令によって実現されることとする。
性能計算命令１：性能値をレジスタにロード
性能計算命令２：レジスタに性能値を加算
性能計算命令３：レジスタの値を性能値にストア
【０１７３】
第１検出部３１０２は、呼び出し命令リストＬ＿ｈｅｌｐｅｒに含まれるアドレスを１つ選択し、選択したアドレスをｍ＿ｈｅｌｐｅｒとする。そして、第１検出部３１０２は、ｍ＿ｈｅｌｐｅｒが示すヘルパー関数１呼び出し命令を検出する。図３２の例では、理解の容易化のために、先頭からの命令の順番を命令のアドレスとする。呼び出し命令リストＬ＿ｈｅｌｐｅｒには６があるため、第１検出部３１０２は、命令ｉ２のヘルパー関数１呼び出し命令を検出する。
【０１７４】
例えば、第２検出部３１０３は、検出されたヘルパー関数１呼び出し命令の直前にコーディングされた命令が性能計算命令であれば、当該性能計算命令を示すアドレスをｒ＿ｓｔａｒｔとする。また、第２検出部３１０３は、検出したヘルパー関数１呼び出し命令の直前にコーディングされた命令が性能計算命令でなければ、検出したヘルパー関数１呼び出し命令を示すアドレスをｒ＿ｓｔａｒｔとする。図３３の例では、命令ｉ１の性能計算命令１を示すアドレスがｒ＿ｓｔａｒｔである。
【０１７５】
つぎに、第２検出部３１０３は、検出された命令ｉ２のヘルパー関数１呼び出し命令の後続の命令を検索する。そして、第２検出部３１０３は、命令ｉ２のヘルパー関数１呼び出し命令から呼び出し命令リストＬ＿ｈｅｌｐｅｒにアドレスが登録されていないヘルパー関数１呼び出し命令までの間を検索する。第２検出部３１０３は、命令ｉ２のヘルパー関数１呼び出し命令から、登録されていないヘルパー関数１呼び出し命令までの間にある命令のうち、登録されていないヘルパー関数１呼び出し命令の直前の命令を示すアドレスをｒ＿ｅｎｄとする。命令ｉ２のヘルパー関数１呼び出し命令の後続に呼び出し命令リストＬ＿ｈｅｌｐｅｒにアドレスが登録されていないヘルパー関数１呼び出し命令がない場合、第２検出部３１０３は、対象ブロックｂ内の最後の命令を示すアドレスをｒ＿ｅｎｄとする。図３４の例では、ｒ＿ｅｎｄは命令ｉ２のヘルパー１関数呼び出し命令を示すアドレスである。
【０１７６】
算出部３１０４は、ｒ＿ｓｔａｒｔが示す命令からｒ＿ｅｎｄが示す命令までの命令群のうちの性能計算命令が対象ブロックｂの性能値に加算させる性能値を取得する。算出部３１０４は、当該命令群のうちのヘルパー関数１呼び出し命令が対象ブロックｂの性能値に加算させる性能値を取得する。当該命令群のうちのヘルパー関数１呼び出し命令が対象ブロックｂの性能値に加算させる性能値は、例えば、データキャッシュメモリ１００１を使用しない場合におけるアクセス命令の性能値である。また、当該命令群のうちのヘルパー関数１呼び出し命令が対象ブロックｂの性能値に加算させる性能値は、例えば、ＴＬＢに変換情報がある場合におけるアクセス命令の性能値である。図１３に示したヘルパー関数２ｃａｃｈｅ＿ｌｄ（ａｄｄｒｅｓｓ，ｒｅｐ＿ｄｅｌａｙ，ｐｒｅ＿ｄｅｌａｙ）の例では、３つの引数がヘルパー関数ｃａｃｈｅ＿ｌｄに渡される。そのため、ホストＣＰＵ２０１がｘ８６アーキテクチャの場合、具体的にヘルパー関数１呼び出し命令は、
ｐｕｓｈ  ｐｒｅ＿ｄｅｌａｙ：３番目の引数をスタックに入れる
ｐｕｓｈ  ｒｅｐ＿ｄｅｌａｙ：２番目の引数をスタックに入れる
ｐｕｓｈ  ａｄｄｒ  ：１番目の引数をスタックに入れる
ｃａｌｌ  ｃａｃｈｅ＿ｌｄ：ヘルパー関数１ｃａｃｈｅ＿ｌｄを呼び出す
の４つの命令を有する。算出部３１０４は、当該４つの命令のうち、ｐｒｅ＿ｄｅｌａｙなどを参照して、データキャッシュメモリ１００１を使用しない場合の性能値を計算することにより、ヘルパー関数１呼び出し命令の性能値を取得する。
【０１７７】
そして、算出部３１０４は、取得した性能値の合計値を算出する。図３５の例では、命令ｉ１の性能計算命令２の性能値が１であり、命令ｉ２のヘルパー関数１呼び出し命令の性能値が２であるため、合計値ｓｕｍは３である。
【０１７８】
置換部３１０５は、ｒ＿ｓｔａｒｔが示す命令からｒ＿ｅｎｄが示す命令までの命令群に含まれるホスト命令と、合計値ｓｕｍを対象ブロックｂの性能値に加算させる性能計算命令と、の順に並べた命令群を作成する。図３６に示すように、置換部３１０５は、ｒ＿ｓｔａｒｔが示す命令からｒ＿ｅｎｄが示す命令までの命令群を、作成した命令群に置換することにより、計算用コードｃｃ３６２を生成する。置換部３１０５は、置換終了後に呼び出し命令リストＬ＿ｈｅｌｐｅｒから、ｍ＿ｈｅｌｐｅｒを削除する。また、置換部３１０５は、呼び出し命令リストＬ＿ｈｅｌｐｅｒに含まれる各アドレスを、置換前の計算用コードｃｃ３２１と、置換後の計算用コードｃｃ３６２と、に基づいて補正する。つぎに、コード最適化部２２０１は、呼び出し命令リストＬ＿ｈｅｌｐｅｒが空になるまで、取得部３１０１から置換部３１０５までの処理を繰り返す。
【０１７９】
図３７〜図４２は、コード最適化部による詳細な動作例２を示す説明図である。まず、取得部３１０１は、計算用コードｃｃ３７１を取得する。第１検出部３１０２は、呼び出し命令リストＬ＿ｈｅｌｐｅｒに含まれるアドレスを１つ選択し、選択したアドレスをｍ＿ｈｅｌｐｅｒとする。そして、第１検出部３１０２は、ｍ＿ｈｅｌｐｅｒが示すヘルパー関数１呼び出し命令を検出する。図３７の例では、理解の容易化のために、先頭からの命令の順番を命令のアドレスとする。呼び出し命令リストＬ＿ｈｅｌｐｅｒには２があるため、第１検出部３１０２は、命令ｉ１のヘルパー関数１呼び出し命令を検出する。
【０１８０】
例えば、第２検出部３１０３は、検出されたヘルパー関数１呼び出し命令の直前にコーディングされた命令が性能計算命令であれば、当該性能計算命令を示すアドレスをｒ＿ｓｔａｒｔとする。また、第２検出部３１０３は、検出されたヘルパー関数１呼び出し命令の直前にコーディングされた命令が性能計算命令でなければ、検出されたヘルパー関数１呼び出し命令を示すアドレスをｒ＿ｓｔａｒｔとする。図３９の例では、命令ｉ１のヘルパー関数１呼び出し命令を示すアドレスがｒ＿ｓｔａｒｔである。
【０１８１】
つぎに、第２検出部３１０３は、検出された命令ｉ２のヘルパー関数１呼び出し命令の後続の命令を検索する。第２検出部３１０３は、命令ｉ２のヘルパー関数１呼び出し命令から呼び出し命令リストＬ＿ｈｅｌｐｅｒにアドレスが登録されていないヘルパー関数１呼び出し命令までの間を検索する。第２検出部３１０３は、命令ｉ２のヘルパー関数１呼び出し命令から、登録されていないヘルパー関数１呼び出し命令までの間にある命令のうち、登録されていないヘルパー関数１呼び出し命令の直前の命令を示すアドレスをｒ＿ｅｎｄとする。命令ｉ２のヘルパー関数１呼び出し命令の後続に呼び出し命令リストＬ＿ｈｅｌｐｅｒにアドレスが登録されていないヘルパー関数１呼び出し命令がない場合、第２検出部３１０３は、対象ブロックｂ内の最後の命令を示すアドレスをｒ＿ｅｎｄとする。図４０の例では、ｒ＿ｅｎｄは命令ｉ２の性能計算命令を示すアドレスである。
【０１８２】
算出部３１０４は、ｒ＿ｓｔａｒｔが示す命令からｒ＿ｅｎｄが示す命令までの命令群のうちの性能計算命令が対象ブロックｂの性能値に加算させる性能値を取得する。算出部３１０４は、当該命令群のうちのヘルパー関数１呼び出し命令が対象ブロックｂの性能値に加算させる性能値を取得する。そして、算出部３１０４は、取得した性能値の合計値を算出する。図４１の例では、命令ｉ１のヘルパー関数１呼び出し命令の性能値が２であり、命令ｉ２の性能計算命令２の性能値が１であるため、合計値ｓｕｍは３である。
【０１８３】
動作例１と同様に、置換部３１０５は、ｒ＿ｓｔａｒｔが示す命令からｒ＿ｅｎｄが示す命令までの命令群に含まれるホスト命令と、合計値ｓｕｍを対象ブロックｂの性能値に加算させる性能計算命令と、の順に並べた命令群を作成する。図４２に示すように、置換部３１０５は、ｒ＿ｓｔａｒｔが示す命令からｒ＿ｅｎｄが示す命令までの命令群を、作成した命令群に置換することにより、計算用コードｃｃ４２２を生成する。置換部３１０５は、置換終了後に呼び出し命令リストＬ＿ｈｅｌｐｅｒから、ｒ＿ｓｔａｒｔが示す命令からｒ＿ｅｎｄが示す命令までの命令群に含まれるヘルパー関数１呼び出し命令を示すアドレスを削除する。また、置換部３１０５は、呼び出し命令リストＬ＿ｈｅｌｐｅｒに含まれる各アドレスを、置換前の計算用コードｃｃ３７１と、置換後の計算用コードｃｃ４２２と、に基づいて補正する。つぎに、コード最適化部２２０１は、呼び出し命令リストＬ＿ｈｅｌｐｅｒが空になるまで、取得部３１０１から置換部３１０５までの処理を繰り返す。
【０１８４】
このように、計算用コードに含まれる命令数を削減することにより、計算量を減らすことができる。
【０１８５】
（実施例５にかかる計算装置１００による計算処理手順例）
実施例５では、実施例１および実施例２にかかる計算装置１００による計算処理手順例と同一の計算処理手順例については説明せずに、異なる計算処理手順について詳細に説明する。
【０１８６】
図４３および図４４は、図１７で示したコード最適化処理の詳細な説明を示すフローチャートである。まず、計算装置１００は、対象ブロックｂについての計算用コードを取得する（ステップＳ４３０１）。つぎに、計算装置１００は、呼び出し命令リストＬ＿ｈｅｌｐｅｒが空か否かを判断する（ステップＳ４３０２）。空でない場合（ステップＳ４３０２：Ｎｏ）、計算装置１００は、呼び出し命令リストＬ＿ｈｅｌｐｅｒ内のアドレスから先頭のアドレスをｍ＿ｈｅｌｐｅｒに設定する（ステップＳ４３０３）。
【０１８７】
つぎに、計算装置１００は、ｍ＿ｈｅｌｐｅｒが示すヘルパー関数１呼び出し命令の直前の命令が性能計算命令か否かを判断する（ステップＳ４４０１）。性能計算命令でない場合（ステップＳ４４０１：Ｎｏ）、計算装置１００は、ｒ＿ｓｔａｒｔにｍ＿ｈｅｌｐｅｒを設定し（ステップＳ４４０２）、ステップＳ４４０５へ移行する。
【０１８８】
一方、性能計算命令である場合（ステップＳ４４０１：Ｙｅｓ）、計算装置１００は、直前の性能計算命令のアドレスをｒ＿ｓｔａｒｔに設定する（ステップＳ４４０３）。計算装置１００は、呼び出し命令リストＬ＿ｈｅｌｐｅｒにアドレスが含まれていないヘルパー関数１呼び出し命令を、ｍ＿ｈｅｌｐｅｒが示すヘルパー関数１呼び出し命令の後続から検出する（ステップＳ４４０４）。
【０１８９】
つぎに、計算装置１００は、検出できたか否かを判断する（ステップＳ４４０５）。検出できなかった場合（ステップＳ４４０５：Ｎｏ）、計算装置１００は、ｍ＿ｈｅｌｐｅｒをｒ＿ｅｎｄに設定し（ステップＳ４４０６）、ステップＳ４４０８へ移行する。検出できた場合（ステップＳ４４０５：Ｙｅｓ）、計算装置１００は、検出したヘルパー関数１呼び出し命令の直前の命令を示すアドレスをｒ＿ｅｎｄに設定する（ステップＳ４４０７）。
【０１９０】
つぎに、計算装置１００は、ｒ＿ｓｔａｒｔが示す命令からｒ＿ｅｎｄが示す命令までに含まれる性能計算命令の性能値とヘルパー関数１呼び出し命令の性能値を取得する（ステップＳ４４０８）。計算装置１００は、取得した性能値の合計値を算出する（ステップＳ４４０９）。
【０１９１】
計算装置１００は、ｒ＿ｓｔａｒｔが示す命令からｒ＿ｅｎｄが示す命令までに含まれるホスト命令と、算出した合計値を加算させる性能計算命令と、を含む命令群を作成する（ステップＳ４４１０）。計算装置１００は、計算用コードのうち、ｒ＿ｓｔａｒｔが示す命令からｒ＿ｅｎｄが示す命令までに含まれる命令群を作成した命令群に置換する（ステップＳ４４１１）。計算装置１００は、ｒ＿ｓｔａｒｔが示す命令からｒ＿ｅｎｄが示す命令までに含まれるヘルパー関数１呼び出し命令を示すアドレスを呼び出し命令リストＬ＿ｈｅｌｐｅｒから削除し（ステップＳ４４１２）、ステップＳ４３０２へ戻る。
【０１９２】
一方、ステップＳ４３０２において、空である場合（ステップＳ４３０２：Ｙｅｓ）、計算装置１００は、計算用コードのうち、呼び出し命令リストＬ＿ｈｅｌｐｅｒ内のアドレスが示すヘルパー関数１呼び出し命令以外のヘルパー関数１呼び出し命令を検出する（ステップＳ４３０４）。計算装置１００は、検出したヘルパー関数１呼び出し命令をヘルパー関数２呼び出し命令に置換し（ステップＳ４３０５）、一連の処理を終了する。
【０１９３】
以上説明したように、実施例１にかかる計算装置は、動作のシミュレーションｓｉｍにおいてアクセス命令のアクセス先がキャッシュメモリの使用不可である場合、キャッシュメモリの不使用を前提とした該ブロックの性能値を計算する計算用コードを生成する。これにより、該ブロックが再度対象となった際の計算量の低減を図ることができる。
【０１９４】
また、実施例１にかかる計算装置は、計算用コードのうち、キャッシュメモリの使用不可であると判断したアクセス命令のヘルパー関数１呼び出し命令を、キャッシュメモリの使用不可の場合におけるアクセス命令の性能計算用命令に置き換える。これにより、アクセス命令の実行時にキャッシュメモリが使用不可の場合におけるブロックの性能値を計算する計算用コードを容易に生成することができる。
【０１９５】
また、実施例２にかかる計算装置では、対象ブロック内のアクセス命令がキャッシュメモリを使用可能である場合、キャッシュメモリの動作によって性能値を記憶領域の属性によらずに補正してブロックの性能値を計算する計算用コードを生成する。これにより、対象ブロックがあらたに計算対象となった場合に、記憶領域の属性を判断しないため、性能値の計算量の低減を図ることができる。
【０１９６】
また、実施例１にかかる計算装置は、計算用コードのうち、キャッシュメモリの使用不可であると判断したアクセス命令のヘルパー関数１呼び出し命令を、ヘルパー関数２呼び出し命令に置き換える。これにより、アクセス命令の実行時にキャッシュメモリが使用可能な場合におけるブロックの性能値を計算する計算用コードを容易に生成することができる。
【０１９７】
また、実施例３にかかる計算装置は、キャッシュメモリが使用可能でない状態から使用可能な状態に変化するまでの間、キャッシュメモリを使用しない場合のアクセス命令の性能値によって対象ブロックの性能値を計算する計算用コードを実行する。これにより、キャッシュメモリを使用可能でない状態の期間における対象ブロックの性能値の計算量の減少を図ることができ、ターゲットプログラムの性能値の計算を高速化させることができる。
【０１９８】
また、実施例３にかかる計算装置は、キャッシュメモリが使用可能な状態に変化したら、キャッシュメモリを使用する場合におけるブロック内の各命令の性能値によって、ブロックの性能値を計算する計算用コードを生成する。これにより、ターゲットプログラムの性能値の計算結果に誤差が生じるのを防ぐことができる。
【０１９９】
また、実施例３にかかる計算装置は、ターゲットＣＰＵの初期化中においてＴＬＢは使用可能でない状態になる。そのため、ターゲットＣＰＵの初期化が完了すれば、ＴＬＢは使用可能な状態になる。そこで、実施例３では、ＴＬＢが使用可能でない状態から使用可能な状態に変化するまでの間、ＴＬＢを使用しない場合のアクセス命令の性能値によって対象ブロックの性能値を計算する計算用コードを実行する。これにより、ＴＬＢを使用可能でない状態の期間における対象ブロックの性能値の計算量の減少を図ることができ、ターゲットプログラムの性能値の計算を高速化させることができる。
【０２００】
また、実施例３にかかる計算装置は、ＴＬＢが使用可能な状態に変化したら、ＴＬＢを使用する場合におけるブロック内の各命令の性能値によって、ブロックの性能値を計算する計算用コードを生成する。これにより、ターゲットプログラムの性能値の計算結果に誤差が生じるのを防ぐことができる。
【０２０１】
また、実施例４にかかる計算装置は、動作のシミュレーションにおけるアクセス命令の実行時に動作モードが特権モードである場合、ＴＬＢがヒットの場合の対象ブロックの各命令の性能値により対象ブロックの性能値を計算する計算用コードを生成する。これにより、対象ブロックがあらたに計算対象となった場合に、ＴＬＢがヒットであるか否かを判断する処理が行われないため、対象ブロックがあらたに計算対象となった場合の計算量の低減を図ることができる。
【０２０２】
また、実施例５にかかる計算装置は、ヘルパー関数１呼び出し命令を性能計算用命令に置き換える際に、連続する性能計算用命令を集約して１つの性能計算命令とする。これにより、対象ブロックがあらたに計算対象となった場合の計算量の低減を図ることができる。
【０２０３】
なお、本実施の形態で説明した計算方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本計算プログラムは、ディスク、ＵＳＢメモリなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本計算プログラムは、インターネット等のネットワークＮＥＴを介して配布されてもよい。
【０２０４】
上述した実施例１〜実施例５に関し、さらに以下の付記を開示する。
【０２０５】
（付記１）プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算する計算装置であって、
前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時の前記記憶領域の属性が、前記アクセス命令の指示に対して前記プロセッサがキャッシュメモリを使用可能なことを示す属性であるか否かを判断する判断部と、
前記キャッシュメモリを使用可能なことを示す属性でないと前記判断部が判断した場合、前記キャッシュメモリを使用しない場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記属性によらずに計算する計算用コードを生成する生成部と、
前記特定コードがあらたに性能値の計算対象となった場合、生成した前記計算用コードを実行する実行部と、
を有することを特徴とする計算装置。
【０２０６】
（付記２）前記生成部は、前記キャッシュメモリを使用可能なことを示す属性であると判断した場合、前記キャッシュメモリを使用する場合における前記特定コード内の各命令の性能値によって、前記特定コードの性能値を前記属性によらずに計算する計算用コードを生成することを特徴とする付記１に記載の計算装置。
【０２０７】
（付記３）前記計算用コード（以下、「第１計算用コード」と称する。）を生成する前記生成部は、
前記特定コード内の前記アクセス命令と異なる命令の各々について、前記命令の性能値を前記特定コードの性能値に加算させる第１計算命令と、前記アクセス命令について、前記属性に基づく前記アクセス命令の性能値を前記特定コードの性能値に加算させる第２計算命令と、を有する第２計算用コードを取得し、
取得した前記第２計算用コードのうち、前記キャッシュメモリを使用可能なことを示す属性でないと判断した前記アクセス命令についての第２計算命令を、前記キャッシュメモリを使用しない場合における前記アクセス命令の性能を前記特定コードの性能値に加算させる第３計算命令に置換する、
ことにより、前記第１計算用コードを生成することを特徴とする付記１に記載の計算装置。
【０２０８】
（付記４）前記計算用コード（以下、「第１計算用コード」と称する。）を生成する前記生成部は、
前記特定コード内の前記アクセス命令と異なる命令の各々について、前記命令の性能値を前記特定コードの性能値に加算させる第１計算命令と、前記アクセス命令について、前記属性に基づく前記アクセス命令の性能値を前記特定コードの性能値に加算させる第２計算命令と、を有する第２計算用コードを取得し、
取得した前記第２計算用コードの中から、前記キャッシュメモリを使用可能なことを示す属性であると判断した前記アクセス命令についての第２計算命令を、前記キャッシュメモリを使用する場合における前記アクセス命令の性能値を前記特定コードの性能値に加算させる第３計算命令に置換する、
ことにより、前記第１計算用コードを生成することを特徴とする付記２に記載の計算装置。
【０２０９】
（付記５）前記計算用コード（以下、「第１計算用コード」と称する。）を生成する前記生成部は、
前記特定コード内の前記アクセス命令と異なる命令の各々について、前記命令の性能値を前記特定コードの性能値に加算させる第１計算命令と、前記アクセス命令の各々について、前記属性に基づく前記アクセス命令の性能値を前記特定コードの性能値に加算させる第２計算命令と、を有する第２計算用コードを取得し、
取得した前記第２計算用コードの中から、前記キャッシュメモリを使用可能なことを示す属性でないと判断した前記アクセス命令についての第２計算命令を検出し、
検出した前記第２計算命令から、前記キャッシュメモリを使用可能なことを示す属性であると判断した前記アクセス命令についての第２計算命令までの間にある前記第１計算命令を前記第２計算用コードの中から検出し、
検出した前記第１計算命令が前記特定コードの性能値に加算させる前記命令の性能値と、前記キャッシュメモリを使用可能なことを示す属性でないと判断した前記アクセス命令の実行時に前記キャッシュメモリを使用しない場合における前記アクセス命令の性能値と、の合計値を算出し、
前記第２計算用コードのうち、検出した前記第１計算命令と検出した前記第２計算命令とを、前記合計値を前記特定コードの性能値に加算させる第３計算命令に置換する、
ことにより、前記第１計算用コードを生成することを特徴とする付記１または２に記載の計算装置。
【０２１０】
（付記６）プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算する計算装置であって、
前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時の前記記憶領域の属性が、前記アクセス命令の指示に対して前記プロセッサがキャッシュメモリを使用可能なことを示す属性であるか否かを判断する判断部と、
前記キャッシュメモリを使用可能なことを示す属性であると前記判断部が判断した場合、前記キャッシュメモリを使用する場合における前記特定コード内の各命令の性能値によって、前記特定コードの性能値を前記属性によらずに計算する計算用コードを生成する生成部と、
前記特定コードがあらたに性能値の計算対象となった場合、生成した前記計算用コードを実行する実行部と、
を有することを特徴とする計算装置。
【０２１１】
（付記７）プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算する計算装置であって、
前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時に前記プロセッサがアクセス可能なキャッシュメモリが使用可能な状態であるか否かを、前記シミュレーションにおける前記アクセス命令の実行前に判断する第１判断部と、
使用可能な状態でないと前記第１判断部が判断した場合、前記キャッシュメモリを使用しない場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記キャッシュメモリの状態によらずに計算する計算用コードを生成する生成部と、
前記生成部が生成した前記計算用コードを実行する第１実行部と、
前記特定コードがあらたに性能値の計算対象となった場合に、前記シミュレーションにおける前記アクセス命令の実行時に前記プロセッサがアクセス可能なキャッシュメモリが使用可能な状態であるか否かを、前記シミュレーションにおける前記アクセス命令の実行前に判断する第２判断部と、
使用可能な状態でないと前記第２判断部が判断した場合、前記計算用コードを実行する第２実行部と、
を有することを特徴とする計算装置。
【０２１２】
（付記８）前記生成部は、使用可能な状態であると判断した場合、前記キャッシュメモリを使用する場合における前記特定コード内の各命令の性能値によって、前記特定コードの性能値を計算する計算用コードを生成することを特徴とする付記７に記載の計算装置。
【０２１３】
（付記９）プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算する計算装置であって、
前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時に前記プロセッサがアクセス可能なＴＬＢ（Ｔｒａｎｓｌａｔｉｏｎ  Ｌｏｏｋａｓｉｄｅ  Ｂｕｆｆｅｒ）が使用可能な状態か否かを判断する第１判断部と、
使用可能であると前記第１判断部が判断した場合、前記ＴＬＢを使用しない場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記ＴＬＢの状態によらずに計算する計算用コードを生成する生成部と、
前記生成部が生成した前記計算用コードを実行する第１実行部と、
前記特定コードがあらたに性能値の計算対象となった場合に、前記シミュレーションにおける前記アクセス命令の実行時に前記ＴＬＢが使用可能な状態であるか否かを判断する第２判断部と、
使用可能な状態でないと前記第２判断部が判断した場合、前記計算用コードを実行する第２実行部と、
を有することを特徴とする計算装置。
【０２１４】
（付記１０）前記生成部は、使用可能な状態であると判断した場合、前記ＴＬＢを使用する場合における前記特定コード内の各命令の性能値によって、前記特定コードの性能値を計算する計算用コードを生成することを特徴とする付記９に記載の計算装置。
【０２１５】
（付記１１）第１モードと、前記第１モードよりも動作の制限が少ない第２モードと、の動作モードを有するプロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算する計算装置であって、
前記特定コードが性能値の計算対象となった場合、前記プログラムを前記プロセッサが実行する動作のシミュレーションにおける前記アクセス命令の実行時の前記動作モードが前記第２モードであるか否かを判断する判断部と、
前記第２モードであると前記判断部が判断した場合、前記プロセッサがアクセス可能なＴＬＢ（Ｔｒａｎｓｌａｔｉｏｎ  Ｌｏｏｋａｓｉｄｅ  Ｂｕｆｆｅｒ）に前記記憶領域を示す論理アドレスと前記記憶領域を示す物理アドレスとの変換情報が格納されている場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記動作モードによらずに計算する計算用コードを生成する生成部と、
前記特定コードがあらたに性能値の計算対象となった場合、前記生成部が生成した前記計算用コードを実行する実行部と、
を有することを特徴とする計算装置。
【０２１６】
（付記１２）前記生成部は、前記判断部が前記第２モードでないと判断した場合、前記ＴＬＢを使用する場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記動作モードによらずに計算する計算用コードを生成することを特徴とする付記１１に記載の計算装置。
【０２１７】
（付記１３）前記計算用コード（以下、「第１計算用コード」と称する。）を生成する前記生成部は、
前記特定コード内の前記アクセス命令と異なる命令の各々について、前記命令の性能値を前記特定コードの性能値に加算させる第１計算命令と、前記アクセス命令について、前記ＴＬＢに前記変換情報が格納されているか否かに基づく前記アクセス命令の性能値を前記特定コードの性能値に加算させる第２計算命令と、を有する第２計算用コードを取得し、
取得した前記第２計算用コードのうち、前記第２モードであると判断した前記アクセス命令についての第２計算命令を、前記ＴＬＢが変換情報に格納されている場合における前記アクセス命令の性能を前記特定コードの性能値に加算させる第３計算命令に置換する、
ことにより、前記第１計算用コードを生成することを特徴とする付記１１に記載の計算装置。
【０２１８】
（付記１４）前記計算用コード（以下、「第１計算用コード」と称する。）を生成する前記生成部は、
前記特定コード内の前記アクセス命令と異なる命令の各々について、前記命令の性能値を前記特定コードの性能値に加算させる第１計算命令と、前記アクセス命令の各々について、前記ＴＬＢに前記変換情報が格納されているか否かに基づく前記アクセス命令の性能値を前記特定コードの性能値に加算させる第２計算命令と、を有する第２計算用コードを取得し、
取得した前記第２計算用コードの中から、前記第２モードであると判断した前記アクセス命令についての第２計算命令を検出し、
検出した前記第２計算命令から、前記第２モードでないと判断した前記アクセス命令についての第２計算命令までの間にある前記第１計算命令を前記第２計算用コードの中から検出し、
検出した前記第１計算命令が前記特定コードの性能値に加算させる前記命令の性能値と、前記第２モードであると判断した前記アクセス命令の実行時に前記ＴＬＢに変換情報が格納されている場合における前記アクセス命令の性能値と、の合計値を算出し、
前記第２計算用コードのうち、検出した前記第１計算命令と検出した前記第２計算命令とを、前記合計値を前記特定コードの性能値に加算させる第３計算命令に置換する、
ことにより、前記第１計算用コードを生成することを特徴とする付記１１に記載の計算装置。
【０２１９】
（付記１５）プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータが、
前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時の前記記憶領域の属性が、前記アクセス命令の指示に対して前記プロセッサがキャッシュメモリを使用可能なことを示す属性であるか否かを判断し、
前記キャッシュメモリを使用可能なことを示す属性でないと判断した場合、前記キャッシュメモリを使用しない場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記属性によらずに計算する計算用コードを生成し、
前記特定コードがあらたに性能値の計算対象となった場合、生成した前記計算用コードを実行する、
処理を実行することを特徴とする計算方法。
【０２２０】
（付記１６）プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータが、
前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時の前記記憶領域の属性が、前記アクセス命令の指示に対して前記プロセッサがキャッシュメモリを使用可能なことを示す属性であるか否かを判断し、
前記キャッシュメモリを使用可能なことを示す属性であると判断した場合、前記キャッシュメモリを使用する場合における前記特定コード内の各命令の性能値によって、前記特定コードの性能値を前記属性によらずに計算する計算用コードを生成し、
前記特定コードがあらたに性能値の計算対象となった場合、生成した前記計算用コードを実行する、
処理を実行することを特徴とする計算方法。
【０２２１】
（付記１７）プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータが、
前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時に前記プロセッサがアクセス可能なキャッシュメモリが使用可能な状態であるか否かを、前記シミュレーションにおける前記アクセス命令の実行前に判断し、
使用可能な状態でないと判断した場合、前記キャッシュメモリを使用しない場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記キャッシュメモリの状態によらずに計算する計算用コードを生成し、
生成した前記計算用コードを実行し、
前記特定コードがあらたに性能値の計算対象となった場合に、前記シミュレーションにおける前記アクセス命令の実行時に前記プロセッサがアクセス可能なキャッシュメモリが使用可能な状態であるか否かを、前記シミュレーションにおける前記アクセス命令の実行前に判断し、
使用可能な状態でないと判断した場合、前記計算用コードを実行する、
処理を実行することを特徴とする計算方法。
【０２２２】
（付記１８）プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータが、
前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時に前記プロセッサがアクセス可能なＴＬＢ（Ｔｒａｎｓｌａｔｉｏｎ  Ｌｏｏｋａｓｉｄｅ  Ｂｕｆｆｅｒ）が使用可能な状態か否かを判断し、
使用可能であると判断した場合、前記ＴＬＢを使用しない場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記ＴＬＢの状態によらずに計算する計算用コードを生成し、
生成した前記計算用コードを実行し、
前記特定コードがあらたに性能値の計算対象となった場合に、前記シミュレーションにおける前記アクセス命令の実行時に前記ＴＬＢが使用可能な状態であるか否かを判断し、
使用可能な状態でないと判断した場合、前記計算用コードを実行する、
処理を実行することを特徴とする計算方法。
【０２２３】
（付記１９）第１モードと、前記第１モードよりも動作の制限が少ない第２モードと、の動作モードを有するプロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータが、
前記特定コードが性能値の計算対象となった場合、前記プログラムを前記プロセッサが実行する動作のシミュレーションにおける前記アクセス命令の実行時の前記動作モードが前記第２モードであるか否かを判断し、
前記第２モードであると判断した場合、前記プロセッサがアクセス可能なＴＬＢ（Ｔｒａｎｓｌａｔｉｏｎ  Ｌｏｏｋａｓｉｄｅ  Ｂｕｆｆｅｒ）に前記記憶領域を示す論理アドレスと前記記憶領域を示す物理アドレスとの変換情報が格納されている場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記動作モードによらずに計算する計算用コードを生成し、
前記特定コードがあらたに性能値の計算対象となった場合、生成した前記計算用コードを実行する、
処理を実行することを特徴とする計算方法。
【０２２４】
（付記２０）プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータに、
前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時の前記記憶領域の属性が、前記アクセス命令の指示に対して前記プロセッサがキャッシュメモリを使用可能なことを示す属性であるか否かを判断し、
前記キャッシュメモリを使用可能なことを示す属性でないと判断した場合、前記キャッシュメモリを使用しない場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記属性によらずに計算する計算用コードを生成し、
前記特定コードがあらたに性能値の計算対象となった場合、生成した前記計算用コードを実行する、
処理を実行させることを特徴とする計算プログラム。
【０２２５】
（付記２１）プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータに、
前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時の前記記憶領域の属性が、前記アクセス命令の指示に対して前記プロセッサがキャッシュメモリを使用可能なことを示す属性であるか否かを判断し、
前記キャッシュメモリを使用可能なことを示す属性であると判断した場合、前記キャッシュメモリを使用する場合における前記特定コード内の各命令の性能値によって、前記特定コードの性能値を前記属性によらずに計算する計算用コードを生成し、
前記特定コードがあらたに性能値の計算対象となった場合、生成した前記計算用コードを実行する、
処理を実行させることを特徴とする計算プログラム。
【０２２６】
（付記２２）プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータに、
前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時に前記プロセッサがアクセス可能なキャッシュメモリが使用可能な状態であるか否かを、前記シミュレーションにおける前記アクセス命令の実行前に判断し、
使用可能な状態でないと判断した場合、前記キャッシュメモリを使用しない場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記キャッシュメモリの状態によらずに計算する計算用コードを生成し、
生成した前記計算用コードを実行し、
前記特定コードがあらたに性能値の計算対象となった場合に、前記シミュレーションにおける前記アクセス命令の実行時に前記プロセッサがアクセス可能なキャッシュメモリが使用可能な状態であるか否かを、前記シミュレーションにおける前記アクセス命令の実行前に判断し、
使用可能な状態でないと判断した場合、前記計算用コードを実行する、
処理を実行させることを特徴とする計算プログラム。
【０２２７】
（付記２３）プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータに、
前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時に前記プロセッサがアクセス可能なＴＬＢ（Ｔｒａｎｓｌａｔｉｏｎ  Ｌｏｏｋａｓｉｄｅ  Ｂｕｆｆｅｒ）が使用可能な状態か否かを判断し、
使用可能であると判断した場合、前記ＴＬＢを使用しない場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記ＴＬＢの状態によらずに計算する計算用コードを生成し、
生成した前記計算用コードを実行し、
前記特定コードがあらたに性能値の計算対象となった場合に、前記シミュレーションにおける前記アクセス命令の実行時に前記ＴＬＢが使用可能な状態であるか否かを判断し、
使用可能な状態でないと判断した場合、前記計算用コードを実行する、
処理を実行させることを特徴とする計算プログラム。
【０２２８】
（付記２４）第１モードと、前記第１モードよりも動作の制限が少ない第２モードと、の動作モードを有するプロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータに、
前記特定コードが性能値の計算対象となった場合、前記プログラムを前記プロセッサが実行する動作のシミュレーションにおける前記アクセス命令の実行時の前記動作モードが前記第２モードであるか否かを判断し、
前記第２モードであると判断した場合、前記プロセッサがアクセス可能なＴＬＢ（Ｔｒａｎｓｌａｔｉｏｎ  Ｌｏｏｋａｓｉｄｅ  Ｂｕｆｆｅｒ）に前記記憶領域を示す論理アドレスと前記記憶領域を示す物理アドレスとの変換情報が格納されている場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記動作モードによらずに計算する計算用コードを生成し、
前記特定コードがあらたに性能値の計算対象となった場合、生成した前記計算用コードを実行する、
処理を実行させることを特徴とする計算プログラム。
【０２２９】
（付記２５）プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータに、
前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時の前記記憶領域の属性が、前記アクセス命令の指示に対して前記プロセッサがキャッシュメモリを使用可能なことを示す属性であるか否かを判断し、
前記キャッシュメモリを使用可能なことを示す属性でないと判断した場合、前記キャッシュメモリを使用しない場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記属性によらずに計算する計算用コードを生成し、
前記特定コードがあらたに性能値の計算対象となった場合、生成した前記計算用コードを実行する、
処理を実行させる計算プログラムを記録したことを特徴とする記録媒体。
【０２３０】
（付記２６）プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータに、
前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時の前記記憶領域の属性が、前記アクセス命令の指示に対して前記プロセッサがキャッシュメモリを使用可能なことを示す属性であるか否かを判断し、
前記キャッシュメモリを使用可能なことを示す属性であると判断した場合、前記キャッシュメモリを使用する場合における前記特定コード内の各命令の性能値によって、前記特定コードの性能値を前記属性によらずに計算する計算用コードを生成し、
前記特定コードがあらたに性能値の計算対象となった場合、生成した前記計算用コードを実行する、
処理を実行させる計算プログラムを記録したことを特徴とする記録媒体。
【０２３１】
（付記２７）プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータに、
前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時に前記プロセッサがアクセス可能なキャッシュメモリが使用可能な状態であるか否かを、前記シミュレーションにおける前記アクセス命令の実行前に判断し、
使用可能な状態でないと判断した場合、前記キャッシュメモリを使用しない場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記キャッシュメモリの状態によらずに計算する計算用コードを生成し、
生成した前記計算用コードを実行し、
前記特定コードがあらたに性能値の計算対象となった場合に、前記シミュレーションにおける前記アクセス命令の実行時に前記プロセッサがアクセス可能なキャッシュメモリが使用可能な状態であるか否かを、前記シミュレーションにおける前記アクセス命令の実行前に判断し、
使用可能な状態でないと判断した場合、前記計算用コードを実行する、
処理を実行させる計算プログラムを記録したことを特徴とする記録媒体。
【０２３２】
（付記２８）プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータに、
前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時に前記プロセッサがアクセス可能なＴＬＢ（Ｔｒａｎｓｌａｔｉｏｎ  Ｌｏｏｋａｓｉｄｅ  Ｂｕｆｆｅｒ）が使用可能な状態か否かを判断し、
使用可能であると判断した場合、前記ＴＬＢを使用しない場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記ＴＬＢの状態によらずに計算する計算用コードを生成し、
生成した前記計算用コードを実行し、
前記特定コードがあらたに性能値の計算対象となった場合に、前記シミュレーションにおける前記アクセス命令の実行時に前記ＴＬＢが使用可能な状態であるか否かを判断し、
使用可能な状態でないと判断した場合、前記計算用コードを実行する、
処理を実行させる計算プログラムを記録したことを特徴とする記録媒体。
【０２３３】
（付記２９）第１モードと、前記第１モードよりも動作の制限が少ない第２モードと、の動作モードを有するプロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータに、
前記特定コードが性能値の計算対象となった場合、前記プログラムを前記プロセッサが実行する動作のシミュレーションにおける前記アクセス命令の実行時の前記動作モードが前記第２モードであるか否かを判断し、
前記第２モードであると判断した場合、前記プロセッサがアクセス可能なＴＬＢ（Ｔｒａｎｓｌａｔｉｏｎ  Ｌｏｏｋａｓｉｄｅ  Ｂｕｆｆｅｒ）に前記記憶領域を示す論理アドレスと前記記憶領域を示す物理アドレスとの変換情報が格納されている場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記動作モードによらずに計算する計算用コードを生成し、
前記特定コードがあらたに性能値の計算対象となった場合、生成した前記計算用コードを実行する、
処理を実行させる計算プログラムを記録したことを特徴とする記録媒体。
【符号の説明】
【０２３４】
１００  計算装置
１０１  ターゲットＣＰＵ
１０２  キャッシュメモリ
１０３  メモリ
２０１  ホストＣＰＵ
３０１  コード変換部
３０２  コード実行部
３０３  コード最適化部
３０４  シミュレーション情報収集部
３１１  ブロック分割部
３１２，２２２１  判断部
３１３  予測シミュレーション実行部
３１４  コード生成部
９０１  実行部
９０２，２２１１  第１判断部
９０３，２２１２  第２判断部
９０４  出力部
９０５  補正部
１００１  データキャッシュメモリ
２２２２  無効化部
２４０１  ＴＬＢ
３１０１  取得部
３１０２  第１検出部
３１０３  第２検出部
３１０４  算出部
３１０５  置換部
ｂｔ，ｂ  ブロック
ｓｉｍ  動作のシミュレーション
ｃｃ１１，ｃｃ１２，ｃｃ１０１，ｃｃ１１２，ｃｃ１２３，ｃｃ２３２，ｃｃ２３３，ｃｃ２４２，ｃｃ２４３，ｃｃ２７０１，ｃｃ３０１，ｃｃ３０２−１，ｃｃ３０２−２  計算用コード
ｐｇｒ  ターゲットプログラム
【図１】
2014241031.tif 000003
【図２】
2014241031.tif 000004
【図３】
2014241031.tif 000005
【図４】
2014241031.tif 000006
【図５】
2014241031.tif 000007
【図６】
2014241031.tif 000008
【図７】
2014241031.tif 000009
【図８】
2014241031.tif 000010
【図９】
2014241031.tif 000011
【図１０】
2014241031.tif 000012
【図１１】
2014241031.tif 000013
【図１２】
2014241031.tif 000014
【図１３】
2014241031.tif 000015
【図１４】
2014241031.tif 000016
【図１５】
2014241031.tif 000017
【図１６】
2014241031.tif 000018
【図１７】
2014241031.tif 000019
【図１８】
2014241031.tif 000020
【図１９】
2014241031.tif 000021
【図２０】
2014241031.tif 000022
【図２１】
2014241031.tif 000023
【図２２】
2014241031.tif 000024
【図２３】
2014241031.tif 000025
【図２４】
2014241031.tif 000026
【図２５】
2014241031.tif 000027
【図２６】
2014241031.tif 000028
【図２７】
2014241031.tif 000029
【図２８】
2014241031.tif 000030
【図２９】
2014241031.tif 000031
【図３０】
2014241031.tif 000032
【図３１】
2014241031.tif 000033
【図３２】
2014241031.tif 000034
【図３３】
2014241031.tif 000035
【図３４】
2014241031.tif 000036
【図３５】
2014241031.tif 000037
【図３６】
2014241031.tif 000038
【図３７】
2014241031.tif 000039
【図３８】
2014241031.tif 000040
【図３９】
2014241031.tif 000041
【図４０】
2014241031.tif 000042
【図４１】
2014241031.tif 000043
【図４２】
2014241031.tif 000044
【図４３】
2014241031.tif 000045
【図４４】
2014241031.tif 000046