JP2010128960A - プリフェッチ命令生成方法、コンパイラ、及びプログラム - Google Patents

プリフェッチ命令生成方法、コンパイラ、及びプログラム Download PDF

Info

Publication number
JP2010128960A
JP2010128960A JP2008305074A JP2008305074A JP2010128960A JP 2010128960 A JP2010128960 A JP 2010128960A JP 2008305074 A JP2008305074 A JP 2008305074A JP 2008305074 A JP2008305074 A JP 2008305074A JP 2010128960 A JP2010128960 A JP 2010128960A
Authority
JP
Japan
Prior art keywords
instruction
store
load
optimization target
prefetch
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.)
Granted
Application number
JP2008305074A
Other languages
English (en)
Other versions
JP5447774B2 (ja
Inventor
Motohiro Kawahito
基弘 川人
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.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
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 International Business Machines Corp filed Critical International Business Machines Corp
Priority to JP2008305074A priority Critical patent/JP5447774B2/ja
Publication of JP2010128960A publication Critical patent/JP2010128960A/ja
Application granted granted Critical
Publication of JP5447774B2 publication Critical patent/JP5447774B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Abstract

【課題】キャッシュの状態が「データがない、ロード向け、ロード及びストア両方向け」の3状態を持つ場合において、プリフェッチ命令を包括的に自動生成する方法及びコンパイラを提供すること。
【解決手段】コンパイラのプリフェッチ命令生成方法は、コンパイル対象であるソースプログラムを構成する1以上の最適化対象領域毎に、最適化対象領域に含まれる命令のうち、キャッシュをデータがない状態からロードに適した状態へ遷移させるロード命令と、最適化対象領域に含まれる命令のうち、キャッシュをロードに適した状態からロード及びストアに適した状態へ遷移させるストア命令と、を最適化対象として特定するステップと、特定された最適化対象と、前記ソースプログラムに含まれる各if文の分岐確率と、に基づいて、最適化対象領域におけるプリフェッチ命令を挿入する位置を決定し、位置にプリフェッチ命令を生成するステップと、を含む。
【選択図】図3

Description

本発明は、プリフェッチ命令生成方法、コンパイラ、及びプログラムに関する。特に、ロード命令及びストア命令それぞれに対するプリフェッチ命令を包括的に生成するプリフェッチ命令生成方法、コンパイラ、及びプログラムに関する。
コンパイラは、ソースプログラムを解析して得られるオブジェクト・コードにプリフェッチ命令を生成することにより最適化を行う。ここで、プリフェッチ命令とは、プログラム実行中に、今後、必要になると思われる命令やデータを、先行してキャッシュに読み込んでおくための命令である。従来、コンパイラが行う、プリフェッチ命令を生成する最適化は、キャッシュの状態が「データがある、ない」の2状態を持つことを仮定したものであった。
キャッシュの状態が2状態の場合の最適化としては、例えば、ロード命令とストア命令とが実行されることにより生成されるプロファイルデータを用いて、所定以上の頻度でキャッシュミスを発生する命令の前にプリフェッチ命令を挿入する方法が提案されている(特許文献1)。
また、コンパイラの最適化のアーキテクチャによっては、キャッシュの状態が「データがない状態、ロードに適する状態、ロード及びストア両方に適する状態」、の3状態を持つものがある。キャッシュが3状態を持つ場合には、キャッシュの状態を変えるために、ストア命令に対するプリフェッチ命令が用意されている。
キャッシュの状態が3状態ある場合における、コンパイラが行う、プリフェッチ命令を生成する最適化の手法として、ロード命令に対するプリフェッチ命令と、ストア命令に対するプリフェッチ命令と、をそれぞれ個別にコンパイラが自動生成する方法が提案されている(非特許文献1)。
米国特許第6951015号公報 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.
特許文献1及び非特許文献1に記載の方法では、2種類のプリフェッチ命令をそれぞれ個別にコンパイラが自動生成することによって最適化が行われるが、無駄なプリフェッチ命令の挿入等が行われることがあるという問題点がある。
無駄なプリフェッチ命令の挿入等が行われることがあるという問題点について、以下に具体的に説明する。特許文献1及び非特許文献1に記載の方法では、ロード命令後にストア命令が行われる場合に、ロード命令に対するプリフェッチ命令と、ストア命令に対するプリフェッチ命令との2つがこの順でオブジェクト・コードに挿入される。その結果、キャッシュの状態は、ロードに適する状態に変更後、ロード及びストアに適する状態に変更される。すなわち、キャッシュの状態は2回変更される。
ところで、ストア命令に対するプリフェッチ命令は、キャッシュの状態をロード及びストアの両方に適する状態とする命令である。そのため、ロード命令に対するプリフェッチ命令をストア命令に対するプリフェッチ命令に置き換えても、キャッシュの状態をロードに適する状態とすることができる。
そのため、ロード命令後にストア命令が続いている場合に、ロード命令に対するプリフェッチ命令をストア命令に対するプリフェッチ命令に置き換えることができる。言い換えると、ロード命令に対するプリフェッチ命令後のストア命令に対するプリフェッチ命令を、ロード命令に対して行うようにすることができる。それにより、キャッシュの状態はロード及びストアに適する状態に一回変更されるだけとなり、コンパイラはより最適化されたオブジェクト・コードを生成することができる。つまり、ロード命令後にストア命令が行われる場合には、ロード命令に対するプリフェッチ命令は無駄である。
特許文献1及び非特許文献1に記載の方法では、ロード命令に対するプリフェッチ命令と、ストア命令に対するプリフェッチ命令と、をそれぞれ個別に自動生成する。そのため、ロード命令後にストア命令が行われる場合であっても、ロード命令に対するプリフェッチ命令をストア命令に対するプリフェッチ命令とすることができず、無駄なロード命令に対するプリフェッチ命令を生成してしまうという問題点がある。
本発明は、キャッシュの状態が「データがない、ロード向け、ロード及びストア両方向け」、の3状態を持つ場合における無駄なプリフェッチ命令の挿入を防ぐために、ロード命令に対するプリフェッチ命令と、ストア命令に対するプリフェッチ命令と、を包括的にオブジェクト・コードに自動生成する方法及びコンパイラを提供することを目的とする。
本発明は上記課題に鑑み、以下のような解決手段を提供する。本発明は、キャッシュの状態が「データがない、ロード向け、ロード及びストア両方向け」、の3状態を持つ場合において、ストア命令に対するプリフェッチ命令がキャッシュの状態をロード及びストアに適した状態とすることを利用して、ロード命令に対するプリフェッチ命令とストア命令に対するプリフェッチ命令とを包括的に生成する、コンパイラのプリフェッチ命令生成方法を提供する。
本発明の1つの態様によると、コンパイラのプリフェッチ命令生成方法は、コンパイル対象であるソースプログラムを構成する1以上の最適化対象領域毎に、前記最適化対象領域に含まれる命令のうち、キャッシュをデータがない状態からロードに適した状態へ遷移させるロード命令と、前記最適化対象領域に含まれる命令のうち、キャッシュをロードに適した状態からロード及びストアに適した状態へ遷移させるストア命令と、を最適化対象として特定するステップと、特定された前記最適化対象と、前記ソースプログラムに含まれる各if文の分岐確率と、に基づいて、前記最適化対象領域におけるプリフェッチ命令を挿入する位置を決定し、前記位置にプリフェッチ命令を生成するステップと、を含む。
本態様によると、キャッシュをデータがない状態からロードに適した状態へ遷移させるロード命令と、キャッシュをロードに適した状態からロード及びストアに適した状態へ遷移させるストア命令とを最適化対象として含み、最適化対象に基づいてプリフェッチ命令を挿入する位置を決定する。それにより、ロード命令後にストア命令が続いている場合のロード命令とストア命令とに基づいてプリフェッチ命令を挿入する位置を決定することにより、無駄なプリフェッチ命令の生成を省き、ロード命令とストア命令とに対して包括的にプリフェッチ命令を生成することができる。また、ソースプログラムに含まれる各if文の分岐確率を用いることにより、プログラムの実行時の統計情報を加味して、プリフェッチ命令を生成することができる。その結果、パフォーマンスを向上することができる。
また、本態様は、前記最適化対象領域のストア命令及びロード命令のうち、ベース・メモリアドレスが同じであって、メモリアドレス上の所定のオフセットの範囲を満足しているストア命令及びロード命令を1グループとし、1以上のグループに分類するステップを含む。それにより、キャッシュに格納するデータの単位であるキャッシュラインサイズを考慮に入れて、プリフェッチ命令を生成することができる。その結果、パフォーマンスを向上することができる。
本発明は、スクリプト言語を用いるプログラム開発言語、ハイパーテキスト等を解釈して実行するブラウザ及びこれを利用するプログラム開発環境等の、既存の技術と組み合わせることができ、そのように組み合わせた技術もまた、本発明の技術範囲に含まれる。更に、本発明の技法は、プリフェッチ命令を生成する方法の諸段階を、FPGA(現場でプログラム可能なゲートアレイ)、ASIC(特定用途向け集積回路)、これらと同等のハードウェアロジック素子、プログラム可能な集積回路、またはこれらの組み合わせが記憶し得るプログラムの形態、すなわちプログラム製品として提供し得る。具体的には、データ入出力、データバス、メモリバス、システムバス等を備えるカスタムLSI(大規模集積回路)の形態として、本発明に係るプリフェッチ命令を生成する方法を提供でき、そのように集積回路に記憶されたプログラム製品の形態も、本発明の技術範囲に含まれる。
本発明によれば、キャッシュの状態が「データがない、ロード向け、ロード及びストア両方向け」、の3状態を持つ場合における無駄なプリフェッチ命令の挿入を防ぐために、ロード命令に対するプリフェッチ命令と、ストア命令に対するプリフェッチ命令と、を包括的にオブジェクト・コードに自動生成する方法及びコンパイラを提供することができる。また、ロード命令に対するプリフェッチ命令と、ストア命令に対するプリフェッチ命令との生成に、プログラムの実行時の統計情報、及びキャッシュラインサイズを考慮することにより、パフォーマンスを向上することができる。
以下、本発明の実施形態について図を参照しながら説明する。なお、これらはあくまでも一例であって、本発明の技術的範囲はこれらに限られるものではない。
図1は、本発明の一実施形態に係るコンパイラ1の構成を示す図である。本実施の形態のコンパイラ1は、字句解析部10と、構文解析部11と、意味解析部12と、中間コード生成部13と、コード最適化部14と、コード生成部15と、を備える。
コード最適化部14は、中間コード生成部13にて生成された中間コードを入力して後述する最適化処理を実施し、最適化したコードを出力する。なお、コード最適化部14は、本実施の形態による最適化処理以外のコンパイル処理における各種の最適化処理を更に含むことは言うまでもない。コード最適化部14で用いられる中間コードは、字句解析部10、構文解析部11、及び意味解析部12の結果に基づいて、中間コード生成部13にて生成される。コード最適化部14にて最適化されたコードは、コード生成部15で、オブジェクト・コード(通常、機械語)に翻訳される。
本発明の一実施形態において、対象とするコンパイラ1のコード最適化部14における最適化のアーキテクチャはキャッシュの状態として少なくとも次の3状態を持つ。
状態1:データがない状態。
状態2:ロードに適する状態。
状態3:ロード及びストアに適した状態。
上述した3状態は以下の関係を有する。キャッシュの状態が状態1(データがない状態)である場合に、ロード命令によるメモリアクセスが起きるとキャッシュの状態は状態2へ遷移する。一方、キャッシュの状態が状態1(データがない状態)である場合に、ストア命令によるメモリアクセスが起きると、キャッシュの状態は状態3へ遷移する。また、キャッシュの状態が状態2(ロードに適する状態)である場合に、ストア命令によるメモリアクセスが起きるとキャッシュの状態は状態3へ遷移する。
本発明の一実施形態において、コンパイラ1のコード最適化部14が最適化を行う際に利用するプロファイル情報には、以下の3種類が含まれる。
プロファイル1:状態1から状態2への遷移がどのロード命令で起きているか。
プロファイル2:状態2から状態3への遷移がどのストア命令で起きているか。
プロファイル3:ソースプログラムに含まれる各if文の分岐確率。
本発明に係る一実施形態においては、プロファイル1を用いて、プリフェッチ命令を生成する対象を、キャッシュの状態を状態1から状態2へ遷移させるロード命令とする。ロード命令には、キャッシュの状態を状態1から状態2とするロード命令、状態2から状態2とするロード命令、状態3から状態2とするロード命令、の3種類がある。しかし、最適化の必要、すなわち、プリフェッチ命令を生成する必要があるのは、キャッシュの状態を状態1から状態2へ遷移させるロード命令だけである。キャッシュの状態を状態2から状態2とするロード命令と、キャッシュの状態を状態3から状態2とするロード命令とには、プリフェッチ命令を生成することによる効果が得られないからである。
上述した理由から、プリフェッチ命令を生成する対象をキャッシュの状態を状態1から状態2へ遷移させるロード命令とすることにより、生成する必要のない無駄なプリフェッチ命令を生成することがなくなり、パフォーマンスを向上することができる。
本発明に係る一実施形態においては、プロファイル2を用いて、プリフェッチ命令を生成する対象を、キャッシュの状態を状態2から状態3へ遷移させるストア命令とする。ストア命令には、キャッシュの状態を状態1から状態3とするストア命令、状態2から状態3とするストア命令、状態3から状態3とするストア命令、の3種類がある。しかし、最適化の必要、すなわち、プリフェッチ命令を生成する必要があるのは、キャッシュの状態を状態2から状態3へ遷移させるストア命令だけである。キャッシュの状態を状態1から状態3とするストア命令と、キャッシュの状態を状態3から状態3とするロード命令とには、プリフェッチ命令を生成することによる効果が得られないからである。
上述した理由から、プリフェッチ命令を生成する対象をキャッシュの状態を状態2から状態3へ遷移させるストア命令とすることにより、生成する必要のない無駄なプリフェッチ命令を生成することがなくなり、パフォーマンスを向上することができる。
更に、プロファイル3をプロファイル情報に含むことにより、実行頻度を最適化に利用することができる。ソースプログラムに含まれるif文の分岐確率により、ソースプログラムに含まれるロード命令及びストア命令の実行頻度で実行されるかを特定することができ、プリフェッチ命令を効果的な位置に生成することができる。
実行頻度は、具体的には、JIT(Just In Time)コンパイラ等の動的コンパイラにおいては、実行時に取得した統計情報から得ることができる。また、静的コンパイラにおいては、offlineで取得した統計情報やアノテーションから得ることができる。ここで、JITコンパイラとは、Java(登録商標)プログラムを実行する際に、プラットフォームから独立した形式のプログラム(Javaバイトコード)を、実行前にまとめて一気にそのプラットフォームで実行可能なプログラム(ネイティブコード)に変換し、実行する機構のことである。
上述したプロファイル情報を用いて、コンパイラ1のコード最適化部14にて実行される、最適化対象領域毎にプリフェッチ命令を最適化領域に対応するオブジェクト・コードの最適な位置に生成する処理(最適化処理)について説明する。ここで、最適化対象領域とは、ソースプログラム中のメソッドや関数、またそれらの一部を意味する。また、単にプリフェッチ命令とした際にはロード命令のプリフェッチ命令(以下、簡略化のためロード・プリフェッチ命令という)及びストア命令のプリフェッチ命令(以下、簡略化のためストア・プリフェッチ命令という)の両方を意味する。
本発明の一実施形態に係る最適化処理の説明において、ストア命令及びロード命令のそれぞれのメモリアドレスはベース・メモリアドレス(以下、簡略化のためベースアドレスという)とベースアドレスからのオフセットとの2つによって表現されるとする。
また、本発明の一実施形態に係る最適化処理には、プリフェッチ・グループを用いる。プリフェッチ・グループとは、同一キャッシュラインに含まれるロード命令及びストア命令の集合である。具体的には、プリフェッチ・グループは、ベースアドレスが共通であり、かつある一定のオフセット範囲に含まれているロード命令及びストア命令の集合である。
プリフェッチ・グループが同一キャッシュラインに含まれるロード命令及びストア命令の集合であるのは、同一キャッシュラインに入るメモリアクセスも最適化対象とするためである。従来のコンパイラの最適化においては、キャッシュラインを考慮しておらず、同一アドレスのメモリアクセスのみが最適化対象であった。しかし、IBM System z(登録商標)等のようにキャッシュラインサイズが大きい場合(例えば、256バイト)には、同一のキャッシュラインに入るメモリアクセスを最適化対象とするべきである。そこで、同一のキャッシュラインに入るメモリアクセスを最適化対象とするために、プリフェッチ・グループを同一キャッシュラインに含まれるロード命令及びストア命令の集合とする。
なお、プリフェッチ・グループは、同一キャッシュラインに含まれるロード命令及びストア命令の集合であることから、ある一定のオフセットの範囲はキャッシュラインサイズ以下であることが望ましい。
上述したプリフェッチ・グループは、以下の情報を持つ。
(1)base:プリフェッチ・グループに含まれるロード命令及びストア命令のベースアドレス。
(2)min,max:プリフェッチ・グループのオフセットの最小値、最大値。実数とは限らず、変数を含んでもよい。変数を含む場合には、例えば、min=i−5,max=i+5と表される。
(3)rep:プリフェッチ・グループに対して、プリフェッチ命令を生成するときに使用するオフセット。repはminとmaxとの間の値となる。
(4)stores:プリフェッチ命令に含まれるストア命令の集合。具体的には、ベース(base)を基準とし、オフセットがmin、maxの範囲にあるストア命令の集合である。
(5)loads:プリフェッチ命令に含まれるロード命令の集合。具体的には、ベース(base)を基準とし、オフセットがmin、maxの範囲にあるロード命令の集合である。
図2は、本発明の一実施形態に係る最適化処理のフローチャートである。最適化処理は、コンパイラ1のコード最適化部14にて実行される。
S1:最適化対象領域において、ベースアドレスが共通するロード命令及びストア命令についてそれぞれのオフセット値に基づいて、1以上のプリフェッチ・グループに分ける。具体的には、ベースアドレスが共通し、かつオフセット値がある一定の範囲に含まれるロード命令及びストア命令を1つのプリフェッチ・グループとする。オフセット値の範囲は、任意の値でよいが、上述したようにキャッシュラインサイズ以下であることが望ましい。
S2:最適化対象領域に含まれるロード命令及びストア命令のうち、最適化対象のロード命令とストア命令とを特定する。具体的には、プロファイル情報に含まれるプロファイルに基づいて、ロード命令及びストア命令を特定する。ロード命令は、プロファイル1により特定され、キャッシュをデータがない状態からロードに適した状態へ遷移させるロード命令である。一方、ストア命令は、プロファイル2により特定され、キャッシュをロードに適した状態からロード及びストアに適した状態へ遷移させるストア命令である。
S3:最適化対象領域において、ステップS1にて作成された各プリフェッチ・グループに含まれる、ステップS2にて特定された最適化対象ストア命令(以下、基準ストア命令という)が、当該基準ストア命令にベースアドレスが変わらず、かつ、全ての実行頻度の高いパスを通って到達できる領域をストア影響領域として求める。なお、基準ストア命令は1つとは限らない。実行頻度の高いパスは、プロファイル情報に含まれるプロファイル3に基づいて求められる。詳細なストア影響領域の求め方については後述する。
S4:ステップS3で求めたストア影響領域内でプリフェッチ・グループに該当するストア命令より前に実行されるロード命令のうち、各パスの最初に現れるロード命令の前に、当該プリフェッチ・グループに対するストア・プリフェッチ命令を生成する。なお、最初に現れるロード命令は、ロード命令が含まれている可能性がある命令であってもよい。ロード命令が含まれている可能性がある命令には、例えば、メソッド呼び出し命令がある。メソッド呼び出し命令(例えば、call文)は、呼び出し先にそのようなロード命令が含まれている可能性があるからである。
各パスの最初に現れるロード命令の前にストア・プリフェッチ命令を生成することにより、ストア命令に先行する全てのロード命令に対しストア・プリフェッチ命令が生成することにより無駄なストア・プリフェッチ命令が生成されるという従来技術の問題点を解消することができる。無駄なストア・プリフェッチ命令とは、ストア・プリフェッチ命令によりキャッシュの状態がロード及びストア両方に適する状態に変更された後のストア・プリフェッチ命令である。また、それらはキャッシュの状態を変更しないために無駄であり、パフォーマンスを悪くする原因である。
S5:最適化対象領域において、ステップS1にて分けられた各プリフェッチ・グループに含まれる最適化対象のロード命令(以下、基準ロード命令という)が、当該基準ロード命令にベースアドレスが変わらず、かつ、全ての実行頻度の高いパスを通って到達できる領域のうち、ステップ3で求めたストア影響領域を除いた領域をロード影響領域として求める。なお、基準ロード命令は1つとは限らない。実行頻度の高いパスは、プロファイル情報に含まれるプロファイル3に基づいて求められる。詳細なロード影響領域の求め方については後述する。
ロード影響領域を求める条件として、ステップ3で求めたストア影響領域を除くとすることにより、ストア命令に先行するロード命令において、無駄なロード・プリフェッチ命令が挿入される問題点を解消することができる。
S6:ステップS5で求めたロード影響領域内に、プリフェッチ・グループに対するロード・プリフェッチ命令を生成する。
上述した最適化処理においては、ステップS1、S2、S3とステップS5は必ずこの順で行われる必要がある。なぜならば、それぞれは前ステップの結果を用いているからである。しかし、ステップS4はステップS3以降であればよいので、ステップS5やステップS6の後としてもよい。また、ステップS6はステップS3とS5以降であればよいので、ステップS3、S5の後にステップS6、S4のように、ステップS6をステップS4の前としてもよい。
図3は、本発明の一実施形態に係る最適化処理におけるプリフェッチ命令生成の概要図である。図2に示した最適処理に基づいて、図3に示すプリフェッチ命令生成の概要図ついて説明する。図3には、図2のステップS1にて分けられたプリフェッチ・グループの1つを示す。図3に示すプリフェッチ・グループの情報は以下の通りである。
(1)base:a
(2)min:16
max:32
(3)rep:16
(4)stores:{a.x,a.y}
(5)stores:{a.x,a.y}
図3に示されるプリフェッチ・グループにおいて、図2のステップS2にて特定されるプロファイル1のイベントが起きている基準ロード命令は、ロード命令31、32、及び34とする。また、図2のステップS2にて特定されるプロファイル2イベントが起きている基準ストア命令は、ストア命令41、及び42とする。更に、図3において、ベースアドレスを変更する命令を変更命令21、22、及び23とし、実行頻度の低いパス点線、実行頻度の高いパスを実線または太線にて示す。なお、太線の方が実線に比べ実行頻度は高いとする。
図2のステップS3において求められるストア影響領域を領域51として図3に示す。ストア命令41、42のベースアドレスを変更する命令は変更命令21、22であるので、ベースアドレスが変更されず、全ての実行頻度の高いパスを通って、基準ストア命令であるストア命令41、42に到達できる領域51がストア影響領域として求められる。なお、領域51は変更命令21、22の直後から開始する。変更命令23及びロード命令34は、ロード命令34からロード命令33へのパスの実行頻度が低いために、全ての実行頻度の高いパスを通って基準ストア命令であるストア命令41または42へ到達できないので、領域51には含まれない。
もし、ストア命令42が基準ストア命令でない場合には、変更命令21の直後からストア命令41までの領域がストア影響領域となる。ロード命令32からの全ての実行頻度が高いパスが、基準ストア命令に到達しないからである。
このようにして、図2のステップS2にて特定された基準ストア命令について、当該基準ストア命令に全ての実行頻度の高いパスを通って到達できる領域がストア影響領域として求められる。なお、図3においては、ストア影響領域(領域51)に含まれるロード命令及びストア命令は、基準ストア命令が属するプリフェッチグループに含まれているが、基準ストア命令が属さないプリフェッチグループに含まれていてもよい。但し、最適化対象領域に含まれている必要がある。また、図3においては、ストア影響領域(領域51)は連続する1領域であるが、ベースアドレスを変更する命令等によってストア影響領域は途切れることがあり、必ずしも連続ではなく複数で分散する場合がある。
図2のステップS4において、ストア影響領域(領域51)内で、基準ストア命令であるストア命令41、42より前であって、ストア命令41、42に全ての実行頻度の高いパスにて到達できるロード命令31、32の前にそれぞれストア・プリフェッチ命令101、102を生成する。図3においては、基準ストア命令であるストア命令41、42へ到達するパスに含まれるロード命令は1つであるが、複数ある場合には、ストア命令41、42へ到達するパスの最初に現れるロード命令より前にストア・プリフェッチ命令を生成する。
図2のステップS5において、まず、プリフェッチ・グループに含まれる基準ロード命令として、ロード命令31、32、及び34が特定される。ロード命令31のベースアドレスを変更する命令は変更命令21であるので、ベースアドレスが変更されず、全ての実行頻度の高いパスを通って、ロード命令31に到達できる領域は、変更命令21の直後からロード命令31までとして求められる。同様に、ロード命令32についての領域は、ロード命令32のベースアドレスを変更する変更命令22の直後からロード命令32までとして求められる。更に、同様に、ロード命令34についての領域は、ロード命令34のベースアドレスを変更する変更命令23の直後からロード命令34までとして求められる。
図2のステップS5において求めるロード影響領域は、各ロード命令について、ベースアドレスが変更されず、全ての実行頻度の高いパスを通って、各ロード命令に到達できる領域であって、ストア影響領域外の領域である。そのため、上述したロード命令31、32、34についての領域から、ストア影響領域を除いた領域61がロード影響領域として求められる。このようにして、図2のステップS2にて特定された基準ロード命令について、当該基準ロード命令に実行頻度の高いパスを通って到達できる領域から、ストア影響領域を除いた領域がロード影響領域(領域61)として求められる。
なお、図3においては、ロード影響領域(領域61)は連続する1領域であるが、ストア影響領域と同様に、ベースアドレスを変更する命令等によってロード影響領域も途切れることがあり、必ずしも連続ではなく複数で分散する場合がある。
図2のステップS6において、ロード影響領域(領域61)内に、ロード・プリフェッチ命令103が生成される。
このようにして、オブジェクト・コードにストア・プリフェッチ命令及びロード・プリフェッチ命令が挿入される。図3には、従来技術に係る個別にプリフェッチ命令を生成する際に挿入される無駄なロード・プリフェッチ命令91、92を合わせて示す。ロード・プリフェッチ命令91、92は、その下のストア・プリフェッチ命令101、102があるので無駄な命令である。そのため、本発明の一実施形態では、ロード・プリフェッチ命令91、92を挿入せず、パフォーマンスを向上することができる。
次に、図2のステップS3におけるストア影響領域の求め方について説明する。ステップS3におけるストア影響領域は、後進データフロー解析(backward dataflow analysis)を使って求めることができる。ここで、後進データフロー解析は、ソースプログラムをフローグラフと呼ばれる有向グラフによって表現し、この有向グラフにおいて子ノードから親ノードへとソースプログラムの実行とは逆方向に行うデータフロー解析である。また、データフロー解析とは、どこの変数の代入がどこの変数の使用に影響を及ぼすかを分析する技法である。
具体的には、次の(1)式で示される後進データフロー解析を使って、ベーシックブロックBの最後で「基準ストア命令のうち、まだベースアドレスが変わらない基準ストア命令」と判断される基準ストア命令に対応するプリフェッチ・グループの集合OUT11(B)を求める。そして、求まった集合OUT11(B)に基づいて、ベーシックブロックB内の各命令を最後から逆順に調べ、プログラムの実行とは逆方向にベースアドレスが変わらないプリフェッチ・グループの集合を求め、当該集合を用いて、ステップS3におけるストア影響領域が求められる。
Figure 2010128960
ここで、GEN11(B)、KILL11(B)、HighFreqSucc(B)、ベーシックブロックBの定義は以下の通りである。
GEN11(B):ベーシックブロックBに含まれる基準ストア命令のうち、ベーシックブロックBの先頭までベースアドレスが変わらない基準ストア命令に対応するプリフェッチ・グループの集合。
KILL11(B):ベーシックブロックB内のベースアドレスを更新する命令が存在した場合、当該ベースアドレスを使用している全てのプリフェッチ・グループのストア命令の集合。
HighFreqSucc(B):ブロックBの直後のブロックの集合のうち、実行頻度が低いパスで接続されるブロックを除いたブロックの集合。
ベーシックブロックB:1つの入り口ポイント及び1つの出口だけしか持たず、すなわちコントロールフローが途中に入ることもなく、途中から出ることもないような命令集合の範囲をブロックで認識したものである。
式(1)に示すように、OUT11(B)は、実行頻度が低いパス以外、で接続されている直後のベーシックブロックHighFreqSucc(B)のIN11(HighFreqSucc(B))とする。HighFreqSucc(B)を用いることにより、最後の命令がif文であるブロックB1(親ノード)に2つのブロックB2、B3(子ノード)が合流する際に、実行頻度の高いパスで結ばれているブロックB2(子ノード)を優先することができる。
それにより、実行頻度が高い、かつ、ベースアドレスが変わらないプリフェッチ・グループの集合を求めることができ、この集合を用いて、ステップS3におけるストア影響領域として求めることができる。更には、ストア・プリフェッチ命令はこの求められたストア影響領域内に生成するので、ストア・プリフェッチ命令を実施頻度が考慮された効果的な位置に生成することができる。
なお、ソースプログラムを有向グラフで表した際に、if文における「頻度が低い」というパスは、一般的には、分岐確率が50%未満のある閾値以下のものを指す。しかし、ループの脱出条件をチェックするif文に関しては、この閾値が50%を超える場合がある。ループの平均的な繰り返し回数がn回以下の場合において、「頻度が低い」というエッジを判別したい場合に、ループが回る側のパスに対する閾値をn/(n+1)程度に、脱出する側のパスに対する閾値を1/(n+1)程度に設定する。このとき、閾値の合計が100%未満になるように注意する。例えば、ループの平均的な繰り返し回数が2以下の場合を判別したい場合、ループの脱出条件をチェックするif文に関しては、ループが回る側のパスに対する閾値を65%程度、脱出する側のパスに対する閾値を30%程度に設定する。
次に、図2のステップS4におけるストア・プリフェッチ命令を生成する位置の処理について説明する。まず、ステップS3で求めたストア影響領域の先頭を含むベーシックブロックBは、(OUT11(B)∩KILL(B))が空集合でないベーシックブロックBとして求められ、ステップS3で求めたストア影響領域の先頭を含むベーシックブロックBの集合をGEN12(B)として求める。次の式(2)にGEN12(B)を求めるアルゴリズムを示す。GEN12(B)を求める処理内で、一部のストア・プリフェッチ命令の挿入も行われる。
Figure 2010128960
続いて、ベーシックブロックB内に存在するストア命令とロード命令とに該当するプリフェッチ・グループKILL12(B)を求める。
次に、(3)式で示される前進データフロー解析(forward dataflow analysis)を使って、ベーシックブロックBの先頭で「基準ストア命令のうち、まだベースアドレスが変わらない基準ストア命令」と判断される基準ストア命令に対応するプリフェッチ・グループの集合IN12(B)を求める。
Figure 2010128960
式(3)のPred(B)は、ベーシックブロックBの直前のブロックを意味し、OUT11(Pred(B))、及びOUT12(Pred(B))を用いて、GEN22(B)とIN12(B)を求めることができる。
最後に、式(3)にて求められた範囲に含まれる各ブロックについてストア・プリフェッチ命令の挿入処理を行う。次の式(4)にストア・プリフェッチ命令の挿入処理のアルゴリズムを示す。前進フロー解析で求めた領域の先頭のベーシックブロックBの集合IN12(B)∩KILL12(B)の各ベーシックブロックにおける、最初のロード命令の前にストア・プリフェッチ命令を生成する。
Figure 2010128960
上述したように、ストア・プリフェッチ命令を生成する位置を前進フロー解析にて決定し、決定した位置にストア・プリフェッチを生成する。このように、ステップS3にて求められたストア影響領域に含まれる基準ストア命令について、基準ストア命令に先行するロード命令のうち、先頭のロード命令にストア・プリフェッチ命令を挿入することができる。それにより、基準ストア命令に先行するロード命令が複数ある場合に、複数のロード命令それぞれについてストア・プリフェッチ命令が挿入されるという問題点を解消することができる。
図2のステップS5におけるロード影響領域の求め方について説明する。ステップS5におけるロード影響領域は、後進データフロー解析(backward dataflow analysis)を使って求めることができる。ステップ5におけるロード影響領域の求め方は、ステップS3のストア影響領域の求め方と同じである。ただし、ステップS3で求めたストア影響領域は除く点で異なる。
具体的には、次の(5)式を用いて求めることができる。ステップS3にて求めたストア影響領域外にある基準ロード命令が対象であるので、(5)式の2つ目の式の右辺においてOUT11(B)を引く。
Figure 2010128960
ここで、GEN11(B)及びKILL11(B)の定義は以下の通りである。
GEN31(B):ベーシックブロックBに含まれる基準ロード命令のうち、ベーシックブロックBの先頭までベースアドレスが変わらない基準ロード命令に対応するプリフェッチ・グループの集合。
KILL11(B):ベーシックブロックB内のベースアドレスを更新する命令が存在した場合、当該ベースアドレスを使用している全てのプリフェッチ・グループのロード命令の集合。
図2のステップS6の例として、ステップS5で求めたロード影響領域の先頭にロード・プリフェッチ命令を生成する処理のアルゴリズムを次の(6)式に示す。まず、ステップS5で求めたロード影響領域の先頭のベーシックブロックBの集合GEN32(B)を求め、GEN12(B)の各ベーシックブロックの先頭、すなわち、ベースアドレスを変更する命令の後にロード・プリフェッチ命令を生成する。
Figure 2010128960
図4は、本発明の一実施形態に係るプリフェッチ命令を生成する方法を実現するコンパイラ1を実装する情報処理装置1000のハードウェア構成を示す図である。以下は、コンピュータを典型とする情報処理装置1000として全般的な構成を説明するが、その環境に応じて必要最小限な構成を選択できることはいうまでもない。
情報処理装置1000は、CPU(Central Processing Unit)1010、バスライン1005、通信I/F1040、メインメモリ1050、BIOS(Basic Input Output System)1060、パラレルポート1080、USBポート1090、グラフィック・コントローラ1020、VRAM1024、音声プロセッサ1030、I/Oコントローラ1070、ならびにキーボード及びマウス・アダプタ1100等の入力手段を備える。I/Oコントローラ1070には、フレキシブル・ディスク(FD)ドライブ1072、ハードディスク1074、光ディスク・ドライブ1076、半導体メモリ1078等の記憶手段を接続することができる。
なお、プリフェッチ命令を生成する方法を実現するコンパイラ1及びコンパイラ1により生成されたオブジェクト・コードを実行する実行部は、CPU1010及びメインメモリ1050等のメモリにて実現される。
音声プロセッサ1030には、マイクロホン1036、増幅回路1032、及びスピーカ1034が接続される。また、グラフィック・コントローラ1020には、表示装置1022が接続されている。
BIOS1060は、情報処理装置1000の起動時にCPU1010が実行するブートプログラムや、情報処理装置1000のハードウェアに依存するプログラム等を格納する。FD(フレキシブル・ディスク)ドライブ1072は、フレキシブル・ディスク1071からプログラムまたはデータを読み取り、I/Oコントローラ1070を介してメインメモリ1050またはハードディスク1074に提供する。図4には、情報処理装置1000の内部にハードディスク1074が含まれる例を示したが、バスライン1005またはI/Oコントローラ1070に外部機器接続用インタフェース(図示せず)を接続し、情報処理装置1000の外部にハードディスクを接続または増設してもよい。
光ディスク・ドライブ1076としては、例えば、DVD−ROMドライブ、CD−ROMドライブ、DVD−RAMドライブ、BD(Blu−ray Disk)−ROMドライブ等を使用することができる。この際は各ドライブに対応した光ディスク1077を使用する必要がある。光ディスク・ドライブ1076は光ディスク1077からプログラムまたはデータを読み取り、I/Oコントローラ1070を介してメインメモリ1050またはハードディスク1074に提供することもできる。
情報処理装置1000に提供されるコンピュータ・プログラムは、フレキシブル・ディスク1071、光ディスク1077、またはメモリーカード等の記録媒体に格納されて利用者によって提供される。このコンピュータ・プログラムは、I/Oコントローラ1070を介して、記録媒体から読み出され、または通信I/F1040を介してダウンロードされることによって、情報処理装置1000にインストールされ実行される。コンピュータ・プログラムが情報処理装置に働きかけて行わせる動作は、既に説明した装置における動作と同一であるので省略する。
前述のコンピュータ・プログラムは、外部の記憶媒体に格納されてもよい。記憶媒体としてはフレキシブル・ディスク1071、光ディスク1077、またはメモリーカードの他に、MD等の光磁気記録媒体、テープ媒体を用いることができる。また、専用通信回線やインターネットに接続されたサーバシステムに設けたハードディスクまたは光ディスク・ライブラリ等の記憶装置を記録媒体として使用し、通信回線を介してコンピュータ・プログラムを情報処理装置1000に提供してもよい。
以上の例は、情報処理装置1000について主に説明したが、コンピュータに、情報処理装置で説明した機能を有するプログラムをインストールして、そのコンピュータを情報処理装置として動作させることにより上記で説明した情報処理装置と同様な機能を実現することができる。
本装置は、ハードウェア、ソフトウェア、またはハードウェア及びソフトウェアの組み合わせとして実現可能である。ハードウェアとソフトウェアの組み合わせによる実施では、所定のプログラムを有するコンピュータ・システムでの実施が典型的な例として挙げられる。係る場合、該所定のプログラムが該コンピュータ・システムにロードされ実行されることにより、該プログラムは、コンピュータ・システムに本発明に係る処理を実行させる。このプログラムは、任意の言語、コード、または表記によって表現可能な命令群から構成される。そのような命令群は、システムが特定の機能を直接実行すること、または(1)他の言語、コード、もしくは表記への変換、(2)他の媒体への複製、のいずれか一方もしくは双方が行われた後に、実行することを可能にするものである。もちろん、本発明は、そのようなプログラム自体のみならず、プログラムを記録した媒体を含むプログラム製品もその範囲に含むものである。本発明の機能を実行するためのプログラムは、フレキシブル・ディスク、MO、CD−ROM、DVD、ハードディスク装置、ROM、RAM等の任意のコンピュータ可読媒体に格納することができる。係るプログラムは、コンピュータ可読媒体への格納のために、通信回線で接続する他のコンピュータ・システムからダウンロードしたり、他の媒体から複製したりすることができる。また、係るプログラムは、圧縮し、または複数に分割して、単一または複数の記録媒体に格納することもできる。
以上、本発明を実施形態に則して説明したが、本発明は上述した実施形態に限るものではない。また、本発明の実施形態に記載された効果は、本発明から生じる最も好適な効果を列挙したに過ぎず、本発明による効果は、本発明の実施形態または実施例に記載されたものに限定されるものではない。
本実施の一実施形態に係るコンパイラの構成を示す図である。 本発明の一実施形態に係る最適化処理のフローチャートである。 本発明の一実施形態に係る最適化処理におけるプリフェッチ命令生成の概要図である。 本発明の一実施形態に係るプリフェッチ命令を生成する方法を実現するコンパイラを実装する情報処理装置のハードウェア構成を示す図である。
符号の説明
21、22、23 変更命令
41、42、 ストア命令
31、32、33、34 ロード命令
51 ストア影響領域
61 ロード影響領域
101、102 ストア・プリフェッチ命令
103 ロード・プリフェッチ命令

Claims (10)

  1. ソースプログラムをオブジェクト・コードにコンパイルして実行する情報処理装置で利用されるコンパイラのプリフェッチ命令を生成する方法であって、
    前記ソースプログラムを構成する1以上の最適化対象領域毎に、
    前記最適化対象領域に含まれる命令のうち、キャッシュをデータがない状態からロードに適した状態へ遷移させるロード命令と、前記最適化対象領域に含まれる命令のうち、キャッシュをロードに適した状態からロード及びストアに適した状態へ遷移させるストア命令と、を最適化対象として特定するステップと、
    特定された前記最適化対象と、前記ソースプログラムに含まれる各if文の分岐確率とに基づいて、前記最適化対象領域におけるプリフェッチ命令を挿入する位置を決定し、前記位置にプリフェッチ命令を生成するステップと、
    を含むプリフェッチ命令を生成する方法。
  2. 前記最適化対象領域のストア命令及びロード命令のうち、ベース・メモリアドレスが同じであって、メモリアドレス上の所定のオフセットの範囲を満足しているストア命令及びロード命令を1グループとし、1以上のグループに分類するステップを含む請求項1に記載のプリフェッチ命令を生成する方法。
  3. 前記プリフェッチ命令を生成するステップは、
    前記最適化対象領域において、前記1以上のグループに含まれる前記最適化対象のストア命令について、前記1以上のグループ毎に、当該ストア命令に前記ベース・メモリアドレスが変わらず、実行頻度の高いパスを通って到達できるストア影響領域を求めるステップと、
    求められた前記ストア影響領域それぞれにおいて、前記最適化対象のストア命令より前のロード命令のうち、当該ストア影響領域の内にて先頭にあるロード命令より前に当該ストア影響領域に対応するグループに対するストア・プリフェッチ命令を生成するステップと、
    前記最適化対象領域において、前記1以上のグループに含まれる最適化対象のロード命令について、前記1以上のグループ毎に、当該ロード命令に前記ベース・メモリアドレスが変わらず、実行頻度の高いパスを通って到達できる領域のうち、前記ストア影響領域を除いたロード影響領域を求めるステップと、
    求められた前記ロード影響領域それぞれにおいて、当該ロード影響領域に対応するグループに対するロード・プリフェッチ命令を生成するステップと、
    を含む請求項2に記載のプリフェッチ命令を生成する方法。
  4. 前記ストア影響領域は、後進データフロー解析を用いて求める、請求項3に記載のプリフェッチ命令を生成する方法。
  5. 前記ストア影響領域内にて先頭にあるロード命令を、前進データフロー解析を用いて求める、請求項3に記載のプリフェッチ命令を生成する方法。
  6. 前記ロード影響領域は、後進データフロー解析を用いて求める、請求項3に記載のプリフェッチ命令を生成する方法。
  7. 前記最適化対象のロード命令には、ロード命令が含まれている可能性がある命令をも含む、請求項1に記載のプリフェッチ命令を生成する方法。
  8. ソースプログラムをオブジェクト・コードにコンパイルして実行する情報処理装置で利用されるコンパイラであって、
    前記ソースプログラムを構成する複数の最適化対象領域毎に、
    前記最適化対象領域に含まれる命令のうち、キャッシュをデータがない状態からロードに適した状態へ遷移させるロード命令と、前記最適化対象領域に含まれる命令のうち、キャッシュをロードに適した状態からロード及びストアに適した状態へ遷移させるストア命令と、を最適化対象として特定する特定手段と、
    特定された前記最適化対象と、前記ソースプログラムに含まれる各if文の分岐確率とに基づいて、前記最適化対象領域におけるプリフェッチ命令を挿入する位置を決定し、前記位置にプリフェッチ命令を生成する生成段階と、
    を備えるコンパイラ。
  9. コンピュータに、ソースプログラムからオブジェクト・コードを生成させる処理を実行させるプログラムであって、
    前記コンピュータに、
    前記ソースプログラムを構成する複数の最適化対象領域毎に、
    前記最適化対象領域に含まれる命令のうち、キャッシュをデータがない状態からロードに適した状態へ遷移させるロード命令と、前記最適化対象領域に含まれる命令のうち、キャッシュをロードに適した状態からロード及びストアに適した状態へ遷移させるストア命令と、を最適化対象として特定するステップと、
    特定された前記最適化対象と、前記ソースプログラムに含まれる各if文の分岐確率とに基づいて、前記最適化対象領域におけるプリフェッチ命令を挿入する位置を決定し、前記位置にプリフェッチ命令を生成するステップと、
    を実行させるプログラム。
  10. ソースプログラムをオブジェクト・コードにコンパイルして実行する情報処理装置で利用されるコンパイラのプリフェッチ命令を生成する方法であって、
    前記ソースプログラムを構成する1以上の最適化対象領域毎に、
    前記最適化対象領域のストア命令及びロード命令のうち、ベース・メモリアドレスが同じであって、メモリアドレス上の所定のオフセットの範囲を満足しているストア命令及びロード命令を1グループとし、1以上のグループに分類するステップと、
    前記最適化対象領域に含まれる命令のうち、キャッシュをデータがない状態からロードに適した状態へ遷移させるロード命令と、前記最適化対象領域に含まれる命令のうち、キャッシュをロードに適した状態からロード及びストアに適した状態へ遷移させるストア命令と、を最適化対象として特定するステップと、
    前記最適化対象領域において、前記1以上のグループに含まれる前記最適化対象のストア命令について、前記1以上のグループ毎に、当該ストア命令に前記ベース・メモリアドレスが変わらず、実行頻度の高いパスを通って到達できるストア影響領域を後進データフロー解析により求めるステップと、
    求められた前記ストア影響領域それぞれにおいて、前記最適化対象のストア命令より前のロード命令のうち、当該ストア影響領域の内にて先頭にあるロード命令を前進データフロー解析により求め、求められた前記ストア影響領域の内にて先頭にあるロード命令より前に当該ストア影響領域に対応するグループに対するストア・プリフェッチ命令を生成するステップと、
    前記最適化対象領域において、前記1以上のグループに含まれる最適化対象のロード命令について、前記1以上のグループ毎に、当該ロード命令に前記ベース・メモリアドレスが変わらず、実行頻度の高いパスを通って到達できる領域のうち、前記ストア影響領域を除いたロード影響領域を後進データフロー解析により求めるステップと、
    求められた前記ロード影響領域それぞれにおいて、当該ロード影響領域に対応するグループに対するロード・プリフェッチ命令を生成するステップと、
    を含むプリフェッチ命令を生成する方法。
JP2008305074A 2008-11-28 2008-11-28 プリフェッチ命令生成方法、コンパイラ、及びプログラム Expired - Fee Related JP5447774B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2008305074A JP5447774B2 (ja) 2008-11-28 2008-11-28 プリフェッチ命令生成方法、コンパイラ、及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008305074A JP5447774B2 (ja) 2008-11-28 2008-11-28 プリフェッチ命令生成方法、コンパイラ、及びプログラム

Publications (2)

Publication Number Publication Date
JP2010128960A true JP2010128960A (ja) 2010-06-10
JP5447774B2 JP5447774B2 (ja) 2014-03-19

Family

ID=42329285

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008305074A Expired - Fee Related JP5447774B2 (ja) 2008-11-28 2008-11-28 プリフェッチ命令生成方法、コンパイラ、及びプログラム

Country Status (1)

Country Link
JP (1) JP5447774B2 (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2018206175A (ja) * 2017-06-07 2018-12-27 富士通株式会社 コンパイラ、情報処理装置及びコンパイル方法
CN109165054A (zh) * 2012-06-29 2019-01-08 英特尔公司 用于程序代码的预先取出和早执行的系统和方法
CN110532199A (zh) * 2018-05-23 2019-12-03 北京忆芯科技有限公司 预读方法及其存储控制器
CN114528025A (zh) * 2022-02-25 2022-05-24 深圳市航顺芯片技术研发有限公司 指令处理方法、装置、微控制器及可读存储介质

Non-Patent Citations (7)

* Cited by examiner, † Cited by third party
Title
CSNA200504143001; POWER4プロセッサー 概要とチューニング・ガイド 初版, 200210, pp.87〜88, 日本アイ・ビー・エム株式会社 *
CSNG200200010016; 岡本秀輔: '命令フェッチ制御命令による命令キャッシュミスペナルティの削減' 情報処理学会研究報告 Vol.2000,No.74, 20000805, p.101, 社団法人情報処理学会 *
CSNG200400370005; 本川敬子、久島伊知郎、西山博泰、橋本博幸: 'ハードウェアプリフェッチ機構を利用したコンパイラ制御によるデータプリフェッチ方式' 情報処理学会研究報告 Vol.2002,No.9, 20020201, pp.25〜30, 社団法人情報処理学会 *
JPN6013009859; 本川敬子、久島伊知郎、西山博泰、橋本博幸: 'ハードウェアプリフェッチ機構を利用したコンパイラ制御によるデータプリフェッチ方式' 情報処理学会研究報告 Vol.2002,No.9, 20020201, pp.25〜30, 社団法人情報処理学会 *
JPN6013009863; 岡本秀輔: '命令フェッチ制御命令による命令キャッシュミスペナルティの削減' 情報処理学会研究報告 Vol.2000,No.74, 20000805, p.101, 社団法人情報処理学会 *
JPN6013009865; POWER4プロセッサー 概要とチューニング・ガイド 初版, 200210, pp.87〜88, 日本アイ・ビー・エム株式会社 *
JPN7013000817; Jonas Skeppstedt, Per Stenstro"m: 'Using dataflow analysis techniques to reduce ownership overhead in cache coherence protocols' ACM Transactions on Programming Languages and Systems (TOPLAS) Volume 18, Issue 6, 199611, pp.659-682, ACM *

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109165054A (zh) * 2012-06-29 2019-01-08 英特尔公司 用于程序代码的预先取出和早执行的系统和方法
JP2018206175A (ja) * 2017-06-07 2018-12-27 富士通株式会社 コンパイラ、情報処理装置及びコンパイル方法
CN110532199A (zh) * 2018-05-23 2019-12-03 北京忆芯科技有限公司 预读方法及其存储控制器
CN110532199B (zh) * 2018-05-23 2023-06-20 北京忆芯科技有限公司 预读方法及其存储控制器
CN114528025A (zh) * 2022-02-25 2022-05-24 深圳市航顺芯片技术研发有限公司 指令处理方法、装置、微控制器及可读存储介质

Also Published As

Publication number Publication date
JP5447774B2 (ja) 2014-03-19

Similar Documents

Publication Publication Date Title
JP5473768B2 (ja) マルチパス動的プロファイリングのためのコンピュータに実行させる方法、システム及びコンピュータ・プログラム
US7086046B2 (en) Method and apparatus for displaying compiler-optimizated code
JP6524021B2 (ja) コンパイル用の構文解析済みヘッダ
EP0905617B1 (en) Method for generating a java bytecode data flow graph
US7784039B2 (en) Compiler, compilation method, and compilation program
US20110239186A1 (en) Variable closure
US20060200796A1 (en) Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus
JP2009110299A (ja) プログラムを最適化するコンパイラ
US20110067018A1 (en) Compiler program, compilation method, and computer system
JP4041248B2 (ja) コンパイラ装置、コンパイルプログラムが記録されたコンピュータ読み取り可能な記録媒体及びコンパイル方法
JP3813087B2 (ja) プログラム変換方法、コンピュータ装置及びプログラム
JP2000081983A (ja) ル―プに対するバ―ジョニングを実行する方法及び装置、配列レンジ・チェックに関する情報をベ―シック・ブロック内において収集する方法及び装置、配列レンジ・チェックに関する情報を変更する方法、配列レンジ・チェック最適化方法、配列レンジ・チェックのためのコ―ドを生成する方法、不要配列レンジ・チェック除去方法及び装置、配列レンジ・チェックを選択する方法、配列レンジ・チェック変更方法、配列レンジ・チェック収集方法、及び配列レンジ・チェック取扱判断方法
JP5447774B2 (ja) プリフェッチ命令生成方法、コンパイラ、及びプログラム
US10013244B2 (en) Apparatus and method to compile a variadic template function
US6665864B1 (en) Method and apparatus for generating code for array range check and method and apparatus for versioning
JP4768984B2 (ja) コンパイル方法、コンパイルプログラムおよびコンパイル装置
US6925636B2 (en) Method and apparatus for refining an alias set of address taken variables
US8856765B2 (en) Analyzing a pointer in an analysis target program or a partial program
JP6481515B2 (ja) 情報処理装置、コンパイル方法、及びコンパイラプログラム
JP3790707B2 (ja) プログラム変換方法、これを用いたコンピュータ装置及びプログラム
JP2017091070A (ja) 実行可能コード生成プログラムおよび実行可能コード生成装置
US20170344351A1 (en) Information processing apparatus, compiling management method, and recording medium
JP2006139413A (ja) プログラム、プログラムコードの合理化方法、プログラムコードの生成方法、プログラムコード、及び情報処理装置
US20230376290A1 (en) Domain specific inlining for interpreters
JP4158849B2 (ja) プログラム変換装置、プログラム変換方法及び記録媒体

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20110908

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130205

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130305

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130605

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

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20131127

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20131217

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees