JP4039633B2 - 最適化コンパイラ、コンパイル方法、コンパイラプログラム、及び記録媒体 - Google Patents

最適化コンパイラ、コンパイル方法、コンパイラプログラム、及び記録媒体 Download PDF

Info

Publication number
JP4039633B2
JP4039633B2 JP2003309675A JP2003309675A JP4039633B2 JP 4039633 B2 JP4039633 B2 JP 4039633B2 JP 2003309675 A JP2003309675 A JP 2003309675A JP 2003309675 A JP2003309675 A JP 2003309675A JP 4039633 B2 JP4039633 B2 JP 4039633B2
Authority
JP
Japan
Prior art keywords
instruction
load instruction
target
register
execution
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.)
Expired - Fee Related
Application number
JP2003309675A
Other languages
English (en)
Other versions
JP2005078474A (ja
Inventor
聰 古関
秀昭 小松
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
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 JP2003309675A priority Critical patent/JP4039633B2/ja
Priority to US10/929,950 priority patent/US20050050533A1/en
Publication of JP2005078474A publication Critical patent/JP2005078474A/ja
Application granted granted Critical
Publication of JP4039633B2 publication Critical patent/JP4039633B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/441Register allocation; Assignment of physical memory space to logical memory space

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Description

本発明は、最適化コンパイラ、コンパイル方法、コンパイラプログラム、及び記録媒体
に関する。特に、本発明は、冗長な命令を削除する最適化コンパイラ、コンパイル方法、コンパイラプログラム、及び記録媒体に関する。
近年、技術革新により、コンピュータの中央処理装置の動作速度が高速になっている。このため、メモリアクセスに要する時間に対する、中央処理装置のレジスタに対する読み出し処理に要する時間が、相対的に大きくなってきている。従って、プログラム全体の処理速度を向上するには、プログラムで使用される変数の値をできるだけレジスタに保持してメモリアクセス量を減らすことがますます重要となってきている。
従来、最適化コンパイラは、メモリに対するアクセス量を減らして処理全体を効率化するべく、最適化対象の対象プログラムにおける変数を、中央処理装置におけるレジスタに有効に割り当てるレジスタ割当機能を有している(非特許文献1から5参照。)。そして、最適化コンパイラは、レジスタに割り当てられた変数の値を当該レジスタに保持させる一方、レジスタ割当機能によりレジスタに割当不能と判断された変数の値を、メモリに格納させ、参照される毎にメモリから読み出させる命令を生成する。
また、従来、最適化コンパイラにおいて、複数の命令が互いに同一の処理を行い冗長である場合に、当該複数の命令の少なくとも一部を削除して処理全体を効率化する冗長性除去技術が用いられている(非特許文献7参照。)。更に、冗長性除去技術を適用する過程で、変数をできるだけレジスタに割り当てるように制御する技術が提案されている(非特許文献6参照。)。
D. Bernstein, D.Q. Goldin, M.C. Golumbic, H. Krawczyk, Y. Mansour, I. Nahshon, and R.Y. Pinter. Spill code minimization techniques for optimizing compilers. In Proceedings of the ACM SIGPLAN 1989 Conference on Programming Language Design and Implementation, pages 258-263, 1989. P. Briggs, K.D. Cooper, and L. Torczon. Rematerialization. In Proceedings of the ACM SIGPLAN 1992 Conference on Programming Language Design and Implementation, pages 311-321, 1992. S. Kurlander and C. Fisher. Zero-cost range splitting. In Proceedings of the ACM SIGPLAN 1994 Conference on Programming Language Design and Implementation, pages 257-265, 1994. P. Kolte and M.J. Harrold. Load/store range analysis for global register allocation. In Proceedings of the ACM SIGPLAN 1993 Conference on Programming Language Design and Implementation, pages 268-277, 1993. P. Bergner, P. Dahl, D. Engebretsen, and M. O'Keefe. Spill code minimization via interference region spilling. In Proceedings of the ACM SIGPLAN 1997 Conference on Programming Language Design and Implementation, pages 287-295, 1997. R. Gupta and R. Bodik. Register pressure sensitive redundancy elimination. In Proceedings of the 8th International Conference on Compiler Construction, LNCS 1575, pages 107-121, 1999. J. Knoop, O. Ruthing, and B. Steffen. Optimal code motion: theory & practice. ACM TOPLAS, 18(3): 300-324, 1996.
しかしながら、レジスタ割当機能を用いた場合であってもなお部分的に使用可能なレジスタが存在する場合がある。このような場合であっても、レジスタに割当不能と一旦判断された変数の値を常にメモリから読み出すのは効率的でない。また、非特許文献6の技術によっても、レジスタに割り当てられない変数が存在する場合がある。
上記課題を解決するために、本発明の第1の形態においては、 最適化対象の対象プログラムにおいて、メモリからレジスタにデータを読み出すロード命令を最適化するコンピュータであるコンパイラ装置であって、前記対象プログラムを記憶する記憶装置と、前記対象プログラム中の最適化対象の対象ロード命令から実行順序を遡ることにより到達する全ての実行経路のそれぞれについて、読み出したデータをレジスタに保持して当該実行経路における前記対象ロード命令が実行される位置に伝達するための他のロード命令の、当該実行経路における実行可能範囲を、前記コンピュータのCPUの制御により前記記憶装置にアクセスして検出する実行可能範囲検出手段と、前記実行経路のそれぞれについて、前記実行可能範囲において、前記対象ロード命令に先立って実行される、前記対象ロード命令と同一のアドレスから同一のデータを読み出す先行ロード命令が存在しない場合に、前記実行可能範囲内に前記先行ロード命令を、前記CPUの制御により前記記憶装置にアクセスして生成する命令生成手段と、前記対象ロード命令を削除すると共に、前記対象ロード命令により読み出されたデータを使用する命令を、前記先行ロード命令により読み出されレジスタに保持されて伝播されるデータを使用する命令に、前記CPUの制御により前記記憶装置にアクセスして置換する命令置換手段とを備えるコンパイラ装置、当該コンパイラ装置を用いたコンパイル方法、当該コンパイラ装置としてコンピュータを機能させるコンパイラプログラム、及び当該コンパイラプログラムを記録した記録媒体を提供する。
なお、上記の発明の概要は、本発明の必要な特徴の全てを列挙したものではなく、これらの特徴群のサブコンビネーションもまた、発明となりうる。
本発明によれば、変数の値を効率的に参照させることができる。
以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではなく、また実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
図1は、最適化コンパイラ10の機能ブロック図である。最適化コンパイラ10は、最適化対象の対象プログラムにおいて、メモリからデータを読み出すロード命令を最適化することを目的とする。最適化コンパイラ10は、レジスタ割当手段100と、スピルイン命令生成手段110と、実行可能範囲生成手段120と、他命令処理時間解析手段125と、同一性判断手段130と、コピー処理時間算出手段140と、命令生成手段150と、命令置換手段160と、ストア命令削除手段の一例であるスピルアウト命令削除手段170とを備える。
レジスタ割当手段100は、対象プログラムを受け取ると、変数をレジスタに割り当てるレジスタ割当処理を行い、当該処理結果の対象プログラムをスピルイン命令生成手段110に送る。これを受けて、スピルイン命令生成手段110は、レジスタ割当手段100によりレジスタに割当不能と判断された各変数について、当該変数の値を使用する各命令に先立って当該変数の値をメモリからロードするスピルイン命令を生成し、当該生成処理を行った結果の対象プログラムを実行可能範囲生成手段120に送る。
ここで、対象プログラムとは、例えば、最適化コンパイラ内で最適化対象のプログラムを表す中間表現であり、一例としては、Java(登録商標)言語におけるバイトコード、RTL(Register Transfer Language)、又は4つ組表現である。これに代えて、対象プログラムとは、プログラムのソースコードであってもよい。また、変数とは、ソースコードにおける変数そのものに限定されず、例えば、対象プログラムにおける値の生存区間であってもよい。
また、レジスタとは、対象プログラムを実行する中央処理装置において使用可能な全てのレジスタとは限らず、情報処理装置のオペレーティングシステム又はプログラミング言語等の仕様により予め定められ、対象プログラムにおける使用が許可されているレジスタ群であればよい。例えば、対象プログラムから呼び出されるライブラリプログラム等により使用され内容が変更され得るレジスタを含まなくてもよい。
実行可能範囲生成手段120は、受け取った対象プログラムにおいて、レジスタに割当不能である何れかの変数について、当該変数の値をメモリから読み出す複数のスピルイン命令のそれぞれを最適化対象の対象スピルイン命令として、以下の処理を行う。
まず、実行可能範囲生成手段120は、当該対象スピルイン命令から実行順序を遡ることにより到達する全ての実行経路のそれぞれについて、ロード命令が実行された場合に当該ロード命令により読み出されたデータをレジスタに保持して当該対象スピルイン命令の実行位置に伝達可能である、当該ロード命令の実行可能範囲を検出する。
次に、実行可能範囲生成手段120は、実行可能範囲の何れかが互いに重複する複数の対象スピルイン命令について、当該複数の対象スピルイン命令に代えて当該複数の対象スピルイン命令と同一のアドレスから同一のデータを読み出す先行ロード命令を生成すべき実行位置の範囲であって、当該複数の対象スピルイン命令についての計算的最適性(computational optimality)を満たす範囲を検出する。更に、実行可能範囲生成手段120は、計算的最適性を満たす範囲のうち、当該先行ロード命令により読み出される値の生存区間が最小となる生存区間的最適性(lifetime optimality)を満たす位置を検出する。そして、実行可能範囲生成手段120は、対象プログラムを検出結果と共に他命令処理時間解析手段125及び同一性判断手段130に送る。
ロード遅延解析手段125は、検出結果を実行可能範囲生成手段120から受け取ると、生存区間的最適性を満たす位置から先行ロード命令により読み出されるデータを使用する命令の実行位置までに他の命令が実行されるのに要する処理時間である必要処理時間を解析する。次に、ロード遅延解析手段125は、先行ロード命令の実行を開始してからデータの読み出しが完了するまでに要するロード処理時間を解析する。そして、ロード遅延解析手段125は、必要処理時間がロード処理時間より小さい場合に、生存区間的最適性を満たす位置から、ロード処理時間から必要処理時間を減じた時間先立って実行される実行位置を、先行ロード命令を生成するべき生成位置として検出し、検出結果を命令生成手段150に送る。
同一性判断手段130は、計算的最適性を満たす場合において、各対象スピルイン命令について、当該対象スピルイン命令における当該実行可能範囲において当該対象スピルイン命令に先立って実行される全ての先行ロード命令のそれぞれにおける読み出し先のレジスタを同一に設定できるか否かを判断する。そして、同一性判断手段130は、判断結果をコピー処理時間算出手段140及び命令生成手段150に通知する。
コピー処理時間算出手段140は、同一性判断手段130からの通知を受けて、同一性判断手段130によりレジスタを同一に設定できないと判断された場合に、レジスタを同一に設定しない場合にレジスタ間においてデータをコピーする処理に要するコピー処理時間と、レジスタを同一に設定した場合に計算的最適性を満たす場合と比較して追加されるロード命令の処理時間である追加命令処理時間とを算出し、算出結果を命令生成手段150に送る。
命令生成手段150は、実行経路のそれぞれについて実行可能範囲に当該対象スピルイン命令の先行ロード命令が存在しない場合に、以下に示す処理により実行可能範囲内に先行ロード命令を生成する。
まず、命令生成手段150は、同一性判断手段130によりレジスタを同一に設定できると判断された場合、又はコピー処理時間算出手段140により算出された追加命令処理時間がコピー処理時間より小さい場合に、計算的最適性かつ生存区間的最適性を満たす実行位置に先行ロード命令を生成する。
一方、命令生成手段150は、同一性判断手段130によりレジスタを同一に設定できないと判断され、かつコピー処理時間算出手段140により算出された追加命令処理時間がコピー処理時間より大きい場合に、実行可能範囲のうち、当該計算的最適性が満たされず、かつ先行ロード命令のそれぞれによる読み出し先のレジスタを同一に設定可能となる位置に、先行ロード命令を生成する。そして、命令生成手段150は、当該生成処理を行った結果の対象プログラムを命令置換手段160に送る。
ここで、計算的最適性を満たす範囲とは、例えば、ロード命令を生成することにより対象プログラム全体におけるスピルイン命令の実行回数が最適化される範囲をいう。例えば、計算的最適性を満たす範囲は、第1の対象スピルイン命令における実行経路のそれぞれについて、当該実行経路の実行可能範囲及び第2の対象スピルイン命令における実行可能範囲の少なくとも一部が重複する場合の、当該重複する範囲である。即ち、命令生成手段150は、当該重複する範囲に先行ロード命令が存在しない場合に、当該重複する範囲に先行ロード命令を生成することにより、第1のスピルイン命令のみならず第2のスピルイン命令をも削除させることができる。
命令置換手段160は、先行ロード命令より後に実行されることが定まっている対象スピルイン命令のそれぞれを削除すると共に、当該対象スピルイン命令により読み出されたデータを使用する命令を、先行ロード命令により読み出されレジスタに保持されて伝播されるデータを使用する命令に置換する。そして、レジスタ割当手段100により割当不能と判断された全ての変数について処理を終えた場合に、命令置換手段160は、対象プログラムをスピルアウト命令削除手段170に送る。レジスタ割当手段100により割当不能と判断された全ての変数について処理を終えていない場合に、命令置換手段160は、対象プログラムを実行可能範囲生成手段120に送る。
スピルアウト命令削除手段170は、命令置換手段160により対象スピルイン命令が削除された場合に、当該対象スピルイン命令によってのみ読み出されており、かつ生成された先行ロード命令により読み出されないデータを書き込むストア命令を削除し、当該削除処理を行った結果の対象プログラムを、コンパイル結果の結果プログラムとして出力する。
図2は、最適化コンパイラ10の動作フローを示す図である。まず、レジスタ割当手段100は、対象プログラムに対して、変数をレジスタに割り当てるレジスタ割当処理を行う(S200)。例えば、レジスタ割当手段100は、非特許文献2に記載の技術によりレジスタ割当処理を行ってもよい。そして、スピルイン命令生成手段110は、レジスタ割当手段100によりレジスタに割当不能と判断された各変数について、当該変数の値を使用する各命令に先立って当該変数の値をメモリからレジスタに読み出すスピルイン命令を生成する(S210)。
実行可能範囲生成手段120は、レジスタ割当手段100によりレジスタに割当不能と判断された複数の変数について、最適化する順序を決定する(S220)。例えば、実行可能範囲生成手段120は、参照される回数がより多い変数から順に最適化されるように順序を決定してもよい。そして、この順序に基づいて、実行可能範囲生成手段120は、レジスタに割当不能と判断された各変数について、以下の処理を繰り返す(S230)。
実行可能範囲生成手段120は、当該変数の値をメモリから読み出す複数の対象スピルイン命令のそれぞれについて、当該対象スピルイン命令から実行順序を遡ることにより到達する全ての実行経路のそれぞれについて、ロード命令が実行された場合に当該ロード命令により読み出されたデータをレジスタに保持して当該対象スピルイン命令の実行位置に伝達可能である、当該ロード命令の実行可能範囲を検出する(S240)。
そして、命令生成手段150は、実行経路のそれぞれについて、実行可能範囲に先行ロード命令が存在しない場合に、実行可能範囲内に先行ロード命令を生成する(S250)。続いて、命令置換手段160は、対象スピルイン命令を削除すると共に、当該対象スピルイン命令により読み出されたデータを使用する命令を、先行ロード命令により読み出されレジスタに保持されて伝播されるデータを使用する命令に置換する(S260)。例えば、複数の実行経路における複数の先行ロード命令が、互いに共通である共通レジスタにデータを読み出す場合、命令置換手段160は、対象スピルイン命令により読み出されたデータを使用する命令を、共通レジスタに保持されたデータを使用する命令に置換する。また、命令置換手段160は、複数の実行経路における複数の先行ロード命令について、読み出し先のレジスタが同一でない場合には、レジスタ間でデータをコピーする命令を更に生成する。
続いて、先行ロード命令の生成及び対象スピルイン命令の削除の結果を受けて、命令置換手段160は、レジスタの使用状態に関する情報を更新する(S270)。最適化コンパイラ10は、以上の処理を、レジスタ割当手段100によりレジスタに割当不能と判断された全ての変数について繰り返す(S280)。
スピルアウト命令削除手段170は、命令置換手段160により対象スピルイン命令が削除された場合に、当該対象スピルイン命令によってのみ読み出されており、かつ生成された先行ロード命令により読み出されないデータを書き込むストア命令を削除し、当該削除処理を行った結果の対象プログラムを、コンパイル結果の結果プログラムとして出力する(S290)。
図3は、図2におけるS240の詳細を示す動作フローである。図4は、図3におけるS310の処理を説明する図である。実行可能範囲生成手段120は、対象プログラムの各基本ブロックにおいて、スピルイン命令生成手段110により生成されたスピルイン命令を検出する(S300)。そして、実行可能範囲生成手段120は、対象プログラム中のスピルイン命令について、以下の3つの集合を基本ブロック毎に生成する。
(1)GEN集合
実行可能範囲生成手段120は、当該基本ブロック中のスピルイン命令のそれぞれについて、当該基本ブロックの実行開始位置から当該スピルイン命令の実行位置までの範囲で、レジスタ割当手段100により変数に割り当てられていないレジスタの集合を求める。但し、スピルイン命令自体によるレジスタの使用は含めない。そして、実行可能範囲生成手段120は、基本ブロックにおける複数のスピルイン命令のそれぞれにおける当該集合の積集合を、GEN集合として生成する。なお、実行可能範囲生成手段120は、対象スピルイン命令がデータを読み出すアドレスと同一のアドレスに書き込みを行うスピルアウト命令が存在する場合は、当該基本ブロックのうち当該スピルアウト命令に先立って実行される範囲についてGEN集合を生成する。
例えば、図4の例において、実行可能範囲生成手段120は、1つ目のスピルイン命令の実行位置までの範囲で変数に割り当てられていないレジスタの集合を、{レジスタ1、レジスタ2、レジスタ3、レジスタ4、レジスタ5、レジスタ7}として生成する。そして、実行可能範囲生成手段120は、2つ目のスピルイン命令の実行位置までの範囲で変数に割り当てられていないレジスタの集合を、{レジスタ3、レジスタ4、レジスタ5}として生成する。従って、実行可能範囲生成手段120は、{レジスタ1、レジスタ2、レジスタ3、レジスタ4、レジスタ5、レジスタ7}∩{レジスタ3、レジスタ4、レジスタ5}である{レジスタ3、レジスタ4、レジスタ5}を、GEN集合として生成する。
(2)GEN’集合
実行可能範囲生成手段120は、当該基本ブロック中のスピルイン命令のそれぞれについて、当該スピルイン命令の実行位置から当該基本ブロックの実行終了位置までの範囲で、レジスタ割当手段100により変数に割り当てられていないレジスタの集合を求める。そして、実行可能範囲生成手段120は、基本ブロックにおける複数のスピルイン命令のそれぞれにおける当該集合の積集合を、GEN’集合として生成する。なお、実行可能範囲生成手段120は、対象スピルイン命令がデータを読み出すアドレスと同一のアドレスに書き込みを行うスピルアウト命令が存在する場合は、当該基本ブロックのうち当該スピルアウト命令より後に実行される範囲についてGEN’集合を生成する。
(3)KILL集合
実行可能範囲生成手段120は、当該基本ブロック中で一貫してレジスタ割当手段100により変数に割り当てられていないレジスタの集合を生成する。但し、スピルイン命令自体によるレジスタの使用は含まれない。そして、実行可能範囲生成手段120は、生成した当該集合の補集合を、KILL集合として生成する。また、実行可能範囲生成手段120は、対象スピルイン命令がデータを読み出すアドレスと同一のアドレスに書き込みを行うスピルアウト命令が存在する場合は、全てのレジスタの集合をKILL集合として生成する。
例えば、図4において、レジスタ1から7のそれぞれにおける、レジスタ割当手段100により既に変数に割り当てられている範囲を、斜線で示す。この例において、実行可能範囲生成手段120は、基本ブロック中で一貫して変数に割り当てられていないレジスタの集合として、{レジスタ3、レジスタ4}を生成する。従って、実行可能範囲生成手段120は、{レジスタ0、レジスタ1、レジスタ2、レジスタ5、レジスタ6、レジスタ7}をKILL集合として生成する。
以降の説明において、第n基本ブロックにおけるGEN集合、GEN’集合、及びKILL集合を、それぞれGEN(n)、GEN’(n)、及びKILL(n)と表記する。
続いて、実行可能範囲生成手段120は、対象プログラムの各実行位置x(例えば、ある基本ブロックの実行開始位置又は実行終了位置)について、当該実行位置xから対象プログラムの終了位置までの全ての実行経路に計算e(例えば、スピルイン命令)が存在するか否かを示す、計算eについての完全上方安全配置性(totally-anticipatability)を算出する(S320)。
具体的には、実行可能範囲生成手段120は、以下のデータフロー方程式(1)を解くことにより、完全上方安全配置性を算出する。本数式において、第n基本ブロックの実行開始位置において、スピルイン命令が読み出し先として選択した場合に完全上方安全配置性を満たすレジスタの集合を、ANTin(n)と表記し、第n基本ブロックの実行終了位置において、スピルイン命令が読み出し先として選択した場合に完全上方安全配置性を満たすレジスタの集合を、ANTout(n)と表記する。
Figure 0004039633
但し、第n基本ブロックの次に実行され得る基本ブロックの集合を、succ(n)と表記する。
続いて、実行可能範囲生成手段120は、対象プログラムの各実行位置xについて、対象プログラムの実行開始位置から当該実行位置xまでの全ての実行経路に計算eが存在するか否かを示す、計算eについての完全下方安全配置性(totally-availability)を算出する(S330)。
具体的には、実行可能範囲生成手段120は、以下のデータフロー方程式(2)を解くことにより、完全下方安全配置性を算出する。本数式において、第n基本ブロックの実行開始位置において、スピルイン命令が読み出し先として選択した場合に完全下方安全配置性を満たすレジスタの集合を、AVLin(n)と表記し、第n基本ブロックの実行終了位置において、スピルイン命令が読み出し先として選択した場合に完全下方安全配置性を満たすレジスタの集合を、AVLout(n)と表記する。
Figure 0004039633
但し、第n基本ブロックに先立って実行され得る基本ブロックの集合を、pred(n)と表記する。
そして、実行可能範囲生成手段120は、計算eについて完全上方安全配置性がありかつ完全下方安全配置性のない実行位置を、最先上方安全配置性(Earliest-Anticipatable)を満たす位置として算出する。具体的には、実行可能範囲生成手段120は、以下の式(3)により、最先安全配置性を満たす位置を算出する(S340)。
Figure 0004039633
続いて、ロード遅延解析手段125は、完全上方安全配置性を満たす各基本ブロックの開始位置から、スピルイン命令により読み出されるデータを使用する命令の実行位置までに要する処理時間である必要処理時間を解析する(S350)。そして、ロード遅延解析手段125は、スピルイン命令の実行を開始してからデータの読み出しが完了するまでに要するロード処理時間から、解析した当該必要処理時間を減じた時間であるLAT−LOC(n)を算出する。
ここで、ロード遅延解析手段125が解析する処理時間とは、例えば、実行サイクル数であってもよい。即ち、ロード遅延解析手段125は、完全上方安全配置性を満たす各基本ブロックの開始位置から、スピルイン命令により読み出されるデータを使用する命令の実行位置までに要する実行サイクル数を、必要処理時間として解析してもよい。同様に、ロード遅延解析手段125は、スピルイン命令の実行を開始してからデータの読み出しが完了するまでに要する実行サイクル数を、ロード処理時間として解析してもよい。
そして、ロード遅延解析手段125は、完全上方安全配置性を満たす各基本ブロックについて、当該基本ブロックの実行開始位置においてスピルイン命令を実行した場合に読み出し処理により実行が停止する時間の見積である、LATin(n)と、当該基本ブロックの実行終了位置においてスピルイン命令を実行した場合に読み出し処理により実行が遅延する時間の見積である、LATout(n)とを生成する。
具体的には、ロード遅延解析手段125は、以下の式(4)によりLATin(n)及びLATout(n)を算出する。但し、SEC(n)は、第n基本ブロック全体の処理時間の見積を示す。
Figure 0004039633
また、LATout(n)を算出する他の例として、ロード遅延解析手段125は、第n基本ブロックの次に実行され得る第m基本ブロックについての、LATin(m)の最大値を、LATout(n)として算出してもよい。更に他の例として、ロード遅延解析手段125は、第n基本ブロックの次に実行され得る基本ブロックのうち、最も高い頻度で実行されると判断された第m基本ブロックについてのLATin(m)を、LATout(n)として算出してもよい。
続いて、実行可能範囲生成手段120は、各基本ブロックについて、当該基本ブロックの実行開始位置においてスピルイン命令を実行した場合において計算eについての計算的最適性を満たすか否かを示すDELAYEDin(n)と、当該基本ブロックの実行終了位置においてスピルイン命令を実行した場合において計算eについての計算的最適性を満たすか否かを示すDELAYEDout(n)とを生成する。
具体的には、実行可能範囲生成手段120は、以下の式(5)によりDELAYEDin(n)及びDELAYEDout(n)を生成する。
Figure 0004039633
そして、実行可能範囲生成手段120は、スピルイン命令を生成するべき生成位置として、計算的最適性を満たす範囲内であって、生存区間的最適性を満たす実行位置から、読み出し処理により実行が遅延する時間先立って実行される位置を算出する。具体的には、実行可能範囲生成手段120は、第n基本ブロックの実行開始位置にスピルイン命令を生成するべきか否かを示すLATESTin(n)と、第n基本ブロックの実行終了位置にスピルイン命令を生成するべきか否かを示すLATESTout(n)とを、以下の式(6)により生成する。
Figure 0004039633
これにより、命令生成手段150は、LATESTin(n)又はLATESTout(n)がtrueである実行位置に、即ち、生存区間的最適性を満たす位置から、ロード処理時間から必要処理時間を減じた時間先立って実行される実行位置に、先行ロード命令を生成することができる。
また、ステップS320からステップS370における処理に代えて、最適化コンパイラ10は、スピルイン命令が例外(Exception)を発生させない場合において、以下の方程式(7)を解くことにより、LATESTin(n)及びLATESTout(n)を生成してもよい。
Figure 0004039633
この方法によると、更に多くのスピルイン命令を削除することができると共に、下方安全配置性(availability)を算出する処理を省くことによりコンパイル処理に要する時間を短縮することができる。
図5は、図2におけるS250の詳細を示す動作フローである。命令生成手段150は、実行経路のそれぞれについて実行可能範囲に当該対象スピルイン命令の先行ロード命令が存在するか否かを、例えば、LATESTin(n)又はLATESTout(n)がtrueである基本ブロックにスピルイン命令があるか否かを検出することにより判断する(S500)。先行ロード命令が存在する場合には(S500:YES)、最適化コンパイラ10は、当該実行経路について、本図の処理を終了する。
同一性判断手段130は、計算的最適性を満たす場合において、命令生成手段150により生成される先行ロード命令及び他の全ての先行ロード命令の読み出し先のレジスタを同一に設定できるか否かを判断する(S510)。
例えば、先行ロード命令の実行位置がLATESTin(n)により表される場合には、同一性判断手段130は、当該先行ロード命令の読み出し先のレジスタとしてANTin(n)におけるレジスタの何れかを設定可能と判断する。また、先行ロード命令の実行位置がLATESTout(n)により表される場合には、同一性判断手段130は、当該先行ロード命令の読み出し先のレジスタとしてANTout(n)におけるレジスタの何れかを設定可能と判断する。従って、同一性判断手段130は、複数の先行ロード命令において、設定可能な読み出し先のレジスタの集合が重複するか否かを判断することにより、読み出し先のレジスタを同一に設定できるか否かを判断することができる。
同一性判断手段130がレジスタを同一に設定できると判断した場合に(S510:YES)、命令生成手段150は、他の先行ロード命令と同一である共通レジスタにデータを読み出す先行ロード命令を、計算的最適性及び生存区間的最適性を満たす位置、例えば、LATESTin(n)又はLATESTout(n)がtrueである位置に生成する(S520)。
一方、同一性判断手段130がレジスタを同一に設定できないと判断した場合に(S510:NO)、コピー処理時間算出手段140は、レジスタを同一に設定しない場合にレジスタ間においてデータをコピーする処理に要するコピー処理時間と、レジスタを同一に設定した場合に計算的最適性を満たす場合と比較して追加されるロード命令の処理時間である追加命令処理時間とを算出する(S530)。
命令生成手段150は、コピー処理時間算出手段140により算出された追加命令処理時間がコピー処理時間より大きい場合に(S540:YES)、実行可能範囲のうち、当該計算的最適性が満たされず、かつ先行ロード命令のそれぞれによる読み出し先のレジスタを同一に設定可能となる位置に、例えば、複数の先行ロード命令より後に実行され制御フローが合流する実行位置である下方合流点に、先行ロード命令を生成する(S550)。
コピー処理時間算出手段140により算出された追加命令処理時間がコピー処理時間より小さい場合に(S540:NO)、命令生成手段150は、計算的最適性が満たされる位置、例えば、LATESTin(n)又はLATESTout(n)がtrueである位置に先行ロード命令を生成する(S560)。
なお、最適化コンパイラ10は、複数の実行経路について実行可能範囲に先行ロード命令を生成するべく、本図の処理を繰り返してもよい。
図6は、本実施例の第1の適用例を示す。本図は、変数A、変数B、及び変数Cを、レジスタr1及びレジスタr2に割り当てる例を示している。本図において、対象プログラムの実行方向は下方向である。また、黒点は変数の値を定義する命令を示し、白抜点は変数の値を使用する命令を示している。また、各点を結ぶ実線は、レジスタに変数の値が有効に保持されている範囲を示している。
(a)は、レジスタ割当手段100により変数がレジスタに割り当てられた対象プログラムの例を示す。変数Bの生存区間は、変数Cの生存区間と、図示した干渉領域において重複している。例えば、レジスタ割当手段100は、非特許文献5に記載の方法によりレジスタ割当処理を行った場合に、変数A及び変数Bのそれぞれをレジスタr1及びレジスタr2のそれぞれに割り当てると共に、変数Cをレジスタに割当不能と判断する。
(b)は、スピルイン命令生成手段110によりスピルイン命令が生成された対象プログラムの例を示す。スピルイン命令生成手段110は、変数Cの値が定義された場合に当該値を示すデータをメモリに格納させるスピルアウト命令を生成し、変数Cを使用する毎にメモリからレジスタr1又はレジスタr2にデータを読み出すスピルイン命令を生成する。
(c)は、本実施例に係る最適化コンパイラ10による最適化結果である結果プログラムを示す。本図のように、最適化コンパイラ10は、レジスタ割当手段100により変数がレジスタに割り当てられた場合であってもなお使用可能なレジスタに、変数Cの値を保持させることができる。これにより、スピルイン命令の実行回数を減らし、処理全体を高速化することができる。
図7は、本実施例の第2の適用例を示す。(a)は、レジスタ割当手段100により変数がレジスタに割り当てられた対象プログラムの例を示す。変数Bの生存区間は、変数Cの生存区間と、図示した干渉領域において重複している。そして、レジスタ割当手段100は、変数Aをレジスタr1に割り当てると共に、変数B及び変数Cをレジスタに割当不能と判断する。
(b)は、スピルイン命令生成手段110によりスピルイン命令が生成された対象プログラムの例を示す。スピルイン命令生成手段110は、変数Bの値が定義された場合に当該値を示すデータをメモリに格納させるスピルアウト命令を生成し、変数Bを使用する毎にメモリからレジスタr2にデータを読み出すスピルイン命令を生成する。また、スピルイン命令生成手段110は、変数Cの値が定義された場合に当該値を示すデータをメモリに格納させるスピルアウト命令を生成し、変数Cを使用する毎にメモリからレジスタr2にデータを読み出すスピルイン命令を生成する。
(c)は、本実施例に係る最適化コンパイラ10による最適化結果である結果プログラムを示す。本図で示すように、最適化コンパイラ10は、レジスタ割当手段100により変数がレジスタに割り当てられた場合であってもなお使用可能なレジスタr2に、変数B又は変数Cの値を保持させることができる。これにより、スピルイン命令の実行回数を減らし、処理全体を高速化することができる。
図8は、本実施例の第3の適用例を示す。(a)は、最適化前の対象プログラムの一例を示す。本図において、レジスタ割当手段100によりレジスタに割当不能と判断された変数についての値の定義を黒点で表し、当該変数についての値の使用を白抜点で表す。また、当該変数の値の生存区間を太実線で表す。
(b)は、スピルイン命令生成手段110によりスピルイン命令が生成された対象プログラムの例を示す。スピルイン命令生成手段110は、レジスタ割当手段100によりレジスタに割当不能と判断された変数について、当該変数の値が定義される毎に当該値をメモリに格納するスピルアウト命令を生成し、当該変数の値が使用される毎に当該値を使用する各命令に先立って当該変数の値をメモリからロードするスピルイン命令を生成する。
(c)は、本実施例に係る最適化コンパイラ10による最適化結果である結果プログラムを示す。本図は、レジスタ割当手段100が変数を4つのレジスタに割り当てる場合を示しており、図の斜線部分は、レジスタ割当手段100により既にレジスタが変数に割り当てられている範囲を示している。
例えば、最適化コンパイラ10は、基本ブロック820中のスピルイン命令から実行順序を遡ることにより到達可能な基本ブロック800及び基本ブロック810について、実行可能範囲に先行ロード命令があるか否かを判断する。そして、最適化コンパイラ10は、基本ブロック800に先行ロード命令が存在しないので、基本ブロック800に先行ロード命令であるスピルイン命令を生成する。これにより、最適化コンパイラ10は、基本ブロック820におけるスピルイン命令を削除することができる。
このように、最適化コンパイラ10は、レジスタ割当手段100により変数がレジスタに割り当てられた場合であってもなお使用可能なレジスタに、変数の値を保持させることができる。これにより、スピルイン命令の実行回数を減らし、処理全体を高速化することができる。
図9は、最適化コンパイラ10として機能するコンピュータのハードウェア構成の一例を示す。最適化コンパイラ10は、ホストコントローラ1082により相互に接続されるCPU1000、RAM1020、グラフィックコントローラ1075、及び表示装置1080を有するCPU周辺部と、入出力コントローラ1084によりホストコントローラ1082に接続される通信インターフェイス1030、ハードディスクドライブ1040、及びCD−ROMドライブ1060を有する入出力部と、入出力コントローラ1084に接続されるROM1010、フレキシブルディスクドライブ1050、及び入出力チップ1070を有するレガシー入出力部とを備える。
ホストコントローラ1082は、RAM1020と、高い転送レートでRAM1020をアクセスするCPU1000及びグラフィックコントローラ1075とを接続する。CPU1000は、ROM1010及びRAM1020に格納されたプログラムに基づいて動作し、各部の制御を行う。グラフィックコントローラ1075は、CPU1000等がRAM1020内に設けたフレームバッファ上に生成する画像データを取得し、表示装置1080上に表示させる。これに代えて、グラフィックコントローラ1075は、CPU1000等が生成する画像データを格納するフレームバッファを、内部に含んでもよい。
入出力コントローラ1084は、ホストコントローラ1082と、比較的高速な入出力装置である通信インターフェイス1030、ハードディスクドライブ1040、及びCD−ROMドライブ1060を接続する。通信インターフェイス1030は、ファイバチャネル等のネットワークを介して外部の装置と通信する。ハードディスクドライブ1040は、最適化コンパイラ10が使用するコンパイラプログラム及びデータを格納する。CD−ROMドライブ1060は、CD−ROM1095からコンパイラプログラム又はデータを読み取り、RAM1020を介して入出力チップ1070に提供する。
また、入出力コントローラ1084には、ROM1010と、フレキシブルディスクドライブ1050や入出力チップ1070等の比較的低速な入出力装置とが接続される。ROM1010は、最適化コンパイラ10の起動時にCPU1000が実行するブートプログラムや、最適化コンパイラ10のハードウェアに依存するプログラム等を格納する。フレキシブルディスクドライブ1050は、フレキシブルディスク1090からコンパイラプログラム又はデータを読み取り、RAM1020を介して入出力チップ1070に提供する。入出力チップ1070は、フレキシブルディスク1090や、例えばパラレルポート、シリアルポート、キーボードポート、マウスポート等を介して各種の入出力装置を接続する。
最適化コンパイラ10に提供されるコンパイラプログラムは、フレキシブルディスク1090、CD−ROM1095、又はICカード等の記録媒体に格納されて利用者によって提供される。コンパイラプログラムは、入出力チップ1070及び/又は入出力コントローラ1084を介して、記録媒体から読み出され最適化コンパイラ10にインストールされて実行される。
最適化コンパイラ10にインストールされて実行されるコンパイラプログラムは、レジスタ割当モジュールと、スピルイン命令生成モジュールと、実行可能範囲検出モジュールと、同一性判断モジュールと、コピー処理時間算出モジュールと、他命令処理時間解析モジュールと、命令生成モジュールと、命令置換モジュールと、ストア命令削除モジュールとを含む。各モジュールが最適化コンパイラ10に働きかけて行わせる動作は、図1から図8において説明した最適化コンパイラ10における、対応する部材の動作と同一であるから、説明を省略する。
以上に示したコンパイラプログラム又はモジュールは、外部の記憶媒体に格納されてもよい。記憶媒体としては、フレキシブルディスク1090、CD−ROM1095の他に、DVDやPD等の光学記録媒体、MD等の光磁気記録媒体、テープ媒体、ICカード等の半導体メモリ等を用いることができる。また、専用通信ネットワークやインターネットに接続されたサーバシステムに設けたハードディスク又はRAM等の記憶装置を記録媒体として使用し、ネットワークを介してコンパイラプログラムを最適化コンパイラ10に提供してもよい。
以上の説明から明らかなように、最適化コンパイラ10は、レジスタ割当手段100により変数がレジスタに割り当てられた場合であってもなお使用可能なレジスタに、変数の値を保持させることができる。これにより、スピルイン命令の実行回数を減らし、処理全体を高速化することができる。
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更または改良を加えることが可能であることが当業者に明らかである。その様な変更または改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
以上の説明から明らかなように、本実施例によれば、以下の各項目に示す最適化コンパイラ、コンパイル方法、コンパイラプログラム、及び記録媒体が実現される。
(項目1) 最適化対象の対象プログラムにおいて、メモリからレジスタにデータを読み出すロード命令を最適化する最適化コンパイラであって、前記対象プログラム中の最適化対象の対象ロード命令から実行順序を遡ることにより到達する全ての実行経路のそれぞれについて、ロード命令が実行された場合に当該ロード命令により読み出されたデータをレジスタに保持して前記対象ロード命令の実行位置に伝達可能である、当該ロード命令の実行可能範囲を検出する実行可能範囲検出手段と、前記実行経路のそれぞれについて、前記実行可能範囲において前記対象ロード命令に先立って実行される、前記対象ロード命令と同一のアドレスから同一のデータを読み出す先行ロード命令が存在しない場合に、前記実行可能範囲内に前記先行ロード命令を生成する命令生成手段と、前記対象ロード命令を削除すると共に、前記対象ロード命令により読み出されたデータを使用する命令を、前記先行ロード命令により読み出されレジスタに保持されて伝播されるデータを使用する命令に置換する命令置換手段とを備える最適化コンパイラ。
(項目2) 変数をレジスタに割り当てるレジスタ割当手段と、前記レジスタ割当手段によりレジスタに割当不能と判断された各変数について、当該変数の値を使用する各命令に先立って当該変数の値をメモリからロードするスピルイン命令を生成するスピルイン命令生成手段とを更に備え、前記実行可能範囲検出手段は、前記スピルイン命令を前記対象ロード命令である対象スピルイン命令として、前記対象スピルイン命令を遡ることにより到達可能な全ての実行経路のそれぞれについて前記実行可能範囲を検出し、前記命令生成手段は、前記実行経路のそれぞれについて、前記実行可能範囲において前記対象スピルイン命令についての前記先行ロード命令が存在しない場合に、前記実行可能範囲内に前記先行ロード命令を生成し、前記命令置換手段は、前記対象スピルイン命令を削除すると共に、前記対象スピルイン命令により読み出されたデータを使用する命令を、前記先行ロード命令により読み出されレジスタに保持されて伝播されるデータを使用する命令に置換する項目1記載の最適化コンパイラ。
(項目3) 前記実行可能範囲検出手段は、互いに同一のアドレスから同一のデータを読み出す複数の前記対象ロード命令のそれぞれについて、前記複数の実行経路における前記実行可能範囲を検出し、前記命令生成手段は、第1の前記対象ロード命令における前記実行経路のそれぞれについて、前記実行可能範囲において前記先行ロード命令が存在せず、かつ当該実行可能範囲及び第2の前記対象ロード命令における実行可能範囲の少なくとも一部が重複する場合に、当該重複する範囲内に前記先行ロード命令を生成し、前記命令置換手段は、前記先行ロード命令より後に実行されることが定まっておりかつ前記実行可能範囲に存在する全ての対象ロード命令を削除すると共に、前記全ての対象ロード命令のそれぞれにより読み出されたデータを使用する命令のそれぞれを、前記先行ロード命令により読み出されレジスタに保持されて伝播されるデータを使用する命令に置換する項目1記載の最適化コンパイラ。
(項目4) 前記命令生成手段は、前記実行可能範囲の何れかが互いに重複する複数の対象ロード命令について、当該複数の対象ロード命令についての計算的最適性(computational optimality)を満たす範囲内に、前記先行ロード命令を生成する項目3記載の最適化コンパイラ。
(項目5) 前記計算的最適性を保持する場合において、前記命令生成手段により生成される先行ロード命令及び他の先行ロード命令における読み出し先のレジスタを同一に設定できか否かを判断する同一性判断手段を更に備え、同一に設定できない場合に、前記命令生成手段は、前記実行可能範囲のうち、当該計算的最適性が満たされず、かつ当該先行ロード命令及び他の先行ロード命令による読み出し先のレジスタを同一に設定可能となる位置に、当該先行ロード命令を生成する項目4記載の最適化コンパイラ。
(項目6) 前記同一性判断手段によりレジスタを同一に設定できないと判断された場合に、レジスタを同一に設定しない場合にレジスタ間においてデータをコピーする処理に要するコピー処理時間と、レジスタを同一に設定した場合に前記計算的最適性を満たす場合と比較して追加されるロード命令の処理時間である追加命令処理時間とを算出するコピー処理時間算出手段を更に備え、前記命令生成手段は、前記追加命令処理時間が前記コピー処理時間より大きいことを更に条件として、当該計算的最適性が満たされず、かつ当該先行ロード命令及び他の先行ロード命令による読み出し先のレジスタを同一に設定可能となる位置に、当該先行ロード命令を生成する項目5記載の最適化コンパイラ。
(項目7) 前記命令生成手段は、前記計算的最適性を満たす範囲のうち、更に、前記先行ロード命令により読み出されたデータの生存区間が最小となる生存区間的最適性(lifetime optimality)を満たす位置に、前記先行ロード命令を生成する項目4記載の最適化コンパイラ。
(項目8) 前記生存区間的最適性を満たす位置から、前記先行ロード命令により読み出されるデータを使用する命令の実行位置までに他の命令が実行されるのに要する処理時間である必要処理時間と、前記先行ロード命令の実行を開始してからデータの読み出しが完了するまでに要するロード処理時間とを解析するロード遅延解析手段を更に備え、前記命令生成手段は、前記必要処理時間が、前記ロード処理時間より小さい場合に、前記生存区間的最適性を満たす位置に先立って実行される位置に、前記先行ロード命令を生成する項目7記載の最適化コンパイラ。
(項目9) 前記命令生成手段は、前記必要処理時間が前記ロード処理時間より小さい場合に、前記生存区間的最適性を満たす位置から、前記ロード処理時間から前記必要処理時間を減じた時間先立って実行される実行位置に、前記先行ロード命令を生成する項目8記載の最適化コンパイラ。
(項目10) 前記命令生成手段は、前記実行経路のそれぞれについて前記実行可能範囲に先行ロード命令が存在しない場合に、前記先行ロード命令として、他の先行ロード命令がデータを読み出すレジスタと同一である共通レジスタにデータを読み出すロード命令を生成し、前記命令置換手段は、前記対象ロード命令により読み出されたデータを使用する命令を、前記共通レジスタに保持されたデータを使用する命令に置換する項目1記載の最適化コンパイラ。
(項目11) 前記命令置換手段により前記対象ロード命令が削除された場合に、当該対象ロード命令によってのみ読み出されており、かつ生成された前記先行ロード命令により読み出されないデータを書き込むストア命令を削除するストア命令削除手段を更に備える項目1記載の最適化コンパイラ。
(項目12) 最適化対象の対象プログラムにおいて、メモリからレジスタにデータを読み出すロード命令を最適化する最適化コンパイラであって、前記対象プログラム中の最適化対象の対象ロード命令から実行順序を遡ることにより到達する全ての実行経路のそれぞれについて、ロード命令が実行された場合に当該ロード命令により読み出されたデータをレジスタに保持して前記対象ロード命令の実行位置に伝達可能である、当該ロード命令の実行可能範囲を検出する実行可能範囲検出手段と、前記実行経路のそれぞれについて、前記実行可能範囲において前記対象ロード命令に先立って実行される、前記対象ロード命令と同一のアドレスから同一のデータを読み出す先行ロード命令が存在する場合に、前記対象ロード命令を削除すると共に、前記対象ロード命令により読み出されたデータを使用する命令を、前記先行ロード命令により読み出されレジスタに保持されて伝播されるデータを使用する命令に置換する命令置換手段とを備える最適化コンパイラ。
(項目13) 最適化対象の対象プログラムにおいて、メモリからレジスタにデータを読み出すロード命令を最適化するコンパイル方法であって、前記対象プログラム中の最適化対象の対象ロード命令から実行順序を遡ることにより到達する全ての実行経路のそれぞれについて、ロード命令が実行された場合に当該ロード命令により読み出されたデータをレジスタに保持して前記対象ロード命令の実行位置に伝達可能である、当該ロード命令の実行可能範囲を検出する実行可能範囲検出段階と、前記実行経路のそれぞれについて、前記実行可能範囲において前記対象ロード命令に先立って実行される、前記対象ロード命令と同一のアドレスから同一のデータを読み出す先行ロード命令が存在しない場合に、前記実行可能範囲内に前記先行ロード命令を生成する命令生成段階と、前記対象ロード命令を削除すると共に、前記対象ロード命令により読み出されたデータを使用する命令を、前記先行ロード命令により読み出されレジスタに保持されて伝播されるデータを使用する命令に置換する命令置換段階とを備えるコンパイル方法。
(項目14) 最適化対象の対象プログラムにおいて、メモリからレジスタにデータを読み出すロード命令を最適化する最適化コンパイラとしてコンピュータを機能させるコンパイラプログラムであって、前記対象プログラム中の最適化対象の対象ロード命令から実行順序を遡ることにより到達する全ての実行経路のそれぞれについて、ロード命令が実行された場合に当該ロード命令により読み出されたデータをレジスタに保持して前記対象ロード命令の実行位置に伝達可能である、当該ロード命令の実行可能範囲を検出する実行可能範囲検出手段と、前記実行経路のそれぞれについて、前記実行可能範囲において前記対象ロード命令に先立って実行される、前記対象ロード命令と同一のアドレスから同一のデータを読み出す先行ロード命令が存在しない場合に、前記実行可能範囲内に前記先行ロード命令を生成する命令生成手段と、前記対象ロード命令を削除すると共に、前記対象ロード命令により読み出されたデータを使用する命令を、前記先行ロード命令により読み出されレジスタに保持されて伝播されるデータを使用する命令に置換する命令置換手段として機能させるコンパイラプログラム。
(項目15) 項目14記載のコンパイラプログラムを記録した記録媒体。
図1は、最適化コンパイラ10の機能ブロック図である。 図2は、最適化コンパイラ10の動作フローを示す図である。 図3は、図2におけるS240の詳細を示す動作フローである。 図4は、図3におけるS310の処理を説明する図である。 図5は、図2におけるS250の詳細を示す動作フローである。 図6は、本実施例の第1の適用例を示す。(a)は、レジスタ割当手段100により変数がレジスタに割り当てられた対象プログラムの例を示す。(b)は、スピルイン命令生成手段110によりスピルイン命令が生成された対象プログラムの例を示す。(c)は、本実施例に係る最適化コンパイラ10による最適化結果である結果プログラムを示す。 図7は、本実施例の第2の適用例を示す。(a)は、レジスタ割当手段100により変数がレジスタに割り当てられた対象プログラムの例を示す。(b)は、スピルイン命令生成手段110によりスピルイン命令が生成された対象プログラムの例を示す。(c)は、本実施例に係る最適化コンパイラ10による最適化結果である結果プログラムを示す。 図8は、本実施例の第3の適用例を示す。(a)は、最適化前の対象プログラムの一例を示す。(b)は、スピルイン命令生成手段110によりスピルイン命令が生成された対象プログラムの例を示す。(c)は、本実施例に係る最適化コンパイラ10による最適化結果である結果プログラムを示す。 図9は、最適化コンパイラ10として機能するコンピュータのハードウェア構成の一例を示す。
符号の説明
10 最適化コンパイラ
100 レジスタ割当手段
110 スピルイン命令生成手段
120 実行可能範囲生成手段
125 ロード遅延解析手段
130 同一性判断手段
140 コピー処理時間算出手段
150 命令生成手段
160 命令置換手段
170 スピルアウト命令削除手段
800 基本ブロック
810 基本ブロック
820 基本ブロック

Claims (12)

  1. 最適化対象の対象プログラムにおいて、メモリからレジスタにデータを読み出すロード命令を最適化するコンピュータであるコンパイラ装置であって、
    前記対象プログラムを記憶する記憶装置と、
    前記対象プログラム中の最適化対象の対象ロード命令から実行順序を遡ることにより到達する全ての実行経路のそれぞれについて、読み出したデータをレジスタに保持して当該実行経路における前記対象ロード命令が実行される位置に伝達するための他のロード命令の、当該実行経路における実行可能範囲を、前記コンピュータのCPUの制御により前記記憶装置にアクセスして検出する実行可能範囲検出手段と、
    前記実行経路のそれぞれについて、前記実行可能範囲において、前記対象ロード命令に先立って実行される、前記対象ロード命令と同一のアドレスから同一のデータを読み出す先行ロード命令が存在しない場合に、前記実行可能範囲内に前記先行ロード命令を、前記CPUの制御により前記記憶装置にアクセスして生成する命令生成手段と、
    前記対象ロード命令を削除すると共に、前記対象ロード命令により読み出されたデータを使用する命令を、前記先行ロード命令により読み出されレジスタに保持されて伝播されるデータを使用する命令に、前記CPUの制御により前記記憶装置にアクセスして置換する命令置換手段と
    を備えるコンパイラ装置
  2. 変数をレジスタに割り当てるレジスタ割当手段と、
    前記レジスタ割当手段によりレジスタに割当不能と判断された各変数について、当該変数の値を使用する各命令に先立って当該変数の値をメモリからロードするスピルイン命令を、前記CPUの制御により前記記憶装置にアクセスして生成するスピルイン命令生成手段と
    を更に備え、
    前記実行可能範囲検出手段は、前記スピルイン命令を前記対象ロード命令である対象スピルイン命令として、前記対象スピルイン命令を遡ることにより到達可能な全ての実行経路のそれぞれについて前記実行可能範囲を、前記CPUの制御により前記記憶装置にアクセスして検出し、
    前記命令生成手段は、前記実行経路のそれぞれについて、前記実行可能範囲において前記対象スピルイン命令についての前記先行ロード命令が存在しない場合に、前記実行可能範囲内に前記先行ロード命令を、前記CPUの制御により前記記憶装置にアクセスして生成し、
    前記命令置換手段は、前記対象スピルイン命令を削除すると共に、前記対象スピルイン命令により読み出されたデータを使用する命令を、前記先行ロード命令により読み出されレジスタに保持されて伝播されるデータを使用する命令に、前記CPUの制御により前記記憶装置にアクセスして置換する
    請求項1記載のコンパイラ装置
  3. 前記実行可能範囲検出手段は、互いに同一のアドレスから同一のデータを読み出す複数の前記対象ロード命令のそれぞれについて、複数の前記実行経路における前記実行可能範囲を、前記CPUの制御により前記記憶装置にアクセスして検出し、
    前記命令生成手段は、第1の前記対象ロード命令における前記実行経路のそれぞれについて、前記実行可能範囲において前記先行ロード命令が存在せず、かつ当該実行可能範囲及び第2の前記対象ロード命令における実行可能範囲の少なくとも一部が重複する場合に、当該重複する範囲内である計算的最適性(computational optimality)を満たす範囲内に、前記先行ロード命令を、前記CPUの制御により前記記憶装置にアクセスして生成し、
    前記命令置換手段は、前記先行ロード命令より後に実行されることが定まっておりかつ前記実行可能範囲に存在する対象ロード命令のそれぞれを削除すると共に、当該対象ロード命令により読み出されたデータを使用する命令を、前記先行ロード命令により読み出されレジスタに保持されて伝播されるデータを使用する命令に、前記CPUの制御により前記記憶装置にアクセスして置換する
    請求項1記載のコンパイラ装置
  4. 前記計算的最適性を保持する場合において、前記命令生成手段により生成される先行ロード命令、及び、前記実行可能範囲において前記対象ロード命令に先立って実行され、前記対象ロード命令と同一のアドレスから同一のデータを読み出す他の命令である他の先行ロード命令における、読み出し先のレジスタを同一に設定できか否かを、前記CPUの制御により前記記憶装置にアクセスして判断する同一性判断手段を更に備え、
    同一に設定できない場合に、前記命令生成手段は、前記実行可能範囲のうち、当該計算的最適性が満たされず、かつ当該先行ロード命令及び当該他の先行ロード命令による読み出し先のレジスタを同一に設定可能となる、実行経路上の位置に、当該先行ロード命令を、前記CPUの制御により前記記憶装置にアクセスして生成する
    請求項3記載のコンパイラ装置
  5. 前記命令生成手段は、前記計算的最適性を満たす範囲のうち、更に、前記先行ロード命令により読み出されたデータの生存区間が最小となる生存区間的最適性(lifetime optimality)を満たす、実行経路上の位置に、前記先行ロード命令を、前記CPUの制御により前記記憶装置にアクセスして生成する
    請求項3記載のコンパイラ装置
  6. 前記実行経路に前記先行ロード命令が存在しない場合に、前記生存区間的最適性を満たす当該実行経路における位置から、前記先行ロード命令により読み出されるデータを使用する命令の当該実行経路における位置までに要する処理時間である必要処理時間と、前記先行ロード命令の実行を開始してから完了するまでに要するロード処理時間とを、前記CPUの制御により前記記憶装置にアクセスして解析するロード遅延解析手段を更に備え、
    前記命令生成手段は、前記必要処理時間が、前記ロード処理時間より小さい場合に、前記生存区間的最適性を満たす実行経路上の位置に先立って実行される実行経路上の位置に、前記先行ロード命令を、前記CPUの制御により前記記憶装置にアクセスして生成する
    請求項5記載のコンパイラ装置
  7. 前記命令生成手段は、前記必要処理時間が前記ロード処理時間より小さい場合に、前記生存区間的最適性を満たす実行経路上の位置から、前記ロード処理時間から前記必要処理時間を減じた時間先立って実行される実行経路上の位置に、前記先行ロード命令を、前記CPUの制御により前記記憶装置にアクセスして生成する
    請求項6記載のコンパイラ装置
  8. 前記命令生成手段は、前記実行経路のそれぞれについて前記実行可能範囲に前記先行ロード命令が存在しない場合に、前記先行ロード命令として、前記実行可能範囲において前記対象ロード命令に先立って実行され、前記対象ロード命令と同一のアドレスから同一のデータを読み出す他の命令である他の先行ロード命令と、共通のレジスタにデータを読み出すロード命令を、前記CPUの制御により前記記憶装置にアクセスして生成し、
    前記命令置換手段は、前記対象ロード命令により読み出されたデータを使用する命令を、前記共通のレジスタに保持されたデータを使用する命令に、前記CPUの制御により前記記憶装置にアクセスして置換する
    請求項1記載のコンパイラ装置
  9. 最適化対象の対象プログラムにおいて、メモリからレジスタにデータを読み出すロード命令を最適化するコンピュータであるコンパイラ装置であって、
    前記対象プログラムを記憶する記憶装置と、
    前記対象プログラム中の最適化対象の対象ロード命令から実行順序を遡ることにより到達する全ての実行経路のそれぞれについて、読み出したデータをレジスタに保持して当該実行経路における前記対象ロード命令が実行される位置に伝達するための他のロード命令の、当該実行経路における実行可能範囲を、前記コンピュータのCPUの制御により前記記憶装置にアクセスして検出する実行可能範囲検出手段と、
    前記実行経路のそれぞれについて、前記実行可能範囲において前記対象ロード命令に先立って実行される、前記対象ロード命令と同一のアドレスから同一のデータを読み出す先行ロード命令が存在する場合に、前記対象ロード命令を削除すると共に、前記対象ロード命令により読み出されたデータを使用する命令を、前記先行ロード命令により読み出されレジスタに保持されて伝播されるデータを使用する命令に、前記CPUの制御により前記記憶装置にアクセスして置換する命令置換手段と
    を備えるコンパイラ装置
  10. コンピュータの記憶装置に記憶された、最適化対象の対象プログラムにおいて、メモリからレジスタにデータを読み出すロード命令を最適化するコンパイル方法であって、
    前記コンピュータのCPUが、前記対象プログラム中の最適化対象の対象ロード命令から実行順序を遡ることにより到達する全ての実行経路のそれぞれについて、読み出したデータをレジスタに保持して当該実行経路における前記対象ロード命令が実行される位置に伝達するための他のロード命令の、当該実行経路における実行可能範囲を、前記記憶装置にアクセスして実行可能範囲検出段階と、
    前記CPUが、前記実行経路のそれぞれについて、前記実行可能範囲において前記対象ロード命令に先立って実行される、前記対象ロード命令と同一のアドレスから同一のデータを読み出す先行ロード命令が存在しない場合に、前記実行可能範囲内に前記先行ロード命令を、前記記憶装置にアクセスして生成する命令生成段階と、
    前記CPUが、前記対象ロード命令を削除すると共に、前記対象ロード命令により読み出されたデータを使用する命令を、前記先行ロード命令により読み出されレジスタに保持されて伝播されるデータを使用する命令に、前記記憶装置にアクセスして置換する命令置換段階と
    を備えるコンパイル方法。
  11. 最適化対象の対象プログラムにおいて、メモリからレジスタにデータを読み出すロード命令を最適化するコンピュータであるコンパイラ装置として前記コンピュータを機能させるコンパイラプログラムであって、
    前記対象プログラムを記憶する記憶装置と、
    前記対象プログラム中の最適化対象の対象ロード命令から実行順序を遡ることにより到達する全ての実行経路のそれぞれについて、読み出したデータをレジスタに保持して当該実行経路における前記対象ロード命令が実行される位置に伝達するための他のロード命令の、当該実行経路における実行可能範囲を、前記コンピュータのCPUの制御により前記記憶装置にアクセスして検出する実行可能範囲検出手段と、
    前記実行経路のそれぞれについて、前記実行可能範囲において前記対象ロード命令に先立って実行される、前記対象ロード命令と同一のアドレスから同一のデータを読み出す先行ロード命令が存在しない場合に、前記実行可能範囲内に前記先行ロード命令を、前記CPUの制御により前記記憶装置にアクセスして生成する命令生成手段と、
    前記対象ロード命令を削除すると共に、前記対象ロード命令により読み出されたデータを使用する命令を、前記先行ロード命令により読み出されレジスタに保持されて伝播されるデータを使用する命令に、前記CPUの制御により前記記憶装置にアクセスして置換する命令置換手段と
    して機能させるコンパイラプログラム。
  12. 請求項11記載のコンパイラプログラムを記録した記録媒体。
JP2003309675A 2003-09-02 2003-09-02 最適化コンパイラ、コンパイル方法、コンパイラプログラム、及び記録媒体 Expired - Fee Related JP4039633B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2003309675A JP4039633B2 (ja) 2003-09-02 2003-09-02 最適化コンパイラ、コンパイル方法、コンパイラプログラム、及び記録媒体
US10/929,950 US20050050533A1 (en) 2003-09-02 2004-08-30 Optimizing compiler

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2003309675A JP4039633B2 (ja) 2003-09-02 2003-09-02 最適化コンパイラ、コンパイル方法、コンパイラプログラム、及び記録媒体

Publications (2)

Publication Number Publication Date
JP2005078474A JP2005078474A (ja) 2005-03-24
JP4039633B2 true JP4039633B2 (ja) 2008-01-30

Family

ID=34214198

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2003309675A Expired - Fee Related JP4039633B2 (ja) 2003-09-02 2003-09-02 最適化コンパイラ、コンパイル方法、コンパイラプログラム、及び記録媒体

Country Status (2)

Country Link
US (1) US20050050533A1 (ja)
JP (1) JP4039633B2 (ja)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7873952B2 (en) * 2006-03-09 2011-01-18 Oracle America, Inc. Code transformation to optimize fragments that implement constant loading
US10365900B2 (en) 2011-12-23 2019-07-30 Dataware Ventures, Llc Broadening field specialization
US10261764B2 (en) * 2014-05-13 2019-04-16 Oracle International Corporation Handling value types
US10733099B2 (en) 2015-12-14 2020-08-04 Arizona Board Of Regents On Behalf Of The University Of Arizona Broadening field specialization
WO2018237342A1 (en) 2017-06-22 2018-12-27 Dataware Ventures, Llc FIELD SPECIALIZATION TO REDUCE MEMORY ACCESS BLOCKAGES AND ALLOCATION REQUESTS IN HIGH VOLUME DATA APPLICATIONS
CN109343855B (zh) * 2018-09-29 2020-12-29 清华大学 基于指令伪装的程序编译抓取系统及方法
JP7225900B2 (ja) * 2019-02-25 2023-02-21 富士通株式会社 コンパイラ装置、プログラム、及び情報処理方法
US11200061B2 (en) * 2019-11-19 2021-12-14 Microsoft Technology Licensing, Llc Pre-instruction scheduling rematerialization for register pressure reduction
US12099823B2 (en) * 2023-01-16 2024-09-24 International Business Machines Corporation Reducing register pressure

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5613121A (en) * 1994-10-19 1997-03-18 International Business Machines Corporation Method and system of generating combined storage references
US5664193A (en) * 1995-11-17 1997-09-02 Sun Microsystems, Inc. Method and apparatus for automatic selection of the load latency to be used in modulo scheduling in an optimizing compiler
US6128775A (en) * 1998-06-16 2000-10-03 Silicon Graphics, Incorporated Method, system, and computer program product for performing register promotion via load and store placement optimization within an optimizing compiler
US7010785B2 (en) * 2001-03-23 2006-03-07 International Business Machines Corporation Eliminating cold register store/restores within hot function prolog/epilogs

Also Published As

Publication number Publication date
JP2005078474A (ja) 2005-03-24
US20050050533A1 (en) 2005-03-03

Similar Documents

Publication Publication Date Title
JP3220055B2 (ja) 機械語命令列またはアセンブリ言語命令列を最適化する最適化装置、及び、高級言語で記載されたソースプログラムを機械語またはアセンブリ言語の命令列に変換するコンパイラ装置。
US8104026B2 (en) Compiler register allocation and compilation
TWI574202B (zh) 用於新應用程式之記憶體管理模型與介面
US8671399B2 (en) Systems and methods for efficiently using stack registers and storage medium therefor
CN103366338B (zh) 图像处理装置和图像处理方法
KR102356705B1 (ko) 커널 퓨징, 리사이징 및 인터리빙 자동 연산 방법
JP4621786B2 (ja) 情報処理装置、並列処理最適化方法およびプログラム
US20140006751A1 (en) Source Code Level Multistage Scheduling Approach for Software Development and Testing for Multi-Processor Environments
US20100070958A1 (en) Program parallelizing method and program parallelizing apparatus
US20140007044A1 (en) Source Code Generator for Software Development and Testing for Multi-Processor Environments
US20030237080A1 (en) System and method for improved register allocation in an optimizing compiler
JP2008140046A (ja) 画像処理装置、画像処理プログラム
JP4039633B2 (ja) 最適化コンパイラ、コンパイル方法、コンパイラプログラム、及び記録媒体
JP4041248B2 (ja) コンパイラ装置、コンパイルプログラムが記録されたコンピュータ読み取り可能な記録媒体及びコンパイル方法
JP2004362216A (ja) コンパイラ装置、コンパイル方法、コンパイラプログラム、及び記録媒体
US20090164773A1 (en) Dynamic reconfiguration supporting method, dynamic reconfiguration supporting apparatus, and dynamic reconfiguration system
CN110442347A (zh) 安装包编译方法、装置、电子设备及可读存储介质
JP2007188523A (ja) タスク実行方法およびマルチプロセッサシステム
JP4042972B2 (ja) 最適化コンパイラ、コンパイラプログラム、及び記録媒体
JP5146134B2 (ja) コンパイル処理装置,ならびにアクセスパターン変更処理方法および処理プログラム
US5946493A (en) Method and system in a data processing system for association of source code instructions with an optimized listing of object code instructions
US9311065B2 (en) Data splitting for multi-instantiated objects
Kumar et al. Overflowing emerging neural network inference tasks from the GPU to the CPU on heterogeneous servers
JP3638171B2 (ja) 資源割付装置
JP5525658B2 (ja) 計算機、リソース使用量計算方法及びリソース使用量計算プログラム

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20070612

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070906

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20070906

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

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20071101

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20071102

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20101116

Year of fee payment: 3

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