JPH11149380A - コンパイラとプログラム最適化方法およびその処理プログラムを記録した記録媒体 - Google Patents

コンパイラとプログラム最適化方法およびその処理プログラムを記録した記録媒体

Info

Publication number
JPH11149380A
JPH11149380A JP31673897A JP31673897A JPH11149380A JP H11149380 A JPH11149380 A JP H11149380A JP 31673897 A JP31673897 A JP 31673897A JP 31673897 A JP31673897 A JP 31673897A JP H11149380 A JPH11149380 A JP H11149380A
Authority
JP
Japan
Prior art keywords
program
value
variable
compiler
profile
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.)
Pending
Application number
JP31673897A
Other languages
English (en)
Inventor
Hiroyasu Nishiyama
博泰 西山
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.)
Hitachi Ltd
Real World Computing Partnership
Original Assignee
Hitachi Ltd
Real World Computing Partnership
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 Hitachi Ltd, Real World Computing Partnership filed Critical Hitachi Ltd
Priority to JP31673897A priority Critical patent/JPH11149380A/ja
Publication of JPH11149380A publication Critical patent/JPH11149380A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【課題】 手続きのパラメタが実行時に決定される変数
である場合にもプログラムの最適化を可能とし、同一の
値を取る可能性の高い変数を含んだプログラムを高速化
させる。 【解決手段】 まず、プロファイル処理部102によ
り、プログラム中の変数が実行中に取る値とその頻度と
を記録させ、次に、手続き最適化部103により、変数
を用いるプログラム部分を、高頻度の変数の値(特定
値)で特殊化して新たに付加し、実行時、変数の値が特
定値と等しいか否かを判別して、値が一致している場合
に、新たに付加した特殊化プログラム部分を読み出すよ
うに、プログラムを変換するコンパイラ構成とし、同一
の値をとる可能性の高い変数を含んだプログラムを、既
存プロセッサ上で高速に実行させる。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、CやPASCAL
等のプログラム言語で書かれたプログラムのコンパイル
処理(翻訳)を行なうコンパイラとそのプログラム最適
化技術に係わり、特に、プログラムの実行速度を高速化
するのに好適なコンパイラとプログラム最適化方法およ
びその処理プログラムを記録した記録媒体に関するもの
である。
【0002】
【従来の技術】一般に、C言語における関数等、プログ
ラム言語における手続きは、パラメタのうち幾つかが特
定の値で呼び出されることが多い。これは、手続きが、
汎用性を考慮して作成されることが多く、異なるパラメ
タで同一の手続き呼び出すことにより、同一のプログラ
ムを利用して、異なる処理を実現できるようにしている
ためである。この結果、最初から特定の呼出しパターン
のみに対応して記述した手続きと比較すると、その実行
速度は低下してしまう。
【0003】このような点に着目して、定数値をパラメ
タとして持つ手続き呼び出しを、パラメタの値を固定化
したプログラムの呼び出しに変更することで、プログラ
ムの実行速度を向上させるcloningと呼ばれる技術があ
る。ここで、元の手続きに対して、変更後のプログラム
は、取り得るパラメタ値の範囲が限定されるので、この
ような手続きは、元の手続きに対して特殊化されている
とされる。
【0004】具体的には、例えば、K.D.Cooper,他によ
る「“Procedure Cloning." In Proceedings of the 19
92 International Conference on Computer Languages,
pages96-105, 1992」に示されているように、手続き呼
び出しパラメタが定数の場合に、呼び出し点で定数値を
持つパラメタに対応して手続き本体を複写し、パラメタ
の値を手続き間の定数伝搬によって定数に変更して特殊
化した手続きを作成し、被呼び出し手続きを、この特殊
化した手続きによって置き換える。このようなcloning
を行なうには、手続き呼び出し部分のコンパイルを行な
う際に、被呼び出し手続きの情報が必要となるので、コ
ンパイル時に手続き間解析を行なって、cloningのため
の情報を保存しておく。
【0005】同様の知見に基づいて、例えば、M.H.Lipa
sti,他による「“Exceeding the Dataflow Limit via V
alue Prediction." In Proceedings of the 26th Annua
l International Symposium on Microarchitecture, pa
ges226-237, 1996」では、値の局所性(value localit
y)という概念を導入し、ハードウェアによって命令レ
ベルでの演算結果を予測することにより、処理を高速化
するための技術が記載されている。値の局所性とは、同
一の命令の計算結果が、ある一定の局所的な値をとる性
質を表したものであり、上記技術では、この性質を利用
して、命令アドレスと当該アドレスの演算やロードの結
果の値の組を、「value prediction table」と呼ばれる
プロセッサ上のテーブルに、ハードウェアによって記憶
しておき、次に当該アドレスを実行した場合に、記憶し
ておいた値を利用することで、演算やロードに要するレ
イテンシを短縮する技術が記載されている。
【0006】このレイテンシの短縮は、以前の演算結果
による予測値を用いて、後続する演算を投機的に開始
し、演算結果が予測値と等しくない場合には、投機的に
実行した命令の実行をキャンセルすることにより実現さ
れている。これにより、演算結果の予測が正しければ、
演算を先行的に開始することができるので、プログラム
を高速に実行することができる。尚、上記文献での評価
結果によれば、ベンチマークプログラムに対して、平均
61%程度の値の局所性を持つことが示されている。
【0007】このような値の局所性に基づいた手続き最
適化のための技術とは別に、例えば、P.P.Chang,他によ
る「“Using Profile Information to Assist Classic
CodeOptimizations." In SOFTWARE-PRACTICE AND EXPER
IENCE, pages1301-1321, 1991」に記載されているよう
に、プログラム内に存在する分岐の頻度を求め、これを
プログラムの最適化に利用する技術がある。分岐の頻度
を求めることにより、例えば、実行される確率の高いプ
ログラム部分を求めることができるので、実行確率の高
いパスを連続的に配置したり、実行頻度の高いパスの命
令を優先的にスケジュールするといったコンパイラ最適
化を適用することができる。
【0008】このような最適化が効果を持つためには、
高い分岐確率の予測精度が必要である。そこで、一度プ
ログラムを実行し、そのときの分岐方向毎の分岐頻度を
プロファイル情報として記憶しておき、次にコンパイル
を行なう際に、この分岐頻度情報を参照して、実行頻度
の高いパスを求める技術が利用されている。しかし、こ
れらの従来技術においては、以下に示すような問題があ
った。
【0009】まず、cloningを用いた技術では、特殊化
の対象が、定数値をとる手続きのパラメタ、および、こ
れを伝幡して定数となるプログラム断片に限定されてい
た。そのため、手続きのパラメタが実行時に決定される
値である場合、手続きパラメタ値が常に同じであっても
最適化が適用されなかった。また、cloningでは、手続
きの実行頻度が考慮されないのでコードが増大し、手続
き間解析を必要とするため、コンパイラの実現が複雑化
する。
【0010】尚、cloningのようなコンパイラによる最
適化では、定数伝幡や定数畳み込みといった最適化を適
用することにより、命令数の削減等、大きな効果を得る
ことができる。これに対して、M.H.Lipastiらによる技
術では、レイテンシの削減効果しか得られない。また、
その実現には複雑なハードウェア機構が必要となる。ま
た、プロファイル情報を使用した上述のP.P.Changらに
よる技術においては、以前実行したプログラムで採取さ
れる情報は、分岐の実行頻度に限られていたため、コー
ド移動やコード配置などに、その利用が限られていた。
【0011】
【発明が解決しようとする課題】解決しようとする問題
点は、従来の技術では、手続きのパラメタが実行時に決
定される変数である場合にはプログラムを最適化できな
い点である。本発明の目的は、これら従来技術の課題を
解決し、同一の値を取る可能性の高い変数を含んだプロ
グラムを高速化させることを可能とするコンパイラとプ
ログラム最適化方法およびその処理プログラムを記録し
た記録媒体を提供することである。
【0012】
【課題を解決するための手段】上記目的を達成するた
め、本発明のコンパイラとプログラム最適化方法は、プ
ログラム中の変数が実行中に取る値と、この値を取った
頻度とを記録するための手続き(プロファイルコード)
をコンパイル対象のプログラムに挿入して、プログラム
実行時に変数が取った値とその頻度をプロファイル情報
として記録し、この記録したプロファイル情報を、次回
以降のコンパイル最適化処理で使用することにより、プ
ログラムを高速化する。例えば、頻度が高く、プログラ
ム中で変数が取り得る可能性の高い値(特定値)と、こ
の特定値に変数の値を固定化することによって性能向上
が期待できるプログラムの部分とを予測し、この予測し
たプログラム部分を特定値で特殊化したプログラム部分
を新たに付加し、かつ、元のプログラムにおける、この
特殊プログラム部分への制御の移行を行なう部分に、変
数の値が予測した値(特定値)と等しいか否かを判別す
るコード(分岐コード)を挿入し、値が一致している場
合に、変数の値を固定化した特殊プログラム部分を読み
出すように、プログラムを変換する構成とする。このこ
とにより、実行時に変数が特定値を取った場合のプログ
ラムの実行速度を向上させることができ、同一の値(特
定値)をとる可能性の高い変数を含んだプログラムを、
既存プロセッサ上で高速に実行できる。
【0013】
【発明の実施の形態】以下、本発明の実施例を、図面に
より詳細に説明する。図1は、本発明のコンパイラの構
成とそのプログラム最適化に係わる動作の一実施例を示
す説明図であり、図2は、図1におけるコンパイラを実
行する計算機システムの構成例を示すブロック図であ
る。図2において、201はCPU(Central Processi
ng Unit)からなるプロセッサ、202はRAM(Read
Only Memory)からなる主記憶装置(図中、「主記憶」
と記載)、203はHDD(Hard Disk Drive)からな
る外部記憶装置(図中、「ディスク」と記載)、204
は本発明のプログラム最適化を行なうコンパイラの処理
プログラムを記録した光ディスク(図中、「OD」と記
載)、205は光ディスク204からのデータの読み取
りを行なう光ディスク駆動装置(図中、「OD駆動装
置」と記載)である。
【0014】光ディスク204に記録されたコンパイラ
は、光ディスク駆動装置205を介して外部記憶装置2
03に一旦格納され、さらに、主記憶装置202に読み
出された後、プロセッサ201により実行される。コン
パイラの翻訳(コンパイル処理)対象のプログラムも同
様に、外部記憶装置203に格納され、主記憶装置20
2上に読み出され、コンパイラによりアプリケーション
(オブジェクトプログラム)に変換(翻訳)され、外部
記憶装置203に格納される。
【0015】本例において、コンパイラは、図1に示す
プロファイル処理部102と手続き最適化部103を有
し、以下のようにして、本発明に係わるプログラム最適
化を行なう。すなわち、まず、プログラム中に表れる変
数(var)に対して、実行時にこの変数(var)が
取った値(val)と、その値(val)を取った回数
(count)との組<val,count>の集合を
記憶するようプログラムを追加する。
【0016】そして、次回、同じプログラムをコンパイ
ルする際に、前回の実行の際に記憶した値(val)を
参照し、同一の値(val)を取る頻度の高い変数(v
ar)に対する手続き(func)全体やその一部を、
値(val)によって特殊化した手続き(func’)
を作成する。ここで、手続きを全て「func」から
「func’」に、そのまま置き換えたのでは、変数
(var)が「val」以外の値を取った場合に都合が
悪いので、変数(var)が、「val」以外の値を取
った場合に備えて、特殊化した手続き(func’)を
呼び出す前に、変数(var)の値が「val」と等し
いか否かを検査し、等しい場合にのみ、特殊化した手続
き(func’)を呼び出すようにする。
【0017】このようにしてプログラムを翻訳(コンパ
イル)することにより、従来のcloningでは、コンパイ
ル時に値が定数であることをコンパイラで判定できた手
続きのみが、値の特殊化による最適化の適用対象となっ
ていたのに対して、値が常にあるいは多くの場合に同じ
であることが、コンパイル時に不確定なプログラムに対
しても、値による特殊化を適用して、プログラムを高速
化することが可能となる。すなわち、ここでの特定の値
での手続きの特殊化を行なう際には、cloningのよう
に、手続き呼び出し元の情報は必要なく、各変数の取り
得る値とその頻度が分かれば良いので、手続き間解析が
不可能な場合にも、最適化を適用することができる。
【0018】このように、従来、分岐の頻度のみに対し
て適用されていた実行プロファイル情報の採取を、変数
の取る値と、その頻度へ拡張することにより、コンパイ
ラ最適化での利用範囲を拡大することができる。そし
て、このようなプロファイル情報の記憶、および、それ
を利用した最適化は、ソフトウェアのみで実現できるの
で、特別なハードウェアサポートを必要としない。
【0019】以下、図1を用いて、このようなコンパイ
ラの詳細説明を行なう。図1においては、実線矢印はデ
ータの流れを表し、破線矢印はユーザによる操作の流れ
を表している。まず、プログラム作成者は、作成した最
適化対象プログラム104を、コンパイラ101によっ
てコンパイルする。この時、プログラム作成者は、プロ
ファイル処理部102を起動するためのオプション(第
1のオプション)を指定して、コンパイル指示操作を行
なう。この結果、コンパイラ101は、プロファイル処
理部102により、プログラム104中に現われる変数
が実行時に取る値とその頻度をファイル等に記憶するプ
ロファイル処理機能を、生成するオブジェクトに付加す
る。
【0020】このようにして、プロファイル保存機能を
持つオブジェクト105が生成される。このプロファイ
ル保存機能を持つオブジェクト105(アプリケーショ
ン)を仮実行106することにより、プログラム104
中に現れる変数に対して、その値と頻度を記録したプロ
ファイル情報(図中、「プロファイルデータ」と記載)
107が生成される。
【0021】そして、次にプログラム104をコンパイ
ルする際、プログラム作成者は、手続き最適化部103
を起動するためのオプション(第2のオプション)を指
定して、コンパイル指示操作を行なう。この結果、コン
パイラ101は、手続き最適化部103により、先の実
行により記憶されたプロファイル情報107を読み込
み、特定の値を取る可能性の高い変数に対して、その値
を取った場合に、当該値により特殊化された手続きある
いはプログラムの一部分が呼び出されるように最適化さ
れたオブジェクト108を生成する。
【0022】以下、このようなプログラムの最適化動作
例を、図3〜図8を用いて具体的に説明する。図3は、
図1におけるプロファイル処理部で最適化対象プログラ
ムに付加されたプロファイル情報の構造例を示す説明図
である。プロファイル情報は、複数のプロファイルレコ
ードから構成され、このプロファイルレコードは、各手
続きのプロファイル対象変数毎に作成される。
【0023】各プロファイルレコードに格納される情報
は、図に示すように、プロファイル対象変数の所属する
手続き名(proc)、変数名(name)、型(ty
pe)、値(val)、変数が値valを取った回数
(count)などからなり、値(val)と回数(c
ount)の組については、頻度の高いものを複数個保
存しておく。尚、この例では、値(val)の型を整数
型(int)としているが、符号小数点型などに関して
も拡張して良い。また、値(val)と回数(coun
t)の組は、最も頻度の高い組1つのみを格納するよう
にすることでも良い。
【0024】次に、図4と図5により、本発明の特徴的
な処理を行なう図1におけるプロファイル処理部102
と手続き最適化部103の動作について説明する。図4
は、図1におけるプロファイル処理部の処理動作例を示
すフローチャートである。プロファイル処理部102
は、処理401より処理を開始し、処理402におい
て、プロファイル対象変数の集合Vを求める。
【0025】ここで、集合Vに求める変数は、プログラ
ム中に現れる全ての変数としても良いが、全ての変数を
対象とした場合は、プロファイル情報の量が膨大となる
可能性があるため、別の値を取る可能性の高いことがコ
ンパイル時に予測できる変数や、プロファイルを取って
も、得られる最適化効果が薄い変数などについては、プ
ロファイル対象変数から除いても良い。
【0026】次に、処理403では、処理402におい
て求めたプロファイル対象変数の集合Vが空集合か否か
を判別する。空集合であれば、処理407に移り、全て
の処理を終了するが、空集合でなければ、処理404に
おいて、集合Vより変数を1つ取り出して変数vとして
格納する。続いて、変数vの定義点の集合Dを求める。
尚、プログラム中の定義点の集合は、例えば、Aho他
による「Compilers-Principles,Techniques, and Tool
s,Addision-Wesley, 1996」に記載されているような、
既知のプログラム解析技術を適用することにより求める
ことができる。
【0027】次に、処理405において、求めた定義点
の集合Dが空集合か否かを確かめ、空き集合であれば処
理403に制御を移して次の変数を処理する。また、空
き集合でなければ処理406に制御を移し、まず、集合
Dより変数vの定義点を1つ取り出し、d(変数)へ格
納する。次に、dの定義点の直後に、その時点での変数
vの値と、その値を取った回数を記録するコードを挿入
し、続いて、処理405へ制御を移して、次の定義点を
処理する。
【0028】図5は、図1における手続き最適化部の処
理動作例を示すフローチャートである。手続き最適化部
103は、処理501により処理を開始し、処理502
において、プロファイル情報の集合Pを求める。ここ
で、プロファイル情報の集合は、図4のプロファイル処
理を行なう手続きコードを付加してコンパイルしたアプ
リケーションを仮実行等した際に記録されたものであ
り、これを、コンパイラ中に読み込むことで求められ
る。
【0029】続いて、処理503では、処理502にお
いて求めたプロファイル情報の集合Pが空き集合か否か
を確かめる。空き集合であれば、処理507へ制御を移
して処理を終了する。また、集合Pが空集合でなけれ
ば、処理504へ制御を移し、まず、集合Pよりプロフ
ァイル対象変数を1つ取り出し、変数vへ格納する。次
に、変数vが最も高い頻度で取る値を変数nへ、変数v
が値nを取る確率を変数fへ格納する。
【0030】次に、処理505において、処理504で
求めた確率fが十分大きいか否かを確かめ、十分でない
場合には、処理503へ制御を移して次の変数を処理
し、十分大きければ処理506の制御に移る。処理50
6では、変数vが使用されるプログラム上の領域を変数
Rへ求める。ここで、ある変数が使用されているプログ
ラム上の領域についても、前記文献に述べられているよ
うな、既知のプログラム解析技術を適用することにより
求めることができる。
【0031】次に、領域Rを複写し、複写したコード上
での変数vの使用を値nで置き換えた領域R’を作成す
る。さらに、領域Rへの制御フローに対して、変数vの
値がnか否かを確かめて、nと等しい場合にはR’へ、
等しくない場合にはRへ制御を移すようプログラムを変
更する。続いて、処理503へ制御を移して、別の変数
を処理する。
【0032】このような図4、図5の処理による本発明
の具体的なプログラム最適化例を、図6〜図8を用い説
明する。図6は、図1における最適化対象プログラムの
具体例を示す説明図である。このプログラムにおいて、
関数601(sum)のパラメタxは、関数602(r
ead_int)の呼び出し結果となっているため、従
来のcloningでは、「read_int」が手続き間解
析可能で、かつ、その返値が特定の定数であることがコ
ンパイラによって保証できなければ、最適化を適用する
ことができない。
【0033】そこでまず、このプログラムを、変数の値
とその値を取った頻度をプロファイル情報として記憶す
る機能を持ったプログラムへ、図1のプロファイル処理
部101の図4における処理により変換する。すなわ
ち、図4の処理402における処理で、プロファイル対
象変数の集合を求める。ここで、図6のプログラムで
は、関数sumの変数iおよびsについては、関数を構
成するループ中でその値が不変ではないので、プロファ
イル情報を取る必要がない。また、関数mainの変数
yについては、値の定義後にコンパイル時にソースコー
ドの得られないシステムライブラリの呼び出しパラメタ
として使用されるだけであるので、この値を特殊化して
も最適化効果が得られる見込がない。そこで、このプロ
グラム例では、変数xのみを対象とし、プロファイル対
象集合V={x}とする。
【0034】次に、図4の処理403における処理で、
Vが空集合であるか否か確かめる。ここでは、Vは空集
合でないので、図4の処理404へ制御を移す。図4の
処理404では、集合Vより変数「x」を取り出し、こ
れを変数vへ格納する。また、Dに変数「x」の定義点
の集合を求める。ここでは、変数xの定義点は関数60
2の文である。次に、図4の処理405の処理におい
て、Dが空集合か否かを確かめる。Dは空集合ではない
ので、図4の処理406へ処理を移す。
【0035】図4の処理406では、Dより変数dに、
変数xの定義点である関数602の文を取り出し、この
関数602の文の直後に、変数xの取った値と、その値
を取った回数を記録するプロファイルコードを挿入す
る。次に、図4の処理404でDが空集合になったの
で、処理403へ制御を移すが、このとき、同様にVも
空集合になったので、処理407へ制御を移して、プロ
ファイル処理を終了する。この結果得られるコードを図
7に示す。
【0036】図7は、図1のプログラム処理部により図
6のプログラムに本発明に係わるプロファイルコードが
付加されたプログラム例を示す説明図である。本例で
は、図4のプロファイル処理により、プロファイル情報
を記憶するための処理関数(_profile)を呼出
すプロファイルコード701が、プログラム中に付加さ
れている。ここで、このプロファイル情報の記録機能を
付加したプログラムを実行してプロファイル情報を生成
し、その結果、関数(read_int)の返値である
変数xの値が「10」である頻度が高いことが判明した
とする。
【0037】この場合の、この情報を利用しての、図1
の最適化処理部103による図6のプログラムの最適化
動作を、図5の処理に基づき具体的に説明する。まず、
図5の処理502の処理では、Pにプロファイル情報の
集合を求めるが、ここでは、プロファイルを記録した変
数はxのみであるので、xの情報のみがPに求められ
る。次に、図5の処理503でPが空集合か否かを確か
める。ここでは、Pは空集合ではないので、図5の処理
504へ制御を移す。処理504では、Pより変数xを
取り出し、Vへ格納する。
【0038】同様に、vが最も高い頻度で取る値である
「10」を変数nへ格納し、値「10」を取った確率を
fへ求める。次に、図5の処理505で、求めた確率f
が十分大きいか否かを確かめる。この例では、fの値が
十分大きいものとし、図5の処理506へ制御を移す。
図5の処理506においては、Rに変数xの使用がある
プログラム上の領域を求める。図6の例では、関数60
1(sum)のパラメタとして変数xが使用されている
ので、Rは、関数601(sum)の呼出し文とsum
の定義となる。
【0039】次に、R’にRを複写し、変数xの使用を
値「10」で置き換える。ここで、関数sumを複写
し、パラメタを置き換えた関数(sum_10)のパラ
メタの値が「10」で置き換えられるので、ループ解消
や定数伝幡、静的評価といった最適化を適用することに
より、「sum_10」を最適化することができる。次
に、領域Rの制御の入口に、xの値が「10」と等しい
場合にR’へ、また、等しくない場合にRへ制御を移動
する分岐コードを付加する。図6の例では、Rの制御の
入口は、関数601の文の直前なので、関数601の文
の直前に、値の判別検査を行なうコードを挿入する。
【0040】そして、図5の処理503では、Pが空集
合となったので、処理507へ制御を移して処理を終了
する。以上のような最適化を適用した結果、図6のプロ
グラムは、図8に示すようなプログラムとなる。図8
は、図1における手続き最適化部により図6のプログラ
ムに本発明に係わる分岐コードと特殊化されたプログラ
ムが付加されたプログラム例を示す説明図である。
【0041】図8のプログラムでは、図6における関数
601の文が、「if(x ==10){y=sum_
10();}else{y=sum(x);}」とな
り、関数main中でread_intの結果が「1
0」と等しいか否かを確認し、等しい場合に、関数su
mのパラメタの値を「10」で特殊化した関数sum_
10を呼出し、また、等しくない場合には、元の関数s
umを呼び出すようにプログラムが変更されている。そ
して、特殊化された関数sum_10()には、ret
urn(55)から直ちに返値「55」が渡される。
【0042】このように、特殊化された関数sum_1
0()は、パラメタnを「10」に特殊化することによ
り、ループが解消され、さらに、定数伝幡および定数畳
み込み等の最適化により演算も除去されるので、元の関
数sumを実行するよりも効率が良い。このため、re
ad_intの結果が「10」であることが多ければ、
プログラムの実行は高速化されることになる。
【0043】以上、図1〜図8を用いて説明したよう
に、本実施例のコンパイラでは、コンパイル対象のプロ
グラム中の変数が、所定の頻度以上で同一の値(特定
値)を取る場合、その変数を用いたプログラム部分を特
定値で特殊化したプログラムを選択するようプログラム
を翻訳し、プログラムの最適化を行なう。すなわち、第
1のオプションを指定してコンパイルしたプログラムを
仮実行させ、プログラム中の変数の値と、その値を取っ
た頻度をプロファイル情報として記憶させる。そして、
そのプロファイル情報を、次回以降の最適化処理で使用
することにより、プログラムを高速化することができ
る。
【0044】例えば、頻度が高く、プログラム中で変数
が取り得る可能性の高い値を特定し、この特定した値
で、変数を用いるプログラム部分を特殊化することによ
り、実行時に変数が特定値を取った場合の実行速度を向
上させる。このことにより、同一の値をとる可能性の高
い変数を含んだプログラムを、既存プロセッサ上で高速
に実行することができる。
【0045】尚、本発明は、図1〜図8を用いて説明し
た実施例に限定されるものではなく、その要旨を逸脱し
ない範囲において種々変更可能である。例えば、本実施
例では、プログラム中に現われる変数のみをプロファイ
ル情報として記憶する対象としたが、例えば、コンパイ
ラ生成変数、プログラム中の分岐の条件、ループ中で参
照される配列のオーバラップ関係などの変数に拡張する
ことも可能である。また、コンパイラを記録するものと
して、本例での光ディスクの他に、フレキシブルディス
ク(FD)等を用いても良い。
【0046】
【発明の効果】本発明によれば、手続きのパラメタが実
行時に決定される変数である場合にもプログラムを最適
化して変換でき、同一の値を取る可能性の高い変数を含
んだプログラムを高速化させることが可能である。
【図面の簡単な説明】
【図1】本発明のコンパイラの構成とそのプログラム最
適化に係わる動作の一実施例を示す説明図である。
【図2】図1におけるコンパイラを実行する計算機シス
テムの構成例を示すブロック図である。
【図3】図1におけるプロファイル処理部で最適化対象
プログラムに付加されたプロファイル情報の構造例を示
す説明図である。
【図4】図1におけるプロファイル処理部の処理動作例
を示すフローチャートである。
【図5】図1における手続き最適化部の処理動作例を示
すフローチャートである。
【図6】図1における最適化対象プログラムの具体例を
示す説明図である。
【図7】図1のプログラム処理部により図6のプログラ
ムに本発明に係わるプロファイルコードが付加されたプ
ログラム例を示す説明図である。
【図8】図1における手続き最適化部により図6のプロ
グラムに本発明に係わる分岐コードと特殊化されたプロ
グラムが付加されたプログラム例を示す説明図である。
【符号の説明】
101:コンパイラ、102:プロファイル処理部、1
03:手続き最適化部、104:最適化対象プログラ
ム、105:プロファイル保存機能を持つオブジェク
ト、106:仮実行、107:プロファイル情報、10
8:最適化されたオブジェクト、201:プロセッサ、
202:主記憶装置、203:外部記憶装置、204:
光ディスク、205:光ディスク駆動装置、601,6
02:関数、701:プロファイルコード。

