(57)【要約】【課題】  コンパイル処理でプリフェッチ命令を機械語プログラムに挿入する際に、不要なプリフェッチ命令の挿入を低減する。【解決手段】  コンパイルプログラムは、ソースプログラムを中間コードに変換し、メモリに記憶されたデータを事前にキャッシュメモリに転送するプリフェッチ命令の挿入対象のデータである対象データの中から、ハードウエアプリフェッチ機能の動作条件に対応するアクセスパターンを満たすデータを、対象データのメモリアクセスに関するプロファイル情報に基づいて検出し、アクセスパターンを満たすデータが連続する長さに基づいて、対象データの評価値を算出し、対象データに対するプリフェッチ命令の挿入を抑止するか否かを評価値に基づいて判定し、判定結果に基づいて中間コードを更新し、更新された中間コードを機械語プログラムに変換する、処理をコンピュータに実行させる。【選択図】  図２
2015219652.tif 000002
【特許請求の範囲】
【請求項１】
メモリに記憶されたデータを事前にキャッシュメモリに転送するハードウエアプリフェッチ機能を有するプロセッサで実行可能な機械語プログラムにソースプログラムを変換するコンパイル処理をコンピュータに実行させるコンパイルプログラムにおいて、
前記ソースプログラムを中間コードに変換し、
前記メモリに記憶された前記データを事前に前記キャッシュメモリに転送するプリフェッチ命令の挿入対象の前記データである対象データの中から、前記ハードウエアプリフェッチ機能の動作条件に対応するアクセスパターンを満たす前記データを、前記対象データのメモリアクセスに関するプロファイル情報に基づいて検出し、
前記アクセスパターンを満たす前記データが連続する長さに基づいて、前記対象データの評価値を算出し、
前記対象データに対する前記プリフェッチ命令の挿入を抑止するか否かを前記評価値に基づいて判定し、判定結果に基づいて前記中間コードを更新し、
更新された前記中間コードを前記機械語プログラムに変換する、
処理をコンピュータに実行させるコンパイルプログラム。
【請求項２】
請求項１に記載のコンパイルプログラムにおいて、
前記長さと前記アクセスパターンを満たす前記データの前記長さ毎の発生回数とに基づいて、前記評価値を算出する処理をコンピュータに実行させるコンパイルプログラム。
【請求項３】
メモリに記憶されたデータを事前にキャッシュメモリに転送するハードウエアプリフェッチ機能を有するプロセッサで実行可能な機械語プログラムにソースプログラムを変換するコンパイル方法において、
コンピュータは、
前記ソースプログラムを中間コードに変換し、
前記メモリに記憶された前記データを事前に前記キャッシュメモリに転送するプリフェッチ命令の挿入対象の前記データである対象データの中から、前記ハードウエアプリフェッチ機能の動作条件に対応するアクセスパターンを満たす前記データを、前記対象データのメモリアクセスに関するプロファイル情報に基づいて検出し、
前記アクセスパターンを満たす前記データが連続する長さに基づいて、前記対象データの評価値を算出し、
前記対象データに対する前記プリフェッチ命令の挿入を抑止するか否かを前記評価値に基づいて判定し、判定結果に基づいて前記中間コードを更新し、
更新した前記中間コードを前記機械語プログラムに変換する
ことを特徴とするコンパイル方法。
【請求項４】
メモリに記憶されたデータを事前にキャッシュメモリに転送するハードウエアプリフェッチ機能を有するプロセッサで実行可能な機械語プログラムにソースプログラムを変換するコンパイル処理を実行するコンパイル装置において、
前記ソースプログラムを中間コードに変換する変換部と、
前記中間コードを更新する最適化部と、
更新された前記中間コードを前記機械語プログラムに変換するコード生成部とを有し、
前記最適化部は、
前記メモリに記憶された前記データを事前に前記キャッシュメモリに転送するプリフェッチ命令の挿入対象の前記データである対象データの中から、前記ハードウエアプリフェッチ機能の動作条件に対応するアクセスパターンを満たす前記データを、前記対象データのメモリアクセスに関するプロファイル情報に基づいて検出する検出部と、
前記アクセスパターンを満たす前記データが連続する長さに基づいて、前記対象データの評価値を算出する算出部と、
前記対象データに対する前記プリフェッチ命令の挿入を抑止するか否かを前記評価値に基づいて判定し、判定結果に基づいて前記中間コードを更新する更新部とを有することを特徴とするコンパイル装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンパイルプログラム、コンパイル方法およびコンパイル装置に関する。
【背景技術】
【０００２】
コンパイル装置は、例えば、ソースプログラムをプロセッサ等の演算処理装置で実行可能な機械語プログラムに変換するコンパイル処理を実行する。演算処理装置は、例えば、コンパイル処理により生成された機械語プログラムの命令をデコードするデコード部と、デコードされた命令に基づく演算を実行する演算部と、演算部と主記憶装置であるメインメモリとの間に配置されたキャッシュメモリとを有する。演算部は、例えば、メインメモリやキャッシュメモリに記憶されたデータを参照して、演算を実行する。キャッシュメモリは、例えば、演算部により参照されたデータを記憶する。
【０００３】
演算処理装置は、例えば、キャッシュメモリに記憶されたデータを参照することにより、メインメモリに記憶されたデータを参照するときに比べて、データを参照するときの待ち時間を短縮できる。なお、例えば、配列等の大規模なデータを使用する数値計算処理では、データの局所性が低いため、キャッシュメモリのヒット率が低下する。この場合、キャッシュメモリが有効に使用されないため、データを参照するときの待ち時間の短縮効果は小さい。
【０００４】
キャッシュメモリのヒット率低下に対する解決手段として、例えば、メインメモリに記憶されたデータを事前にキャッシュメモリに転送するプリフェッチが用いられる（例えば、特許文献１−７参照）。プリフェッチの実現方法としては、ソフトウエアによるソフトウエアプリフェッチと、ハードウエアによるハードウエアプリフェッチとが知られている。
【０００５】
例えば、ソフトウエアプリフェッチでは、コンパイル装置は、メインメモリに記憶されたデータを事前にキャッシュメモリに転送する命令（以下、プリフェッチ命令とも称する）を機械語プログラムに挿入する。一方、ハードウエアプリフェッチでは、ハードウエアプリフェッチ機構等のハードウエアが演算処理装置内に設けられる。例えば、ハードウエアプリフェッチ機構は、連続的なメモリアクセスが実行されると判定した場合、次にアクセスされるデータを予測し、メインメモリに記憶されたデータを事前にキャッシュメモリに転送する。
【０００６】
なお、例えば、ハードウエアプリフェッチ機構を有する演算処理装置では、ソフトウエアプリフェッチを適用したにも拘わらず、演算処理装置の性能が低下する場合がある。例えば、ハードウエアプリフェッチ機構によるプリフェッチとプリフェッチ命令によるプリフェッチとの両方が同じアドレスのデータに対して実行される場合がある。すなわち、不要なプリフェッチ命令が機械語プログラムに挿入される場合がある。この場合、例えば、命令数の増加、スケジューリングの処理効率低下、バスの消費量の増加による転送速度の低下等の性能低下を引き起こすおそれがある。
【０００７】
このため、ハードウエアプリフェッチとソフトウエアプリフェッチとを効率よく両立させて、演算処理装置の性能を向上させる技術が提案されている（例えば、特許文献１参照）。この種の演算処理装置では、例えば、ハードウエアプリフェッチの対象であるか否かを示す指示情報を付加したメモリアクセス命令が使用される。例えば、コンパイル処理では、連続的なメモリアクセスが発生するメモリアクセス命令を検出した場合、指示情報を付加したメモリアクセス命令を生成する。
【０００８】
このため、演算処理装置は、例えば、指示情報を付加したメモリアクセス命令をデコード可能なデコード部と、指示情報を付加したメモリアクセス命令を実行可能な演算部とを有する。さらに、演算処理装置は、指示情報を付加したメモリアクセス命令に対応したハードウエアプリフェッチ機構を有する。例えば、指示情報がハードウエアプリフェッチの対象でないことを示す場合は、ハードウエアプリフェッチは抑止される。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００９−２３０３７４号公報
【特許文献２】特表２０１１−５０４２７４号公報
【特許文献３】特開２０１０−２４４２０４号公報
【特許文献４】特開２００６−３３０８１３号公報
【特許文献５】特開２０１１−８１８３６号公報
【特許文献６】特開２００２−２９７３７９号公報
【特許文献７】特開２００１−１６６９８９号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
ハードウエアプリフェッチ機構を有する演算処理装置にソフトウエアプリフェッチを適用した場合、不要なプリフェッチ命令が機械語プログラムに挿入され、演算処理装置の性能が低下するおそれがある。なお、ハードウエアプリフェッチの対象であるか否かを示す指示情報を付加したメモリアクセス命令を生成するコンパイル方法では、汎用性が低下する。例えば、指示情報を付加したメモリアクセス命令を生成するコンパイル方法では、デコード部、演算部およびハードウエアプリフェッチ機構が指示情報を付加したメモリアクセス命令に対応していない場合、演算処理装置の性能が低下するおそれがある。
【００１１】
１つの側面では、本件開示のコンパイルプログラム、コンパイル方法およびコンパイル装置は、コンパイル処理でプリフェッチ命令を機械語プログラムに挿入する際に、不要なプリフェッチ命令の挿入を低減することを目的とする。
【課題を解決するための手段】
【００１２】
一観点によれば、メモリに記憶されたデータを事前にキャッシュメモリに転送するハードウエアプリフェッチ機能を有するプロセッサで実行可能な機械語プログラムにソースプログラムを変換するコンパイル処理をコンピュータに実行させるコンパイルプログラムは、ソースプログラムを中間コードに変換し、メモリに記憶されたデータを事前にキャッシュメモリに転送するプリフェッチ命令の挿入対象のデータである対象データの中から、ハードウエアプリフェッチ機能の動作条件に対応するアクセスパターンを満たすデータを、対象データのメモリアクセスに関するプロファイル情報に基づいて検出し、アクセスパターンを満たすデータが連続する長さに基づいて、対象データの評価値を算出し、対象データに対するプリフェッチ命令の挿入を抑止するか否かを評価値に基づいて判定し、判定結果に基づいて中間コードを更新し、更新された中間コードを機械語プログラムに変換する、処理をコンピュータに実行させる。
【００１３】
別の観点によれば、メモリに記憶されたデータを事前にキャッシュメモリに転送するハードウエアプリフェッチ機能を有するプロセッサで実行可能な機械語プログラムにソースプログラムを変換するコンパイル方法では、コンピュータは、ソースプログラムを中間コードに変換し、メモリに記憶されたデータを事前にキャッシュメモリに転送するプリフェッチ命令の挿入対象のデータである対象データの中から、ハードウエアプリフェッチ機能の動作条件に対応するアクセスパターンを満たすデータを、対象データのメモリアクセスに関するプロファイル情報に基づいて検出し、アクセスパターンを満たすデータが連続する長さに基づいて、対象データの評価値を算出し、対象データに対するプリフェッチ命令の挿入を抑止するか否かを評価値に基づいて判定し、判定結果に基づいて中間コードを更新し、更新した中間コードを機械語プログラムに変換する。
【００１４】
別の観点によれば、メモリに記憶されたデータを事前にキャッシュメモリに転送するハードウエアプリフェッチ機能を有するプロセッサで実行可能な機械語プログラムにソースプログラムを変換するコンパイル処理を実行するコンパイル装置は、ソースプログラムを中間コードに変換する変換部と、中間コードを更新する最適化部と、更新された中間コードを機械語プログラムに変換するコード生成部とを有し、最適化部は、メモリに記憶されたデータを事前にキャッシュメモリに転送するプリフェッチ命令の挿入対象のデータである対象データの中から、ハードウエアプリフェッチ機能の動作条件に対応するアクセスパターンを満たすデータを、対象データのメモリアクセスに関するプロファイル情報に基づいて検出する検出部と、アクセスパターンを満たすデータが連続する長さに基づいて、対象データの評価値を算出する算出部と、対象データに対するプリフェッチ命令の挿入を抑止するか否かを評価値に基づいて判定し、判定結果に基づいて中間コードを更新する更新部とを有する。
【発明の効果】
【００１５】
本件開示のコンパイルプログラム、コンパイル方法およびコンパイル装置は、コンパイル処理でプリフェッチ命令を機械語プログラムに挿入する際に、不要なプリフェッチ命令の挿入を低減できる。
【図面の簡単な説明】
【００１６】
【図１】コンパイルプログラム、コンパイル方法およびコンパイル装置の一実施形態を示す図である。
【図２】図１に示したコンパイル装置の動作の一例を示す図である。
【図３】図１に示したコンパイル装置で生成された機械語プログラムを実行する演算処理装置の一例を示す図である。
【図４】プロファイル情報の生成方法の一例を示す図である。
【図５】プロファイル情報の適用方法の一例を示す図である。
【図６】配列データのアクセス順とプリフェッチとの関係の一例を示す図である。
【図７】プロファイル情報およびアクセス属性テーブルの一例を示す図である。
【図８】アクセス属性テーブル生成の一例を示す図である。
【図９】連続長管理テーブルの一例を示す図である。
【図１０】連続長管理テーブル生成の一例を示す図である。
【図１１】図１に示したコンパイル装置のハードウエア構成の一例を示す図である。
【発明を実施するための形態】
【００１７】
以下、実施形態を図面を用いて説明する。
【００１８】
図１は、コンパイルプログラム、コンパイル方法およびコンパイル装置の一実施形態を示す。なお、この実施形態のコンパイル装置１０は、ハードウエアのみで実現されてもよく、ハードウエアをソフトウエアにより制御することにより実現されてもよい。例えば、コンパイル装置１０は、コンパイルプログラムを実行するコンピュータにより実現されてもよい。
【００１９】
コンパイル装置１０は、例えば、主記憶装置であるメインメモリに記憶されたデータを事前にキャッシュメモリに転送するハードウエアプリフェッチ機能を有するプロセッサで実行可能な機械語プログラムにソースプログラムを変換するコンパイル処理を実行する。例えば、コンパイル装置１０は、ソースプログラムＳＰＲＧおよびプロファイル情報ＰＩＮＦを受信し、機械語プログラムＭＰＲＧを出力する。
【００２０】
プロファイル情報ＰＩＮＦは、例えば、メインメモリに記憶されたデータを事前にキャッシュメモリに転送するプリフェッチ命令の挿入対象のデータ（以下、対象データとも称する）のメモリアクセスに関する情報である。なお、プリフェッチ命令は、コンパイル処理によりソフトウエアプリフェッチが実行された場合、機械語プログラムＭＰＲＧに挿入される。プリフェッチ命令は、データをロードする命令で実現されてもよいし、プリフェッチ専用の命令で実現されてもよい。
【００２１】
プリフェッチ命令の挿入対象のデータは、例えば、間接的にアクセスされる配列データである。間接的にアクセスされる配列データでは、プロセッサ等の演算処理装置でソースプログラムを実行したときにアクセス先が確定する。このため、ハードウエアでは、間接的にアクセスされる配列データのアクセス先を事前に予測することは困難である。したがって、間接的にアクセスされる配列データに対してソフトウエアプリフェッチを実行することにより、演算処理装置の性能が向上する。
【００２２】
なお、間接的にアクセスされる配列データのアクセス先が規則的に変化する場合、ハードウエアプリフェッチが実行されることがある。ハードウエアプリフェッチは、例えば、図３に示した演算処理装置１００のハードウエアプリフェッチ制御部１４０で実行される。ハードウエアプリフェッチが実行された場合、ソフトウエアプリフェッチを実行することにより、演算処理装置の性能が低下するおそれがある。このため、コンパイル装置１０は、間接的にアクセスされる配列データのアクセス先が規則的に変化するか否かをプロファイル情報ＰＩＮＦに基づいて判定し、判定結果に基づいてプリフェッチ命令の挿入を抑止するか否かを決定する。
【００２３】
なお、プリフェッチ命令の挿入対象のデータは、間接的にアクセスされる配列データに限定されない。例えば、プリフェッチ命令の挿入対象のデータは、ポインタ変数によりアクセスされるデータでもよい。ポインタ変数によるアクセスにおいても、例えば、アクセス先は、演算処理装置でソースプログラムを実行したときに確定する。以下、演算処理装置でソースプログラムを実行したときにアクセス先が確定する不規則なメモリアクセスを、不規則な間接メモリアクセスとも称する。また、不規則な間接メモリアクセスが実行されるデータを、不規則な間接アクセスデータとも称する。
【００２４】
すなわち、コンパイル装置１０は、間接的にアクセスされる配列データおよびポインタ変数によりアクセスされるデータに限定せずに、不規則な間接メモリアクセスが実行されるデータを、プリフェッチ命令の挿入対象のデータとしてもよい。以下、プリフェッチ命令の挿入対象のデータを、間接的にアクセスされる配列データとして説明する。
【００２５】
コンパイル装置１０は、例えば、コード変換部２０、最適化部３０およびコード生成部４０を有する。コード変換部２０は、ソースプログラムを中間コードに変換する変換部の一例である。例えば、コード変換部２０は、ソースプログラムＳＰＲＧを受信し、ソースプログラムＳＰＲＧのソースコードを中間コードに変換する。コード変換部２０で生成された中間コードは、最適化部３０に転送される。
【００２６】
最適化部３０は、中間コードを更新する最適化部の一例である。例えば、最適化部３０は、中間コードおよびプロファイル情報ＰＩＮＦを受信し、中間コードを最適化する。最適化部３０で最適化された中間コードは、コード生成部４０に転送される。なお、プリフェッチ命令を機械語プログラムＭＰＲＧに挿入するか否かの判定は、中間コードを最適化する際に実行される。
【００２７】
例えば、最適化部３０は、アクセス属性検出部３２、評価値算出部３４およびプリフェッチ命令挿入部３６を有する。アクセス属性検出部３２は、プリフェッチ命令の挿入対象のデータである対象データの中から、所定のアクセスパターンを満たすデータを、対象データのメモリアクセスに関するプロファイル情報に基づいて検出する検出部の一例である。所定のアクセスパターンは、例えば、ハードウエアプリフェッチ機能の動作条件に対応するアクセスパターンである。
【００２８】
例えば、アクセス属性検出部３２は、ループ処理により繰り返しアクセスされる配列データの各データのうち、所定のアクセスパターンを満たすデータをプロファイル情報ＰＩＮＦに基づいて検出する。そして、アクセス属性検出部３２は、所定のアクセスパターンを満たすデータか否かを示すアクセス属性を含む情報（以下、アクセス属性テーブルとも称する）を生成する。アクセス属性検出部３２で生成されたアクセス属性テーブルは、評価値算出部３４に転送される。
【００２９】
評価値算出部３４は、所定のアクセスパターンを満たすデータが連続する長さに基づいて、対象データの評価値を算出する算出部の一例である。例えば、評価値算出部３４は、アクセス属性検出部３２で生成されたアクセス属性テーブルを受信する。そして、評価値算出部３４は、アクセス属性テーブルに含まれるアクセス属性に基づいて、対象データの評価値を算出する。例えば、評価値算出部３４は、所定のアクセスパターンを満たすデータが連続する長さ（以下、連続長とも称する）を算出する。そして、評価値算出部３４は、連続長に基づいて対象データの評価値を算出する。評価値算出部３４で算出された評価値は、プリフェッチ命令挿入部３６に転送される。
【００３０】
プリフェッチ命令挿入部３６は、対象データに対するプリフェッチ命令の挿入を抑止するか否かを評価値に基づいて判定し、判定結果に基づいて中間コードを更新する更新部の一例である。例えば、プリフェッチ命令挿入部３６は、評価値算出部３４で算出された評価値を受信する。そして、プリフェッチ命令挿入部３６は、プリフェッチ命令の挿入を抑止するか否かを対象データ毎に評価値に基づいて判定し、判定結果に基づいて中間コードを更新する。
【００３１】
例えば、プリフェッチ命令挿入部３６は、評価値が予め決められた閾値未満の対象データに対してはプリフェッチ命令を挿入し、評価値が閾値以上の対象データに対してはプリフェッチ命令の挿入を抑止して、中間コードを更新する。これにより、例えば、中間コードは、最適化される。プリフェッチ命令挿入部３６で最適化された中間コードは、コード生成部４０に転送される。
【００３２】
コード生成部４０は、更新された中間コードを機械語プログラムに変換するコード生成部の一例である。例えば、コード生成部４０は、プリフェッチ命令挿入部３６で更新された中間コードを受信する。そして、コード生成部４０は、プリフェッチ命令挿入部３６で更新された中間コードを、機械語プログラムＭＰＲＧに変換する。
【００３３】
このように、コンパイル装置１０は、ハードウエアプリフェッチ機能を有するプロセッサで実行可能で、かつ、不要なプリフェッチ命令の挿入が低減された機械語プログラムＭＰＲＧを、生成できる。すなわち、コンパイル装置１０は、コンパイル処理でプリフェッチ命令を機械語プログラムＭＰＲＧに挿入する際に、不要なプリフェッチ命令の挿入を低減できる。
【００３４】
図２は、図１に示したコンパイル装置１０の動作の一例を示す。図２の動作は、ハードウエアのみで実現されてもよく、ハードウエアをソフトウエアにより制御することにより実現されてもよい。例えば、コンピュータは、コンパイルプログラムを記録した記憶媒体を読み取り、図２の動作を実行してもよい。換言すれば、コンパイルプログラムは、図２の動作をコンピュータに実行させてもよい。すなわち、図２は、コンパイルプログラムおよびコンパイル方法の一形態を示す。
【００３５】
なお、図２の動作では、プロファイル情報ＰＩＮＦは、ステップＳ１００が実行される前に生成される。例えば、プロファイル情報ＰＩＮＦは、コンパイル装置１０により生成されてもよいし、コンパイル装置１０とは別のコンパイル装置により生成されてもよい。
【００３６】
ステップＳ１００では、コード変換部２０は、ソースプログラムを中間コードに変換する。
【００３７】
ステップＳ２００では、アクセス属性検出部３２は、不規則なメモリアクセスが実行されるデータ（プリフェッチ命令の挿入対象のデータ）のアクセス属性を、データのメモリアクセスに関するプロファイル情報ＰＩＮＦに基づいて決定する。例えば、アクセス属性検出部３２は、プリフェッチ命令の挿入対象のデータである対象データの中から、ハードウエアプリフェッチ機能の動作条件に対応するアクセスパターンを満たすデータを、対象データのプロファイル情報ＰＩＮＦに基づいて検出する。
【００３８】
例えば、アクセス属性検出部３２は、所定のアクセスパターンを満たすデータとして、キャッシュメモリのキャッシュラインをアクセス単位とした場合のアクセス先の変化が２ライン未満の変化量のデータを検出する。なお、アクセス属性検出部３２は、所定のアクセスパターンを満たすデータとして、アクセス先が一定のアクセス幅で昇順および降順のいずれか一方向に変化するデータを検出してもよい。そして、アクセス属性検出部３２は、所定のアクセスパターンを満たすデータか否かを示すアクセス属性を含むアクセス属性テーブルを生成する。
【００３９】
ステップＳ３００では、評価値算出部３４は、ステップＳ２００で生成されたアクセス属性テーブルに含まれるアクセス属性に基づいて、対象データの評価値を算出する。例えば、評価値算出部３４は、ステップＳ２００で生成されたアクセス属性テーブルに含まれるアクセス属性に基づいて、所定のアクセスパターンを満たすデータが連続する長さ（連続長）を算出する。そして、評価値算出部３４は、連続長に基づいて対象データの評価値を算出する。例えば、評価値算出部３４は、対象データ内での連続長の最大値を評価値として算出する。
【００４０】
また、例えば、評価値算出部３４は、所定のアクセスパターンを満たすデータが連続する長さと所定のアクセスパターンを満たすデータの長さ毎の発生回数とに基づいて、評価値を算出してもよい。また、例えば、評価値算出部３４は、所定のアクセスパターンを満たすデータの長さ毎の発生回数と連続長の大きさに応じた重み係数との積和演算を実行し、積和演算の結果を評価値として算出してもよい。重み係数は、ユーザにより書き換え可能に設定されてもよいし、固定値でもよい。
【００４１】
ステップＳ４００では、プリフェッチ命令挿入部３６は、ステップＳ３００で生成された評価値が予め決められた閾値未満か否かを対象データ毎に判定する。閾値は、例えば、対象データ内のデータ数の半分程度の値である。評価値が閾値未満の場合（ステップＳ４００のＹｅｓ）、コンパイル装置１０の動作は、ステップＳ５００に移る。すなわち、評価値が閾値未満の対象データに対しては、ステップＳ５００が実行される。一方、評価値が閾値以上の場合（ステップＳ４００のＮｏ）、コンパイル装置１０の動作は、ステップＳ６００に移る。すなわち、評価値が閾値以上の対象データに対しては、ステップＳ６００が実行される。
【００４２】
なお、ステップＳ４００の判定は、ソフトウエアプリフェッチを実行した場合に演算処理装置の性能低下を引き起こすか否かの判定に対応する。例えば、コンパイル装置１０は、評価値が閾値未満の対象データに対してソフトウエアプリフェッチを実行した場合、ソフトウエアプリフェッチを実行しない場合に比べて、演算処理装置の性能が向上すると判定する。換言すれば、コンパイル装置１０は、評価値が閾値以上の対象データに対してソフトウエアプリフェッチを実行した場合、ソフトウエアプリフェッチを実行しない場合に比べて、演算処理装置の性能が低下すると判定する。
【００４３】
ステップＳ５００では、プリフェッチ命令挿入部３６は、プリフェッチ命令を中間コードに挿入する。例えば、プリフェッチ命令挿入部３６は、評価値が閾値未満の対象データに対してプリフェッチ命令を実行させる中間コード（プリフェッチ命令の中間コード）を生成し、生成した中間コードをステップＳ１００で生成された中間コードに挿入する。これにより、ステップＳ１００で生成された中間コードは、更新される。
【００４４】
このように、プリフェッチ命令挿入部３６は、ソフトウエアプリフェッチを実行することにより演算処理装置の性能が向上すると判定した対象データに対しては、プリフェッチ命令の挿入を実行する。
【００４５】
ステップＳ６００では、プリフェッチ命令挿入部３６は、プリフェッチ命令の挿入を抑止する。例えば、プリフェッチ命令挿入部３６は、対象データに対してプリフェッチ命令の出力指定（機械語プログラムへの挿入指示）が設定されている場合、評価値が閾値以上の対象データに対するプリフェッチ命令の出力指定を抑止する中間コードを生成する。これにより、ステップＳ１００で生成された中間コードは、更新される。
【００４６】
このように、プリフェッチ命令挿入部３６は、ソフトウエアプリフェッチを実行することにより演算処理装置の性能が低下すると判定した対象データに対しては、プリフェッチ命令の挿入を抑止する。
【００４７】
ステップＳ７００では、プリフェッチ命令挿入部３６は、ステップＳ４００、Ｓ５００で更新された中間コードを最適化する。すなわち、プリフェッチ命令挿入部３６は、対象データに対するプリフェッチ命令の挿入を抑止するか否かの判定結果(ステップＳ４００での判定結果）に基づいて、中間コードを更新する。
【００４８】
ステップＳ８００では、コード生成部４０は、ステップＳ７００で更新された中間コードを機械語プログラムＭＰＲＧに変換する。これにより、演算処理装置で実行可能な機械語プログラムＭＰＲＧが生成される。なお、ステップＳ８００で生成される機械語プログラムＭＰＲＧでは、不要なプリフェッチ命令の挿入が抑制され、演算処理装置の性能向上に寄与するプリフェッチ命令が挿入される。すなわち、コンパイル装置１０は、コンパイル処理でプリフェッチ命令を機械語プログラムＭＰＲＧに挿入する際に、不要なプリフェッチ命令の挿入を低減できる。
【００４９】
なお、コンパイル装置１０の動作は、この例に限定されない。例えば、コンパイル装置１０は、ソースプログラムＳＰＲＧの翻訳時の静的解析で、対象データのアクセスパターンが昇順あるいは降順であると判定した場合、プロファイル情報ＰＩＮＦに基づく判定を実行せずに、プリフェッチ命令の挿入を抑止してもよい。
【００５０】
図３は、図１に示したコンパイル装置１０で生成された機械語プログラムを実行する演算処理装置１００の一例を示す。演算処理装置１００は、例えば、ＣＰＵ（Central Processing Unit）等のプロセッサである。例えば、演算処理装置１００は、コンパイル装置１０で生成された機械語プログラムＭＰＲＧを実行するために、メインメモリ１５０に記憶されたデータを読み出す。また、演算処理装置１００は、機械語プログラムＭＰＲＧの実行結果（演算結果）をメインメモリ１５０に記憶する。
【００５１】
例えば、演算処理装置１００は、命令デコーダ１１０、演算部１２０、キャッシュメモリ１３０およびハードウエアプリフェッチ制御装置１４０を有する。命令デコーダ１１０は、機械語プログラムＭＰＲＧで示される命令をデコードする。そして、命令デコーダ１１０は、デコードした命令を演算部１２０に出力する。
【００５２】
演算部１２０は、デコードされた命令に基づく演算を実行する。例えば、演算部１２０は、キャッシュメモリ１３０に記憶されたデータを参照して、演算を実行する。また、例えば、演算部１２０は、演算結果をキャッシュメモリ１３０に記憶する。
【００５３】
キャッシュメモリ１３０は、メインメモリ１５０から受信したデータを記憶する。例えば、キャッシュメモリ１３０は、演算部１２０により参照されたデータを記憶する。さらに、キャッシュメモリ１３０は、ハードウエアプリフェッチやソフトウエアプリフェッチによりメインメモリ１５０から転送されたデータを記憶する。また、キャッシュメモリ１３０は、演算結果等のデータをメインメモリ１５０に出力する。
【００５４】
例えば、キャッシュメモリ１３０のキャッシュライン番号をＣＬ、ラインサイズをＬＳ（バイト）、１ウエイあたりの容量をＷＳ（キロバイト）、論理アドレスをａｄｄｒとした場合、キャッシュライン番号ＣＬは、式（１）で表される。なお、論理アドレスａｄｄｒは、例えば、メインメモリ１５０のアドレスである。
【００５５】
ＣＬ＝ｍｏｄ（ａｄｄｒ／ＬＳ，（ＷＳ×１０２４）／ＬＳ）    ・・・（１）
式（１）のｍｏｄは剰余演算子である。すなわち、キャッシュライン番号ＣＬは、”ａｄｄｒ／ＬＳ”を”（ＷＳ×１０２４）／ＬＳ”で割った余りに対応する。
【００５６】
ハードウエアプリフェッチ制御装置１４０は、ハードウエアプリフェッチの実行を制御する。例えば、ハードウエアプリフェッチ制御装置１４０は、アクセス先が規則的に変化するアクセスにおいて、キャッシュミスが連続したことを検出した場合に、ハードウエアプリフェッチを実行する。
【００５７】
例えば、ハードウエアプリフェッチ制御装置１４０は、連続領域アクセスにおいて連続するキャッシュラインのキャッシュミスを検出した場合、ハードウエアプリフェッチを実行する。連続領域アクセスは、例えば、キャッシュメモリ１３０のキャッシュラインをアクセス単位とした場合のアクセス先の変化が２ライン未満の変化量（キャッシュラインが連続する範囲）のアクセスである。
【００５８】
なお、ハードウエアプリフェッチの実行条件（動作条件）は、この例に限定されない。例えば、ハードウエアプリフェッチ制御装置１４０は、アクセス先が一定のアクセス幅で昇順および降順のいずれか一方向に変化するアクセスにおいて、キャッシュミスが連続したことを検出した場合に、ハードウエアプリフェッチを実行してもよい。
【００５９】
図４は、プロファイル情報ＰＩＮＦの生成方法の一例を示す。図４に示したソースプログラムＳＰＲＧでは、例えば、配列データＡ（ＬＩＳＴ（ｉ））で示される値をＹに加算する演算がｎ回繰り返される。以下、配列データＡ（ＬＩＳＴ（ｉ））を配列データＡとも称する。例えば、配列データＡのアクセス先は、配列データＬＩＳＴ（ｉ）で指定され、演算処理装置１００でソースプログラムＳＰＲＧを実行したときに確定する。したがって、配列データＡのアクセスは、不規則な間接メモリアクセスである。すなわち、配列データＡは、プリフェッチ命令の挿入対象のデータである。以下、配列データＡをプリフェッチ命令の挿入対象のデータとして説明する。
【００６０】
先ず、処理Ｐ１０では、例えば、プロファイル情報生成の翻訳オプションがコンパイラに指定され、翻訳対象のソースプログラムＳＰＲＧが機械語プログラムＭＰＲＧ１０に翻訳される。コンパイラは、例えば、コンパイル装置１０の動作を実現するコンパイルプログラムに対応する。
【００６１】
処理Ｐ１０で生成される機械語プログラムＭＰＲＧ１０は、例えば、オブジェクト形式のプログラムである。また、例えば、機械語プログラムＭＰＲＧ１０は、プロファイル情報生成用のオブジェクトコードと、ソースプログラムＳＰＲＧの翻訳により生成されたオブジェクトコードとを含む。プロファイル情報生成用のオブジェクトコードは、例えば、プリフェッチ命令の挿入対象のデータのプロファイル情報ＰＩＮＦをソースプログラムＳＰＲＧの実行時に出力させるオブジェクトコードである。
【００６２】
例えば、コンパイル装置１０は、プロファイル情報生成の翻訳オプションが指定されているため、ソースプログラムＳＰＲＧの翻訳時に、配列データＡのプロファイル情報ＰＩＮＦを、ソースプログラムＳＰＲＧの実行時に出力させるオブジェクトコードを生成する。
【００６３】
処理Ｐ２０では、例えば、プロファイル用のライブラリ等の各種ライブラリＬＩＢと機械語プログラムＭＰＲＧ１０とが結合され、機械語プログラムＭＰＲＧ１２が生成される。機械語プログラムＭＰＲＧ１２は、実行形式のプログラムである。処理Ｐ２０の結合は、例えば、リンカを用いて実行される。リンカは、例えば、オブジェクト形式のプログラムＭＰＲＧ１０やライブラリＬＩＢを結合して実行形式のプログラムＭＰＲＧ１２を生成するプログラムである。リンカは、コンパイル装置１０の動作を実現するコンパイルプログラムに含まれてもよいし、コンパイルプログラムとは別のプログラムでもよい。
【００６４】
処理Ｐ３０では、機械語プログラムＭＰＲＧ１２が実行される。これにより、プロファイル情報ＰＩＮＦが生成される。例えば、演算処理装置１００は、機械語プログラムＭＰＲＧ１２を実行し、配列データＡのプロファイル情報ＰＩＮＦを外部に出力する。
【００６５】
このように、コンパイル装置１０は、プロファイル情報ＰＩＮＦを、ソースプログラムＳＰＲＧを実行した演算処理装置１００から対象データ毎に出力させるオブジェクトコードを生成する。演算処理装置１００から対象データ毎に出力されるプロファイル情報ＰＩＮＦは、例えば、対象データの中の各データのアクセスの順番を示すインデックスとアクセス先を示すアドレス情報とを含む。なお、プロファイル情報ＰＩＮＦの生成方法は、この例に限定されない。
【００６６】
図５は、プロファイル情報ＰＩＮＦの適用方法の一例を示す。ソースプログラムＳＰＲＧは、図４で説明したソースプログラムＳＰＲＧと同一または同様である。また、プロファイル情報ＰＩＮＦは、例えば、図４の動作により生成されたプロファイル情報ＰＩＮＦである。図４の動作と同一または同様な動作については、詳細な説明を省略する。
【００６７】
処理Ｐ１２では、例えば、プロファイル情報適用の翻訳オプションがコンパイラに指定され、翻訳対象のソースプログラムＳＰＲＧが機械語プログラムＭＰＲＧ２０に翻訳される。この際、例えば、コンパイル装置１０は、プロファイル情報適用の翻訳オプションが指定されているため、不規則な間接アクセスデータ（例えば、配列データＡ）に対するプリフェッチ命令の挿入を抑止するか否かをプロファイル情報ＰＩＮＦに基づいて決定する。
【００６８】
例えば、コンパイル装置１０は、不規則な間接アクセスデータ（例えば、配列データＡ）を検出した場合、検出したデータをプリフェッチ命令の挿入対象のデータと判定する。そして、コンパイル装置１０は、プリフェッチ命令の挿入対象のデータ（不規則な間接アクセスデータ）に対するプリフェッチ命令の挿入を抑止するか否かをプロファイル情報ＰＩＮＦに基づいて決定する。すなわち、コンパイル装置１０は、不規則な間接アクセスデータ（例えば、配列データＡ）に対するプリフェッチ命令を機械語プログラムＭＰＲＧ２０に挿入するか否かをプロファイル情報ＰＩＮＦに基づいて決定する。
【００６９】
したがって、例えば、コンパイル装置１０は、配列データＡに対するプリフェッチ命令の挿入を抑止すると決定した場合、配列データＡに対するプリフェッチ命令を機械語プログラムＭＰＲＧ２０に挿入しない。また、例えば、コンパイル装置１０は、配列データＡに対するプリフェッチ命令の挿入を抑止しないと決定した場合、配列データＡに対するプリフェッチ命令を機械語プログラムＭＰＲＧ２０に挿入する。このように、処理Ｐ１２で生成される機械語プログラムＭＰＲＧ２０には、プリフェッチ命令の挿入を抑止するか否かの判定結果が反映される。なお、機械語プログラムＭＰＲＧ２０は、例えば、オブジェクト形式のプログラムである。
【００７０】
処理Ｐ２２では、例えば、各種ライブラリＬＩＢと機械語プログラムＭＰＲＧ２０とが結合され、機械語プログラムＭＰＲＧ２２が生成される。機械語プログラムＭＰＲＧ２２は、実行形式のプログラムである。処理Ｐ２２の結合は、例えば、リンカを用いて実行される。処理Ｐ３２では、機械語プログラムＭＰＲＧ２２が実行される。
【００７１】
なお、プロファイル情報ＰＩＮＦの適用方法は、この例に限定されない。例えば、プリフェッチ命令の挿入対象のデータは、コンパイラに指示を与える最適化制御行やプラグマ等により指定されてもよい。最適化制御行は、例えば、ＦＯＲＴＲＡＮで用いられる。また、例えば、プラグマは、Ｃ言語等で用いられる。
【００７２】
例えば、ユーザは、配列データＡ（ＬＩＳＴ（ｉ））をプリフェッチ命令の挿入対象のデータとして指定する最適化制御行（例えば、「!ocl Prefetch_index(auto,LIST)」）をソースプログラムＳＰＲＧ内に記述してもよい。この場合、コンパイル装置１０は、配列データＡ（ＬＩＳＴ（ｉ））をプリフェッチ命令の挿入対象のデータと判定する。したがって、不規則な間接アクセスデータでも、最適化制御行で指定されていないデータは、プリフェッチ命令の挿入対象のデータと判定されない。なお、コンパイル装置１０は、プリフェッチ命令の挿入対象のデータが最適化制御行で指定されている場合、図４に示した処理Ｐ１０において、最適化制御行で指定されたデータに限定してプロファイル情報ＰＩＮＦを生成させるオブジェクトコードを生成してもよい。
【００７３】
図６は、配列データＡ（ＬＩＳＴ（ｉ））のアクセス順とプリフェッチとの関係の一例を示す図である。ソースプログラムＳＰＲＧは、図４で説明したソースプログラムＳＰＲＧと同一または同様である。配列データＡ（ＬＩＳＴ（ｉ））は、プリフェッチ命令の挿入対象のデータである。図の符号ｉは、配列データＡのアクセス順に対応する。図の配列データＬＩＳＴ（ｉ）の値は、配列データＡのアクセス先（メモリ領域のアドレス）に対応する。
【００７４】
ケース１では、配列データＬＩＳＴ（１）、配列データＬＩＳＴ（２）、配列データＬＩＳＴ（３）のそれぞれの値は、５５５、１１、２０００である。したがって、配列データＡ（５５５）、配列データＡ（１１）、配列データＡ（２０００）の順で、アクセスされる。このように、配列データＡのアクセス先は、メモリ領域のアドレス５５５、１１、２０００の順に、不規則に変化する。
【００７５】
このため、配列データＡに対するハードウエアプリフェッチは実行されない。なお、配列データＡに対するソフトウエアプリフェッチは、実行される。したがって、配列データＡに対するプリフェッチ命令が挿入される。図の「prefetch A(LIST(i+α))」は、α要素先の配列データＡをプリフェッチすることを示す。これにより、不規則な間接アクセスデータに対しても、プリフェッチが実行される。この結果、この実施形態では、データを参照するときの待ち時間を短縮できる。
【００７６】
一方、ケース２では、配列データＬＩＳＴ（１）、配列データＬＩＳＴ（２）、配列データＬＩＳＴ（３）、配列データＬＩＳＴ（４）のそれぞれの値は、１、２、３、４である。したがって、配列データＡ（１）、配列データＡ（２）、配列データＡ（３）、配列データＡ（４）の順で、アクセスされる。このように、配列データＡのアクセス先は、メモリ領域のアドレス１、２、３、４の順に、連続的に変化する。
【００７７】
このため、配列データＡに対するハードウエアプリフェッチが実行される。これにより、この実施形態では、データを参照するときの待ち時間を短縮できる。なお、配列データＡのアクセス先がハードウエアプリフェッチ機能の動作条件に対応する所定の規則に従って変化するため、配列データＡに対するソフトウエアプリフェッチは、実行されない。すなわち、この実施形態では、プリフェッチ命令の挿入対象のデータのアクセス先が規則的に変化する場合に、ハードウエアプリフェッチとソフトウエアプリフェッチとの両方が実行されることを抑止できる。
【００７８】
例えば、コンパイル装置１０は、配列データＡに対するプリフェッチ命令の挿入を抑止する。これにより、この実施形態では、プリフェッチ命令の挿入対象のデータのアクセス先が規則的に変化する場合に、不要なプリフェッチ命令が挿入されることを抑止できる。このように、この実施形態では、コンパイル処理でプリフェッチ命令を機械語プログラムに挿入する際に、不要なプリフェッチ命令の挿入を低減できる。この結果、この実施形態では、不要なプリフェッチ命令の挿入による演算処理装置１００の性能低下を低減できる。
【００７９】
なお、プリフェッチ命令の挿入を抑止するか否かは、図２で説明したように評価値に基づいて決定される。評価値は、例えば、図９に示す連続長管理テーブルＴＡＢＬ２に基づいて生成される。また、連続長管理テーブルＴＡＢＬ２は、例えば、図７に示すアクセス属性テーブルＴＡＢＬ１に基づいて生成される。なお、アクセス属性テーブルＴＡＢＬ１は、プロファイル情報ＰＩＮＦに基づいて生成される。
【００８０】
図７は、プロファイル情報ＰＩＮＦおよびアクセス属性テーブルＴＡＢＬ１の一例を示す。プロファイル情報ＰＩＮＦおよびアクセス属性テーブルＴＡＢＬ１は、例えば、プリフェッチ命令の挿入単位毎に生成される。例えば、プロファイル情報ＰＩＮＦおよびアクセス属性テーブルＴＡＢＬ１は、プリフェッチ命令の挿入対象のデータに対して、ループ処理毎に生成される。
【００８１】
例えば、配列データＡのプロファイル情報ＰＩＮＦは、アクセスの順番を示す要素番号ｉとアクセス先を示すキャッシュライン番号ＣＬとを含む。図７の例では、配列データＡの配列サイズｎは、１６である。また、キャッシュライン番号ＣＬは、例えば、アクセス先を示すアドレス情報であり、配列データＡの各データが記憶されるキャッシュメモリ１３０のキャッシュラインを示す。例えば、キャッシュライン番号ＣＬは、図３で説明した式（１）を用いて、配列データＡの各データの論理アドレスａｄｄｒ（例えば、メインメモリ１５０のアドレス）に基づいて算出される。
【００８２】
図７のプロファイル情報ＰＩＮＦでは、要素番号１、２、３、４に対応する配列データＡ内のデータが記憶されるキャッシュライン番号ＣＬは、それぞれ０、１、２、３である。また、要素番号５、６、７、８に対応する配列データＡ内のデータが記憶されるキャッシュライン番号ＣＬは、それぞれ２２、３３、４４、４５である。要素番号９、１０、１１、１２に対応する配列データＡ内のデータが記憶されるキャッシュライン番号ＣＬは、それぞれ５５、５６、６６、６７である。そして、要素番号１３、１４、１５、１６に対応する配列データＡ内のデータが記憶されるキャッシュライン番号ＣＬは、それぞれ６８、６９、７０、８８である。
【００８３】
また、例えば、配列データＡのプロファイル情報ＰＩＮＦに基づいて生成されるアクセス属性テーブルＴＡＢＬ１は、要素番号ｉ、キャッシュライン番号ＣＬおよびアクセス属性Ｚを含む。すなわち、アクセス属性テーブルＴＡＢＬ１は、プロファイル情報ＰＩＮＦにアクセス属性Ｚを追加して生成される。
【００８４】
なお、図７のアクセス属性Ｚの欄の情報Ｓは、アクセス先がハードウエアプリフェッチ機能の動作条件に対応する所定の規則に従って変化することを示し、情報Ｘは、アクセス先の変化が所定の規則に従っていないことを示す。以下、情報Ｓ、Ｘがそれぞれ設定されたアクセス属性Ｚを、アクセス属性Ｓ、Ｘとも称する。例えば、アクセス属性Ｓは、アクセス先の変化が２ライン未満の変化量（キャッシュラインが連続する範囲）であることを示し、アクセス属性Ｘは、アクセス先の変化が不連続（キャッシュラインが連続しない変化）であることを示す。
【００８５】
アクセス属性テーブルＴＡＢＬ１の要素番号１（ｉ＝１）は、最初のアクセスであるため、アクセス属性は、設定されない。要素番号２、３、４、８、１０、１２、１３、１４、１５では、前の要素番号（ｉ−１）のキャッシュライン番号ＣＬとの差分が１ライン（２ライン未満）であるため、アクセス属性Ｚは情報Ｓに設定される。要素番号５、６、７、９、１１、１６では、前の要素番号（ｉ−１）のキャッシュライン番号ＣＬとの差分は、それぞれ１９、１１、１１、１０、１０、１８であり、２ライン以上（１ライン超え）である。このため、要素番号５、６、７、９、１１、１６では、アクセス属性Ｚは情報Ｘに設定される。
【００８６】
なお、プロファイル情報ＰＩＮＦおよびアクセス属性テーブルＴＡＢＬ１の構成は、この例に限定されない。例えば、プロファイル情報ＰＩＮＦは、要素番号ｉおよびキャッシュライン番号ＣＬの他に、配列データＡの各データの論理アドレスａｄｄｒを示すアドレス情報を有してもよい。あるいは、プロファイル情報ＰＩＮＦは、キャッシュライン番号ＣＬの代わりに、論理アドレスａｄｄｒを示すアドレス情報を有してもよい。
【００８７】
また、プロファイル情報ＰＩＮＦは、アクセス属性Ｚを含んでもよい。この場合、プロファイル情報ＰＩＮＦは、アクセス属性テーブルＴＡＢＬ１として使用される。また、例えば、アクセス属性テーブルＴＡＢＬ１のキャッシュライン番号ＣＬは省かれてもよい。
【００８８】
図８は、アクセス属性テーブル生成の一例を示す。なお、図８の動作は、ハードウエアのみで実現されてもよく、ハードウエアをソフトウエアにより制御することにより実現されてもよい。図８の動作では、ハードウエアプリフェッチ機能の動作条件に対応する所定のアクセスパターンは、アクセス先が２ライン未満の変化量で変化するアクセスパターンである。図８の動作は、図２に示したステップＳ２００に対応する。
【００８９】
図８では、要素番号ｉのキャッシュライン番号ＣＬをキャッシュライン番号ＣＬ（ｉ）とも称する。例えば、配列データＡのうち、ｉ番目にアクセスされるデータは、キャッシュライン番号ＣＬ（ｉ）のキャッシュラインに記憶される。
【００９０】
ステップＳ２１０では、アクセス属性検出部３２は、要素番号ｉを１に設定する。また、アクセス属性検出部３２は、プロファイル情報ＰＩＮＦから要素番号ｉのキャッシュライン番号ＣＬ（ｉ）を取得する。例えば、アクセス属性検出部３２は、要素番号ｉが１の場合、プロファイル情報ＰＩＮＦの要素番号１のキャッシュライン番号ＣＬ（１）を、プロファイル情報ＰＩＮＦから読み出す。
【００９１】
なお、アクセス属性検出部３２は、プロファイル情報ＰＩＮＦがキャッシュライン番号ＣＬの代わりに論理アドレスａｄｄｒを有する場合、図３で説明した式（１）を用いて、要素番号ｉのキャッシュライン番号ＣＬ（ｉ）を算出する。
【００９２】
ステップＳ２１２では、アクセス属性検出部３２は、要素番号ｉをカウントアップする。例えば、アクセス属性検出部３２は、要素番号ｉの値に１を加算し、要素番号ｉを更新する。
【００９３】
ステップＳ２１４では、アクセス属性検出部３２は、プロファイル情報ＰＩＮＦから要素番号ｉのキャッシュライン番号ＣＬ（ｉ）を取得する。例えば、アクセス属性検出部３２は、プロファイル情報ＰＩＮＦの要素番号ｉのキャッシュライン番号ＣＬ（ｉ）を、プロファイル情報ＰＩＮＦから読み出す。
【００９４】
ステップＳ２１６では、アクセス属性検出部３２は、キャッシュライン番号ＣＬ（ｉ）とキャッシュライン番号ＣＬ（ｉ−１）との差の絶対値が２未満か否かを判定する。なお、キャッシュライン番号ＣＬ（ｉ−１）は、例えば、要素番号ｉが２の場合、ステップＳ２１０で取得済みである。また、要素番号ｉが３以上の場合、キャッシュライン番号ＣＬ（ｉ−１）は、前回のステップＳ２１６で取得済みである。
【００９５】
キャッシュライン番号ＣＬ（ｉ）とキャッシュライン番号ＣＬ（ｉ−１）との差の絶対値が２未満の場合（ステップＳ２１６のＹｅｓ）、アクセス属性検出部３２の動作は、ステップＳ２１８に移る。すなわち、キャッシュライン番号ＣＬ（ｉ）、ＣＬ（ｉ−１）に基づいて予測されるアクセスパターンがハードウエアプリフェッチ機能の動作条件に対応する所定の規則を満たしている場合、アクセス属性検出部３２の動作は、ステップＳ２１８に移る。換言すれば、配列データＡのアクセス先がハードウエアプリフェッチ機能の動作条件に対応する所定の規則に従って変化する場合、アクセス属性検出部３２の動作は、ステップＳ２１８に移る。
【００９６】
一方、キャッシュライン番号ＣＬ（ｉ）とキャッシュライン番号ＣＬ（ｉ−１）との差の絶対値が２以上の場合（ステップＳ２１６のＮｏ）、アクセス属性検出部３２の動作は、ステップＳ２２０に移る。すなわち、キャッシュライン番号ＣＬ（ｉ）、ＣＬ（ｉ−１）に基づいて予測されるアクセスパターンがハードウエアプリフェッチ機能の動作条件に対応する所定の規則を満たさない場合、アクセス属性検出部３２の動作は、ステップＳ２２０に移る。換言すれば、配列データＡのアクセス先の変化がハードウエアプリフェッチ機能の動作条件に対応する所定の規則と異なる場合、アクセス属性検出部３２の動作は、ステップＳ２２０に移る。
【００９７】
ステップＳ２１８では、アクセス属性検出部３２は、アクセス先がハードウエアプリフェッチ機能の動作条件に対応する所定の規則に従って変化することを示す情報Ｓを要素番号ｉのアクセス属性Ｚに格納する。例えば、アクセス属性検出部３２は、要素番号ｉのアクセス属性Ｚに、連続アクセスを示す情報Ｓを設定する。
【００９８】
ステップＳ２２０では、アクセス属性検出部３２は、アクセス先の変化がハードウエアプリフェッチ機能の動作条件に対応する所定の規則に従っていないことを示す情報Ｘを要素番号ｉのアクセス属性Ｚに格納する。例えば、アクセス属性検出部３２は、要素番号ｉのアクセス属性Ｚに、不連続アクセスを示す情報Ｘを設定する。
【００９９】
ステップＳ２２２では、アクセス属性検出部３２は、要素番号ｉが配列データＡの配列サイズｎと同じ値か否かを判定する。要素番号ｉが配列データＡの配列サイズｎと同じ値でない場合（ステップＳ２２２のＮｏ）、アクセス属性検出部３２の動作は、ステップＳ２１２に戻る。
【０１００】
一方、要素番号ｉが配列データＡの配列サイズｎと同じ値である場合（ステップＳ２２２のＹｅｓ）、アクセス属性検出部３２の動作は、終了する。これにより、例えば、図７に示したアクセス属性テーブルＴＡＢＬ１が生成される。
【０１０１】
なお、アクセス属性検出部３２の動作は、この例に限定されない。例えば、アクセス属性検出部３２は、ステップＳ２１６において、キャッシュライン番号ＣＬ（ｉ）とキャッシュライン番号ＣＬ（ｉ−１）との差が予め決められたライン幅か否かを判定してもよい。すなわち、アクセス属性検出部３２は、キャッシュメモリ１３０のキャッシュラインをアクセス単位とした場合のアクセス先が一定のライン幅で昇順および降順のいずれか一方向に変化するか否かを判定してもよい。例えば、キャッシュライン番号ＣＬ（ｉ）とキャッシュライン番号ＣＬ（ｉ−１）との差が予め決められたライン幅の場合、ステップＳ２１８が実行される。
【０１０２】
あるいは、アクセス属性検出部３２は、ステップＳ２１６において、論理アドレスで示されるアクセス先が一定のアクセス幅で昇順および降順のいずれか一方向に変化するか否かを判定してもよい。すなわち、アクセス属性検出部３２は、アクセス先が一定のアクセス幅で昇順および降順のいずれか一方向に変化するデータを検出してもよい。例えば、アクセス先が一定のアクセス幅で昇順および降順のいずれか一方向に変化するデータに対しては、ステップＳ２１８が実行される。
【０１０３】
図９は、連続長管理テーブルＴＡＢＬ２の一例を示す。なお、図９では、連続長管理テーブルＴＡＢＬ２とアクセス属性テーブルＴＡＢＬ１との関係を見やすくするために、アクセス属性テーブルＴＡＢＬ１を括弧内に示す。連続長管理テーブルＴＡＢＬ２は、例えば、プリフェッチ命令の挿入単位毎に生成される。例えば、連続長管理テーブルＴＡＢＬ２は、プリフェッチ命令の挿入対象のデータに対して、ループ処理毎に生成される。
【０１０４】
例えば、配列データＡの連続長管理テーブルＴＡＢＬ２は、所定のアクセスパターンを満たすデータが連続する長さ（連続長Ｌ）を示す情報と、所定のアクセスパターンを満たすデータの長さ（連続長Ｌ）毎の発生回数ｃを示す情報とを含む。例えば、連続長Ｌの最大値は、配列データＡの配列サイズｎから１を減算した値である。図９に示した連続長管理テーブルＴＡＢＬ２は、配列データＡの配列サイズｎが１６の場合の連続長管理テーブルＴＡＢＬ２の一例である。
【０１０５】
アクセス属性テーブルＴＡＢＬ１では、アクセス属性Ｓが３回連続している部分（連続長Ｌ＝３）は、１箇所であり、アクセス属性Ｓが１回の部分（連続長Ｌ＝１）は、２箇所であり、アクセス属性Ｓが４回連続している部分（連続長Ｌ＝４）は、１箇所である。また、アクセス属性Ｘの個数は、６である。
【０１０６】
したがって、連続長管理テーブルＴＡＢＬ２では、連続長Ｌが０のアクセスパターンの出現回数ｃは、６に設定される。また、連続長Ｌが１のアクセスパターンの出現回数ｃは、２に設定される。そして、連続長Ｌが３のアクセスパターンの出現回数ｃは、１に設定され、連続長Ｌが４のアクセスパターンの出現回数ｃは、１に設定される。なお、連続長Ｌが２、５、・・・、１５のアクセスパターンの出現回数ｃは、０に設定される。
【０１０７】
連続長管理テーブルＴＡＢＬ２は、例えば、配列データＡ（プリフェッチ命令の挿入対象のデータ）の評価値を算出する際に参照される。例えば、評価値算出部３４は、式（２）で表される評価値（式（２）のＶａ）を算出してもよい。
【０１０８】
Ｖａ＝Σ（Ｌ（ｉ）×ｃ（ｉ））    ・・・（２）
なお、式（２）のＬ（ｉ）およびｃ（ｉ）は、連続長管理テーブルＴＡＢＬ２のｉ番目の連続長Ｌおよび発生回数ｃをそれぞれ示す。また、式（２）のｉは、例えば、連続長管理テーブルＴＡＢＬ２の要素数がｍ個（図９の例では、１６個）の場合、１からｍまでの整数である。式（２）で表される評価値Ｖａは、連続長Ｌと発生回数ｃとに基づいて算出される評価値の一例である。
【０１０９】
なお、連続長管理テーブルＴＡＢＬ２の構成は、この例に限定されない。例えば、連続長管理テーブルＴＡＢＬ２の連続長Ｌの最大値は、配列データＡの配列サイズｎから１を減算した値より小さくてもよい。例えば、配列データＡの配列サイズｎが１６の場合、連続長Ｌの最大値は、配列サイズｎの半分程度（図９の例では、８）でもよい。この場合、アクセス属性Ｓが連続長Ｌの最大値（例えば、８）以上連続している部分の数が、連続長Ｌが最大値のアクセスパターンの出現回数ｃとして設定される。
【０１１０】
また、連続長管理テーブルＴＡＢＬ２は、連続長Ｌの大きさに応じた重み係数を有してもよい。この場合、例えば、評価値算出部３４は、式（３）で表される評価値Ｖａを算出してもよい。なお、式（３）のｉおよびｃ（ｉ）の意味は、式（２）と同一または同様である。また、式（３）のｗ（ｉ）は、連続長Ｌ（ｉ）の重み係数を示す。
【０１１１】
Ｖａ＝Σ（ｃ（ｉ）×ｗ（ｉ））    ・・・（３）
重み係数ｗ（ｉ）は、固定値でもよいし、ユーザにより任意に設定される値でもよい。なお、式（３）で表される評価値Ｖａは、重み係数ｗ（ｉ）が連続長Ｌ（ｉ）毎に設定されるため、連続長Ｌと発生回数ｃとに基づいて算出される評価値の一例である。
【０１１２】
例えば、コンパイル装置１０は、連続長Ｌと発生回数ｃとに基づいて算出される評価値を使用することにより、連続長Ｌのみに基づいて算出される評価値を使用する場合に比べて、配列データＡに対するハードウエアプリフェッチの実行頻度を正確に判定できる。
【０１１３】
図１０は、連続長管理テーブル生成の一例を示す。なお、図１０の動作は、ハードウエアのみで実現されてもよく、ハードウエアをソフトウエアにより制御することにより実現されてもよい。図１０の動作では、例えば、連続長管理テーブルＴＡＢＬ２の連続長Ｌの最大値は、配列データＡの配列サイズｎから１を減算した値である。図１０の動作は、図２に示したステップＳ３００の一部の動作に対応する。例えば、ステップＳ３１０−Ｓ３２４は、評価値算出部３４により実行される。なお、例えば、ステップＳ３１０−Ｓ３２４は、評価値算出部３４以外のモジュール（例えば、アクセス属性検出部３２）により実行されてもよい。
【０１１４】
図１０の出現回数ｃ（Ｌ）は、連続長Ｌのアクセスパターンの出現回数ｃを示す。例えば、図９に示した連続長管理テーブルＴＡＢＬ２において、出現回数ｃ（０）は、連続長Ｌが０のアクセスパターンの出現回数ｃ（図９では、６）を示し、出現回数ｃ（１）は、連続長Ｌが１のアクセスパターンの出現回数ｃ（図９では、２）を示す。また、図１０の要素番号ｉは、アクセス属性テーブルＴＡＢＬ１の要素番号ｉを示す。
【０１１５】
ステップＳ３１０では、評価値算出部３４は、初期データを設定する。例えば、評価値算出部３４は、アクセス属性テーブルＴＡＢＬ１の要素番号ｉを２に設定し、フラグＢｆｌａｇ、連続長Ｌおよび出現回数ｃ（ｊ）を０に設定する。ｊは、０から”ｎ−１”までの整数である。フラグＢｆｌａｇは、直前の要素のアクセス属性Ｚを保持するフラグである。
【０１１６】
ステップＳ３１２では、評価値算出部３４は、アクセス属性テーブルＴＡＢＬ１の要素番号ｉのアクセス属性Ｚ（ｉ）が連続アクセスを示すアクセス属性Ｓか否かを判定する。アクセス属性Ｚ（ｉ）がアクセス属性Ｓの場合（ステップＳ３１２のＹｅｓ）、評価値算出部３４の動作は、ステップＳ３１４に移る。一方、アクセス属性Ｚ（ｉ）がアクセス属性Ｓでない場合（ステップＳ３１２のＮｏ）、評価値算出部３４の動作は、ステップＳ３２０に移る。すなわち、アクセス属性Ｚ（ｉ）が不連続を示すアクセス属性Ｘの場合、評価値算出部３４の動作は、ステップＳ３２０に移る。
【０１１７】
ステップＳ３１４では、評価値算出部３４は、フラグＢｆｌａｇが１か否かを判定する。すなわち、評価値算出部３４は、直前の要素のアクセス属性Ｚ（ｉ−１）がアクセス属性Ｓか否かを判定する。フラグＢｆｌａｇが１の場合（ステップＳ３１４のＹｅｓ）、評価値算出部３４の動作は、ステップＳ３１６に移る。すなわち、直前の要素のアクセス属性Ｚ（ｉ−１）がアクセス属性Ｓの場合、評価値算出部３４の動作は、ステップＳ３１６に移る。
【０１１８】
一方、フラグＢｆｌａｇが１でない場合（ステップＳ３１４のＮｏ）、評価値算出部３４の動作は、ステップＳ３１８に移る。すなわち、直前の要素のアクセス属性Ｚ（ｉ−１）がアクセス属性Ｘの場合、評価値算出部３４の動作は、ステップＳ３１８に移る。
【０１１９】
ステップＳ３１６では、評価値算出部３４は、連続長Ｌの値をカウントアップする。例えば、評価値算出部３４は、連続長Ｌの値に１を加算し、連続長Ｌを更新する。すなわち、評価値算出部３４は、アクセス属性Ｚ（ｉ）およびアクセス属性Ｚ（ｉ−１）の両方がアクセス属性Ｓの場合（連続アクセスが継続する場合）、連続長Ｌの値をカウントアップする。
【０１２０】
ステップＳ３１８では、評価値算出部３４は、連続長ＬおよびフラグＢＦｌａｇの値を１に設定する。すなわち、評価値算出部３４は、アクセス属性Ｚ（ｉ）およびアクセス属性Ｚ（ｉ−１）がそれぞれアクセス属性Ｓ、Ｘの場合（連続アクセスが開始される場合）、連続長ＬおよびフラグＢＦｌａｇの値を１に設定する。
【０１２１】
ステップＳ３２０では、評価値算出部３４は、出現回数ｃ（Ｌ）をカウントアップする。例えば、評価値算出部３４は、出現回数ｃ（Ｌ）の値に１を加算し、出現回数ｃ（Ｌ）を更新する。これにより、連続長Ｌのアクセスパターンの出現回数がカウントされる。出現回数ｃ（Ｌ）を更新した後、評価値算出部３４は、連続長ＬおよびフラグＢＦｌａｇの値を０に設定する。
【０１２２】
すなわち、評価値算出部３４は、アクセス属性Ｚ（ｉ）がアクセス属性Ｘの場合（不連続アクセスの場合）、出現回数ｃ（Ｌ）をカウントアップした後、連続長ＬおよびフラグＢＦｌａｇの値を０に初期化する。
【０１２３】
ステップＳ３２２では、評価値算出部３４は、要素番号ｉをカウントアップする。例えば、評価値算出部３４は、要素番号ｉの値に１を加算し、要素番号ｉを更新する。
【０１２４】
ステップＳ３２４では、評価値算出部３４は、要素番号ｉが配列データＡの配列サイズｎと同じ値か否かを判定する。要素番号ｉが配列データＡの配列サイズｎと同じ値でない場合（ステップＳ３２４のＮｏ）、評価値算出部３４の動作は、ステップＳ３１２に戻る。
【０１２５】
一方、要素番号ｉが配列データＡの配列サイズｎと同じ値である場合（ステップＳ３２４のＹｅｓ）、評価値算出部３４による連続長管理テーブル生成の動作は、終了する。これにより、例えば、図９に示した連続長管理テーブルＴＡＢＬ２が生成される。例えば、評価値算出部３４は、生成した連続長管理テーブルＴＡＢＬ２を参照して、評価値を算出する。
【０１２６】
なお、評価値算出部３４の動作は、この例に限定されない。例えば、評価値算出部３４は、連続長管理テーブルＴＡＢＬ２の連続長Ｌの最大値が”ｎ−１”より小さい場合、ステップＳ３１６において、連続長Ｌが最大値を超えないように、連続長Ｌを更新する。例えば、評価値算出部３４は、ステップＳ３１６を実行する前に、連続長Ｌが最大値か否かを判定する。そして、連続長Ｌが最大値の場合、評価値算出部３４は、ステップＳ３１６を実行せずに、ステップＳ３２２を実行する。
【０１２７】
図１１は、図１に示したコンパイル装置１０のハードウエア構成の一例を示す。なお、図１から図１０で説明した要素と同一または同様の要素については、同一または同様の符号を付し、これ等については、詳細な説明を省略する。
【０１２８】
コンピュータ装置ＣＰは、プロセッサＰＵと、メモリＭＥＭと、ハードディスク装置ＨＤＤと、周辺機器インタフェースＰＩＦと、出力部ＯＵＴＵと、入力部ＩＮＵと、光学ドライブ装置ＯＤＲとを有する。プロセッサＰＵと、メモリＭＥＭと、ハードディスク装置ＨＤＤと、周辺機器インタフェースＰＩＦと、出力部ＯＵＴＵと、入力部ＩＮＵと、光学ドライブ装置ＯＤＲとは、バスＢＵＳを介して互いに接続される。
【０１２９】
コンピュータ装置ＣＰは、例えば、周辺機器インタフェースＰＩＦを介して演算処理装置１００と接続可能である。光学ドライブ装置ＯＤＲは、光ディスク等のリムーバブルディスクＤＩＳを装着可能であり、装着したリムーバブルディスクＤＩＳに記録された情報の読み出しおよび記録を実行する。また、プロセッサＰＵと、メモリＭＥＭと、ハードディスク装置ＨＤＤと、周辺機器インタフェースＰＩＦと、出力部ＯＵＴＵと、入力部ＩＮＵとは、例えば、コンパイル装置１０の機能を実現する。
【０１３０】
出力部ＯＵＴＵは、例えば、プロセッサＰＵにより実行された処理の結果を出力するユニットである。出力部ＯＵＴＵの一例は、ディスプレイ、タッチパネル等である。また、入力部ＩＮＵは、例えば、ユーザからの操作（例えば、翻訳オプションの指定）を受け、コンピュータ装置ＣＰにデータを入力するユニットである。入力部ＩＮＵの一例は、キーボード、マウス、タッチパネル等である。
【０１３１】
メモリＭＥＭは、例えば、コンピュータ装置ＣＰのオペレーティングシステムを格納する。また、メモリＭＥＭは、例えば、図２、図４、図５、図８、図１０等に示した動作をプロセッサＰＵが実行するためのコンパイルプログラム等のアプリケーションプログラムを格納する。なお、コンパイルプログラム等のアプリケーションプログラムは、ハードディスク装置ＨＤＤに格納されてもよい。
【０１３２】
コンパイルプログラム等のアプリケーションプログラムは、例えば、光ディスクなどのリムーバブルディスクＤＩＳに記録して頒布することができる。例えば、コンピュータ装置ＣＰは、コンパイルプログラム等のアプリケーションプログラムを、リムーバブルディスクＤＩＳから光学ドライブ装置ＯＤＲを介して読み出し、メモリＭＥＭやハードディスク装置ＨＤＤに格納してもよい。また、コンピュータ装置ＣＰは、コンパイルプログラム等のアプリケーションプログラムを、インターネット等のネットワークに接続する通信装置（図示せず）を介してダウンロードし、メモリＭＥＭやハードディスク装置ＨＤＤに格納してもよい。
【０１３３】
例えば、プロセッサＰＵは、メモリＭＥＭ等に格納されたコンパイルプログラムを実行することにより、図１に示したコンパイル装置１０の機能を実現する。すなわち、コンパイル装置１０は、プロセッサＰＵと、メモリＭＥＭと、ハードディスク装置ＨＤＤと、周辺機器インタフェースＰＩＦと、出力部ＯＵＴＵと、入力部ＩＮＵとの協同により実現することができる。
【０１３４】
なお、コンパイル装置１０のハードウエア構成は、図１１の例に限定されない。また、図１から図１１に示した実施形態のコンパイル方法等は、例えば、データをストアする際にストア用のプリフェッチ命令を使用するプロセッサに対するコンパイル処理において、ストア用のプリフェッチ命令にも適用されてもよい。
【０１３５】
以上、図１から図１１に示した実施形態のコンパイルプログラム、コンパイル方法およびコンパイル装置では、プリフェッチ命令の挿入対象のデータにプリフェッチ命令を挿入するか否かを、メモリアクセスに関するプロファイル情報に基づいて判定する。
【０１３６】
例えば、アクセス属性検出部３２は、プリフェッチ命令の挿入対象のデータである対象データの中から、所定のアクセスパターンを満たすデータを、対象データのメモリアクセスに関するプロファイル情報に基づいて検出する。所定のアクセスパターンは、例えば、ハードウエアプリフェッチ機能の動作条件に対応するアクセスパターンである。
【０１３７】
そして、評価値算出部３４は、所定のアクセスパターンを満たすデータが連続する長さに基づいて、対象データの評価値を算出する。また、プリフェッチ命令挿入部３６は、対象データに対するプリフェッチ命令の挿入を抑止するか否かを評価値に基づいて判定し、判定結果に基づいて中間コードを更新する。例えば、プリフェッチ命令挿入部３６は、評価値が予め決められた閾値未満の対象データに対してはプリフェッチ命令を挿入し、評価値が閾値を超えた対象データに対してはプリフェッチ命令の挿入を抑止して、中間コードを更新する。
【０１３８】
これにより、この実施形態では、コンパイル処理でプリフェッチ命令を機械語プログラムに挿入する際に、不要なプリフェッチ命令の挿入を低減できる。この結果、この実施形態では、不要なプリフェッチ命令の挿入による演算処理装置１００の性能低下を低減できる。
【０１３９】
ここで、例えば、評価値が予め決められた閾値未満の対象データでは、ハードウエアプリフェッチが実行されるデータの割合が所定の割合より少ない。したがって、プリフェッチ命令が挿入された場合、ハードウエアプリフェッチとプリフェッチ命令によるプリフェッチとの両方が実行されるデータの割合は、所定の割合より少ない。この場合、プリフェッチ命令を挿入することによるメリット（例えば、データを参照するときの待ち時間短縮）の方が、冗長なプリフェッチ命令が挿入されることによるデメリットより大きい。このため、この実施形態では、評価値が閾値未満の対象データに対してはプリフェッチ命令を挿入する。これにより、演算処理装置１００の性能を向上できる。
【０１４０】
また、例えば、評価値が予め決められた閾値を超えた対象データでは、ハードウエアプリフェッチが実行されるデータの割合が所定の割合より多い。したがって、プリフェッチ命令が挿入された場合、ハードウエアプリフェッチとプリフェッチ命令によるプリフェッチとの両方が実行されるデータの割合は、所定の割合より多い。この場合、冗長なプリフェッチ命令が挿入されることによるデメリット（例えば、転送速度の低下等の性能低下）の方が、プリフェッチ命令を挿入することによるメリットより大きい。このため、この実施形態では、評価値が閾値を超えた対象データに対してはプリフェッチ命令の挿入を抑止する。これにより、この実施形態では、不要なプリフェッチ命令の挿入による演算処理装置１００の性能低下を低減できる。
【０１４１】
以上の実施形態において説明した発明を整理して、付記として開示する。
（付記１）
メモリに記憶されたデータを事前にキャッシュメモリに転送するハードウエアプリフェッチ機能を有するプロセッサで実行可能な機械語プログラムにソースプログラムを変換するコンパイル処理をコンピュータに実行させるコンパイルプログラムにおいて、
前記ソースプログラムを中間コードに変換し、
前記メモリに記憶された前記データを事前に前記キャッシュメモリに転送するプリフェッチ命令の挿入対象の前記データである対象データの中から、前記ハードウエアプリフェッチ機能の動作条件に対応するアクセスパターンを満たす前記データを、前記対象データのメモリアクセスに関するプロファイル情報に基づいて検出し、
前記アクセスパターンを満たす前記データが連続する長さに基づいて、前記対象データの評価値を算出し、
前記対象データに対する前記プリフェッチ命令の挿入を抑止するか否かを前記評価値に基づいて判定し、判定結果に基づいて前記中間コードを更新し、
更新された前記中間コードを前記機械語プログラムに変換する、
処理をコンピュータに実行させるコンパイルプログラム。
（付記２）
付記１に記載のコンパイルプログラムにおいて、
前記長さと前記アクセスパターンを満たす前記データの前記長さ毎の発生回数とに基づいて、前記評価値を算出する処理をコンピュータに実行させるコンパイルプログラム。
（付記３）
付記１または付記２に記載のコンパイルプログラムにおいて、
前記アクセスパターンを満たす前記データとして、前記キャッシュメモリのキャッシュラインをアクセス単位とした場合のアクセス先の変化が２ライン未満の変化量の前記データを検出する処理をコンピュータに実行させるコンパイルプログラム。
（付記４）
付記１または付記２に記載のコンパイルプログラムにおいて、
前記アクセスパターンを満たす前記データとして、アクセス先が一定のアクセス幅で昇順および降順のいずれか一方向に変化する前記データを検出する処理をコンピュータに実行させるコンパイルプログラム。
（付記５）
付記１ないし付記４のいずれか１項に記載のコンパイルプログラムにおいて、
前記対象データの中の各データのアクセスの順番を示すインデックスとアクセス先を示すアドレス情報とを含む前記プロファイル情報を、前記ソースプログラムを実行した前記プロセッサから前記対象データ毎に出力させるオブジェクトコードを生成する処理をコンピュータに実行させるコンパイルプログラム。
（付記６）
メモリに記憶されたデータを事前にキャッシュメモリに転送するハードウエアプリフェッチ機能を有するプロセッサで実行可能な機械語プログラムにソースプログラムを変換するコンパイル方法において、
コンピュータは、
前記ソースプログラムを中間コードに変換し、
前記メモリに記憶された前記データを事前に前記キャッシュメモリに転送するプリフェッチ命令の挿入対象の前記データである対象データの中から、前記ハードウエアプリフェッチ機能の動作条件に対応するアクセスパターンを満たす前記データを、前記対象データのメモリアクセスに関するプロファイル情報に基づいて検出し、
前記アクセスパターンを満たす前記データが連続する長さに基づいて、前記対象データの評価値を算出し、
前記対象データに対する前記プリフェッチ命令の挿入を抑止するか否かを前記評価値に基づいて判定し、判定結果に基づいて前記中間コードを更新し、
更新した前記中間コードを前記機械語プログラムに変換する
ことを特徴とするコンパイル方法。
（付記７）
付記６に記載のコンパイル方法において、
前記コンピュータは、前記長さと前記アクセスパターンを満たす前記データの前記長さ毎の発生回数とに基づいて、前記評価値を算出することを特徴とするコンパイル方法。
（付記８）
付記６または付記７に記載のコンパイル方法において、
前記コンピュータは、前記アクセスパターンを満たす前記データとして、前記キャッシュメモリのキャッシュラインをアクセス単位とした場合のアクセス先の変化が２ライン未満の変化量の前記データを検出することを特徴とするコンパイル方法。
（付記９）
付記６または付記７に記載のコンパイル方法において、
前記コンピュータは、前記アクセスパターンを満たす前記データとして、アクセス先が一定のアクセス幅で昇順および降順のいずれか一方向に変化する前記データを検出することを特徴とするコンパイル方法。
（付記１０）
付記６ないし付記９のいずれか１項に記載のコンパイル方法において、
前記コンピュータは、前記対象データの中の各データのアクセスの順番を示すインデックスとアクセス先を示すアドレス情報とを含む前記プロファイル情報を、前記ソースプログラムを実行した前記プロセッサから前記対象データ毎に出力させるオブジェクトコードを生成することを特徴とするコンパイル方法。
（付記１１）
メモリに記憶されたデータを事前にキャッシュメモリに転送するハードウエアプリフェッチ機能を有するプロセッサで実行可能な機械語プログラムにソースプログラムを変換するコンパイル処理を実行するコンパイル装置において、
前記ソースプログラムを中間コードに変換する変換部と、
前記中間コードを更新する最適化部と、
更新された前記中間コードを前記機械語プログラムに変換するコード生成部とを有し、
前記最適化部は、
前記メモリに記憶された前記データを事前に前記キャッシュメモリに転送するプリフェッチ命令の挿入対象の前記データである対象データの中から、前記ハードウエアプリフェッチ機能の動作条件に対応するアクセスパターンを満たす前記データを、前記対象データのメモリアクセスに関するプロファイル情報に基づいて検出する検出部と、
前記アクセスパターンを満たす前記データが連続する長さに基づいて、前記対象データの評価値を算出する算出部と、
前記対象データに対する前記プリフェッチ命令の挿入を抑止するか否かを前記評価値に基づいて判定し、判定結果に基づいて前記中間コードを更新する更新部とを有することを特徴とするコンパイル装置。
（付記１２）
付記１１に記載のコンパイル装置において、
前記算出部は、前記長さと前記アクセスパターンを満たす前記データの前記長さ毎の発生回数とに基づいて、前記評価値を算出することを特徴とするコンパイル装置。
（付記１３）
付記１１または付記１２に記載のコンパイル装置において、
前記検出部は、前記アクセスパターンを満たす前記データとして、前記キャッシュメモリのキャッシュラインをアクセス単位とした場合のアクセス先の変化が２ライン未満の変化量の前記データを検出することを特徴とするコンパイル装置。
（付記１４）
付記１１または付記１２に記載のコンパイル装置において、
前記検出部は、前記アクセスパターンを満たす前記データとして、アクセス先が一定のアクセス幅で昇順および降順のいずれか一方向に変化する前記データを検出することを特徴とするコンパイル装置。
（付記１５）
付記１１ないし付記１４のいずれか１項に記載のコンパイル装置において、
前記最適化部は、前記対象データの中の各データのアクセスの順番を示すインデックスとアクセス先を示すアドレス情報とを含む前記プロファイル情報を、前記ソースプログラムを実行した前記プロセッサから前記対象データ毎に出力させるオブジェクトコードを生成することを特徴とするコンパイル装置。
（付記１６）
メモリに記憶されたデータを事前にキャッシュメモリに転送するハードウエアプリフェッチ機能を有するプロセッサで実行可能な機械語プログラムにソースプログラムを変換するコンパイル処理をコンピュータに実行させるコンパイルプログラムを記録したコンピュータ読み取り可能な記録媒体において、
前記ソースプログラムを中間コードに変換し、
前記メモリに記憶された前記データを事前に前記キャッシュメモリに転送するプリフェッチ命令の挿入対象の前記データである対象データの中から、前記ハードウエアプリフェッチ機能の動作条件に対応するアクセスパターンを満たす前記データを、前記対象データのメモリアクセスに関するプロファイル情報に基づいて検出し、
前記アクセスパターンを満たす前記データが連続する長さに基づいて、前記対象データの評価値を算出し、
前記対象データに対する前記プリフェッチ命令の挿入を抑止するか否かを前記評価値に基づいて判定し、判定結果に基づいて前記中間コードを更新し、
更新された前記中間コードを前記機械語プログラムに変換する、
処理をコンピュータに実行させるコンパイルプログラムを記録したコンピュータ読み取り可能な記録媒体。
（付記１７）
付記１６に記載のコンピュータ読み取り可能な記録媒体において、
前記長さと前記アクセスパターンを満たす前記データの前記長さ毎の発生回数とに基づいて、前記評価値を算出する処理をコンピュータに実行させるコンパイルプログラムを記録したコンピュータ読み取り可能な記録媒体。
（付記１８）
付記１６または付記１７に記載のコンピュータ読み取り可能な記録媒体において、
前記アクセスパターンを満たす前記データとして、前記キャッシュメモリのキャッシュラインをアクセス単位とした場合のアクセス先の変化が２ライン未満の変化量の前記データを検出する処理をコンピュータに実行させるコンパイルプログラムを記録したコンピュータ読み取り可能な記録媒体。
（付記１９）
付記１６または付記１７に記載のコンピュータ読み取り可能な記録媒体において、
前記アクセスパターンを満たす前記データとして、アクセス先が一定のアクセス幅で昇順および降順のいずれか一方向に変化する前記データを検出する処理をコンピュータに実行させるコンパイルプログラムを記録したコンピュータ読み取り可能な記録媒体。
（付記２０）
付記１６ないし付記１９のいずれか１項に記載のコンピュータ読み取り可能な記録媒体において、
前記対象データの中の各データのアクセスの順番を示すインデックスとアクセス先を示すアドレス情報とを含む前記プロファイル情報を、前記ソースプログラムを実行した前記プロセッサから前記対象データ毎に出力させるオブジェクトコードを生成する処理をコンピュータに実行させるコンパイルプログラムを記録したコンピュータ読み取り可能な記録媒体。
【０１４２】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【０１４３】
１０‥コンパイル装置；２０‥コード変換部；３０‥最適化部；３２‥アクセス属性検出部；３４‥評価値算出部；３６‥プリフェッチ命令挿入部；４０‥コード生成部；１００‥演算処理装置；１１０‥命令デコーダ；１２０‥演算部；１３０‥キャッシュメモリ；１４０‥ハードウエアプリフェッチ制御装置；１５０‥メインメモリ；ＣＰ‥コンピュータ装置；ＤＩＳ‥リムーバブルディスク；ＨＤＤ‥ハードディスク装置；ＩＮＵ‥入力部；ＭＥＭ‥メモリ；ＯＤＲ‥光学ドライブ装置；ＯＵＴＵ‥出力部；ＰＩＦ‥周辺機器インタフェース；ＰＵ‥プロセッサ
【図１】
2015219652.tif 000003
【図２】
2015219652.tif 000004
【図３】
2015219652.tif 000005
【図４】
2015219652.tif 000006
【図５】
2015219652.tif 000007
【図６】
2015219652.tif 000008
【図７】
2015219652.tif 000009
【図８】
2015219652.tif 000010
【図９】
2015219652.tif 000011
【図１０】
2015219652.tif 000012
【図１１】
2015219652.tif 000013