JP2016139332A - 検証支援方法、検証支援プログラム、および検証支援装置 - Google Patents

検証支援方法、検証支援プログラム、および検証支援装置 Download PDF

Info

Publication number
JP2016139332A
JP2016139332A JP2015014642A JP2015014642A JP2016139332A JP 2016139332 A JP2016139332 A JP 2016139332A JP 2015014642 A JP2015014642 A JP 2015014642A JP 2015014642 A JP2015014642 A JP 2015014642A JP 2016139332 A JP2016139332 A JP 2016139332A
Authority
JP
Japan
Prior art keywords
prediction
branch
target block
instruction
identification information
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Withdrawn
Application number
JP2015014642A
Other languages
English (en)
Inventor
デビッド タシ
Tsai David
デビッド タシ
敦 池
Atsushi Ike
敦 池
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2015014642A priority Critical patent/JP2016139332A/ja
Publication of JP2016139332A publication Critical patent/JP2016139332A/ja
Withdrawn legal-status Critical Current

Links

Images

Landscapes

  • Advance Control (AREA)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

【課題】シミュレーション時間の短縮化を図ること。
【解決手段】検証支援装置100は、分岐予測テーブル110のうちのいずれかのエントリ111に、対象ブロック102に含まれる分岐命令のアドレスと、当該分岐命令についての分岐予測器109の予測結果に関する係数とを対応付けて格納する。検証支援装置100は、対象ブロック102をターゲットCPUが実行した場合の分岐予測器109の予測結果が設定された予測ケースである場合についての対象ブロック102の性能値を計算可能な実行コード104に、格納したエントリのアドレスを関連付ける。検証支援装置100は、実行コード104を実行することにより対象ブロック102の性能値を計算する際に、実行コード104に関連付けられたアドレスが示すエントリに基づく分岐予測器109の動作シミュレーションの実行によって得られる実行結果に基づいて分岐命令の性能値を補正する。
【選択図】図1

Description

本発明は、検証支援方法、検証支援プログラム、および検証支援装置に関する。
従来、命令セットシミュレーションによるプログラムの実行時間を計算する技術が公知である。例えば、分岐命令ごとにシミュレーションした分岐命令の実行処理結果と、シミュレートした分岐予測とを比較し、正しく分岐予測された分岐命令もしくは正しく分岐予測されなかった分岐命令をプロセッサが実行する場合の遅延時間を予測する技術が公知である(例えば、以下特許文献1参照。)。
また、従来、プログラムの性能値を計算するために、ホストCPU(Central Processing Unit)によってシミュレーションを行う際にターゲットCPUのターゲットプログラムをホストCPUが実行可能なコードへ変換する技術が公知である。この変換する技術としては、例えば、JITコンパイル方式やインタプリタ方式が公知である。JIT(Just In Time)コンパイラ方式によるシミュレーションでは、例えば、実行中のプログラムに出現するターゲットCPUの命令を、シミュレーションを実行するホストCPUの命令に置き換え、その置き換えた命令を実行することにより、性能値を計算する処理の高速化を図ることができる(例えば、以下特許文献2参照。)。
特開2013−222392号公報 特開2013−84178号公報
しかしながら、従来技術では、分岐予測器の動作を模擬するシミュレーションに際して分岐予測テーブルから分岐命令に対応するエントリを検索するため、シミュレーションに時間がかかるという問題点がある。
1つの側面では、本発明は、シミュレーションにかかる時間の短縮化を図ることができる検証支援方法、検証支援プログラム、および検証支援装置を提供することを目的とする。
本発明の一側面によれば、第1プロセッサが、前記第1プロセッサと異なる第2プロセッサが実行するプログラムのコードを分割して得られるブロックのうち、前記第2プロセッサが前記プログラムを実行した場合の性能値の計算の対象ブロックが、条件付の分岐命令を有するブロックに切り替わった場合に、前記第2プロセッサがアクセス可能な分岐予測器の動作を模擬するシミュレーションにおける前記分岐命令を示す命令識別情報と、前記命令識別情報が示す前記分岐命令についての前記分岐予測器の予測結果に関する値と、を対応付けて格納可能な所定数の予測情報のうちのいずれかの予測情報に、前記対象ブロックに含まれる前記分岐命令を示す命令識別情報と、前記対象ブロックに含まれる前記分岐命令についての前記分岐予測器の予測結果に関する値とを対応付けて格納し、前記第2プロセッサが前記対象ブロックを実行した場合の前記分岐予測器の予測結果がヒットおよびミスのいずれか一方を示す情報に基づく前記対象ブロックの性能値を計算可能な実行コードに、前記いずれかの予測情報を示す予測識別情報を関連付け、前記実行コードを実行することにより前記対象ブロックの性能値を計算する際に、前記実行コードに関連付けられた前記予測識別情報が示す前記予測情報に基づく前記シミュレーションを実行することによって得られる前記シミュレーションの実行結果に基づいて前記分岐命令の性能値を補正する検証支援方法、検証支援プログラム、および検証支援装置が提案される。
本発明の一態様によれば、シミュレーションにかかる時間の短縮化を図ることができる。
図1は、検証支援装置の一動作例を示す説明図である。 図2は、検証支援装置のハードウェア構成例を示すブロック図である。 図3は、検証支援装置の機能的構成例を示すブロック図である。 図4は、設定情報の一例を示す説明図である。 図5は、ターゲットプログラム例を示す説明図である。 図6は、実行コード例を示す説明図である。 図7は、補正処理プログラム例を示す説明図である。 図8は、検証支援装置による検証支援処理手順例を示すフローチャートである。 図9は、検証支援装置が行う補正処理手順例を示すフローチャートである。
以下に添付図面を参照して、本発明にかかる検証支援方法、検証支援プログラム、および検証支援装置の実施の形態を詳細に説明する。
図1は、検証支援装置の一動作例を示す説明図である。第1プロセッサを有する検証支援装置100は、第2プロセッサの性能シミュレーションを実行するコンピュータである。また、性能シミュレーションとは、第2プロセッサがプログラムを実行した場合の性能値を見積もるシミュレーションである。性能値は、例えば、実行時間や消費電力値である。実行時間は、例えばサイクル数である。
以下の説明では、性能評価対象となる第2プロセッサを「ターゲットCPU」とも称し、検証支援装置100の第1プロセッサを「ホストCPU」とも称する。また、ターゲットCPUが実行するプログラムを「ターゲットプログラム101」とも称する。
ターゲットCPUは、例えば、ARM(登録商標)アーキテクチャのプロセッサである。ターゲットCPUは、例えば、分岐予測を行うCPUであればよい。そのため、ターゲットCPUは、アウトオブオーダー実行のCPUであってもよいし、インオーダー実行のCPUであってもよい。ホストCPUは、例えば、x86アーキテクチャのプロセッサである。すなわち、ターゲットCPUとホストCPUのアーキテクチャが異なる。このため、検証支援装置100は、ホストCPUによってシミュレーションを行う際にターゲットCPUのターゲットプログラム101をホストCPUが実行可能なコードへ変換する。
本実施の形態では、ターゲットプログラム101の変換手法として、JITコンパイラ方式を採用する。JITコンパイラ方式によるシミュレーションでは、実行中のプログラムに出現するターゲットCPUの命令を、シミュレーションを実行するホストCPUの命令に置き換え、以降では、その置き換えた命令を実行することにより、処理の高速化を図ることができる。
特許文献2のように従来技術では、例えば、ターゲットCPUのターゲットプログラム101の実行時に、ターゲットプログラム101のコードを区切って所定のブロックbに分割する。つぎに、従来技術では、例えば、分割したブロックbについてホストCPUが実行可能な実行コード104を生成する。実行コード104は、ホストコードとも呼ばれる。そして、検証支援装置100は、例えば、生成した実行コード104を実行することにより、ターゲットCPUがブロックbを実行した場合の性能値を見積もる。
従来技術では、ターゲットCPUがアクセス可能なハードウェア資源の動作結果に依存して性能値が異なる命令の場合には、発生する確率が高い動作結果に基づいて静的タイミング解析を行う。つぎに、従来技術では、静的タイミング解析の解析結果に基づいて、ターゲットCPUがブロックbを実行した場合の性能値を見積もるタイミングコード106を実行コード104に組み込む。そして、従来技術では、実行コード104を実行時にハードウェア資源の動作を模擬する動作シミュレーション108を実行し、動作シミュレーション108の実行結果に基づいて解析結果に基づく性能値を補正する。
従来技術について分岐命令の例を挙げる。ターゲットCPUがアクセス可能な分岐予測器109による分岐予測がヒットする場合を前提とした静的タイミング解析が行われるとする。そして、従来技術では、分岐予測器109を模擬する動作シミュレーション108の分岐予測がミスである場合には、分岐命令についての性能値にペナルティ値を加算することにより性能値が補正される。
ここで、分岐予測について簡単に説明する。パイプライン処理を行っているターゲットCPUでは、分岐が生じるとパイプラインにすでに設定されている命令を捨てる作業が行われるため、処理が遅くなる。そのため、分岐予測は、分岐先を予測し、予測した分岐先に基づいて事前に命令を流し込んでおくことによりパイプライン処理の効率を上げる技術である。
しかしながら、従来技術では、分岐予測器の動作を模擬する動作シミュレーションにおいて、分岐予測器の動作に従い分岐予測テーブルから分岐命令に対応するエントリを検索するため、性能シミュレーションに時間がかかるという問題点がある。
そこで、本実施の形態では、分岐予測テーブルにおける計算の対象ブロックbに含まれる条件付の分岐命令に応じたエントリを実行コードに関連付けておき、動作シミュレーション時に分岐命令に該当するエントリにだけアクセスする。これにより、動作シミュレーション108時に、該分岐予測テーブル110から該分岐命令に該当するエントリ111の検索を行わなくてよいため、シミュレーション時間の短縮化を図ることができる。
検証支援装置100は、ターゲットCPUが実行するターゲットプログラム101のコードを区切って所定のブロックbに分割する。検証支援装置100は、例えば、分岐命令と分岐命令の分岐先などで区切ってもよいし、ベーシックブロック単位で区切ってもよいし、予め定められた任意のコード単位であってもよい。
つぎに、検証支援装置100は、ターゲットプログラム101のコードを分割して得られるブロックbのうち、対象ブロック102が切り替わった場合、対象ブロック102の性能値を計算可能な実行コード104を生成する。
ここで、対象ブロック102とは、静的タイミング解析と性能シミュレーションおよび機能シミュレーションにおける対象となるブロックbである。機能シミュレーションとは、ターゲットCPUが対象ブロック102を実行した場合の実行結果を得るためのシミュレーションである。この機能シミュレーションによって対象ブロック102が切り替わる。実行コード104は、機能コード105とタイミングコード106を含む、ホストCPUが実行可能なコードである。
機能コード105は、ターゲットプログラム101から分割した対象ブロック102をコンパイルすることによって得られるホストCPUが実行可能なコードである。検証支援装置100は、例えば、機能コード105を実行することにより機能シミュレーションを実現する。タイミングコード106は、ターゲットCPUが対象ブロック102を実行した場合の性能値をホストCPUが計算可能なコードである。検証支援装置100は、例えば、タイミングコード106を実行することにより性能シミュレーションを実現する。
検証支援装置100は、対象ブロック102の静的タイミング解析を行うことにより、ターゲットCPUが対象ブロック102を実行した場合の性能値を計算可能な実行コード104を生成する。まず、具体的には、検証支援装置100は、例えば、対象ブロック102のターゲットコードをコンパイルすることにより、ホストCPUが実行可能な機能コード105を含む実行コード104を生成する。
そして、検証支援装置100は、対象ブロック102の静的タイミング解析の解析結果に基づいて、ターゲットCPUが対象ブロック102を実行した場合の性能値を計算可能なタイミングコード106を生成する。そして、検証支援装置100は、機能コード105のみの実行コード104にタイミングコード106を組み込むことにより、対象ブロック102の実行コード104を生成する。ここで、実行コード104は、ホストCPUが実行するコードであるため、ホストコードとも称する。
また、検証支援装置100は、対象ブロック102が条件付の分岐命令を有するブロックbに切り替わった場合、所定数の予測情報のうちのいずれかの予測情報に、分岐命令を示す命令識別情報と、分岐予測器109の予測結果に関する値とを対応付けて格納する。所定数の予測情報とは、例えば、動作シミュレーション108における分岐命令を示す命令識別情報と、命令識別情報が示す分岐命令についての分岐予測器109の予測結果に関する値とを対応付けて格納可能な情報である。動作シミュレーション108では、ターゲットCPUがアクセス可能な分岐予測器109の動作を模擬する。所定数の予測情報とは、例えば、分岐予測器109の分岐予測テーブル110である。
所定数は、ターゲットCPUの設計者によって機能や性能などに基づき定められてある。分岐命令を示す命令識別情報は、例えば、分岐命令のアドレスである。命令識別情報が示す分岐命令についての分岐予測器109の予測結果に関する値とは、例えば、重み付の係数やヒント値などである。ここでは値を係数と呼ぶ。係数については、分岐予測器109の種類などによって異なるため、特に限定しない。分岐予測テーブル110は、例えば、キーと、係数と、のフィールドを有する。分岐予測テーブル110のキーと係数との組み合わせは、単体の予測情報であり、エントリ111とも称する。キーのフィールドにはアドレスが設定され、係数のフィールドには重み付の係数が設定される。エントリ111−1の例では、キーのフィールドには「0x800100」が設定されてあり、係数のフィールドには「(w0,・・・)」が設定されてある。
検証支援装置100は、例えば、動作シミュレーション108における分岐予測テーブル110のうちの空きエントリ111に、新たに対象ブロック102に含まれる条件付の分岐命令のアドレスと係数とを格納する。空きエントリ111とは、アドレスと係数とがまだ格納されていないエントリ111である。分岐予測器109の動作シミュレーション108とは、ターゲットCPUがアクセス可能な分岐予測器109のモデルに、分岐命令のアドレスや分岐命令の予測結果などが与えられることにより実行される。分岐予測器109のモデルとしては、例えば、ハードウェア記述言語などによって分岐予測器109の機能を再現するビヘイビアモデルを用いることができる。
具体的に、検証支援装置100は、例えば、対象ブロック102が切り替わった場合に、エントリ111を示すアドレスを格納可能な領域をホストCPUがアクセス可能な記憶装置103に確保する。記憶装置103は、例えば、ホストCPUがアクセス可能であればよい。そのため、記憶装置103は、検証支援装置100が有していてもよいし、ネットワークなどを介して検証支援装置100と接続されていてもよい。確保された領域は、エントリポインタ107とも称する。検証支援装置100は、確保した領域に“NULL”を格納しておく。検証支援装置100は、確保した領域に格納される値と、実行コード104と、を関連付ける。
つぎに、検証支援装置100は、分岐予測器109の動作シミュレーション108における分岐予測テーブル110に空きエントリ111が無い場合には、分岐予測テーブル110に対して所定ルールに基づきエントリスペースの解放を行う。そして、検証支援装置100は、解放によって空いたエントリ111に新たに対象ブロック102に含まれる条件付の分岐命令のアドレスと係数とを格納する。所定ルールについては、特に限定しないが、例えばLRU(Least Recently Use)などが公知である。
検証支援装置100は、実行コード104に、いずれかのエントリ111を示すアドレスを関連付ける。実行コードは、ターゲットCPUが対象ブロック102を実行した場合の分岐予測器109の予測結果がヒットおよびミスのいずれか一方を示す情報に基づく対象ブロック102の性能値を計算可能なコードである。ヒットおよびミスのいずれか一方を示す情報は、発生する確率が高いと推定される予測ケースを示す情報である。
検証支援装置100は、実行コード104を実行することにより対象ブロック102の性能値を計算する際に、分岐命令の性能値を補正する。検証支援装置100は、補正する処理において、実行コード104に関連付けられたアドレスが示すエントリ111に基づく動作シミュレーション108を実行することによって得られる実行結果に基づき分岐命令の性能値を補正する。ここで、実行コード104に関連付けられたアドレスが示すエントリ111に基づく動作シミュレーション108とは、エントリ111に基づき分岐予測が行われることを示す。検証支援装置100は、動作シミュレーション108において、関連付けられたアドレスが示すエントリ111を直接指定して分岐予測を行うことができる。すなわち、検証支援装置100は、動作シミュレーション108において、関連付けられたアドレスが示すエントリ111にだけアクセスして分岐予測を行うことができる。そのため、検証支援装置100は、動作シミュレーション108において、対象ブロック102に含まれる分岐命令に対応するエントリ111の検索を行わない。
また、本実施の形態では、検証支援装置100は、格納する処理と関連付ける処理とについて、いずれも実行コード104を実行することにより対象ブロック102の性能値を計算する際に行う。
検証支援装置100は、生成した対象ブロック102の実行コード104を実行することにより、ターゲットCPUが対象ブロック102を実行した場合の性能値を算出する。これにより、ターゲットCPUが対象ブロック102を実行した場合の性能値を見積もることができる。
これにより、動作シミュレーション108の時に条件付の分岐命令に該当するエントリ111の分岐予測テーブル110の検索を行わなくてよいため、シミュレーション時間の短縮化を図ることができる。
(検証支援装置100のハードウェア構成例)
図2は、検証支援装置のハードウェア構成例を示すブロック図である。図2において、検証支援装置100は、ホストCPU201と、ROM(Read Only Memory)202と、RAM(Random Access Memory)203と、ディスクドライブ204と、ディスク205と、を有する。検証支援装置100は、I/F(Inter/Face)206と、入力装置207と、出力装置208と、を有する。また、ホストCPU201と、ROM202と、RAM203と、ディスクドライブ204と、I/F206と、入力装置207と、出力装置208とは、バス200によってそれぞれ接続される。
ここで、ホストCPU201は、検証支援装置100の全体の制御を司る。ROM202は、ブートプログラムなどのプログラムを記憶している。RAM203は、ホストCPU201のワークエリアとして使用される。ディスクドライブ204は、ホストCPU201の制御にしたがってディスク205に対するデータのリード/ライトを制御する。ディスク205は、ディスクドライブ204の制御で書き込まれたデータを記憶する。ディスク205としては、磁気ディスク、光ディスクなどが挙げられる。
I/F206は、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワーク209に接続され、このネットワーク209を介して他の装置に接続される。そして、I/F206は、ネットワーク209と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F206には、例えばモデムやLANアダプタなどを採用することができる。
入力装置207は、キーボード、マウス、タッチパネルなど利用者の操作により、各種データの入力を行うインターフェースである。また、入力装置207は、カメラから画像や動画を取り込むこともできる。また、入力装置207は、マイクから音声を取り込むこともできる。出力装置208は、ホストCPU201の指示により、データを出力するインターフェースである。出力装置208には、ディスプレイやプリンタが挙げられる。
(検証支援装置100の機能的構成例)
図3は、検証支援装置の機能的構成例を示すブロック図である。図3において、検証支援装置100は、コード変換部310と、シミュレーション実行部320と、シミュレーション情報収集部330と、を有する。コード変換部310、シミュレーション実行部320およびシミュレーション情報収集部330は、制御部となる機能である。制御部は、具体的には、例えば、図2に示したROM202、RAM203、ディスク205などの記憶装置103に記憶されたプログラムをホストCPU201に実行させることにより、または、I/F206により、その機能を実現する。制御部の各処理結果は、例えば、RAM203、ディスク205などの記憶装置103に記憶される。
ここで、検証支援装置100には、ターゲットプログラム101と、ターゲットプログラム101に関するタイミング情報340と、設定情報350とが入力される。具体的には、例えば、検証支援装置100は、図2に示した入力装置207を用いた利用者の操作入力により、ターゲットプログラム101とタイミング情報340と設定情報350の入力を受け付ける。
ターゲットプログラム101は、性能評価対象となるターゲットCPUが実行するプログラムである。検証支援装置100は、ターゲットCPUがターゲットプログラム101を実行した場合の性能値を見積もる。本実施の形態では、性能値として実行時間を見積もることとする。実行時間は、例えばサイクル数である。本実施の形態では、上述したように、例えば、ターゲットCPUがARMのプロセッサであり、ホストCPU201がx86系のプロセッサである例を挙げる。
また、図3に示すタイミング情報340は、ターゲットコードの各命令について、命令実行時の実行時間の基準値と、命令のうち外部依存命令ごとに、実行結果に応じた遅延時間を定めるペナルティ時間(ペナルティサイクル数)とを示す情報である。タイミング情報340は、例えば、RAM203、ディスク205などの記憶装置103に記憶される。外部依存命令とは、命令の実行時にターゲットCPUがアクセスするハードウェア資源の状態に依存して実行時間が変化する命令である。ハードウェア資源とは、キャッシュメモリや分岐予測器109などが挙げられる。
外部依存命令は、例えば、ロード命令やストア命令などのように、命令の実行結果が命令キャッシュ、データキャッシュ、TLB(Translation Lookaside Buffer)などの状態に依存して変化する命令であったり、分岐予測、コール/リターンのスタックなどの処理を行う命令である。また、タイミング情報340には、例えば、ターゲットコードの各命令について、命令実行時の各処理要素(段階)と使用可能なレジスタとの対応を示す情報が含まれていてもよい。
図4は、設定情報の一例を示す説明図である。設定情報350は、ターゲットコードの外部依存命令の処理において、生じる確率が高い予測ケースを定めた情報である。設定情報350は、処理内容、予測ケースのフィールドを有する。処理内容のフィールドには、ターゲットコードの外部依存命令の処理内容が格納される。予測ケースのフィールドには、外部依存命令の処理の予測結果が格納される。設定情報350は、レコード400−1〜レコード400−5などを有する。設定情報350は、例えば、命令キャッシュ、データキャッシュ、TLB検索、分岐予測、コール/リターンがすべてヒットするという予測ケースを示す。設定情報350は、例えば、RAM203、ディスク205などの記憶装置103に記憶される。
ここでは、分岐予測について例を挙げる。分岐予測結果が実際の分岐結果と一致する場合、予測結果がヒットであり、分岐予測結果が実際の分岐結果と一致しない場合、予測結果がミスである。レコード400−4では、分岐予測の予測ケースはヒットとなる確率が高いことを示す。
また、分岐予測について簡単に説明する。パイプライン処理を行っているターゲットCPUでは、分岐が生じるとパイプラインにすでに設定されている命令を捨てる作業が行われるため、処理が遅くなる。そのため、分岐予測では、分岐先を予測し、予測した分岐先に基づいて事前に命令を流し込んでおくことによりパイプライン処理の効率を上げる技術である。ターゲットCPUが有する分岐予測器109における分岐予測テーブル110は、図1に示したようにキーと係数と、のフィールドを有する。エントリ111の数は、予め定められてある。
分岐予測器109は、過去に行われた分岐の動作パターンの履歴に基づいて、実行中に分岐の動作を学習する。分岐予測器109は、分岐の動作の各パターンについて、係数が分岐予測テーブル110に保持される。この係数はヒント値とも呼ばれる。この係数は、分岐の過去の動作に基づいて、つぎの分岐が行われるものと予測すべきか、行われないものと予測すべきかを示す。分岐成立のことを「taken」、分岐不成立のことを「nottaken」とも呼ぶ。
つぎに、図3に示すコード変換部310は、ターゲットCPUが実行するターゲットプログラム101のコードから、ホストCPU201のコードを生成する。ホストCPU201のコードは実行コード104と称する。具体的には、コード変換部310は、ブロック分割部311と、予測シミュレーション実行部312と、コード生成部313とを含む。
ブロック分割部311は、ターゲットプログラム101のターゲットコードを区切って所定のブロックbに分割する。具体的には、ブロック分割部311は、例えば、ターゲットプログラム101を分岐命令と分岐命令の分岐先で区切ることにより、所定のブロックbに分割する。
なお、ブロック分割部311がターゲットプログラム101のコードをブロックbに分割するタイミングは、事前にすべて分割しておいてもよいし、対象ブロック102が切り替わった時に、その都度、対象ブロック102だけを分割することにしてもよい。
図5は、ターゲットプログラム例を示す説明図である。本実施の形態の詳細な説明で用いるターゲットプログラム101例を示す。ターゲットプログラム101は、1×2×3×4×5×6×7×8×9×10を求めるコードである。ターゲットプログラム101において、1,2行目が初期化処理のブロックb1であり、3〜6行目がループ本体のブロックb2である。
初期化処理は、r0の初期値を「1」とし、r1の初期値を「2」とする処理である。ループ本体は、r1の値が10より大きくなるまで、r0の値を「r0*r1」とし、r1の値をインクリメントする一連の処理を繰り返すループ処理である。ここでは、3〜6行目を対象ブロック102とし、1,2行目を対象ブロック102の直前に実行されたブロックbとする。5行目のcmp命令では、r1と10とを比較することを指示する。つぎに、6行目のbcc命令では、5行目のcmp命令による比較結果においてr1が10以下であれば、3行目のmul命令に戻ることを指示する。ターゲットプログラム101は、例えば、RAM203、ディスク205などの記憶装置103に記憶される。
つぎに、予測シミュレーション実行部312は、例えば、タイミング情報340と設定情報350とに基づいて、対象ブロック102をある実行結果を前提とした条件下で実行する静的タイミング解析を行う。ここでの静的タイミング解析については、上述した特許文献1に記述された静的シミュレーションと同様であるため、簡単に説明する。
より具体的には、予測シミュレーション実行部312は、例えば、設定情報350をもとに、対象ブロック102に含まれる外部依存命令の予測結果を設定する。そして、予測シミュレーション実行部312は、タイミング情報340を参照して、設定した予測ケースを前提とする場合の命令を実行して、命令実行の進み具合をシミュレーションする。
ここで、条件付の分岐命令を例に挙げる。予測シミュレーション実行部312は、分岐命令の予測ケースとして“ヒット”が設定されている処理については、対象ブロック102内の分岐命令による予測結果と実際の分岐結果とが一致する“ヒット”である場合の処理実行をシミュレーションする。
また、予測シミュレーション実行部312は、シミュレーション結果として、例えば、対象ブロック102の各命令に実行開始時刻と実行時間を出力する。
コード生成部313は、対象ブロック102が条件付の分岐命令を有する場合に、RAM203、ディスク205などの記憶装置103にエントリポインタ107の領域を確保する。そして、コード生成部313は、確保したエントリポインタ107には“NULL”を設定する。
また、コード生成部313は、予測シミュレーション実行部312のシミュレーション結果に基づいて、ターゲットCPUが対象ブロック102を実行した場合の実行時間を計算可能な実行コード104を生成する。ここで、実行コード104は、機能コード105とタイミングコード106とを含む、ホストCPU201が実行可能なコードである。
具体的には、コード生成部313は、例えば、対象ブロック102のターゲットコードをコンパイルすることにより、ホストCPU201が実行可能な機能コード105のみの実行コード104を生成する。さらに、コード生成部313は、シミュレーション結果に基づいて、ターゲットCPUが対象ブロック102を実行した場合の実行時間を計算可能なタイミングコード106を生成して、機能コード105のみの実行コード104に組み込む。
より具体的には、コード生成部313は、例えば、予測ケースでの分岐命令の実行時間を求める。そして、コード生成部313は、分岐予測が“ミス”である場合の実行時間を、予測ケースである“ヒット”時の実行時間の加算または減算を用いた補正計算により求める処理を行う関数を呼び出し可能な実行コード104を生成する。これにより、ターゲットCPUが対象ブロック102を実行した場合の実行時間を計算可能な実行コード104を生成することができる。
図6は、実行コード例を示す説明図である。実行コード104は、機能コード105とタイミングコード106とを含む。機能コード105は、例えば、ターゲットプログラム101がコンパイルされて得られるコードである。タイミングコード106は、例えば、ブロックbの実行時間を計算可能なコードである。
1行目と2行目の命令は、ブロックbにおける掛け算命令に対応する機能コード105である。3〜13行目の命令は、性能計算命令である。14行目と15行目の命令は分岐命令に対応する機能コード105である。
具体的に、3〜6行目の命令では、実際の分岐結果を求めて、実際の分岐結果をbr_outcomeに代入する。実行コード104では、補正処理時において分岐予測結果がヒットであるか否かを評価するために、実際の分岐結果をbr_outcomeとして保存する。7〜9行目の命令では、掛け算命令についての実行時間の合計値を加算してcycleに代入する。10〜13行目の命令では、分岐命令が予測ケースと異なる場合に実行時間を補正するためのヘルパー関数を呼び出す。
図3の説明に戻り、シミュレーション実行部320は、コード生成部313が生成した実行コード104を実行することにより、ターゲットCPUが対象ブロック102を実行した場合の実行時間を算出する。すなわち、シミュレーション実行部320は、ターゲットプログラム101を実行するターゲットCPUの命令実行の機能および性能のシミュレーションを行う。
具体的には、シミュレーション実行部320は、コード実行部321と、補正部322とを含む。コード実行部321は、対象ブロック102の実行コード104を実行する。具体的には、例えば、コード実行部321は、実行コード104を実行する。
対象ブロック102の実行コード104が実行されると、つぎに計算の対象となるブロックbが特定され、そのブロックbを識別する情報がコード変換部310に出力される。これにより、コード変換部310は、性能シミュレーションにおいて対象ブロック102が切り替わったことを認識することができるとともに、静的タイミング解析におけるつぎの対象ブロック102を認識することができる。
補正部322は、動作シミュレーション108における所定数の予測情報のうちのいずれかの予測情報に、対象ブロック102に含まれる分岐命令を示すアドレスと、当該分岐命令についての分岐予測器109の予測結果に関する値とを対応付けて格納する。動作シミュレーション108は上述したように、ターゲットCPUがアクセス可能な分岐予測器109の動作を模擬する。所定数の予測情報は、上述したように、例えば、分岐命令を示す命令識別情報と、命令識別情報が示す分岐命令についての分岐予測器109の予測結果に関する値と、を対応付けて格納可能な情報である。ここで、所定数の予測情報は、上述したように分岐予測テーブル110である。所定数は、ターゲットCPUの機能や性能などに基づいて予め定められてある。そして、予測情報は、分岐予測テーブル110のエントリ111である。命令識別情報は、分岐命令を示すアドレスである。予測結果に関する値は係数やヒント値などである。
そして、補正部322は、実行コード104に、格納したいずれかのエントリ111を示す予測識別情報を関連付ける。実行コード104は、上述したように、例えば、ターゲットCPUが対象ブロック102を実行した場合の分岐予測器109の予測結果がヒットおよびミスのいずれか一方を示す情報に基づく対象ブロック102の性能値を計算可能なコードである。ヒットおよびミスのいずれか一方を示す情報は、上述した予測ケースであり、本実施の形態では、予測ケースにはヒットが設定されてある。予測識別情報は、上述したようにエントリ111を示すエントリアドレスである。
具体的に、補正部322は、外部依存命令の実行結果が、設定されていた予測ケースと異なる場合に、既に求めた予測ケースでの実行時間を補正してその外部依存命令の実行時間を求める。具体的には、例えば、補正部322は、動作シミュレーション108を実行することにより、分岐命令の予測結果が、設定されていた予測ケースと異なるか否かを判断する。
また、補正部322は、実行コード104に関連付けられたアドレスが示すエントリ111に格納された分岐命令のアドレスが、対象ブロック102に含まれる条件付の分岐命令のアドレスと一致するか否かを判断する。補正部322は、この判断する処理を、格納する処理と関連付ける処理との前に行い、実行コード104にエントリ111を示すアドレスが関連付けられている場合に行う。
具体的に、補正部322は、例えば、動作シミュレーション108における、分岐予測器109のモデルに、実行コード104に関連付けられたエントリポインタ107の値を与えて、エントリポインタ107の値が示すエントリ111のキーを取得する。補正部322は、取得したキーと、分岐命令のアドレスと、が一致するか否かを判断する。
補正部322は、一致すると判断した場合には、格納する処理と関連付ける処理を行わない。一方、補正部322は、一致しないと判断した場合には、格納する処理と関連付ける処理を行う。具体的に、補正部322は、例えば、取得したキーと、分岐命令のアドレスと、が一致していない場合に、動作シミュレーション108における分岐予測テーブル110のエントリスペースを解放する。一致していない場合には、エントリスペースに空きがなかったため、過去に設定しておいたエントリポインタ107の値が示すエントリ111に、対象となっている分岐命令と異なる分岐命令によって使用されたことを示す。そのため、あらたにエントリ111を確保するためにエントリスペースが解放される。そして、補正部322は、解放されたエントリ111に分岐命令のアドレスに基づく新たなエントリ111を作成する。補正部322は、エントリ111のアドレスをエントリポインタ107に格納する。
また、補正部322は、確保した領域に予測識別情報が格納されていない場合に、取得したキーと、分岐命令のアドレスと、が一致するか否かを判断する処理を行わずに、格納する処理と前記関連付ける処理を行う。確保した領域に予測識別情報が格納されていない場合とは、エントリポインタ107に設定された値が“NULL”の場合である。エントリポインタ107に設定された値が“NULL”の場合とは、以前に計算の対象となっておらず、あらたにエントリポインタ107の領域が確保され、まだエントリ111を示すアドレスが設定されていない場合である。そのため、補正部322は、例えば、エントリポインタ107に設定された値が“NULL”である場合、動作シミュレーション108における分岐予測テーブル110のエントリ111に空きがあるか否かを判断する。
そして、補正部322は、動作シミュレーション108における分岐予測テーブル110のエントリ111に空きがあると判断された場合、空きのエントリ111に分岐命令のアドレスに基づく新たなエントリ111を作成する。そして、補正部322は、エントリ111のアドレスをエントリポインタ107に格納する。一方、補正部322は、動作シミュレーション108における分岐予測テーブル110のエントリ111に空きがないと判断された場合、動作シミュレーション108における分岐予測テーブル110のエントリスペースを解放する。そして、補正部322は、解放されたエントリ111に分岐命令のアドレスに基づく新たなエントリ111を作成する。補正部322は、エントリ111のアドレスをエントリポインタ107に格納する。
補正部322は、指定したエントリ111に登録された係数に基づく分岐予測の動作シミュレーション108を行うことにより、分岐成立と分岐不成立との少なくともいずれかを示す分岐予測結果を取得する。
そして、補正部322は、分岐予測結果と、実際の分岐結果と、が一致している場合に、静的タイミング解析によって得られた性能値にペナルティ値を加算せずに出力する。補正部322は、分岐予測結果と実際の分岐結果とが一致している場合に、静的タイミング解析によって得られた性能値にペナルティ値を加算する。ペナルティ値については、上述したタイミング情報340に設定されてある。
つぎに、補正部322は、アドレスポインタに格納されたアドレスが示すエントリ111に登録される係数を分岐予測結果により更新する動作シミュレーション108を行う。
図7は、補正処理プログラム例を示す説明図である。補正処理プログラム700は、図3に示す補正部322による処理がコーディングされてある。補正処理プログラム700には、cond_brが記述されてある。cond_brの引数であるbr_insn_addressが分岐命令を示すアドレスである。cond_brの引数であるbr_tab_entry_ptrが分岐予測テーブル110のエントリ111へのポインタである。cond_brの引数であるbr_outcomeが機能コード105の実行時の分岐結果である。分岐成立のことを「taken」、分岐不成立のことを「nottaken」とも呼ぶ。
penaltyには条件付分岐命令の実行時間を補正する場合には、図3に示すタイミング情報340に記述されたペナルティ時間が設定される。br_pred_qualityは、分岐予測がヒットした否かを示すフラグである。br_pred_qualityには初期値として分岐予測がヒットした場合を示す1が設定される。
先頭に記述されたif文では、br_tab_entry_ptrが“NULL”である場合と、br_tab_entry_ptrが示すエントリ111のキーと分岐命令のアドレスとが一致しない場合と、のいずれかに新しいエントリ111が作成される。
つぎに、pred_resultには、br_tab_entry_ptrが示すエントリ111についての分岐予測器109の動作シミュレーション108による分岐予測結果が代入される。
そして、2番目に記述されたif文では、分岐予測結果であるpred_resultと実際の分岐結果であるbr_outcomeとが一致しない場合に、penaltyに分岐予測がミスした場合の遅延値が加算される。また、2番目に記述されたif文では、分岐予測結果であるpred_resultと実際の分岐結果であるbr_outcomeとが一致しない場合に、ヒットまたはミスを示すbr_pred_qualityが0に設定される。
最後に、update_br_tab_entryでは、予測結果のヒットまたはミスを示すbr_pred_qualityに基づいて、br_tab_entry_ptrが示すエントリ111の係数を更新する処理が行われる。
また、図3の説明に戻って、シミュレーション情報収集部330は、性能シミュレーションの実行結果として、各ブロックbの実行時間を含むログ情報を収集する。ログ情報は、例えばシミュレーション情報360である。具体的には、シミュレーション情報収集部330は、例えば、各ブロックbの実行時間を加算することにより、ターゲットCPUがターゲットプログラム101を実行した場合の全体の実行時間を含むシミュレーション情報360を出力することにしてもよい。
また、予測シミュレーション実行部312は、対象ブロック102が切り替わった場合、対象ブロック102が以前に処理対象となったか否かを判断する。具体的には、予測シミュレーション実行部312は、対象ブロック102に対応する実行コード104が記憶装置103に記憶されているか否かを判断することにより、対象ブロック102が以前に処理対象となったか否かを判断する。
また、図示省略するが、実行コード104生成部が、実行コード104を生成するとともに、ブロックの識別情報と実行コード104との対応関係を管理するコードリストなどを作成してもよい。予測シミュレーション実行部312は、例えば、対象ブロック102のブロックbの識別情報に基づきコードリストを検索することによって、対象ブロック102が以前に計算の対象となったか否かを簡単に見つけることができる。
そして、予測シミュレーション実行部312は、対象ブロック102が以前に計算の対象となった場合、あらたにエントリポインタ107の領域を確保する処理と、実行コード104を生成する処理と、を行わない。対象ブロック102が以前に計算の対象となっていないと判断した場合、予測シミュレーション実行部312は、上述したように、あらたにエントリポインタ107の領域を確保する処理と、実行コード104を生成する処理と、を行う。
(検証支援装置100による検証支援処理手順例)
図8は、検証支援装置による検証支援処理手順例を示すフローチャートである。まず、検証支援装置100は、計算の対象ブロック102が切り替わったか否かを判断する(ステップS801)。計算の対象ブロック102が切り替わっていないと判断された場合(ステップS801:No)、検証支援装置100は、ステップS801へ戻る。
計算の対象ブロック102が切り替わったと判断された場合(ステップS801:Yes)、検証支援装置100は、対象ブロック102はコンパイル済みか否かを判断する(ステップS802)。つぎに、対象ブロック102はコンパイル済みであると判断された場合(ステップS802:Yes)、検証支援装置100は、ステップS810へ移行する。
そして、対象ブロック102はコンパイル済みでないと判断された場合(ステップS802:No)、検証支援装置100は、ターゲットプログラム101から対象ブロック102を分割して取得する(ステップS803)。検証支援装置100は、対象ブロック102に含まれる外部依存命令を検出する(ステップS804)。つぎに、検証支援装置100は、予測情報から検出した外部依存命令についての予測ケースを取得する(ステップS805)。
検証支援装置100は、予測ケースについて、静的タイミング解析する(ステップS806)。検証支援装置100は、外部依存命令に条件付の分岐命令があるか否かを判断する(ステップS807)。外部依存命令に条件付の分岐命令がないと判断された場合(ステップS807:No)、検証支援装置100は、ステップS809へ移行する。外部依存命令に条件付の分岐命令があると判断された場合(ステップS807:Yes)、検証支援装置100は、分岐予測テーブル110のエントリ111へのポインタ領域を確保して“NULL”を設定する(ステップS808)。確保されたポインタ領域がエントリポインタ107である。
検証支援装置100は、対象ブロック102をコンパイルすることによって得られる機能コード105と、予測ケースについてのタイミング解析結果に基づくタイミングコード106と、を含む実行コード104を生成する(ステップS809)。そして、検証支援装置100は、実行コード104の実行処理を行い(ステップS810)、一連の処理を終了する。
図9は、検証支援装置が行う補正処理手順例を示すフローチャートである。検証支援装置100は、分岐予測テーブル110エントリ111へのエントリポインタ107を取得する(ステップS901)。検証支援装置100は、エントリポインタ107が“NULL”であるか否かを判断する(ステップS902)。エントリポインタ107が“NULL”であると判断された場合(ステップS902:Yes)、検証支援装置100は、分岐予測テーブル110に空きがあるか否かを判断する(ステップS903)。
分岐予測テーブル110に空きがあると判断された場合(ステップS903:Yes)、検証支援装置100は、ステップS905へ移行する。分岐予測テーブル110に空きがないと判断された場合(ステップS903:No)、検証支援装置100は、エントリスペースを解放する(ステップS904)。検証支援装置100は、新たなエントリ111を作成する(ステップS905)。
そして、検証支援装置100は、エントリ111のアドレスをエントリポインタ107に格納し(ステップS906)、ステップS909へ移行する。一方、ステップS902において、エントリポインタ107が“NULL”でないと判断された場合(ステップS902:No)、検証支援装置100は、分岐命令のアドレスとエントリポインタ107が示すエントリ111のキーを比較する(ステップS907)。そして、分岐命令のアドレスとエントリポインタ107が示すエントリ111のキーが一致するか否かを判断する(ステップS908)。
分岐命令のアドレスとエントリポインタ107が示すエントリ111のキーとが一致しない場合(ステップS908:No)、検証支援装置100は、ステップS903へ移行する。分岐命令のアドレスとエントリポインタ107が示すエントリ111のキーが一致する場合(ステップS908:Yes)、ステップS909へ移行する。
ステップS906またはステップS908のYesの場合のつぎに、検証支援装置100は、エントリポインタ107が示すエントリ111の係数を取得する(ステップS909)。そして、検証支援装置100は、分岐予測器109の動作シミュレーション108を実行する(ステップS910)。つぎに、検証支援装置100は、分岐予測結果と実際の分岐結果とが一致するか否かを判断する(ステップS911)。
分岐予測結果と実際の分岐結果とが一致すると判断された場合(ステップS911:Yes)、検証支援装置100は、補正せずに、静的シミュレーションで得られた性能値を出力し(ステップS912)、ステップS914へ移行する。一方、分岐予測結果と実際の分岐結果とが一致しないと判断された場合(ステップS911:No)、検証支援装置100は、性能値にペナルティ時間を加算して出力する(ステップS913)。そして、検証支援装置100は、分岐予測結果と実際の分岐結果の比較結果に従って、エントリ111の係数を更新し(ステップS914)、一連の処理を終了する。
以上説明したように、検証支援装置100が、分岐予測器の動作シミュレーションに用いる分岐予測テーブルにおける条件付分岐命令に応じたエントリを実行コードに関連付けておき、動作シミュレーション時に命令に該当するエントリにだけアクセスする。これにより、動作シミュレーション時に、分岐予測テーブルから対象ブロックに含まれる分岐命令のアドレスを有するエントリの検索を行うことなく動作シミュレーションを行うことができる。したがって、シミュレーション時間の短縮化を図ることができる。
また、検証支援装置100が、切り替わった場合に、実行コードにエントリが関連付けられている際に、エントリのアドレスと、対象ブロックに含まれる分岐命令のアドレスとが一致する場合、新たにエントリを作成して実行コードに関連付ける処理を行わない。これにより、同じエントリを何度も作成しなくてよいため、よりシミュレーション時間の短縮を図ることができる。
また、検証支援装置100が、対象ブロックが以前に計算の対象となっていない場合に実行コードに関連付けられるエントリを示すアドレスを格納する領域を記憶装置に確保し、関連付ける処理において確保した領域にエントリのアドレスを格納する。これにより、1つの条件付の分岐命令について同じ領域にエントリのアドレスが格納されるため、記憶装置の使用量の増大を抑制することができる。
また、検証支援装置100が、確保した領域にエントリを示すアドレスが格納されていない場合に、エントリのキーと、対象ブロックに含まれる分岐命令のアドレスとが一致するかを判断する処理を行わずに、エントリを作成して実行コードに関連付ける処理を行う。これにより、対象ブロックに含まれる分岐命令に対応するエントリを作成していないことを直ぐに判断できるため、よりシミュレーションにかかる時間の短縮化を図ることができる。
また、検証支援装置100が、実行コードを実行した実行結果における分岐命令の実行結果が、設定情報が示すヒットおよびミスのいずれか一方と異なる場合に分岐命令の性能値を補正する。これにより、性能値を精度よく算出することができる。
なお、本実施の形態で説明した検証支援方法は、予め用意された検証支援プログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本検証支援プログラムは、磁気ディスク、光ディスク、USB(Universal Serial Bus)フラッシュメモリなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、検証支援プログラムは、インターネット等のネットワークを介して配布してもよい。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)第1プロセッサが、
前記第1プロセッサと異なる第2プロセッサが実行するプログラムのコードを分割して得られるブロックのうち、前記第2プロセッサが前記プログラムを実行した場合の性能値の計算の対象ブロックが、条件付の分岐命令を有するブロックに切り替わった場合に、
前記第2プロセッサがアクセス可能な分岐予測器の動作を模擬するシミュレーションにおける前記分岐命令を示す命令識別情報と、前記命令識別情報が示す前記分岐命令についての前記分岐予測器の予測結果に関する値と、を対応付けて格納可能な所定数の予測情報のうちのいずれかの予測情報に、前記対象ブロックに含まれる前記分岐命令を示す命令識別情報と、前記対象ブロックに含まれる前記分岐命令についての前記分岐予測器の予測結果に関する値とを対応付けて格納し、
前記第2プロセッサが前記対象ブロックを実行した場合の前記分岐予測器の予測結果がヒットおよびミスのいずれか一方を示す情報に基づく前記対象ブロックの性能値を計算可能な実行コードに、前記いずれかの予測情報を示す予測識別情報を関連付け、
前記実行コードを実行することにより前記対象ブロックの性能値を計算する際に、前記実行コードに関連付けられた前記予測識別情報が示す前記予測情報に基づく前記シミュレーションを実行することによって得られる前記シミュレーションの実行結果に基づいて前記分岐命令の性能値を補正する、
処理を実行することを特徴とする検証支援方法。
(付記2)前記第1プロセッサが、
前記切り替わった場合に、前記格納する処理と前記関連付ける処理との前に、前記実行コードに前記予測識別情報が関連付けられている場合、前記実行コードに関連付けられた前記予測識別情報が示す前記予測情報に格納された前記命令識別情報が、前記対象ブロックに含まれる前記分岐命令を示す識別情報と一致するか否かを判断し、
一致しないと判断した場合には、前記格納する処理と前記関連付ける処理を行い、一致すると判断した場合には、前記格納する処理と前記関連付ける処理を行わない、
ことを特徴とする付記1に記載の検証支援方法。
(付記3)前記第1プロセッサが、
前記対象ブロックが以前に前記計算の対象となっていない場合に、前記実行コードに関連付けられる前記予測識別情報を格納する領域を、前記第1プロセッサがアクセス可能な記憶装置に確保し、前記対象ブロックが以前に前記計算の対象となった場合に、前記領域を前記記憶装置に確保しない、
処理を実行し、
前記関連付ける処理では、確保した前記領域に前記予測識別情報を格納することを特徴とする付記1または2に記載の検証支援方法。
(付記4)前記第1プロセッサが、
前記対象ブロックが以前に前記計算の対象となっていない場合に、前記実行コードに関連付けられる前記予測識別情報を格納する領域を、前記第1プロセッサがアクセス可能な記憶装置に確保し、前記対象ブロックが以前に前記計算の対象となった場合に、前記領域を前記記憶装置に確保しない、
前記領域に前記予測識別情報が格納されていない場合に、前記判断する処理を行わずに、前記格納する処理と前記関連付ける処理を行う、
処理を実行し、
前記関連付ける処理では、確保した前記領域に前記予測識別情報を格納することを特徴とする付記2に記載の検証支援方法。
(付記5)前記補正する処理では、前記実行コードを実行した実行結果における前記分岐命令の実行結果が、前記情報が示すヒットおよびミスのいずれか一方と異なる場合に前記分岐命令の性能値を補正することを特徴とする付記1〜4のいずれか一つに記載の検証支援方法。
(付記6)第1プロセッサに、
前記第1プロセッサと異なる第2プロセッサが実行するプログラムのコードを分割して得られるブロックのうち、前記第2プロセッサが前記プログラムを実行した場合の性能値の計算の対象ブロックが、条件付の分岐命令を有するブロックに切り替わった場合に、
前記第2プロセッサがアクセス可能な分岐予測器の動作を模擬するシミュレーションにおける前記分岐命令を示す命令識別情報と、前記命令識別情報が示す前記分岐命令についての前記分岐予測器の予測結果に関する値と、を対応付けて格納可能な所定数の予測情報のうちのいずれかの予測情報に、前記対象ブロックに含まれる前記分岐命令を示す命令識別情報と、前記対象ブロックに含まれる前記分岐命令についての前記分岐予測器の予測結果に関する値とを対応付けて格納し、
前記第2プロセッサが前記対象ブロックを実行した場合の前記分岐予測器の予測結果がヒットおよびミスのいずれか一方を示す情報に基づく前記対象ブロックの性能値を計算可能な実行コードに、前記いずれかの予測情報を示す予測識別情報を関連付け、
前記実行コードを実行することにより前記対象ブロックの性能値を計算する際に、前記実行コードに関連付けられた前記予測識別情報が示す前記予測情報に基づく前記シミュレーションを実行することによって得られる前記シミュレーションの実行結果に基づいて前記分岐命令の性能値を補正する、
処理を実行させることを特徴とする検証支援プログラム。
(付記7)プロセッサが実行するプログラムのコードを分割して得られるブロックのうち、前記プロセッサが前記プログラムを実行した場合の性能値の計算の対象ブロックが、条件付の分岐命令を有するブロックに切り替わった場合に、
前記プロセッサがアクセス可能な分岐予測器の動作を模擬するシミュレーションにおける前記分岐命令を示す命令識別情報と、前記命令識別情報が示す前記分岐命令についての前記分岐予測器の予測結果に関する値と、を対応付けて格納可能な所定数の予測情報のうちのいずれかの予測情報に、前記対象ブロックに含まれる前記分岐命令を示す命令識別情報と、前記対象ブロックに含まれる前記分岐命令についての前記分岐予測器の予測結果に関する値とを対応付けて格納し、
前記プロセッサが前記対象ブロックを実行した場合の前記分岐予測器の予測結果がヒットおよびミスのいずれか一方を示す情報に基づく前記対象ブロックの性能値を計算可能な実行コードに、前記いずれかの予測情報を示す予測識別情報を関連付け、
前記実行コードを実行することにより前記対象ブロックの性能値を計算する際に、前記実行コードに関連付けられた前記予測識別情報が示す前記予測情報に基づく前記シミュレーションを実行することによって得られる前記シミュレーションの実行結果に基づいて前記分岐命令の性能値を補正する、
処理を実行する制御部を有することを特徴とする検証支援装置。
(付記8)第1プロセッサに、
前記第1プロセッサと異なる第2プロセッサが実行するプログラムのコードを分割して得られるブロックのうち、前記第2プロセッサが前記プログラムを実行した場合の性能値の計算の対象ブロックが、条件付の分岐命令を有するブロックに切り替わった場合に、
前記第2プロセッサがアクセス可能な分岐予測器の動作を模擬するシミュレーションにおける前記分岐命令を示す命令識別情報と、前記命令識別情報が示す前記分岐命令についての前記分岐予測器の予測結果に関する値と、を対応付けて格納可能な所定数の予測情報のうちのいずれかの予測情報に、前記対象ブロックに含まれる前記分岐命令を示す命令識別情報と、前記対象ブロックに含まれる前記分岐命令についての前記分岐予測器の予測結果に関する値とを対応付けて格納し、
前記第2プロセッサが前記対象ブロックを実行した場合の前記分岐予測器の予測結果がヒットおよびミスのいずれか一方を示す情報に基づく前記対象ブロックの性能値を計算可能な実行コードに、前記いずれかの予測情報を示す予測識別情報を関連付け、
前記実行コードを実行することにより前記対象ブロックの性能値を計算する際に、前記実行コードに関連付けられた前記予測識別情報が示す前記予測情報に基づく前記シミュレーションを実行することによって得られる前記シミュレーションの実行結果に基づいて前記分岐命令の性能値を補正する、
処理を実行させる検証支援プログラムを記録したことを特徴とする記録媒体。
100 検証支援装置
101 ターゲットプログラム
102 対象ブロック
103 記憶装置
104 実行コード
105 機能コード
106 タイミングコード
107 エントリポインタ
108 動作シミュレーション
109 分岐予測器
110 分岐予測テーブル
111 エントリ
201 ホストCPU
310 コード変換部
311 ブロック分割部
312 予測シミュレーション実行部
313 コード生成部
320 シミュレーション実行部
321 コード実行部
322 補正部
340 タイミング情報
350 設定情報
700 補正処理プログラム

Claims (5)

  1. 第1プロセッサが、
    前記第1プロセッサと異なる第2プロセッサが実行するプログラムのコードを分割して得られるブロックのうち、前記第2プロセッサが前記プログラムを実行した場合の性能値の計算の対象ブロックが、条件付の分岐命令を有するブロックに切り替わった場合に、
    前記第2プロセッサがアクセス可能な分岐予測器の動作を模擬するシミュレーションにおける前記分岐命令を示す命令識別情報と、前記命令識別情報が示す前記分岐命令についての前記分岐予測器の予測結果に関する値と、を対応付けて格納可能な所定数の予測情報のうちのいずれかの予測情報に、前記対象ブロックに含まれる前記分岐命令を示す命令識別情報と、前記対象ブロックに含まれる前記分岐命令についての前記分岐予測器の予測結果に関する値とを対応付けて格納し、
    前記第2プロセッサが前記対象ブロックを実行した場合の前記分岐予測器の予測結果がヒットおよびミスのいずれか一方を示す情報に基づく前記対象ブロックの性能値を計算可能な実行コードに、前記いずれかの予測情報を示す予測識別情報を関連付け、
    前記実行コードを実行することにより前記対象ブロックの性能値を計算する際に、前記実行コードに関連付けられた前記予測識別情報が示す前記予測情報に基づく前記シミュレーションを実行することによって得られる前記シミュレーションの実行結果に基づいて前記分岐命令の性能値を補正する、
    処理を実行することを特徴とする検証支援方法。
  2. 前記第1プロセッサが、
    前記切り替わった場合に、前記格納する処理と前記関連付ける処理との前に、前記実行コードに前記予測識別情報が関連付けられている場合、前記実行コードに関連付けられた前記予測識別情報が示す前記予測情報に格納された前記命令識別情報が、前記対象ブロックに含まれる前記分岐命令を示す識別情報と一致するか否かを判断し、
    一致しないと判断した場合には、前記格納する処理と前記関連付ける処理を行い、一致すると判断した場合には、前記格納する処理と前記関連付ける処理を行わない、
    ことを特徴とする請求項1に記載の検証支援方法。
  3. 前記第1プロセッサが、
    前記対象ブロックが以前に前記計算の対象となっていない場合に、前記実行コードに関連付けられる前記予測識別情報を格納する領域を、前記第1プロセッサがアクセス可能な記憶装置に確保し、前記対象ブロックが以前に前記計算の対象となった場合に、前記領域を前記記憶装置に確保しない、
    前記領域に前記予測識別情報が格納されていない場合に、前記判断する処理を行わずに、前記格納する処理と前記関連付ける処理を行う、
    処理を実行し、
    前記関連付ける処理では、確保した前記領域に前記予測識別情報を格納することを特徴とする請求項2に記載の検証支援方法。
  4. 第1プロセッサに、
    前記第1プロセッサと異なる第2プロセッサが実行するプログラムのコードを分割して得られるブロックのうち、前記第2プロセッサが前記プログラムを実行した場合の性能値の計算の対象ブロックが、条件付の分岐命令を有するブロックに切り替わった場合に、
    前記第2プロセッサがアクセス可能な分岐予測器の動作を模擬するシミュレーションにおける前記分岐命令を示す命令識別情報と、前記命令識別情報が示す前記分岐命令についての前記分岐予測器の予測結果に関する値と、を対応付けて格納可能な所定数の予測情報のうちのいずれかの予測情報に、前記対象ブロックに含まれる前記分岐命令を示す命令識別情報と、前記対象ブロックに含まれる前記分岐命令についての前記分岐予測器の予測結果に関する値とを対応付けて格納し、
    前記第2プロセッサが前記対象ブロックを実行した場合の前記分岐予測器の予測結果がヒットおよびミスのいずれか一方を示す情報に基づく前記対象ブロックの性能値を計算可能な実行コードに、前記いずれかの予測情報を示す予測識別情報を関連付け、
    前記実行コードを実行することにより前記対象ブロックの性能値を計算する際に、前記実行コードに関連付けられた前記予測識別情報が示す前記予測情報に基づく前記シミュレーションを実行することによって得られる前記シミュレーションの実行結果に基づいて前記分岐命令の性能値を補正する、
    処理を実行させることを特徴とする検証支援プログラム。
  5. プロセッサが実行するプログラムのコードを分割して得られるブロックのうち、前記プロセッサが前記プログラムを実行した場合の性能値の計算の対象ブロックが、条件付の分岐命令を有するブロックに切り替わった場合に、
    前記プロセッサがアクセス可能な分岐予測器の動作を模擬するシミュレーションにおける前記分岐命令を示す命令識別情報と、前記命令識別情報が示す前記分岐命令についての前記分岐予測器の予測結果に関する値と、を対応付けて格納可能な所定数の予測情報のうちのいずれかの予測情報に、前記対象ブロックに含まれる前記分岐命令を示す命令識別情報と、前記対象ブロックに含まれる前記分岐命令についての前記分岐予測器の予測結果に関する値とを対応付けて格納し、
    前記プロセッサが前記対象ブロックを実行した場合の前記分岐予測器の予測結果がヒットおよびミスのいずれか一方を示す情報に基づく前記対象ブロックの性能値を計算可能な実行コードに、前記いずれかの予測情報を示す予測識別情報を関連付け、
    前記実行コードを実行することにより前記対象ブロックの性能値を計算する際に、前記実行コードに関連付けられた前記予測識別情報が示す前記予測情報に基づく前記シミュレーションを実行することによって得られる前記シミュレーションの実行結果に基づいて前記分岐命令の性能値を補正する、
    処理を実行する制御部を有することを特徴とする検証支援装置。