Claims (7)

    【特許請求の範囲】
  1. 【請求項1】 プログラム言語で書かれたプログラムの
    コンパイル処理(翻訳)を行なうコンパイラであって、
    上記プログラム中の変数が取る値と該値を取る頻度とを
    対応付けて記録する手続きコード(プロファイルコー
    ド)を上記プログラムに付加する手段を有し、上記プロ
    グラムの実行時、上記変数が取った値と該値を取った頻
    度とを対応付けてプロファイル情報として記録するよう
    上記プログラムを翻訳することを特徴とするコンパイ
    ラ。
  2. 【請求項2】 請求項1に記載のコンパイラにおいて、
    上記プロファイルコードにより記録された所定の頻度以
    上の値(特定値)で上記変数を用いたプログラム部分を
    特殊化して上記プログラムに付加すると共に、上記変数
    が上記特定値を取った場合に該特定値で特殊化したプロ
    グラム部分を呼び出す手続きコード(分岐コード)を上
    記プログラムに付加する手段を有し、上記プログラムの
    実行時、上記変数が上記特定値を取った場合、上記特殊
    化したプログラム部分を呼び出すよう上記プログラムを
    翻訳することを特徴とするコンパイラ。
  3. 【請求項3】 請求項2に記載のコンパイラにおいて、
    上記プログラムの翻訳時、上記プロファイルコードを付
    加する手段を第1のオプションの指定に基づき起動する
    手段と、上記特殊化したプログラムを付加すると共に上
    記分岐コードを付加する手段を第2のオプションの指定
    に基づき起動する手段とを有し、上記第1のオプション
    が指定された状態で翻訳したプログラムを実行して上記
    プロファイル情報を記録した後、上記第2のオプション
    が指定された状態で上記プログラムを再度翻訳すること
    を特徴とするコンパイラ。
  4. 【請求項4】 プログラム言語で書かれたプログラムの
    コンパイル処理(翻訳)を行なうコンパイラによる上記
    プログラムの最適化方法であって、上記プログラム中の
    変数が所定の頻度以上で同一の値(特定値)を取る場
    合、上記変数を用いたプログラム部分を上記特定値で特
    殊化したプログラムを選択するよう上記プログラムを翻
    訳することを特徴とするプログラム最適化方法。
  5. 【請求項5】 請求項4に記載のプログラム最適化方法
    において、上記プログラム中の変数が実行時に取る各値
    と該各値を取った頻度とを対応付けて記録する手続きコ
    ード(プロファイルコード)を上記プログラムに付加
    し、実行時の上記プロファイルコードによる記録情報
    (プロファイル情報)に基づき、上記特定値を特定する
    ことを特徴とするプログラム最適化方法。
  6. 【請求項6】 請求項5に記載のプログラム最適化方法
    において、上記特定値で上記変数を用いたプログラム部
    分を特殊化して上記プログラムに付加し、上記変数が上
    記特定値を取った場合に該特定値で特殊化したプログラ
    ム部分を呼び出す手続きコード(分岐コード)を上記プ
    ログラムに付加し、上記プログラムの実行時、上記変数
    の値が上記特定値と等しいか否かを判別し、等しい場合
    に上記特殊化したプログラム部分を呼び出すよう上記プ
    ログラムを翻訳することを特徴とするプログラム最適化
    方法。
  7. 【請求項7】 請求項4から請求項6のいずれかに記載
    のプログラム最適化方法の処理プログラムを記録したこ
    とを特徴とする記録媒体。
JP31673897A 1997-11-18 1997-11-18 コンパイラとプログラム最適化方法およびその処理プログラムを記録した記録媒体 Pending JPH11149380A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP31673897A JPH11149380A (ja) 1997-11-18 1997-11-18 コンパイラとプログラム最適化方法およびその処理プログラムを記録した記録媒体

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP31673897A JPH11149380A (ja) 1997-11-18 1997-11-18 コンパイラとプログラム最適化方法およびその処理プログラムを記録した記録媒体

Publications (1)

Publication Number Publication Date
JPH11149380A true JPH11149380A (ja) 1999-06-02

Family

ID=18080364

Family Applications (1)

Application Number Title Priority Date Filing Date
JP31673897A Pending JPH11149380A (ja) 1997-11-18 1997-11-18 コンパイラとプログラム最適化方法およびその処理プログラムを記録した記録媒体

Country Status (1)

Country Link
JP (1) JPH11149380A (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7412696B2 (en) 2003-08-26 2008-08-12 Fujitsu Limited Method, apparatus and computer program for compiling program using statistical information on variables, and recording medium therefor
JP2009110299A (ja) * 2007-10-30 2009-05-21 Internatl Business Mach Corp <Ibm> プログラムを最適化するコンパイラ
JP2011065220A (ja) * 2009-09-15 2011-03-31 Internatl Business Mach Corp <Ibm> コンパイラ・プログラム、コンパイル方法及びコンピュータ・システム
JP2016517109A (ja) * 2013-04-02 2016-06-09 グーグル インコーポレイテッド ユーザに指向されかつプロファイル主導の最適化用のフレームワーク

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7412696B2 (en) 2003-08-26 2008-08-12 Fujitsu Limited Method, apparatus and computer program for compiling program using statistical information on variables, and recording medium therefor
JP2009110299A (ja) * 2007-10-30 2009-05-21 Internatl Business Mach Corp <Ibm> プログラムを最適化するコンパイラ
JP2011065220A (ja) * 2009-09-15 2011-03-31 Internatl Business Mach Corp <Ibm> コンパイラ・プログラム、コンパイル方法及びコンピュータ・システム
JP2016517109A (ja) * 2013-04-02 2016-06-09 グーグル インコーポレイテッド ユーザに指向されかつプロファイル主導の最適化用のフレームワーク
US9760351B2 (en) 2013-04-02 2017-09-12 Google Inc. Framework for user-directed profile-driven optimizations
US10365903B2 (en) 2013-04-02 2019-07-30 Google Llc Framework for user-directed profile-driven optimizations
US11321061B2 (en) 2013-04-02 2022-05-03 Google Llc Framework for user-directed profile-driven optimizations
US11675574B2 (en) 2013-04-02 2023-06-13 Google Llc Framework for user-directed profile-driven optimizations

Similar Documents

Publication Publication Date Title
US6718541B2 (en) Register economy heuristic for a cycle driven multiple issue instruction scheduler
JP3707727B2 (ja) プログラムの最適化方法及びこれを用いたコンパイラ
US5778212A (en) Interprocedural analysis user interface
US20110119660A1 (en) Program conversion apparatus and program conversion method
US6292939B1 (en) Method of reducing unnecessary barrier instructions
US6113650A (en) Compiler for optimization in generating instruction sequence and compiling method
US5842022A (en) Loop optimization compile processing method
JP3311462B2 (ja) コンパイル処理装置
US5812855A (en) System and method for constaint propagation cloning for unknown edges in IPA
JPH0695311B2 (ja) コード最適化方法
JP2000347874A (ja) レジスタ割当器を用いた呼出規則プロローグ・エピローグコード構築方法及び装置
US20040025152A1 (en) Compiling method, apparatus, and program
US20070157178A1 (en) Cross-module program restructuring
JPH1139169A (ja) コンパイル方法,コンパイラ,例外ハンドラ及びプログラム記憶媒体
JPH0738158B2 (ja) コード最適化方法およびコンパイラ・システム
US10013244B2 (en) Apparatus and method to compile a variadic template function
US8458671B1 (en) Method and system for stack back-tracing in computer programs
JP3539613B2 (ja) ループ飛び出し文を含むループに対する配列サマリ解析方法
EP1164477A2 (en) A loop optimization method and a compiler
JPH11149380A (ja) コンパイラとプログラム最適化方法およびその処理プログラムを記録した記録媒体
JPH10320212A (ja) キャッシュ向け最適化方法
WO2023155863A1 (en) Methods and devices for compiler function fusion
JP3405696B2 (ja) コンパイル装置およびその方法
US11734003B2 (en) Non-transitory computer-readable recording medium, compilation method, and compiler device
JP2008071065A (ja) インライン展開を行うコンパイル装置、方法、プログラム、記憶媒体