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

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

Info

Publication number
JP6163898B2
JP6163898B2 JP2013122786A JP2013122786A JP6163898B2 JP 6163898 B2 JP6163898 B2 JP 6163898B2 JP 2013122786 A JP2013122786 A JP 2013122786A JP 2013122786 A JP2013122786 A JP 2013122786A JP 6163898 B2 JP6163898 B2 JP 6163898B2
Authority
JP
Japan
Prior art keywords
calculation
instruction
code
performance value
specific code
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
JP2013122786A
Other languages
English (en)
Other versions
JP2014241031A (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 JP2013122786A priority Critical patent/JP6163898B2/ja
Priority to US14/289,772 priority patent/US9465595B2/en
Publication of JP2014241031A publication Critical patent/JP2014241031A/ja
Application granted granted Critical
Publication of JP6163898B2 publication Critical patent/JP6163898B2/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
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/52Binary to binary
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0888Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using selective caching, e.g. bypass
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • G06F8/4442Reducing the number of cache misses; Data prefetching
    • 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines

Description

本発明は、計算装置、計算方法、および計算プログラムに関する。
従来では、CPU(Central Processing Unit)がプログラムを実行する動作のシミュレーション中にCPUがアクセス可能なキャッシュメモリの動作結果を出力し、CPUがプログラムを実行した場合のプログラムの性能値を動作結果に基づいて計算する技術がある(例えば、下記特許文献1参照。)。
特開2001−249829号公報
しかしながら、従来では、CPUに記憶領域へのアクセスを指示するアクセス命令が動作のシミュレーション中に実行される都度、キャッシュメモリの動作結果を参照してプログラムの性能値を計算する。そのため、アクセス命令の性能値の計算にかかる計算量が多くなるという問題点がある。
1つの側面では、本発明は、計算量の低減を図ることができる計算装置、計算方法、および計算プログラムを提供することを目的とする。
本発明の一側面によれば、プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算する場合に、前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時の前記記憶領域の属性が、前記アクセス命令の指示に対して前記プロセッサがキャッシュメモリを使用可能なことを示す属性であるか否かを判断し、前記キャッシュメモリを使用可能なことを示す属性でないと判断した場合、前記キャッシュメモリを使用しない場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記属性によらずに計算する計算用コードを生成し、前記特定コードがあらたに性能値の計算対象となった場合、生成した前記計算用コードを実行する計算装置、計算方法、および計算プログラムが提案される。
本発明の一態様によれば、計算量の低減を図ることができる。
図1は、実施の形態にかかる計算装置による一動作例を示す説明図である。 図2は、実施の形態にかかる計算装置のハードウェア構成例を示すブロック図である。 図3は、実施例1にかかる計算装置の機能的構成例を示すブロック図である。 図4は、ブロックに含まれる命令例を示す図である。 図5は、タイミング情報の例を示す図である。 図6は、図4に示すブロックの各命令の実行タイミング例を示す図である。 図7は、予測情報例を示す説明図である。 図8は、第1計算用コードの生成例を示す説明図である。 図9は、実施例1にかかるコード実行部の機能的構成例を示すブロック図である。 図10は、実施例1にかかるコード実行部による実行例を示す説明図である。 図11は、実施例1にかかる第2計算用コードの生成例を示す説明図である。 図12は、実施例2にかかる第2計算用コードの生成例を示す説明図である。 図13は、ld命令のデータキャッシュメモリについてのヘルパー関数2の詳細例を示す説明図である。 図14は、補正部によるld命令の実行結果に対する補正例を示す説明図である。 図15は、補正部によるld命令の実行結果に対する補正例を示す図である。 図16は、補正部によるld命令の実行結果に対する補正例を示す図である。 図17は、実施例1および実施例2にかかる計算装置による計算処理手順例を示すフローチャートである。 図18は、実施例1および実施例2にかかる図17で示した生成処理の詳細な説明を示すフローチャートである。 図19は、実施例1および実施例2にかかる図17で示したコード最適化処理の詳細な説明を示すフローチャートである。 図20は、実施例1にかかる計算装置によるデータキャッシュメモリについてのヘルパー関数1に従う計算処理手順例を示すフローチャートである。 図21は、実施例1にかかる計算装置によるデータキャッシュメモリについてのヘルパー関数2に従う計算処理手順の一例を示すフローチャートである。 図22は、実施例3にかかる計算装置の機能的構成例を示すブロック図である。 図23は、実施例3にかかるデータキャッシュメモリについての計算用コードの生成例1を示す説明図である。 図24は、実施例3にかかるTLBについての計算用コードの生成例2を示す説明図である。 図25は、実施例3にかかる図17で示した生成処理の詳細な説明を示すフローチャートである。 図26は、実施例3にかかる図17で示したコード最適化処理の詳細な説明を示すフローチャートである。 図27は、実施例4にかかるコード実行部による実行例を示す説明図である。 図28は、実施例4にかかる計算装置によるTLBについてのヘルパー関数1に従う計算処理手順例を示すフローチャートである。 図29は、実施例4にかかる計算装置によるTLBについてのヘルパー関数2に従う計算処理手順例を示すフローチャートである。 図30は、実施例5にかかる計算装置によるコード最適化例を示す説明図である。 図31は、コード最適化部の詳細例を示すブロック図である。 図32は、コード最適化部による詳細な動作例1を示す説明図(その1)である。 図33は、コード最適化部による詳細な動作例1を示す説明図(その2)である。 図34は、コード最適化部による詳細な動作例1を示す説明図(その3)である。 図35は、コード最適化部による詳細な動作例1を示す説明図(その4)である。 図36は、コード最適化部による詳細な動作例1を示す説明図(その5)である。 図37は、コード最適化部による詳細な動作例2を示す説明図(その1)である。 図38は、コード最適化部による詳細な動作例2を示す説明図(その2)である。 図39は、コード最適化部による詳細な動作例2を示す説明図(その3)である。 図40は、コード最適化部による詳細な動作例2を示す説明図(その4)である。 図41は、コード最適化部による詳細な動作例2を示す説明図(その5)である。 図42は、コード最適化部による詳細な動作例2を示す説明図(その6)である。 図43は、図17で示したコード最適化処理の詳細な説明を示すフローチャート(その1)である。 図44は、図17で示したコード最適化処理の詳細な説明を示すフローチャート(その2)である。
本実施の形態では、評価対象となる第1プロセッサがターゲットプログラムを実行した場合の機能および性能のシミュレーションを、計算装置が有する第2プロセッサによって実行する。第2プロセッサによって機能および性能のシミュレーションを行う際に第1プロセッサのターゲットプログラムから第2プロセッサが実行可能なコードへの変換手法として、例えば、インタープリタ方式またはJIT(Just−in−Time)コンパイラ方式がある。本実施の形態にかかる計算装置は、JITコンパイラ方式による性能のシミュレーションを行う。第1プロセッサは、ターゲットCPUと称し、第2プロセッサは、ホストCPUと称する。
以下に添付図面を参照して、本発明にかかる計算装置、計算方法、および計算プログラムの実施の形態を詳細に説明する。
図1は、実施の形態にかかる計算装置による一動作例を示す説明図である。計算装置100は、ターゲットCPU101がターゲットプログラムpgrを実行した場合のターゲットプログラムpgrの性能値を計算するコンピュータである。ここで、性能値とは、サイクル数や実行時間である。計算装置100が有するプロセッサをホストCPUと称する。ここで、ターゲットプログラムpgrから分割した各コードをブロックと称する。ターゲットプログラムpgrには、メモリ103内の記憶領域AへのアクセスをターゲットCPU101に指示するアクセス命令を有するブロックbtであって、ターゲットCPU101に複数回実行されるブロックbtを有する。アクセス命令は、例えば、ld命令やst命令である。ここでは、例えば、ブロックbtは、命令i1と命令i2とを有し、命令i2が、メモリ103内の記憶領域AへのアクセスをターゲットCPU101に指示するアクセス命令である。
また、計算装置100は、ターゲットCPU101がターゲットプログラムpgrを実行した場合の動作のシミュレーションsimを実行する。ここでの動作のシミュレーションsimは、例えば、ターゲットCPU101と、ターゲットCPU101がアクセス可能なハードウェア資源と、を有するシステムのモデルにターゲットプログラムpgrを与えることによるシミュレーションである。図1の例では、ハードウェア資源としては、キャッシュメモリ102、メモリ103などが挙げられる。本実施の形態で使用されるシステムのモデルは、例えば、ハードウェア記述言語などによってシステムの機能のみを再現したビヘイビアモデルである。ここでは、動作のシミュレーションsimの各ブロックbtの実行タイミングは、ブロックbtの性能値を計算する計算用コードcc11が実行されるタイミングと同一とする。ここでは、例えば、ターゲットCPU101がARM(登録商標)アーキテクチャのCPUであり、計算装置100が有するホストCPUは、例えば、x86アーキテクチャのCPUである。
計算装置100は、ブロックbtが計算対象となった場合に、計算用コードcc11を生成する。計算用コードcc11は、機能コードfc1と、性能評価コードpc1と、を有する。機能コードfc1は、ブロックbtをコンパイルして得られるブロックbt内の各命令のホスト命令を有する。性能評価コードpc1は、ターゲットCPU101がアクセス可能なキャッシュメモリ102の属性に基づくブロックbt内の各命令の性能値によって、ターゲットCPU101がブロックbtを実行した場合のブロックbtの性能値を計算する命令を有する。具体的には、性能評価コードpc1は、命令i1の第1命令である性能計算命令と、命令i2の第2命令であるヘルパー関数1呼び出し命令と、を有する。命令i1の性能計算命令は、ターゲットCPU101に命令i1の性能値をブロックbtの性能値に加算させる命令である。命令i2のヘルパー関数1呼び出し命令は、動作のシミュレーションsimの命令i2の実行時の記憶領域Aの属性とキャッシュメモリ102の動作結果とに応じて命令i2の性能値を補正させるヘルパー関数1を呼び出させる命令である。また、命令i2のヘルパー関数1呼び出し命令は、ヘルパー関数1の実行によって出力される性能値をブロックbtの性能値に加算させる命令である。
そして、計算装置100は、計算用コードcc11を実行する。ここで、計算装置100が計算用コードcc11内の機能コードfc1を実行することにより機能のシミュレーションを行う。また、計算装置100が計算用コードcc11内の性能評価コードpc1を実行することにより性能のシミュレーションを行う。計算装置100は計算用コードcc11内の命令i2のヘルパー関数1呼び出し命令を実行すると、ヘルパー関数1を呼び出す。つぎに、計算装置100は、呼び出したヘルパー関数1を実行する。計算装置100は、ヘルパー関数1に従って、動作のシミュレーションsimにおける命令i2の実行時の記憶領域Aの属性が、ターゲットCPU101がキャッシュメモリ102を使用可能なことを示す属性であるか否かを判断する。例えば、ターゲットCPU101がARMプロセッサの場合、記憶領域Aの属性は、記憶領域Aについてのページテーブルエントリに設定されたTEX,B,Cビットの値とする。例えば、TEX,B,Cビットの値がすべて1である場合、計算装置100は、記憶領域Aの属性がキャッシュメモリ102を使用可能なことを示す属性であると判断する。また、TEX,B,Cビットのうちのいずれかの値が1でない場合、計算装置100は、記憶領域Aの属性がキャッシュメモリ102を使用可能なことを示す属性でないと判断する。
そして、計算装置100は、キャッシュメモリ102を使用可能なことを示す属性であると判断した場合、動作のシミュレーションsimにおけるキャッシュメモリ102の動作結果に基づいて性能値を補正してブロックbtの性能値に加算する。キャッシュメモリ102の動作結果とは、キャッシュヒット、またはミスヒットのいずれかである。
つぎに、計算装置100は、キャッシュメモリ102を使用可能なことを示す属性でないと判断した場合、キャッシュメモリ102を使用しない場合の性能値に補正し、補正した性能値をブロックbtの性能値に加算する。そして、計算装置100は、ブロックbtがあらたに性能値の計算対象となった場合、計算用コードcc11を実行する。
また、計算装置100は、キャッシュメモリ102を使用可能なことを示す属性でないと判断した場合、計算用コードcc12を生成する。計算用コードcc12は、キャッシュメモリ102を使用しない場合におけるブロックbt内の各命令の性能値によって、ターゲットCPU101がブロックbtを実行した場合のブロックbtの性能値を属性によらずに計算するコードである。具体的に計算装置100は、命令i2のヘルパー関数1呼び出し命令を、キャッシュメモリ102を使用しない場合における命令i2の性能値をブロックbtの性能値に加算させる性能計算命令に置換する。これにより、計算装置100は、命令i2の性能計算命令を有する性能評価コードpc2を有する計算用コードcc12を生成する。計算装置100は、ブロックbtがあらたに性能値の計算対象となった場合、生成した計算用コードcc12を実行する。これにより、ブロックbtがあらたに計算対象となった場合の計算量を削減することができる。
(計算装置100のハードウェア構成例)
図2は、実施の形態にかかる計算装置のハードウェア構成例を示すブロック図である。計算装置100は、ホストCPU201と、ROM(Read Only Memory)202と、RAM203と、ディスクドライブ204と、ディスク205と、を有する。計算装置100は、I/F(Interface)206と、入力装置207と、出力装置208と、を有する。また、各部はバス200によってそれぞれ接続される。
ここで、ホストCPU201は、計算装置100の全体の制御を司る。ROM202は、ブートプログラムなどのプログラムを記憶する。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は、キーボード、マウス、タッチパネルなどユーザの操作により、各種データの入力を行うインターフェースである。また、入力装置207は、カメラから画像や動画を取り込むこともできる。また、入力装置207は、マイクから音声を取り込むこともできる。出力装置208は、ホストCPU201の指示により、データを出力するインターフェースである。出力装置208には、ディスプレイやプリンタが挙げられる。
本実施の形態は、実施例1〜実施例5に分けて説明する。実施例1では、アクセス命令を含むブロックの動作のシミュレーションにおいてアクセス命令のアクセス先がキャッシュメモリの使用不可の場合、キャッシュメモリの不使用を前提とした該ブロックの性能値を計算する計算用コードを生成する。
実施例2では、対象ブロック内のアクセス命令がキャッシュメモリを使用可能である場合、キャッシュメモリの動作によって性能値を記憶領域の属性によらずに補正してブロックの性能値を計算する計算用コードを生成する。
実施例3では、キャッシュメモリが使用可能でない状態から使用可能な状態に変化するまでの間、キャッシュメモリを使用しない場合のアクセス命令の性能値によって対象ブロックの性能値を計算する計算用コードを実行する。また、実施例3では、TLB(Translation Lookaside Buffer)が使用可能でない状態から使用可能な状態に変化するまでの間、TLBを使用しない場合のアクセス命令の性能値によって対象ブロックの性能値を計算する計算用コードを実行する。
実施例4では、動作のシミュレーションにおけるアクセス命令の実行時にターゲットCPUの動作モードが特権モードである場合、TLBがヒットとなる場合の対象ブロックの各命令の性能値によって、対象ブロックの性能値を計算する計算用コードを生成する。
実施例5では、実施例1または4においてヘルパー関数1呼び出し命令を性能計算用命令に置き換える際に、連続する性能計算用命令を集約して1つの性能計算命令とする。
(実施例1)
メモリアドレス空間には、データキャッシュメモリを使用可能な領域と、データキャッシュメモリを使用不可能な領域と、がある。例えば、デバイスがマップされている領域などは、データキャッシュメモリを使用不可能な領域である。そのため、データキャッシュメモリを使用不可能な領域へのアクセス命令の性能値は、一定となる。そこで、実施例1では、アクセス命令を含むブロックの動作のシミュレーションにおいてアクセス命令のアクセス先がキャッシュメモリ使用不可の場合、キャッシュメモリの不使用を前提とした該ブロックの性能値を計算する計算用コードを生成する。これにより、該ブロックが再度対象となった際の計算量を低減させることができる。
(実施例1にかかる計算装置100の機能的構成例)
図3は、実施例1にかかる計算装置の機能的構成例を示すブロック図である。計算装置100は、コード変換部301と、コード実行部302と、コード最適化部303と、シミュレーション情報収集部304と、を有する。
コード変換部301からシミュレーション情報収集部304の処理は、例えば、ホストCPU201がアクセス可能なディスク205などの記憶装置に記憶されたシミュレーションプログラムにコーディングされる。そして、ホストCPU201が記憶装置に記憶された計算プログラムを読み出して、計算プログラムにコーディングされている処理を実行する。これにより、コード変換部301からシミュレーション情報収集部304の処理が実現される。また、各部の処理結果は、例えば、RAM203、ディスク205などの記憶装置に記憶される。
また、タイミング情報320と、ターゲットプログラムpgrと、予測情報321と、は予め取得され、RAM203やディスク205などの記憶装置に記憶される。
コード変換部301は、対象ブロックの各命令の性能値によって対象ブロックがターゲットCPU101によって実行された場合の性能値を算出可能な計算用コードを生成する。コード実行部302は、計算用コードを実行することによって、対象ブロックがターゲットCPU101によって実行された場合の性能値を算出する。
具体的には、コード変換部301は、ブロック分割部311と、判断部312と、予測シミュレーション実行部313と、コード生成部314と、を有する。
ブロック分割部311は、計算装置100に入力されたターゲットプログラムpgrを所定基準によってブロックに分割する。分割タイミングは、例えば、対象ブロックが変化した場合にあらたな対象ブロックを分割してもよいし、事前にターゲットプログラムpgrを複数のブロックに分割してもよい。分割されるブロック単位は、例えば、ベーシックブロック単位でよく、または、予め定められた任意のコード単位でよい。ベーシックブロック単位とは、分岐命令からつぎの分岐命令前までの命令群である。
図4は、ブロックに含まれる命令例を示す図である。図4に示すように、ターゲットプログラムpgrの内のあるブロックbには、3つの命令;(1)“ld [r1],r2”(ロード);(2)“mult r3,r4, r5”(乗算);(3)“add r2,r5, r6”(加算)の命令が含まれ、(1)〜(3)の順でターゲットCPU101のパイプラインに投入されて実行されるとする。各命令のr1〜r6は、レジスタ(アドレス)を表す。以降、図4に示すブロックと同一でなくともブロックや対象ブロックについてはすべてbの符号を付す。
図5は、タイミング情報の例を示す図である。図5に示すタイミング情報320では、ld命令について、ソースレジスタrs1(r1)は1番目の処理要素(e1)で、宛先レジスタrd(r2)は2番目の処理要素(e2)で使用可能であることを表す。また、mult命令では、第1ソースレジスタrs1(r3)は1番目の処理要素(e1)、第2ソースレジスタrs2(r4)は2番目の処理要素(e2)、宛先レジスタrd(r5)は3番目の処理要素(e3)で、それぞれ使用可能であることを示す。また、add命令では、第1ソースレジスタrs1(r2)、第2ソースレジスタrs2(r5)は1番目の処理要素(e1)、宛先レジスタrd(r6)は2番目の処理要素(e2)で使用可能であることを示す。
図6は、図4に示すブロックの各命令の実行タイミング例を示す図である。図5に示すタイミング情報320から、パイプラインに各命令が投入されるタイミングは、ld命令の実行開始をタイミングtとすると、mult命令はタイミングt+1、add命令はタイミングt+2となる。add命令の第1ソースレジスタ(r2)と第2ソースレジスタ(r5)は、ld命令とmult命令で使用されているため、add命令の開始は、ld命令とmult命令の実行完了のタイミングt+4以降となり、2サイクル分の待機時間(2サイクル分のストール)が生じる。
したがって、図6(A)に示すように、図4に示すブロックbをシミュレーションした場合に、ld命令を実行した場合のキャッシュメモリの動作結果がキャッシュヒットであるケースでは、ブロックbの実行時間が6サイクルであることがわかる。ここで、外部依存命令を実行した場合のターゲットCPU101やハードウェア資源の動作結果を、外部依存命令の実行結果と称する。外部依存命令は、ターゲットCPU101が実行した場合に、ターゲットCPU101またはターゲットCPU101がアクセス可能なハードウェア資源の動作が複数の動作のいずれかの動作となる命令である。例えば、外部依存命令としては、例えば、ld命令、st命令、分岐命令などが挙げられる。図6(B)は、図4に示すブロックbのld命令の実行結果がキャッシュミスである場合のタイミング例を表す。ld命令の結果がキャッシュミスであると、タイミング情報320に、ペナルティとして、再実行に十分と考えられる任意の時間(ここでは6サイクル分)が設定されているため、このペナルティサイクルが遅延時間として追加される。したがって、2番目の処理要素(e2)の実行は、タイミングt+7に遅延する。ld命令のつぎに実行されるmult命令は、遅延の影響を受けずにそのまま実行されるが、add命令は、ld命令の実行完了のタイミングt+8以降となり、4サイクル分の待機時間(4サイクル分のストール)が生じる。
したがって、図6(B)に示すように、図4に示すブロックbの命令実行をシミュレーションした場合に、ld命令の実行結果がキャッシュミスであるケースでは、実行時間が10サイクルとなることがわかる。
図7は、予測情報例を示す説明図である。予測情報321は、ターゲットプログラムpgr内の外部依存命令をターゲットCPU101が実行した場合におけるターゲットCPU101やターゲットCPU101がアクセス可能なハードウェア資源の動作結果のうち、生じる確率が高い結果を定めた情報である。この動作結果を予測ケースと称する。
また、例えば、ターゲットCPU101がアクセス可能なハードウェア資源は、命令キャッシュメモリ、データキャッシュメモリ、MMU内のTLBなどがある。命令キャッシュメモリは、使用頻度の高い命令を一時的に記憶するメモリである。データキャッシュメモリは、使用頻度の高いデータを一時的に記憶するメモリである。TLBは、使用頻度の高い変換情報を一時的に記憶するメモリである。変換情報は、論理アドレスと物理アドレスとを変換するための情報である。例えば、ld命令、st命令などの記憶領域へのアクセス命令の実行時に、ターゲットCPU101は、データキャッシュメモリ、TLBなどを利用する。例えば、図4に示したブロックb内には、ld命令があるため、ld命令については、データキャッシュの予測ケースが“キャッシュヒット”となり、TLB検索の予測ケースが“TLBヒット”となる。
判断部312は、対象ブロックbをコンパイル済みか否か判断する。判断部312は、例えば、性能のシミュレーションの実行結果や動作のシミュレーションsimの実行結果に応じてつぎに計算対象となるブロックを判断可能である。より具体的には、判断部312は、対象ブロックbに関連付けられた計算用コードがあるか否かを判断する。対象ブロックbに関連付けられた計算用コードがある場合、判断部312は、対象ブロックbがコンパイル済みであると判断する。対象ブロックbに関連付けられた計算用コードがない場合、判断部312は、対象ブロックbがコンパイル済みでないと判断する。
対象ブロックbが以前に計算対象となっていないと判断された場合、予測シミュレーション実行部313は、予測情報321に基づいて、対象ブロックbに含まれる外部依存命令についての各予測ケースを設定する。そして、予測シミュレーション実行部313は、タイミング情報320を参照して、予測ケースを前提とするブロックb内の各命令の実行の進み具合をシミュレーションする。これにより、予測シミュレーション実行部313は、設定した予測ケースを前提とする場合のブロックb内の各命令の性能値を求める。
コード生成部314は、予測シミュレーション結果に基づいて、ターゲットCPU101が対象ブロックbを実行した場合の対象ブロックbの性能値を計算する第1計算用コードを生成する。生成された第1計算用コードは、例えば、対象ブロックbと関連付けられてRAM203やディスク205などの記憶装置に記憶される。
図8は、第1計算用コードの生成例を示す説明図である。コード生成部314は、対象ブロックbをコンパイルすることによる機能コードを生成する。さらに、コード生成部314は、予測シミュレーションによって得た対象ブロックb内の各命令の性能値を、対象ブロックbの性能値に加算させる性能計算命令を生成する。また、コード生成部314は、外部依存命令について、ヘルパー関数1を呼び出すヘルパー関数1呼び出し命令を生成する。ヘルパー関数1呼び出し命令は、ヘルパー関数1を呼び出し、ヘルパー関数1に従う処理によって出力される性能値を、対象ブロックbの性能値に加算する命令である。実施例1にかかるヘルパー関数1に従う処理は、アクセス命令が指示するアクセス先の記憶領域の属性とキャッシュメモリの動作とに基づきアクセス命令の性能値を補正して出力する処理である。
また、アクセス命令以外の外部依存命令についても、コード生成部314は、外部依存命令の実行結果が予測ケースと一致するか否かに基づいて、予測ケースの場合の外部依存命令の性能値を補正する処理を指示するヘルパー関数を生成する。そして、コード生成部314は、機能コードに、生成した各性能計算命令およびヘルパー関数1呼び出し命令を含む性能評価コードを追加した第1計算用コードを生成する。生成された第1計算用コードは、対象ブロックbに関連付けられて、RAM203やディスク205などの記憶装置に記憶される。コード実行部302は、第1計算用コードを実行することにより、対象ブロックbの性能値を計算する性能シミュレーションを実行する。
図9は、実施例1にかかるコード実行部の機能的構成例を示すブロック図である。コード実行部302は、実行部901と、第1判断部902と、第2判断部903と、出力部904と、補正部905と、を有する。第1判断部902と、第2判断部903と、出力部904と、補正部905と、の処理は、ホストCPU201がアクセス可能なディスク205などの記憶装置に記憶されたヘルパー関数1にコーディングされる。そして、ホストCPU201が記憶装置に記憶されたヘルパー関数1を読み出して、ヘルパー関数1にコーディングされている処理を実行する。これにより、第1判断部902と、第2判断部903と、出力部904と、補正部905と、の処理が実現される。また、各部の処理結果は、例えば、RAM203、ディスク205などの記憶装置に記憶される。
図10は、実施例1にかかるコード実行部による実行例を示す説明図である。例えば、コード実行部302は、第1計算用コードcc101に含まれる命令を順に実行する。例えば、実行部901は、ld命令のデータキャッシュメモリ1001についてのヘルパー関数1呼び出し命令を実行すると、ヘルパー関数1を呼び出し、ヘルパー関数1が指示する処理を実行する。これにより、第1判断部902から補正部905までの処理が実行される。また、キャッシュメモリとして、データキャッシュメモリ1001を例に挙げるが、命令キャッシュメモリであっても同様の処理となる。
図10の例では、第1判断部902は、ターゲットCPU101がターゲットプログラムpgrを実行する動作のシミュレーションsimにおける対象ブロックbの実行時にキャッシュメモリが使用可能な状態か否かを判断する。例えば、ターゲットCPU101がARMプロセッサの場合、第1判断部902は、動作のシミュレーションsimのうちの対象ブロックbの実行時の動作において、システム制御レジスタSCTRLのCビットの値を検出する。そして、第1判断部902は、システム制御レジスタSCTRLのCビットの値が0であるか1であるかを判断する。第1判断部902は、システム制御レジスタSCTRLのCビットの値が0である場合、データキャッシュメモリ1001が使用可能な状態でないと判断する。第1判断部902は、システム制御レジスタSCTRLのCビットの値が1である場合、データキャッシュメモリ1001が使用可能な状態であると判断する。
データキャッシュメモリ1001が使用可能な状態であると判断された場合、第2判断部903は、動作のシミュレーションsimにおけるアクセス命令を実行時のアクセス先の属性を判断する。具体的に第2判断部903は、データキャッシュメモリ1001を使用可能なことを示す属性であるかを判断する。第2判断部903は、アクセス先の属性として、動作のシミュレーションsimにおけるアクセス命令の実行時のアクセス先についてのページテーブルエントリに設定されたTEX,B,Cビットの値を検出する。例えば、ターゲットCPU101がARMプロセッサの場合、第2判断部903は、動作のシミュレーションsimにおいてld命令を実行時のアクセス先に関するTLB内のページテーブルエントリに設定されたTEX,B,Cビットの値を検出する。
そして、第2判断部903は、検出したTEX,B,Cビットの値がすべて1である場合、アクセス先の属性がデータキャッシュメモリ1001を使用可能なことを示す属性であると判断する。また、第2判断部903は、検出したTEX,B,Cビットのうちのいずれかの値が1でない場合、アクセス先の属性がデータキャッシュメモリ1001を使用可能なことを示す属性でないと判断する。
データキャッシュメモリ1001を使用可能でないと判断された場合、出力部904は、呼び出し元であるヘルパー関数1呼び出し命令が記憶された記憶領域のアドレスを呼び出し命令リストL_helperに出力する。
データキャッシュメモリ1001を使用可能なことを示す属性でないと判断された場合、補正部905は、予測ケースが“キャッシュヒット”の場合、予測シミュレーションによって得られた性能値を“ミスヒット”の場合の性能値となるように補正する。そして、補正部905は、補正した性能値を出力する。また、データキャッシュメモリ1001を使用可能なことを示す属性でないと判断された場合、補正部905は、予測ケースが“ミスヒット”の場合、予測シミュレーションによって得られたアクセス命令の性能値を補正せずに出力する。上述例では、予測ケースが“キャッシュヒット”であるため、補正部905は、例えば、ld命令の性能値にタイミング情報320に含まれるペナルティの値を加算する。
データキャッシュメモリ1001を使用可能なことを示す属性であると判断された場合、補正部905は、動作のシミュレーションsimにおけるデータキャッシュメモリ1001の動作が予測ケースと一致するか否かを判断する。補正部905は、予測ケースと一致する場合、予測シミュレーションによって得られた性能値を補正せずに当該性能値を出力する。補正部905は、予測ケースと一致しない場合、予測シミュレーションによって得られた性能値を補正して当該性能値を出力する。ここでは予測ケースが“キャッシュヒット”であるため、補正部905は、動作のシミュレーションsimにおけるデータキャッシュメモリ1001の動作結果が“キャッシュミス”であるか否かを判断する。そして、“キャッシュミス”であれば、補正部905は、ld命令の性能値にタイミング情報320内のペナルティの値を加算する。補正部905による補正処理の詳細例については、実施例2に示す。
また、データキャッシュメモリ1001を使用可能でないことを示すと判断された場合、コード最適化部303は、第2計算用コードを生成する。第2計算用コードは、データキャッシュメモリ1001を使用しない場合における対象ブロックb内の各命令の性能値によって、ホストCPU201が対象ブロックbを実行した場合の対象ブロックbの性能値を記憶領域の属性によらずに計算するコードである。
図11は、実施例1にかかる第2計算用コードの生成例を示す説明図である。具体的にコード最適化部303は、第1計算用コードcc101のうちの、呼び出し命令リストL_helper内のアドレスが示すヘルパー関数1呼び出し命令を、“キャッシュミス”の場合におけるld命令の性能値を加算させる性能計算命令に置換する。これにより、コード最適化部303は、第2計算用コードcc112を生成する。生成された第2計算用コードcc112は、対象ブロックbに関連付けられて、RAM203やディスク205などの記憶装置に記憶される。また、以前に対象ブロックbに関連付けられた第1計算用コードcc101は、新たに第2計算用コードcc112が対象ブロックbに関連付けられる際に削除される。
また、ブロックbがあらたに対象ブロックbになった場合、判断部312は、対象ブロックbが以前に計算対象となったと判断する。そして、コード実行部302は、第2計算用コードcc112を実行することにより、対象ブロックbの性能値を計算する性能シミュレーションを実行する。上述したように、コード実行部302が有する第1判断部902から補正部905までの処理は、ヘルパー関数1にコーディングされる。そのため、ヘルパー関数1呼び出し命令がコーディングされていない第2計算用コードcc112の実行時には、第1判断部902から補正部905までの処理は、実行されない。これにより、アクセス命令を含む対象ブロックbがあらたに計算対象となった場合の性能値の計算を高速化することができる。
また、シミュレーション情報収集部304は、各ブロックbの性能値の計算結果を収集し、ターゲットCPU101がターゲットプログラムpgrを実行した場合のターゲットプログラムpgrの性能値を計算する。
(実施例2)
実施例2では、ブロックb内のアクセス命令がキャッシュメモリを使用可能である場合、キャッシュメモリの動作によって性能値を記憶領域の属性によらずに補正してブロックbの性能値を計算する計算用コードを生成する。これにより、ブロックbがあらたに計算対象となった場合に、記憶領域の属性を判断しないため、性能値の計算量の低減を図ることができる。実施例2では、実施例1で説明した機能や構成と同一の機能や構成についての詳細な説明を省略する。また、実施例2では、実施例1と同様にデータキャッシュメモリ1001を例に挙げるが、命令キャッシュメモリであってもよい。
まず、データキャッシュメモリ1001を使用可能であることを示すと判断された場合、コード最適化部303は、第2計算用コードを生成する。第2計算用コードは、ホストCPU201が実行可能なコードであって、データキャッシュメモリ1001を使用する場合における対象コード内の各命令の性能値によって、対象ブロックbの性能値を記憶領域の属性によらずに計算するコードである。生成された第2計算用コードは、対象ブロックbに関連付けられて、RAM203やディスク205などの記憶装置に記憶される。また、以前に対象ブロックbに関連付けられた第1計算用コードは、新たに第2計算用コードが対象ブロックbに関連付けられる際に削除される。
図12は、実施例2にかかる第2計算用コードの生成例を示す説明図である。具体的にコード最適化部303は、第1計算用コードcc101内のヘルパー関数1呼び出し命令のうち、呼び出し命令リストL_helper内のアドレスが示すヘルパー関数1呼び出し命令以外のヘルパー関数1呼び出し命令を検出する。そして、コード最適化部303は、検出したヘルパー関数1呼び出し命令をヘルパー関数2呼び出し命令に置換することにより、第2計算用コードcc123を生成する。ヘルパー関数2呼び出し命令は、ヘルパー関数2を呼び出し、ヘルパー関数2に従う処理によって出力される性能値を、対象ブロックbの性能値に加算する命令である。ここで、実施例2では、理解の容易化のために、第1計算用コードcc101にはヘルパー関数1呼び出し命令についてはデータキャッシュについてのヘルパー関数1呼び出し命令のみとして説明する。ヘルパー関数2は、ヘルパー関数1に含まれるアクセス命令のアクセス先の記憶領域の属性を検出する処理と、データキャッシュメモリ1001が使用可能か否かを判断する処理と、を指示する命令を含まない関数である。具体的には、ヘルパー関数2には、補正部905の処理がコーディングされてある。
これにより、対象ブロックbがあらたに計算対象となった場合、データキャッシュメモリ1001を使用可能なことを示す属性であると判断されたアクセス命令についてのアクセス先の属性を判断する処理が行われなくなる。そのため、性能値の計算量の低減を図ることができ、ターゲットプログラムpgrの性能値の計算の高速化を図ることができる。
図13は、ld命令のデータキャッシュメモリについてのヘルパー関数2の詳細例を示す説明図である。第2計算用コードcc123には、ヘルパー関数2「cache_ld(address,rep_delay,pre_delay)」呼び出し命令が組み込まれる。
ヘルパー関数2の“rep_delay”は、このロード(ld)命令の返り値を使用するつぎの命令の実行までに、ペナルティ時間のうち遅延時間として処理されなかった時間(猶予時間)である。“pre_delay”は、1つ前の命令から受ける遅延時間である。“−1”は、前の命令に遅延がないことを示す。“rep_delay”と“pre_delay”は、予測シミュレーション実行部313によって得られる性能シミュレーション結果とタイミング情報320との静的分析処理の結果から得られる時間情報である。
図13に示す例では、補正部905は、現タイミングcurrent_timeと1つ前のld命令の実行タイミングpreld_timeとの差が、1つ前のld命令の遅延時間分pre_delayを超えているときは、1つ前のld命令の実行タイミングpreld_timeと現タイミングcurrent_timeまでの時間で遅延時間pre_delayを調整して有効遅延時間avail_delayを求める。
つぎに、補正部905は、データキャッシュメモリ1001の動作結果が“キャッシュミス”であれば、予測ケースの誤りであり、有効遅延時間avail_delayにキャッシュミス時のペナルティ時間cache_miss_latencyを加算して、猶予時間rep_delayをもとに、ld命令の性能値を補正する。
図14〜16では、補正部によるld命令の実行結果に対する補正例を示す。図14は、補正部によるld命令の実行結果に対する補正例を示す説明図である。図14では、1つのキャッシュ処理が実行されるケースで1つのキャッシュミスが生じた場合の補正例を説明する。
図14の例では、以下の3命令のシミュレーションが実行される。
「ld [r1],r2 :[r1]→r2;
mult r3,r4,r5 :r3*r4→r5;
add r2,r5,r6 :r2+r5→r6」
図14(A)は、予測ケースが“キャッシュヒット”の場合の命令実行タイミングのチャート例を示す。この予測ケースにおいて、3番目に実行されるadd命令に、2サイクルストールが生じている。図14(B)は、予測ケースと異なる“キャッシュミス”の場合の命令実行タイミングのチャート例を示す。この予測ケースと異なる実行結果では、ld命令の実行結果がキャッシュミスであると、ペナルティサイクル(6サイクル)分の遅延が生じる。そのため、mult命令は、遅延の影響を受けずに実行されるが、add命令の実行は、ld命令の完了を待つため、4サイクル分遅延することになる。図14(C)は、補正部905による補正後の命令実行タイミングチャートの例を示す図である。
補正部905は、ld命令の実行結果がキャッシュミスであるので(予測ケースと異なる実行結果)、残りの実行時間(2−1=1サイクル)に所定のキャッシュミス時のペナルティ時間(6サイクル)を加算して有効遅延時間(7サイクル)とする。有効遅延時間は、最大の遅延時間となる。さらに、補正部905は、つぎのmult命令の実行時間(3サイクル)を得て、次命令の実行時間が遅延時間を超過しないと判定して、有効遅延時間から次命令の実行時間を差し引いた時間(7−3=4サイクル)を、ld命令の遅延が生じた実行時間(遅延時間)とする。また、補正部905は、有効遅延時間から上述の遅延時間を差し引いた時間(3サイクル)を猶予時間とする。猶予時間は、ペナルティとしての遅延が猶予された時間である。補正部905は、ヘルパー関数2cache_ld(address,rep_delay,pre_delay)で、猶予時間rep_delay=3、前命令の遅延時間pre_delay=−1(遅延なし)を返す。
この補正により、ld命令の実行時間は、実行された時間と遅延時間を加算した実行時間(1+4=5サイクル)となり、実行完了のタイミングt1から、後続のmult命令、add命令の実行時間が計算される。すなわち、補正したld命令の実行時間(5サイクル)に、予測シミュレーション実行部313の処理結果(予測結果による予測シミュレーションの結果)で求められていたmult命令とadd命令の各々の実行時間(3サイクル、3サイクル)を単純に加算するだけで、このブロックbの実行時間(サイクル数)を得ることができる。
これにより、実行結果が予測と異なる命令の実行時間のみを加算または減算することによる補正処理を行って、その他の命令については、予測結果にもとづくシミュレーション時に求められた実行時間を加算するだけで、高精度に、キャッシュミス時のシミュレーションの実行サイクル数をも求めることができる。
図14(D)は、計算装置100の処理と比較するために、従来技術によるキャッシュミス時のサイクル数を単純な加算により求めた場合の誤差の大きさを示す図である。図14(D)の場合には、ld命令の遅延時間をそのまま加算しているため、実際には、ld命令の実行中に実行が完了するmult命令の実行タイミングのずれによる誤差が生じていることがわかる。
図15は、補正部によるld命令の実行結果に対する補正例を示す図である。図15では、2つのキャッシュ処理が実行されるケースで2つのキャッシュミスが生じた場合の補正例を説明する。図15の例では、以下の5命令の予測シミュレーションが実行される。
「ld [r1],r2 :[r1]→r2;
ld [r3],r4 :[r3]→r4;
mult r5,r6,r7 :r5*r6→r7;
add r2,r4,r2 :r2+r4→r2;
add r2,r7,r2 :r2+r7→r2」
図15(A)は、2つのキャッシュ処理での予測結果が“キャッシュヒット”の場合の命令実行タイミングのチャート例を示す。この予測ケースでは、2つのld命令が、2サイクル分(通常の1サイクル+付加した1サイクル)をあけて実行されるものとする。図15(B)は、2つのキャッシュ処理の両方が予測結果と異なる「キャッシュミス」の場合の命令実行タイミングのチャート例を示す。この予測ミスのケースでは、2つのld命令のそれぞれでキャッシュミスがあり、ペナルティサイクル(6サイクル)分の遅延が生じる。しかし、2つのld命令の遅延時間は重なる時間があり、mult命令も、遅延の影響を受けずに実行され、2つのadd命令の実行が2つ目のld命令の完了まで遅延することになる。図15(C)は、補正部905による補正後の命令実行タイミングチャートの例を示す。
補正部905は、図14を用いて説明したように、タイミングt0において、1つ目のld命令の遅延時間を補正し、ヘルパー関数2cache_ld(addr,3,−1)を返す。つぎに、現タイミングt1において、補正部905は、2つ目のld命令の実行結果がキャッシュミスであるので(予測結果のミス)、このld命令の残りの実行時間にペナルティサイクル(6)を追加して有効遅延時間(1+6=7サイクル)とする。
補正部905は、有効遅延時間から、現タイミングt1までに消費した遅延時間(<現タイミングt1−前命令の実行タイミングt0>−設定された間隔)を差し引いて、現タイミングt1から超過した有効遅延時間を求め(7−(6−2)=3サイクル)、この超過した有効遅延時間を、2つ目のld命令の実行時間とする。さらに、補正部905は、超過した有効遅延時間から本来の実行時間を差し引いて(3−1=2サイクル)、前命令の遅延時間とする。また、補正部905は、有効遅延時間から、現タイミングt1までに消費した遅延時間と現タイミングt1で超過した有効遅延時間との合計を差し引いて(7−(3+3)=1サイクル)、猶予時間とする。
補正部905は、タイミングt1において、2つ目のld命令の遅延時間を補正した後、ヘルパー関数2cache_ld(addr,2,1)を返す。この補正により、現タイミングt1に補正値(3サイクル)を付加したタイミングがld命令の実行完了のタイミングとなり、そのタイミングから、以降のmult命令、add命令の実行時間が加算されていくことになる。
図15(D)は、計算装置100の処理と比較するために、従来技術によるキャッシュミス時のサイクル数を単純な加算により求めた場合の誤差の大きさを示す。図15(D)の場合には、2つのld命令それぞれに与えられたペナルティにもとづく遅延時間をそのまま加算しているため、大きな誤差(8サイクル)が生じていることがわかる。図15(C)に示す補正部905の処理でも、図15(B)に示すように正しくシミュレーションされる場合に比べて誤差(1サイクル)があるが、従来手法に比べて、非常に高精度に求められることがわかる。
図16は、補正部によるld命令の実行結果に対する補正例を示す図である。2つのキャッシュ処理が実行されるケースで1つのキャッシュミスが生じた場合の補正例を説明する。図16の例では、図15で示す説明例と同様の5つの命令のシミュレーションが実行される。
図16(A)は、2つのキャッシュ処理での予測結果が「キャッシュヒット」の場合の命令実行タイミングのチャート例を示す。この予測ケースでは、図15(A)の場合と同様に、2つのld命令が、2サイクル分(通常の1サイクル+付加した1サイクル)をあけて実行されるものとする。図16(B)は、1つ目のld命令が予測結果と異なる「キャッシュミス」となり、2つ目のld命令の結果が予測結果(キャッシュヒット)である場合の命令実行タイミングのチャート例を示す。この予測ミスのケースでは、1つ目のld命令にペナルティサイクル(6サイクル)分の遅延が生じる。2つ目のld命令とmult命令は、遅延の影響を受けずに実行される。2つのadd命令の実行は、1つ目のld命令の完了まで遅延することになる。図16(C)は、補正部905による補正後の命令実行タイミングチャートの例を示す。
補正部905は、図14を用いて説明したように、タイミングt0において、1つ目のld命令の遅延時間を補正し、ヘルパー関数2cache_ld(addr,3,−1)を返す。つぎに、現タイミングt1において、補正部905は、2つ目のld命令の実行結果がキャッシュヒットであるので(予測結果)、このld命令の実行開始から現タイミングt1までの時間<t1−t0−設定された間隔(6−0−2=4サイクル)>が、このld命令の実行時間(2サイクル)より大きいかを判断する。補正部905は、2つ目のld命令の実行開始から現タイミングt1までの時間が、このld命令の実行時間(2サイクル)より大きいので、現タイミングt1を、つぎのmult命令の実行タイミングとする。
そして、補正部905は、2つ目のld命令の実行完了から現タイミングt1までの時間を(2サイクル)、つぎの命令に対する遅延時間として扱い、前命令の遅延時間pre_delay=2とする。また、補正部905は、1つ目のld命令の有効遅延時間から、現タイミングt1までに消費した遅延時間と現タイミングt1で超過した有効遅延時間との合計を差し引いて(7−(6+0)=1サイクル)、猶予時間rep_delay=1とし、ヘルパー関数2cache_ld(addr,1,2)を返す。
図16(D)は、計算装置100の処理と比較するために、従来技術によるキャッシュミス時のサイクル数を単純な加算により求めた場合の誤差の大きさを示す。図16(D)の場合には、1つ目のld命令のペナルティによる遅延時間をそのまま加算しているため誤差が生じていることがわかる。
(実施例1および実施例2にかかる計算装置100による計算処理手順例)
図17は、実施例1および実施例2にかかる計算装置による計算処理手順例を示すフローチャートである。計算装置100は、ターゲットプログラムpgrの性能値の計算を終了したか否かを判断する(ステップS1701)。終了していない場合(ステップS1701:No)、計算装置100は、計算用コードの生成処理を行う(ステップS1702)。
つぎに、計算装置100は、対象ブロックbに関連付けられた計算用コードを実行する(ステップS1703)。また、計算装置100は、ターゲットCPU101が対象ブロックbを実行した場合の対象ブロックbについての動作のシミュレーションsimを実行する(ステップS1704)。対象ブロックbについての動作のシミュレーションsimの実行結果を計算用コードの実行に利用する場合、計算用コードの実行では、対象ブロックbについて動作のシミュレーションsimの実行が終了するのを待機する。
ステップS1703およびステップS1704のつぎに、計算装置100は、計算用コードの最適化処理を行い(ステップS1705)、ステップS1701へ戻る。ステップS1701において、終了した場合(ステップS1701:Yes)、計算装置100は、計算結果を収集し(ステップS1706)、一連の処理を終了する。ステップS1706では、例えば、計算装置100は、各ブロックbの性能値を合計することによりターゲットCPU101がターゲットプログラムpgrに実行された場合のターゲットプログラムpgrの性能値を得る。
図18は、実施例1および実施例2にかかる図17で示した生成処理の詳細な説明を示すフローチャートである。計算装置100は、対象ブロックbがコンパイル済みか否かを判断する(ステップS1801)。計算装置100は、つぎに計算対象となる対象ブロックbを、動作のシミュレーションsimにおけるPC(Program Counter)の値によって特定できる。また、計算装置100は、対象ブロックbを計算用コードに含まれる機能コードの実行結果に基づいて特定できる。
対象ブロックbがコンパイル済みでない場合(ステップS1801:No)、計算装置100は、ターゲットプログラムpgrから対象ブロックbを分割して取得する(ステップS1802)。つぎに、計算装置100は、対象ブロックb内の外部依存命令を検出する(ステップS1803)。
そして、計算装置100は、予測情報321に基づいて、外部依存命令についての予測ケースを設定する(ステップS1804)。つづいて、計算装置100は、タイミング情報320に基づいて、設定した予測ケースにおける各命令の性能値の予測シミュレーションを行う(ステップS1805)。つぎに、計算装置100は、対象ブロックbをコンパイルして得られる機能コードと、予測シミュレーション結果に基づくコードと、を有する計算用コードを生成し(ステップS1806)、一連の処理を終了する。ステップS1806において生成される計算用コードは、例えば、第1計算用コードである。
また、ステップS1801において、対象ブロックbがコンパイル済みである場合(ステップS1801:Yes)、一連の処理を終了する。
図19は、実施例1および実施例2にかかる図17で示したコード最適化処理の詳細な説明を示すフローチャートである。計算装置100は、計算用コードを取得する(ステップS1901)。計算装置100は、計算用コードのうち、呼び出し命令リストL_helper内のアドレスが示すヘルパー関数1呼び出し命令を性能計算命令に置換する(ステップS1902)。計算装置100は、計算用コードのうち、呼び出し命令リストL_helper内のアドレスが示すヘルパー関数1呼び出し命令以外の、データキャッシュメモリ1001についてのヘルパー関数1呼び出し命令を検出する(ステップS1903)。計算装置100は、検出したヘルパー関数1呼び出し命令を、データキャッシュメモリ1001についてのヘルパー関数2呼び出し命令に置換し(ステップS1904)、一連の処理を終了する。
図20は、実施例1にかかる計算装置によるデータキャッシュメモリについてのヘルパー関数1に従う計算処理手順例を示すフローチャートである。計算装置100は、データキャッシュメモリ1001が使用可能な状態か否かを判断する(ステップS2001)。データキャッシュメモリ1001が使用可能な状態である場合(ステップS2001:Yes)、計算装置100は、動作のシミュレーションsimにおけるアクセス先の属性がデータキャッシュメモリ1001を使用可能なことを示す属性か否かを判断する(ステップS2002)。
属性がデータキャッシュメモリ1001を使用可能なことを示す属性であると判断された場合(ステップS2002:Yes)、計算装置100は、動作のシミュレーションsimにおいてキャッシュアクセスの結果が予測ケースと一致しているか否かを判断する(ステップS2003)。キャッシュアクセスの結果とは、データキャッシュメモリ1001の動作結果である。キャッシュアクセスの結果が予測ケースと一致している場合(ステップS2003:Yes)、計算装置100は、予測シミュレーションによって得られた性能値を出力し(ステップS2004)、一連の処理を終了する。キャッシュアクセスの結果が予測ケースと一致していない場合(ステップS2003:No)、計算装置100は、ステップS2007へ移行する。
属性がデータキャッシュメモリ1001を使用可能なことを示す属性でないと判断された場合(ステップS2002:No)、計算装置100は、現ヘルパー関数1呼び出し命令のアドレスを呼び出し命令リストL_helperへ出力する(ステップS2005)。計算装置100は、予測ケースがヒットであるか否かを判断する(ステップS2006)。予測ケースがヒットである場合(ステップS2006:Yes)、計算装置100は、予測シミュレーションによって得られた性能値を補正する(ステップS2007)。そして、計算装置100は、補正した性能値を出力し(ステップS2008)、一連の処理を終了する。予測ケースがヒットでない場合(ステップS2006:No)、計算装置100は、ステップS2004へ移行する。
ステップS2001において、データキャッシュメモリ1001が使用可能な状態でない場合(ステップS2001:No)、計算装置100は、ステップS2006へ移行する。
図21は、実施例1にかかる計算装置によるデータキャッシュメモリについてのヘルパー関数2に従う計算処理手順の一例を示すフローチャートである。データキャッシュメモリ1001についてのヘルパー関数2は、データキャッシュメモリ1001についてのヘルパー関数1内の、データキャッシュメモリ1001の使用可能状態の判断処理、アクセス先の属性の判断処理を指示する命令が省略された関数である。
まず、計算装置100は、動作のシミュレーションsimにおいてキャッシュアクセスの結果が予測ケースと一致しているか否かを判断する(ステップS2101)。一致している場合(ステップS2101:Yes)、計算装置100は、予測シミュレーションによって得られた性能値を出力し(ステップS2102)、一連の処理を終了する。
一致していない場合(ステップS2101:No)、計算装置100は、予測シミュレーションによって得られた性能値を補正する(ステップS2103)。計算装置100は、補正された性能値を出力し(ステップS2104)、一連の処理を終了する。
(実施例3)
ターゲットCPU101の初期化中においてキャッシュメモリは使用可能でない状態になる。そのため、ターゲットCPU101の初期化が完了すれば、キャッシュメモリは使用可能な状態になる。そこで、実施例3では、キャッシュメモリが使用可能でない状態から使用可能な状態に変化するまでの間、キャッシュメモリを使用しない場合のアクセス命令の性能値によって対象ブロックbの性能値を計算する計算用コードを実行する。これにより、キャッシュメモリを使用可能でない状態の期間における対象ブロックbの性能値の計算量の減少を図ることができ、ターゲットプログラムpgrの性能値の計算を高速化させることができる。
また、実施例3では、実施例1または2で説明した機能や構成と同一の機能や構成についての詳細な説明を省略する。また、実施例3では、実施例1および実施例2と同様にデータキャッシュメモリ1001を例に挙げるが、命令キャッシュメモリであってもよい。
また、ターゲットCPU101の初期化中においてTLBは使用可能でない状態になる。そのため、ターゲットCPU101の初期化が完了すれば、TLBは使用可能な状態になる。そこで、実施例3では、TLBが使用可能でない状態から使用可能な状態に変化するまでの間、TLBを使用しない場合のアクセス命令の性能値によって対象ブロックbの性能値を計算する計算用コードを実行する。これにより、TLBを使用可能でない状態の期間における対象ブロックbの性能値の計算量の減少を図ることができ、ターゲットプログラムpgrの性能値の計算を高速化させることができる。
(実施例3にかかる計算装置100の機能的構成例)
図22は、実施例3にかかる計算装置の機能的構成例を示すブロック図である。計算装置100は、コード変換部301と、コード実行部302と、コード最適化部2201と、シミュレーション情報収集部304と、を有する。
図22に示すコード変換部301からシミュレーション情報収集部304の処理は、例えば、ホストCPU201がアクセス可能なディスク205などの記憶装置に記憶された計算プログラムにコーディングされる。そして、ホストCPU201が記憶装置に記憶された計算プログラムを読み出して、計算プログラムにコーディングされている処理を実行する。これにより、コード変換部301からシミュレーション情報収集部304の処理が実現される。また、各部の処理結果は、例えば、RAM203、ディスク205などの記憶装置に記憶される。
具体的には、コード変換部301は、ブロック分割部311と、第1判断部2211と、第2判断部2212と、予測シミュレーション実行部313と、コード生成部314と、を有する。ブロック分割部311は実施例1で説明したブロック分割部311と同一の機能を有する。
まず、第1判断部2211は、対象ブロックbをコンパイル済みか否か判断する。第1判断部2211による具体的な判断方法は、実施例1で説明した判断部312による判断方法と同じである。
(データキャッシュメモリ)
図23は、実施例3にかかるデータキャッシュメモリについての計算用コードの生成例1を示す説明図である。コンパイル済みでないと判断された場合、第2判断部2212は、動作のシミュレーションsimにおける対象ブロックb内のアクセス命令の実行時にデータキャッシュメモリ1001が使用可能な状態であるか否かを判断する。なお、ここでは、動作シミュレーションsimにおいて対象ブロックbを実行していない。そのため、第2判断部2212は、現在の動作シミュレーションsimにおける状態に基づいて動作シミュレーションsimにおいて対象ブロックb内のアクセス命令の実行時にデータキャッシュメモリ1001が使用可能な状態であるか否かを判断する。
データキャッシュメモリ1001が使用可能な状態であるか否かを判断する。具体的には、第2判断部2212は、システム制御レジスタSCTRLのCビットの値を検出する。第2判断部2212は、システム制御レジスタSCTRLのCビットの値が0である場合、データキャッシュメモリ1001が使用可能な状態でないと判断する。第2判断部2212は、システム制御レジスタSCTRLのCビットの値が1である場合、データキャッシュメモリ1001が使用可能な状態であると判断する。
予測シミュレーション実行部313は、予測情報321から、対象ブロックbに含まれる外部依存命令についての各予測ケースを取得して設定する。また、予測シミュレーション実行部313は、アクセス命令についてのデータキャッシュメモリ1001に関する予測ケースを第2判断部2212による判断結果に基づいて設定する。例えば、予測シミュレーション実行部313は、データキャッシュメモリ1001が使用可能な状態でないと判断した場合、アクセス命令が実行された場合のデータキャッシュメモリ1001についての予測ケースを“キャッシュミス”に設定する。例えば、予測シミュレーション実行部313は、データキャッシュメモリ1001が使用可能な状態であると判断した場合、アクセス命令が実行された場合のデータキャッシュメモリ1001についての予測ケースを“キャッシュヒット”に設定する。
そして、予測シミュレーション実行部313は、タイミング情報320を参照して、設定した予測ケースを前提とする場合のブロックb内の各命令の実行の進み具合をシミュレーションする。これにより、予測シミュレーション実行部313は、設定した予測ケースを前提とする場合の対象ブロックb内の各命令の性能値を求める。
また、コード生成部314は、データキャッシュメモリ1001が使用可能な状態でないと判断した場合、計算用コードcc232を生成する。生成された計算用コードcc232は、対象ブロックbに関連付けられて、RAM203やディスク205などの記憶装置に記憶される。計算用コードcc232は、データキャッシュメモリ1001を使用しない場合における対象ブロックb内の各命令の性能値によって、対象ブロックbの性能値をデータキャッシュメモリ1001の状態によらずに計算するコードである。図23に示すように、データキャッシュメモリ1001が使用可能な状態でない場合、計算用コードcc232は、データキャッシュメモリ1001を使用しない場合の性能値を対象ブロックbの性能値に加算するld命令の性能計算命令を有する。また、コード実行部302は、生成された計算用コードcc232を実行する。これにより、計算量の低減を図ることができる。
データキャッシュメモリ1001が使用可能な状態でないと判断された場合、コード最適化部2201は、コード実行部302が対象ブロックbに関連付けられた計算用コードcc232の実行後に、すべての計算用コードを無効化するかを判断する。具体的には、コード最適化部2201は、判断部2221と、無効化部2222と、を有する。
データキャッシュメモリ1001が使用可能な状態でないと判断された場合、計算用コードcc232の実行後に、判断部2221は、データキャッシュメモリ1001が使用可能な状態であるか否かを判断する。判断部2221による判断によって、データキャッシュメモリ1001が使用可能でない状態から使用可能な状態への変化が検出される。判断部2221による判断方法は、第2判断部2212による判断方法と同一である。
データキャッシュメモリ1001が使用可能な状態でないと判断部2221によって判断された場合、無効化部2222は、各ブロックbについての計算用コードcc232を無効化しない。例えば、データキャッシュメモリ1001が使用可能な状態でないと判断部2221が判断し、対象ブロックbがあらたに性能値の計算対象となった場合、コード実行部302は、計算用コードcc232を実行する。これにより、データキャッシュメモリ1001が使用可能な状態でない期間は、計算用コードcc232によって対象ブロックbの性能値が計算される。
一方、データキャッシュメモリ1001が使用可能な状態であると判断部2221が判断した場合、無効化部2222は、各ブロックbについての計算用コードcc232を無効化する。具体的には、無効化部2222は、各ブロックbに対応付けられて記憶された計算用コードcc232を削除することにより、計算用コードcc232を無効化する。これにより、第1判断部2211は、あらたに計算対象となった対象ブロックbに関連付けられた計算用コードが無効化部2222によって無効化されたため、対象ブロックbをコンパイル済みでないと判断する。
そして、対象ブロックbをコンパイル済みでないと判断された場合、第2判断部2212は、データキャッシュメモリ1001が使用可能な状態であるか否かを判断する。上述したように、データキャッシュメモリ1001が使用可能な状態であると判断された場合、予測シミュレーション実行部313は、アクセス命令が実行された場合のデータキャッシュメモリ1001についての予測ケースを“キャッシュヒット”に設定する。予測シミュレーション実行部313は、タイミング情報320を参照して、設定した予測ケースを前提とする場合のブロックb内の各命令の実行の進み具合をシミュレーションする。これにより、予測シミュレーション実行部313は、設定した予測ケースを前提とする場合の対象ブロックb内の各命令の性能値を求める。
また、システム制御レジスタSCTRLのCビットの値が1であるため、データキャッシュメモリ1001が使用可能な状態であると第2判断部2212が判断した場合、コード生成部314は、計算用コードcc233を生成する。計算用コードcc233はデータキャッシュメモリ1001を使用する場合における対象ブロックb内の各命令の性能値によって、ブロックbの性能値を計算するコードである。図23に示すように、計算用コードcc233は、データキャッシュメモリ1001のキャッシュアクセスの結果に応じてld命令の性能値を補正するヘルパー関数を呼び出すld命令のヘルパー関数呼び出し命令を有する。例えば、ここで実施例1に示したヘルパー関数1呼び出し命令を有する計算用コードcc233を生成してもよく、これにより、実施例1と実施例3とを組み合わせることができる。
そして、コード実行部302は、生成された計算用コードcc233を実行する。また、データキャッシュメモリ1001が使用可能でない状態から使用可能な状態に一旦変化すると、再度使用可能でない状態に変化しない。ターゲットCPU101の初期化中においてデータキャッシュメモリ1001は使用可能でない状態になる。そのため、ターゲットCPU101の初期化が完了すれば、データキャッシュメモリ1001は使用可能な状態になる。また、データキャッシュメモリ1001が使用可能な状態であると第2判断部2212が判断した場合、実施例3にかかるコード最適化部2201は処理を行わない。
(TLB)
図24は、実施例3にかかるTLBについての計算用コードの生成例2を示す説明図である。TLB2401の場合もデータキャッシュメモリ1001の場合と同様に、各部の処理が行われる。そのため、第2判断部2212は、TLB2401が使用可能な状態であるか否かを判断する。具体的には、第2判断部2212は、システム制御レジスタSCTRLのMビットの値を検出する。第2判断部2212は、システム制御レジスタSCTRLのMビットの値が0である場合、TLB2401が使用可能な状態でないと判断する。第2判断部2212は、システム制御レジスタSCTRLのMビットの値が1である場合、TLB2401が使用可能な状態であると判断する。
予測シミュレーション実行部313は、予測情報321に基づいて、対象ブロックbに含まれる外部依存命令についての各予測ケースを取得して設定する。また、予測シミュレーション実行部313は、アクセス命令についてのデータキャッシュメモリ1001に関する予測ケースを第2判断部2212による判断結果に基づいて設定する。例えば、TLB2401が使用可能な状態でないと判断された場合、予測シミュレーション実行部313は、アクセス命令が実行された場合のデータキャッシュメモリ1001についての予測ケースを“TLB使用不可”に設定する。例えば、予測シミュレーション実行部313は、TLB2401が使用可能な状態であると判断した場合、アクセス命令が実行された場合のTLB2401についての予測ケースを“キャッシュヒット”に設定する。
そして、予測シミュレーション実行部313は、上述したように、設定した予測ケースを前提とする場合の対象ブロックb内の各命令の性能値を求める。
また、コード生成部314は、TLB2401が使用可能な状態でないと第2判断部2212が判断した場合、計算用コードcc242を生成する。計算用コードcc242は、データキャッシュメモリ1001を使用しない場合における対象ブロックb内の各命令の性能値によって、対象ブロックbの性能値をTLB2401の状態によらずに計算するコードである。コード実行部302は、生成された計算用コードcc242を実行する。図24に示すように、TLB2401が使用可能な状態でない場合、計算用コードcc242は、TLB2401を使用しない場合の性能値を対象ブロックbの性能値に加算するld命令の性能計算命令を有する。
コード実行部302とコード最適化部2201などの処理については、データキャッシュメモリ1001の場合と同様であるため、詳細な説明を省略する。
また、コード生成部314は、TLB2401が使用可能な状態であると第2判断部2212が判断した場合、計算用コードcc243を生成する。計算用コードcc243は、TLB2401を使用する場合における対象ブロックb内の各命令の性能値によって、対象ブロックbの性能値を計算するコードである。図24に示すように、計算用コードcc243は、TLB2401検索の結果に応じてld命令の性能値を補正するヘルパー関数を呼び出すld命令のヘルパー関数呼び出し命令を有する。例えば、ここで実施例4に示すヘルパー関数1呼び出し命令を有する計算用コードcc243を生成してもよく、これにより、実施例3と実施例4とを組み合わせることができる。
理解の容易化のために、TLB2401とデータキャッシュメモリ1001との各々について計算用コードcc243の生成例を区別して説明したが、実際には同一の性能計算命令や同一のヘルパー関数によって表される。
(実施例3にかかる計算装置100による計算処理手順例)
実施例3では、実施例1および実施例2にかかる計算装置による計算処理手順例と同一の計算処理手順例については説明せずに、異なる計算処理手順について詳細に説明する。
図25は、実施例3にかかる図17で示した生成処理の詳細な説明を示すフローチャートである。計算装置100は、対象ブロックbがコンパイル済みか否かを判断する(ステップS2501)。計算装置100は、つぎに計算対象となる対象ブロックbを、動作のシミュレーションsimにおけるPCの値によって特定できる。また、計算装置100は、対象ブロックbを計算用コードに含まれる機能コードの実行結果に基づいて特定できる。
対象ブロックbがコンパイル済みでない場合(ステップS2501:No)、計算装置100は、ターゲットプログラムpgrから対象ブロックbを分割して取得する(ステップS2502)。計算装置100は、対象ブロックb内の外部依存命令を検出する(ステップS2503)。
計算装置100は、動作のシミュレーションsimにおけるデータキャッシュメモリ1001が使用可能な状態かを判断する(ステップS2504)。具体的には、計算装置100は、動作のシミュレーションsimにおけるシステム制御レジスタSCTRLのCビットの値に基づいて判断する。計算装置100は、動作のシミュレーションsimにおけるTLB2401が使用可能な状態かを判断する(ステップS2505)。具体的には、計算装置100は、動作のシミュレーションsimにおけるシステム制御レジスタSCTRLのCビットの値に基づいて判断する。
計算装置100は、予測情報321と使用可能な状態であるかの判断結果と、に基づいて、外部依存命令についての予測ケースを設定する(ステップS2506)。計算装置100は、タイミング情報320に基づいて、設定した予測ケースにおける各命令の性能値の予測シミュレーションを行う(ステップS2507)。計算装置100は、対象ブロックbをコンパイルして得られる機能コードと、予測シミュレーション結果に基づくコードと、を有する計算用コードを生成し(ステップS2508)、一連の処理を終了する。ステップS2508において生成される計算用コードは、第1計算用コードである。
また、ステップS2501において、対象ブロックbがコンパイル済みである場合(ステップS2501:Yes)、一連の処理を終了する。
図26は、実施例3にかかる図17で示したコード最適化処理の詳細な説明を示すフローチャートである。計算装置100は、データキャッシュメモリ1001が使用可能でない状態から使用可能な状態に変化したか否かを判断する(ステップS2601)。変化していない場合(ステップS2601:No)、計算装置100は、TLB2401が使用可能でない状態から使用可能な状態に変化したか否かを判断する(ステップS2602)。ステップS2602において変化した場合(ステップS2602:Yes)、またはステップS2601において変化した場合(ステップS2601:Yes)、計算装置100は、各ブロックbに関連付けられて記憶された計算用コードを無効化し(ステップS2603)、一連の処理を終了する。具体的には、計算装置100は、各ブロックbに関連付けられて記憶された計算用コードを削除する。
一方、変化していない場合(ステップS2602:No)、計算装置100は、一連の処理を終了する。また、ステップS2601とステップS2602とについては、いずれが先に実行されてもよい。例えば、ステップS2603において、計算用コードが無効化された場合、ステップS2501においてコンパイル済みでないと判断され、対象ブロックbについてのあらたな計算用コードが生成される。
(実施例4)
ターゲットCPU101がARMプロセッサの場合、ターゲットCPU101は第1モードと、第1モードよりもターゲットCPU101の動作の制限が小さい第2モードと、の2つの動作モードを有する。第1モードは、ユーザモードと称し、第2モードは、特権モードである。特権モードとユーザモードとの2つの動作モードを有する。ユーザモード以外の動作モードはすべて特権モードと呼ばれる。特権モードは、ユーザモードよりプロセッサの動作の制限が少ない動作モードである。そのため、特権モードではカーネルなどが記憶されたシステム領域にアクセスすることができる。特権モード時のシステム領域へのアクセスは、TLB2401にヒットするように予め設計される。例えば、TLB2401では、システム領域を1個のページテーブルエントリで管理する。そして、TLB2401は、システム領域用の特別なフラグを用いてTLB2401から当該ページテーブルエントリが消去されないように予め設計される。これにより、当該アクセスがTLB2401にヒットするように実現できる。そのため、特権モード時のアクセス命令をターゲットCPU101が実行した場合、システム領域へのアクセスが行われるため、当該アクセス命令についてのTLB2401の動作は“ヒット”となる。
そこで、実施例4では、動作のシミュレーションsimにおけるアクセス命令の実行時に動作モードが特権モードの場合、TLBがヒットを前提とした対象ブロックbの各命令の性能値によって対象ブロックbの性能値を計算する計算用コードを生成する。これにより、対象ブロックbがあらたに計算対象となった場合に、TLBがヒットであるか否かを判断する処理が行われないため、対象ブロックbがあらたに計算対象となった場合の計算量の低減を図ることができる。実施例4では、実施例1〜実施例3のいずれかで説明した機能や構成と同一の機能や構成についての詳細な説明を省略する。
まず、コード生成部314は、対象ブロックbをコンパイルすることによって機能コードを生成する。さらに、コード生成部314は、予測シミュレーションによって得た対象ブロックb内の各命令の性能値を、対象ブロックbの性能値に加算させる性能計算命令を生成する。また、コード生成部314は、外部依存命令について、ヘルパー関数1を呼び出すヘルパー関数1呼び出し命令を生成する。ヘルパー関数1呼び出し命令は、ヘルパー関数1を呼び出し、ヘルパー関数1に従う処理によって出力される性能値を、対象ブロックbの性能値に加算する命令である。実施例4にかかるヘルパー関数1に従う処理は、アクセス命令の実行時のターゲットCPU101の動作モードとTLB2401の状態とに基づきアクセス命令の性能値を補正して出力する処理である。
また、アクセス命令以外の外部依存命令についても、コード生成部314は、外部依存命令の実行結果が予測ケースと一致するか否かに基づいて、予測ケースの場合の外部依存命令の性能値を補正する処理を指示するヘルパー関数を生成する。そして、コード生成部314は、機能コードに、生成した各性能計算命令およびヘルパー関数1呼び出し命令を追加した第1計算用コードを生成する。生成された第1計算用コードは、対象ブロックbに関連付けられて、RAM203やディスク205などの記憶装置に記憶される。
つぎに、コード実行部302は、第1計算用コードを実行することにより、対象ブロックbの性能値を計算する性能シミュレーションを行う。コード実行部302は、実施例1と同様に、実行部901と、第1判断部902と、第2判断部903と、出力部904と、補正部905と、を有する。
図27は、実施例4にかかるコード実行部による実行例を示す説明図である。例えば、コード実行部302は、第1計算用コードcc2701に含まれる命令を順に実行する。そして、実行部901は、ld命令のTLB2401についてのヘルパー関数1呼び出し命令を実行すると、ヘルパー関数1を呼び出し、ヘルパー関数1が指示する処理を実行する。これにより、第1判断部902から補正部905までの処理が実行される。
図27の例では、第1判断部902は、ターゲットCPU101がターゲットプログラムpgrを実行する動作のシミュレーションsimのうちの対象ブロックbの実行時の動作において、TLB2401が有効か否かを判断する。例えば、ターゲットCPU101がARMプロセッサの場合、第1判断部902は、動作のシミュレーションsimのうちの対象ブロックbの実行時の動作において、システム制御レジスタSCTRLのMビットの値を検出する。そして、第1判断部902は、システム制御レジスタSCTRLのMビットの値が0であるか1であるかを判断する。第1判断部902は、システム制御レジスタSCTRLのMビットの値が0である場合、TLB2401が使用可能な状態でないと判断し、システム制御レジスタSCTRLのMビットの値が1である場合、TLB2401が使用可能な状態であると判断する。
TLB2401が使用可能な状態であると判断された場合、第2判断部903は、動作のシミュレーションsimにおいて対象ブロックb内のアクセス命令を実行時のターゲットCPU101の動作モードが、特権モードか否かを判断する。
具体的には、ターゲットCPU101がARMプロセッサの場合、第2判断部903は、CPSRレジスタのMフィールドの値を検出する。そして、第2判断部903は、CPSRレジスタのMフィールドの値が“1000b”の場合、ターゲットCPU101の動作モードが、ユーザモードであると判断する。そして、第2判断部903は、CPSRレジスタのMフィールドの値が“1000b”以外の場合、ターゲットCPU101の動作モードが特権モードであると判断する。
出力部904は、動作モードが特権モードであると判断された場合、呼び出し元であるヘルパー関数1呼び出し命令が記憶された記憶領域のアドレスを呼び出し命令リストL_helperに出力する。
補正部905は、動作モードが特権モードであると判断された場合、予測ケースが“ヒット”であれば、アクセス命令の性能値を補正せずに出力する。動作モードが特権モードであると判断された場合、補正部905は、予測ケースが“ミスヒット”であれば、タイミング情報320に基づいて、TLB2401の動作が“ヒット”の場合におけるアクセス命令の性能値となるように補正して出力する。
補正部905は、動作モードがユーザモードであると判断された場合、予測ケースが“ミスヒット”であれば、動作のシミュレーションsimにおけるTLB2401の動作結果が予測ケースと一致するか否かを判断する。補正部905は、予測ケースと一致する場合、アクセス命令の性能値を補正せずに出力する。補正部905は、予測ケースと一致しない場合、アクセス命令の性能値を補正して出力する。上述例では、予測ケースが“キャッシュヒット”であるため、補正部905は、動作のシミュレーションsimにおけるTLB2401の動作が“ミスヒット”であるか否かを判断する。そして、補正部905は、“ミスヒット”であれば、アクセス命令の性能値にタイミング情報320内のペナルティの値を加算することにより、性能値を補正して出力する。補正部905による補正処理の詳細例については、実施例2に示す。
また、補正部905は、TLB2401が無効であると判断された場合、タイミング情報320に基づいて、アクセス命令の性能値をTLB2401が無効である場合のペナルティの値を加算することにより、性能値を補正して出力する。
動作モードが特権モードであると判断された場合、コード最適化部2201は、第2計算用コードを生成する。第2計算用コードは、TLB2401の動作が“ヒット”である場合における対象ブロックb内の各命令の性能値によって、ホストCPU201が対象ブロックbを実行した場合の対象ブロックbの性能値を動作モードによらずに計算するコードである。上述したように、システム領域へのアクセスは、TLB2401の動作が“ヒット”となるため、TLB2401の動作が“ヒット”であるか否かに基づいてアクセス命令の性能値を補正する処理を行わなくてよい。
具体的には、コード最適化部2201は、第1計算用コードcc2701のうちの、呼び出し命令リストL_helper内のアドレスが示すヘルパー関数1呼び出し命令を、“ヒット”の場合におけるld命令の性能値を加算させる性能計算命令に置換する。これにより、コード最適化部2201は、第2計算用コードを生成する。生成された第2計算用コードは、対象ブロックbに関連付けられて、RAM203やディスク205などの記憶装置に記憶される。
また、第2計算用コードが生成されたブロックbが対象ブロックbになった場合、判断部312は、第2計算コードが対象ブロックbに関連付けられているため、コンパイル済みであると判断する。そして、コード実行部302は、第2計算用コードを実行することにより、対象ブロックbの性能値を計算する性能のシミュレーションを実行する。上述したように、コード実行部302が有する第1判断部902から補正部905までの処理は、ヘルパー関数1にコーディングされる。そのため、ヘルパー関数1呼び出し命令がコーディングされていない第2計算用コードの実行時には、第1判断部902から補正部905までの処理は、実行されない。
これにより、アクセス命令を含む対象ブロックbがあらたに計算対象となった場合の性能値の計算を高速化することができる。
動作モードが特権モードでないと判断された場合、コード最適化部2201は、第2計算用コードを生成する。第2計算用コードは、TLB2401の動作が予測ケースの場合における対象ブロックb内の各命令の性能値によって、ホストCPU201が対象ブロックbを実行した場合の対象ブロックbの性能値を動作モードによらずに計算するコードである。
(実施例4にかかる計算装置100による計算処理手順例)
実施例4では、実施例1および実施例2にかかる計算装置100による計算処理手順例と同一の計算処理手順例については説明せずに、異なる計算処理手順について詳細に説明する。
図28は、実施例4にかかる計算装置によるTLBについてのヘルパー関数1に従う計算処理手順例を示すフローチャートである。TLB2401についてのヘルパー関数1は、例えば、st命令、ld命令などのアクセス命令についての性能シミュレーション用のコードであるヘルパー関数1呼び出し命令がホストCPU201に実行されることによって呼び出される。
計算装置100は、動作のシミュレーションsimにおいてターゲットCPU101のTLB2401が使用可能な状態か否かを判断する(ステップS2801)。上述したように、ターゲットCPU101がARMプロセッサの場合、計算装置100は、動作のシミュレーションsimにおいてシステム制御レジスタSCTRLのMビットの値が0であるか1であるかを判断する。計算装置100は、システム制御レジスタSCTRLのMビットの値が0である場合、TLB2401が使用可能な状態でないと判断し、システム制御レジスタSCTRLのMビットの値が1である場合、TLB2401が使用可能な状態であると判断する。
TLB2401が使用可能な状態である場合(ステップS2801:Yes)、計算装置100は、動作のシミュレーションsimにおいてターゲットCPU101の動作モードが特権モードか否かを判断する(ステップS2802)。例えば、ターゲットCPU101がARMプロセッサの場合、計算装置100は、CPSRのMビットの値に基づいて、特権モードか否かを判断する。計算装置100は、CPSRのMビットの値が1000bである場合、ユーザモードであると判断する。計算装置100は、CPSRのMフィールドの値が1000b以外である場合、特権モードであると判断する。
特権モードである場合(ステップS2802:Yes)、計算装置100は、現ヘルパー関数呼び出し命令のアドレスを呼び出し命令リストL_helperへ出力する(ステップS2803)。計算装置100は、予測ケースがヒットか否かを判断する(ステップS2804)。予測ケースがヒットである場合(ステップS2804:Yes)、計算装置100は、ステップS2806へ移行する。予測ケースがヒットでない場合(ステップS2804:No)、計算装置100は、ステップS2809へ移行する。
特権モードでは、ld命令やst命令においてシステム領域へのアクセスが行われる。上述したように、システム領域へのアクセスについては、TLB2401検査の結果がヒットとなる。そのため、TLB2401ヒットの場合の性能値が出力される。
また、ステップS2802において、特権モードでない場合(ステップS2802:No)、計算装置100は、動作のシミュレーションsimにおけるTLB2401検索の結果が予測ケースと一致しているか否かを判断する(ステップS2805)。一致している場合(ステップS2805:Yes)、計算装置100は、予測シミュレーションによって得られた性能値を出力し(ステップS2806)、一連の処理を終了する。一致していない場合(ステップS2805:No)、計算装置100は、予測シミュレーションによって得られた性能値を補正する(ステップS2809)。ここでは、タイミング情報320に含まれるTLB使用可能のペナルティの値によって補正される。そして、計算装置100は、補正された性能値を出力し(ステップS2810)、一連の処理を終了する。
また、ステップS2801において、TLB2401が使用可能な状態でない場合(ステップS2801:No)、計算装置100は、予測シミュレーションによって得られた性能値を補正する(ステップS2807)。ここでは、タイミング情報320に含まれるTLB使用不可のペナルティの値によって補正される。計算装置100は、補正された性能値を出力し(ステップS2808)、一連の処理を終了する。
図29は、実施例4にかかる計算装置によるTLBについてのヘルパー関数2に従う計算処理手順例を示すフローチャートである。TLB2401についてのヘルパー関数2は、ヘルパー関数1における特権モードであるか否かの判断が省略された関数である。計算装置100は、動作のシミュレーションsimにおけるTLB2401検索の結果が予測ケースと一致しているか否かを判断する(ステップS2901)。一致している場合(ステップS2901:Yes)、計算装置100は、予測シミュレーションによって得られた性能値を出力し(ステップS2902)、一連の処理を終了する。一致していない場合(ステップS2901:No)、計算装置100は、予測シミュレーションによって得られた性能値を補正する(ステップS2903)。そして、計算装置100は、補正された性能値を出力し(ステップS2904)、一連の処理を終了する。
(実施例5)
実施例5では、実施例1または4においてヘルパー関数1呼び出し命令を性能計算用命令に置き換える際に、連続する性能計算用命令を集約して1つの性能計算命令とする。これにより、対象ブロックbがあらたに計算対象となった場合の計算量の低減を図ることができる。また、実施例5では、実施例1〜実施例4のいずれかで説明した機能や構成と同一の機能や構成についての詳細な説明を省略する。
図30は、実施例5にかかる計算装置によるコード最適化例を示す説明図である。実施例5にかかるコード最適化部2201は、計算用コードcc301内のヘルパー関数1呼び出し命令と、連続しうる性能計算命令と、を併合した性能計算命令に置き換えた計算用コードcc302−2を生成する。ヘルパー関数1呼び出し命令を単に性能計算命令に置き換えた場合の計算用コードcc302−1と比較して、計算量の減少を図ることができる。
図31は、コード最適化部の詳細例を示すブロック図である。コード最適化部2201は、取得部3101と、第1検出部3102と、第2検出部3103と、算出部3104と、置換部3105と、を有する。
まず、実施例1で説明したデータキャッシュメモリ1001を使用しないと判断したヘルパー関数1呼び出し命令を性能計算命令に置換する例について説明する。取得部3101は、対象ブロックbに関連付けて記憶された計算用コードcc301を取得する。
第1検出部3102は、取得された計算用コードcc301のうち、データキャッシュメモリ1001を使用可能なことを示す属性でないと判断されたアクセス命令についてのヘルパー関数1呼び出し命令を検出する。第2検出部3103は、検出されたヘルパー関数1呼び出し命令から、データキャッシュメモリ1001を使用可能なことを示す属性であると判断したアクセス命令についてのヘルパー関数1呼び出し命令までの間にある性能計算命令を検出する。
例えば、算出部3104は、検出された性能計算命令が対象ブロックbの性能値に加算させる性能値と、データキャッシュメモリ1001を使用しない場合におけるアクセス命令の性能値と、の合計値を算出する。
置換部3105は、計算用コードcc301のうち、検出された性能計算命令と、検出されたヘルパー関数1呼び出し命令とを、算出された合計値を対象ブロックbの性能値に加算させる性能計算命令に置換する。
つぎに、実施例4で説明したターゲットCPU101の動作モードが特権モードであると判断されたヘルパー関数1呼び出し命令を性能計算命令に置換する例について説明する。取得部3101は、計算用コードcc301を取得する。
第1検出部3102は、取得された計算用コードcc301のうち、特権モードであると判断されたアクセス命令についてのヘルパー関数1呼び出し命令を検出する。第2検出部3103は、検出されたヘルパー関数1呼び出し命令から、特権モードでないと判断されたアクセス命令についてのヘルパー関数1呼び出し命令までの間にある性能計算命令を検出する。
例えば、算出部3104は、検出された性能計算命令が対象ブロックbの性能値に加算させる性能値と、TLBに論理アドレスと物理アドレスとの変換情報が格納されている場合におけるアクセス命令の性能値と、の合計値を算出する。
置換部3105は、計算用コードcc301のうち、検出された性能計算命令と、検出されたヘルパー関数1呼び出し命令とを、算出された合計値を対象ブロックbの性能値に加算させる性能計算命令に置換する。
つぎに、図32〜図36を用いてコード最適化部2201による詳細な動作例1を示し、図37〜図42を用いてコード最適化部2201による詳細な動作例2を示す。
図32〜図36は、コード最適化部による詳細な動作例1を示す説明図である。まず、取得部3101は、計算用コードcc321を取得する。対象ブロックb内の各命令についての性能計算命令の数はホストCPU201の構成に基づいて定まる。計算用コードcc321の例では、各命令の性能値を対象ブロックbに加算するための性能計算命令は以下のように3つの命令によって実現されることとする。
性能計算命令1:性能値をレジスタにロード
性能計算命令2:レジスタに性能値を加算
性能計算命令3:レジスタの値を性能値にストア
第1検出部3102は、呼び出し命令リストL_helperに含まれるアドレスを1つ選択し、選択したアドレスをm_helperとする。そして、第1検出部3102は、m_helperが示すヘルパー関数1呼び出し命令を検出する。図32の例では、理解の容易化のために、先頭からの命令の順番を命令のアドレスとする。呼び出し命令リストL_helperには6があるため、第1検出部3102は、命令i2のヘルパー関数1呼び出し命令を検出する。
例えば、第2検出部3103は、検出されたヘルパー関数1呼び出し命令の直前にコーディングされた命令が性能計算命令であれば、当該性能計算命令を示すアドレスをr_startとする。また、第2検出部3103は、検出したヘルパー関数1呼び出し命令の直前にコーディングされた命令が性能計算命令でなければ、検出したヘルパー関数1呼び出し命令を示すアドレスをr_startとする。図33の例では、命令i1の性能計算命令1を示すアドレスがr_startである。
つぎに、第2検出部3103は、検出された命令i2のヘルパー関数1呼び出し命令の後続の命令を検索する。そして、第2検出部3103は、命令i2のヘルパー関数1呼び出し命令から呼び出し命令リストL_helperにアドレスが登録されていないヘルパー関数1呼び出し命令までの間を検索する。第2検出部3103は、命令i2のヘルパー関数1呼び出し命令から、登録されていないヘルパー関数1呼び出し命令までの間にある命令のうち、登録されていないヘルパー関数1呼び出し命令の直前の命令を示すアドレスをr_endとする。命令i2のヘルパー関数1呼び出し命令の後続に呼び出し命令リストL_helperにアドレスが登録されていないヘルパー関数1呼び出し命令がない場合、第2検出部3103は、対象ブロックb内の最後の命令を示すアドレスをr_endとする。図34の例では、r_endは命令i2のヘルパー1関数呼び出し命令を示すアドレスである。
算出部3104は、r_startが示す命令からr_endが示す命令までの命令群のうちの性能計算命令が対象ブロックbの性能値に加算させる性能値を取得する。算出部3104は、当該命令群のうちのヘルパー関数1呼び出し命令が対象ブロックbの性能値に加算させる性能値を取得する。当該命令群のうちのヘルパー関数1呼び出し命令が対象ブロックbの性能値に加算させる性能値は、例えば、データキャッシュメモリ1001を使用しない場合におけるアクセス命令の性能値である。また、当該命令群のうちのヘルパー関数1呼び出し命令が対象ブロックbの性能値に加算させる性能値は、例えば、TLBに変換情報がある場合におけるアクセス命令の性能値である。図13に示したヘルパー関数2cache_ld(address,rep_delay,pre_delay)の例では、3つの引数がヘルパー関数cache_ldに渡される。そのため、ホストCPU201がx86アーキテクチャの場合、具体的にヘルパー関数1呼び出し命令は、
push pre_delay:3番目の引数をスタックに入れる
push rep_delay:2番目の引数をスタックに入れる
push addr :1番目の引数をスタックに入れる
call cache_ld:ヘルパー関数1cache_ldを呼び出す
の4つの命令を有する。算出部3104は、当該4つの命令のうち、pre_delayなどを参照して、データキャッシュメモリ1001を使用しない場合の性能値を計算することにより、ヘルパー関数1呼び出し命令の性能値を取得する。
そして、算出部3104は、取得した性能値の合計値を算出する。図35の例では、命令i1の性能計算命令2の性能値が1であり、命令i2のヘルパー関数1呼び出し命令の性能値が2であるため、合計値sumは3である。
置換部3105は、r_startが示す命令からr_endが示す命令までの命令群に含まれるホスト命令と、合計値sumを対象ブロックbの性能値に加算させる性能計算命令と、の順に並べた命令群を作成する。図36に示すように、置換部3105は、r_startが示す命令からr_endが示す命令までの命令群を、作成した命令群に置換することにより、計算用コードcc362を生成する。置換部3105は、置換終了後に呼び出し命令リストL_helperから、m_helperを削除する。また、置換部3105は、呼び出し命令リストL_helperに含まれる各アドレスを、置換前の計算用コードcc321と、置換後の計算用コードcc362と、に基づいて補正する。つぎに、コード最適化部2201は、呼び出し命令リストL_helperが空になるまで、取得部3101から置換部3105までの処理を繰り返す。
図37〜図42は、コード最適化部による詳細な動作例2を示す説明図である。まず、取得部3101は、計算用コードcc371を取得する。第1検出部3102は、呼び出し命令リストL_helperに含まれるアドレスを1つ選択し、選択したアドレスをm_helperとする。そして、第1検出部3102は、m_helperが示すヘルパー関数1呼び出し命令を検出する。図37の例では、理解の容易化のために、先頭からの命令の順番を命令のアドレスとする。呼び出し命令リストL_helperには2があるため、第1検出部3102は、命令i1のヘルパー関数1呼び出し命令を検出する。
例えば、第2検出部3103は、検出されたヘルパー関数1呼び出し命令の直前にコーディングされた命令が性能計算命令であれば、当該性能計算命令を示すアドレスをr_startとする。また、第2検出部3103は、検出されたヘルパー関数1呼び出し命令の直前にコーディングされた命令が性能計算命令でなければ、検出されたヘルパー関数1呼び出し命令を示すアドレスをr_startとする。図39の例では、命令i1のヘルパー関数1呼び出し命令を示すアドレスがr_startである。
つぎに、第2検出部3103は、検出された命令i2のヘルパー関数1呼び出し命令の後続の命令を検索する。第2検出部3103は、命令i2のヘルパー関数1呼び出し命令から呼び出し命令リストL_helperにアドレスが登録されていないヘルパー関数1呼び出し命令までの間を検索する。第2検出部3103は、命令i2のヘルパー関数1呼び出し命令から、登録されていないヘルパー関数1呼び出し命令までの間にある命令のうち、登録されていないヘルパー関数1呼び出し命令の直前の命令を示すアドレスをr_endとする。命令i2のヘルパー関数1呼び出し命令の後続に呼び出し命令リストL_helperにアドレスが登録されていないヘルパー関数1呼び出し命令がない場合、第2検出部3103は、対象ブロックb内の最後の命令を示すアドレスをr_endとする。図40の例では、r_endは命令i2の性能計算命令を示すアドレスである。
算出部3104は、r_startが示す命令からr_endが示す命令までの命令群のうちの性能計算命令が対象ブロックbの性能値に加算させる性能値を取得する。算出部3104は、当該命令群のうちのヘルパー関数1呼び出し命令が対象ブロックbの性能値に加算させる性能値を取得する。そして、算出部3104は、取得した性能値の合計値を算出する。図41の例では、命令i1のヘルパー関数1呼び出し命令の性能値が2であり、命令i2の性能計算命令2の性能値が1であるため、合計値sumは3である。
動作例1と同様に、置換部3105は、r_startが示す命令からr_endが示す命令までの命令群に含まれるホスト命令と、合計値sumを対象ブロックbの性能値に加算させる性能計算命令と、の順に並べた命令群を作成する。図42に示すように、置換部3105は、r_startが示す命令からr_endが示す命令までの命令群を、作成した命令群に置換することにより、計算用コードcc422を生成する。置換部3105は、置換終了後に呼び出し命令リストL_helperから、r_startが示す命令からr_endが示す命令までの命令群に含まれるヘルパー関数1呼び出し命令を示すアドレスを削除する。また、置換部3105は、呼び出し命令リストL_helperに含まれる各アドレスを、置換前の計算用コードcc371と、置換後の計算用コードcc422と、に基づいて補正する。つぎに、コード最適化部2201は、呼び出し命令リストL_helperが空になるまで、取得部3101から置換部3105までの処理を繰り返す。
このように、計算用コードに含まれる命令数を削減することにより、計算量を減らすことができる。
(実施例5にかかる計算装置100による計算処理手順例)
実施例5では、実施例1および実施例2にかかる計算装置100による計算処理手順例と同一の計算処理手順例については説明せずに、異なる計算処理手順について詳細に説明する。
図43および図44は、図17で示したコード最適化処理の詳細な説明を示すフローチャートである。まず、計算装置100は、対象ブロックbについての計算用コードを取得する(ステップS4301)。つぎに、計算装置100は、呼び出し命令リストL_helperが空か否かを判断する(ステップS4302)。空でない場合(ステップS4302:No)、計算装置100は、呼び出し命令リストL_helper内のアドレスから先頭のアドレスをm_helperに設定する(ステップS4303)。
つぎに、計算装置100は、m_helperが示すヘルパー関数1呼び出し命令の直前の命令が性能計算命令か否かを判断する(ステップS4401)。性能計算命令でない場合(ステップS4401:No)、計算装置100は、r_startにm_helperを設定し(ステップS4402)、ステップS4405へ移行する。
一方、性能計算命令である場合(ステップS4401:Yes)、計算装置100は、直前の性能計算命令のアドレスをr_startに設定する(ステップS4403)。計算装置100は、呼び出し命令リストL_helperにアドレスが含まれていないヘルパー関数1呼び出し命令を、m_helperが示すヘルパー関数1呼び出し命令の後続から検出する(ステップS4404)。
つぎに、計算装置100は、検出できたか否かを判断する(ステップS4405)。検出できなかった場合(ステップS4405:No)、計算装置100は、m_helperをr_endに設定し(ステップS4406)、ステップS4408へ移行する。検出できた場合(ステップS4405:Yes)、計算装置100は、検出したヘルパー関数1呼び出し命令の直前の命令を示すアドレスをr_endに設定する(ステップS4407)。
つぎに、計算装置100は、r_startが示す命令からr_endが示す命令までに含まれる性能計算命令の性能値とヘルパー関数1呼び出し命令の性能値を取得する(ステップS4408)。計算装置100は、取得した性能値の合計値を算出する(ステップS4409)。
計算装置100は、r_startが示す命令からr_endが示す命令までに含まれるホスト命令と、算出した合計値を加算させる性能計算命令と、を含む命令群を作成する(ステップS4410)。計算装置100は、計算用コードのうち、r_startが示す命令からr_endが示す命令までに含まれる命令群を作成した命令群に置換する(ステップS4411)。計算装置100は、r_startが示す命令からr_endが示す命令までに含まれるヘルパー関数1呼び出し命令を示すアドレスを呼び出し命令リストL_helperから削除し(ステップS4412)、ステップS4302へ戻る。
一方、ステップS4302において、空である場合(ステップS4302:Yes)、計算装置100は、計算用コードのうち、呼び出し命令リストL_helper内のアドレスが示すヘルパー関数1呼び出し命令以外のヘルパー関数1呼び出し命令を検出する(ステップS4304)。計算装置100は、検出したヘルパー関数1呼び出し命令をヘルパー関数2呼び出し命令に置換し(ステップS4305)、一連の処理を終了する。
以上説明したように、実施例1にかかる計算装置は、動作のシミュレーションsimにおいてアクセス命令のアクセス先がキャッシュメモリの使用不可である場合、キャッシュメモリの不使用を前提とした該ブロックの性能値を計算する計算用コードを生成する。これにより、該ブロックが再度対象となった際の計算量の低減を図ることができる。
また、実施例1にかかる計算装置は、計算用コードのうち、キャッシュメモリの使用不可であると判断したアクセス命令のヘルパー関数1呼び出し命令を、キャッシュメモリの使用不可の場合におけるアクセス命令の性能計算用命令に置き換える。これにより、アクセス命令の実行時にキャッシュメモリが使用不可の場合におけるブロックの性能値を計算する計算用コードを容易に生成することができる。
また、実施例2にかかる計算装置では、対象ブロック内のアクセス命令がキャッシュメモリを使用可能である場合、キャッシュメモリの動作によって性能値を記憶領域の属性によらずに補正してブロックの性能値を計算する計算用コードを生成する。これにより、対象ブロックがあらたに計算対象となった場合に、記憶領域の属性を判断しないため、性能値の計算量の低減を図ることができる。
また、実施例1にかかる計算装置は、計算用コードのうち、キャッシュメモリの使用不可であると判断したアクセス命令のヘルパー関数1呼び出し命令を、ヘルパー関数2呼び出し命令に置き換える。これにより、アクセス命令の実行時にキャッシュメモリが使用可能な場合におけるブロックの性能値を計算する計算用コードを容易に生成することができる。
また、実施例3にかかる計算装置は、キャッシュメモリが使用可能でない状態から使用可能な状態に変化するまでの間、キャッシュメモリを使用しない場合のアクセス命令の性能値によって対象ブロックの性能値を計算する計算用コードを実行する。これにより、キャッシュメモリを使用可能でない状態の期間における対象ブロックの性能値の計算量の減少を図ることができ、ターゲットプログラムの性能値の計算を高速化させることができる。
また、実施例3にかかる計算装置は、キャッシュメモリが使用可能な状態に変化したら、キャッシュメモリを使用する場合におけるブロック内の各命令の性能値によって、ブロックの性能値を計算する計算用コードを生成する。これにより、ターゲットプログラムの性能値の計算結果に誤差が生じるのを防ぐことができる。
また、実施例3にかかる計算装置は、ターゲットCPUの初期化中においてTLBは使用可能でない状態になる。そのため、ターゲットCPUの初期化が完了すれば、TLBは使用可能な状態になる。そこで、実施例3では、TLBが使用可能でない状態から使用可能な状態に変化するまでの間、TLBを使用しない場合のアクセス命令の性能値によって対象ブロックの性能値を計算する計算用コードを実行する。これにより、TLBを使用可能でない状態の期間における対象ブロックの性能値の計算量の減少を図ることができ、ターゲットプログラムの性能値の計算を高速化させることができる。
また、実施例3にかかる計算装置は、TLBが使用可能な状態に変化したら、TLBを使用する場合におけるブロック内の各命令の性能値によって、ブロックの性能値を計算する計算用コードを生成する。これにより、ターゲットプログラムの性能値の計算結果に誤差が生じるのを防ぐことができる。
また、実施例4にかかる計算装置は、動作のシミュレーションにおけるアクセス命令の実行時に動作モードが特権モードである場合、TLBがヒットの場合の対象ブロックの各命令の性能値により対象ブロックの性能値を計算する計算用コードを生成する。これにより、対象ブロックがあらたに計算対象となった場合に、TLBがヒットであるか否かを判断する処理が行われないため、対象ブロックがあらたに計算対象となった場合の計算量の低減を図ることができる。
また、実施例5にかかる計算装置は、ヘルパー関数1呼び出し命令を性能計算用命令に置き換える際に、連続する性能計算用命令を集約して1つの性能計算命令とする。これにより、対象ブロックがあらたに計算対象となった場合の計算量の低減を図ることができる。
なお、本実施の形態で説明した計算方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本計算プログラムは、ディスク、USBメモリなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本計算プログラムは、インターネット等のネットワークNETを介して配布されてもよい。
上述した実施例1〜実施例5に関し、さらに以下の付記を開示する。
(付記1)プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算する計算装置であって、
前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時の前記記憶領域の属性が、前記アクセス命令の指示に対して前記プロセッサがキャッシュメモリを使用可能なことを示す属性であるか否かを判断する判断部と、
前記キャッシュメモリを使用可能なことを示す属性でないと前記判断部が判断した場合、前記キャッシュメモリを使用しない場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記属性によらずに計算する計算用コードを生成する生成部と、
前記特定コードがあらたに性能値の計算対象となった場合、生成した前記計算用コードを実行する実行部と、
を有することを特徴とする計算装置。
(付記2)前記生成部は、前記キャッシュメモリを使用可能なことを示す属性であると判断した場合、前記キャッシュメモリを使用する場合における前記特定コード内の各命令の性能値によって、前記特定コードの性能値を前記属性によらずに計算する計算用コードを生成することを特徴とする付記1に記載の計算装置。
(付記3)前記計算用コード(以下、「第1計算用コード」と称する。)を生成する前記生成部は、
前記特定コード内の前記アクセス命令と異なる命令の各々について、前記命令の性能値を前記特定コードの性能値に加算させる第1計算命令と、前記アクセス命令について、前記属性に基づく前記アクセス命令の性能値を前記特定コードの性能値に加算させる第2計算命令と、を有する第2計算用コードを取得し、
取得した前記第2計算用コードのうち、前記キャッシュメモリを使用可能なことを示す属性でないと判断した前記アクセス命令についての第2計算命令を、前記キャッシュメモリを使用しない場合における前記アクセス命令の性能を前記特定コードの性能値に加算させる第3計算命令に置換する、
ことにより、前記第1計算用コードを生成することを特徴とする付記1に記載の計算装置。
(付記4)前記計算用コード(以下、「第1計算用コード」と称する。)を生成する前記生成部は、
前記特定コード内の前記アクセス命令と異なる命令の各々について、前記命令の性能値を前記特定コードの性能値に加算させる第1計算命令と、前記アクセス命令について、前記属性に基づく前記アクセス命令の性能値を前記特定コードの性能値に加算させる第2計算命令と、を有する第2計算用コードを取得し、
取得した前記第2計算用コードの中から、前記キャッシュメモリを使用可能なことを示す属性であると判断した前記アクセス命令についての第2計算命令を、前記キャッシュメモリを使用する場合における前記アクセス命令の性能値を前記特定コードの性能値に加算させる第3計算命令に置換する、
ことにより、前記第1計算用コードを生成することを特徴とする付記2に記載の計算装置。
(付記5)前記計算用コード(以下、「第1計算用コード」と称する。)を生成する前記生成部は、
前記特定コード内の前記アクセス命令と異なる命令の各々について、前記命令の性能値を前記特定コードの性能値に加算させる第1計算命令と、前記アクセス命令の各々について、前記属性に基づく前記アクセス命令の性能値を前記特定コードの性能値に加算させる第2計算命令と、を有する第2計算用コードを取得し、
取得した前記第2計算用コードの中から、前記キャッシュメモリを使用可能なことを示す属性でないと判断した前記アクセス命令についての第2計算命令を検出し、
検出した前記第2計算命令から、前記キャッシュメモリを使用可能なことを示す属性であると判断した前記アクセス命令についての第2計算命令までの間にある前記第1計算命令を前記第2計算用コードの中から検出し、
検出した前記第1計算命令が前記特定コードの性能値に加算させる前記命令の性能値と、前記キャッシュメモリを使用可能なことを示す属性でないと判断した前記アクセス命令の実行時に前記キャッシュメモリを使用しない場合における前記アクセス命令の性能値と、の合計値を算出し、
前記第2計算用コードのうち、検出した前記第1計算命令と検出した前記第2計算命令とを、前記合計値を前記特定コードの性能値に加算させる第3計算命令に置換する、
ことにより、前記第1計算用コードを生成することを特徴とする付記1または2に記載の計算装置。
(付記6)プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算する計算装置であって、
前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時の前記記憶領域の属性が、前記アクセス命令の指示に対して前記プロセッサがキャッシュメモリを使用可能なことを示す属性であるか否かを判断する判断部と、
前記キャッシュメモリを使用可能なことを示す属性であると前記判断部が判断した場合、前記キャッシュメモリを使用する場合における前記特定コード内の各命令の性能値によって、前記特定コードの性能値を前記属性によらずに計算する計算用コードを生成する生成部と、
前記特定コードがあらたに性能値の計算対象となった場合、生成した前記計算用コードを実行する実行部と、
を有することを特徴とする計算装置。
(付記7)プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算する計算装置であって、
前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時に前記プロセッサがアクセス可能なキャッシュメモリが使用可能な状態であるか否かを、前記シミュレーションにおける前記アクセス命令の実行前に判断する第1判断部と、
使用可能な状態でないと前記第1判断部が判断した場合、前記キャッシュメモリを使用しない場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記キャッシュメモリの状態によらずに計算する計算用コードを生成する生成部と、
前記生成部が生成した前記計算用コードを実行する第1実行部と、
前記特定コードがあらたに性能値の計算対象となった場合に、前記シミュレーションにおける前記アクセス命令の実行時に前記プロセッサがアクセス可能なキャッシュメモリが使用可能な状態であるか否かを、前記シミュレーションにおける前記アクセス命令の実行前に判断する第2判断部と、
使用可能な状態でないと前記第2判断部が判断した場合、前記計算用コードを実行する第2実行部と、
を有することを特徴とする計算装置。
(付記8)前記生成部は、使用可能な状態であると判断した場合、前記キャッシュメモリを使用する場合における前記特定コード内の各命令の性能値によって、前記特定コードの性能値を計算する計算用コードを生成することを特徴とする付記7に記載の計算装置。
(付記9)プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算する計算装置であって、
前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時に前記プロセッサがアクセス可能なTLB(Translation Lookaside Buffer)が使用可能な状態か否かを判断する第1判断部と、
使用可能であると前記第1判断部が判断した場合、前記TLBを使用しない場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記TLBの状態によらずに計算する計算用コードを生成する生成部と、
前記生成部が生成した前記計算用コードを実行する第1実行部と、
前記特定コードがあらたに性能値の計算対象となった場合に、前記シミュレーションにおける前記アクセス命令の実行時に前記TLBが使用可能な状態であるか否かを判断する第2判断部と、
使用可能な状態でないと前記第2判断部が判断した場合、前記計算用コードを実行する第2実行部と、
を有することを特徴とする計算装置。
(付記10)前記生成部は、使用可能な状態であると判断した場合、前記TLBを使用する場合における前記特定コード内の各命令の性能値によって、前記特定コードの性能値を計算する計算用コードを生成することを特徴とする付記9に記載の計算装置。
(付記11)第1モードと、前記第1モードよりも動作の制限が少ない第2モードと、の動作モードを有するプロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算する計算装置であって、
前記特定コードが性能値の計算対象となった場合、前記プログラムを前記プロセッサが実行する動作のシミュレーションにおける前記アクセス命令の実行時の前記動作モードが前記第2モードであるか否かを判断する判断部と、
前記第2モードであると前記判断部が判断した場合、前記プロセッサがアクセス可能なTLB(Translation Lookaside Buffer)に前記記憶領域を示す論理アドレスと前記記憶領域を示す物理アドレスとの変換情報が格納されている場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記動作モードによらずに計算する計算用コードを生成する生成部と、
前記特定コードがあらたに性能値の計算対象となった場合、前記生成部が生成した前記計算用コードを実行する実行部と、
を有することを特徴とする計算装置。
(付記12)前記生成部は、前記判断部が前記第2モードでないと判断した場合、前記TLBを使用する場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記動作モードによらずに計算する計算用コードを生成することを特徴とする付記11に記載の計算装置。
(付記13)前記計算用コード(以下、「第1計算用コード」と称する。)を生成する前記生成部は、
前記特定コード内の前記アクセス命令と異なる命令の各々について、前記命令の性能値を前記特定コードの性能値に加算させる第1計算命令と、前記アクセス命令について、前記TLBに前記変換情報が格納されているか否かに基づく前記アクセス命令の性能値を前記特定コードの性能値に加算させる第2計算命令と、を有する第2計算用コードを取得し、
取得した前記第2計算用コードのうち、前記第2モードであると判断した前記アクセス命令についての第2計算命令を、前記TLBが変換情報に格納されている場合における前記アクセス命令の性能を前記特定コードの性能値に加算させる第3計算命令に置換する、
ことにより、前記第1計算用コードを生成することを特徴とする付記11に記載の計算装置。
(付記14)前記計算用コード(以下、「第1計算用コード」と称する。)を生成する前記生成部は、
前記特定コード内の前記アクセス命令と異なる命令の各々について、前記命令の性能値を前記特定コードの性能値に加算させる第1計算命令と、前記アクセス命令の各々について、前記TLBに前記変換情報が格納されているか否かに基づく前記アクセス命令の性能値を前記特定コードの性能値に加算させる第2計算命令と、を有する第2計算用コードを取得し、
取得した前記第2計算用コードの中から、前記第2モードであると判断した前記アクセス命令についての第2計算命令を検出し、
検出した前記第2計算命令から、前記第2モードでないと判断した前記アクセス命令についての第2計算命令までの間にある前記第1計算命令を前記第2計算用コードの中から検出し、
検出した前記第1計算命令が前記特定コードの性能値に加算させる前記命令の性能値と、前記第2モードであると判断した前記アクセス命令の実行時に前記TLBに変換情報が格納されている場合における前記アクセス命令の性能値と、の合計値を算出し、
前記第2計算用コードのうち、検出した前記第1計算命令と検出した前記第2計算命令とを、前記合計値を前記特定コードの性能値に加算させる第3計算命令に置換する、
ことにより、前記第1計算用コードを生成することを特徴とする付記11に記載の計算装置。
(付記15)プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータが、
前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時の前記記憶領域の属性が、前記アクセス命令の指示に対して前記プロセッサがキャッシュメモリを使用可能なことを示す属性であるか否かを判断し、
前記キャッシュメモリを使用可能なことを示す属性でないと判断した場合、前記キャッシュメモリを使用しない場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記属性によらずに計算する計算用コードを生成し、
前記特定コードがあらたに性能値の計算対象となった場合、生成した前記計算用コードを実行する、
処理を実行することを特徴とする計算方法。
(付記16)プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータが、
前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時の前記記憶領域の属性が、前記アクセス命令の指示に対して前記プロセッサがキャッシュメモリを使用可能なことを示す属性であるか否かを判断し、
前記キャッシュメモリを使用可能なことを示す属性であると判断した場合、前記キャッシュメモリを使用する場合における前記特定コード内の各命令の性能値によって、前記特定コードの性能値を前記属性によらずに計算する計算用コードを生成し、
前記特定コードがあらたに性能値の計算対象となった場合、生成した前記計算用コードを実行する、
処理を実行することを特徴とする計算方法。
(付記17)プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータが、
前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時に前記プロセッサがアクセス可能なキャッシュメモリが使用可能な状態であるか否かを、前記シミュレーションにおける前記アクセス命令の実行前に判断し、
使用可能な状態でないと判断した場合、前記キャッシュメモリを使用しない場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記キャッシュメモリの状態によらずに計算する計算用コードを生成し、
生成した前記計算用コードを実行し、
前記特定コードがあらたに性能値の計算対象となった場合に、前記シミュレーションにおける前記アクセス命令の実行時に前記プロセッサがアクセス可能なキャッシュメモリが使用可能な状態であるか否かを、前記シミュレーションにおける前記アクセス命令の実行前に判断し、
使用可能な状態でないと判断した場合、前記計算用コードを実行する、
処理を実行することを特徴とする計算方法。
(付記18)プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータが、
前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時に前記プロセッサがアクセス可能なTLB(Translation Lookaside Buffer)が使用可能な状態か否かを判断し、
使用可能であると判断した場合、前記TLBを使用しない場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記TLBの状態によらずに計算する計算用コードを生成し、
生成した前記計算用コードを実行し、
前記特定コードがあらたに性能値の計算対象となった場合に、前記シミュレーションにおける前記アクセス命令の実行時に前記TLBが使用可能な状態であるか否かを判断し、
使用可能な状態でないと判断した場合、前記計算用コードを実行する、
処理を実行することを特徴とする計算方法。
(付記19)第1モードと、前記第1モードよりも動作の制限が少ない第2モードと、の動作モードを有するプロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータが、
前記特定コードが性能値の計算対象となった場合、前記プログラムを前記プロセッサが実行する動作のシミュレーションにおける前記アクセス命令の実行時の前記動作モードが前記第2モードであるか否かを判断し、
前記第2モードであると判断した場合、前記プロセッサがアクセス可能なTLB(Translation Lookaside Buffer)に前記記憶領域を示す論理アドレスと前記記憶領域を示す物理アドレスとの変換情報が格納されている場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記動作モードによらずに計算する計算用コードを生成し、
前記特定コードがあらたに性能値の計算対象となった場合、生成した前記計算用コードを実行する、
処理を実行することを特徴とする計算方法。
(付記20)プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータに、
前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時の前記記憶領域の属性が、前記アクセス命令の指示に対して前記プロセッサがキャッシュメモリを使用可能なことを示す属性であるか否かを判断し、
前記キャッシュメモリを使用可能なことを示す属性でないと判断した場合、前記キャッシュメモリを使用しない場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記属性によらずに計算する計算用コードを生成し、
前記特定コードがあらたに性能値の計算対象となった場合、生成した前記計算用コードを実行する、
処理を実行させることを特徴とする計算プログラム。
(付記21)プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータに、
前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時の前記記憶領域の属性が、前記アクセス命令の指示に対して前記プロセッサがキャッシュメモリを使用可能なことを示す属性であるか否かを判断し、
前記キャッシュメモリを使用可能なことを示す属性であると判断した場合、前記キャッシュメモリを使用する場合における前記特定コード内の各命令の性能値によって、前記特定コードの性能値を前記属性によらずに計算する計算用コードを生成し、
前記特定コードがあらたに性能値の計算対象となった場合、生成した前記計算用コードを実行する、
処理を実行させることを特徴とする計算プログラム。
(付記22)プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータに、
前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時に前記プロセッサがアクセス可能なキャッシュメモリが使用可能な状態であるか否かを、前記シミュレーションにおける前記アクセス命令の実行前に判断し、
使用可能な状態でないと判断した場合、前記キャッシュメモリを使用しない場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記キャッシュメモリの状態によらずに計算する計算用コードを生成し、
生成した前記計算用コードを実行し、
前記特定コードがあらたに性能値の計算対象となった場合に、前記シミュレーションにおける前記アクセス命令の実行時に前記プロセッサがアクセス可能なキャッシュメモリが使用可能な状態であるか否かを、前記シミュレーションにおける前記アクセス命令の実行前に判断し、
使用可能な状態でないと判断した場合、前記計算用コードを実行する、
処理を実行させることを特徴とする計算プログラム。
(付記23)プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータに、
前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時に前記プロセッサがアクセス可能なTLB(Translation Lookaside Buffer)が使用可能な状態か否かを判断し、
使用可能であると判断した場合、前記TLBを使用しない場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記TLBの状態によらずに計算する計算用コードを生成し、
生成した前記計算用コードを実行し、
前記特定コードがあらたに性能値の計算対象となった場合に、前記シミュレーションにおける前記アクセス命令の実行時に前記TLBが使用可能な状態であるか否かを判断し、
使用可能な状態でないと判断した場合、前記計算用コードを実行する、
処理を実行させることを特徴とする計算プログラム。
(付記24)第1モードと、前記第1モードよりも動作の制限が少ない第2モードと、の動作モードを有するプロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータに、
前記特定コードが性能値の計算対象となった場合、前記プログラムを前記プロセッサが実行する動作のシミュレーションにおける前記アクセス命令の実行時の前記動作モードが前記第2モードであるか否かを判断し、
前記第2モードであると判断した場合、前記プロセッサがアクセス可能なTLB(Translation Lookaside Buffer)に前記記憶領域を示す論理アドレスと前記記憶領域を示す物理アドレスとの変換情報が格納されている場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記動作モードによらずに計算する計算用コードを生成し、
前記特定コードがあらたに性能値の計算対象となった場合、生成した前記計算用コードを実行する、
処理を実行させることを特徴とする計算プログラム。
(付記25)プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータに、
前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時の前記記憶領域の属性が、前記アクセス命令の指示に対して前記プロセッサがキャッシュメモリを使用可能なことを示す属性であるか否かを判断し、
前記キャッシュメモリを使用可能なことを示す属性でないと判断した場合、前記キャッシュメモリを使用しない場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記属性によらずに計算する計算用コードを生成し、
前記特定コードがあらたに性能値の計算対象となった場合、生成した前記計算用コードを実行する、
処理を実行させる計算プログラムを記録したことを特徴とする記録媒体。
(付記26)プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータに、
前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時の前記記憶領域の属性が、前記アクセス命令の指示に対して前記プロセッサがキャッシュメモリを使用可能なことを示す属性であるか否かを判断し、
前記キャッシュメモリを使用可能なことを示す属性であると判断した場合、前記キャッシュメモリを使用する場合における前記特定コード内の各命令の性能値によって、前記特定コードの性能値を前記属性によらずに計算する計算用コードを生成し、
前記特定コードがあらたに性能値の計算対象となった場合、生成した前記計算用コードを実行する、
処理を実行させる計算プログラムを記録したことを特徴とする記録媒体。
(付記27)プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータに、
前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時に前記プロセッサがアクセス可能なキャッシュメモリが使用可能な状態であるか否かを、前記シミュレーションにおける前記アクセス命令の実行前に判断し、
使用可能な状態でないと判断した場合、前記キャッシュメモリを使用しない場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記キャッシュメモリの状態によらずに計算する計算用コードを生成し、
生成した前記計算用コードを実行し、
前記特定コードがあらたに性能値の計算対象となった場合に、前記シミュレーションにおける前記アクセス命令の実行時に前記プロセッサがアクセス可能なキャッシュメモリが使用可能な状態であるか否かを、前記シミュレーションにおける前記アクセス命令の実行前に判断し、
使用可能な状態でないと判断した場合、前記計算用コードを実行する、
処理を実行させる計算プログラムを記録したことを特徴とする記録媒体。
(付記28)プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータに、
前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時に前記プロセッサがアクセス可能なTLB(Translation Lookaside Buffer)が使用可能な状態か否かを判断し、
使用可能であると判断した場合、前記TLBを使用しない場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記TLBの状態によらずに計算する計算用コードを生成し、
生成した前記計算用コードを実行し、
前記特定コードがあらたに性能値の計算対象となった場合に、前記シミュレーションにおける前記アクセス命令の実行時に前記TLBが使用可能な状態であるか否かを判断し、
使用可能な状態でないと判断した場合、前記計算用コードを実行する、
処理を実行させる計算プログラムを記録したことを特徴とする記録媒体。
(付記29)第1モードと、前記第1モードよりも動作の制限が少ない第2モードと、の動作モードを有するプロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータに、
前記特定コードが性能値の計算対象となった場合、前記プログラムを前記プロセッサが実行する動作のシミュレーションにおける前記アクセス命令の実行時の前記動作モードが前記第2モードであるか否かを判断し、
前記第2モードであると判断した場合、前記プロセッサがアクセス可能なTLB(Translation Lookaside Buffer)に前記記憶領域を示す論理アドレスと前記記憶領域を示す物理アドレスとの変換情報が格納されている場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記動作モードによらずに計算する計算用コードを生成し、
前記特定コードがあらたに性能値の計算対象となった場合、生成した前記計算用コードを実行する、
処理を実行させる計算プログラムを記録したことを特徴とする記録媒体。
100 計算装置
101 ターゲットCPU
102 キャッシュメモリ
103 メモリ
201 ホストCPU
301 コード変換部
302 コード実行部
303 コード最適化部
304 シミュレーション情報収集部
311 ブロック分割部
312,2221 判断部
313 予測シミュレーション実行部
314 コード生成部
901 実行部
902,2211 第1判断部
903,2212 第2判断部
904 出力部
905 補正部
1001 データキャッシュメモリ
2222 無効化部
2401 TLB
3101 取得部
3102 第1検出部
3103 第2検出部
3104 算出部
3105 置換部
bt,b ブロック
sim 動作のシミュレーション
cc11,cc12,cc101,cc112,cc123,cc232,cc233,cc242,cc243,cc2701,cc301,cc302−1,cc302−2 計算用コード
pgr ターゲットプログラム

Claims (19)

  1. プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算する計算装置であって、
    前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時の前記記憶領域の属性が、前記アクセス命令の指示に対して前記プロセッサがキャッシュメモリを使用可能なことを示す属性であるか否かを判断する判断部と、
    前記キャッシュメモリを使用可能なことを示す属性でないと前記判断部が判断した場合、前記キャッシュメモリを使用しない場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記属性によらずに計算する計算用コードを生成する生成部と、
    前記特定コードが性能値の計算対象となり、かつ以前に性能値の計算対象となったことがある場合、生成した前記計算用コードを実行する実行部と、
    を有することを特徴とする計算装置。
  2. 前記生成部は、前記キャッシュメモリを使用可能なことを示す属性であると判断した場合、前記キャッシュメモリを使用する場合における前記特定コード内の各命令の性能値によって、前記特定コードの性能値を前記属性によらずに計算する計算用コードを生成することを特徴とする請求項1に記載の計算装置。
  3. 前記計算用コード(以下、「第1計算用コード」と称する。)を生成する前記生成部は、
    前記特定コード内の前記アクセス命令と異なる命令の各々について、前記命令の性能値を前記特定コードの性能値に加算させる第1計算命令と、前記アクセス命令の各々について、前記属性に基づく前記アクセス命令の性能値を前記特定コードの性能値に加算させる第2計算命令と、を有する第2計算用コードを取得し、
    取得した前記第2計算用コードの中から、前記キャッシュメモリを使用可能なことを示す属性でないと判断した前記アクセス命令についての第2計算命令を検出し、
    検出した前記第2計算命令から、前記キャッシュメモリを使用可能なことを示す属性であると判断した前記アクセス命令についての第2計算命令までの間にある前記第1計算命令を前記第2計算用コードの中から検出し、
    検出した前記第1計算命令が前記特定コードの性能値に加算させる前記命令の性能値と、前記キャッシュメモリを使用可能なことを示す属性でないと判断した前記アクセス命令の実行時に前記キャッシュメモリを使用しない場合における前記アクセス命令の性能値と、の合計値を算出し、
    前記第2計算用コードのうち、検出した前記第1計算命令と検出した前記第2計算命令とを、前記合計値を前記特定コードの性能値に加算させる第3計算命令に置換する、
    ことにより、前記第1計算用コードを生成することを特徴とする請求項1または2に記載の計算装置。
  4. プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算する計算装置であって、
    前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時の前記記憶領域の属性が、前記アクセス命令の指示に対して前記プロセッサがキャッシュメモリを使用可能なことを示す属性であるか否かを判断する判断部と、
    前記キャッシュメモリを使用可能なことを示す属性であると前記判断部が判断した場合、前記キャッシュメモリを使用する場合における前記特定コード内の各命令の性能値によって、前記特定コードの性能値を前記属性によらずに計算する計算用コードを生成する生成部と、
    前記特定コードが性能値の計算対象となり、かつ以前に性能値の計算対象となったことがある場合、生成した前記計算用コードを実行する実行部と、
    を有することを特徴とする計算装置。
  5. プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算する計算装置であって、
    前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時に前記プロセッサがアクセス可能なキャッシュメモリが使用可能な状態であるか否かを、前記シミュレーションにおける前記アクセス命令の実行前に判断する第1判断部と、
    使用可能な状態でないと前記第1判断部が判断した場合、前記キャッシュメモリを使用しない場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記キャッシュメモリの状態によらずに計算する計算用コードを生成する生成部と、
    前記生成部が生成した前記計算用コードを実行する第1実行部と、
    前記特定コードが性能値の計算対象となり、かつ以前に性能値の計算対象となったことがある場合に、前記シミュレーションにおける前記アクセス命令の実行時に前記プロセッサがアクセス可能なキャッシュメモリが使用可能な状態であるか否かを、前記シミュレーションにおける前記アクセス命令の実行前に判断する第2判断部と、
    使用可能な状態でないと前記第2判断部が判断した場合、前記計算用コードを実行する第2実行部と、
    を有することを特徴とする計算装置。
  6. プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算する計算装置であって、
    前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時に前記プロセッサがアクセス可能なTLB(Translation Lookaside Buffer)が使用可能な状態か否かを判断する第1判断部と、
    使用可能でないと前記第1判断部が判断した場合、前記TLBを使用しない場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記TLBの状態によらずに計算する計算用コードを生成する生成部と、
    前記生成部が生成した前記計算用コードを実行する第1実行部と、
    前記特定コードが性能値の計算対象となり、かつ以前に性能値の計算対象となったことがある場合に、前記シミュレーションにおける前記アクセス命令の実行時に前記TLBが使用可能な状態であるか否かを判断する第2判断部と、
    使用可能な状態でないと前記第2判断部が判断した場合、前記計算用コードを実行する第2実行部と、
    を有することを特徴とする計算装置。
  7. 第1モードと、前記第1モードよりも動作の制限が少ない第2モードと、の動作モードを有するプロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算する計算装置であって、
    前記特定コードが性能値の計算対象となった場合、前記プログラムを前記プロセッサが実行する動作のシミュレーションにおける前記アクセス命令の実行時の前記動作モードが前記第2モードであるか否かを判断する判断部と、
    前記第2モードであると前記判断部が判断した場合、前記プロセッサがアクセス可能なTLB(Translation Lookaside Buffer)に前記記憶領域を示す論理アドレスと前記記憶領域を示す物理アドレスとの変換情報が格納されている場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記動作モードによらずに計算する計算用コードを生成する生成部と、
    前記特定コードが性能値の計算対象となり、かつ以前に性能値の計算対象となったことがある場合、前記生成部が生成した前記計算用コードを実行する実行部と、
    を有することを特徴とする計算装置。
  8. 前記生成部は、前記判断部が前記第2モードでないと判断した場合、前記TLBを使用する場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記動作モードによらずに計算する計算用コードを生成することを特徴とする請求項7に記載の計算装置。
  9. 前記計算用コード(以下、「第1計算用コード」と称する。)を生成する前記生成部は、
    前記特定コード内の前記アクセス命令と異なる命令の各々について、前記命令の性能値を前記特定コードの性能値に加算させる第1計算命令と、前記アクセス命令の各々について、前記TLBに前記変換情報が格納されているか否かに基づく前記アクセス命令の性能値を前記特定コードの性能値に加算させる第2計算命令と、を有する第2計算用コードを取得し、
    取得した前記第2計算用コードの中から、前記第2モードであると判断した前記アクセス命令についての第2計算命令を検出し、
    検出した前記第2計算命令から、前記第2モードでないと判断した前記アクセス命令についての第2計算命令までの間にある前記第1計算命令を前記第2計算用コードの中から検出し、
    検出した前記第1計算命令が前記特定コードの性能値に加算させる前記命令の性能値と、前記第2モードであると判断した前記アクセス命令の実行時に前記TLBに変換情報が格納されている場合における前記アクセス命令の性能値と、の合計値を算出し、
    前記第2計算用コードのうち、検出した前記第1計算命令と検出した前記第2計算命令とを、前記合計値を前記特定コードの性能値に加算させる第3計算命令に置換する、
    ことにより、前記第1計算用コードを生成することを特徴とする請求項7に記載の計算装置。
  10. プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータが、
    前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時の前記記憶領域の属性が、前記アクセス命令の指示に対して前記プロセッサがキャッシュメモリを使用可能なことを示す属性であるか否かを判断し、
    前記キャッシュメモリを使用可能なことを示す属性でないと判断した場合、前記キャッシュメモリを使用しない場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記属性によらずに計算する計算用コードを生成し、
    前記特定コードが性能値の計算対象となり、かつ以前に性能値の計算対象となったことがある場合、生成した前記計算用コードを実行する、
    処理を実行することを特徴とする計算方法。
  11. プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータが、
    前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時の前記記憶領域の属性が、前記アクセス命令の指示に対して前記プロセッサがキャッシュメモリを使用可能なことを示す属性であるか否かを判断し、
    前記キャッシュメモリを使用可能なことを示す属性であると判断した場合、前記キャッシュメモリを使用する場合における前記特定コード内の各命令の性能値によって、前記特定コードの性能値を前記属性によらずに計算する計算用コードを生成し、
    前記特定コードが性能値の計算対象となり、かつ以前に性能値の計算対象となったことがある場合、生成した前記計算用コードを実行する、
    処理を実行することを特徴とする計算方法。
  12. プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータが、
    前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時に前記プロセッサがアクセス可能なキャッシュメモリが使用可能な状態であるか否かを、前記シミュレーションにおける前記アクセス命令の実行前に判断し、
    使用可能な状態でないと判断した場合、前記キャッシュメモリを使用しない場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記キャッシュメモリの状態によらずに計算する計算用コードを生成し、
    生成した前記計算用コードを実行し、
    前記特定コードが性能値の計算対象となり、かつ以前に性能値の計算対象となったことがある場合に、前記シミュレーションにおける前記アクセス命令の実行時に前記プロセッサがアクセス可能なキャッシュメモリが使用可能な状態であるか否かを、前記シミュレーションにおける前記アクセス命令の実行前に判断し、
    使用可能な状態でないと判断した場合、前記計算用コードを実行する、
    ことを特徴とする計算方法。
  13. プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータが、
    前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時に前記プロセッサがアクセス可能なTLB(Translation Lookaside Buffer)が使用可能な状態か否かを判断し、
    使用可能であると判断した場合、前記TLBを使用しない場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記TLBの状態によらずに計算する計算用コードを生成し、
    生成した前記計算用コードを実行し、
    前記特定コードが性能値の計算対象となり、かつ以前に性能値の計算対象となったことがある場合に、前記シミュレーションにおける前記アクセス命令の実行時に前記TLBが使用可能な状態であるか否かを判断し、
    使用可能な状態でないと判断した場合、前記計算用コードを実行する、
    処理を実行することを特徴とする計算方法。
  14. 第1モードと、前記第1モードよりも動作の制限が少ない第2モードと、の動作モードを有するプロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータが、
    前記特定コードが性能値の計算対象となった場合、前記プログラムを前記プロセッサが実行する動作のシミュレーションにおける前記アクセス命令の実行時の前記動作モードが前記第2モードであるか否かを判断し、
    前記第2モードであると判断した場合、前記プロセッサがアクセス可能なTLB(Translation Lookaside Buffer)に前記記憶領域を示す論理アドレスと前記記憶領域を示す物理アドレスとの変換情報が格納されている場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記動作モードによらずに計算する計算用コードを生成し、
    前記特定コードが性能値の計算対象となり、かつ以前に性能値の計算対象となったことがある場合、生成した前記計算用コードを実行する、
    処理を実行することを特徴とする計算方法。
  15. プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータに、
    前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時の前記記憶領域の属性が、前記アクセス命令の指示に対して前記プロセッサがキャッシュメモリを使用可能なことを示す属性であるか否かを判断し、
    前記キャッシュメモリを使用可能なことを示す属性でないと判断した場合、前記キャッシュメモリを使用しない場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記属性によらずに計算する計算用コードを生成し、
    前記特定コードが性能値の計算対象となり、かつ以前に性能値の計算対象となったことがある場合、生成した前記計算用コードを実行する、
    処理を実行させることを特徴とする計算プログラム。
  16. プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータに、
    前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時の前記記憶領域の属性が、前記アクセス命令の指示に対して前記プロセッサがキャッシュメモリを使用可能なことを示す属性であるか否かを判断し、
    前記キャッシュメモリを使用可能なことを示す属性であると判断した場合、前記キャッシュメモリを使用する場合における前記特定コード内の各命令の性能値によって、前記特定コードの性能値を前記属性によらずに計算する計算用コードを生成し、
    前記特定コードが性能値の計算対象となり、かつ以前に性能値の計算対象となったことがある場合、生成した前記計算用コードを実行する、
    処理を実行させることを特徴とする計算プログラム。
  17. プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータに、
    前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時に前記プロセッサがアクセス可能なキャッシュメモリが使用可能な状態であるか否かを、前記シミュレーションにおける前記アクセス命令の実行前に判断し、
    使用可能な状態でないと判断した場合、前記キャッシュメモリを使用しない場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記キャッシュメモリの状態によらずに計算する計算用コードを生成し、
    生成した前記計算用コードを実行し、
    前記特定コードが性能値の計算対象となり、かつ以前に性能値の計算対象となったことがある場合に、前記シミュレーションにおける前記アクセス命令の実行時に前記プロセッサがアクセス可能なキャッシュメモリが使用可能な状態であるか否かを、前記シミュレーションにおける前記アクセス命令の実行前に判断し、
    使用可能な状態でないと判断した場合、前記計算用コードを実行する、
    ことを特徴とする計算プログラム。
  18. プロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータに、
    前記特定コードが性能値の計算対象となった場合、前記プロセッサが前記プログラムを実行する動作のシミュレーションにおける前記アクセス命令の実行時に前記プロセッサがアクセス可能なTLB(Translation Lookaside Buffer)が使用可能な状態か否かを判断し、
    使用可能であると判断した場合、前記TLBを使用しない場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記TLBの状態によらずに計算する計算用コードを生成し、
    生成した前記計算用コードを実行し、
    前記特定コードが性能値の計算対象となり、かつ以前に性能値の計算対象となったことがある場合に、前記シミュレーションにおける前記アクセス命令の実行時に前記TLBが使用可能な状態であるか否かを判断し、
    使用可能な状態でないと判断した場合、前記計算用コードを実行する、
    処理を実行させることを特徴とする計算プログラム。
  19. 第1モードと、前記第1モードよりも動作の制限が少ない第2モードと、の動作モードを有するプロセッサが複数回実行する特定コードであって、前記プロセッサに記憶領域へのアクセスを指示するアクセス命令を有する特定コードを有するプログラムを前記プロセッサが実行した場合の前記プログラムの性能値を計算するコンピュータに、
    前記特定コードが性能値の計算対象となった場合、前記プログラムを前記プロセッサが実行する動作のシミュレーションにおける前記アクセス命令の実行時の前記動作モードが前記第2モードであるか否かを判断し、
    前記第2モードであると判断した場合、前記プロセッサがアクセス可能なTLB(Translation Lookaside Buffer)に前記記憶領域を示す論理アドレスと前記記憶領域を示す物理アドレスとの変換情報が格納されている場合における前記特定コード内の各命令の性能値によって、前記プロセッサが前記特定コードを実行した場合の前記特定コードの性能値を前記動作モードによらずに計算する計算用コードを生成し、
    前記特定コードが性能値の計算対象となり、かつ以前に性能値の計算対象となったことがある場合、生成した前記計算用コードを実行する、
    処理を実行させることを特徴とする計算プログラム。
JP2013122786A 2013-06-11 2013-06-11 計算装置、計算方法、および計算プログラム Expired - Fee Related JP6163898B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2013122786A JP6163898B2 (ja) 2013-06-11 2013-06-11 計算装置、計算方法、および計算プログラム
US14/289,772 US9465595B2 (en) 2013-06-11 2014-05-29 Computing apparatus, computing method, and computing program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013122786A JP6163898B2 (ja) 2013-06-11 2013-06-11 計算装置、計算方法、および計算プログラム

Publications (2)

Publication Number Publication Date
JP2014241031A JP2014241031A (ja) 2014-12-25
JP6163898B2 true JP6163898B2 (ja) 2017-07-19

Family

ID=52006495

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013122786A Expired - Fee Related JP6163898B2 (ja) 2013-06-11 2013-06-11 計算装置、計算方法、および計算プログラム

Country Status (2)

Country Link
US (1) US9465595B2 (ja)
JP (1) JP6163898B2 (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TW201512894A (zh) * 2013-09-24 2015-04-01 hong-jian Zhou 資料存取系統及其資料與指令傳輸裝置
US9977730B2 (en) * 2015-05-08 2018-05-22 Dell Products, Lp System and method for optimizing system memory and input/output operations memory
WO2016189642A1 (ja) * 2015-05-26 2016-12-01 三菱電機株式会社 シミュレーション装置及びシミュレーション方法及びシミュレーションプログラム
JP6234640B2 (ja) * 2015-05-28 2017-11-22 三菱電機株式会社 シミュレーション装置及びシミュレーション方法及びシミュレーションプログラム
JP6740607B2 (ja) 2015-12-18 2020-08-19 富士通株式会社 シミュレーションプログラム、情報処理装置、シミュレーション方法
JP6827798B2 (ja) * 2016-12-21 2021-02-10 キヤノン株式会社 画像形成装置、画像形成装置の制御方法、プログラム。

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4888688A (en) * 1987-09-18 1989-12-19 Motorola, Inc. Dynamic disable mechanism for a memory management unit
US5845310A (en) * 1993-12-15 1998-12-01 Hewlett-Packard Co. System and methods for performing cache latency diagnostics in scalable parallel processing architectures including calculating CPU idle time and counting number of cache misses
US5764962A (en) * 1996-07-31 1998-06-09 Hewlett-Packard Company Emulation of asynchronous signals using a branch mechanism
JP3798476B2 (ja) * 1996-08-30 2006-07-19 株式会社東芝 コンピュータシステムおよびそのシステムにおけるキャッシュメモリのパワーダウン制御方法
EP1012722B1 (en) * 1997-05-14 2002-08-07 Compuware Corporation Accurate profile and timing information for multitasking systems
US6442652B1 (en) * 1999-09-07 2002-08-27 Motorola, Inc. Load based cache control for satellite based CPUs
JP2001249829A (ja) 2000-03-06 2001-09-14 Hitachi Ltd システムシミュレータ
US7007270B2 (en) * 2001-03-05 2006-02-28 Cadence Design Systems, Inc. Statistically based estimate of embedded software execution time
JP2004240783A (ja) * 2003-02-07 2004-08-26 Oki Data Corp シミュレータ
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
JP4342392B2 (ja) * 2004-07-06 2009-10-14 Okiセミコンダクタ株式会社 ソフトウェア検証モデル生成方法
US8601234B2 (en) * 2007-11-07 2013-12-03 Qualcomm Incorporated Configurable translation lookaside buffer
JP5961971B2 (ja) * 2011-10-12 2016-08-03 富士通株式会社 シミュレーション装置,方法,およびプログラム

Also Published As

Publication number Publication date
US9465595B2 (en) 2016-10-11
JP2014241031A (ja) 2014-12-25
US20140365735A1 (en) 2014-12-11

Similar Documents

Publication Publication Date Title
JP6163898B2 (ja) 計算装置、計算方法、および計算プログラム
Huynh et al. Scope-aware data cache analysis for WCET estimation
Gong et al. Jitprof: Pinpointing jit-unfriendly javascript code
US6006033A (en) Method and system for reordering the instructions of a computer program to optimize its execution
JP5961971B2 (ja) シミュレーション装置,方法,およびプログラム
US7093081B2 (en) Method and apparatus for identifying false cache line sharing
US20080215863A1 (en) Method and Apparatus for Autonomically Initiating Measurement of Secondary Metrics Based on Hardware Counter Values for Primary Metrics
US20080189687A1 (en) Method and Apparatus for Maintaining Performance Monitoring Structures in a Page Table for Use in Monitoring Performance of a Computer Program
US20070240141A1 (en) Performing dynamic information flow tracking
JPWO2012049728A1 (ja) シミュレーション装置,方法,およびプログラム
US20100070708A1 (en) Arithmetic processing apparatus and method
JP6064765B2 (ja) シミュレーション装置、シミュレーション方法、およびシミュレーションプログラム
US20130047050A1 (en) Correction apparatus, correction method, and computer product
Huber et al. WCET driven design space exploration of an object cache
JP6287650B2 (ja) シミュレーション方法、シミュレーションプログラム
Arafa et al. Ppt-gpu: Performance prediction toolkit for gpus identifying the impact of caches
Whitham et al. The scratchpad memory management unit for microblaze: Implementation, testing, and case study
Ballabriga et al. An improved approach for set-associative instruction cache partial analysis
US10671780B2 (en) Information processing device that executes simulation and a simulation method
Abel Measurement-based inference of the cache hierarchy
US8621179B2 (en) Method and system for partial evaluation of virtual address translations in a simulator
US10713167B2 (en) Information processing apparatus and method including simulating access to cache memory and generating profile information
JP3186867B2 (ja) キャッシュメモリ構成判別方法および計算機システム
Lehtonen et al. Code Positioning in LLVM
Qin et al. A technique to exploit memory locality for fast instruction set simulation

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160310

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20161227

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170110

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170313

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: 20170523

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170605

R150 Certificate of patent or registration of utility model

Ref document number: 6163898

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees