JP6187264B2 - 計算方法、計算プログラム、および計算装置 - Google Patents

計算方法、計算プログラム、および計算装置 Download PDF

Info

Publication number
JP6187264B2
JP6187264B2 JP2014001176A JP2014001176A JP6187264B2 JP 6187264 B2 JP6187264 B2 JP 6187264B2 JP 2014001176 A JP2014001176 A JP 2014001176A JP 2014001176 A JP2014001176 A JP 2014001176A JP 6187264 B2 JP6187264 B2 JP 6187264B2
Authority
JP
Japan
Prior art keywords
instruction
combination
specific code
code
performance value
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.)
Expired - Fee Related
Application number
JP2014001176A
Other languages
English (en)
Other versions
JP2015130067A (ja
Inventor
敦 池
敦 池
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 JP2014001176A priority Critical patent/JP6187264B2/ja
Priority to US14/534,908 priority patent/US9880841B2/en
Publication of JP2015130067A publication Critical patent/JP2015130067A/ja
Application granted granted Critical
Publication of JP6187264B2 publication Critical patent/JP6187264B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3409Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
    • G06F11/3419Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment by assessing time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3457Performance evaluation by simulation
    • G06F11/3461Trace driven simulation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/885Monitoring specific for caches

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Software Systems (AREA)
  • Debugging And Monitoring (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Description

本発明は、計算方法、計算プログラム、および計算装置に関する。
従来、プログラムの開発を支援するために、プログラムをプロセッサ上で動作させた場合のプログラムの実行時間などの性能を見積もる技術がある(例えば、以下特許文献1参照。)。また、従来、多階層のキャッシュメモリの動作をシミュレーションする技術がある(例えば、以下特許文献2参照。)。
また、従来、プログラムを複数のブロックに分割し、各ブロックにおいてパイプラインインタロックを考慮した静的な実行サイクル数を算出する技術がある(例えば、以下特許文献3参照。)。
また、各ブロックについて、プロセッサがロード命令やストア命令などのメモリアクセス命令を実行した場合にキャッシュメモリの動作結果によって性能が異なる。そのため、従来、キャッシュヒットの場合についてのブロックの各命令の性能値を用意し、各ブロックについてキャッシュメモリの動作シミュレーションによって、キャッシュヒットとなった場合には用意された性能値によりブロックの性能値を計算する技術がある。そして、各ブロックについてキャッシュメモリの動作シミュレーションによって、キャッシュミスヒットとなった場合にキャッシュはキャッシュミスヒットとなった場合におけるプロセッサの動作シミュレーションを行うことによりブロックの性能値を計算する技術がある(例えば、以下特許文献4参照。)。
特開2000−122898号公報 特開2001−249829号公報 特開平7−21061号公報 特開2013−84178号公報
しかしながら、ブロック内にメモリアクセス命令が複数あると、複数のメモリアクセス命令についてのキャッシュメモリの動作結果がすべてキャッシュヒットとなる可能性が低くなる。そのため、いずれかのアクセス命令についてキャッシュミスヒットが発生すると、用意しておいたキャッシュヒットの場合の各命令の性能値を使用できないため、ブロックの性能値の計算を効率よく行うことができないという問題点がある。
1つの側面では、本発明は、性能値の計算の効率化を図ることができる計算方法、計算プログラム、および計算装置を提供することを目的とする。
本発明の一側面によれば、プロセッサに記憶領域への複数回のアクセスを指示する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータが、前記複数回のアクセスを前記プロセッサが実行した場合の前記プロセッサがアクセス可能なキャッシュメモリの動作結果の複数の組み合わせの各々について、前記動作結果が前記組み合わせとなった場合における前記特定コード内の各命令の性能値を取得し、前記特定コードが性能値の計算対象となった場合に、前記プロセッサが前記プログラムを実行した場合の前記キャッシュメモリの動作シミュレーションの実行結果によって、前記複数回のアクセスを前記プロセッサが実行した場合の前記キャッシュメモリの動作結果の組み合わせを取得し、取得した前記組み合わせが前記複数の組み合わせに含まれる場合、取得した前記各命令の性能値のうち、取得した前記組み合わせに対応する前記各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を計算する計算方法、計算プログラム、および計算装置が提案される。
本発明の一態様によれば、性能値の計算の効率化を図ることができる。
図1は、本発明にかかる計算装置による一動作例を示す説明図である。 図2は、計算装置100のハードウェア構成例を示すブロック図である。 図3は、計算装置100の機能的構成例を示すブロック図である。 図4は、ターゲットプログラムpgrに含まれるブロックBB例を示す説明図である。 図5は、タイミング情報330の記憶内容の一例を示す説明図である。 図6は、予測情報331の記憶内容例を示す説明図である。 図7は、すべてキャッシュヒットまたは先頭のLD命令についてキャッシュヒットとなった場合の動作例を示す説明図である。 図8は、補正値情報例を示す説明図である。 図9は、ホストコードHC生成例を示す説明図である。 図10は、ホストコードHC例を示す説明図である。 図11は、ヘルパー関数cache_ld例を示す説明図である。 図12は、連続してキャッシュミスヒットとなった場合の動作例を示す説明図である。 図13は、計算装置100による計算処理手順例を示すフローチャート(その1)である。 図14は、計算装置100による計算処理手順例を示すフローチャート(その2)である。 図15は、補正部322による補正処理の詳細な説明を示すフローチャートである。
以下に添付図面を参照して、本発明にかかる計算方法、計算プログラム、および計算装置の実施の形態を詳細に説明する。
図1は、本発明にかかる計算装置による一動作例を示す説明図である。計算装置100は、ターゲットプログラムpgrを第1プロセッサが実行した場合のターゲットプログラムpgrの性能値を計算するコンピュータである。性能値とは、例えば、ターゲットプログラムpgrの実行に要する実行時間、サイクル数などが挙げられる。本実施の形態では、性能値をサイクル数として説明する。計算装置100は、第2プロセッサを有する。ここで、第1プロセッサはターゲットCPU(Central Processing Unit)101と称し、第2プロセッサはホストCPUと称する。
ここでのターゲットプログラムpgrは特定コードを有する。ここで、特定コードは、ターゲットプログラムpgrから分割して得られる一部のコードである。また、特定コードは、ターゲットCPU101に記憶領域へのアクセスを指示するメモリアクセス命令を複数有する。ここでの記憶領域は、例えば、メインメモリである。また、ここでは、ターゲットプログラムpgrから分割して得られる特定コードなどの各コードをブロックBBと称する。計算対象となったブロックBBは対象ブロックと称する。図1の例では、対象ブロックはBBkである。ブロックBBkは、特定コードであって、記憶領域への複数回のアクセスを指示するメモリアクセス命令を複数有する。例えば、メモリアクセス命令は、メインメモリなどからデータを読み出すロード命令(以下、「LD(LOAD)命令」と称する。)やデータを書き込むストア命令(以下、「ST(STORE)命令」と称する。)が挙げられる。図1の例では、ブロックBBkは、連続して実行されるLD命令1とLD命令2とを有する。
例えば、ターゲットCPU101は、LD命令やST命令を実行すると、ターゲットCPU101は、データキャッシュや命令キャッシュやTLB(Translation Lookaside Buffer)などのキャッシュメモリ102にアクセスする。キャッシュメモリ102は、制御部と、記憶部と、を有する。制御部は、メモリアクセス命令が指示するアクセス先のデータが記憶部にあるか否かを判断する機能を有する。ここで、記憶部にある場合、キャッシュヒットと呼ばれ、記憶部にない場合、キャッシュミスヒットと呼ばれる。
例えば、所定範囲内にLD命令が複数ある場合、先頭のLD命令についてのキャッシュメモリ102の動作結果がキャッシュヒットであれば、後続のLD命令についてもキャッシュメモリ102の動作結果がキャッシュヒットとなる可能性が高い。また、例えば、先頭のLD命令についてキャッシュメモリ102の動作結果がキャッシュミスヒットであれば、後続のLD命令についてもキャッシュメモリ102の動作結果がキャッシュヒットとなる可能性が高い。これに対して、先頭のLD命令についてキャッシュメモリ102の動作結果がキャッシュミスヒットである場合に、後続のLD命令についてもキャッシュメモリ102の動作結果がキャッシュミスヒットとなる可能性は低い。例えば、先頭のLD命令についてキャッシュメモリ102の動作結果がキャッシュミスヒットであると、ターゲットCPU101がメインメモリからLD命令のアクセス先のデータを読み出す際、キャッシュメモリ102のサイズに基づいて周辺のデータも一緒に読み出す。そして、ターゲットCPU101は、読み出したデータをキャッシュメモリ102に格納するため、後続のLD命令のアクセス先のデータはキャッシュメモリ102に格納されている可能性が高い。そのため、キャッシュメモリ102の動作結果が連続してキャッシュミスヒットとなる可能性は低い。また、先頭のLD命令と後続のLD命令とが異なるキャッシュメモリ102から読み出す場合でも、それぞれの最初の読み出しはキャッシュミスヒットとなるが、例えばループ処理などの場合、次の読み出しからはキャッシュヒットとなり、ループ回数が多いと連続してキャッシュミスヒットとなる可能性はやはり低い。
そこで、本実施の形態では、計算装置100は、ブロック内の各メモリアクセス命令を実行した場合のキャッシュメモリ102の動作結果の各組み合わせについての該ブロックBB内の各命令のサイクル数を用意しておく。そして、計算装置100は、ブロックBBを実行した場合の該キャッシュメモリ102のシミュレーション結果におけるキャッシュメモリ102の動作結果に応じたサイクル数により該ブロックのサイクル数を計算する。
まず、図1(1)において計算装置100は、複数の組み合わせ104の各々について、動作結果が組み合わせ104となった場合における対象ブロック内の各命令のサイクル数を取得する。組み合わせ104とは、複数回のアクセスをターゲットCPU101が実行した場合のキャッシュメモリ102の動作結果の組み合わせである。複数の組み合わせ104は、例えば、複数回のアクセスについてキャッシュメモリ102の動作結果がすべてキャッシュミスヒットとなる組み合わせ104と異なる組み合わせ104である。また、複数の組み合わせ104は、複数回のアクセスについてキャッシュメモリ102の動作結果がすべてキャッシュヒットとなる組み合わせ104である。また、複数の組み合わせ104は、複数回のアクセスのうちの一つのアクセスについてキャッシュメモリ102の動作結果がキャッシュミスヒットとなる組み合わせ104である。図1の例では、組み合わせ104−1〜組み合わせ104−3の各々について、ブロックBBk内の各命令のサイクル数が用意される。組み合わせ104−1では、LD命令1についての動作結果がキャッシュヒットであり、LD命令2についての動作結果がキャッシュヒットである。組み合わせ104−2では、LD命令1についての動作結果がキャッシュミスヒットであり、LD命令2についての動作結果がキャッシュヒットである。組み合わせ104−3では、LD命令1についての動作結果がキャッシュヒットであり、LD命令2についての動作結果がキャッシュミスヒットである。
より具体的には、計算装置100は、対象ブロックのサイクル数を計算する処理において最初に計算対象となった場合、複数の組み合わせ104の各々について、動作結果が組み合わせ104となった場合における対象ブロック内の各命令のサイクル数を取得する。組み合わせ104の各々についての各命令のサイクル数は、レコード(例えば、103−1〜103−3)として、テーブル103に含まれる。テーブル103はホストCPUがアクセス可能なRAM(Random Access Memory)やディスクなどの記憶装置に記憶される。例えば、計算装置100は、複数の組み合わせ104の各々について、動作シミュレーションpsimを実行することによって、各命令のサイクル数を取得する。動作シミュレーションpsimは、ターゲットCPU101が対象ブロックを実行した場合のターゲットCPU101の動作のシミュレーションである。具体的には、動作シミュレーションpsimの方法については、公知技術(例えば、上述した特許文献4参照。)であるため、詳細な説明については省略する。
つぎに、図1(2)において計算装置100は、動作シミュレーションcsimの実行結果によって、複数回のアクセスをターゲットCPU101が実行した場合のキャッシュメモリ102の動作結果の組み合わせ104を取得する。動作シミュレーションcsimとは、ターゲットCPU101がターゲットプログラムpgrを実行した場合のキャッシュメモリ102の動作のシミュレーションである。動作シミュレーションcsimは、例えば、キャッシュメモリ102をモデル化した情報と、各メモリアクセス命令のアクセス先のアドレスと、によって簡易的に行う。
つぎに、また、計算装置100は、取得した組み合わせ104が複数の組み合わせ104に含まれるか否かを判断する。図1(3A)において計算装置100は、複数の組み合わせ104に含まれる場合、取得した各命令のサイクル数のうち、取得した組み合わせ104に対応する各命令のサイクル数によって、対象ブロックのサイクル数を計算する。対象ブロックのサイクル数とは、ターゲットCPU101が対象ブロックを実行した場合の対象ブロックのサイクル数である。
例えば、取得された組み合わせ104は、LD命令1についての動作結果がキャッシュヒットであり、LD命令2についての動作結果がキャッシュヒットであるとする。計算装置100は、レコード103−1に含まれる各命令のサイクル数によって対象ブロックのサイクル数を算出する。ここでは、対象ブロックのサイクル数は、レコード103−1に含まれる各命令のサイクル数の合計値とする。
また、計算装置100は、取得した組み合わせ104が複数の組み合わせ104に含まれるか否かを判断する。図1(3B)において計算装置100は、複数の組み合わせ104に含まれない場合、動作結果が取得した組み合わせ104となった場合における対象ブロック内の各命令のサイクル数を、動作シミュレーションpsimを実行することによって導出する。計算装置100は、導出した各命令のサイクル数によってターゲットCPU101が対象ブロックを実行した場合の対象ブロックのサイクル数を計算する。
図1によれば、用意された各命令の性能値によって直ぐに対象ブロックのサイクル数を算出可能であるため、性能値の計算の効率化を図ることができる。性能値の計算の効率とは、精度に対する時間である。
また、図1(2),(3A),(3B)については、計算装置100が、ブロックBBをコンパイルすることによって得られる機能コードFCと、タイミングコードTCと、を含むホストコードHCを実行することによって実現する。具体的には、タイミングコードTCには、動作シミュレーションcsimにおける組み合わせ104を取得する処理と、取得した組み合わせ104であった場合における対象ブロックのサイクル数を計算する処理と、が記述される。
そこで、計算装置100は、複数のアクセスについて動作結果が特定の組み合わせ104に対応する各命令のサイクル数によってターゲットCPU101が対象ブロックを実行した場合の対象ブロックのサイクル数を計算可能な計算用コードを生成してもよい。特定の組み合わせ104とは、例えば、すべてキャッシュヒットである組み合わせ104である。また、計算装置100は、複数の組み合わせ104のうち、特定の組み合わせ104以外の各々について、組み合わせ104に対応する各命令のサイクル数と、特定の組み合わせ104に対応する各命令のサイクル数と、の差分値を用意しておいてもよい。そして、計算装置100は、動作シミュレーションcsimにおける組み合わせ104が特定の組み合わせ104でない場合、特定の組み合わせ104に対応する各命令のサイクル数により計算した対象ブロックのサイクル数を、差分値によって補正してもよい。これにより、各命令のサイクル数をすべてRAMやディスクなどの記憶装置させておかなくてもよいため、省メモリ化を図ることができる。
また、複数のメモリアクセス命令が対象ブロックに含まれていても、メモリアクセス命令間が所定数以上離れている場合には、異なる動作シミュレーションが行われてもよい。
(計算装置100のハードウェア構成例)
図2は、計算装置100のハードウェア構成例を示すブロック図である。図2において、計算装置100は、ホストCPU201と、ROM(Read Only Memory)202と、RAM203と、ディスクドライブ204と、ディスク205と、を有する。計算装置100は、I/F(Inter Face)206と、入力装置207と、出力装置208と、を有する。また、各部はバス200によってそれぞれ接続される。
ここで、ホストCPU201は、計算装置100の全体の制御を司る。また、ホストCPU201は、ターゲットCPU101の性能シミュレーションを実行するホストCPUである。ROM202は、ブートターゲットプログラムpgrなどのターゲットプログラムpgrを記憶する。RAM203は、ホストCPU201のワークエリアとして使用される記憶部である。ディスクドライブ204は、ホストCPU201の制御にしたがってディスク205に対するデータのリード/ライトを制御する。ディスク205は、ディスクドライブ204の制御で書き込まれたデータを記憶する。ディスク205としては、磁気ディスク、光ディスクなどが挙げられる。
I/F206は、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワークNETに接続され、ネットワークNETを介して他のコンピュータに接続される。そして、I/F206は、ネットワークNETと内部のインターフェースを司り、他のコンピュータからのデータの入出力を制御する。I/F206には、例えばモデムやLANアダプタなどを採用することができる。
入力装置207は、キーボード、マウス、タッチパネルなどを用いた利用者の操作入力により、各種データの入力を行うインターフェースである。出力装置208は、ホストCPU201の指示により、データを出力するインターフェースである。出力装置208としては、ディスプレイやプリンタなどが挙げられる。
(計算装置100の機能的構成例)
図3は、計算装置100の機能的構成例を示すブロック図である。計算装置100は、コード変換部301と、シミュレーション実行部302と、シミュレーション情報収集部303と、を含む。また、コード変換部301、シミュレーション実行部302およびシミュレーション情報収集部303は、制御部となる機能である。各部の処理は、例えば、ホストCPU201がアクセス可能なROM202やディスク205などの記憶装置に記憶された計算ターゲットプログラムpgrにコーディングされる。そして、ホストCPU201が記憶装置から計算ターゲットプログラムpgrを読み出して、計算ターゲットプログラムpgrにコーディングされた処理を実行する。これにより、各部の処理が実現される。また、各部の処理結果は、例えば、RAM203、ディスク205などの記憶装置に記憶される。
ここで、計算装置100には、ターゲットプログラムpgrと、ターゲットプログラムpgrに関するタイミング情報と、予測情報と、が入力される。具体的には、例えば、計算装置100は、図2に示した入力装置207を用いた利用者の操作入力により、ターゲットプログラムpgrとタイミング情報330と予測情報331の入力を受け付ける。
コード変換部301は、対象ブロックの各命令の性能値によって対象ブロックがターゲットCPU101によって実行された場合の性能値を算出可能なホストコードHCを生成する。ここでは、性能値をサイクル数として説明する。シミュレーション実行部302は、ホストコードHCを実行することによって、対象ブロックがターゲットCPU101によって実行された場合のサイクル数を算出する。シミュレーション情報収集部303は、シミュレーション実行部302によって得られるサイクル数の情報を出力する。
まず、入力されるターゲットプログラムpgrと、ターゲットプログラムpgrに関するタイミング情報330と、予測情報331と、について説明する。
図4は、ターゲットプログラムpgrに含まれるブロックBB例を示す説明図である。ブロックBBは、連続するLD命令と、MULT命令と、を含む。1行目のLD命令から3行目のMULT命令の順にターゲットCPU101のパイプラインに投入される。
図5は、タイミング情報330の記憶内容の一例を示す説明図である。タイミング情報330は、命令実行時の各処理要素(ステージ)と使用可能なレジスタとの対応を示す情報と、命令のうち外部依存命令ごとに、実行結果に応じた遅延時間を定めるペナルティ時間(ペナルティサイクル数)とを示す情報である。
外部依存命令とは、命令の実行時にターゲットCPU101がアクセスするハードウェア資源の状態に依存してサイクル数が変化する命令である。例えば、外部依存命令が実行されると、例えば、命令キャッシュ、データキャッシュ、TLB検索などを行ったり、または、分岐予測、コール/リターンのスタックなどの処理が行われる。具体的な外部依存命令としては、LD命令またはST命令などが挙げられる。図5で示すタイミング情報330は、レコード330−1〜レコード330−3を記憶している。
タイミング情報330は、命令種別、ソースレジスタ、宛先レジスタ、ペナルティという4つのフィールドを含む。命令種別フィールドには、命令のオペコードが格納される。ソースレジスタフィールドには、オペランドのうち入力元となるレジスタが格納される。宛先レジスタフィールドには、オペランドのうち出力先となるレジスタが格納される。ペナルティフィールドには、実行結果に応じた遅延時間が格納される。
レコード330−1は、LD命令について、ソースレジスタrs1(r1)が1番目の処理要素(e1)で、宛先レジスタrd(r2)が2番目の処理要素(e2)で使用可能となることを示す。また、レコード330−1は、キャッシュミスヒットが発生した場合に、6サイクルの遅延時間が発生することを示す。なお、exは、パイプラインステージのうちエグゼキュートステージのx番目の処理要素であることを示している。xは1以上の整数である。
レコード330−2は、LD命令について、ソースレジスタrs1(r3)が1番目の処理要素(e1)で、宛先レジスタrd(r4)が2番目の処理要素(e2)で使用可能となることを示す。また、レコード330−2は、キャッシュミスヒットが発生した場合に、6サイクルの遅延時間が発生することを示している。
また、レコード330−3は、MULT命令では、第1ソースレジスタrs1(r2)が処理要素e1、第2ソースレジスタrs2(r4)が処理要素e2、宛先レジスタrd(r5)は処理要素e3で使用可能であることを示す。
図6は、予測情報331の記憶内容例を示す説明図である。予測情報331は、ターゲットプログラムpgrの外部依存命令の処理において、生じる確率が高い実行結果(予測結果)を定めた情報である。例えば、予測情報331は、処理内容、予測結果という2つのフィールドを含む。処理内容フィールドには、ターゲットコードの外部依存命令の処理内容が格納される。予測結果フィールドには、外部依存命令の処理の予測結果が格納される。各フィールドに情報が設定されることにより、レコード(例えば、331−1〜331−5など)として記憶される。予測情報331では、例えば、命令キャッシュについての予測はヒットであり、データキャッシュについての予測はヒットであり、TLB検索についての予測はヒットである。また、予測情報331では、分岐予測についての予測はヒットであり、コール/リターンについての予測はヒットであることが定められてある。
まず、コード分割部311は、例えば、計算装置100に入力されたターゲットプログラムpgrを所定基準によってブロックBBに分割する。分割タイミングは、例えば、対象ブロックが変化した場合にあらたな対象ブロックを分割してもよいし、事前にターゲットプログラムpgrを複数のブロックBBに分割してもよい。分割されるブロック単位は、例えば、ベーシックブロック単位でよく、または、予め定められた任意のコード単位でよい。ベーシックブロック単位とは、分岐命令からつぎの分岐命令前までの命令群である。
判断部312は、対象ブロックをコンパイル済みか否か判断する。これにより、対象ブロックが最初に計算対象となったか否かを判断する。過去に計算対象になっていれば対象ブロックはコンパイル済みであり、最初に計算対象となった場合、対象ブロックはコンパイル済みでない。判断部312は、例えば、性能のシミュレーションの実行結果に応じてつぎに計算対象となるブロックBBを判断可能である。より具体的には、判断部312は、対象ブロックに関連付けられたホストコードHCがあるか否かを判断する。例えば、ホストコードリスト332では、ブロックID、ホストコード、補正値情報のフィールドを有する。ブロックIDのフィールドには、ブロックを示す識別情報が設定され、ホストコードのフィールドには、ブロックに対応するホストコードが設定され、補正値情報のフィールドには、ホストコードHCにより利用される補正値情報が設定される。このように、判断部312は、ホストコードリスト332を参照すれば、対象ブロックに関連付けられたホストコードHCの有無を判定可能である。対象ブロックに関連付けられたホストコードHCがある場合、判断部312は、対象ブロックがコンパイル済みであると判断する。対象ブロックに関連付けられたホストコードHCがない場合、判断部312は、対象ブロックがコンパイル済みでないと判断する。
対象ブロックがコンパイル済みであると判断部312によって判断された場合、予測シミュレーション実行部313は、予測情報331に基づいて、対象ブロックに含まれる外部依存命令についての各予測ケースを設定する。そして、予測シミュレーション実行部313は、タイミング情報330を参照して、予測ケースを前提とするブロックBB内の各命令の実行の進み具合の動作シミュレーションpsimを実行する。これにより、予測シミュレーション実行部313は、設定した予測ケースを前提とする場合のブロックBB内の各命令のサイクル数を導出する。また、予測シミュレーション実行部313は、導出した各命令のサイクル数を後述する補正値情報に格納する。
また、予測シミュレーション実行部313は、ブロックBB内に複数のメモリアクセス命令が含まれる場合、タイミング情報330を参照して、予測ケースと異なるケースを前提とするブロックBB内の各命令の実行の進み具合をシミュレーションする。これにより、予測シミュレーション実行部313は、設定した予測ケースと異なるケースを前提とする場合のブロックBB内の各命令のサイクル数を導出する。
つぎに、予測シミュレーション実行部313は、設定した予測ケースを前提とした場合の算出したブロックBBのサイクル数と、設定した予測ケースと異なるケースを前提とした場合の算出したブロックBBのサイクル数と、の差分値を、出力する。出力先は、例えば、後述する補正値情報である。
図7は、すべてキャッシュヒットまたは先頭のLD命令についてキャッシュヒットとなった場合の動作例を示す説明図である。ブロックBB1の各命令は、fステージ、dステージ、eステージを順に実行する。fステージ、dステージは命令によらず1サイクルで処理を行い、eステージは、各命令によって異なるサイクル数で処理を行う。また、本実施の形態では、LD命令やST命令については、基準となるサイクル数を2とし、MULT命令については、基準となるサイクル数を3とし、ADD命令やSUB命令などのその他の命令については、基準となるサイクル数を1とする。基準となるサイクル数については、ターゲットCPU101の構成に応じて定まるため、種々変更可能であり、特に限定しない。
図5に示すタイミング情報330によれば、1行目のLD命令のfステージについてはタイミングt−2に行われ、2行目のLD命令のfステージについてはタイミングt−1に行われる。また、3行目のMULT命令のfステージについてはタイミングtに行われる。
また、図7(A)では、1行目のLD命令および2行目のLD命令についてのキャッシュメモリ102の動作結果がいずれもキャッシュヒットの組み合わせについての動作シミュレーション結果例を示す。図7(A)において、3行目のMULT命令についてのe3ステージについてはタイミングt+4に行われる。また、例えば、1行目のLD命令のfステージから3行目のMULT命令のe3ステージまでの差分値(x)は6である。
また、図7(B)では、1行目のLD命令についてのキャッシュメモリ102の動作結果がキャッシュミスヒットであり、2行目のLD命令についてのキャッシュメモリ102の動作結果がキャッシュヒットである組み合わせについての動作シミュレーション結果例を示す。
図7(B)において、3行目のMULT命令のe3ステージについてはタイミングt+10である。また、例えば、1行目のLD命令のfステージから3行目のMULT命令のe3ステージまでの差分値(y)は12である。
予測シミュレーション実行部313は、「差分値(y)−差分値(x)」が1行目のLD命令を実行した場合のキャッシュメモリ102の動作結果がキャッシュミスヒットである場合における補正値となる。導出された補正値は、後述する補正値情報の補正値Bのフィールドに出力される。ここでは、補正値は、6である。
図8は、補正値情報例を示す説明図である。補正値情報TT1は、ホストコードHC1の実行に用いるサイクル数が設定される。例えば、補正値情報TT1は、補正値Aと、補正値Bと、のフィールドを有する。各フィールドに情報が設定されることにより、レコード(例えば、800−1〜800−3など)として記憶される。補正値Aのフィールドには、各命令のeステージの数を、予測ケースを前提とした場合における動作シミュレーション結果に基づいて補正した値である。
図7(A)に示したように、ブロックBB1については、予測ケースがキャッシュヒットを前提とした場合において、ストールなどが発生しないため、補正値Aのフィールドには、各命令のeステージの数がそのまま設定されてある。
また、1行目のLD命令を実行した場合のキャッシュメモリ102の動作結果が予測ケースと異なるキャッシュミスヒットとなった場合についての補正値Bのフィールドには、上述した「差分値(y)−差分値(x)」である6が設定される。
また、図示しないが、2行目のLD命令を実行した場合のキャッシュメモリ102の動作結果がキャッシュミスヒットとなった場合についての補正値は、1行目のLD命令についての補正値と同様に算出される。ここでは、補正値は6とする。ただし、1行目のLD命令についてキャッシュヒットとなった後に、2行目のLD命令についてキャッシュミスヒットとなる可能性は低い。例えば、1行目のLD命令についてのキャッシュメモリ102の動作結果がキャッシュミスヒットとなった場合、キャッシュメモリ102に含まれる制御部が、メインメモリから該当のデータを含む所定幅のデータを取得してキャッシュメモリ102に格納する。そのため、2行目のLD命令を実行した場合のロードされるデータが当該所定幅のデータに含まれている可能性が高い。そのため、キャッシュメモリ102の動作がキャッシュヒットとなる可能性が高い。
コード生成部314は、予測シミュレーション結果に基づいて、ターゲットCPU101が対象ブロックを実行した場合の対象ブロックのサイクル数を計算するホストコードHCを生成する。生成されたホストコードHCは、例えば、対象ブロックと関連付けられてRAM203やディスク205などの記憶装置に記憶される。例えば、対象ブロックを示すIDと関連付けられてホストコードリストに332登録される。
図9は、ホストコードHC生成例を示す説明図である。図9(A)は、ブロックBB1からホストコードHC(機能コードFCのみ)が生成される例を示し、図9(B)は、ホストコードHC(機能コードFCのみ)に、タイミングコードTCが組み込まれる例を示す。
図9(A)に示すように、コード生成部314は、ブロックBB1に含まれるターゲットコードInst_Aをコンパイルすることにより、ホストコードHost_Inst_A0_func、Host_Inst_A1_funcに変換する。コード生成部314は、ブロックBB1に含まれるターゲットコードInst_Bをコンパイルすることによって、ホストコードHost_Inst_B0_func、Host_Inst_B1_func、Host_Inst_B2_func、Host_Inst_B3_funcに変換する。また、コード生成部314は、ブロックBB1に含まれるターゲットコードInst_Cをコンパイルすることによって、ホストコードHost_Inst_C0_func、Host_Inst_C1_func、Host_Inst_C2_funcに変換する。これにより、機能コードFCのみのホストコードHCが生成される。
さらに、図9(B)に示すように、コード生成部314は、機能コードFCのみのホストコードHCに、ターゲットコードInst_AのタイミングコードHost_Inst_A2_cycle、Host_Inst_A3_cycleを組み込む。コード生成部314は、ターゲットコードInst_BのタイミングコードHost_Inst_B4_cycle、Host_Inst_B5_cycleを組み込む。コード生成部314は、ターゲットコードInst_CのタイミングコードHost_Inst_C3_cycleを組み込む。
タイミングコードTCは、対象ブロックに含まれる命令のサイクル数を定数化し、命令のサイクル数を合計して対象ブロックのサイクル数を求めるコードである。これにより、ブロックBB実行中の進み具合を示す情報を得ることができる。なお、ホストコードHCのうち、機能コードFC、外部依存命令以外の命令についてのタイミングコードTCは既知のコードを使用して実施できる。外部依存命令についてのタイミングコードTCは、補正処理を呼び出すヘルパー関数呼び出し命令として用意される。本実施の形態におけるヘルパー関数呼び出し命令については後述する。
図10は、ホストコードHC例を示す説明図である。ブロックBB1に対応するホストコードHC1は、機能コードFC1と、タイミングコードTC1と、を有する。機能コードFC1は、1行目のLD命令についての機能コードと、2行目のLD命令についての機能コードと、3行目のMULT命令についての機能コードと、を有する。
タイミングコードTC1は、1行目のLD命令についてヘルパー関数cache_ldの呼び出し命令と、予測ケースであった場合における1行目のLD命令のサイクル数を加算する計算命令と、を有する。また、タイミングコードTC1は、ヘルパー関数cache_ldの呼び出し命令と、予測ケースであった場合における1行目のLD命令のサイクル数を加算する計算命令と、3行目のMULT命令のサイクル数を加算する計算命令と、を有する。
図10の例では、計算命令によって、「current_time」にサイクル数を加算していくことにより、ターゲットCPU101がブロックBB1を実行した場合のブロックBB1のサイクル数が算出される。例えば、「delta_hit(1)」〜「Delta_hit(3)」は、補正値情報TT1の補正値Aのフィールドに設定された値である。「delta_hit(1)」は、レコード800−1の補正値Aのフィールドに設定された値である。「delta_hit(2)」は、レコード800−2の補正値Aのフィールドに設定された値である。「delta_hit(3)」は、レコード800−3の補正値Aのフィールドに設定された値である。
図10に示すように、ヘルパー関数cache_ldの引数は、LD命令におけるアクセス先の記憶領域を示すアドレスと、命令番号と、である。命令番号については、補正値情報TT1のレコードから補正値Bのフィールドに設定された値を取得するためのインデックス情報である。例えば、2行目の「call cache_ld(Address1,1)」では、補正値情報TT1のレコード800−1の補正値Bのフィールドに設定された値が補正値として利用される。ヘルパー関数cache_ldの詳細については図11を用いて後述する。
つぎに、シミュレーション実行部302は、コード生成部314が生成したホストコードHCを実行することにより、ターゲットCPU101が対象ブロックを実行した場合のサイクル数を算出する。すなわち、シミュレーション実行部302は、ターゲットプログラムpgrを実行するターゲットCPU101の命令実行の機能および性能のシミュレーションを行う。
具体的には、シミュレーション実行部302は、コード実行部321と、補正部322とを含む。コード実行部321は、対象ブロックのホストコードHCを実行する。具体的には、例えば、コード実行部321は、ホストコードリスト332から、対象ブロックのIDに対応するホストコードHCを取得して、取得したホストコードHCを実行する。
また、シミュレーション実行部302は、対象ブロックのホストコードHCが実行されると、次に処理対象となるブロックBBが特定できる。そのため、シミュレーション実行部302は、動作シミュレーションpsimにおけるPC(Program Counter)の値をそのブロックBBが格納されてあるアドレスを指すように変更する。または、シミュレーション実行部302は、例えば、次に処理対象となるブロックBBの情報(例えば、ブロックBBID)をコード変換部301に出力する。これにより、コード変換部301は、ホストコードHCの実行による動作シミュレーションpsimにおいて対象ブロックが切り替わったことを認識することができるとともに、動作シミュレーションpsimにおける次の対象ブロックを認識することができる。
また、コード実行部321は、ホストコードHCの実行において、へルパー関数cache_ld呼び出し命令を実行すると、ヘルパー関数cache_ldである補正部322を呼び出す。補正部322は、外部依存命令の実行結果が、設定されていた予測ケースと異なる場合に、外部依存命令のサイクル数を、予測ケースでのサイクル数を補正して求める。
具体的には、例えば、補正部322は、ターゲットCPU101が対象ブロックを実行した場合の動作シミュレーションcsimを実行することにより、外部依存命令の実行結果が、設定されていた予測結果と異なるか否かを判断する。補正部322での動作シミュレーションcsimは、例えば、ターゲットCPU101と、ターゲットCPU101がアクセス可能なキャッシュなどのハードウェア資源と、を有するシステムのモデルにターゲットプログラムpgrを与えることにより実行される。例えば、外部依存命令がLD命令であれば、ハードウェア資源は、キャッシュメモリ102である。
LD命令を例に挙げると、補正部322は、予測ケースであるキャッシュヒットとなった場合には、何もせずに処理を終了する。補正部322は、予測ケースと異なった場合に、同一のブロックBB内であって、直近に実行された所定数命令に含まれるLD命令についての動作シミュレーションcsimにおける動作結果が予測ケースと異なるか否かを判断する。所定数については、例えば、5程度とするが、これに限らず、利用者などによって種々変更可能である。
補正部322は、キャッシュミスヒットとなったと判断した場合に、対象ブロック内の命令であって、対象となるLD命令を含む前後所定数の命令を実行した場合の動作シミュレーションcsimを実行する。これにより、補正部322は、動作シミュレーション結果によって得られるサイクル数に基づいて、キャッシュヒットとなった場合におけるサイクル数とキャッシュミスヒットとなった場合におけるサイクル数との差分を、対象ブロックのサイクル数に加算する。具体的には、例えば、補正部322は、差分を上述した「current_time」に加算する。
図11は、ヘルパー関数cache_ld例を示す説明図である。まず、補正部322は、ヘルパー関数cache_ldによって、引数addressによって対象のLD命令を実行した場合のキャッシュメモリ102の動作シミュレーションcsimを行う。ここでの動作シミュレーションcsimは、上述したように、例えば、ターゲットCPU101と、ターゲットCPU101がアクセス可能なキャッシュと、を有するシステムのモデルに対象となるLD命令のアクセス先のアドレスを与えることにより実行される。
つぎに、補正部322は、キャッシュミスヒットとなった場合に、同一のブロックBB内であって、直近に実行された5命令に含まれるLD命令を実行した場合のキャッシュメモリ102の動作シミュレーションcsimにおいてキャッシュミスヒットとなったかを判断する。直近に実行された5命令に含まれるLD命令についての動作シミュレーションcsimにおける動作結果が予測ケースと異なったかは、「prev_cache_miss_flag」と「prev_cache_miss_offset」によって判定可能である。直近に実行された5命令に含まれるLD命令を直近のLD命令とも呼ぶ。
補正部322は、直近のLD命令についてキャッシュミスヒットであると判断された場合、対象ブロック内の対象となるLD命令と前後5命令とについての動作シミュレーションpsimを行う。図示していないが、補正部322は、動作シミュレーション結果によって得られるサイクル数に基づいて、キャッシュヒットとなった場合におけるサイクル数とキャッシュミスヒットとなった場合におけるサイクル数との差分を、対象ブロックのサイクル数に加算する。
また、補正部322は、直近のLD命令についてキャッシュミスヒットでないと判断された場合、補正値情報TT1内のレコード800−inumの補正値Bのフィールドに設定された値を取得して、「current_time」に加算する。ここでの加算は、補正値Bを加算する加算命令「current_time+=delta_miss[inum]」によって行われる。
また、補正部322は、対象となるLD命令についてキャッシュミスヒットであると判断された場合、「prev_cache_miss_flag」を1に設定し、「prev_cache_miss_offset」にinumを設定する。これにより、つぎのLD命令についてキャッシュミスヒットとなった場合に、直近のLD命令においてキャッシュミスヒットとなったか否かを判断することが可能となる。
また、例えば、1行目のLD命令についてキャッシュヒットであり、2行目のLD命令についてキャッシュヒットであると判定された場合、current_timeは、加算命令が順に実行されて、「2」+「2」+「3」となり7となる。また、例えば、1行目のLD命令についてキャッシュミスヒットであり、2行目のLD命令についてキャッシュヒットであると判定された場合、current_timeは、加算命令が順に実行されて、「6」+「2」+「2」+「3」となり13となる。また、例えば、1行目のLD命令についてキャッシュヒットであり、2行目のLD命令についてキャッシュミスヒットであると判定された場合、current_timeは、加算命令が順に実行されて、「2」+「6」+「2」+「3」となり13となる。
また、例えば、1行目のLD命令についてキャッシュミスヒットであり、2行目のLD命令についてキャッシュミスヒットであると判定された場合、補正部322は、動作シミュレーションpsimが行われる。
図12は、連続してキャッシュミスヒットとなった場合の動作例を示す説明図である。図12(C)に示すように、3行目のMULT命令のe3ステージについてはタイミングt+11に行われる。また、例えば、1行目のLD命令のfステージから3行目のMULT命令のe3ステージまでの差分値(z)は13である。
補正部322は、「差分値(z)−差分値(x)」を算出することにより1および2行目の各LD命令を実行した場合のキャッシュメモリ102の動作結果がキャッシュミスヒットである場合における補正値を算出する。差分値(x)については、例えば、補正値情報TT1の補正値Aのフィールドに設定された各値と、1行目のLD命令に対応する補正値情報TT1のレコード800−1の補正値Bのフィールドに設定された各値と、の合計値である。ここでの補正値は1である。
そして、補正部322は、算出された補正値をcurrent_timeに加算する。また、例えば、1行目のLD命令についてキャッシュミスヒットであり、2行目のLD命令についてキャッシュミスヒットであると判定された場合、current_timeは、加算命令が順に実行されて、「6」+「2」+「1」+「2」+「3」となり14となる。
このように、すべてキャッシュヒットとなった場合と単独でキャッシュミスヒットが発生する場合とについての動作シミュレーションpsimは事前に行っておき、キャッシュミスヒットが連続した場合にだけ再度動作シミュレーションpsimを行う。これにより、シミュレーションの高速化を行うことができる。
また、対象ブロックのつぎに実行されるブロックBBが判明している場合、補正部322は、対象ブロックとつぎに実行されるブロックBBのうち、対象となるLD命令と対象となるLD命令から前後5命令について動作シミュレーションpsimを行ってもよい。
つぎに、シミュレーション情報収集部303は、シミュレーション実行部302によって得られるサイクル数の情報であるシミュレーション情報333を出力する。
(計算装置100による計算処理手順例を示すフローチャート)
図13、図14は、計算装置100による計算処理手順例を示すフローチャートである。計算装置100は、ターゲットプログラムpgrの実行が終了したか否かを判断する(ステップS1301)。ターゲットプログラムpgrの実行が終了していないと判断された場合(ステップS1301:No)、計算装置100は、対象ブロックが変化したか否かを判断する(ステップS1302)。対象ブロックが変化していないと判断された場合(ステップS1302:No)、計算装置100は、ステップS1301へ戻る。
対象ブロックが変化したと判断された場合(ステップS1302:Yes)、計算装置100は、対象ブロックがコンパイル済みであるか否かを判断する(ステップS1303)。
対象ブロックがコンパイル済みでないと判断された場合(ステップS1303:No)、計算装置100は、機能コードFCを含むホストコードHCを生成する(ステップS1304)。計算装置100は、対象ブロック内の命令のうち、未選択の命令があるか否かを判断する(ステップS1305)。未選択の命令があると判断された場合(ステップS1305:Yes)、計算装置100は、未選択の命令のうち、実行順が先頭の命令を選択する(ステップS1306)。ただし、後述するようにLD命令やST命令と一緒に動作シミュレーションpsimが行われることによってサイクル数をすでに取得済みである命令についてはあらたに選択しなくてもよい。
計算装置100は、LD命令またはST命令か否かを判断する(ステップS1307)。LD命令またはST命令であると判断された場合(ステップS1307:Yes)、計算装置100は、予測ケースを取得する(ステップS1308)。計算装置100は、つぎのブロックBBを特定する(ステップS1309)。ここで、つぎのブロックBBとは、現在の対象ブロックのつぎに計算対象となるブロックBBである。例えば、ブロックBB1のつぎにブロックBB2になるという保証はないが、ブロックBB1のつぎにブロックBB2が実行されることが100[%]または高確率で行われることが判明している場合に、ブロックBB2がつぎのブロックBBとして特定される。
つぎに、計算装置100は、予測ケースを前提とし、選択した命令と後続5命令との動作シミュレーションpsimを行うことにより、選択した命令と後続5命令との各命令のサイクル数を取得する(ステップS1310)。ここでは、つぎのブロックBBが特定されなかった場合に対象ブロック内に選択した命令に後続する命令が5命令より少ない場合は5命令より少ない命令と選択した命令との動作シミュレーションpsimが行われる。
つぎに、計算装置100は、予測ケースと異なるケースを前提とし、選択した命令と後続5命令との動作シミュレーションpsimを行うことにより、選択した命令と後続5命令との各命令のサイクル数を取得する(ステップS1311)。計算装置100は、補正値情報TT1に結果を設定し(ステップS1312)、ステップS1314へ移行する。
一方、LD命令またはST命令でないと判断された場合(ステップS1307:No)、計算装置100は、選択した命令の動作シミュレーションpsimを行うことにより、選択した命令のサイクル数を取得し(ステップS1313)、ステップS1312へ移行する。
つぎに、計算装置100は、補正値情報TT1に基づいて、ホストコードHCにタイミングコードTCを追加し(ステップS1314)、ステップS1305へ戻る。また、ステップS1305において、未選択の命令がないと判断された場合(ステップS1305:No)、計算装置100は、ステップS1401へ移行する。また、ステップS1303において、対象ブロックがコンパイル済みであると判断された場合(ステップS1303:Yes)、計算装置100は、ステップS1401へ移行する。
つぎに、計算装置100は、ホストコードHCの各命令を実行する(ステップS1401)。そして、計算装置100は、ヘルパー関数cache_ldの呼び出しが発生したか否かを判断する(ステップS1402)。ヘルパー関数cache_ldの呼び出しが発生していないと判断された場合(ステップS1402:No)、計算装置100は、ステップS1404へ移行する。ヘルパー関数cache_ldの呼び出しが発生したと判断された場合(ステップS1402:Yes)、計算装置100は、ヘルパー関数を呼び出し(ステップS1403)、ステップS1404へ移行する。
つぎに、計算装置100は、実行を終了したか否かを判断する(ステップS1404)。実行を終了していないと判断された場合(ステップS1404:No)、計算装置100は、ステップS1402へ移行する。実行を終了したと判断された場合(ステップS1404:Yes)、計算装置100は、シミュレーション情報333を出力し(ステップS1405)、ステップS1301へ移行する。
また、ステップS1301において、ターゲットプログラムpgrの実行が終了したと判断された場合(ステップS1301:Yes)、一連の処理を終了する。
図15は、補正部322による補正処理の詳細な説明を示すフローチャートである。補正部322とは、ヘルパー関数モジュールである。ここでは、LD命令についてのキャッシュアクセスがヒットしたか否かについてのヘルパー関数を例に挙げて説明する。図15の例では、計算装置100は、複数回のアクセスについてのキャッシュメモリ102の動作結果のいずれか一つがキャッシュヒットの組み合わせ104について補正値情報TT1により対象ブロックのサイクル数を補正できる。また、直近5命令以内のLD命令のすべての動作結果がキャッシュヒットの場合における対象ブロックのサイクル数を基準として、補正が行われる。
まず、計算装置100は、キャッシュメモリ102の動作シミュレーションcsimを行う(ステップS1501)。上述したように、ここでの動作シミュレーションcsimは、ホストCPUと、キャッシュメモリ102と、をモデル化したシステムモデルによる簡易的なシミュレーションである。そして、計算装置100は、動作シミュレーションcsimによるキャッシュメモリ102の動作結果は予測ケースと同じか否かを判断する(ステップS1502)。
同じであると判断された場合(ステップS1502:Yes)、計算装置100は、対象ブロックのサイクル数を補正しなくてよいため、一連の処理を終了する。同じでないと判断された場合(ステップS1502:No)、計算装置100は、対象ブロック内の直近の5命令にLD命令があるか否かを判断する(ステップS1503)。
対象ブロック内の直近の5命令にLD命令がないと判断された場合(ステップS1503:No)、計算装置100は、ステップS1508へ移行する。一方、対象ブロック内の直近の5命令にLD命令があると判断された場合(ステップS1503:Yes)、計算装置100は、直近のLD命令についての動作結果が予測ケースと同じか否かを判断する(ステップS1504)。直近のLD命令についての動作結果が予測ケースと同じであると判断された場合(ステップS1504:Yes)、計算装置100は、補正値情報TT1に含まれる対象のLD命令に対応するレコード800の補正値Bのフィールドに設定された補正値を取得する(ステップS1508)。そして、計算装置100は、補正値を加算することにより対象ブロックのサイクル数を補正し(ステップS1509)、一連の処理を終了する。
直近のLD命令についての動作結果が予測ケースと同じでないと判断された場合(ステップS1504:No)、計算装置100は、動作結果に基づいて、直近の5命令と対象のLD命令と後続の5命令との動作シミュレーションpsimを行う(ステップS1505)。そして、計算装置100は、シミュレーション結果に基づいて、予測ケースの場合のサイクル数との差分を計算する(ステップS1506)。つぎに、計算装置100は、算出した差分を対象ブロックのサイクル数に加算することにより補正し(ステップS1507)、一連の処理を終了する。
以上説明したように、本実施の形態にかかる計算装置100は、特定コード内の複数のメモリアクセス命令の実行によるキャッシュメモリの動作結果の複数の組み合わせの各々について該特定コード内の各命令の性能値を用意しておく。そして、計算装置100は、各メモリアクセス命令を実行した場合のキャッシュメモリのシミュレーションによる動作結果の組み合わせに応じた該性能値によって、該特定コードの性能値を計算する。これにより、性能値の計算にかかる時間の短縮を図ることができるため、性能の計算の効率化を図ることができる。
また、計算装置100は、予め用意された組み合わせに、キャッシュメモリのシミュレーションによる動作結果の組み合わせがない場合、当該組み合わせになった場合の特定コードの動作シミュレーションによって特定コードの性能値を計算する。
また、用意された複数の組み合わせは、複数回のアクセスについてキャッシュメモリの動作結果がすべてキャッシュミスヒットとなる組み合わせと異なる組み合わせである。これにより、最も発生する可能性が低い組み合わせに対応する各命令の性能値を事前に用意するための時間を短縮することができる。
また、用意された複数の組み合わせは、複数回のアクセスについてキャッシュメモリの動作結果がすべてキャッシュヒットとなる組み合わせを含む。また、用意された複数の組み合わせは、複数回のアクセスのうちの一つのアクセスについてキャッシュメモリの動作結果がキャッシュミスヒットとなる組み合わせを含む。これにより、発生する可能性が高い組み合わせに対応する各命令の性能値が事前に用意されるため、特定コードの性能値の計算にかかる時間の短縮を図ることができる。
また、計算装置100は、最初に計算対象となった場合に、複数の組み合わせの各々について、特定コード内の各命令の性能値を、プロセッサの動作シミュレーションを実行することによって、各命令の性能値を取得する。これにより、最初に計算対象となった場合にだけ、動作シミュレーションが実行されるため、各命令の性能値が何度も取得されない。これにより、動作シミュレーションの回数を低減させることができ、性能値の計算にかかる時間の短縮を図ることができる。
また、計算装置100は、複数回のアクセスについての動作結果がすべてキャッシュヒットである組み合わせに対応する各命令の性能値によって特定コードを計算可能なホストコードを生成する。また、計算装置100は、すべてキャッシュヒットである組み合わせ以外になった場合には特定コードの性能値を補正する。これにより、最も発生する可能性の高い組み合わせについてのホストコードが生成されるため、補正しない回数が向上し、補正に要する時間を短縮することができる。また、計算装置100は、最初に計算対象となった場合にだけホストコードを生成することにより、同一のホストコードが何度も生成されなくなる。これにより、ホストコードの生成にかかる時間を短縮させることができる。また、ブロックに対応してホストコードは1つとなるため、省メモリ化を図ることができる。
また、計算装置100は、特定コードのつぎに実行対象となるコードが判明している場合、つぎに実行対象となるコードも含めて各命令の性能値を算出する動作シミュレーションを行ってもよい。これにより、特定コード内のメモリアクセス命令と、当該メモリアクセス命令に後続するつぎに実行対象となるコード内のメモリアクセス命令と、のキャッシュメモリの動作結果の組み合わせによって変化する対象ブロックの性能値を見積もることができる。したがって、性能値の見積もり精度を向上させることができる。
なお、本実施の形態で説明した計算方法は、予め用意された計算プログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本計算プログラムは、磁気ディスク、光ディスク、USB(Universal Serial Bus)フラッシュメモリなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、計算プログラムは、インターネット等のネットワークNETを介して配布してもよい。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)プロセッサに記憶領域への複数回のアクセスを指示する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータが、
前記複数回のアクセスを前記プロセッサが実行した場合の前記プロセッサがアクセス可能なキャッシュメモリの動作結果の複数の組み合わせの各々について、前記動作結果が前記組み合わせとなった場合における前記特定コード内の各命令の性能値を取得し、
前記特定コードが性能値の計算対象となった場合に、
前記プロセッサが前記プログラムを実行した場合の前記キャッシュメモリの動作シミュレーションの実行結果によって、前記複数回のアクセスを前記プロセッサが実行した場合の前記キャッシュメモリの動作結果の組み合わせを取得し、
取得した前記組み合わせが前記複数の組み合わせに含まれる場合、取得した前記各命令の性能値のうち、取得した前記組み合わせに対応する前記各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を計算する、
処理を実行することを特徴とする計算方法。
(付記2)前記コンピュータが、
取得した前記組み合わせが前記複数の組み合わせに含まれない場合、前記動作結果が取得した前記組み合わせとなった場合における前記特定コード内の各命令の性能値を、前記プロセッサが前記特定コードを実行した場合の前記プロセッサの動作シミュレーションを実行することによって導出し、導出した前記各命令の性能値によって前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を計算することを特徴とする付記1に記載の計算方法。
(付記3)前記複数の組み合わせは、前記複数回のアクセスについて前記キャッシュメモリの動作結果がすべてキャッシュミスヒットとなる組み合わせと異なる組み合わせであることを特徴とする付記1または2に記載の計算方法。
(付記4)前記複数の組み合わせは、前記複数回のアクセスについて前記キャッシュメモリの動作結果がすべてキャッシュヒットとなる組み合わせと、前記複数回のアクセスのうちの一つのアクセスについて前記キャッシュメモリの動作結果がキャッシュミスヒットとなる組み合わせと、であることを特徴とする付記1〜3のいずれか一つに記載の計算方法。
(付記5)前記各命令の性能値を取得する処理は、前記特定コードの性能値を計算する処理において最初に計算対象となった場合、前記複数の組み合わせの各々について、前記動作結果が前記組み合わせとなった場合における前記特定コード内の各命令の性能値を、前記プロセッサが前記特定コードを実行した場合の前記プロセッサの動作シミュレーションを実行することによって、取得することを特徴とする付記1〜4のいずれか一つに記載の計算方法。
(付記6)前記複数の組み合わせに含まれる特定の組み合わせは、前記複数回のアクセスのすべてについての前記動作結果がキャッシュヒットである組み合わせであって、
前記コンピュータが、
前記特定コードの性能値を計算する処理において最初に計算対象となった場合、取得した前記各命令の性能値のうち、前記特定の組み合わせに対応する前記各命令の性能値によって前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を計算可能な計算用コードを生成する処理を実行し、
前記特定コードの性能値を計算する処理では、生成した前記計算用コードを実行し、前記計算用コードによって計算された前記特定コードの性能値を、取得した前記各命令の性能値のうち、取得した前記組み合わせに対応する前記各命令の性能値によって補正することを特徴とする付記1〜5のいずれか一つに記載の計算方法。
(付記7)前記複数の組み合わせに含まれる特定の組み合わせは、前記複数回のアクセスのすべてについての前記動作結果がキャッシュヒットである組み合わせであって、
前記コンピュータが、
前記特定コードが最初に性能値の計算対象となった場合、取得した前記各命令の性能値のうち、前記特定の組み合わせに対応する前記各命令の性能値によって前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を計算可能な計算用コードを生成する処理を実行し、
取得した前記組み合わせが前記複数の組み合わせに含まれない場合、前記特定コードの性能値を計算する処理では、生成した前記計算用コードを実行し、前記計算用コードによって計算された前記特定コードの性能値を、導出した前記各命令の性能値によって補正することを特徴とする付記2に記載の計算方法。
(付記8)前記各命令の性能値を取得する処理では、前記特定コードの性能値を計算する処理において最初に計算対象となった場合、前記プログラムが有する前記特定コードと、前記特定コードのつぎに実行対象となるコードと、の各々に含まれる各命令の性能値を導出することを特徴とする付記4または5に記載の計算方法。
(付記9)プロセッサに記憶領域への複数回のアクセスを指示する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータに、
前記複数回のアクセスを前記プロセッサが実行した場合の前記プロセッサがアクセス可能なキャッシュメモリの動作結果の複数の組み合わせの各々について、前記動作結果が前記組み合わせとなった場合における前記特定コード内の各命令の性能値を取得し、
前記特定コードが性能値の計算対象となった場合に、
前記プロセッサが前記プログラムを実行した場合の前記キャッシュメモリの動作シミュレーションの実行結果によって、前記複数回のアクセスを前記プロセッサが実行した場合の前記キャッシュメモリの動作結果の組み合わせを取得し、
取得した前記組み合わせが前記複数の組み合わせに含まれる場合、取得した前記各命令の性能値のうち、取得した前記組み合わせに対応する前記各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を計算する、
処理を実行させることを特徴とする計算プログラム。
(付記10)第1プロセッサに記憶領域への複数回のアクセスを指示する特定コードを有するプログラムを前記第1プロセッサが実行した場合の前記プログラムの性能値を計算する計算装置であって、
前記複数回のアクセスを前記第1プロセッサが実行した場合の前記第1プロセッサがアクセス可能なキャッシュメモリの動作結果の複数の組み合わせの各々について、前記動作結果が前記組み合わせとなった場合における前記特定コード内の各命令の性能値を取得し、
前記特定コードが性能値の計算対象となった場合に、
前記第1プロセッサが前記プログラムを実行した場合の前記キャッシュメモリの動作シミュレーションの実行結果によって、前記複数回のアクセスを前記第1プロセッサが実行した場合の前記キャッシュメモリの動作結果の組み合わせを取得し、
取得した前記組み合わせが前記複数の組み合わせに含まれる場合、取得した前記各命令の性能値のうち、取得した前記組み合わせに対応する前記各命令の性能値によって、前記第1プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を計算する、
処理を実行する第2プロセッサを有することを特徴とする計算装置。
(付記11)プロセッサに記憶領域への複数回のアクセスを指示する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータに、
前記複数回のアクセスを前記プロセッサが実行した場合の前記プロセッサがアクセス可能なキャッシュメモリの動作結果の複数の組み合わせの各々について、前記動作結果が前記組み合わせとなった場合における前記特定コード内の各命令の性能値を取得し、
前記特定コードが性能値の計算対象となった場合に、
前記プロセッサが前記プログラムを実行した場合の前記キャッシュメモリの動作シミュレーションの実行結果によって、前記複数回のアクセスを前記プロセッサが実行した場合の前記キャッシュメモリの動作結果の組み合わせを取得し、
取得した前記組み合わせが前記複数の組み合わせに含まれる場合、取得した前記各命令の性能値のうち、取得した前記組み合わせに対応する前記各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を計算する、
処理を実行させる計算プログラムを記録したことを特徴とする記録媒体。
100 計算装置
101 ターゲットCPU
102 キャッシュメモリ
103 テーブル
104 組み合わせ
201 ホストCPU
301 コード変換部
302 シミュレーション実行部
303 シミュレーション情報収集部
311 コード分割部
312 判断部
313 予測シミュレーション実行部
314 コード生成部
321 コード実行部
322 補正部
330 タイミング情報
331 予測情報
333 シミュレーション情報
pgr ターゲットプログラム
HC,HC1 ホストコード
FC,FC1 機能コード
TC,TC1 タイミングコード

Claims (7)

  1. プロセッサに記憶領域への複数回のアクセスを指示する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータが、
    前記複数回のアクセスを前記プロセッサが実行した場合の前記プロセッサがアクセス可能なキャッシュメモリの動作結果の複数の組み合わせの各々について、前記動作結果が前記組み合わせとなった場合における前記特定コード内の各命令の性能値を取得し、
    前記特定コードが性能値の計算対象となった場合に、
    前記プロセッサが前記プログラムを実行した場合の前記キャッシュメモリの動作シミュレーションの実行結果によって、前記複数回のアクセスを前記プロセッサが実行した場合の前記キャッシュメモリの動作結果の組み合わせを取得し、
    取得した前記組み合わせが前記複数の組み合わせに含まれる場合、取得した前記各命令の性能値のうち、取得した前記組み合わせに対応する前記各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を計算する、
    処理を実行することを特徴とする計算方法。
  2. 前記コンピュータが、
    取得した前記組み合わせが前記複数の組み合わせに含まれない場合、前記動作結果が取得した前記組み合わせとなった場合における前記特定コード内の各命令の性能値を、前記プロセッサが前記特定コードを実行した場合の前記プロセッサの動作シミュレーションを実行することによって導出し、導出した前記各命令の性能値によって前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を計算することを特徴とする請求項1に記載の計算方法。
  3. 前記複数の組み合わせは、前記複数回のアクセスについて前記キャッシュメモリの動作結果がすべてキャッシュミスヒットとなる組み合わせと異なる組み合わせであることを特徴とする請求項1または2に記載の計算方法。
  4. 前記複数の組み合わせは、前記複数回のアクセスについて前記キャッシュメモリの動作結果がすべてキャッシュヒットとなる組み合わせと、前記複数回のアクセスのうちの一つのアクセスについて前記キャッシュメモリの動作結果がキャッシュミスヒットとなる組み合わせと、であることを特徴とする請求項1〜3のいずれか一つに記載の計算方法。
  5. 前記各命令の性能値を取得する処理は、前記特定コードの性能値を計算する処理において最初に計算対象となった場合、前記複数の組み合わせの各々について、前記動作結果が前記組み合わせとなった場合における前記特定コード内の各命令の性能値を、前記プロセッサが前記特定コードを実行した場合の前記プロセッサの動作シミュレーションを実行することによって、取得することを特徴とする請求項1〜4のいずれか一つに記載の計算方法。
  6. プロセッサに記憶領域への複数回のアクセスを指示する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータに、
    前記複数回のアクセスを前記プロセッサが実行した場合の前記プロセッサがアクセス可能なキャッシュメモリの動作結果の複数の組み合わせの各々について、前記動作結果が前記組み合わせとなった場合における前記特定コード内の各命令の性能値を取得し、
    前記特定コードが性能値の計算対象となった場合に、
    前記プロセッサが前記プログラムを実行した場合の前記キャッシュメモリの動作シミュレーションの実行結果によって、前記複数回のアクセスを前記プロセッサが実行した場合の前記キャッシュメモリの動作結果の組み合わせを取得し、
    取得した前記組み合わせが前記複数の組み合わせに含まれる場合、取得した前記各命令の性能値のうち、取得した前記組み合わせに対応する前記各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を計算する、
    処理を実行させることを特徴とする計算プログラム。
  7. 第1プロセッサに記憶領域への複数回のアクセスを指示する特定コードを有するプログラムを前記第1プロセッサが実行した場合の前記プログラムの性能値を計算する計算装置であって、
    前記複数回のアクセスを前記第1プロセッサが実行した場合の前記第1プロセッサがアクセス可能なキャッシュメモリの動作結果の複数の組み合わせの各々について、前記動作結果が前記組み合わせとなった場合における前記特定コード内の各命令の性能値を取得し、
    前記特定コードが性能値の計算対象となった場合に、
    前記第1プロセッサが前記プログラムを実行した場合の前記キャッシュメモリの動作シミュレーションの実行結果によって、前記複数回のアクセスを前記第1プロセッサが実行した場合の前記キャッシュメモリの動作結果の組み合わせを取得し、
    取得した前記組み合わせが前記複数の組み合わせに含まれる場合、取得した前記各命令の性能値のうち、取得した前記組み合わせに対応する前記各命令の性能値によって、前記第1プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を計算する、
    処理を実行する第2プロセッサを有することを特徴とする計算装置。
JP2014001176A 2014-01-07 2014-01-07 計算方法、計算プログラム、および計算装置 Expired - Fee Related JP6187264B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2014001176A JP6187264B2 (ja) 2014-01-07 2014-01-07 計算方法、計算プログラム、および計算装置
US14/534,908 US9880841B2 (en) 2014-01-07 2014-11-06 Computation method for computing performance value when processor executes code, computation apparatus for computing performance value when processor executes code, and computer readable storage medium storing computation program for computing performance value when processor executes code

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014001176A JP6187264B2 (ja) 2014-01-07 2014-01-07 計算方法、計算プログラム、および計算装置

Publications (2)

Publication Number Publication Date
JP2015130067A JP2015130067A (ja) 2015-07-16
JP6187264B2 true JP6187264B2 (ja) 2017-08-30

Family

ID=53495285

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014001176A Expired - Fee Related JP6187264B2 (ja) 2014-01-07 2014-01-07 計算方法、計算プログラム、および計算装置

Country Status (2)

Country Link
US (1) US9880841B2 (ja)
JP (1) JP6187264B2 (ja)

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0721061A (ja) 1993-07-05 1995-01-24 Hitachi Ltd プログラム性能解析方法
US6163840A (en) * 1997-11-26 2000-12-19 Compaq Computer Corporation Method and apparatus for sampling multiple potentially concurrent instructions in a processor pipeline
JP3214459B2 (ja) 1998-10-15 2001-10-02 日本電気株式会社 シミュレーション方法及び装置
JP2000222245A (ja) * 1999-01-28 2000-08-11 Toshiba Corp プログラム実行時間評価装置、ソースプログラム実行時間評価装置、プログラム実行時間評価方法、及びソースプログラム実行時間評価方法
JP2001249829A (ja) 2000-03-06 2001-09-14 Hitachi Ltd システムシミュレータ
US20040193395A1 (en) * 2003-03-26 2004-09-30 Dominic Paulraj Program analyzer for a cycle accurate simulator
US7546598B2 (en) * 2003-09-03 2009-06-09 Sap Aktiengesellschaft Measuring software system performance using benchmarks
US8527956B2 (en) * 2008-12-23 2013-09-03 International Business Machines Corporation Workload performance projection via surrogate program analysis for future information handling systems
JP5817324B2 (ja) * 2011-08-18 2015-11-18 富士通株式会社 補正装置、補正方法、および補正プログラム
JP5961971B2 (ja) * 2011-10-12 2016-08-03 富士通株式会社 シミュレーション装置,方法,およびプログラム
US9015006B2 (en) * 2012-01-13 2015-04-21 International Business Machines Corporation Automated enablement of performance data collection

Also Published As

Publication number Publication date
US9880841B2 (en) 2018-01-30
JP2015130067A (ja) 2015-07-16
US20150193352A1 (en) 2015-07-09

Similar Documents

Publication Publication Date Title
US9207916B2 (en) Simulation apparatus, method and medium
EP1728155A2 (en) Method and system for performing link-time code optimization without additional code analysis
US9465595B2 (en) Computing apparatus, computing method, and computing program
KR102013582B1 (ko) 혼합 모드 프로그램의 소스 코드 오류 위치 검출 장치 및 방법
US10564992B2 (en) Simulation apparatus and storage medium
Wang et al. Fast and accurate cache modeling in source-level simulation of embedded software
US10402510B2 (en) Calculating device, calculation method, and calculation program
US8949681B2 (en) Correction apparatus, correction method, and computer product
US20160196156A1 (en) Simulation apparatus, simulation method, and computer product
US10353708B2 (en) Strided loading of non-sequential memory locations by skipping memory locations between consecutive loads
US10102099B2 (en) Performance information generating method, information processing apparatus and computer-readable storage medium storing performance information generation program
KR20160098794A (ko) 디바이스 프로그램 구조 모델링 기반 골격코드 생성 장치 및 방법
US20160011889A1 (en) Simulation method and storage medium
JP6187264B2 (ja) 計算方法、計算プログラム、および計算装置
US9383981B2 (en) Method and apparatus of instruction scheduling using software pipelining
Mallya et al. Flexible timing simulation of RISC-V processors with sniper
US20170115973A1 (en) Operating method of semiconductor device and semiconductor system
JP2007080049A (ja) 組み込み用プログラム生成方法、組み込み用プログラム開発システム、及び情報テーブル部
US9606779B2 (en) Data processing system and data simulation method in the system
CN101819608A (zh) 一种微处理器指令级随机验证中加速取指的装置和方法
JP5021584B2 (ja) マイコンシミュレータ、そのシミュレーション方法、プログラム、及びコンピュータ読み取り可能な媒体
US10671780B2 (en) Information processing device that executes simulation and a simulation method
Kaufmann et al. Superblock compilation and other optimization techniques for a Java-based DBT machine emulator
JP2019185486A (ja) コード変換装置、コード変換方法、及びコード変換プログラム
WO2011114478A1 (ja) 生成方法、スケジューリング方法、生成プログラム、スケジューリングプログラム、生成装置、および情報処理装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160905

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20170704

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170630

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170717

R150 Certificate of patent or registration of utility model

Ref document number: 6187264

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees