(57)【要約】【課題】キャッシュの状態が「データがない、ロード向け、ロード及びストア両方向け」の３状態を持つ場合において、プリフェッチ命令を包括的に自動生成する方法及びコンパイラを提供すること。【解決手段】コンパイラのプリフェッチ命令生成方法は、コンパイル対象であるソースプログラムを構成する１以上の最適化対象領域毎に、最適化対象領域に含まれる命令のうち、キャッシュをデータがない状態からロードに適した状態へ遷移させるロード命令と、最適化対象領域に含まれる命令のうち、キャッシュをロードに適した状態からロード及びストアに適した状態へ遷移させるストア命令と、を最適化対象として特定するステップと、特定された最適化対象と、前記ソースプログラムに含まれる各ｉｆ文の分岐確率と、に基づいて、最適化対象領域におけるプリフェッチ命令を挿入する位置を決定し、位置にプリフェッチ命令を生成するステップと、を含む。【選択図】図３
2010128960.tif 000002
【特許請求の範囲】
【請求項１】
ソースプログラムをオブジェクト・コードにコンパイルして実行する情報処理装置で利用されるコンパイラのプリフェッチ命令を生成する方法であって、
前記ソースプログラムを構成する１以上の最適化対象領域毎に、
前記最適化対象領域に含まれる命令のうち、キャッシュをデータがない状態からロードに適した状態へ遷移させるロード命令と、前記最適化対象領域に含まれる命令のうち、キャッシュをロードに適した状態からロード及びストアに適した状態へ遷移させるストア命令と、を最適化対象として特定するステップと、
特定された前記最適化対象と、前記ソースプログラムに含まれる各ｉｆ文の分岐確率とに基づいて、前記最適化対象領域におけるプリフェッチ命令を挿入する位置を決定し、前記位置にプリフェッチ命令を生成するステップと、
を含むプリフェッチ命令を生成する方法。
【請求項２】
前記最適化対象領域のストア命令及びロード命令のうち、ベース・メモリアドレスが同じであって、メモリアドレス上の所定のオフセットの範囲を満足しているストア命令及びロード命令を１グループとし、１以上のグループに分類するステップを含む請求項１に記載のプリフェッチ命令を生成する方法。
【請求項３】
前記プリフェッチ命令を生成するステップは、
前記最適化対象領域において、前記１以上のグループに含まれる前記最適化対象のストア命令について、前記１以上のグループ毎に、当該ストア命令に前記ベース・メモリアドレスが変わらず、実行頻度の高いパスを通って到達できるストア影響領域を求めるステップと、
求められた前記ストア影響領域それぞれにおいて、前記最適化対象のストア命令より前のロード命令のうち、当該ストア影響領域の内にて先頭にあるロード命令より前に当該ストア影響領域に対応するグループに対するストア・プリフェッチ命令を生成するステップと、
前記最適化対象領域において、前記１以上のグループに含まれる最適化対象のロード命令について、前記１以上のグループ毎に、当該ロード命令に前記ベース・メモリアドレスが変わらず、実行頻度の高いパスを通って到達できる領域のうち、前記ストア影響領域を除いたロード影響領域を求めるステップと、
求められた前記ロード影響領域それぞれにおいて、当該ロード影響領域に対応するグループに対するロード・プリフェッチ命令を生成するステップと、
を含む請求項２に記載のプリフェッチ命令を生成する方法。
【請求項４】
前記ストア影響領域は、後進データフロー解析を用いて求める、請求項３に記載のプリフェッチ命令を生成する方法。
【請求項５】
前記ストア影響領域内にて先頭にあるロード命令を、前進データフロー解析を用いて求める、請求項３に記載のプリフェッチ命令を生成する方法。
【請求項６】
前記ロード影響領域は、後進データフロー解析を用いて求める、請求項３に記載のプリフェッチ命令を生成する方法。
【請求項７】
前記最適化対象のロード命令には、ロード命令が含まれている可能性がある命令をも含む、請求項１に記載のプリフェッチ命令を生成する方法。
【請求項８】
ソースプログラムをオブジェクト・コードにコンパイルして実行する情報処理装置で利用されるコンパイラであって、
前記ソースプログラムを構成する複数の最適化対象領域毎に、
前記最適化対象領域に含まれる命令のうち、キャッシュをデータがない状態からロードに適した状態へ遷移させるロード命令と、前記最適化対象領域に含まれる命令のうち、キャッシュをロードに適した状態からロード及びストアに適した状態へ遷移させるストア命令と、を最適化対象として特定する特定手段と、
特定された前記最適化対象と、前記ソースプログラムに含まれる各ｉｆ文の分岐確率とに基づいて、前記最適化対象領域におけるプリフェッチ命令を挿入する位置を決定し、前記位置にプリフェッチ命令を生成する生成段階と、
を備えるコンパイラ。
【請求項９】
コンピュータに、ソースプログラムからオブジェクト・コードを生成させる処理を実行させるプログラムであって、
前記コンピュータに、
前記ソースプログラムを構成する複数の最適化対象領域毎に、
前記最適化対象領域に含まれる命令のうち、キャッシュをデータがない状態からロードに適した状態へ遷移させるロード命令と、前記最適化対象領域に含まれる命令のうち、キャッシュをロードに適した状態からロード及びストアに適した状態へ遷移させるストア命令と、を最適化対象として特定するステップと、
特定された前記最適化対象と、前記ソースプログラムに含まれる各ｉｆ文の分岐確率とに基づいて、前記最適化対象領域におけるプリフェッチ命令を挿入する位置を決定し、前記位置にプリフェッチ命令を生成するステップと、
を実行させるプログラム。
【請求項１０】
ソースプログラムをオブジェクト・コードにコンパイルして実行する情報処理装置で利用されるコンパイラのプリフェッチ命令を生成する方法であって、
前記ソースプログラムを構成する１以上の最適化対象領域毎に、
前記最適化対象領域のストア命令及びロード命令のうち、ベース・メモリアドレスが同じであって、メモリアドレス上の所定のオフセットの範囲を満足しているストア命令及びロード命令を１グループとし、１以上のグループに分類するステップと、
前記最適化対象領域に含まれる命令のうち、キャッシュをデータがない状態からロードに適した状態へ遷移させるロード命令と、前記最適化対象領域に含まれる命令のうち、キャッシュをロードに適した状態からロード及びストアに適した状態へ遷移させるストア命令と、を最適化対象として特定するステップと、
前記最適化対象領域において、前記１以上のグループに含まれる前記最適化対象のストア命令について、前記１以上のグループ毎に、当該ストア命令に前記ベース・メモリアドレスが変わらず、実行頻度の高いパスを通って到達できるストア影響領域を後進データフロー解析により求めるステップと、
求められた前記ストア影響領域それぞれにおいて、前記最適化対象のストア命令より前のロード命令のうち、当該ストア影響領域の内にて先頭にあるロード命令を前進データフロー解析により求め、求められた前記ストア影響領域の内にて先頭にあるロード命令より前に当該ストア影響領域に対応するグループに対するストア・プリフェッチ命令を生成するステップと、
前記最適化対象領域において、前記１以上のグループに含まれる最適化対象のロード命令について、前記１以上のグループ毎に、当該ロード命令に前記ベース・メモリアドレスが変わらず、実行頻度の高いパスを通って到達できる領域のうち、前記ストア影響領域を除いたロード影響領域を後進データフロー解析により求めるステップと、
求められた前記ロード影響領域それぞれにおいて、当該ロード影響領域に対応するグループに対するロード・プリフェッチ命令を生成するステップと、
を含むプリフェッチ命令を生成する方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プリフェッチ命令生成方法、コンパイラ、及びプログラムに関する。特に、ロード命令及びストア命令それぞれに対するプリフェッチ命令を包括的に生成するプリフェッチ命令生成方法、コンパイラ、及びプログラムに関する。
【背景技術】
【０００２】
コンパイラは、ソースプログラムを解析して得られるオブジェクト・コードにプリフェッチ命令を生成することにより最適化を行う。ここで、プリフェッチ命令とは、プログラム実行中に、今後、必要になると思われる命令やデータを、先行してキャッシュに読み込んでおくための命令である。従来、コンパイラが行う、プリフェッチ命令を生成する最適化は、キャッシュの状態が「データがある、ない」の２状態を持つことを仮定したものであった。
【０００３】
キャッシュの状態が２状態の場合の最適化としては、例えば、ロード命令とストア命令とが実行されることにより生成されるプロファイルデータを用いて、所定以上の頻度でキャッシュミスを発生する命令の前にプリフェッチ命令を挿入する方法が提案されている（特許文献１）。
【０００４】
また、コンパイラの最適化のアーキテクチャによっては、キャッシュの状態が「データがない状態、ロードに適する状態、ロード及びストア両方に適する状態」、の３状態を持つものがある。キャッシュが３状態を持つ場合には、キャッシュの状態を変えるために、ストア命令に対するプリフェッチ命令が用意されている。
【０００５】
キャッシュの状態が３状態ある場合における、コンパイラが行う、プリフェッチ命令を生成する最適化の手法として、ロード命令に対するプリフェッチ命令と、ストア命令に対するプリフェッチ命令と、をそれぞれ個別にコンパイラが自動生成する方法が提案されている（非特許文献１）。
【特許文献１】米国特許第６９５１０１５号公報
【非特許文献１】Jonas  Skeppstedt  and  Per  Stenstrm,  "Using dataflow analysis  techniques  to  reduce  ownership  overhead  in  cache  coherence  protocols",  ACM  Transactions  on  Programming  Languages  and  Systems,  Volume  18  ,  Issue  6  (November  1996),  Pages:  659  -  682,  1996.
【発明の開示】
【発明が解決しようとする課題】
【０００６】
特許文献１及び非特許文献１に記載の方法では、２種類のプリフェッチ命令をそれぞれ個別にコンパイラが自動生成することによって最適化が行われるが、無駄なプリフェッチ命令の挿入等が行われることがあるという問題点がある。
【０００７】
無駄なプリフェッチ命令の挿入等が行われることがあるという問題点について、以下に具体的に説明する。特許文献１及び非特許文献１に記載の方法では、ロード命令後にストア命令が行われる場合に、ロード命令に対するプリフェッチ命令と、ストア命令に対するプリフェッチ命令との２つがこの順でオブジェクト・コードに挿入される。その結果、キャッシュの状態は、ロードに適する状態に変更後、ロード及びストアに適する状態に変更される。すなわち、キャッシュの状態は２回変更される。
【０００８】
ところで、ストア命令に対するプリフェッチ命令は、キャッシュの状態をロード及びストアの両方に適する状態とする命令である。そのため、ロード命令に対するプリフェッチ命令をストア命令に対するプリフェッチ命令に置き換えても、キャッシュの状態をロードに適する状態とすることができる。
【０００９】
そのため、ロード命令後にストア命令が続いている場合に、ロード命令に対するプリフェッチ命令をストア命令に対するプリフェッチ命令に置き換えることができる。言い換えると、ロード命令に対するプリフェッチ命令後のストア命令に対するプリフェッチ命令を、ロード命令に対して行うようにすることができる。それにより、キャッシュの状態はロード及びストアに適する状態に一回変更されるだけとなり、コンパイラはより最適化されたオブジェクト・コードを生成することができる。つまり、ロード命令後にストア命令が行われる場合には、ロード命令に対するプリフェッチ命令は無駄である。
【００１０】
特許文献１及び非特許文献１に記載の方法では、ロード命令に対するプリフェッチ命令と、ストア命令に対するプリフェッチ命令と、をそれぞれ個別に自動生成する。そのため、ロード命令後にストア命令が行われる場合であっても、ロード命令に対するプリフェッチ命令をストア命令に対するプリフェッチ命令とすることができず、無駄なロード命令に対するプリフェッチ命令を生成してしまうという問題点がある。
【００１１】
本発明は、キャッシュの状態が「データがない、ロード向け、ロード及びストア両方向け」、の３状態を持つ場合における無駄なプリフェッチ命令の挿入を防ぐために、ロード命令に対するプリフェッチ命令と、ストア命令に対するプリフェッチ命令と、を包括的にオブジェクト・コードに自動生成する方法及びコンパイラを提供することを目的とする。
【課題を解決するための手段】
【００１２】
本発明は上記課題に鑑み、以下のような解決手段を提供する。本発明は、キャッシュの状態が「データがない、ロード向け、ロード及びストア両方向け」、の３状態を持つ場合において、ストア命令に対するプリフェッチ命令がキャッシュの状態をロード及びストアに適した状態とすることを利用して、ロード命令に対するプリフェッチ命令とストア命令に対するプリフェッチ命令とを包括的に生成する、コンパイラのプリフェッチ命令生成方法を提供する。
【００１３】
本発明の１つの態様によると、コンパイラのプリフェッチ命令生成方法は、コンパイル対象であるソースプログラムを構成する１以上の最適化対象領域毎に、前記最適化対象領域に含まれる命令のうち、キャッシュをデータがない状態からロードに適した状態へ遷移させるロード命令と、前記最適化対象領域に含まれる命令のうち、キャッシュをロードに適した状態からロード及びストアに適した状態へ遷移させるストア命令と、を最適化対象として特定するステップと、特定された前記最適化対象と、前記ソースプログラムに含まれる各ｉｆ文の分岐確率と、に基づいて、前記最適化対象領域におけるプリフェッチ命令を挿入する位置を決定し、前記位置にプリフェッチ命令を生成するステップと、を含む。
【００１４】
本態様によると、キャッシュをデータがない状態からロードに適した状態へ遷移させるロード命令と、キャッシュをロードに適した状態からロード及びストアに適した状態へ遷移させるストア命令とを最適化対象として含み、最適化対象に基づいてプリフェッチ命令を挿入する位置を決定する。それにより、ロード命令後にストア命令が続いている場合のロード命令とストア命令とに基づいてプリフェッチ命令を挿入する位置を決定することにより、無駄なプリフェッチ命令の生成を省き、ロード命令とストア命令とに対して包括的にプリフェッチ命令を生成することができる。また、ソースプログラムに含まれる各ｉｆ文の分岐確率を用いることにより、プログラムの実行時の統計情報を加味して、プリフェッチ命令を生成することができる。その結果、パフォーマンスを向上することができる。
【００１５】
また、本態様は、前記最適化対象領域のストア命令及びロード命令のうち、ベース・メモリアドレスが同じであって、メモリアドレス上の所定のオフセットの範囲を満足しているストア命令及びロード命令を１グループとし、１以上のグループに分類するステップを含む。それにより、キャッシュに格納するデータの単位であるキャッシュラインサイズを考慮に入れて、プリフェッチ命令を生成することができる。その結果、パフォーマンスを向上することができる。
【００１６】
本発明は、スクリプト言語を用いるプログラム開発言語、ハイパーテキスト等を解釈して実行するブラウザ及びこれを利用するプログラム開発環境等の、既存の技術と組み合わせることができ、そのように組み合わせた技術もまた、本発明の技術範囲に含まれる。更に、本発明の技法は、プリフェッチ命令を生成する方法の諸段階を、ＦＰＧＡ（現場でプログラム可能なゲートアレイ）、ＡＳＩＣ（特定用途向け集積回路）、これらと同等のハードウェアロジック素子、プログラム可能な集積回路、またはこれらの組み合わせが記憶し得るプログラムの形態、すなわちプログラム製品として提供し得る。具体的には、データ入出力、データバス、メモリバス、システムバス等を備えるカスタムＬＳＩ（大規模集積回路）の形態として、本発明に係るプリフェッチ命令を生成する方法を提供でき、そのように集積回路に記憶されたプログラム製品の形態も、本発明の技術範囲に含まれる。
【発明の効果】
【００１７】
本発明によれば、キャッシュの状態が「データがない、ロード向け、ロード及びストア両方向け」、の３状態を持つ場合における無駄なプリフェッチ命令の挿入を防ぐために、ロード命令に対するプリフェッチ命令と、ストア命令に対するプリフェッチ命令と、を包括的にオブジェクト・コードに自動生成する方法及びコンパイラを提供することができる。また、ロード命令に対するプリフェッチ命令と、ストア命令に対するプリフェッチ命令との生成に、プログラムの実行時の統計情報、及びキャッシュラインサイズを考慮することにより、パフォーマンスを向上することができる。
【発明を実施するための最良の形態】
【００１８】
以下、本発明の実施形態について図を参照しながら説明する。なお、これらはあくまでも一例であって、本発明の技術的範囲はこれらに限られるものではない。
【００１９】
図１は、本発明の一実施形態に係るコンパイラ１の構成を示す図である。本実施の形態のコンパイラ１は、字句解析部１０と、構文解析部１１と、意味解析部１２と、中間コード生成部１３と、コード最適化部１４と、コード生成部１５と、を備える。
【００２０】
コード最適化部１４は、中間コード生成部１３にて生成された中間コードを入力して後述する最適化処理を実施し、最適化したコードを出力する。なお、コード最適化部１４は、本実施の形態による最適化処理以外のコンパイル処理における各種の最適化処理を更に含むことは言うまでもない。コード最適化部１４で用いられる中間コードは、字句解析部１０、構文解析部１１、及び意味解析部１２の結果に基づいて、中間コード生成部１３にて生成される。コード最適化部１４にて最適化されたコードは、コード生成部１５で、オブジェクト・コード（通常、機械語）に翻訳される。
【００２１】
本発明の一実施形態において、対象とするコンパイラ１のコード最適化部１４における最適化のアーキテクチャはキャッシュの状態として少なくとも次の３状態を持つ。
状態１：データがない状態。
状態２：ロードに適する状態。
状態３：ロード及びストアに適した状態。
【００２２】
上述した３状態は以下の関係を有する。キャッシュの状態が状態１（データがない状態）である場合に、ロード命令によるメモリアクセスが起きるとキャッシュの状態は状態２へ遷移する。一方、キャッシュの状態が状態１（データがない状態）である場合に、ストア命令によるメモリアクセスが起きると、キャッシュの状態は状態３へ遷移する。また、キャッシュの状態が状態２（ロードに適する状態）である場合に、ストア命令によるメモリアクセスが起きるとキャッシュの状態は状態３へ遷移する。
【００２３】
本発明の一実施形態において、コンパイラ１のコード最適化部１４が最適化を行う際に利用するプロファイル情報には、以下の３種類が含まれる。
プロファイル１：状態１から状態２への遷移がどのロード命令で起きているか。
プロファイル２：状態２から状態３への遷移がどのストア命令で起きているか。
プロファイル３：ソースプログラムに含まれる各ｉｆ文の分岐確率。
【００２４】
本発明に係る一実施形態においては、プロファイル１を用いて、プリフェッチ命令を生成する対象を、キャッシュの状態を状態１から状態２へ遷移させるロード命令とする。ロード命令には、キャッシュの状態を状態１から状態２とするロード命令、状態２から状態２とするロード命令、状態３から状態２とするロード命令、の３種類がある。しかし、最適化の必要、すなわち、プリフェッチ命令を生成する必要があるのは、キャッシュの状態を状態１から状態２へ遷移させるロード命令だけである。キャッシュの状態を状態２から状態２とするロード命令と、キャッシュの状態を状態３から状態２とするロード命令とには、プリフェッチ命令を生成することによる効果が得られないからである。
【００２５】
上述した理由から、プリフェッチ命令を生成する対象をキャッシュの状態を状態１から状態２へ遷移させるロード命令とすることにより、生成する必要のない無駄なプリフェッチ命令を生成することがなくなり、パフォーマンスを向上することができる。
【００２６】
本発明に係る一実施形態においては、プロファイル２を用いて、プリフェッチ命令を生成する対象を、キャッシュの状態を状態２から状態３へ遷移させるストア命令とする。ストア命令には、キャッシュの状態を状態１から状態３とするストア命令、状態２から状態３とするストア命令、状態３から状態３とするストア命令、の３種類がある。しかし、最適化の必要、すなわち、プリフェッチ命令を生成する必要があるのは、キャッシュの状態を状態２から状態３へ遷移させるストア命令だけである。キャッシュの状態を状態１から状態３とするストア命令と、キャッシュの状態を状態３から状態３とするロード命令とには、プリフェッチ命令を生成することによる効果が得られないからである。
【００２７】
上述した理由から、プリフェッチ命令を生成する対象をキャッシュの状態を状態２から状態３へ遷移させるストア命令とすることにより、生成する必要のない無駄なプリフェッチ命令を生成することがなくなり、パフォーマンスを向上することができる。
【００２８】
更に、プロファイル３をプロファイル情報に含むことにより、実行頻度を最適化に利用することができる。ソースプログラムに含まれるｉｆ文の分岐確率により、ソースプログラムに含まれるロード命令及びストア命令の実行頻度で実行されるかを特定することができ、プリフェッチ命令を効果的な位置に生成することができる。
【００２９】
実行頻度は、具体的には、ＪＩＴ（Ｊｕｓｔ  Ｉｎ  Ｔｉｍｅ）コンパイラ等の動的コンパイラにおいては、実行時に取得した統計情報から得ることができる。また、静的コンパイラにおいては、ｏｆｆｌｉｎｅで取得した統計情報やアノテーションから得ることができる。ここで、ＪＩＴコンパイラとは、Ｊａｖａ（登録商標）プログラムを実行する際に、プラットフォームから独立した形式のプログラム（Ｊａｖａバイトコード）を、実行前にまとめて一気にそのプラットフォームで実行可能なプログラム（ネイティブコード）に変換し、実行する機構のことである。
【００３０】
上述したプロファイル情報を用いて、コンパイラ１のコード最適化部１４にて実行される、最適化対象領域毎にプリフェッチ命令を最適化領域に対応するオブジェクト・コードの最適な位置に生成する処理（最適化処理）について説明する。ここで、最適化対象領域とは、ソースプログラム中のメソッドや関数、またそれらの一部を意味する。また、単にプリフェッチ命令とした際にはロード命令のプリフェッチ命令（以下、簡略化のためロード・プリフェッチ命令という）及びストア命令のプリフェッチ命令（以下、簡略化のためストア・プリフェッチ命令という）の両方を意味する。
【００３１】
本発明の一実施形態に係る最適化処理の説明において、ストア命令及びロード命令のそれぞれのメモリアドレスはベース・メモリアドレス（以下、簡略化のためベースアドレスという）とベースアドレスからのオフセットとの２つによって表現されるとする。
【００３２】
また、本発明の一実施形態に係る最適化処理には、プリフェッチ・グループを用いる。プリフェッチ・グループとは、同一キャッシュラインに含まれるロード命令及びストア命令の集合である。具体的には、プリフェッチ・グループは、ベースアドレスが共通であり、かつある一定のオフセット範囲に含まれているロード命令及びストア命令の集合である。
【００３３】
プリフェッチ・グループが同一キャッシュラインに含まれるロード命令及びストア命令の集合であるのは、同一キャッシュラインに入るメモリアクセスも最適化対象とするためである。従来のコンパイラの最適化においては、キャッシュラインを考慮しておらず、同一アドレスのメモリアクセスのみが最適化対象であった。しかし、ＩＢＭ  Ｓｙｓｔｅｍ  ｚ（登録商標）等のようにキャッシュラインサイズが大きい場合（例えば、２５６バイト）には、同一のキャッシュラインに入るメモリアクセスを最適化対象とするべきである。そこで、同一のキャッシュラインに入るメモリアクセスを最適化対象とするために、プリフェッチ・グループを同一キャッシュラインに含まれるロード命令及びストア命令の集合とする。
【００３４】
なお、プリフェッチ・グループは、同一キャッシュラインに含まれるロード命令及びストア命令の集合であることから、ある一定のオフセットの範囲はキャッシュラインサイズ以下であることが望ましい。
【００３５】
上述したプリフェッチ・グループは、以下の情報を持つ。
（１）ｂａｓｅ：プリフェッチ・グループに含まれるロード命令及びストア命令のベースアドレス。
（２）ｍｉｎ，ｍａｘ：プリフェッチ・グループのオフセットの最小値、最大値。実数とは限らず、変数を含んでもよい。変数を含む場合には、例えば、ｍｉｎ＝ｉ−５，ｍａｘ＝ｉ＋５と表される。
（３）ｒｅｐ：プリフェッチ・グループに対して、プリフェッチ命令を生成するときに使用するオフセット。ｒｅｐはｍｉｎとｍａｘとの間の値となる。
（４）ｓｔｏｒｅｓ：プリフェッチ命令に含まれるストア命令の集合。具体的には、ベース（ｂａｓｅ）を基準とし、オフセットがｍｉｎ、ｍａｘの範囲にあるストア命令の集合である。
（５）ｌｏａｄｓ：プリフェッチ命令に含まれるロード命令の集合。具体的には、ベース（ｂａｓｅ）を基準とし、オフセットがｍｉｎ、ｍａｘの範囲にあるロード命令の集合である。
【００３６】
図２は、本発明の一実施形態に係る最適化処理のフローチャートである。最適化処理は、コンパイラ１のコード最適化部１４にて実行される。
【００３７】
Ｓ１：最適化対象領域において、ベースアドレスが共通するロード命令及びストア命令についてそれぞれのオフセット値に基づいて、１以上のプリフェッチ・グループに分ける。具体的には、ベースアドレスが共通し、かつオフセット値がある一定の範囲に含まれるロード命令及びストア命令を１つのプリフェッチ・グループとする。オフセット値の範囲は、任意の値でよいが、上述したようにキャッシュラインサイズ以下であることが望ましい。
【００３８】
Ｓ２：最適化対象領域に含まれるロード命令及びストア命令のうち、最適化対象のロード命令とストア命令とを特定する。具体的には、プロファイル情報に含まれるプロファイルに基づいて、ロード命令及びストア命令を特定する。ロード命令は、プロファイル１により特定され、キャッシュをデータがない状態からロードに適した状態へ遷移させるロード命令である。一方、ストア命令は、プロファイル２により特定され、キャッシュをロードに適した状態からロード及びストアに適した状態へ遷移させるストア命令である。
【００３９】
Ｓ３：最適化対象領域において、ステップＳ１にて作成された各プリフェッチ・グループに含まれる、ステップＳ２にて特定された最適化対象ストア命令（以下、基準ストア命令という）が、当該基準ストア命令にベースアドレスが変わらず、かつ、全ての実行頻度の高いパスを通って到達できる領域をストア影響領域として求める。なお、基準ストア命令は１つとは限らない。実行頻度の高いパスは、プロファイル情報に含まれるプロファイル３に基づいて求められる。詳細なストア影響領域の求め方については後述する。
【００４０】
Ｓ４：ステップＳ３で求めたストア影響領域内でプリフェッチ・グループに該当するストア命令より前に実行されるロード命令のうち、各パスの最初に現れるロード命令の前に、当該プリフェッチ・グループに対するストア・プリフェッチ命令を生成する。なお、最初に現れるロード命令は、ロード命令が含まれている可能性がある命令であってもよい。ロード命令が含まれている可能性がある命令には、例えば、メソッド呼び出し命令がある。メソッド呼び出し命令（例えば、ｃａｌｌ文）は、呼び出し先にそのようなロード命令が含まれている可能性があるからである。
【００４１】
各パスの最初に現れるロード命令の前にストア・プリフェッチ命令を生成することにより、ストア命令に先行する全てのロード命令に対しストア・プリフェッチ命令が生成することにより無駄なストア・プリフェッチ命令が生成されるという従来技術の問題点を解消することができる。無駄なストア・プリフェッチ命令とは、ストア・プリフェッチ命令によりキャッシュの状態がロード及びストア両方に適する状態に変更された後のストア・プリフェッチ命令である。また、それらはキャッシュの状態を変更しないために無駄であり、パフォーマンスを悪くする原因である。
【００４２】
Ｓ５：最適化対象領域において、ステップＳ１にて分けられた各プリフェッチ・グループに含まれる最適化対象のロード命令（以下、基準ロード命令という）が、当該基準ロード命令にベースアドレスが変わらず、かつ、全ての実行頻度の高いパスを通って到達できる領域のうち、ステップ３で求めたストア影響領域を除いた領域をロード影響領域として求める。なお、基準ロード命令は１つとは限らない。実行頻度の高いパスは、プロファイル情報に含まれるプロファイル３に基づいて求められる。詳細なロード影響領域の求め方については後述する。
【００４３】
ロード影響領域を求める条件として、ステップ３で求めたストア影響領域を除くとすることにより、ストア命令に先行するロード命令において、無駄なロード・プリフェッチ命令が挿入される問題点を解消することができる。
【００４４】
Ｓ６：ステップＳ５で求めたロード影響領域内に、プリフェッチ・グループに対するロード・プリフェッチ命令を生成する。
【００４５】
上述した最適化処理においては、ステップＳ１、Ｓ２、Ｓ３とステップＳ５は必ずこの順で行われる必要がある。なぜならば、それぞれは前ステップの結果を用いているからである。しかし、ステップＳ４はステップＳ３以降であればよいので、ステップＳ５やステップＳ６の後としてもよい。また、ステップＳ６はステップＳ３とＳ５以降であればよいので、ステップＳ３、Ｓ５の後にステップＳ６、Ｓ４のように、ステップＳ６をステップＳ４の前としてもよい。
【００４６】
図３は、本発明の一実施形態に係る最適化処理におけるプリフェッチ命令生成の概要図である。図２に示した最適処理に基づいて、図３に示すプリフェッチ命令生成の概要図ついて説明する。図３には、図２のステップＳ１にて分けられたプリフェッチ・グループの１つを示す。図３に示すプリフェッチ・グループの情報は以下の通りである。
【００４７】
（１）ｂａｓｅ：ａ
（２）ｍｉｎ：１６
ｍａｘ：３２
（３）ｒｅｐ：１６
（４）ｓｔｏｒｅｓ：｛ａ．ｘ，ａ．ｙ｝
（５）ｓｔｏｒｅｓ：｛ａ．ｘ，ａ．ｙ｝
【００４８】
図３に示されるプリフェッチ・グループにおいて、図２のステップＳ２にて特定されるプロファイル１のイベントが起きている基準ロード命令は、ロード命令３１、３２、及び３４とする。また、図２のステップＳ２にて特定されるプロファイル２イベントが起きている基準ストア命令は、ストア命令４１、及び４２とする。更に、図３において、ベースアドレスを変更する命令を変更命令２１、２２、及び２３とし、実行頻度の低いパス点線、実行頻度の高いパスを実線または太線にて示す。なお、太線の方が実線に比べ実行頻度は高いとする。
【００４９】
図２のステップＳ３において求められるストア影響領域を領域５１として図３に示す。ストア命令４１、４２のベースアドレスを変更する命令は変更命令２１、２２であるので、ベースアドレスが変更されず、全ての実行頻度の高いパスを通って、基準ストア命令であるストア命令４１、４２に到達できる領域５１がストア影響領域として求められる。なお、領域５１は変更命令２１、２２の直後から開始する。変更命令２３及びロード命令３４は、ロード命令３４からロード命令３３へのパスの実行頻度が低いために、全ての実行頻度の高いパスを通って基準ストア命令であるストア命令４１または４２へ到達できないので、領域５１には含まれない。
【００５０】
もし、ストア命令４２が基準ストア命令でない場合には、変更命令２１の直後からストア命令４１までの領域がストア影響領域となる。ロード命令３２からの全ての実行頻度が高いパスが、基準ストア命令に到達しないからである。
【００５１】
このようにして、図２のステップＳ２にて特定された基準ストア命令について、当該基準ストア命令に全ての実行頻度の高いパスを通って到達できる領域がストア影響領域として求められる。なお、図３においては、ストア影響領域（領域５１）に含まれるロード命令及びストア命令は、基準ストア命令が属するプリフェッチグループに含まれているが、基準ストア命令が属さないプリフェッチグループに含まれていてもよい。但し、最適化対象領域に含まれている必要がある。また、図３においては、ストア影響領域（領域５１）は連続する１領域であるが、ベースアドレスを変更する命令等によってストア影響領域は途切れることがあり、必ずしも連続ではなく複数で分散する場合がある。
【００５２】
図２のステップＳ４において、ストア影響領域（領域５１）内で、基準ストア命令であるストア命令４１、４２より前であって、ストア命令４１、４２に全ての実行頻度の高いパスにて到達できるロード命令３１、３２の前にそれぞれストア・プリフェッチ命令１０１、１０２を生成する。図３においては、基準ストア命令であるストア命令４１、４２へ到達するパスに含まれるロード命令は１つであるが、複数ある場合には、ストア命令４１、４２へ到達するパスの最初に現れるロード命令より前にストア・プリフェッチ命令を生成する。
【００５３】
図２のステップＳ５において、まず、プリフェッチ・グループに含まれる基準ロード命令として、ロード命令３１、３２、及び３４が特定される。ロード命令３１のベースアドレスを変更する命令は変更命令２１であるので、ベースアドレスが変更されず、全ての実行頻度の高いパスを通って、ロード命令３１に到達できる領域は、変更命令２１の直後からロード命令３１までとして求められる。同様に、ロード命令３２についての領域は、ロード命令３２のベースアドレスを変更する変更命令２２の直後からロード命令３２までとして求められる。更に、同様に、ロード命令３４についての領域は、ロード命令３４のベースアドレスを変更する変更命令２３の直後からロード命令３４までとして求められる。
【００５４】
図２のステップＳ５において求めるロード影響領域は、各ロード命令について、ベースアドレスが変更されず、全ての実行頻度の高いパスを通って、各ロード命令に到達できる領域であって、ストア影響領域外の領域である。そのため、上述したロード命令３１、３２、３４についての領域から、ストア影響領域を除いた領域６１がロード影響領域として求められる。このようにして、図２のステップＳ２にて特定された基準ロード命令について、当該基準ロード命令に実行頻度の高いパスを通って到達できる領域から、ストア影響領域を除いた領域がロード影響領域（領域６１）として求められる。
【００５５】
なお、図３においては、ロード影響領域（領域６１）は連続する１領域であるが、ストア影響領域と同様に、ベースアドレスを変更する命令等によってロード影響領域も途切れることがあり、必ずしも連続ではなく複数で分散する場合がある。
【００５６】
図２のステップＳ６において、ロード影響領域（領域６１）内に、ロード・プリフェッチ命令１０３が生成される。
【００５７】
このようにして、オブジェクト・コードにストア・プリフェッチ命令及びロード・プリフェッチ命令が挿入される。図３には、従来技術に係る個別にプリフェッチ命令を生成する際に挿入される無駄なロード・プリフェッチ命令９１、９２を合わせて示す。ロード・プリフェッチ命令９１、９２は、その下のストア・プリフェッチ命令１０１、１０２があるので無駄な命令である。そのため、本発明の一実施形態では、ロード・プリフェッチ命令９１、９２を挿入せず、パフォーマンスを向上することができる。
【００５８】
次に、図２のステップＳ３におけるストア影響領域の求め方について説明する。ステップＳ３におけるストア影響領域は、後進データフロー解析（ｂａｃｋｗａｒｄ  ｄａｔａｆｌｏｗ  ａｎａｌｙｓｉｓ）を使って求めることができる。ここで、後進データフロー解析は、ソースプログラムをフローグラフと呼ばれる有向グラフによって表現し、この有向グラフにおいて子ノードから親ノードへとソースプログラムの実行とは逆方向に行うデータフロー解析である。また、データフロー解析とは、どこの変数の代入がどこの変数の使用に影響を及ぼすかを分析する技法である。
【００５９】
具体的には、次の（１）式で示される後進データフロー解析を使って、ベーシックブロックＢの最後で「基準ストア命令のうち、まだベースアドレスが変わらない基準ストア命令」と判断される基準ストア命令に対応するプリフェッチ・グループの集合ＯＵＴ１１（Ｂ）を求める。そして、求まった集合ＯＵＴ１１（Ｂ）に基づいて、ベーシックブロックＢ内の各命令を最後から逆順に調べ、プログラムの実行とは逆方向にベースアドレスが変わらないプリフェッチ・グループの集合を求め、当該集合を用いて、ステップＳ３におけるストア影響領域が求められる。
【００６０】
【数１】
2010128960.tif 000003
【００６１】
ここで、ＧＥＮ１１（Ｂ）、ＫＩＬＬ１１（Ｂ）、ＨｉｇｈＦｒｅｑＳｕｃｃ（Ｂ）、ベーシックブロックＢの定義は以下の通りである。
ＧＥＮ１１（Ｂ）：ベーシックブロックＢに含まれる基準ストア命令のうち、ベーシックブロックＢの先頭までベースアドレスが変わらない基準ストア命令に対応するプリフェッチ・グループの集合。
ＫＩＬＬ１１（Ｂ）：ベーシックブロックＢ内のベースアドレスを更新する命令が存在した場合、当該ベースアドレスを使用している全てのプリフェッチ・グループのストア命令の集合。
ＨｉｇｈＦｒｅｑＳｕｃｃ（Ｂ）：ブロックＢの直後のブロックの集合のうち、実行頻度が低いパスで接続されるブロックを除いたブロックの集合。
ベーシックブロックＢ：１つの入り口ポイント及び１つの出口だけしか持たず、すなわちコントロールフローが途中に入ることもなく、途中から出ることもないような命令集合の範囲をブロックで認識したものである。
【００６２】
式（１）に示すように、ＯＵＴ１１（Ｂ）は、実行頻度が低いパス以外、で接続されている直後のベーシックブロックＨｉｇｈＦｒｅｑＳｕｃｃ（Ｂ）のＩＮ１１（ＨｉｇｈＦｒｅｑＳｕｃｃ（Ｂ））とする。ＨｉｇｈＦｒｅｑＳｕｃｃ（Ｂ）を用いることにより、最後の命令がｉｆ文であるブロックＢ１（親ノード）に２つのブロックＢ２、Ｂ３（子ノード）が合流する際に、実行頻度の高いパスで結ばれているブロックＢ２（子ノード）を優先することができる。
【００６３】
それにより、実行頻度が高い、かつ、ベースアドレスが変わらないプリフェッチ・グループの集合を求めることができ、この集合を用いて、ステップＳ３におけるストア影響領域として求めることができる。更には、ストア・プリフェッチ命令はこの求められたストア影響領域内に生成するので、ストア・プリフェッチ命令を実施頻度が考慮された効果的な位置に生成することができる。
【００６４】
なお、ソースプログラムを有向グラフで表した際に、ｉｆ文における「頻度が低い」というパスは、一般的には、分岐確率が５０％未満のある閾値以下のものを指す。しかし、ループの脱出条件をチェックするｉｆ文に関しては、この閾値が５０％を超える場合がある。ループの平均的な繰り返し回数がｎ回以下の場合において、「頻度が低い」というエッジを判別したい場合に、ループが回る側のパスに対する閾値をｎ／（ｎ＋１）程度に、脱出する側のパスに対する閾値を１／（ｎ＋１）程度に設定する。このとき、閾値の合計が１００％未満になるように注意する。例えば、ループの平均的な繰り返し回数が２以下の場合を判別したい場合、ループの脱出条件をチェックするｉｆ文に関しては、ループが回る側のパスに対する閾値を６５％程度、脱出する側のパスに対する閾値を３０％程度に設定する。
【００６５】
次に、図２のステップＳ４におけるストア・プリフェッチ命令を生成する位置の処理について説明する。まず、ステップＳ３で求めたストア影響領域の先頭を含むベーシックブロックＢは、（ＯＵＴ１１（Ｂ）∩ＫＩＬＬ（Ｂ））が空集合でないベーシックブロックＢとして求められ、ステップＳ３で求めたストア影響領域の先頭を含むベーシックブロックＢの集合をＧＥＮ１２（Ｂ）として求める。次の式（２）にＧＥＮ１２（Ｂ）を求めるアルゴリズムを示す。ＧＥＮ１２（Ｂ）を求める処理内で、一部のストア・プリフェッチ命令の挿入も行われる。
【００６６】
【数２】
2010128960.tif 000004
【００６７】
続いて、ベーシックブロックＢ内に存在するストア命令とロード命令とに該当するプリフェッチ・グループＫＩＬＬ１２（Ｂ）を求める。
【００６８】
次に、（３）式で示される前進データフロー解析（ｆｏｒｗａｒｄ  ｄａｔａｆｌｏｗ  ａｎａｌｙｓｉｓ）を使って、ベーシックブロックＢの先頭で「基準ストア命令のうち、まだベースアドレスが変わらない基準ストア命令」と判断される基準ストア命令に対応するプリフェッチ・グループの集合ＩＮ１２（Ｂ）を求める。
【００６９】
【数３】
2010128960.tif 000005
【００７０】
式（３）のＰｒｅｄ（Ｂ）は、ベーシックブロックＢの直前のブロックを意味し、ＯＵＴ１１（Ｐｒｅｄ（Ｂ））、及びＯＵＴ１２（Ｐｒｅｄ（Ｂ））を用いて、ＧＥＮ２２（Ｂ）とＩＮ１２（Ｂ）を求めることができる。
【００７１】
最後に、式（３）にて求められた範囲に含まれる各ブロックについてストア・プリフェッチ命令の挿入処理を行う。次の式（４）にストア・プリフェッチ命令の挿入処理のアルゴリズムを示す。前進フロー解析で求めた領域の先頭のベーシックブロックＢの集合ＩＮ１２（Ｂ）∩ＫＩＬＬ１２（Ｂ）の各ベーシックブロックにおける、最初のロード命令の前にストア・プリフェッチ命令を生成する。
【００７２】
【数４】
2010128960.tif 000006
【００７３】
上述したように、ストア・プリフェッチ命令を生成する位置を前進フロー解析にて決定し、決定した位置にストア・プリフェッチを生成する。このように、ステップＳ３にて求められたストア影響領域に含まれる基準ストア命令について、基準ストア命令に先行するロード命令のうち、先頭のロード命令にストア・プリフェッチ命令を挿入することができる。それにより、基準ストア命令に先行するロード命令が複数ある場合に、複数のロード命令それぞれについてストア・プリフェッチ命令が挿入されるという問題点を解消することができる。
【００７４】
図２のステップＳ５におけるロード影響領域の求め方について説明する。ステップＳ５におけるロード影響領域は、後進データフロー解析（ｂａｃｋｗａｒｄ  ｄａｔａｆｌｏｗ  ａｎａｌｙｓｉｓ）を使って求めることができる。ステップ５におけるロード影響領域の求め方は、ステップＳ３のストア影響領域の求め方と同じである。ただし、ステップＳ３で求めたストア影響領域は除く点で異なる。
【００７５】
具体的には、次の（５）式を用いて求めることができる。ステップＳ３にて求めたストア影響領域外にある基準ロード命令が対象であるので、（５）式の２つ目の式の右辺においてＯＵＴ１１（Ｂ）を引く。
【００７６】
【数５】
2010128960.tif 000007
【００７７】
ここで、ＧＥＮ１１（Ｂ）及びＫＩＬＬ１１（Ｂ）の定義は以下の通りである。
ＧＥＮ３１（Ｂ）：ベーシックブロックＢに含まれる基準ロード命令のうち、ベーシックブロックＢの先頭までベースアドレスが変わらない基準ロード命令に対応するプリフェッチ・グループの集合。
ＫＩＬＬ１１（Ｂ）：ベーシックブロックＢ内のベースアドレスを更新する命令が存在した場合、当該ベースアドレスを使用している全てのプリフェッチ・グループのロード命令の集合。
【００７８】
図２のステップＳ６の例として、ステップＳ５で求めたロード影響領域の先頭にロード・プリフェッチ命令を生成する処理のアルゴリズムを次の（６）式に示す。まず、ステップＳ５で求めたロード影響領域の先頭のベーシックブロックＢの集合ＧＥＮ３２（Ｂ）を求め、ＧＥＮ１２（Ｂ）の各ベーシックブロックの先頭、すなわち、ベースアドレスを変更する命令の後にロード・プリフェッチ命令を生成する。
【００７９】
【数６】
2010128960.tif 000008
【００８０】
図４は、本発明の一実施形態に係るプリフェッチ命令を生成する方法を実現するコンパイラ１を実装する情報処理装置１０００のハードウェア構成を示す図である。以下は、コンピュータを典型とする情報処理装置１０００として全般的な構成を説明するが、その環境に応じて必要最小限な構成を選択できることはいうまでもない。
【００８１】
情報処理装置１０００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０１０、バスライン１００５、通信Ｉ／Ｆ１０４０、メインメモリ１０５０、ＢＩＯＳ（Ｂａｓｉｃ  Ｉｎｐｕｔ  Ｏｕｔｐｕｔ  Ｓｙｓｔｅｍ）１０６０、パラレルポート１０８０、ＵＳＢポート１０９０、グラフィック・コントローラ１０２０、ＶＲＡＭ１０２４、音声プロセッサ１０３０、Ｉ／Ｏコントローラ１０７０、ならびにキーボード及びマウス・アダプタ１１００等の入力手段を備える。Ｉ／Ｏコントローラ１０７０には、フレキシブル・ディスク（ＦＤ）ドライブ１０７２、ハードディスク１０７４、光ディスク・ドライブ１０７６、半導体メモリ１０７８等の記憶手段を接続することができる。
【００８２】
なお、プリフェッチ命令を生成する方法を実現するコンパイラ１及びコンパイラ１により生成されたオブジェクト・コードを実行する実行部は、ＣＰＵ１０１０及びメインメモリ１０５０等のメモリにて実現される。
【００８３】
音声プロセッサ１０３０には、マイクロホン１０３６、増幅回路１０３２、及びスピーカ１０３４が接続される。また、グラフィック・コントローラ１０２０には、表示装置１０２２が接続されている。
【００８４】
ＢＩＯＳ１０６０は、情報処理装置１０００の起動時にＣＰＵ１０１０が実行するブートプログラムや、情報処理装置１０００のハードウェアに依存するプログラム等を格納する。ＦＤ（フレキシブル・ディスク）ドライブ１０７２は、フレキシブル・ディスク１０７１からプログラムまたはデータを読み取り、Ｉ／Ｏコントローラ１０７０を介してメインメモリ１０５０またはハードディスク１０７４に提供する。図４には、情報処理装置１０００の内部にハードディスク１０７４が含まれる例を示したが、バスライン１００５またはＩ／Ｏコントローラ１０７０に外部機器接続用インタフェース（図示せず）を接続し、情報処理装置１０００の外部にハードディスクを接続または増設してもよい。
【００８５】
光ディスク・ドライブ１０７６としては、例えば、ＤＶＤ−ＲＯＭドライブ、ＣＤ−ＲＯＭドライブ、ＤＶＤ−ＲＡＭドライブ、ＢＤ（Ｂｌｕ−ｒａｙ  Ｄｉｓｋ）−ＲＯＭドライブ等を使用することができる。この際は各ドライブに対応した光ディスク１０７７を使用する必要がある。光ディスク・ドライブ１０７６は光ディスク１０７７からプログラムまたはデータを読み取り、Ｉ／Ｏコントローラ１０７０を介してメインメモリ１０５０またはハードディスク１０７４に提供することもできる。
【００８６】
情報処理装置１０００に提供されるコンピュータ・プログラムは、フレキシブル・ディスク１０７１、光ディスク１０７７、またはメモリーカード等の記録媒体に格納されて利用者によって提供される。このコンピュータ・プログラムは、Ｉ／Ｏコントローラ１０７０を介して、記録媒体から読み出され、または通信Ｉ／Ｆ１０４０を介してダウンロードされることによって、情報処理装置１０００にインストールされ実行される。コンピュータ・プログラムが情報処理装置に働きかけて行わせる動作は、既に説明した装置における動作と同一であるので省略する。
【００８７】
前述のコンピュータ・プログラムは、外部の記憶媒体に格納されてもよい。記憶媒体としてはフレキシブル・ディスク１０７１、光ディスク１０７７、またはメモリーカードの他に、ＭＤ等の光磁気記録媒体、テープ媒体を用いることができる。また、専用通信回線やインターネットに接続されたサーバシステムに設けたハードディスクまたは光ディスク・ライブラリ等の記憶装置を記録媒体として使用し、通信回線を介してコンピュータ・プログラムを情報処理装置１０００に提供してもよい。
【００８８】
以上の例は、情報処理装置１０００について主に説明したが、コンピュータに、情報処理装置で説明した機能を有するプログラムをインストールして、そのコンピュータを情報処理装置として動作させることにより上記で説明した情報処理装置と同様な機能を実現することができる。
【００８９】
本装置は、ハードウェア、ソフトウェア、またはハードウェア及びソフトウェアの組み合わせとして実現可能である。ハードウェアとソフトウェアの組み合わせによる実施では、所定のプログラムを有するコンピュータ・システムでの実施が典型的な例として挙げられる。係る場合、該所定のプログラムが該コンピュータ・システムにロードされ実行されることにより、該プログラムは、コンピュータ・システムに本発明に係る処理を実行させる。このプログラムは、任意の言語、コード、または表記によって表現可能な命令群から構成される。そのような命令群は、システムが特定の機能を直接実行すること、または（１）他の言語、コード、もしくは表記への変換、（２）他の媒体への複製、のいずれか一方もしくは双方が行われた後に、実行することを可能にするものである。もちろん、本発明は、そのようなプログラム自体のみならず、プログラムを記録した媒体を含むプログラム製品もその範囲に含むものである。本発明の機能を実行するためのプログラムは、フレキシブル・ディスク、ＭＯ、ＣＤ−ＲＯＭ、ＤＶＤ、ハードディスク装置、ＲＯＭ、ＲＡＭ等の任意のコンピュータ可読媒体に格納することができる。係るプログラムは、コンピュータ可読媒体への格納のために、通信回線で接続する他のコンピュータ・システムからダウンロードしたり、他の媒体から複製したりすることができる。また、係るプログラムは、圧縮し、または複数に分割して、単一または複数の記録媒体に格納することもできる。
【００９０】
以上、本発明を実施形態に則して説明したが、本発明は上述した実施形態に限るものではない。また、本発明の実施形態に記載された効果は、本発明から生じる最も好適な効果を列挙したに過ぎず、本発明による効果は、本発明の実施形態または実施例に記載されたものに限定されるものではない。
【図面の簡単な説明】
【００９１】
【図１】本実施の一実施形態に係るコンパイラの構成を示す図である。
【図２】本発明の一実施形態に係る最適化処理のフローチャートである。
【図３】本発明の一実施形態に係る最適化処理におけるプリフェッチ命令生成の概要図である。
【図４】本発明の一実施形態に係るプリフェッチ命令を生成する方法を実現するコンパイラを実装する情報処理装置のハードウェア構成を示す図である。
【符号の説明】
【００９２】
２１、２２、２３  変更命令
４１、４２、  ストア命令
３１、３２、３３、３４  ロード命令
５１  ストア影響領域
６１  ロード影響領域
１０１、１０２  ストア・プリフェッチ命令
１０３  ロード・プリフェッチ命令
【図１】
2010128960.tif 000009
【図２】
2010128960.tif 000010
【図３】
2010128960.tif 000011
【図４】
2010128960.tif 000012