JP2015014642A 2015-01-28 2015-01-28 検証支援方法、検証支援プログラム、および検証支援装置 Withdrawn JP2016139332A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2015014642A JP2016139332A (ja) 2015-01-28 2015-01-28 検証支援方法、検証支援プログラム、および検証支援装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2015014642A JP2016139332A (ja) 2015-01-28 2015-01-28 検証支援方法、検証支援プログラム、および検証支援装置

Publications (1)

Publication Number Publication Date
JP2016139332A true JP2016139332A (ja) 2016-08-04

Family

ID=56560252

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015014642A Withdrawn JP2016139332A (ja) 2015-01-28 2015-01-28 検証支援方法、検証支援プログラム、および検証支援装置

Country Status (1)

Country Link
JP (1) JP2016139332A (ja)

Similar Documents

Publication Publication Date Title
JP6099060B2 (ja) 低特権状態からのランタイム・インストルメンテーション・ファシリティの動作の制御
Farcy et al. Dataflow analysis of branch mispredictions and its application to early resolution of branch outcomes
JP6153533B2 (ja) ランタイム・インストルメンテーション指向サンプリング
TWI428826B (zh) 更新微處理器中之分支目標位址快取之方法以及相關之微處理器
JPWO2012049728A1 (ja) シミュレーション装置,方法,およびプログラム
JPH0863356A (ja) 分岐予測装置
GB2249414A (en) Predicting the performance of a computer system
JP2013084178A (ja) シミュレーション装置,方法,およびプログラム
US9465595B2 (en) Computing apparatus, computing method, and computing program
JP2003050715A (ja) コンパイラおよびデバッグ装置
JP2006520964A (ja) 分岐ターゲットに基づいて分岐予測をするための方法および装置
US10564992B2 (en) Simulation apparatus and storage medium
JP2016536665A (ja) 推論的ベクトル演算の実行を制御するためのデータ処理装置及び方法
JP2008176453A (ja) シミュレーション装置
US20140250289A1 (en) Branch Target Buffer With Efficient Return Prediction Capability
US8949681B2 (en) Correction apparatus, correction method, and computer product
US20160196156A1 (en) Simulation apparatus, simulation method, and computer product
US10402510B2 (en) Calculating device, calculation method, and calculation program
US20160011889A1 (en) Simulation method and storage medium
JP2016139332A (ja) 検証支援方法、検証支援プログラム、および検証支援装置
US11941403B2 (en) Selective prediction based on correlation between a given instruction and a subset of a set of monitored instructions ordinarily used to generate predictions for that given instruction
US10671780B2 (en) Information processing device that executes simulation and a simulation method
JP2000207224A (ja) ソフトウェアプリフェッチ方法
JP2002334128A (ja) 半導体集積回路の消費電力シミュレーション方法
US20150127318A1 (en) Apparatus and method for simulating an operation of an out-of-order processor

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20171215

A761 Written withdrawal of application

Free format text: JAPANESE INTERMEDIATE CODE: A761

Effective date: 20180122