JP6265041B2 - コンパイルプログラム、コンパイル方法およびコンパイル装置 - Google Patents

コンパイルプログラム、コンパイル方法およびコンパイル装置 Download PDF

Info

Publication number
JP6265041B2
JP6265041B2 JP2014101654A JP2014101654A JP6265041B2 JP 6265041 B2 JP6265041 B2 JP 6265041B2 JP 2014101654 A JP2014101654 A JP 2014101654A JP 2014101654 A JP2014101654 A JP 2014101654A JP 6265041 B2 JP6265041 B2 JP 6265041B2
Authority
JP
Japan
Prior art keywords
data
access
program
evaluation value
memory
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.)
Active
Application number
JP2014101654A
Other languages
English (en)
Other versions
JP2015219652A (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 JP2014101654A priority Critical patent/JP6265041B2/ja
Priority to US14/638,351 priority patent/US9483244B2/en
Publication of JP2015219652A publication Critical patent/JP2015219652A/ja
Application granted granted Critical
Publication of JP6265041B2 publication Critical patent/JP6265041B2/ja
Active 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/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
    • 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/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • 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/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/453Microcode or microprogram

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Devices For Executing Special Programs (AREA)

Description

本発明は、コンパイルプログラム、コンパイル方法およびコンパイル装置に関する。
コンパイル装置は、例えば、ソースプログラムをプロセッサ等の演算処理装置で実行可能な機械語プログラムに変換するコンパイル処理を実行する。演算処理装置は、例えば、コンパイル処理により生成された機械語プログラムの命令をデコードするデコード部と、デコードされた命令に基づく演算を実行する演算部と、演算部と主記憶装置であるメインメモリとの間に配置されたキャッシュメモリとを有する。演算部は、例えば、メインメモリやキャッシュメモリに記憶されたデータを参照して、演算を実行する。キャッシュメモリは、例えば、演算部により参照されたデータを記憶する。
演算処理装置は、例えば、キャッシュメモリに記憶されたデータを参照することにより、メインメモリに記憶されたデータを参照するときに比べて、データを参照するときの待ち時間を短縮できる。なお、例えば、配列等の大規模なデータを使用する数値計算処理では、データの局所性が低いため、キャッシュメモリのヒット率が低下する。この場合、キャッシュメモリが有効に使用されないため、データを参照するときの待ち時間の短縮効果は小さい。
キャッシュメモリのヒット率低下に対する解決手段として、例えば、メインメモリに記憶されたデータを事前にキャッシュメモリに転送するプリフェッチが用いられる(例えば、特許文献1−7参照)。プリフェッチの実現方法としては、ソフトウエアによるソフトウエアプリフェッチと、ハードウエアによるハードウエアプリフェッチとが知られている。
例えば、ソフトウエアプリフェッチでは、コンパイル装置は、メインメモリに記憶されたデータを事前にキャッシュメモリに転送する命令(以下、プリフェッチ命令とも称する)を機械語プログラムに挿入する。一方、ハードウエアプリフェッチでは、ハードウエアプリフェッチ機構等のハードウエアが演算処理装置内に設けられる。例えば、ハードウエアプリフェッチ機構は、連続的なメモリアクセスが実行されると判定した場合、次にアクセスされるデータを予測し、メインメモリに記憶されたデータを事前にキャッシュメモリに転送する。
なお、例えば、ハードウエアプリフェッチ機構を有する演算処理装置では、ソフトウエアプリフェッチを適用したにも拘わらず、演算処理装置の性能が低下する場合がある。例えば、ハードウエアプリフェッチ機構によるプリフェッチとプリフェッチ命令によるプリフェッチとの両方が同じアドレスのデータに対して実行される場合がある。すなわち、不要なプリフェッチ命令が機械語プログラムに挿入される場合がある。この場合、例えば、命令数の増加、スケジューリングの処理効率低下、バスの消費量の増加による転送速度の低下等の性能低下を引き起こすおそれがある。
このため、ハードウエアプリフェッチとソフトウエアプリフェッチとを効率よく両立させて、演算処理装置の性能を向上させる技術が提案されている(例えば、特許文献1参照)。この種の演算処理装置では、例えば、ハードウエアプリフェッチの対象であるか否かを示す指示情報を付加したメモリアクセス命令が使用される。例えば、コンパイル処理では、連続的なメモリアクセスが発生するメモリアクセス命令を検出した場合、指示情報を付加したメモリアクセス命令を生成する。
このため、演算処理装置は、例えば、指示情報を付加したメモリアクセス命令をデコード可能なデコード部と、指示情報を付加したメモリアクセス命令を実行可能な演算部とを有する。さらに、演算処理装置は、指示情報を付加したメモリアクセス命令に対応したハードウエアプリフェッチ機構を有する。例えば、指示情報がハードウエアプリフェッチの対象でないことを示す場合は、ハードウエアプリフェッチは抑止される。
特開2009−230374号公報 特表2011−504274号公報 特開2010−244204号公報 特開2006−330813号公報 特開2011−81836号公報 特開2002−297379号公報 特開2001−166989号公報
ハードウエアプリフェッチ機構を有する演算処理装置にソフトウエアプリフェッチを適用した場合、不要なプリフェッチ命令が機械語プログラムに挿入され、演算処理装置の性能が低下するおそれがある。なお、ハードウエアプリフェッチの対象であるか否かを示す指示情報を付加したメモリアクセス命令を生成するコンパイル方法では、汎用性が低下する。例えば、指示情報を付加したメモリアクセス命令を生成するコンパイル方法では、デコード部、演算部およびハードウエアプリフェッチ機構が指示情報を付加したメモリアクセス命令に対応していない場合、演算処理装置の性能が低下するおそれがある。
1つの側面では、本件開示のコンパイルプログラム、コンパイル方法およびコンパイル装置は、コンパイル処理でプリフェッチ命令を機械語プログラムに挿入する際に、不要なプリフェッチ命令の挿入を低減することを目的とする。
一観点によれば、メモリに記憶されたデータを事前にキャッシュメモリに転送するハードウエアプリフェッチ機能を有するプロセッサで実行可能な機械語プログラムにソースプログラムを変換するコンパイル処理をコンピュータに実行させるコンパイルプログラムは、ソースプログラムを中間コードに変換し、メモリに記憶されたデータを事前にキャッシュメモリに転送するプリフェッチ命令の挿入対象のデータである対象データの中から、ハードウエアプリフェッチ機能の動作条件に対応するアクセスパターンを満たすデータを、対象データのメモリアクセスに関するプロファイル情報に基づいて検出し、アクセスパターンを満たすデータが連続する長さに基づいて、対象データの評価値を算出し、対象データに対するプリフェッチ命令の挿入を抑止するか否かを評価値に基づいて判定し、判定結果に基づいて中間コードを更新し、更新された中間コードを機械語プログラムに変換する、処理をコンピュータに実行させる。
別の観点によれば、メモリに記憶されたデータを事前にキャッシュメモリに転送するハードウエアプリフェッチ機能を有するプロセッサで実行可能な機械語プログラムにソースプログラムを変換するコンパイル方法では、コンピュータは、ソースプログラムを中間コードに変換し、メモリに記憶されたデータを事前にキャッシュメモリに転送するプリフェッチ命令の挿入対象のデータである対象データの中から、ハードウエアプリフェッチ機能の動作条件に対応するアクセスパターンを満たすデータを、対象データのメモリアクセスに関するプロファイル情報に基づいて検出し、アクセスパターンを満たすデータが連続する長さに基づいて、対象データの評価値を算出し、対象データに対するプリフェッチ命令の挿入を抑止するか否かを評価値に基づいて判定し、判定結果に基づいて中間コードを更新し、更新した中間コードを機械語プログラムに変換する。
別の観点によれば、メモリに記憶されたデータを事前にキャッシュメモリに転送するハードウエアプリフェッチ機能を有するプロセッサで実行可能な機械語プログラムにソースプログラムを変換するコンパイル処理を実行するコンパイル装置は、ソースプログラムを中間コードに変換する変換部と、中間コードを更新する最適化部と、更新された中間コードを機械語プログラムに変換するコード生成部とを有し、最適化部は、メモリに記憶されたデータを事前にキャッシュメモリに転送するプリフェッチ命令の挿入対象のデータである対象データの中から、ハードウエアプリフェッチ機能の動作条件に対応するアクセスパターンを満たすデータを、対象データのメモリアクセスに関するプロファイル情報に基づいて検出する検出部と、アクセスパターンを満たすデータが連続する長さに基づいて、対象データの評価値を算出する算出部と、対象データに対するプリフェッチ命令の挿入を抑止するか否かを評価値に基づいて判定し、判定結果に基づいて中間コードを更新する更新部とを有する。
本件開示のコンパイルプログラム、コンパイル方法およびコンパイル装置は、コンパイル処理でプリフェッチ命令を機械語プログラムに挿入する際に、不要なプリフェッチ命令の挿入を低減できる。
コンパイルプログラム、コンパイル方法およびコンパイル装置の一実施形態を示す図である。 図1に示したコンパイル装置の動作の一例を示す図である。 図1に示したコンパイル装置で生成された機械語プログラムを実行する演算処理装置の一例を示す図である。 プロファイル情報の生成方法の一例を示す図である。 プロファイル情報の適用方法の一例を示す図である。 配列データのアクセス順とプリフェッチとの関係の一例を示す図である。 プロファイル情報およびアクセス属性テーブルの一例を示す図である。 アクセス属性テーブル生成の一例を示す図である。 連続長管理テーブルの一例を示す図である。 連続長管理テーブル生成の一例を示す図である。 図1に示したコンパイル装置のハードウエア構成の一例を示す図である。
以下、実施形態を図面を用いて説明する。
図1は、コンパイルプログラム、コンパイル方法およびコンパイル装置の一実施形態を示す。なお、この実施形態のコンパイル装置10は、ハードウエアのみで実現されてもよく、ハードウエアをソフトウエアにより制御することにより実現されてもよい。例えば、コンパイル装置10は、コンパイルプログラムを実行するコンピュータにより実現されてもよい。
コンパイル装置10は、例えば、主記憶装置であるメインメモリに記憶されたデータを事前にキャッシュメモリに転送するハードウエアプリフェッチ機能を有するプロセッサで実行可能な機械語プログラムにソースプログラムを変換するコンパイル処理を実行する。例えば、コンパイル装置10は、ソースプログラムSPRGおよびプロファイル情報PINFを受信し、機械語プログラムMPRGを出力する。
プロファイル情報PINFは、例えば、メインメモリに記憶されたデータを事前にキャッシュメモリに転送するプリフェッチ命令の挿入対象のデータ(以下、対象データとも称する)のメモリアクセスに関する情報である。なお、プリフェッチ命令は、コンパイル処理によりソフトウエアプリフェッチが実行された場合、機械語プログラムMPRGに挿入される。プリフェッチ命令は、データをロードする命令で実現されてもよいし、プリフェッチ専用の命令で実現されてもよい。
プリフェッチ命令の挿入対象のデータは、例えば、間接的にアクセスされる配列データである。間接的にアクセスされる配列データでは、プロセッサ等の演算処理装置でソースプログラムを実行したときにアクセス先が確定する。このため、ハードウエアでは、間接的にアクセスされる配列データのアクセス先を事前に予測することは困難である。したがって、間接的にアクセスされる配列データに対してソフトウエアプリフェッチを実行することにより、演算処理装置の性能が向上する。
なお、間接的にアクセスされる配列データのアクセス先が規則的に変化する場合、ハードウエアプリフェッチが実行されることがある。ハードウエアプリフェッチは、例えば、図3に示した演算処理装置100のハードウエアプリフェッチ制御部140で実行される。ハードウエアプリフェッチが実行された場合、ソフトウエアプリフェッチを実行することにより、演算処理装置の性能が低下するおそれがある。このため、コンパイル装置10は、間接的にアクセスされる配列データのアクセス先が規則的に変化するか否かをプロファイル情報PINFに基づいて判定し、判定結果に基づいてプリフェッチ命令の挿入を抑止するか否かを決定する。
なお、プリフェッチ命令の挿入対象のデータは、間接的にアクセスされる配列データに限定されない。例えば、プリフェッチ命令の挿入対象のデータは、ポインタ変数によりアクセスされるデータでもよい。ポインタ変数によるアクセスにおいても、例えば、アクセス先は、演算処理装置でソースプログラムを実行したときに確定する。以下、演算処理装置でソースプログラムを実行したときにアクセス先が確定する不規則なメモリアクセスを、不規則な間接メモリアクセスとも称する。また、不規則な間接メモリアクセスが実行されるデータを、不規則な間接アクセスデータとも称する。
すなわち、コンパイル装置10は、間接的にアクセスされる配列データおよびポインタ変数によりアクセスされるデータに限定せずに、不規則な間接メモリアクセスが実行されるデータを、プリフェッチ命令の挿入対象のデータとしてもよい。以下、プリフェッチ命令の挿入対象のデータを、間接的にアクセスされる配列データとして説明する。
コンパイル装置10は、例えば、コード変換部20、最適化部30およびコード生成部40を有する。コード変換部20は、ソースプログラムを中間コードに変換する変換部の一例である。例えば、コード変換部20は、ソースプログラムSPRGを受信し、ソースプログラムSPRGのソースコードを中間コードに変換する。コード変換部20で生成された中間コードは、最適化部30に転送される。
最適化部30は、中間コードを更新する最適化部の一例である。例えば、最適化部30は、中間コードおよびプロファイル情報PINFを受信し、中間コードを最適化する。最適化部30で最適化された中間コードは、コード生成部40に転送される。なお、プリフェッチ命令を機械語プログラムMPRGに挿入するか否かの判定は、中間コードを最適化する際に実行される。
例えば、最適化部30は、アクセス属性検出部32、評価値算出部34およびプリフェッチ命令挿入部36を有する。アクセス属性検出部32は、プリフェッチ命令の挿入対象のデータである対象データの中から、所定のアクセスパターンを満たすデータを、対象データのメモリアクセスに関するプロファイル情報に基づいて検出する検出部の一例である。所定のアクセスパターンは、例えば、ハードウエアプリフェッチ機能の動作条件に対応するアクセスパターンである。
例えば、アクセス属性検出部32は、ループ処理により繰り返しアクセスされる配列データの各データのうち、所定のアクセスパターンを満たすデータをプロファイル情報PINFに基づいて検出する。そして、アクセス属性検出部32は、所定のアクセスパターンを満たすデータか否かを示すアクセス属性を含む情報(以下、アクセス属性テーブルとも称する)を生成する。アクセス属性検出部32で生成されたアクセス属性テーブルは、評価値算出部34に転送される。
評価値算出部34は、所定のアクセスパターンを満たすデータが連続する長さに基づいて、対象データの評価値を算出する算出部の一例である。例えば、評価値算出部34は、アクセス属性検出部32で生成されたアクセス属性テーブルを受信する。そして、評価値算出部34は、アクセス属性テーブルに含まれるアクセス属性に基づいて、対象データの評価値を算出する。例えば、評価値算出部34は、所定のアクセスパターンを満たすデータが連続する長さ(以下、連続長とも称する)を算出する。そして、評価値算出部34は、連続長に基づいて対象データの評価値を算出する。評価値算出部34で算出された評価値は、プリフェッチ命令挿入部36に転送される。
プリフェッチ命令挿入部36は、対象データに対するプリフェッチ命令の挿入を抑止するか否かを評価値に基づいて判定し、判定結果に基づいて中間コードを更新する更新部の一例である。例えば、プリフェッチ命令挿入部36は、評価値算出部34で算出された評価値を受信する。そして、プリフェッチ命令挿入部36は、プリフェッチ命令の挿入を抑止するか否かを対象データ毎に評価値に基づいて判定し、判定結果に基づいて中間コードを更新する。
例えば、プリフェッチ命令挿入部36は、評価値が予め決められた閾値未満の対象データに対してはプリフェッチ命令を挿入し、評価値が閾値以上の対象データに対してはプリフェッチ命令の挿入を抑止して、中間コードを更新する。これにより、例えば、中間コードは、最適化される。プリフェッチ命令挿入部36で最適化された中間コードは、コード生成部40に転送される。
コード生成部40は、更新された中間コードを機械語プログラムに変換するコード生成部の一例である。例えば、コード生成部40は、プリフェッチ命令挿入部36で更新された中間コードを受信する。そして、コード生成部40は、プリフェッチ命令挿入部36で更新された中間コードを、機械語プログラムMPRGに変換する。
このように、コンパイル装置10は、ハードウエアプリフェッチ機能を有するプロセッサで実行可能で、かつ、不要なプリフェッチ命令の挿入が低減された機械語プログラムMPRGを、生成できる。すなわち、コンパイル装置10は、コンパイル処理でプリフェッチ命令を機械語プログラムMPRGに挿入する際に、不要なプリフェッチ命令の挿入を低減できる。
図2は、図1に示したコンパイル装置10の動作の一例を示す。図2の動作は、ハードウエアのみで実現されてもよく、ハードウエアをソフトウエアにより制御することにより実現されてもよい。例えば、コンピュータは、コンパイルプログラムを記録した記憶媒体を読み取り、図2の動作を実行してもよい。換言すれば、コンパイルプログラムは、図2の動作をコンピュータに実行させてもよい。すなわち、図2は、コンパイルプログラムおよびコンパイル方法の一形態を示す。
なお、図2の動作では、プロファイル情報PINFは、ステップS100が実行される前に生成される。例えば、プロファイル情報PINFは、コンパイル装置10により生成されてもよいし、コンパイル装置10とは別のコンパイル装置により生成されてもよい。
ステップS100では、コード変換部20は、ソースプログラムを中間コードに変換する。
ステップS200では、アクセス属性検出部32は、不規則なメモリアクセスが実行されるデータ(プリフェッチ命令の挿入対象のデータ)のアクセス属性を、データのメモリアクセスに関するプロファイル情報PINFに基づいて決定する。例えば、アクセス属性検出部32は、プリフェッチ命令の挿入対象のデータである対象データの中から、ハードウエアプリフェッチ機能の動作条件に対応するアクセスパターンを満たすデータを、対象データのプロファイル情報PINFに基づいて検出する。
例えば、アクセス属性検出部32は、所定のアクセスパターンを満たすデータとして、キャッシュメモリのキャッシュラインをアクセス単位とした場合のアクセス先の変化が2ライン未満の変化量のデータを検出する。なお、アクセス属性検出部32は、所定のアクセスパターンを満たすデータとして、アクセス先が一定のアクセス幅で昇順および降順のいずれか一方向に変化するデータを検出してもよい。そして、アクセス属性検出部32は、所定のアクセスパターンを満たすデータか否かを示すアクセス属性を含むアクセス属性テーブルを生成する。
ステップS300では、評価値算出部34は、ステップS200で生成されたアクセス属性テーブルに含まれるアクセス属性に基づいて、対象データの評価値を算出する。例えば、評価値算出部34は、ステップS200で生成されたアクセス属性テーブルに含まれるアクセス属性に基づいて、所定のアクセスパターンを満たすデータが連続する長さ(連続長)を算出する。そして、評価値算出部34は、連続長に基づいて対象データの評価値を算出する。例えば、評価値算出部34は、対象データ内での連続長の最大値を評価値として算出する。
また、例えば、評価値算出部34は、所定のアクセスパターンを満たすデータが連続する長さと所定のアクセスパターンを満たすデータの長さ毎の発生回数とに基づいて、評価値を算出してもよい。また、例えば、評価値算出部34は、所定のアクセスパターンを満たすデータの長さ毎の発生回数と連続長の大きさに応じた重み係数との積和演算を実行し、積和演算の結果を評価値として算出してもよい。重み係数は、ユーザにより書き換え可能に設定されてもよいし、固定値でもよい。
ステップS400では、プリフェッチ命令挿入部36は、ステップS300で生成された評価値が予め決められた閾値未満か否かを対象データ毎に判定する。閾値は、例えば、対象データ内のデータ数の半分程度の値である。評価値が閾値未満の場合(ステップS400のYes)、コンパイル装置10の動作は、ステップS500に移る。すなわち、評価値が閾値未満の対象データに対しては、ステップS500が実行される。一方、評価値が閾値以上の場合(ステップS400のNo)、コンパイル装置10の動作は、ステップS600に移る。すなわち、評価値が閾値以上の対象データに対しては、ステップS600が実行される。
なお、ステップS400の判定は、ソフトウエアプリフェッチを実行した場合に演算処理装置の性能低下を引き起こすか否かの判定に対応する。例えば、コンパイル装置10は、評価値が閾値未満の対象データに対してソフトウエアプリフェッチを実行した場合、ソフトウエアプリフェッチを実行しない場合に比べて、演算処理装置の性能が向上すると判定する。換言すれば、コンパイル装置10は、評価値が閾値以上の対象データに対してソフトウエアプリフェッチを実行した場合、ソフトウエアプリフェッチを実行しない場合に比べて、演算処理装置の性能が低下すると判定する。
ステップS500では、プリフェッチ命令挿入部36は、プリフェッチ命令を中間コードに挿入する。例えば、プリフェッチ命令挿入部36は、評価値が閾値未満の対象データに対してプリフェッチ命令を実行させる中間コード(プリフェッチ命令の中間コード)を生成し、生成した中間コードをステップS100で生成された中間コードに挿入する。これにより、ステップS100で生成された中間コードは、更新される。
このように、プリフェッチ命令挿入部36は、ソフトウエアプリフェッチを実行することにより演算処理装置の性能が向上すると判定した対象データに対しては、プリフェッチ命令の挿入を実行する。
ステップS600では、プリフェッチ命令挿入部36は、プリフェッチ命令の挿入を抑止する。例えば、プリフェッチ命令挿入部36は、対象データに対してプリフェッチ命令の出力指定(機械語プログラムへの挿入指示)が設定されている場合、評価値が閾値以上の対象データに対するプリフェッチ命令の出力指定を抑止する中間コードを生成する。これにより、ステップS100で生成された中間コードは、更新される。
このように、プリフェッチ命令挿入部36は、ソフトウエアプリフェッチを実行することにより演算処理装置の性能が低下すると判定した対象データに対しては、プリフェッチ命令の挿入を抑止する。
ステップS700では、プリフェッチ命令挿入部36は、ステップS400、S500で更新された中間コードを最適化する。すなわち、プリフェッチ命令挿入部36は、対象データに対するプリフェッチ命令の挿入を抑止するか否かの判定結果(ステップS400での判定結果)に基づいて、中間コードを更新する。
ステップS800では、コード生成部40は、ステップS700で更新された中間コードを機械語プログラムMPRGに変換する。これにより、演算処理装置で実行可能な機械語プログラムMPRGが生成される。なお、ステップS800で生成される機械語プログラムMPRGでは、不要なプリフェッチ命令の挿入が抑制され、演算処理装置の性能向上に寄与するプリフェッチ命令が挿入される。すなわち、コンパイル装置10は、コンパイル処理でプリフェッチ命令を機械語プログラムMPRGに挿入する際に、不要なプリフェッチ命令の挿入を低減できる。
なお、コンパイル装置10の動作は、この例に限定されない。例えば、コンパイル装置10は、ソースプログラムSPRGの翻訳時の静的解析で、対象データのアクセスパターンが昇順あるいは降順であると判定した場合、プロファイル情報PINFに基づく判定を実行せずに、プリフェッチ命令の挿入を抑止してもよい。
図3は、図1に示したコンパイル装置10で生成された機械語プログラムを実行する演算処理装置100の一例を示す。演算処理装置100は、例えば、CPU(Central Processing Unit)等のプロセッサである。例えば、演算処理装置100は、コンパイル装置10で生成された機械語プログラムMPRGを実行するために、メインメモリ150に記憶されたデータを読み出す。また、演算処理装置100は、機械語プログラムMPRGの実行結果(演算結果)をメインメモリ150に記憶する。
例えば、演算処理装置100は、命令デコーダ110、演算部120、キャッシュメモリ130およびハードウエアプリフェッチ制御装置140を有する。命令デコーダ110は、機械語プログラムMPRGで示される命令をデコードする。そして、命令デコーダ110は、デコードした命令を演算部120に出力する。
演算部120は、デコードされた命令に基づく演算を実行する。例えば、演算部120は、キャッシュメモリ130に記憶されたデータを参照して、演算を実行する。また、例えば、演算部120は、演算結果をキャッシュメモリ130に記憶する。
キャッシュメモリ130は、メインメモリ150から受信したデータを記憶する。例えば、キャッシュメモリ130は、演算部120により参照されたデータを記憶する。さらに、キャッシュメモリ130は、ハードウエアプリフェッチやソフトウエアプリフェッチによりメインメモリ150から転送されたデータを記憶する。また、キャッシュメモリ130は、演算結果等のデータをメインメモリ150に出力する。
例えば、キャッシュメモリ130のキャッシュライン番号をCL、ラインサイズをLS(バイト)、1ウエイあたりの容量をWS(キロバイト)、論理アドレスをaddrとした場合、キャッシュライン番号CLは、式(1)で表される。なお、論理アドレスaddrは、例えば、メインメモリ150のアドレスである。
CL=mod(addr/LS,(WS×1024)/LS) ・・・(1)
式(1)のmodは剰余演算子である。すなわち、キャッシュライン番号CLは、”addr/LS”を”(WS×1024)/LS”で割った余りに対応する。
ハードウエアプリフェッチ制御装置140は、ハードウエアプリフェッチの実行を制御する。例えば、ハードウエアプリフェッチ制御装置140は、アクセス先が規則的に変化するアクセスにおいて、キャッシュミスが連続したことを検出した場合に、ハードウエアプリフェッチを実行する。
例えば、ハードウエアプリフェッチ制御装置140は、連続領域アクセスにおいて連続するキャッシュラインのキャッシュミスを検出した場合、ハードウエアプリフェッチを実行する。連続領域アクセスは、例えば、キャッシュメモリ130のキャッシュラインをアクセス単位とした場合のアクセス先の変化が2ライン未満の変化量(キャッシュラインが連続する範囲)のアクセスである。
なお、ハードウエアプリフェッチの実行条件(動作条件)は、この例に限定されない。例えば、ハードウエアプリフェッチ制御装置140は、アクセス先が一定のアクセス幅で昇順および降順のいずれか一方向に変化するアクセスにおいて、キャッシュミスが連続したことを検出した場合に、ハードウエアプリフェッチを実行してもよい。
図4は、プロファイル情報PINFの生成方法の一例を示す。図4に示したソースプログラムSPRGでは、例えば、配列データA(LIST(i))で示される値をYに加算する演算がn回繰り返される。以下、配列データA(LIST(i))を配列データAとも称する。例えば、配列データAのアクセス先は、配列データLIST(i)で指定され、演算処理装置100でソースプログラムSPRGを実行したときに確定する。したがって、配列データAのアクセスは、不規則な間接メモリアクセスである。すなわち、配列データAは、プリフェッチ命令の挿入対象のデータである。以下、配列データAをプリフェッチ命令の挿入対象のデータとして説明する。
先ず、処理P10では、例えば、プロファイル情報生成の翻訳オプションがコンパイラに指定され、翻訳対象のソースプログラムSPRGが機械語プログラムMPRG10に翻訳される。コンパイラは、例えば、コンパイル装置10の動作を実現するコンパイルプログラムに対応する。
処理P10で生成される機械語プログラムMPRG10は、例えば、オブジェクト形式のプログラムである。また、例えば、機械語プログラムMPRG10は、プロファイル情報生成用のオブジェクトコードと、ソースプログラムSPRGの翻訳により生成されたオブジェクトコードとを含む。プロファイル情報生成用のオブジェクトコードは、例えば、プリフェッチ命令の挿入対象のデータのプロファイル情報PINFをソースプログラムSPRGの実行時に出力させるオブジェクトコードである。
例えば、コンパイル装置10は、プロファイル情報生成の翻訳オプションが指定されているため、ソースプログラムSPRGの翻訳時に、配列データAのプロファイル情報PINFを、ソースプログラムSPRGの実行時に出力させるオブジェクトコードを生成する。
処理P20では、例えば、プロファイル用のライブラリ等の各種ライブラリLIBと機械語プログラムMPRG10とが結合され、機械語プログラムMPRG12が生成される。機械語プログラムMPRG12は、実行形式のプログラムである。処理P20の結合は、例えば、リンカを用いて実行される。リンカは、例えば、オブジェクト形式のプログラムMPRG10やライブラリLIBを結合して実行形式のプログラムMPRG12を生成するプログラムである。リンカは、コンパイル装置10の動作を実現するコンパイルプログラムに含まれてもよいし、コンパイルプログラムとは別のプログラムでもよい。
処理P30では、機械語プログラムMPRG12が実行される。これにより、プロファイル情報PINFが生成される。例えば、演算処理装置100は、機械語プログラムMPRG12を実行し、配列データAのプロファイル情報PINFを外部に出力する。
このように、コンパイル装置10は、プロファイル情報PINFを、ソースプログラムSPRGを実行した演算処理装置100から対象データ毎に出力させるオブジェクトコードを生成する。演算処理装置100から対象データ毎に出力されるプロファイル情報PINFは、例えば、対象データの中の各データのアクセスの順番を示すインデックスとアクセス先を示すアドレス情報とを含む。なお、プロファイル情報PINFの生成方法は、この例に限定されない。
図5は、プロファイル情報PINFの適用方法の一例を示す。ソースプログラムSPRGは、図4で説明したソースプログラムSPRGと同一または同様である。また、プロファイル情報PINFは、例えば、図4の動作により生成されたプロファイル情報PINFである。図4の動作と同一または同様な動作については、詳細な説明を省略する。
処理P12では、例えば、プロファイル情報適用の翻訳オプションがコンパイラに指定され、翻訳対象のソースプログラムSPRGが機械語プログラムMPRG20に翻訳される。この際、例えば、コンパイル装置10は、プロファイル情報適用の翻訳オプションが指定されているため、不規則な間接アクセスデータ(例えば、配列データA)に対するプリフェッチ命令の挿入を抑止するか否かをプロファイル情報PINFに基づいて決定する。
例えば、コンパイル装置10は、不規則な間接アクセスデータ(例えば、配列データA)を検出した場合、検出したデータをプリフェッチ命令の挿入対象のデータと判定する。そして、コンパイル装置10は、プリフェッチ命令の挿入対象のデータ(不規則な間接アクセスデータ)に対するプリフェッチ命令の挿入を抑止するか否かをプロファイル情報PINFに基づいて決定する。すなわち、コンパイル装置10は、不規則な間接アクセスデータ(例えば、配列データA)に対するプリフェッチ命令を機械語プログラムMPRG20に挿入するか否かをプロファイル情報PINFに基づいて決定する。
したがって、例えば、コンパイル装置10は、配列データAに対するプリフェッチ命令の挿入を抑止すると決定した場合、配列データAに対するプリフェッチ命令を機械語プログラムMPRG20に挿入しない。また、例えば、コンパイル装置10は、配列データAに対するプリフェッチ命令の挿入を抑止しないと決定した場合、配列データAに対するプリフェッチ命令を機械語プログラムMPRG20に挿入する。このように、処理P12で生成される機械語プログラムMPRG20には、プリフェッチ命令の挿入を抑止するか否かの判定結果が反映される。なお、機械語プログラムMPRG20は、例えば、オブジェクト形式のプログラムである。
処理P22では、例えば、各種ライブラリLIBと機械語プログラムMPRG20とが結合され、機械語プログラムMPRG22が生成される。機械語プログラムMPRG22は、実行形式のプログラムである。処理P22の結合は、例えば、リンカを用いて実行される。処理P32では、機械語プログラムMPRG22が実行される。
なお、プロファイル情報PINFの適用方法は、この例に限定されない。例えば、プリフェッチ命令の挿入対象のデータは、コンパイラに指示を与える最適化制御行やプラグマ等により指定されてもよい。最適化制御行は、例えば、FORTRANで用いられる。また、例えば、プラグマは、C言語等で用いられる。
例えば、ユーザは、配列データA(LIST(i))をプリフェッチ命令の挿入対象のデータとして指定する最適化制御行(例えば、「!ocl Prefetch_index(auto,LIST)」)をソースプログラムSPRG内に記述してもよい。この場合、コンパイル装置10は、配列データA(LIST(i))をプリフェッチ命令の挿入対象のデータと判定する。したがって、不規則な間接アクセスデータでも、最適化制御行で指定されていないデータは、プリフェッチ命令の挿入対象のデータと判定されない。なお、コンパイル装置10は、プリフェッチ命令の挿入対象のデータが最適化制御行で指定されている場合、図4に示した処理P10において、最適化制御行で指定されたデータに限定してプロファイル情報PINFを生成させるオブジェクトコードを生成してもよい。
図6は、配列データA(LIST(i))のアクセス順とプリフェッチとの関係の一例を示す図である。ソースプログラムSPRGは、図4で説明したソースプログラムSPRGと同一または同様である。配列データA(LIST(i))は、プリフェッチ命令の挿入対象のデータである。図の符号iは、配列データAのアクセス順に対応する。図の配列データLIST(i)の値は、配列データAのアクセス先(メモリ領域のアドレス)に対応する。
ケース1では、配列データLIST(1)、配列データLIST(2)、配列データLIST(3)のそれぞれの値は、555、11、2000である。したがって、配列データA(555)、配列データA(11)、配列データA(2000)の順で、アクセスされる。このように、配列データAのアクセス先は、メモリ領域のアドレス555、11、2000の順に、不規則に変化する。
このため、配列データAに対するハードウエアプリフェッチは実行されない。なお、配列データAに対するソフトウエアプリフェッチは、実行される。したがって、配列データAに対するプリフェッチ命令が挿入される。図の「prefetch A(LIST(i+α))」は、α要素先の配列データAをプリフェッチすることを示す。これにより、不規則な間接アクセスデータに対しても、プリフェッチが実行される。この結果、この実施形態では、データを参照するときの待ち時間を短縮できる。
一方、ケース2では、配列データLIST(1)、配列データLIST(2)、配列データLIST(3)、配列データLIST(4)のそれぞれの値は、1、2、3、4である。したがって、配列データA(1)、配列データA(2)、配列データA(3)、配列データA(4)の順で、アクセスされる。このように、配列データAのアクセス先は、メモリ領域のアドレス1、2、3、4の順に、連続的に変化する。
このため、配列データAに対するハードウエアプリフェッチが実行される。これにより、この実施形態では、データを参照するときの待ち時間を短縮できる。なお、配列データAのアクセス先がハードウエアプリフェッチ機能の動作条件に対応する所定の規則に従って変化するため、配列データAに対するソフトウエアプリフェッチは、実行されない。すなわち、この実施形態では、プリフェッチ命令の挿入対象のデータのアクセス先が規則的に変化する場合に、ハードウエアプリフェッチとソフトウエアプリフェッチとの両方が実行されることを抑止できる。
例えば、コンパイル装置10は、配列データAに対するプリフェッチ命令の挿入を抑止する。これにより、この実施形態では、プリフェッチ命令の挿入対象のデータのアクセス先が規則的に変化する場合に、不要なプリフェッチ命令が挿入されることを抑止できる。このように、この実施形態では、コンパイル処理でプリフェッチ命令を機械語プログラムに挿入する際に、不要なプリフェッチ命令の挿入を低減できる。この結果、この実施形態では、不要なプリフェッチ命令の挿入による演算処理装置100の性能低下を低減できる。
なお、プリフェッチ命令の挿入を抑止するか否かは、図2で説明したように評価値に基づいて決定される。評価値は、例えば、図9に示す連続長管理テーブルTABL2に基づいて生成される。また、連続長管理テーブルTABL2は、例えば、図7に示すアクセス属性テーブルTABL1に基づいて生成される。なお、アクセス属性テーブルTABL1は、プロファイル情報PINFに基づいて生成される。
図7は、プロファイル情報PINFおよびアクセス属性テーブルTABL1の一例を示す。プロファイル情報PINFおよびアクセス属性テーブルTABL1は、例えば、プリフェッチ命令の挿入単位毎に生成される。例えば、プロファイル情報PINFおよびアクセス属性テーブルTABL1は、プリフェッチ命令の挿入対象のデータに対して、ループ処理毎に生成される。
例えば、配列データAのプロファイル情報PINFは、アクセスの順番を示す要素番号iとアクセス先を示すキャッシュライン番号CLとを含む。図7の例では、配列データAの配列サイズnは、16である。また、キャッシュライン番号CLは、例えば、アクセス先を示すアドレス情報であり、配列データAの各データが記憶されるキャッシュメモリ130のキャッシュラインを示す。例えば、キャッシュライン番号CLは、図3で説明した式(1)を用いて、配列データAの各データの論理アドレスaddr(例えば、メインメモリ150のアドレス)に基づいて算出される。
図7のプロファイル情報PINFでは、要素番号1、2、3、4に対応する配列データA内のデータが記憶されるキャッシュライン番号CLは、それぞれ0、1、2、3である。また、要素番号5、6、7、8に対応する配列データA内のデータが記憶されるキャッシュライン番号CLは、それぞれ22、33、44、45である。要素番号9、10、11、12に対応する配列データA内のデータが記憶されるキャッシュライン番号CLは、それぞれ55、56、66、67である。そして、要素番号13、14、15、16に対応する配列データA内のデータが記憶されるキャッシュライン番号CLは、それぞれ68、69、70、88である。
また、例えば、配列データAのプロファイル情報PINFに基づいて生成されるアクセス属性テーブルTABL1は、要素番号i、キャッシュライン番号CLおよびアクセス属性Zを含む。すなわち、アクセス属性テーブルTABL1は、プロファイル情報PINFにアクセス属性Zを追加して生成される。
なお、図7のアクセス属性Zの欄の情報Sは、アクセス先がハードウエアプリフェッチ機能の動作条件に対応する所定の規則に従って変化することを示し、情報Xは、アクセス先の変化が所定の規則に従っていないことを示す。以下、情報S、Xがそれぞれ設定されたアクセス属性Zを、アクセス属性S、Xとも称する。例えば、アクセス属性Sは、アクセス先の変化が2ライン未満の変化量(キャッシュラインが連続する範囲)であることを示し、アクセス属性Xは、アクセス先の変化が不連続(キャッシュラインが連続しない変化)であることを示す。
アクセス属性テーブルTABL1の要素番号1(i=1)は、最初のアクセスであるため、アクセス属性は、設定されない。要素番号2、3、4、8、10、12、13、14、15では、前の要素番号(i−1)のキャッシュライン番号CLとの差分が1ライン(2ライン未満)であるため、アクセス属性Zは情報Sに設定される。要素番号5、6、7、9、11、16では、前の要素番号(i−1)のキャッシュライン番号CLとの差分は、それぞれ19、11、11、10、10、18であり、2ライン以上(1ライン超え)である。このため、要素番号5、6、7、9、11、16では、アクセス属性Zは情報Xに設定される。
なお、プロファイル情報PINFおよびアクセス属性テーブルTABL1の構成は、この例に限定されない。例えば、プロファイル情報PINFは、要素番号iおよびキャッシュライン番号CLの他に、配列データAの各データの論理アドレスaddrを示すアドレス情報を有してもよい。あるいは、プロファイル情報PINFは、キャッシュライン番号CLの代わりに、論理アドレスaddrを示すアドレス情報を有してもよい。
また、プロファイル情報PINFは、アクセス属性Zを含んでもよい。この場合、プロファイル情報PINFは、アクセス属性テーブルTABL1として使用される。また、例えば、アクセス属性テーブルTABL1のキャッシュライン番号CLは省かれてもよい。
図8は、アクセス属性テーブル生成の一例を示す。なお、図8の動作は、ハードウエアのみで実現されてもよく、ハードウエアをソフトウエアにより制御することにより実現されてもよい。図8の動作では、ハードウエアプリフェッチ機能の動作条件に対応する所定のアクセスパターンは、アクセス先が2ライン未満の変化量で変化するアクセスパターンである。図8の動作は、図2に示したステップS200に対応する。
図8では、要素番号iのキャッシュライン番号CLをキャッシュライン番号CL(i)とも称する。例えば、配列データAのうち、i番目にアクセスされるデータは、キャッシュライン番号CL(i)のキャッシュラインに記憶される。
ステップS210では、アクセス属性検出部32は、要素番号iを1に設定する。また、アクセス属性検出部32は、プロファイル情報PINFから要素番号iのキャッシュライン番号CL(i)を取得する。例えば、アクセス属性検出部32は、要素番号iが1の場合、プロファイル情報PINFの要素番号1のキャッシュライン番号CL(1)を、プロファイル情報PINFから読み出す。
なお、アクセス属性検出部32は、プロファイル情報PINFがキャッシュライン番号CLの代わりに論理アドレスaddrを有する場合、図3で説明した式(1)を用いて、要素番号iのキャッシュライン番号CL(i)を算出する。
ステップS212では、アクセス属性検出部32は、要素番号iをカウントアップする。例えば、アクセス属性検出部32は、要素番号iの値に1を加算し、要素番号iを更新する。
ステップS214では、アクセス属性検出部32は、プロファイル情報PINFから要素番号iのキャッシュライン番号CL(i)を取得する。例えば、アクセス属性検出部32は、プロファイル情報PINFの要素番号iのキャッシュライン番号CL(i)を、プロファイル情報PINFから読み出す。
ステップS216では、アクセス属性検出部32は、キャッシュライン番号CL(i)とキャッシュライン番号CL(i−1)との差の絶対値が2未満か否かを判定する。なお、キャッシュライン番号CL(i−1)は、例えば、要素番号iが2の場合、ステップS210で取得済みである。また、要素番号iが3以上の場合、キャッシュライン番号CL(i−1)は、前回のステップS216で取得済みである。
キャッシュライン番号CL(i)とキャッシュライン番号CL(i−1)との差の絶対値が2未満の場合(ステップS216のYes)、アクセス属性検出部32の動作は、ステップS218に移る。すなわち、キャッシュライン番号CL(i)、CL(i−1)に基づいて予測されるアクセスパターンがハードウエアプリフェッチ機能の動作条件に対応する所定の規則を満たしている場合、アクセス属性検出部32の動作は、ステップS218に移る。換言すれば、配列データAのアクセス先がハードウエアプリフェッチ機能の動作条件に対応する所定の規則に従って変化する場合、アクセス属性検出部32の動作は、ステップS218に移る。
一方、キャッシュライン番号CL(i)とキャッシュライン番号CL(i−1)との差の絶対値が2以上の場合(ステップS216のNo)、アクセス属性検出部32の動作は、ステップS220に移る。すなわち、キャッシュライン番号CL(i)、CL(i−1)に基づいて予測されるアクセスパターンがハードウエアプリフェッチ機能の動作条件に対応する所定の規則を満たさない場合、アクセス属性検出部32の動作は、ステップS220に移る。換言すれば、配列データAのアクセス先の変化がハードウエアプリフェッチ機能の動作条件に対応する所定の規則と異なる場合、アクセス属性検出部32の動作は、ステップS220に移る。
ステップS218では、アクセス属性検出部32は、アクセス先がハードウエアプリフェッチ機能の動作条件に対応する所定の規則に従って変化することを示す情報Sを要素番号iのアクセス属性Zに格納する。例えば、アクセス属性検出部32は、要素番号iのアクセス属性Zに、連続アクセスを示す情報Sを設定する。
ステップS220では、アクセス属性検出部32は、アクセス先の変化がハードウエアプリフェッチ機能の動作条件に対応する所定の規則に従っていないことを示す情報Xを要素番号iのアクセス属性Zに格納する。例えば、アクセス属性検出部32は、要素番号iのアクセス属性Zに、不連続アクセスを示す情報Xを設定する。
ステップS222では、アクセス属性検出部32は、要素番号iが配列データAの配列サイズnと同じ値か否かを判定する。要素番号iが配列データAの配列サイズnと同じ値でない場合(ステップS222のNo)、アクセス属性検出部32の動作は、ステップS212に戻る。
一方、要素番号iが配列データAの配列サイズnと同じ値である場合(ステップS222のYes)、アクセス属性検出部32の動作は、終了する。これにより、例えば、図7に示したアクセス属性テーブルTABL1が生成される。
なお、アクセス属性検出部32の動作は、この例に限定されない。例えば、アクセス属性検出部32は、ステップS216において、キャッシュライン番号CL(i)とキャッシュライン番号CL(i−1)との差が予め決められたライン幅か否かを判定してもよい。すなわち、アクセス属性検出部32は、キャッシュメモリ130のキャッシュラインをアクセス単位とした場合のアクセス先が一定のライン幅で昇順および降順のいずれか一方向に変化するか否かを判定してもよい。例えば、キャッシュライン番号CL(i)とキャッシュライン番号CL(i−1)との差が予め決められたライン幅の場合、ステップS218が実行される。
あるいは、アクセス属性検出部32は、ステップS216において、論理アドレスで示されるアクセス先が一定のアクセス幅で昇順および降順のいずれか一方向に変化するか否かを判定してもよい。すなわち、アクセス属性検出部32は、アクセス先が一定のアクセス幅で昇順および降順のいずれか一方向に変化するデータを検出してもよい。例えば、アクセス先が一定のアクセス幅で昇順および降順のいずれか一方向に変化するデータに対しては、ステップS218が実行される。
図9は、連続長管理テーブルTABL2の一例を示す。なお、図9では、連続長管理テーブルTABL2とアクセス属性テーブルTABL1との関係を見やすくするために、アクセス属性テーブルTABL1を括弧内に示す。連続長管理テーブルTABL2は、例えば、プリフェッチ命令の挿入単位毎に生成される。例えば、連続長管理テーブルTABL2は、プリフェッチ命令の挿入対象のデータに対して、ループ処理毎に生成される。
例えば、配列データAの連続長管理テーブルTABL2は、所定のアクセスパターンを満たすデータが連続する長さ(連続長L)を示す情報と、所定のアクセスパターンを満たすデータの長さ(連続長L)毎の発生回数cを示す情報とを含む。例えば、連続長Lの最大値は、配列データAの配列サイズnから1を減算した値である。図9に示した連続長管理テーブルTABL2は、配列データAの配列サイズnが16の場合の連続長管理テーブルTABL2の一例である。
アクセス属性テーブルTABL1では、アクセス属性Sが3回連続している部分(連続長L=3)は、1箇所であり、アクセス属性Sが1回の部分(連続長L=1)は、2箇所であり、アクセス属性Sが4回連続している部分(連続長L=4)は、1箇所である。また、アクセス属性Xの個数は、6である。
したがって、連続長管理テーブルTABL2では、連続長Lが0のアクセスパターンの出現回数cは、6に設定される。また、連続長Lが1のアクセスパターンの出現回数cは、2に設定される。そして、連続長Lが3のアクセスパターンの出現回数cは、1に設定され、連続長Lが4のアクセスパターンの出現回数cは、1に設定される。なお、連続長Lが2、5、・・・、15のアクセスパターンの出現回数cは、0に設定される。
連続長管理テーブルTABL2は、例えば、配列データA(プリフェッチ命令の挿入対象のデータ)の評価値を算出する際に参照される。例えば、評価値算出部34は、式(2)で表される評価値(式(2)のVa)を算出してもよい。
Va=Σ(L(i)×c(i)) ・・・(2)
なお、式(2)のL(i)およびc(i)は、連続長管理テーブルTABL2のi番目の連続長Lおよび発生回数cをそれぞれ示す。また、式(2)のiは、例えば、連続長管理テーブルTABL2の要素数がm個(図9の例では、16個)の場合、1からmまでの整数である。式(2)で表される評価値Vaは、連続長Lと発生回数cとに基づいて算出される評価値の一例である。
なお、連続長管理テーブルTABL2の構成は、この例に限定されない。例えば、連続長管理テーブルTABL2の連続長Lの最大値は、配列データAの配列サイズnから1を減算した値より小さくてもよい。例えば、配列データAの配列サイズnが16の場合、連続長Lの最大値は、配列サイズnの半分程度(図9の例では、8)でもよい。この場合、アクセス属性Sが連続長Lの最大値(例えば、8)以上連続している部分の数が、連続長Lが最大値のアクセスパターンの出現回数cとして設定される。
また、連続長管理テーブルTABL2は、連続長Lの大きさに応じた重み係数を有してもよい。この場合、例えば、評価値算出部34は、式(3)で表される評価値Vaを算出してもよい。なお、式(3)のiおよびc(i)の意味は、式(2)と同一または同様である。また、式(3)のw(i)は、連続長L(i)の重み係数を示す。
Va=Σ(c(i)×w(i)) ・・・(3)
重み係数w(i)は、固定値でもよいし、ユーザにより任意に設定される値でもよい。なお、式(3)で表される評価値Vaは、重み係数w(i)が連続長L(i)毎に設定されるため、連続長Lと発生回数cとに基づいて算出される評価値の一例である。
例えば、コンパイル装置10は、連続長Lと発生回数cとに基づいて算出される評価値を使用することにより、連続長Lのみに基づいて算出される評価値を使用する場合に比べて、配列データAに対するハードウエアプリフェッチの実行頻度を正確に判定できる。
図10は、連続長管理テーブル生成の一例を示す。なお、図10の動作は、ハードウエアのみで実現されてもよく、ハードウエアをソフトウエアにより制御することにより実現されてもよい。図10の動作では、例えば、連続長管理テーブルTABL2の連続長Lの最大値は、配列データAの配列サイズnから1を減算した値である。図10の動作は、図2に示したステップS300の一部の動作に対応する。例えば、ステップS310−S324は、評価値算出部34により実行される。なお、例えば、ステップS310−S324は、評価値算出部34以外のモジュール(例えば、アクセス属性検出部32)により実行されてもよい。
図10の出現回数c(L)は、連続長Lのアクセスパターンの出現回数cを示す。例えば、図9に示した連続長管理テーブルTABL2において、出現回数c(0)は、連続長Lが0のアクセスパターンの出現回数c(図9では、6)を示し、出現回数c(1)は、連続長Lが1のアクセスパターンの出現回数c(図9では、2)を示す。また、図10の要素番号iは、アクセス属性テーブルTABL1の要素番号iを示す。
ステップS310では、評価値算出部34は、初期データを設定する。例えば、評価値算出部34は、アクセス属性テーブルTABL1の要素番号iを2に設定し、フラグBflag、連続長Lおよび出現回数c(j)を0に設定する。jは、0から”n−1”までの整数である。フラグBflagは、直前の要素のアクセス属性Zを保持するフラグである。
ステップS312では、評価値算出部34は、アクセス属性テーブルTABL1の要素番号iのアクセス属性Z(i)が連続アクセスを示すアクセス属性Sか否かを判定する。アクセス属性Z(i)がアクセス属性Sの場合(ステップS312のYes)、評価値算出部34の動作は、ステップS314に移る。一方、アクセス属性Z(i)がアクセス属性Sでない場合(ステップS312のNo)、評価値算出部34の動作は、ステップS320に移る。すなわち、アクセス属性Z(i)が不連続を示すアクセス属性Xの場合、評価値算出部34の動作は、ステップS320に移る。
ステップS314では、評価値算出部34は、フラグBflagが1か否かを判定する。すなわち、評価値算出部34は、直前の要素のアクセス属性Z(i−1)がアクセス属性Sか否かを判定する。フラグBflagが1の場合(ステップS314のYes)、評価値算出部34の動作は、ステップS316に移る。すなわち、直前の要素のアクセス属性Z(i−1)がアクセス属性Sの場合、評価値算出部34の動作は、ステップS316に移る。
一方、フラグBflagが1でない場合(ステップS314のNo)、評価値算出部34の動作は、ステップS318に移る。すなわち、直前の要素のアクセス属性Z(i−1)がアクセス属性Xの場合、評価値算出部34の動作は、ステップS318に移る。
ステップS316では、評価値算出部34は、連続長Lの値をカウントアップする。例えば、評価値算出部34は、連続長Lの値に1を加算し、連続長Lを更新する。すなわち、評価値算出部34は、アクセス属性Z(i)およびアクセス属性Z(i−1)の両方がアクセス属性Sの場合(連続アクセスが継続する場合)、連続長Lの値をカウントアップする。
ステップS318では、評価値算出部34は、連続長LおよびフラグBFlagの値を1に設定する。すなわち、評価値算出部34は、アクセス属性Z(i)およびアクセス属性Z(i−1)がそれぞれアクセス属性S、Xの場合(連続アクセスが開始される場合)、連続長LおよびフラグBFlagの値を1に設定する。
ステップS320では、評価値算出部34は、出現回数c(L)をカウントアップする。例えば、評価値算出部34は、出現回数c(L)の値に1を加算し、出現回数c(L)を更新する。これにより、連続長Lのアクセスパターンの出現回数がカウントされる。出現回数c(L)を更新した後、評価値算出部34は、連続長LおよびフラグBFlagの値を0に設定する。
すなわち、評価値算出部34は、アクセス属性Z(i)がアクセス属性Xの場合(不連続アクセスの場合)、出現回数c(L)をカウントアップした後、連続長LおよびフラグBFlagの値を0に初期化する。
ステップS322では、評価値算出部34は、要素番号iをカウントアップする。例えば、評価値算出部34は、要素番号iの値に1を加算し、要素番号iを更新する。
ステップS324では、評価値算出部34は、要素番号iが配列データAの配列サイズnと同じ値か否かを判定する。要素番号iが配列データAの配列サイズnと同じ値でない場合(ステップS324のNo)、評価値算出部34の動作は、ステップS312に戻る。
一方、要素番号iが配列データAの配列サイズnと同じ値である場合(ステップS324のYes)、評価値算出部34による連続長管理テーブル生成の動作は、終了する。これにより、例えば、図9に示した連続長管理テーブルTABL2が生成される。例えば、評価値算出部34は、生成した連続長管理テーブルTABL2を参照して、評価値を算出する。
なお、評価値算出部34の動作は、この例に限定されない。例えば、評価値算出部34は、連続長管理テーブルTABL2の連続長Lの最大値が”n−1”より小さい場合、ステップS316において、連続長Lが最大値を超えないように、連続長Lを更新する。例えば、評価値算出部34は、ステップS316を実行する前に、連続長Lが最大値か否かを判定する。そして、連続長Lが最大値の場合、評価値算出部34は、ステップS316を実行せずに、ステップS322を実行する。
図11は、図1に示したコンパイル装置10のハードウエア構成の一例を示す。なお、図1から図10で説明した要素と同一または同様の要素については、同一または同様の符号を付し、これ等については、詳細な説明を省略する。
コンピュータ装置CPは、プロセッサPUと、メモリMEMと、ハードディスク装置HDDと、周辺機器インタフェースPIFと、出力部OUTUと、入力部INUと、光学ドライブ装置ODRとを有する。プロセッサPUと、メモリMEMと、ハードディスク装置HDDと、周辺機器インタフェースPIFと、出力部OUTUと、入力部INUと、光学ドライブ装置ODRとは、バスBUSを介して互いに接続される。
コンピュータ装置CPは、例えば、周辺機器インタフェースPIFを介して演算処理装置100と接続可能である。光学ドライブ装置ODRは、光ディスク等のリムーバブルディスクDISを装着可能であり、装着したリムーバブルディスクDISに記録された情報の読み出しおよび記録を実行する。また、プロセッサPUと、メモリMEMと、ハードディスク装置HDDと、周辺機器インタフェースPIFと、出力部OUTUと、入力部INUとは、例えば、コンパイル装置10の機能を実現する。
出力部OUTUは、例えば、プロセッサPUにより実行された処理の結果を出力するユニットである。出力部OUTUの一例は、ディスプレイ、タッチパネル等である。また、入力部INUは、例えば、ユーザからの操作(例えば、翻訳オプションの指定)を受け、コンピュータ装置CPにデータを入力するユニットである。入力部INUの一例は、キーボード、マウス、タッチパネル等である。
メモリMEMは、例えば、コンピュータ装置CPのオペレーティングシステムを格納する。また、メモリMEMは、例えば、図2、図4、図5、図8、図10等に示した動作をプロセッサPUが実行するためのコンパイルプログラム等のアプリケーションプログラムを格納する。なお、コンパイルプログラム等のアプリケーションプログラムは、ハードディスク装置HDDに格納されてもよい。
コンパイルプログラム等のアプリケーションプログラムは、例えば、光ディスクなどのリムーバブルディスクDISに記録して頒布することができる。例えば、コンピュータ装置CPは、コンパイルプログラム等のアプリケーションプログラムを、リムーバブルディスクDISから光学ドライブ装置ODRを介して読み出し、メモリMEMやハードディスク装置HDDに格納してもよい。また、コンピュータ装置CPは、コンパイルプログラム等のアプリケーションプログラムを、インターネット等のネットワークに接続する通信装置(図示せず)を介してダウンロードし、メモリMEMやハードディスク装置HDDに格納してもよい。
例えば、プロセッサPUは、メモリMEM等に格納されたコンパイルプログラムを実行することにより、図1に示したコンパイル装置10の機能を実現する。すなわち、コンパイル装置10は、プロセッサPUと、メモリMEMと、ハードディスク装置HDDと、周辺機器インタフェースPIFと、出力部OUTUと、入力部INUとの協同により実現することができる。
なお、コンパイル装置10のハードウエア構成は、図11の例に限定されない。また、図1から図11に示した実施形態のコンパイル方法等は、例えば、データをストアする際にストア用のプリフェッチ命令を使用するプロセッサに対するコンパイル処理において、ストア用のプリフェッチ命令にも適用されてもよい。
以上、図1から図11に示した実施形態のコンパイルプログラム、コンパイル方法およびコンパイル装置では、プリフェッチ命令の挿入対象のデータにプリフェッチ命令を挿入するか否かを、メモリアクセスに関するプロファイル情報に基づいて判定する。
例えば、アクセス属性検出部32は、プリフェッチ命令の挿入対象のデータである対象データの中から、所定のアクセスパターンを満たすデータを、対象データのメモリアクセスに関するプロファイル情報に基づいて検出する。所定のアクセスパターンは、例えば、ハードウエアプリフェッチ機能の動作条件に対応するアクセスパターンである。
そして、評価値算出部34は、所定のアクセスパターンを満たすデータが連続する長さに基づいて、対象データの評価値を算出する。また、プリフェッチ命令挿入部36は、対象データに対するプリフェッチ命令の挿入を抑止するか否かを評価値に基づいて判定し、判定結果に基づいて中間コードを更新する。例えば、プリフェッチ命令挿入部36は、評価値が予め決められた閾値未満の対象データに対してはプリフェッチ命令を挿入し、評価値が閾値を超えた対象データに対してはプリフェッチ命令の挿入を抑止して、中間コードを更新する。
これにより、この実施形態では、コンパイル処理でプリフェッチ命令を機械語プログラムに挿入する際に、不要なプリフェッチ命令の挿入を低減できる。この結果、この実施形態では、不要なプリフェッチ命令の挿入による演算処理装置100の性能低下を低減できる。
ここで、例えば、評価値が予め決められた閾値未満の対象データでは、ハードウエアプリフェッチが実行されるデータの割合が所定の割合より少ない。したがって、プリフェッチ命令が挿入された場合、ハードウエアプリフェッチとプリフェッチ命令によるプリフェッチとの両方が実行されるデータの割合は、所定の割合より少ない。この場合、プリフェッチ命令を挿入することによるメリット(例えば、データを参照するときの待ち時間短縮)の方が、冗長なプリフェッチ命令が挿入されることによるデメリットより大きい。このため、この実施形態では、評価値が閾値未満の対象データに対してはプリフェッチ命令を挿入する。これにより、演算処理装置100の性能を向上できる。
また、例えば、評価値が予め決められた閾値を超えた対象データでは、ハードウエアプリフェッチが実行されるデータの割合が所定の割合より多い。したがって、プリフェッチ命令が挿入された場合、ハードウエアプリフェッチとプリフェッチ命令によるプリフェッチとの両方が実行されるデータの割合は、所定の割合より多い。この場合、冗長なプリフェッチ命令が挿入されることによるデメリット(例えば、転送速度の低下等の性能低下)の方が、プリフェッチ命令を挿入することによるメリットより大きい。このため、この実施形態では、評価値が閾値を超えた対象データに対してはプリフェッチ命令の挿入を抑止する。これにより、この実施形態では、不要なプリフェッチ命令の挿入による演算処理装置100の性能低下を低減できる。
以上の実施形態において説明した発明を整理して、付記として開示する。
(付記1)
メモリに記憶されたデータを事前にキャッシュメモリに転送するハードウエアプリフェッチ機能を有するプロセッサで実行可能な機械語プログラムにソースプログラムを変換するコンパイル処理をコンピュータに実行させるコンパイルプログラムにおいて、
前記ソースプログラムを中間コードに変換し、
前記メモリに記憶された前記データを事前に前記キャッシュメモリに転送するプリフェッチ命令の挿入対象の前記データである対象データの中から、前記ハードウエアプリフェッチ機能の動作条件に対応するアクセスパターンを満たす前記データを、前記対象データのメモリアクセスに関するプロファイル情報に基づいて検出し、
前記アクセスパターンを満たす前記データが連続する長さに基づいて、前記対象データの評価値を算出し、
前記対象データに対する前記プリフェッチ命令の挿入を抑止するか否かを前記評価値に基づいて判定し、判定結果に基づいて前記中間コードを更新し、
更新された前記中間コードを前記機械語プログラムに変換する、
処理をコンピュータに実行させるコンパイルプログラム。
(付記2)
付記1に記載のコンパイルプログラムにおいて、
前記長さと前記アクセスパターンを満たす前記データの前記長さ毎の発生回数とに基づいて、前記評価値を算出する処理をコンピュータに実行させるコンパイルプログラム。
(付記3)
付記1または付記2に記載のコンパイルプログラムにおいて、
前記アクセスパターンを満たす前記データとして、前記キャッシュメモリのキャッシュラインをアクセス単位とした場合のアクセス先の変化が2ライン未満の変化量の前記データを検出する処理をコンピュータに実行させるコンパイルプログラム。
(付記4)
付記1または付記2に記載のコンパイルプログラムにおいて、
前記アクセスパターンを満たす前記データとして、アクセス先が一定のアクセス幅で昇順および降順のいずれか一方向に変化する前記データを検出する処理をコンピュータに実行させるコンパイルプログラム。
(付記5)
付記1ないし付記4のいずれか1項に記載のコンパイルプログラムにおいて、
前記対象データの中の各データのアクセスの順番を示すインデックスとアクセス先を示すアドレス情報とを含む前記プロファイル情報を、前記ソースプログラムを実行した前記プロセッサから前記対象データ毎に出力させるオブジェクトコードを生成する処理をコンピュータに実行させるコンパイルプログラム。
(付記6)
メモリに記憶されたデータを事前にキャッシュメモリに転送するハードウエアプリフェッチ機能を有するプロセッサで実行可能な機械語プログラムにソースプログラムを変換するコンパイル方法において、
コンピュータは、
前記ソースプログラムを中間コードに変換し、
前記メモリに記憶された前記データを事前に前記キャッシュメモリに転送するプリフェッチ命令の挿入対象の前記データである対象データの中から、前記ハードウエアプリフェッチ機能の動作条件に対応するアクセスパターンを満たす前記データを、前記対象データのメモリアクセスに関するプロファイル情報に基づいて検出し、
前記アクセスパターンを満たす前記データが連続する長さに基づいて、前記対象データの評価値を算出し、
前記対象データに対する前記プリフェッチ命令の挿入を抑止するか否かを前記評価値に基づいて判定し、判定結果に基づいて前記中間コードを更新し、
更新した前記中間コードを前記機械語プログラムに変換する
ことを特徴とするコンパイル方法。
(付記7)
付記6に記載のコンパイル方法において、
前記コンピュータは、前記長さと前記アクセスパターンを満たす前記データの前記長さ毎の発生回数とに基づいて、前記評価値を算出することを特徴とするコンパイル方法。
(付記8)
付記6または付記7に記載のコンパイル方法において、
前記コンピュータは、前記アクセスパターンを満たす前記データとして、前記キャッシュメモリのキャッシュラインをアクセス単位とした場合のアクセス先の変化が2ライン未満の変化量の前記データを検出することを特徴とするコンパイル方法。
(付記9)
付記6または付記7に記載のコンパイル方法において、
前記コンピュータは、前記アクセスパターンを満たす前記データとして、アクセス先が一定のアクセス幅で昇順および降順のいずれか一方向に変化する前記データを検出することを特徴とするコンパイル方法。
(付記10)
付記6ないし付記9のいずれか1項に記載のコンパイル方法において、
前記コンピュータは、前記対象データの中の各データのアクセスの順番を示すインデックスとアクセス先を示すアドレス情報とを含む前記プロファイル情報を、前記ソースプログラムを実行した前記プロセッサから前記対象データ毎に出力させるオブジェクトコードを生成することを特徴とするコンパイル方法。
(付記11)
メモリに記憶されたデータを事前にキャッシュメモリに転送するハードウエアプリフェッチ機能を有するプロセッサで実行可能な機械語プログラムにソースプログラムを変換するコンパイル処理を実行するコンパイル装置において、
前記ソースプログラムを中間コードに変換する変換部と、
前記中間コードを更新する最適化部と、
更新された前記中間コードを前記機械語プログラムに変換するコード生成部とを有し、
前記最適化部は、
前記メモリに記憶された前記データを事前に前記キャッシュメモリに転送するプリフェッチ命令の挿入対象の前記データである対象データの中から、前記ハードウエアプリフェッチ機能の動作条件に対応するアクセスパターンを満たす前記データを、前記対象データのメモリアクセスに関するプロファイル情報に基づいて検出する検出部と、
前記アクセスパターンを満たす前記データが連続する長さに基づいて、前記対象データの評価値を算出する算出部と、
前記対象データに対する前記プリフェッチ命令の挿入を抑止するか否かを前記評価値に基づいて判定し、判定結果に基づいて前記中間コードを更新する更新部とを有することを特徴とするコンパイル装置。
(付記12)
付記11に記載のコンパイル装置において、
前記算出部は、前記長さと前記アクセスパターンを満たす前記データの前記長さ毎の発生回数とに基づいて、前記評価値を算出することを特徴とするコンパイル装置。
(付記13)
付記11または付記12に記載のコンパイル装置において、
前記検出部は、前記アクセスパターンを満たす前記データとして、前記キャッシュメモリのキャッシュラインをアクセス単位とした場合のアクセス先の変化が2ライン未満の変化量の前記データを検出することを特徴とするコンパイル装置。
(付記14)
付記11または付記12に記載のコンパイル装置において、
前記検出部は、前記アクセスパターンを満たす前記データとして、アクセス先が一定のアクセス幅で昇順および降順のいずれか一方向に変化する前記データを検出することを特徴とするコンパイル装置。
(付記15)
付記11ないし付記14のいずれか1項に記載のコンパイル装置において、
前記最適化部は、前記対象データの中の各データのアクセスの順番を示すインデックスとアクセス先を示すアドレス情報とを含む前記プロファイル情報を、前記ソースプログラムを実行した前記プロセッサから前記対象データ毎に出力させるオブジェクトコードを生成することを特徴とするコンパイル装置。
(付記16)
メモリに記憶されたデータを事前にキャッシュメモリに転送するハードウエアプリフェッチ機能を有するプロセッサで実行可能な機械語プログラムにソースプログラムを変換するコンパイル処理をコンピュータに実行させるコンパイルプログラムを記録したコンピュータ読み取り可能な記録媒体において、
前記ソースプログラムを中間コードに変換し、
前記メモリに記憶された前記データを事前に前記キャッシュメモリに転送するプリフェッチ命令の挿入対象の前記データである対象データの中から、前記ハードウエアプリフェッチ機能の動作条件に対応するアクセスパターンを満たす前記データを、前記対象データのメモリアクセスに関するプロファイル情報に基づいて検出し、
前記アクセスパターンを満たす前記データが連続する長さに基づいて、前記対象データの評価値を算出し、
前記対象データに対する前記プリフェッチ命令の挿入を抑止するか否かを前記評価値に基づいて判定し、判定結果に基づいて前記中間コードを更新し、
更新された前記中間コードを前記機械語プログラムに変換する、
処理をコンピュータに実行させるコンパイルプログラムを記録したコンピュータ読み取り可能な記録媒体。
(付記17)
付記16に記載のコンピュータ読み取り可能な記録媒体において、
前記長さと前記アクセスパターンを満たす前記データの前記長さ毎の発生回数とに基づいて、前記評価値を算出する処理をコンピュータに実行させるコンパイルプログラムを記録したコンピュータ読み取り可能な記録媒体。
(付記18)
付記16または付記17に記載のコンピュータ読み取り可能な記録媒体において、
前記アクセスパターンを満たす前記データとして、前記キャッシュメモリのキャッシュラインをアクセス単位とした場合のアクセス先の変化が2ライン未満の変化量の前記データを検出する処理をコンピュータに実行させるコンパイルプログラムを記録したコンピュータ読み取り可能な記録媒体。
(付記19)
付記16または付記17に記載のコンピュータ読み取り可能な記録媒体において、
前記アクセスパターンを満たす前記データとして、アクセス先が一定のアクセス幅で昇順および降順のいずれか一方向に変化する前記データを検出する処理をコンピュータに実行させるコンパイルプログラムを記録したコンピュータ読み取り可能な記録媒体。
(付記20)
付記16ないし付記19のいずれか1項に記載のコンピュータ読み取り可能な記録媒体において、
前記対象データの中の各データのアクセスの順番を示すインデックスとアクセス先を示すアドレス情報とを含む前記プロファイル情報を、前記ソースプログラムを実行した前記プロセッサから前記対象データ毎に出力させるオブジェクトコードを生成する処理をコンピュータに実行させるコンパイルプログラムを記録したコンピュータ読み取り可能な記録媒体。
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
10‥コンパイル装置;20‥コード変換部;30‥最適化部;32‥アクセス属性検出部;34‥評価値算出部;36‥プリフェッチ命令挿入部;40‥コード生成部;100‥演算処理装置;110‥命令デコーダ;120‥演算部;130‥キャッシュメモリ;140‥ハードウエアプリフェッチ制御装置;150‥メインメモリ;CP‥コンピュータ装置;DIS‥リムーバブルディスク;HDD‥ハードディスク装置;INU‥入力部;MEM‥メモリ;ODR‥光学ドライブ装置;OUTU‥出力部;PIF‥周辺機器インタフェース;PU‥プロセッサ

Claims (4)

  1. メモリに記憶されたデータを事前にキャッシュメモリに転送するハードウエアプリフェッチ機能を有するプロセッサで実行可能な機械語プログラムにソースプログラムを変換するコンパイル処理をコンピュータに実行させるコンパイルプログラムにおいて、
    前記ソースプログラムを中間コードに変換し、
    前記メモリに記憶された前記データを事前に前記キャッシュメモリに転送するプリフェッチ命令の挿入対象の前記データである対象データの中から、前記ハードウエアプリフェッチ機能の動作条件に対応するアクセスパターンを満たす前記データを、前記対象データのメモリアクセスに関するプロファイル情報に基づいて検出し、
    前記アクセスパターンを満たす前記データが連続する長さに基づいて、前記対象データの評価値を算出し、
    前記対象データに対する前記プリフェッチ命令の挿入を抑止するか否かを前記評価値に基づいて判定し、判定結果に基づいて前記中間コードを更新し、
    更新された前記中間コードを前記機械語プログラムに変換する、
    処理をコンピュータに実行させるコンパイルプログラム。
  2. 請求項1に記載のコンパイルプログラムにおいて、
    前記長さと前記アクセスパターンを満たす前記データの前記長さ毎の発生回数とに基づいて、前記評価値を算出する処理をコンピュータに実行させるコンパイルプログラム。
  3. メモリに記憶されたデータを事前にキャッシュメモリに転送するハードウエアプリフェッチ機能を有するプロセッサで実行可能な機械語プログラムにソースプログラムを変換するコンパイル方法において、
    コンピュータは、
    前記ソースプログラムを中間コードに変換し、
    前記メモリに記憶された前記データを事前に前記キャッシュメモリに転送するプリフェッチ命令の挿入対象の前記データである対象データの中から、前記ハードウエアプリフェッチ機能の動作条件に対応するアクセスパターンを満たす前記データを、前記対象データのメモリアクセスに関するプロファイル情報に基づいて検出し、
    前記アクセスパターンを満たす前記データが連続する長さに基づいて、前記対象データの評価値を算出し、
    前記対象データに対する前記プリフェッチ命令の挿入を抑止するか否かを前記評価値に基づいて判定し、判定結果に基づいて前記中間コードを更新し、
    更新した前記中間コードを前記機械語プログラムに変換する
    ことを特徴とするコンパイル方法。
  4. メモリに記憶されたデータを事前にキャッシュメモリに転送するハードウエアプリフェッチ機能を有するプロセッサで実行可能な機械語プログラムにソースプログラムを変換するコンパイル処理を実行するコンパイル装置において、
    前記ソースプログラムを中間コードに変換する変換部と、
    前記中間コードを更新する最適化部と、
    更新された前記中間コードを前記機械語プログラムに変換するコード生成部とを有し、
    前記最適化部は、
    前記メモリに記憶された前記データを事前に前記キャッシュメモリに転送するプリフェッチ命令の挿入対象の前記データである対象データの中から、前記ハードウエアプリフェッチ機能の動作条件に対応するアクセスパターンを満たす前記データを、前記対象データのメモリアクセスに関するプロファイル情報に基づいて検出する検出部と、
    前記アクセスパターンを満たす前記データが連続する長さに基づいて、前記対象データの評価値を算出する算出部と、
    前記対象データに対する前記プリフェッチ命令の挿入を抑止するか否かを前記評価値に基づいて判定し、判定結果に基づいて前記中間コードを更新する更新部とを有することを特徴とするコンパイル装置。
JP2014101654A 2014-05-15 2014-05-15 コンパイルプログラム、コンパイル方法およびコンパイル装置 Active JP6265041B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2014101654A JP6265041B2 (ja) 2014-05-15 2014-05-15 コンパイルプログラム、コンパイル方法およびコンパイル装置
US14/638,351 US9483244B2 (en) 2014-05-15 2015-03-04 Compiling method and compiling device

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014101654A JP6265041B2 (ja) 2014-05-15 2014-05-15 コンパイルプログラム、コンパイル方法およびコンパイル装置

Publications (2)

Publication Number Publication Date
JP2015219652A JP2015219652A (ja) 2015-12-07
JP6265041B2 true JP6265041B2 (ja) 2018-01-24

Family

ID=54538556

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014101654A Active JP6265041B2 (ja) 2014-05-15 2014-05-15 コンパイルプログラム、コンパイル方法およびコンパイル装置

Country Status (2)

Country Link
US (1) US9483244B2 (ja)
JP (1) JP6265041B2 (ja)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9104577B2 (en) * 2013-08-27 2015-08-11 International Business Machines Corporation Optimizing memory bandwidth consumption using data splitting with software caching
US10824342B2 (en) 2014-02-28 2020-11-03 Hewlett Packard Enterprise Development Lp Mapping mode shift between mapping modes that provides continuous application access to storage, wherein address range is remapped between said modes during data migration and said address range is also utilized bypass through instructions for direct access
US10824362B2 (en) * 2015-03-27 2020-11-03 Hewlett Packard Enterprise Development Lp File migration to persistent memory
CN107209720B (zh) 2015-04-02 2020-10-13 慧与发展有限责任合伙企业 用于页面高速缓存的系统及方法以及存储介质
JP6974722B2 (ja) * 2018-01-24 2021-12-01 富士通株式会社 コンパイラプログラム、コンパイル方法及びコンパイルする情報処理装置
US11204875B1 (en) 2020-07-17 2021-12-21 International Business Machines Corporation Software assisted data address prefetch
EP4206937A1 (en) * 2021-12-29 2023-07-05 Samsung Electronics Co., Ltd. Storage device including indirect access module, method of operating the same, and method of operating storage system including the same

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001166989A (ja) 1999-12-07 2001-06-22 Hitachi Ltd プリフェッチ機構を有するメモリシステム及びその動作方法
JP3969009B2 (ja) 2001-03-29 2007-08-29 株式会社日立製作所 ハードウェアプリフェッチシステム
US7669194B2 (en) * 2004-08-26 2010-02-23 International Business Machines Corporation Fine-grained software-directed data prefetching using integrated high-level and low-level code analysis optimizations
JP2006330813A (ja) 2005-05-23 2006-12-07 Hitachi Ltd プリフェッチ起動命令挿入機能を備えたコンパイラ装置
JP2008071128A (ja) * 2006-09-14 2008-03-27 Hitachi Ltd プリフェッチ制御方法及びコンパイル装置
US8260990B2 (en) 2007-11-19 2012-09-04 Qualcomm Incorporated Selective preclusion of a bus access request
US8285941B2 (en) * 2008-02-25 2012-10-09 International Business Machines Corporation Enhancing timeliness of cache prefetching
JP2009230374A (ja) 2008-03-21 2009-10-08 Fujitsu Ltd 情報処理装置,プログラム,及び命令列生成方法
JP5251688B2 (ja) 2009-04-02 2013-07-31 富士通株式会社 コンパイラプログラムおよびコンパイラ装置
JP5238797B2 (ja) 2010-12-20 2013-07-17 パナソニック株式会社 コンパイラ装置
GB2510763B (en) * 2011-12-29 2020-05-20 Intel Corp Multi-level memory with direct access

Also Published As

Publication number Publication date
US20150331677A1 (en) 2015-11-19
JP2015219652A (ja) 2015-12-07
US9483244B2 (en) 2016-11-01

Similar Documents

Publication Publication Date Title
JP6265041B2 (ja) コンパイルプログラム、コンパイル方法およびコンパイル装置
JP4934267B2 (ja) コンパイラ装置
JP4374221B2 (ja) コンピュータシステムおよび記録媒体
US5797013A (en) Intelligent loop unrolling
JP4844971B2 (ja) インタープリタの最適化をプログラム・コード変換の間に実行する方法及び装置
US20080127131A1 (en) Software solution for cooperative memory-side and processor-side data prefetching
WO2005078579A1 (ja) プログラム変換装置およびプログラム変換方法
JP6245031B2 (ja) コンパイルプログラム、コンパイル方法およびコンパイル装置
Fuchs et al. Loop-aware memory prefetching using code block working sets
JP6252348B2 (ja) 演算処理装置および演算処理装置の制御方法
JP2008293378A (ja) プログラム書き換え装置
JP6319739B2 (ja) インライニングのための方法及びそのコンピュータ・プログラム、並びに、当該インライニングを実行するためのコンピュータ
JP2021051724A (ja) デュアル空間パターンプリフェッチャについての装置、方法、およびシステム
JP2014112327A (ja) 変換プログラム、変換装置及び変換方法
JP5238797B2 (ja) コンパイラ装置
US20120159460A1 (en) Preferred compilation
JP2000207224A (ja) ソフトウェアプリフェッチ方法
JP2008071128A (ja) プリフェッチ制御方法及びコンパイル装置
JP6442967B2 (ja) 情報処理プログラム、情報処理装置、情報処理方法
JP6974722B2 (ja) コンパイラプログラム、コンパイル方法及びコンパイルする情報処理装置
KR101084728B1 (ko) 동적 암시 어드레싱 모드를 지원하는 파이프라인 방식의 프로세서
US20050144420A1 (en) Data processing apparatus and compiler apparatus
Huang et al. RLOP: a framework design for offset prefetching combined with reinforcement learning
WO2023237084A1 (zh) 一种数据预取方法、编译方法及相关装置
JP2009277243A (ja) コンパイラ装置およびオペレーティングシステム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170206

RD01 Notification of change of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7426

Effective date: 20170803

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20170803

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20170804

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20171117

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20171211

R150 Certificate of patent or registration of utility model

Ref document number: 6265041

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150