(57)【要約】【課題】シミュレーション時間の短縮化を図ること。【解決手段】検証支援装置１００は、分岐予測テーブル１１０のうちのいずれかのエントリ１１１に、対象ブロック１０２に含まれる分岐命令のアドレスと、当該分岐命令についての分岐予測器１０９の予測結果に関する係数とを対応付けて格納する。検証支援装置１００は、対象ブロック１０２をターゲットＣＰＵが実行した場合の分岐予測器１０９の予測結果が設定された予測ケースである場合についての対象ブロック１０２の性能値を計算可能な実行コード１０４に、格納したエントリのアドレスを関連付ける。検証支援装置１００は、実行コード１０４を実行することにより対象ブロック１０２の性能値を計算する際に、実行コード１０４に関連付けられたアドレスが示すエントリに基づく分岐予測器１０９の動作シミュレーションの実行によって得られる実行結果に基づいて分岐命令の性能値を補正する。【選択図】図１
2016139332.tif 000002
【特許請求の範囲】
【請求項１】
第１プロセッサが、
前記第１プロセッサと異なる第２プロセッサが実行するプログラムのコードを分割して得られるブロックのうち、前記第２プロセッサが前記プログラムを実行した場合の性能値の計算の対象ブロックが、条件付の分岐命令を有するブロックに切り替わった場合に、
前記第２プロセッサがアクセス可能な分岐予測器の動作を模擬するシミュレーションにおける前記分岐命令を示す命令識別情報と、前記命令識別情報が示す前記分岐命令についての前記分岐予測器の予測結果に関する値と、を対応付けて格納可能な所定数の予測情報のうちのいずれかの予測情報に、前記対象ブロックに含まれる前記分岐命令を示す命令識別情報と、前記対象ブロックに含まれる前記分岐命令についての前記分岐予測器の予測結果に関する値とを対応付けて格納し、
前記第２プロセッサが前記対象ブロックを実行した場合の前記分岐予測器の予測結果がヒットおよびミスのいずれか一方を示す情報に基づく前記対象ブロックの性能値を計算可能な実行コードに、前記いずれかの予測情報を示す予測識別情報を関連付け、
前記実行コードを実行することにより前記対象ブロックの性能値を計算する際に、前記実行コードに関連付けられた前記予測識別情報が示す前記予測情報に基づく前記シミュレーションを実行することによって得られる前記シミュレーションの実行結果に基づいて前記分岐命令の性能値を補正する、
処理を実行することを特徴とする検証支援方法。
【請求項２】
前記第１プロセッサが、
前記切り替わった場合に、前記格納する処理と前記関連付ける処理との前に、前記実行コードに前記予測識別情報が関連付けられている場合、前記実行コードに関連付けられた前記予測識別情報が示す前記予測情報に格納された前記命令識別情報が、前記対象ブロックに含まれる前記分岐命令を示す識別情報と一致するか否かを判断し、
一致しないと判断した場合には、前記格納する処理と前記関連付ける処理を行い、一致すると判断した場合には、前記格納する処理と前記関連付ける処理を行わない、
ことを特徴とする請求項１に記載の検証支援方法。
【請求項３】
前記第１プロセッサが、
前記対象ブロックが以前に前記計算の対象となっていない場合に、前記実行コードに関連付けられる前記予測識別情報を格納する領域を、前記第１プロセッサがアクセス可能な記憶装置に確保し、前記対象ブロックが以前に前記計算の対象となった場合に、前記領域を前記記憶装置に確保しない、
前記領域に前記予測識別情報が格納されていない場合に、前記判断する処理を行わずに、前記格納する処理と前記関連付ける処理を行う、
処理を実行し、
前記関連付ける処理では、確保した前記領域に前記予測識別情報を格納することを特徴とする請求項２に記載の検証支援方法。
【請求項４】
第１プロセッサに、
前記第１プロセッサと異なる第２プロセッサが実行するプログラムのコードを分割して得られるブロックのうち、前記第２プロセッサが前記プログラムを実行した場合の性能値の計算の対象ブロックが、条件付の分岐命令を有するブロックに切り替わった場合に、
前記第２プロセッサがアクセス可能な分岐予測器の動作を模擬するシミュレーションにおける前記分岐命令を示す命令識別情報と、前記命令識別情報が示す前記分岐命令についての前記分岐予測器の予測結果に関する値と、を対応付けて格納可能な所定数の予測情報のうちのいずれかの予測情報に、前記対象ブロックに含まれる前記分岐命令を示す命令識別情報と、前記対象ブロックに含まれる前記分岐命令についての前記分岐予測器の予測結果に関する値とを対応付けて格納し、
前記第２プロセッサが前記対象ブロックを実行した場合の前記分岐予測器の予測結果がヒットおよびミスのいずれか一方を示す情報に基づく前記対象ブロックの性能値を計算可能な実行コードに、前記いずれかの予測情報を示す予測識別情報を関連付け、
前記実行コードを実行することにより前記対象ブロックの性能値を計算する際に、前記実行コードに関連付けられた前記予測識別情報が示す前記予測情報に基づく前記シミュレーションを実行することによって得られる前記シミュレーションの実行結果に基づいて前記分岐命令の性能値を補正する、
処理を実行させることを特徴とする検証支援プログラム。
【請求項５】
プロセッサが実行するプログラムのコードを分割して得られるブロックのうち、前記プロセッサが前記プログラムを実行した場合の性能値の計算の対象ブロックが、条件付の分岐命令を有するブロックに切り替わった場合に、
前記プロセッサがアクセス可能な分岐予測器の動作を模擬するシミュレーションにおける前記分岐命令を示す命令識別情報と、前記命令識別情報が示す前記分岐命令についての前記分岐予測器の予測結果に関する値と、を対応付けて格納可能な所定数の予測情報のうちのいずれかの予測情報に、前記対象ブロックに含まれる前記分岐命令を示す命令識別情報と、前記対象ブロックに含まれる前記分岐命令についての前記分岐予測器の予測結果に関する値とを対応付けて格納し、
前記プロセッサが前記対象ブロックを実行した場合の前記分岐予測器の予測結果がヒットおよびミスのいずれか一方を示す情報に基づく前記対象ブロックの性能値を計算可能な実行コードに、前記いずれかの予測情報を示す予測識別情報を関連付け、
前記実行コードを実行することにより前記対象ブロックの性能値を計算する際に、前記実行コードに関連付けられた前記予測識別情報が示す前記予測情報に基づく前記シミュレーションを実行することによって得られる前記シミュレーションの実行結果に基づいて前記分岐命令の性能値を補正する、
処理を実行する制御部を有することを特徴とする検証支援装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、検証支援方法、検証支援プログラム、および検証支援装置に関する。
【背景技術】
【０００２】
従来、命令セットシミュレーションによるプログラムの実行時間を計算する技術が公知である。例えば、分岐命令ごとにシミュレーションした分岐命令の実行処理結果と、シミュレートした分岐予測とを比較し、正しく分岐予測された分岐命令もしくは正しく分岐予測されなかった分岐命令をプロセッサが実行する場合の遅延時間を予測する技術が公知である（例えば、以下特許文献１参照。）。
【０００３】
また、従来、プログラムの性能値を計算するために、ホストＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）によってシミュレーションを行う際にターゲットＣＰＵのターゲットプログラムをホストＣＰＵが実行可能なコードへ変換する技術が公知である。この変換する技術としては、例えば、ＪＩＴコンパイル方式やインタプリタ方式が公知である。ＪＩＴ（Ｊｕｓｔ  Ｉｎ  Ｔｉｍｅ）コンパイラ方式によるシミュレーションでは、例えば、実行中のプログラムに出現するターゲットＣＰＵの命令を、シミュレーションを実行するホストＣＰＵの命令に置き換え、その置き換えた命令を実行することにより、性能値を計算する処理の高速化を図ることができる（例えば、以下特許文献２参照。）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１３−２２２３９２号公報
【特許文献２】特開２０１３−８４１７８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来技術では、分岐予測器の動作を模擬するシミュレーションに際して分岐予測テーブルから分岐命令に対応するエントリを検索するため、シミュレーションに時間がかかるという問題点がある。
【０００６】
１つの側面では、本発明は、シミュレーションにかかる時間の短縮化を図ることができる検証支援方法、検証支援プログラム、および検証支援装置を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の一側面によれば、第１プロセッサが、前記第１プロセッサと異なる第２プロセッサが実行するプログラムのコードを分割して得られるブロックのうち、前記第２プロセッサが前記プログラムを実行した場合の性能値の計算の対象ブロックが、条件付の分岐命令を有するブロックに切り替わった場合に、前記第２プロセッサがアクセス可能な分岐予測器の動作を模擬するシミュレーションにおける前記分岐命令を示す命令識別情報と、前記命令識別情報が示す前記分岐命令についての前記分岐予測器の予測結果に関する値と、を対応付けて格納可能な所定数の予測情報のうちのいずれかの予測情報に、前記対象ブロックに含まれる前記分岐命令を示す命令識別情報と、前記対象ブロックに含まれる前記分岐命令についての前記分岐予測器の予測結果に関する値とを対応付けて格納し、前記第２プロセッサが前記対象ブロックを実行した場合の前記分岐予測器の予測結果がヒットおよびミスのいずれか一方を示す情報に基づく前記対象ブロックの性能値を計算可能な実行コードに、前記いずれかの予測情報を示す予測識別情報を関連付け、前記実行コードを実行することにより前記対象ブロックの性能値を計算する際に、前記実行コードに関連付けられた前記予測識別情報が示す前記予測情報に基づく前記シミュレーションを実行することによって得られる前記シミュレーションの実行結果に基づいて前記分岐命令の性能値を補正する検証支援方法、検証支援プログラム、および検証支援装置が提案される。
【発明の効果】
【０００８】
本発明の一態様によれば、シミュレーションにかかる時間の短縮化を図ることができる。
【図面の簡単な説明】
【０００９】
【図１】図１は、検証支援装置の一動作例を示す説明図である。
【図２】図２は、検証支援装置のハードウェア構成例を示すブロック図である。
【図３】図３は、検証支援装置の機能的構成例を示すブロック図である。
【図４】図４は、設定情報の一例を示す説明図である。
【図５】図５は、ターゲットプログラム例を示す説明図である。
【図６】図６は、実行コード例を示す説明図である。
【図７】図７は、補正処理プログラム例を示す説明図である。
【図８】図８は、検証支援装置による検証支援処理手順例を示すフローチャートである。
【図９】図９は、検証支援装置が行う補正処理手順例を示すフローチャートである。
【発明を実施するための形態】
【００１０】
以下に添付図面を参照して、本発明にかかる検証支援方法、検証支援プログラム、および検証支援装置の実施の形態を詳細に説明する。
【００１１】
図１は、検証支援装置の一動作例を示す説明図である。第１プロセッサを有する検証支援装置１００は、第２プロセッサの性能シミュレーションを実行するコンピュータである。また、性能シミュレーションとは、第２プロセッサがプログラムを実行した場合の性能値を見積もるシミュレーションである。性能値は、例えば、実行時間や消費電力値である。実行時間は、例えばサイクル数である。
【００１２】
以下の説明では、性能評価対象となる第２プロセッサを「ターゲットＣＰＵ」とも称し、検証支援装置１００の第１プロセッサを「ホストＣＰＵ」とも称する。また、ターゲットＣＰＵが実行するプログラムを「ターゲットプログラム１０１」とも称する。
【００１３】
ターゲットＣＰＵは、例えば、ＡＲＭ（登録商標）アーキテクチャのプロセッサである。ターゲットＣＰＵは、例えば、分岐予測を行うＣＰＵであればよい。そのため、ターゲットＣＰＵは、アウトオブオーダー実行のＣＰＵであってもよいし、インオーダー実行のＣＰＵであってもよい。ホストＣＰＵは、例えば、ｘ８６アーキテクチャのプロセッサである。すなわち、ターゲットＣＰＵとホストＣＰＵのアーキテクチャが異なる。このため、検証支援装置１００は、ホストＣＰＵによってシミュレーションを行う際にターゲットＣＰＵのターゲットプログラム１０１をホストＣＰＵが実行可能なコードへ変換する。
【００１４】
本実施の形態では、ターゲットプログラム１０１の変換手法として、ＪＩＴコンパイラ方式を採用する。ＪＩＴコンパイラ方式によるシミュレーションでは、実行中のプログラムに出現するターゲットＣＰＵの命令を、シミュレーションを実行するホストＣＰＵの命令に置き換え、以降では、その置き換えた命令を実行することにより、処理の高速化を図ることができる。
【００１５】
特許文献２のように従来技術では、例えば、ターゲットＣＰＵのターゲットプログラム１０１の実行時に、ターゲットプログラム１０１のコードを区切って所定のブロックｂに分割する。つぎに、従来技術では、例えば、分割したブロックｂについてホストＣＰＵが実行可能な実行コード１０４を生成する。実行コード１０４は、ホストコードとも呼ばれる。そして、検証支援装置１００は、例えば、生成した実行コード１０４を実行することにより、ターゲットＣＰＵがブロックｂを実行した場合の性能値を見積もる。
【００１６】
従来技術では、ターゲットＣＰＵがアクセス可能なハードウェア資源の動作結果に依存して性能値が異なる命令の場合には、発生する確率が高い動作結果に基づいて静的タイミング解析を行う。つぎに、従来技術では、静的タイミング解析の解析結果に基づいて、ターゲットＣＰＵがブロックｂを実行した場合の性能値を見積もるタイミングコード１０６を実行コード１０４に組み込む。そして、従来技術では、実行コード１０４を実行時にハードウェア資源の動作を模擬する動作シミュレーション１０８を実行し、動作シミュレーション１０８の実行結果に基づいて解析結果に基づく性能値を補正する。
【００１７】
従来技術について分岐命令の例を挙げる。ターゲットＣＰＵがアクセス可能な分岐予測器１０９による分岐予測がヒットする場合を前提とした静的タイミング解析が行われるとする。そして、従来技術では、分岐予測器１０９を模擬する動作シミュレーション１０８の分岐予測がミスである場合には、分岐命令についての性能値にペナルティ値を加算することにより性能値が補正される。
【００１８】
ここで、分岐予測について簡単に説明する。パイプライン処理を行っているターゲットＣＰＵでは、分岐が生じるとパイプラインにすでに設定されている命令を捨てる作業が行われるため、処理が遅くなる。そのため、分岐予測は、分岐先を予測し、予測した分岐先に基づいて事前に命令を流し込んでおくことによりパイプライン処理の効率を上げる技術である。
【００１９】
しかしながら、従来技術では、分岐予測器の動作を模擬する動作シミュレーションにおいて、分岐予測器の動作に従い分岐予測テーブルから分岐命令に対応するエントリを検索するため、性能シミュレーションに時間がかかるという問題点がある。
【００２０】
そこで、本実施の形態では、分岐予測テーブルにおける計算の対象ブロックｂに含まれる条件付の分岐命令に応じたエントリを実行コードに関連付けておき、動作シミュレーション時に分岐命令に該当するエントリにだけアクセスする。これにより、動作シミュレーション１０８時に、該分岐予測テーブル１１０から該分岐命令に該当するエントリ１１１の検索を行わなくてよいため、シミュレーション時間の短縮化を図ることができる。
【００２１】
検証支援装置１００は、ターゲットＣＰＵが実行するターゲットプログラム１０１のコードを区切って所定のブロックｂに分割する。検証支援装置１００は、例えば、分岐命令と分岐命令の分岐先などで区切ってもよいし、ベーシックブロック単位で区切ってもよいし、予め定められた任意のコード単位であってもよい。
【００２２】
つぎに、検証支援装置１００は、ターゲットプログラム１０１のコードを分割して得られるブロックｂのうち、対象ブロック１０２が切り替わった場合、対象ブロック１０２の性能値を計算可能な実行コード１０４を生成する。
【００２３】
ここで、対象ブロック１０２とは、静的タイミング解析と性能シミュレーションおよび機能シミュレーションにおける対象となるブロックｂである。機能シミュレーションとは、ターゲットＣＰＵが対象ブロック１０２を実行した場合の実行結果を得るためのシミュレーションである。この機能シミュレーションによって対象ブロック１０２が切り替わる。実行コード１０４は、機能コード１０５とタイミングコード１０６を含む、ホストＣＰＵが実行可能なコードである。
【００２４】
機能コード１０５は、ターゲットプログラム１０１から分割した対象ブロック１０２をコンパイルすることによって得られるホストＣＰＵが実行可能なコードである。検証支援装置１００は、例えば、機能コード１０５を実行することにより機能シミュレーションを実現する。タイミングコード１０６は、ターゲットＣＰＵが対象ブロック１０２を実行した場合の性能値をホストＣＰＵが計算可能なコードである。検証支援装置１００は、例えば、タイミングコード１０６を実行することにより性能シミュレーションを実現する。
【００２５】
検証支援装置１００は、対象ブロック１０２の静的タイミング解析を行うことにより、ターゲットＣＰＵが対象ブロック１０２を実行した場合の性能値を計算可能な実行コード１０４を生成する。まず、具体的には、検証支援装置１００は、例えば、対象ブロック１０２のターゲットコードをコンパイルすることにより、ホストＣＰＵが実行可能な機能コード１０５を含む実行コード１０４を生成する。
【００２６】
そして、検証支援装置１００は、対象ブロック１０２の静的タイミング解析の解析結果に基づいて、ターゲットＣＰＵが対象ブロック１０２を実行した場合の性能値を計算可能なタイミングコード１０６を生成する。そして、検証支援装置１００は、機能コード１０５のみの実行コード１０４にタイミングコード１０６を組み込むことにより、対象ブロック１０２の実行コード１０４を生成する。ここで、実行コード１０４は、ホストＣＰＵが実行するコードであるため、ホストコードとも称する。
【００２７】
また、検証支援装置１００は、対象ブロック１０２が条件付の分岐命令を有するブロックｂに切り替わった場合、所定数の予測情報のうちのいずれかの予測情報に、分岐命令を示す命令識別情報と、分岐予測器１０９の予測結果に関する値とを対応付けて格納する。所定数の予測情報とは、例えば、動作シミュレーション１０８における分岐命令を示す命令識別情報と、命令識別情報が示す分岐命令についての分岐予測器１０９の予測結果に関する値とを対応付けて格納可能な情報である。動作シミュレーション１０８では、ターゲットＣＰＵがアクセス可能な分岐予測器１０９の動作を模擬する。所定数の予測情報とは、例えば、分岐予測器１０９の分岐予測テーブル１１０である。
【００２８】
所定数は、ターゲットＣＰＵの設計者によって機能や性能などに基づき定められてある。分岐命令を示す命令識別情報は、例えば、分岐命令のアドレスである。命令識別情報が示す分岐命令についての分岐予測器１０９の予測結果に関する値とは、例えば、重み付の係数やヒント値などである。ここでは値を係数と呼ぶ。係数については、分岐予測器１０９の種類などによって異なるため、特に限定しない。分岐予測テーブル１１０は、例えば、キーと、係数と、のフィールドを有する。分岐予測テーブル１１０のキーと係数との組み合わせは、単体の予測情報であり、エントリ１１１とも称する。キーのフィールドにはアドレスが設定され、係数のフィールドには重み付の係数が設定される。エントリ１１１−１の例では、キーのフィールドには「０ｘ８００１００」が設定されてあり、係数のフィールドには「（ｗ０，・・・）」が設定されてある。
【００２９】
検証支援装置１００は、例えば、動作シミュレーション１０８における分岐予測テーブル１１０のうちの空きエントリ１１１に、新たに対象ブロック１０２に含まれる条件付の分岐命令のアドレスと係数とを格納する。空きエントリ１１１とは、アドレスと係数とがまだ格納されていないエントリ１１１である。分岐予測器１０９の動作シミュレーション１０８とは、ターゲットＣＰＵがアクセス可能な分岐予測器１０９のモデルに、分岐命令のアドレスや分岐命令の予測結果などが与えられることにより実行される。分岐予測器１０９のモデルとしては、例えば、ハードウェア記述言語などによって分岐予測器１０９の機能を再現するビヘイビアモデルを用いることができる。
【００３０】
具体的に、検証支援装置１００は、例えば、対象ブロック１０２が切り替わった場合に、エントリ１１１を示すアドレスを格納可能な領域をホストＣＰＵがアクセス可能な記憶装置１０３に確保する。記憶装置１０３は、例えば、ホストＣＰＵがアクセス可能であればよい。そのため、記憶装置１０３は、検証支援装置１００が有していてもよいし、ネットワークなどを介して検証支援装置１００と接続されていてもよい。確保された領域は、エントリポインタ１０７とも称する。検証支援装置１００は、確保した領域に“ＮＵＬＬ”を格納しておく。検証支援装置１００は、確保した領域に格納される値と、実行コード１０４と、を関連付ける。
【００３１】
つぎに、検証支援装置１００は、分岐予測器１０９の動作シミュレーション１０８における分岐予測テーブル１１０に空きエントリ１１１が無い場合には、分岐予測テーブル１１０に対して所定ルールに基づきエントリスペースの解放を行う。そして、検証支援装置１００は、解放によって空いたエントリ１１１に新たに対象ブロック１０２に含まれる条件付の分岐命令のアドレスと係数とを格納する。所定ルールについては、特に限定しないが、例えばＬＲＵ（Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅ）などが公知である。
【００３２】
検証支援装置１００は、実行コード１０４に、いずれかのエントリ１１１を示すアドレスを関連付ける。実行コードは、ターゲットＣＰＵが対象ブロック１０２を実行した場合の分岐予測器１０９の予測結果がヒットおよびミスのいずれか一方を示す情報に基づく対象ブロック１０２の性能値を計算可能なコードである。ヒットおよびミスのいずれか一方を示す情報は、発生する確率が高いと推定される予測ケースを示す情報である。
【００３３】
検証支援装置１００は、実行コード１０４を実行することにより対象ブロック１０２の性能値を計算する際に、分岐命令の性能値を補正する。検証支援装置１００は、補正する処理において、実行コード１０４に関連付けられたアドレスが示すエントリ１１１に基づく動作シミュレーション１０８を実行することによって得られる実行結果に基づき分岐命令の性能値を補正する。ここで、実行コード１０４に関連付けられたアドレスが示すエントリ１１１に基づく動作シミュレーション１０８とは、エントリ１１１に基づき分岐予測が行われることを示す。検証支援装置１００は、動作シミュレーション１０８において、関連付けられたアドレスが示すエントリ１１１を直接指定して分岐予測を行うことができる。すなわち、検証支援装置１００は、動作シミュレーション１０８において、関連付けられたアドレスが示すエントリ１１１にだけアクセスして分岐予測を行うことができる。そのため、検証支援装置１００は、動作シミュレーション１０８において、対象ブロック１０２に含まれる分岐命令に対応するエントリ１１１の検索を行わない。
【００３４】
また、本実施の形態では、検証支援装置１００は、格納する処理と関連付ける処理とについて、いずれも実行コード１０４を実行することにより対象ブロック１０２の性能値を計算する際に行う。
【００３５】
検証支援装置１００は、生成した対象ブロック１０２の実行コード１０４を実行することにより、ターゲットＣＰＵが対象ブロック１０２を実行した場合の性能値を算出する。これにより、ターゲットＣＰＵが対象ブロック１０２を実行した場合の性能値を見積もることができる。
【００３６】
これにより、動作シミュレーション１０８の時に条件付の分岐命令に該当するエントリ１１１の分岐予測テーブル１１０の検索を行わなくてよいため、シミュレーション時間の短縮化を図ることができる。
【００３７】
（検証支援装置１００のハードウェア構成例）
図２は、検証支援装置のハードウェア構成例を示すブロック図である。図２において、検証支援装置１００は、ホストＣＰＵ２０１と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）２０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２０３と、ディスクドライブ２０４と、ディスク２０５と、を有する。検証支援装置１００は、Ｉ／Ｆ（Ｉｎｔｅｒ／Ｆａｃｅ）２０６と、入力装置２０７と、出力装置２０８と、を有する。また、ホストＣＰＵ２０１と、ＲＯＭ２０２と、ＲＡＭ２０３と、ディスクドライブ２０４と、Ｉ／Ｆ２０６と、入力装置２０７と、出力装置２０８とは、バス２００によってそれぞれ接続される。
【００３８】
ここで、ホストＣＰＵ２０１は、検証支援装置１００の全体の制御を司る。ＲＯＭ２０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ２０３は、ホストＣＰＵ２０１のワークエリアとして使用される。ディスクドライブ２０４は、ホストＣＰＵ２０１の制御にしたがってディスク２０５に対するデータのリード／ライトを制御する。ディスク２０５は、ディスクドライブ２０４の制御で書き込まれたデータを記憶する。ディスク２０５としては、磁気ディスク、光ディスクなどが挙げられる。
【００３９】
Ｉ／Ｆ２０６は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク２０９に接続され、このネットワーク２０９を介して他の装置に接続される。そして、Ｉ／Ｆ２０６は、ネットワーク２０９と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ２０６には、例えばモデムやＬＡＮアダプタなどを採用することができる。
【００４０】
入力装置２０７は、キーボード、マウス、タッチパネルなど利用者の操作により、各種データの入力を行うインターフェースである。また、入力装置２０７は、カメラから画像や動画を取り込むこともできる。また、入力装置２０７は、マイクから音声を取り込むこともできる。出力装置２０８は、ホストＣＰＵ２０１の指示により、データを出力するインターフェースである。出力装置２０８には、ディスプレイやプリンタが挙げられる。
【００４１】
（検証支援装置１００の機能的構成例）
図３は、検証支援装置の機能的構成例を示すブロック図である。図３において、検証支援装置１００は、コード変換部３１０と、シミュレーション実行部３２０と、シミュレーション情報収集部３３０と、を有する。コード変換部３１０、シミュレーション実行部３２０およびシミュレーション情報収集部３３０は、制御部となる機能である。制御部は、具体的には、例えば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、ディスク２０５などの記憶装置１０３に記憶されたプログラムをホストＣＰＵ２０１に実行させることにより、または、Ｉ／Ｆ２０６により、その機能を実現する。制御部の各処理結果は、例えば、ＲＡＭ２０３、ディスク２０５などの記憶装置１０３に記憶される。
【００４２】
ここで、検証支援装置１００には、ターゲットプログラム１０１と、ターゲットプログラム１０１に関するタイミング情報３４０と、設定情報３５０とが入力される。具体的には、例えば、検証支援装置１００は、図２に示した入力装置２０７を用いた利用者の操作入力により、ターゲットプログラム１０１とタイミング情報３４０と設定情報３５０の入力を受け付ける。
【００４３】
ターゲットプログラム１０１は、性能評価対象となるターゲットＣＰＵが実行するプログラムである。検証支援装置１００は、ターゲットＣＰＵがターゲットプログラム１０１を実行した場合の性能値を見積もる。本実施の形態では、性能値として実行時間を見積もることとする。実行時間は、例えばサイクル数である。本実施の形態では、上述したように、例えば、ターゲットＣＰＵがＡＲＭのプロセッサであり、ホストＣＰＵ２０１がｘ８６系のプロセッサである例を挙げる。
【００４４】
また、図３に示すタイミング情報３４０は、ターゲットコードの各命令について、命令実行時の実行時間の基準値と、命令のうち外部依存命令ごとに、実行結果に応じた遅延時間を定めるペナルティ時間（ペナルティサイクル数）とを示す情報である。タイミング情報３４０は、例えば、ＲＡＭ２０３、ディスク２０５などの記憶装置１０３に記憶される。外部依存命令とは、命令の実行時にターゲットＣＰＵがアクセスするハードウェア資源の状態に依存して実行時間が変化する命令である。ハードウェア資源とは、キャッシュメモリや分岐予測器１０９などが挙げられる。
【００４５】
外部依存命令は、例えば、ロード命令やストア命令などのように、命令の実行結果が命令キャッシュ、データキャッシュ、ＴＬＢ（Ｔｒａｎｓｌａｔｉｏｎ  Ｌｏｏｋａｓｉｄｅ  Ｂｕｆｆｅｒ）などの状態に依存して変化する命令であったり、分岐予測、コール／リターンのスタックなどの処理を行う命令である。また、タイミング情報３４０には、例えば、ターゲットコードの各命令について、命令実行時の各処理要素（段階）と使用可能なレジスタとの対応を示す情報が含まれていてもよい。
【００４６】
図４は、設定情報の一例を示す説明図である。設定情報３５０は、ターゲットコードの外部依存命令の処理において、生じる確率が高い予測ケースを定めた情報である。設定情報３５０は、処理内容、予測ケースのフィールドを有する。処理内容のフィールドには、ターゲットコードの外部依存命令の処理内容が格納される。予測ケースのフィールドには、外部依存命令の処理の予測結果が格納される。設定情報３５０は、レコード４００−１〜レコード４００−５などを有する。設定情報３５０は、例えば、命令キャッシュ、データキャッシュ、ＴＬＢ検索、分岐予測、コール／リターンがすべてヒットするという予測ケースを示す。設定情報３５０は、例えば、ＲＡＭ２０３、ディスク２０５などの記憶装置１０３に記憶される。
【００４７】
ここでは、分岐予測について例を挙げる。分岐予測結果が実際の分岐結果と一致する場合、予測結果がヒットであり、分岐予測結果が実際の分岐結果と一致しない場合、予測結果がミスである。レコード４００−４では、分岐予測の予測ケースはヒットとなる確率が高いことを示す。
【００４８】
また、分岐予測について簡単に説明する。パイプライン処理を行っているターゲットＣＰＵでは、分岐が生じるとパイプラインにすでに設定されている命令を捨てる作業が行われるため、処理が遅くなる。そのため、分岐予測では、分岐先を予測し、予測した分岐先に基づいて事前に命令を流し込んでおくことによりパイプライン処理の効率を上げる技術である。ターゲットＣＰＵが有する分岐予測器１０９における分岐予測テーブル１１０は、図１に示したようにキーと係数と、のフィールドを有する。エントリ１１１の数は、予め定められてある。
【００４９】
分岐予測器１０９は、過去に行われた分岐の動作パターンの履歴に基づいて、実行中に分岐の動作を学習する。分岐予測器１０９は、分岐の動作の各パターンについて、係数が分岐予測テーブル１１０に保持される。この係数はヒント値とも呼ばれる。この係数は、分岐の過去の動作に基づいて、つぎの分岐が行われるものと予測すべきか、行われないものと予測すべきかを示す。分岐成立のことを「ｔａｋｅｎ」、分岐不成立のことを「ｎｏｔｔａｋｅｎ」とも呼ぶ。
【００５０】
つぎに、図３に示すコード変換部３１０は、ターゲットＣＰＵが実行するターゲットプログラム１０１のコードから、ホストＣＰＵ２０１のコードを生成する。ホストＣＰＵ２０１のコードは実行コード１０４と称する。具体的には、コード変換部３１０は、ブロック分割部３１１と、予測シミュレーション実行部３１２と、コード生成部３１３とを含む。
【００５１】
ブロック分割部３１１は、ターゲットプログラム１０１のターゲットコードを区切って所定のブロックｂに分割する。具体的には、ブロック分割部３１１は、例えば、ターゲットプログラム１０１を分岐命令と分岐命令の分岐先で区切ることにより、所定のブロックｂに分割する。
【００５２】
なお、ブロック分割部３１１がターゲットプログラム１０１のコードをブロックｂに分割するタイミングは、事前にすべて分割しておいてもよいし、対象ブロック１０２が切り替わった時に、その都度、対象ブロック１０２だけを分割することにしてもよい。
【００５３】
図５は、ターゲットプログラム例を示す説明図である。本実施の形態の詳細な説明で用いるターゲットプログラム１０１例を示す。ターゲットプログラム１０１は、１×２×３×４×５×６×７×８×９×１０を求めるコードである。ターゲットプログラム１０１において、１，２行目が初期化処理のブロックｂ１であり、３〜６行目がループ本体のブロックｂ２である。
【００５４】
初期化処理は、ｒ０の初期値を「１」とし、ｒ１の初期値を「２」とする処理である。ループ本体は、ｒ１の値が１０より大きくなるまで、ｒ０の値を「ｒ０＊ｒ１」とし、ｒ１の値をインクリメントする一連の処理を繰り返すループ処理である。ここでは、３〜６行目を対象ブロック１０２とし、１，２行目を対象ブロック１０２の直前に実行されたブロックｂとする。５行目のｃｍｐ命令では、ｒ１と１０とを比較することを指示する。つぎに、６行目のｂｃｃ命令では、５行目のｃｍｐ命令による比較結果においてｒ１が１０以下であれば、３行目のｍｕｌ命令に戻ることを指示する。ターゲットプログラム１０１は、例えば、ＲＡＭ２０３、ディスク２０５などの記憶装置１０３に記憶される。
【００５５】
つぎに、予測シミュレーション実行部３１２は、例えば、タイミング情報３４０と設定情報３５０とに基づいて、対象ブロック１０２をある実行結果を前提とした条件下で実行する静的タイミング解析を行う。ここでの静的タイミング解析については、上述した特許文献１に記述された静的シミュレーションと同様であるため、簡単に説明する。
【００５６】
より具体的には、予測シミュレーション実行部３１２は、例えば、設定情報３５０をもとに、対象ブロック１０２に含まれる外部依存命令の予測結果を設定する。そして、予測シミュレーション実行部３１２は、タイミング情報３４０を参照して、設定した予測ケースを前提とする場合の命令を実行して、命令実行の進み具合をシミュレーションする。
【００５７】
ここで、条件付の分岐命令を例に挙げる。予測シミュレーション実行部３１２は、分岐命令の予測ケースとして“ヒット”が設定されている処理については、対象ブロック１０２内の分岐命令による予測結果と実際の分岐結果とが一致する“ヒット”である場合の処理実行をシミュレーションする。
【００５８】
また、予測シミュレーション実行部３１２は、シミュレーション結果として、例えば、対象ブロック１０２の各命令に実行開始時刻と実行時間を出力する。
【００５９】
コード生成部３１３は、対象ブロック１０２が条件付の分岐命令を有する場合に、ＲＡＭ２０３、ディスク２０５などの記憶装置１０３にエントリポインタ１０７の領域を確保する。そして、コード生成部３１３は、確保したエントリポインタ１０７には“ＮＵＬＬ”を設定する。
【００６０】
また、コード生成部３１３は、予測シミュレーション実行部３１２のシミュレーション結果に基づいて、ターゲットＣＰＵが対象ブロック１０２を実行した場合の実行時間を計算可能な実行コード１０４を生成する。ここで、実行コード１０４は、機能コード１０５とタイミングコード１０６とを含む、ホストＣＰＵ２０１が実行可能なコードである。
【００６１】
具体的には、コード生成部３１３は、例えば、対象ブロック１０２のターゲットコードをコンパイルすることにより、ホストＣＰＵ２０１が実行可能な機能コード１０５のみの実行コード１０４を生成する。さらに、コード生成部３１３は、シミュレーション結果に基づいて、ターゲットＣＰＵが対象ブロック１０２を実行した場合の実行時間を計算可能なタイミングコード１０６を生成して、機能コード１０５のみの実行コード１０４に組み込む。
【００６２】
より具体的には、コード生成部３１３は、例えば、予測ケースでの分岐命令の実行時間を求める。そして、コード生成部３１３は、分岐予測が“ミス”である場合の実行時間を、予測ケースである“ヒット”時の実行時間の加算または減算を用いた補正計算により求める処理を行う関数を呼び出し可能な実行コード１０４を生成する。これにより、ターゲットＣＰＵが対象ブロック１０２を実行した場合の実行時間を計算可能な実行コード１０４を生成することができる。
【００６３】
図６は、実行コード例を示す説明図である。実行コード１０４は、機能コード１０５とタイミングコード１０６とを含む。機能コード１０５は、例えば、ターゲットプログラム１０１がコンパイルされて得られるコードである。タイミングコード１０６は、例えば、ブロックｂの実行時間を計算可能なコードである。
【００６４】
１行目と２行目の命令は、ブロックｂにおける掛け算命令に対応する機能コード１０５である。３〜１３行目の命令は、性能計算命令である。１４行目と１５行目の命令は分岐命令に対応する機能コード１０５である。
【００６５】
具体的に、３〜６行目の命令では、実際の分岐結果を求めて、実際の分岐結果をｂｒ＿ｏｕｔｃｏｍｅに代入する。実行コード１０４では、補正処理時において分岐予測結果がヒットであるか否かを評価するために、実際の分岐結果をｂｒ＿ｏｕｔｃｏｍｅとして保存する。７〜９行目の命令では、掛け算命令についての実行時間の合計値を加算してｃｙｃｌｅに代入する。１０〜１３行目の命令では、分岐命令が予測ケースと異なる場合に実行時間を補正するためのヘルパー関数を呼び出す。
【００６６】
図３の説明に戻り、シミュレーション実行部３２０は、コード生成部３１３が生成した実行コード１０４を実行することにより、ターゲットＣＰＵが対象ブロック１０２を実行した場合の実行時間を算出する。すなわち、シミュレーション実行部３２０は、ターゲットプログラム１０１を実行するターゲットＣＰＵの命令実行の機能および性能のシミュレーションを行う。
【００６７】
具体的には、シミュレーション実行部３２０は、コード実行部３２１と、補正部３２２とを含む。コード実行部３２１は、対象ブロック１０２の実行コード１０４を実行する。具体的には、例えば、コード実行部３２１は、実行コード１０４を実行する。
【００６８】
対象ブロック１０２の実行コード１０４が実行されると、つぎに計算の対象となるブロックｂが特定され、そのブロックｂを識別する情報がコード変換部３１０に出力される。これにより、コード変換部３１０は、性能シミュレーションにおいて対象ブロック１０２が切り替わったことを認識することができるとともに、静的タイミング解析におけるつぎの対象ブロック１０２を認識することができる。
【００６９】
補正部３２２は、動作シミュレーション１０８における所定数の予測情報のうちのいずれかの予測情報に、対象ブロック１０２に含まれる分岐命令を示すアドレスと、当該分岐命令についての分岐予測器１０９の予測結果に関する値とを対応付けて格納する。動作シミュレーション１０８は上述したように、ターゲットＣＰＵがアクセス可能な分岐予測器１０９の動作を模擬する。所定数の予測情報は、上述したように、例えば、分岐命令を示す命令識別情報と、命令識別情報が示す分岐命令についての分岐予測器１０９の予測結果に関する値と、を対応付けて格納可能な情報である。ここで、所定数の予測情報は、上述したように分岐予測テーブル１１０である。所定数は、ターゲットＣＰＵの機能や性能などに基づいて予め定められてある。そして、予測情報は、分岐予測テーブル１１０のエントリ１１１である。命令識別情報は、分岐命令を示すアドレスである。予測結果に関する値は係数やヒント値などである。
【００７０】
そして、補正部３２２は、実行コード１０４に、格納したいずれかのエントリ１１１を示す予測識別情報を関連付ける。実行コード１０４は、上述したように、例えば、ターゲットＣＰＵが対象ブロック１０２を実行した場合の分岐予測器１０９の予測結果がヒットおよびミスのいずれか一方を示す情報に基づく対象ブロック１０２の性能値を計算可能なコードである。ヒットおよびミスのいずれか一方を示す情報は、上述した予測ケースであり、本実施の形態では、予測ケースにはヒットが設定されてある。予測識別情報は、上述したようにエントリ１１１を示すエントリアドレスである。
【００７１】
具体的に、補正部３２２は、外部依存命令の実行結果が、設定されていた予測ケースと異なる場合に、既に求めた予測ケースでの実行時間を補正してその外部依存命令の実行時間を求める。具体的には、例えば、補正部３２２は、動作シミュレーション１０８を実行することにより、分岐命令の予測結果が、設定されていた予測ケースと異なるか否かを判断する。
【００７２】
また、補正部３２２は、実行コード１０４に関連付けられたアドレスが示すエントリ１１１に格納された分岐命令のアドレスが、対象ブロック１０２に含まれる条件付の分岐命令のアドレスと一致するか否かを判断する。補正部３２２は、この判断する処理を、格納する処理と関連付ける処理との前に行い、実行コード１０４にエントリ１１１を示すアドレスが関連付けられている場合に行う。
【００７３】
具体的に、補正部３２２は、例えば、動作シミュレーション１０８における、分岐予測器１０９のモデルに、実行コード１０４に関連付けられたエントリポインタ１０７の値を与えて、エントリポインタ１０７の値が示すエントリ１１１のキーを取得する。補正部３２２は、取得したキーと、分岐命令のアドレスと、が一致するか否かを判断する。
【００７４】
補正部３２２は、一致すると判断した場合には、格納する処理と関連付ける処理を行わない。一方、補正部３２２は、一致しないと判断した場合には、格納する処理と関連付ける処理を行う。具体的に、補正部３２２は、例えば、取得したキーと、分岐命令のアドレスと、が一致していない場合に、動作シミュレーション１０８における分岐予測テーブル１１０のエントリスペースを解放する。一致していない場合には、エントリスペースに空きがなかったため、過去に設定しておいたエントリポインタ１０７の値が示すエントリ１１１に、対象となっている分岐命令と異なる分岐命令によって使用されたことを示す。そのため、あらたにエントリ１１１を確保するためにエントリスペースが解放される。そして、補正部３２２は、解放されたエントリ１１１に分岐命令のアドレスに基づく新たなエントリ１１１を作成する。補正部３２２は、エントリ１１１のアドレスをエントリポインタ１０７に格納する。
【００７５】
また、補正部３２２は、確保した領域に予測識別情報が格納されていない場合に、取得したキーと、分岐命令のアドレスと、が一致するか否かを判断する処理を行わずに、格納する処理と前記関連付ける処理を行う。確保した領域に予測識別情報が格納されていない場合とは、エントリポインタ１０７に設定された値が“ＮＵＬＬ”の場合である。エントリポインタ１０７に設定された値が“ＮＵＬＬ”の場合とは、以前に計算の対象となっておらず、あらたにエントリポインタ１０７の領域が確保され、まだエントリ１１１を示すアドレスが設定されていない場合である。そのため、補正部３２２は、例えば、エントリポインタ１０７に設定された値が“ＮＵＬＬ”である場合、動作シミュレーション１０８における分岐予測テーブル１１０のエントリ１１１に空きがあるか否かを判断する。
【００７６】
そして、補正部３２２は、動作シミュレーション１０８における分岐予測テーブル１１０のエントリ１１１に空きがあると判断された場合、空きのエントリ１１１に分岐命令のアドレスに基づく新たなエントリ１１１を作成する。そして、補正部３２２は、エントリ１１１のアドレスをエントリポインタ１０７に格納する。一方、補正部３２２は、動作シミュレーション１０８における分岐予測テーブル１１０のエントリ１１１に空きがないと判断された場合、動作シミュレーション１０８における分岐予測テーブル１１０のエントリスペースを解放する。そして、補正部３２２は、解放されたエントリ１１１に分岐命令のアドレスに基づく新たなエントリ１１１を作成する。補正部３２２は、エントリ１１１のアドレスをエントリポインタ１０７に格納する。
【００７７】
補正部３２２は、指定したエントリ１１１に登録された係数に基づく分岐予測の動作シミュレーション１０８を行うことにより、分岐成立と分岐不成立との少なくともいずれかを示す分岐予測結果を取得する。
【００７８】
そして、補正部３２２は、分岐予測結果と、実際の分岐結果と、が一致している場合に、静的タイミング解析によって得られた性能値にペナルティ値を加算せずに出力する。補正部３２２は、分岐予測結果と実際の分岐結果とが一致している場合に、静的タイミング解析によって得られた性能値にペナルティ値を加算する。ペナルティ値については、上述したタイミング情報３４０に設定されてある。
【００７９】
つぎに、補正部３２２は、アドレスポインタに格納されたアドレスが示すエントリ１１１に登録される係数を分岐予測結果により更新する動作シミュレーション１０８を行う。
【００８０】
図７は、補正処理プログラム例を示す説明図である。補正処理プログラム７００は、図３に示す補正部３２２による処理がコーディングされてある。補正処理プログラム７００には、ｃｏｎｄ＿ｂｒが記述されてある。ｃｏｎｄ＿ｂｒの引数であるｂｒ＿ｉｎｓｎ＿ａｄｄｒｅｓｓが分岐命令を示すアドレスである。ｃｏｎｄ＿ｂｒの引数であるｂｒ＿ｔａｂ＿ｅｎｔｒｙ＿ｐｔｒが分岐予測テーブル１１０のエントリ１１１へのポインタである。ｃｏｎｄ＿ｂｒの引数であるｂｒ＿ｏｕｔｃｏｍｅが機能コード１０５の実行時の分岐結果である。分岐成立のことを「ｔａｋｅｎ」、分岐不成立のことを「ｎｏｔｔａｋｅｎ」とも呼ぶ。
【００８１】
ｐｅｎａｌｔｙには条件付分岐命令の実行時間を補正する場合には、図３に示すタイミング情報３４０に記述されたペナルティ時間が設定される。ｂｒ＿ｐｒｅｄ＿ｑｕａｌｉｔｙは、分岐予測がヒットした否かを示すフラグである。ｂｒ＿ｐｒｅｄ＿ｑｕａｌｉｔｙには初期値として分岐予測がヒットした場合を示す１が設定される。
【００８２】
先頭に記述されたｉｆ文では、ｂｒ＿ｔａｂ＿ｅｎｔｒｙ＿ｐｔｒが“ＮＵＬＬ”である場合と、ｂｒ＿ｔａｂ＿ｅｎｔｒｙ＿ｐｔｒが示すエントリ１１１のキーと分岐命令のアドレスとが一致しない場合と、のいずれかに新しいエントリ１１１が作成される。
【００８３】
つぎに、ｐｒｅｄ＿ｒｅｓｕｌｔには、ｂｒ＿ｔａｂ＿ｅｎｔｒｙ＿ｐｔｒが示すエントリ１１１についての分岐予測器１０９の動作シミュレーション１０８による分岐予測結果が代入される。
【００８４】
そして、２番目に記述されたｉｆ文では、分岐予測結果であるｐｒｅｄ＿ｒｅｓｕｌｔと実際の分岐結果であるｂｒ＿ｏｕｔｃｏｍｅとが一致しない場合に、ｐｅｎａｌｔｙに分岐予測がミスした場合の遅延値が加算される。また、２番目に記述されたｉｆ文では、分岐予測結果であるｐｒｅｄ＿ｒｅｓｕｌｔと実際の分岐結果であるｂｒ＿ｏｕｔｃｏｍｅとが一致しない場合に、ヒットまたはミスを示すｂｒ＿ｐｒｅｄ＿ｑｕａｌｉｔｙが０に設定される。
【００８５】
最後に、ｕｐｄａｔｅ＿ｂｒ＿ｔａｂ＿ｅｎｔｒｙでは、予測結果のヒットまたはミスを示すｂｒ＿ｐｒｅｄ＿ｑｕａｌｉｔｙに基づいて、ｂｒ＿ｔａｂ＿ｅｎｔｒｙ＿ｐｔｒが示すエントリ１１１の係数を更新する処理が行われる。
【００８６】
また、図３の説明に戻って、シミュレーション情報収集部３３０は、性能シミュレーションの実行結果として、各ブロックｂの実行時間を含むログ情報を収集する。ログ情報は、例えばシミュレーション情報３６０である。具体的には、シミュレーション情報収集部３３０は、例えば、各ブロックｂの実行時間を加算することにより、ターゲットＣＰＵがターゲットプログラム１０１を実行した場合の全体の実行時間を含むシミュレーション情報３６０を出力することにしてもよい。
【００８７】
また、予測シミュレーション実行部３１２は、対象ブロック１０２が切り替わった場合、対象ブロック１０２が以前に処理対象となったか否かを判断する。具体的には、予測シミュレーション実行部３１２は、対象ブロック１０２に対応する実行コード１０４が記憶装置１０３に記憶されているか否かを判断することにより、対象ブロック１０２が以前に処理対象となったか否かを判断する。
【００８８】
また、図示省略するが、実行コード１０４生成部が、実行コード１０４を生成するとともに、ブロックの識別情報と実行コード１０４との対応関係を管理するコードリストなどを作成してもよい。予測シミュレーション実行部３１２は、例えば、対象ブロック１０２のブロックｂの識別情報に基づきコードリストを検索することによって、対象ブロック１０２が以前に計算の対象となったか否かを簡単に見つけることができる。
【００８９】
そして、予測シミュレーション実行部３１２は、対象ブロック１０２が以前に計算の対象となった場合、あらたにエントリポインタ１０７の領域を確保する処理と、実行コード１０４を生成する処理と、を行わない。対象ブロック１０２が以前に計算の対象となっていないと判断した場合、予測シミュレーション実行部３１２は、上述したように、あらたにエントリポインタ１０７の領域を確保する処理と、実行コード１０４を生成する処理と、を行う。
【００９０】
（検証支援装置１００による検証支援処理手順例）
図８は、検証支援装置による検証支援処理手順例を示すフローチャートである。まず、検証支援装置１００は、計算の対象ブロック１０２が切り替わったか否かを判断する（ステップＳ８０１）。計算の対象ブロック１０２が切り替わっていないと判断された場合（ステップＳ８０１：Ｎｏ）、検証支援装置１００は、ステップＳ８０１へ戻る。
【００９１】
計算の対象ブロック１０２が切り替わったと判断された場合（ステップＳ８０１：Ｙｅｓ）、検証支援装置１００は、対象ブロック１０２はコンパイル済みか否かを判断する（ステップＳ８０２）。つぎに、対象ブロック１０２はコンパイル済みであると判断された場合（ステップＳ８０２：Ｙｅｓ）、検証支援装置１００は、ステップＳ８１０へ移行する。
【００９２】
そして、対象ブロック１０２はコンパイル済みでないと判断された場合（ステップＳ８０２：Ｎｏ）、検証支援装置１００は、ターゲットプログラム１０１から対象ブロック１０２を分割して取得する（ステップＳ８０３）。検証支援装置１００は、対象ブロック１０２に含まれる外部依存命令を検出する（ステップＳ８０４）。つぎに、検証支援装置１００は、予測情報から検出した外部依存命令についての予測ケースを取得する（ステップＳ８０５）。
【００９３】
検証支援装置１００は、予測ケースについて、静的タイミング解析する（ステップＳ８０６）。検証支援装置１００は、外部依存命令に条件付の分岐命令があるか否かを判断する（ステップＳ８０７）。外部依存命令に条件付の分岐命令がないと判断された場合（ステップＳ８０７：Ｎｏ）、検証支援装置１００は、ステップＳ８０９へ移行する。外部依存命令に条件付の分岐命令があると判断された場合（ステップＳ８０７：Ｙｅｓ）、検証支援装置１００は、分岐予測テーブル１１０のエントリ１１１へのポインタ領域を確保して“ＮＵＬＬ”を設定する（ステップＳ８０８）。確保されたポインタ領域がエントリポインタ１０７である。
【００９４】
検証支援装置１００は、対象ブロック１０２をコンパイルすることによって得られる機能コード１０５と、予測ケースについてのタイミング解析結果に基づくタイミングコード１０６と、を含む実行コード１０４を生成する（ステップＳ８０９）。そして、検証支援装置１００は、実行コード１０４の実行処理を行い（ステップＳ８１０）、一連の処理を終了する。
【００９５】
図９は、検証支援装置が行う補正処理手順例を示すフローチャートである。検証支援装置１００は、分岐予測テーブル１１０エントリ１１１へのエントリポインタ１０７を取得する（ステップＳ９０１）。検証支援装置１００は、エントリポインタ１０７が“ＮＵＬＬ”であるか否かを判断する（ステップＳ９０２）。エントリポインタ１０７が“ＮＵＬＬ”であると判断された場合（ステップＳ９０２：Ｙｅｓ）、検証支援装置１００は、分岐予測テーブル１１０に空きがあるか否かを判断する（ステップＳ９０３）。
【００９６】
分岐予測テーブル１１０に空きがあると判断された場合（ステップＳ９０３：Ｙｅｓ）、検証支援装置１００は、ステップＳ９０５へ移行する。分岐予測テーブル１１０に空きがないと判断された場合（ステップＳ９０３：Ｎｏ）、検証支援装置１００は、エントリスペースを解放する（ステップＳ９０４）。検証支援装置１００は、新たなエントリ１１１を作成する（ステップＳ９０５）。
【００９７】
そして、検証支援装置１００は、エントリ１１１のアドレスをエントリポインタ１０７に格納し（ステップＳ９０６）、ステップＳ９０９へ移行する。一方、ステップＳ９０２において、エントリポインタ１０７が“ＮＵＬＬ”でないと判断された場合（ステップＳ９０２：Ｎｏ）、検証支援装置１００は、分岐命令のアドレスとエントリポインタ１０７が示すエントリ１１１のキーを比較する（ステップＳ９０７）。そして、分岐命令のアドレスとエントリポインタ１０７が示すエントリ１１１のキーが一致するか否かを判断する（ステップＳ９０８）。
【００９８】
分岐命令のアドレスとエントリポインタ１０７が示すエントリ１１１のキーとが一致しない場合（ステップＳ９０８：Ｎｏ）、検証支援装置１００は、ステップＳ９０３へ移行する。分岐命令のアドレスとエントリポインタ１０７が示すエントリ１１１のキーが一致する場合（ステップＳ９０８：Ｙｅｓ）、ステップＳ９０９へ移行する。
【００９９】
ステップＳ９０６またはステップＳ９０８のＹｅｓの場合のつぎに、検証支援装置１００は、エントリポインタ１０７が示すエントリ１１１の係数を取得する（ステップＳ９０９）。そして、検証支援装置１００は、分岐予測器１０９の動作シミュレーション１０８を実行する（ステップＳ９１０）。つぎに、検証支援装置１００は、分岐予測結果と実際の分岐結果とが一致するか否かを判断する（ステップＳ９１１）。
【０１００】
分岐予測結果と実際の分岐結果とが一致すると判断された場合（ステップＳ９１１：Ｙｅｓ）、検証支援装置１００は、補正せずに、静的シミュレーションで得られた性能値を出力し（ステップＳ９１２）、ステップＳ９１４へ移行する。一方、分岐予測結果と実際の分岐結果とが一致しないと判断された場合（ステップＳ９１１：Ｎｏ）、検証支援装置１００は、性能値にペナルティ時間を加算して出力する（ステップＳ９１３）。そして、検証支援装置１００は、分岐予測結果と実際の分岐結果の比較結果に従って、エントリ１１１の係数を更新し（ステップＳ９１４）、一連の処理を終了する。
【０１０１】
以上説明したように、検証支援装置１００が、分岐予測器の動作シミュレーションに用いる分岐予測テーブルにおける条件付分岐命令に応じたエントリを実行コードに関連付けておき、動作シミュレーション時に命令に該当するエントリにだけアクセスする。これにより、動作シミュレーション時に、分岐予測テーブルから対象ブロックに含まれる分岐命令のアドレスを有するエントリの検索を行うことなく動作シミュレーションを行うことができる。したがって、シミュレーション時間の短縮化を図ることができる。
【０１０２】
また、検証支援装置１００が、切り替わった場合に、実行コードにエントリが関連付けられている際に、エントリのアドレスと、対象ブロックに含まれる分岐命令のアドレスとが一致する場合、新たにエントリを作成して実行コードに関連付ける処理を行わない。これにより、同じエントリを何度も作成しなくてよいため、よりシミュレーション時間の短縮を図ることができる。
【０１０３】
また、検証支援装置１００が、対象ブロックが以前に計算の対象となっていない場合に実行コードに関連付けられるエントリを示すアドレスを格納する領域を記憶装置に確保し、関連付ける処理において確保した領域にエントリのアドレスを格納する。これにより、１つの条件付の分岐命令について同じ領域にエントリのアドレスが格納されるため、記憶装置の使用量の増大を抑制することができる。
【０１０４】
また、検証支援装置１００が、確保した領域にエントリを示すアドレスが格納されていない場合に、エントリのキーと、対象ブロックに含まれる分岐命令のアドレスとが一致するかを判断する処理を行わずに、エントリを作成して実行コードに関連付ける処理を行う。これにより、対象ブロックに含まれる分岐命令に対応するエントリを作成していないことを直ぐに判断できるため、よりシミュレーションにかかる時間の短縮化を図ることができる。
【０１０５】
また、検証支援装置１００が、実行コードを実行した実行結果における分岐命令の実行結果が、設定情報が示すヒットおよびミスのいずれか一方と異なる場合に分岐命令の性能値を補正する。これにより、性能値を精度よく算出することができる。
【０１０６】
なお、本実施の形態で説明した検証支援方法は、予め用意された検証支援プログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本検証支援プログラムは、磁気ディスク、光ディスク、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）フラッシュメモリなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、検証支援プログラムは、インターネット等のネットワークを介して配布してもよい。
【０１０７】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１０８】
（付記１）第１プロセッサが、
前記第１プロセッサと異なる第２プロセッサが実行するプログラムのコードを分割して得られるブロックのうち、前記第２プロセッサが前記プログラムを実行した場合の性能値の計算の対象ブロックが、条件付の分岐命令を有するブロックに切り替わった場合に、
前記第２プロセッサがアクセス可能な分岐予測器の動作を模擬するシミュレーションにおける前記分岐命令を示す命令識別情報と、前記命令識別情報が示す前記分岐命令についての前記分岐予測器の予測結果に関する値と、を対応付けて格納可能な所定数の予測情報のうちのいずれかの予測情報に、前記対象ブロックに含まれる前記分岐命令を示す命令識別情報と、前記対象ブロックに含まれる前記分岐命令についての前記分岐予測器の予測結果に関する値とを対応付けて格納し、
前記第２プロセッサが前記対象ブロックを実行した場合の前記分岐予測器の予測結果がヒットおよびミスのいずれか一方を示す情報に基づく前記対象ブロックの性能値を計算可能な実行コードに、前記いずれかの予測情報を示す予測識別情報を関連付け、
前記実行コードを実行することにより前記対象ブロックの性能値を計算する際に、前記実行コードに関連付けられた前記予測識別情報が示す前記予測情報に基づく前記シミュレーションを実行することによって得られる前記シミュレーションの実行結果に基づいて前記分岐命令の性能値を補正する、
処理を実行することを特徴とする検証支援方法。
【０１０９】
（付記２）前記第１プロセッサが、
前記切り替わった場合に、前記格納する処理と前記関連付ける処理との前に、前記実行コードに前記予測識別情報が関連付けられている場合、前記実行コードに関連付けられた前記予測識別情報が示す前記予測情報に格納された前記命令識別情報が、前記対象ブロックに含まれる前記分岐命令を示す識別情報と一致するか否かを判断し、
一致しないと判断した場合には、前記格納する処理と前記関連付ける処理を行い、一致すると判断した場合には、前記格納する処理と前記関連付ける処理を行わない、
ことを特徴とする付記１に記載の検証支援方法。
【０１１０】
（付記３）前記第１プロセッサが、
前記対象ブロックが以前に前記計算の対象となっていない場合に、前記実行コードに関連付けられる前記予測識別情報を格納する領域を、前記第１プロセッサがアクセス可能な記憶装置に確保し、前記対象ブロックが以前に前記計算の対象となった場合に、前記領域を前記記憶装置に確保しない、
処理を実行し、
前記関連付ける処理では、確保した前記領域に前記予測識別情報を格納することを特徴とする付記１または２に記載の検証支援方法。
【０１１１】
（付記４）前記第１プロセッサが、
前記対象ブロックが以前に前記計算の対象となっていない場合に、前記実行コードに関連付けられる前記予測識別情報を格納する領域を、前記第１プロセッサがアクセス可能な記憶装置に確保し、前記対象ブロックが以前に前記計算の対象となった場合に、前記領域を前記記憶装置に確保しない、
前記領域に前記予測識別情報が格納されていない場合に、前記判断する処理を行わずに、前記格納する処理と前記関連付ける処理を行う、
処理を実行し、
前記関連付ける処理では、確保した前記領域に前記予測識別情報を格納することを特徴とする付記２に記載の検証支援方法。
【０１１２】
（付記５）前記補正する処理では、前記実行コードを実行した実行結果における前記分岐命令の実行結果が、前記情報が示すヒットおよびミスのいずれか一方と異なる場合に前記分岐命令の性能値を補正することを特徴とする付記１〜４のいずれか一つに記載の検証支援方法。
【０１１３】
（付記６）第１プロセッサに、
前記第１プロセッサと異なる第２プロセッサが実行するプログラムのコードを分割して得られるブロックのうち、前記第２プロセッサが前記プログラムを実行した場合の性能値の計算の対象ブロックが、条件付の分岐命令を有するブロックに切り替わった場合に、
前記第２プロセッサがアクセス可能な分岐予測器の動作を模擬するシミュレーションにおける前記分岐命令を示す命令識別情報と、前記命令識別情報が示す前記分岐命令についての前記分岐予測器の予測結果に関する値と、を対応付けて格納可能な所定数の予測情報のうちのいずれかの予測情報に、前記対象ブロックに含まれる前記分岐命令を示す命令識別情報と、前記対象ブロックに含まれる前記分岐命令についての前記分岐予測器の予測結果に関する値とを対応付けて格納し、
前記第２プロセッサが前記対象ブロックを実行した場合の前記分岐予測器の予測結果がヒットおよびミスのいずれか一方を示す情報に基づく前記対象ブロックの性能値を計算可能な実行コードに、前記いずれかの予測情報を示す予測識別情報を関連付け、
前記実行コードを実行することにより前記対象ブロックの性能値を計算する際に、前記実行コードに関連付けられた前記予測識別情報が示す前記予測情報に基づく前記シミュレーションを実行することによって得られる前記シミュレーションの実行結果に基づいて前記分岐命令の性能値を補正する、
処理を実行させることを特徴とする検証支援プログラム。
【０１１４】
（付記７）プロセッサが実行するプログラムのコードを分割して得られるブロックのうち、前記プロセッサが前記プログラムを実行した場合の性能値の計算の対象ブロックが、条件付の分岐命令を有するブロックに切り替わった場合に、
前記プロセッサがアクセス可能な分岐予測器の動作を模擬するシミュレーションにおける前記分岐命令を示す命令識別情報と、前記命令識別情報が示す前記分岐命令についての前記分岐予測器の予測結果に関する値と、を対応付けて格納可能な所定数の予測情報のうちのいずれかの予測情報に、前記対象ブロックに含まれる前記分岐命令を示す命令識別情報と、前記対象ブロックに含まれる前記分岐命令についての前記分岐予測器の予測結果に関する値とを対応付けて格納し、
前記プロセッサが前記対象ブロックを実行した場合の前記分岐予測器の予測結果がヒットおよびミスのいずれか一方を示す情報に基づく前記対象ブロックの性能値を計算可能な実行コードに、前記いずれかの予測情報を示す予測識別情報を関連付け、
前記実行コードを実行することにより前記対象ブロックの性能値を計算する際に、前記実行コードに関連付けられた前記予測識別情報が示す前記予測情報に基づく前記シミュレーションを実行することによって得られる前記シミュレーションの実行結果に基づいて前記分岐命令の性能値を補正する、
処理を実行する制御部を有することを特徴とする検証支援装置。
【０１１５】
（付記８）第１プロセッサに、
前記第１プロセッサと異なる第２プロセッサが実行するプログラムのコードを分割して得られるブロックのうち、前記第２プロセッサが前記プログラムを実行した場合の性能値の計算の対象ブロックが、条件付の分岐命令を有するブロックに切り替わった場合に、
前記第２プロセッサがアクセス可能な分岐予測器の動作を模擬するシミュレーションにおける前記分岐命令を示す命令識別情報と、前記命令識別情報が示す前記分岐命令についての前記分岐予測器の予測結果に関する値と、を対応付けて格納可能な所定数の予測情報のうちのいずれかの予測情報に、前記対象ブロックに含まれる前記分岐命令を示す命令識別情報と、前記対象ブロックに含まれる前記分岐命令についての前記分岐予測器の予測結果に関する値とを対応付けて格納し、
前記第２プロセッサが前記対象ブロックを実行した場合の前記分岐予測器の予測結果がヒットおよびミスのいずれか一方を示す情報に基づく前記対象ブロックの性能値を計算可能な実行コードに、前記いずれかの予測情報を示す予測識別情報を関連付け、
前記実行コードを実行することにより前記対象ブロックの性能値を計算する際に、前記実行コードに関連付けられた前記予測識別情報が示す前記予測情報に基づく前記シミュレーションを実行することによって得られる前記シミュレーションの実行結果に基づいて前記分岐命令の性能値を補正する、
処理を実行させる検証支援プログラムを記録したことを特徴とする記録媒体。
【符号の説明】
【０１１６】
１００  検証支援装置
１０１  ターゲットプログラム
１０２  対象ブロック
１０３  記憶装置
１０４  実行コード
１０５  機能コード
１０６  タイミングコード
１０７  エントリポインタ
１０８  動作シミュレーション
１０９  分岐予測器
１１０  分岐予測テーブル
１１１  エントリ
２０１  ホストＣＰＵ
３１０  コード変換部
３１１  ブロック分割部
３１２  予測シミュレーション実行部
３１３  コード生成部
３２０  シミュレーション実行部
３２１  コード実行部
３２２  補正部
３４０  タイミング情報
３５０  設定情報
７００  補正処理プログラム
【図１】
2016139332.tif 000003
【図２】
2016139332.tif 000004
【図３】
2016139332.tif 000005
【図４】
2016139332.tif 000006
【図５】
2016139332.tif 000007
【図６】
2016139332.tif 000008
【図７】
2016139332.tif 000009
【図８】
2016139332.tif 000010
【図９】
2016139332.tif 000011