JPH04215133A - コード最適化方法およびコンパイラ・システム - Google Patents
コード最適化方法およびコンパイラ・システムInfo
- Publication number
- JPH04215133A JPH04215133A JP3040550A JP4055091A JPH04215133A JP H04215133 A JPH04215133 A JP H04215133A JP 3040550 A JP3040550 A JP 3040550A JP 4055091 A JP4055091 A JP 4055091A JP H04215133 A JPH04215133 A JP H04215133A
- Authority
- JP
- Japan
- Prior art keywords
- node
- instructions
- texture
- instruction
- parent
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/445—Exploiting fine grain parallelism, i.e. parallelism at instruction level
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/445—Exploiting fine grain parallelism, i.e. parallelism at instruction level
- G06F8/4451—Avoiding pipeline stalls
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)
- Complex Calculations (AREA)
Abstract
(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。
め要約のデータは記録されません。
Description
【0001】
【産業上の利用分野】本発明は、最適化コンパイラに関
するものである。より具体的には、本発明は、コード・
ストリーム中の特定の命令の実行中にマイクロプロセッ
サによって導入されるパイプライン・インターロック遅
延を含むことが知られているコード・ストリーム中に、
選択された命令を挿入することにより、上記遅延を減少
させることに関するものである。
するものである。より具体的には、本発明は、コード・
ストリーム中の特定の命令の実行中にマイクロプロセッ
サによって導入されるパイプライン・インターロック遅
延を含むことが知られているコード・ストリーム中に、
選択された命令を挿入することにより、上記遅延を減少
させることに関するものである。
【0002】
【従来の技術】現在のほとんどのコンピュータ、特に縮
小命令セット・コンピュータ(RISC)は、演算論理
機構(ALU)が、理論的にはクロック速度と実行速度
を1対1で対応させながら、常に実行すべき次の命令を
手にすることができるように、命令パイプラインを使用
している。ハードウェア内のある種の明確な条件の下で
は、以前の計算の結果として命令オペランドが利用可能
になるまで、パイプライン・インターロックによって特
定の命令の実行が阻止される。このインターロックの作
用により、処理サイクルの損失が生じることがある。遅
延、すなわち処理サイクルの損失の最も頻繁な原因は、
条件付き分岐を処理する際に生ずる。この時点で、パイ
プライン中の分岐命令より後の命令はすべて、潜在的に
実行不能である。というのは、この分岐によって、プロ
グラムの制御が異なる命令ストリームに移る可能性があ
るからである。そうである場合には、それらの命令の代
りにその異なる命令ストリームを実行しなければならな
い。このパイプラインの再ロードの間、ALUは、イン
ターロックの作用により新しい命令ストリームを待ちな
がら、遊休状態でいる。方向変更された命令ストリーム
が、別の潜在的なインターロックを導入する別の条件付
き分岐命令を直接含んでいる場合には、問題はより複雑
になる。
小命令セット・コンピュータ(RISC)は、演算論理
機構(ALU)が、理論的にはクロック速度と実行速度
を1対1で対応させながら、常に実行すべき次の命令を
手にすることができるように、命令パイプラインを使用
している。ハードウェア内のある種の明確な条件の下で
は、以前の計算の結果として命令オペランドが利用可能
になるまで、パイプライン・インターロックによって特
定の命令の実行が阻止される。このインターロックの作
用により、処理サイクルの損失が生じることがある。遅
延、すなわち処理サイクルの損失の最も頻繁な原因は、
条件付き分岐を処理する際に生ずる。この時点で、パイ
プライン中の分岐命令より後の命令はすべて、潜在的に
実行不能である。というのは、この分岐によって、プロ
グラムの制御が異なる命令ストリームに移る可能性があ
るからである。そうである場合には、それらの命令の代
りにその異なる命令ストリームを実行しなければならな
い。このパイプラインの再ロードの間、ALUは、イン
ターロックの作用により新しい命令ストリームを待ちな
がら、遊休状態でいる。方向変更された命令ストリーム
が、別の潜在的なインターロックを導入する別の条件付
き分岐命令を直接含んでいる場合には、問題はより複雑
になる。
【0003】常に満たされた命令パイプラインを実現す
るために、これまでにいくつかの試みがなされてきた。
るために、これまでにいくつかの試みがなされてきた。
【0004】初期のRISCマシンは、通常なら分岐の
前に実行されるある種の命令が、命令ストリーム中のそ
の分岐命令の後に現れる、後実行形式の分岐命令を提供
した。これによって、ある種の命令が、パイプラインの
再充填中に実行できるようになった。IBM RT
PCコンピュータ・システムの場合がそうである。
前に実行されるある種の命令が、命令ストリーム中のそ
の分岐命令の後に現れる、後実行形式の分岐命令を提供
した。これによって、ある種の命令が、パイプラインの
再充填中に実行できるようになった。IBM RT
PCコンピュータ・システムの場合がそうである。
【0005】命令事前取出し(pre−fetch)の
機会を増やすために、条件レジスタの定義位置と使用位
置の間に挿入すべき適当な命令を見つけることは、「命
令スケジューリング」と称する種類のコンパイラ最適化
の一部であり、本発明の背景の一部である。通常、従来
技術のコード引上げ技法は、並行する実行経路に沿って
発生する計算を探し、これらを両方の経路を支配するノ
ードに引き上げる。その結果生ずるモジュールは、2つ
の計算を1つに置き換えた結果、通常、サイズが小さく
なる。本発明は、パイプラインを満杯に保つため、改良
された上記技法を用いて、条件付き実行の経路に沿った
命令を見つけ、これを引き上げる。その結果、命令は、
基本ブロック境界をまたいでスケジューリングされる。 下記の論文は、命令パイプラインを実行可能な命令で満
杯に保ついくつかの試みの概要を述べたものである。A
rya S., Optimal Instructi
on Scheduling for a Class
of Vector Processors: An
Integer Programming Appr
oach, Tech. Rept. CRL−TR
−19−83, ComputerResearch
Laboratory, Univ. of Mich
., Ann Arbor、1983年4月。Ausl
ander M. and Hopkins M.,
An Overview of the PL.8 C
ompiler, Proc. ACM SIGPLA
N Symp. on Compiler Const
ruction, Boston、1982年6月、p
p.22〜31。Gibbons P. and Mu
chnick S., Efficient Inst
ruction Scheduling for a
Pipelined Architecture, P
roc. SIGPLAN’86 Symp. on
Compiler Construction, Pa
lo Alto、1986年、pp.11〜16。Gr
oss T.R., Code Optimizati
on of Pipeline Constraint
s, Tech. Rept. 83−255, Co
mputer Systems Lab., Stan
ford Univ.、1983年12月。Henne
ssy T. L. and Gross T.R.,
Postpass Code Optimizati
on of PipelineConstraints
, ACM Trans. on Prog. Lan
g. and Sys, Vol. 5、1983年7
月、pp.422〜448。Sites, R.L.,
Instruction Ordering for
the Cray−1 Computer, Tec
h. Rept.78−CS−023, Univ.
of Calif., San Diego、1978
年7月。
機会を増やすために、条件レジスタの定義位置と使用位
置の間に挿入すべき適当な命令を見つけることは、「命
令スケジューリング」と称する種類のコンパイラ最適化
の一部であり、本発明の背景の一部である。通常、従来
技術のコード引上げ技法は、並行する実行経路に沿って
発生する計算を探し、これらを両方の経路を支配するノ
ードに引き上げる。その結果生ずるモジュールは、2つ
の計算を1つに置き換えた結果、通常、サイズが小さく
なる。本発明は、パイプラインを満杯に保つため、改良
された上記技法を用いて、条件付き実行の経路に沿った
命令を見つけ、これを引き上げる。その結果、命令は、
基本ブロック境界をまたいでスケジューリングされる。 下記の論文は、命令パイプラインを実行可能な命令で満
杯に保ついくつかの試みの概要を述べたものである。A
rya S., Optimal Instructi
on Scheduling for a Class
of Vector Processors: An
Integer Programming Appr
oach, Tech. Rept. CRL−TR
−19−83, ComputerResearch
Laboratory, Univ. of Mich
., Ann Arbor、1983年4月。Ausl
ander M. and Hopkins M.,
An Overview of the PL.8 C
ompiler, Proc. ACM SIGPLA
N Symp. on Compiler Const
ruction, Boston、1982年6月、p
p.22〜31。Gibbons P. and Mu
chnick S., Efficient Inst
ruction Scheduling for a
Pipelined Architecture, P
roc. SIGPLAN’86 Symp. on
Compiler Construction, Pa
lo Alto、1986年、pp.11〜16。Gr
oss T.R., Code Optimizati
on of Pipeline Constraint
s, Tech. Rept. 83−255, Co
mputer Systems Lab., Stan
ford Univ.、1983年12月。Henne
ssy T. L. and Gross T.R.,
Postpass Code Optimizati
on of PipelineConstraints
, ACM Trans. on Prog. Lan
g. and Sys, Vol. 5、1983年7
月、pp.422〜448。Sites, R.L.,
Instruction Ordering for
the Cray−1 Computer, Tec
h. Rept.78−CS−023, Univ.
of Calif., San Diego、1978
年7月。
【0006】コンパイル時パイプライン・スケジューリ
ングに関する研究は、比較的乏しい。Gibbons
et al.(1986年)、Gross(1983年
)、Hennessey et al.(1983年)
および Sites(1978年)は、コード生成およ
びレジスタ割振りの後のパスの間に行われるスケジュー
リングについて考察している。レジスタ割振り前の命令
スケジューリングは、Auslander et al
.(1982年)によって記述されたIBM PL.
8コンパイラを含めて、いくつかのコンパイラで実施さ
れているが、いずれの参照論文でも、スケジューリング
は基本ブロック内でのみインターロックを減少すること
に限定されている。
ングに関する研究は、比較的乏しい。Gibbons
et al.(1986年)、Gross(1983年
)、Hennessey et al.(1983年)
および Sites(1978年)は、コード生成およ
びレジスタ割振りの後のパスの間に行われるスケジュー
リングについて考察している。レジスタ割振り前の命令
スケジューリングは、Auslander et al
.(1982年)によって記述されたIBM PL.
8コンパイラを含めて、いくつかのコンパイラで実施さ
れているが、いずれの参照論文でも、スケジューリング
は基本ブロック内でのみインターロックを減少すること
に限定されている。
【0007】
【発明が解決しようとする課題】これらの試みにも関わ
らず、プログラムの制御が多数の基本ブロック境界にま
たがって流れる際に命令パイプライン内に存在する、潜
在的に実行不能なコードによって引き起こされる遅延を
減少させる方法が必要である。
らず、プログラムの制御が多数の基本ブロック境界にま
たがって流れる際に命令パイプライン内に存在する、潜
在的に実行不能なコードによって引き起こされる遅延を
減少させる方法が必要である。
【0008】
【課題を解決するための手段】現在のところ、制御シー
ケンスの適当な位置にあるコードを制御シーケンスの他
の部分へ引き上げることによって、マイクロプロセッサ
が遊休状態となるクロック・サイクルの数を、減少でき
ることがわかっている。引上げは、計算を有向グラフの
任意のノードからそのノードを支配するノードへ移す、
コード移動技法の1種として定義される。
ケンスの適当な位置にあるコードを制御シーケンスの他
の部分へ引き上げることによって、マイクロプロセッサ
が遊休状態となるクロック・サイクルの数を、減少でき
ることがわかっている。引上げは、計算を有向グラフの
任意のノードからそのノードを支配するノードへ移す、
コード移動技法の1種として定義される。
【0009】したがって、本発明は、コンピュータ内の
命令のシーケンスによるクロック・サイクルの利用を改
善する方法であって、 (a)前記命令を制御フローグラフ中で表すステップと
、 (b)前記フローグラフ内の第1ノードから検索して、
オーダが少なくとも2のテキスチャである部分グラフを
識別するステップと、 (c)前記の各テキスチャについて、 (i)あるオーダのテキスチャを形成する子ノード内の
命令を検査し、 (ii)各命令が引上げ可能であるか否かを判定し、(
iii)前記命令が引上げ可能である場合、前記子ノー
ドからの前記命令をその親テキスチャに組み合わせるス
テップと、 (d)子ノードがなくなるか、または前記親ノードに固
有の遅延が除去されるまで、各子ノードについてステッ
プ(i)ないし(iii)を繰り返すステップとを含む
方法を含む。
命令のシーケンスによるクロック・サイクルの利用を改
善する方法であって、 (a)前記命令を制御フローグラフ中で表すステップと
、 (b)前記フローグラフ内の第1ノードから検索して、
オーダが少なくとも2のテキスチャである部分グラフを
識別するステップと、 (c)前記の各テキスチャについて、 (i)あるオーダのテキスチャを形成する子ノード内の
命令を検査し、 (ii)各命令が引上げ可能であるか否かを判定し、(
iii)前記命令が引上げ可能である場合、前記子ノー
ドからの前記命令をその親テキスチャに組み合わせるス
テップと、 (d)子ノードがなくなるか、または前記親ノードに固
有の遅延が除去されるまで、各子ノードについてステッ
プ(i)ないし(iii)を繰り返すステップとを含む
方法を含む。
【0010】また、本発明は、コンピュータ上で実行さ
れるプログラムを最適化するための改良されたコンパイ
ラであって、 (a)前記プログラムを命令のシーケンスとして表す手
段と、 (b)前記プログラムの制御フローを制御フローグラフ
として表す手段と、 (c)前記フローグラフ内の第1ノードから検索して、
オーダが少なくとも2のテキスチャである親ノードを識
別する手段と、 (d)前記親ノードの各子ノードを検査する手段と、(
e)各子ノードがその親ノードに移動できる命令を含む
か否かを判定する手段と、 (f)前記命令を前記親ノードに移動する手段と、(g
)前記の各子ノードのすべての命令が移動されたか否か
を判定する手段と (j)前記親ノードに固有の遅延が除去されたか否かを
判定する手段とを含む、コンパイラを含む。
れるプログラムを最適化するための改良されたコンパイ
ラであって、 (a)前記プログラムを命令のシーケンスとして表す手
段と、 (b)前記プログラムの制御フローを制御フローグラフ
として表す手段と、 (c)前記フローグラフ内の第1ノードから検索して、
オーダが少なくとも2のテキスチャである親ノードを識
別する手段と、 (d)前記親ノードの各子ノードを検査する手段と、(
e)各子ノードがその親ノードに移動できる命令を含む
か否かを判定する手段と、 (f)前記命令を前記親ノードに移動する手段と、(g
)前記の各子ノードのすべての命令が移動されたか否か
を判定する手段と (j)前記親ノードに固有の遅延が除去されたか否かを
判定する手段とを含む、コンパイラを含む。
【0011】
【実施例】本開示で用いる用語は、当業者には周知であ
るが、意味を明確にするためここで定義する。「基本ブ
ロック」とは、分岐、戻り、プロシージャの終わりもし
くは、ラベルまたは入口点の直前の命令で終わる、命令
のシーケンスである。「拡張基本ブロック」とは、プロ
シージャの入口点またはラベルから始まり、次の拡張基
本ブロックの境界またはプロシージャの終わりで終了す
る、命令のシーケンスである。「折り込み(colla
psing)」とは、それによってエッジが取り去られ
、ブロック境界が拡張されて、その結果、各ノードが基
本ブロックではなく拡張基本ブロックを表す、下記に定
義するフローグラフが得られる、フローグラフ縮小の任
意選択処理である。基本ブロックではなく拡張基本ブロ
ックからなる縮小フローグラフが、当業者に理解される
他のある種の最適化に必要な前提条件となることがある
。「フローグラフ」とは、最適化される部分プロシージ
ャまたは関数内の可能な制御フローを表すすべてのノー
ドとエッジを含む有向グラフである。ただし、各ノード
は基本ブロックを表し、各エッジは可能な制御フローを
表す。「戻りエッジ」とは、フローグラフの任意のノー
ドから出て、支配ノードに入る、フローグラフ内のエッ
ジである。「支配」とは、フローグラフの最初のノード
から、支配されるノードへ向かうすべての経路が、支配
ノードを通るという、あるノードと別のノードとの関係
である。「部分グラフ」とは、有向グラフ内のノードと
それらのノードで始まるまたは終わるすべてのエッジと
のサブセットである。基本ブロックは、「ウィーブ」と
「ウェブ」の2つの成分に分割できる。分岐命令が存在
する場合、ウェブ成分は分岐命令であり、ウィーブはそ
の基本ブロックのそれ以外のすべての命令である。「ウ
ィーブ」は、「入口エッジ」と称するそこに入るエッジ
をいくつか備えた、フローグラフ内のノードであり、そ
の後に続くのは「ウェブ」だけである。任意のノードに
入るエッジは、それを含むフローグラフ内の戻りエッジ
でもあるが、そのエッジが同じ基本ブロックから発して
いるのでない限り、そのノードの入口エッジとは見なさ
れない。「ウェブ」とは、ただ1つの入口エッジと任意
の数の出口エッジを備えた、フローグラフ内のノードで
ある。この定義により、ウェブは必ず1つのウィーブに
よって支配される。このような出口エッジの1つは、「
リーディング・エッジ」と称し、そのウェブ内の最後の
命令のフォールスルー経路が存在する場合は、それを表
すエッジである。他のすべての出口エッジは、「トレー
リング・エッジ」と称する。「オーダ」とは、ウェブに
適用される用語であって、出口エッジの数を表す。「テ
クスチャ」とは、ちょうど1つのウィーブ・ノードと1
つのウェブ・ノードとを含む部分グラフであって、その
オーダはそれに含まれるウェブのオーダによって定義さ
れ、その入口エッジはそのウィーブの入口エッジである
。すなわち、条件付き分岐命令で終わる入口エッジが1
つの基本ブロックは、オーダが2のテキスチャである。 そのウェブ成分はこの条件付き分岐のみを含み、この基
本ブロック内のそれ以前のすべての命令は、ウィーブ成
分である。「親」とは、オーダが2のテキスチャである
。親テキスチャに続くものは、すべて子として識別され
る。「適格な」(以下、「子」と呼ぶ)とは、ある識別
された親テキスチャに続く、フローグラフ内のノードで
ある。子ノードは、何らかのオーダのテキスチャとして
分類できるが、親が子を支配する場合にのみ適格と見な
される。
るが、意味を明確にするためここで定義する。「基本ブ
ロック」とは、分岐、戻り、プロシージャの終わりもし
くは、ラベルまたは入口点の直前の命令で終わる、命令
のシーケンスである。「拡張基本ブロック」とは、プロ
シージャの入口点またはラベルから始まり、次の拡張基
本ブロックの境界またはプロシージャの終わりで終了す
る、命令のシーケンスである。「折り込み(colla
psing)」とは、それによってエッジが取り去られ
、ブロック境界が拡張されて、その結果、各ノードが基
本ブロックではなく拡張基本ブロックを表す、下記に定
義するフローグラフが得られる、フローグラフ縮小の任
意選択処理である。基本ブロックではなく拡張基本ブロ
ックからなる縮小フローグラフが、当業者に理解される
他のある種の最適化に必要な前提条件となることがある
。「フローグラフ」とは、最適化される部分プロシージ
ャまたは関数内の可能な制御フローを表すすべてのノー
ドとエッジを含む有向グラフである。ただし、各ノード
は基本ブロックを表し、各エッジは可能な制御フローを
表す。「戻りエッジ」とは、フローグラフの任意のノー
ドから出て、支配ノードに入る、フローグラフ内のエッ
ジである。「支配」とは、フローグラフの最初のノード
から、支配されるノードへ向かうすべての経路が、支配
ノードを通るという、あるノードと別のノードとの関係
である。「部分グラフ」とは、有向グラフ内のノードと
それらのノードで始まるまたは終わるすべてのエッジと
のサブセットである。基本ブロックは、「ウィーブ」と
「ウェブ」の2つの成分に分割できる。分岐命令が存在
する場合、ウェブ成分は分岐命令であり、ウィーブはそ
の基本ブロックのそれ以外のすべての命令である。「ウ
ィーブ」は、「入口エッジ」と称するそこに入るエッジ
をいくつか備えた、フローグラフ内のノードであり、そ
の後に続くのは「ウェブ」だけである。任意のノードに
入るエッジは、それを含むフローグラフ内の戻りエッジ
でもあるが、そのエッジが同じ基本ブロックから発して
いるのでない限り、そのノードの入口エッジとは見なさ
れない。「ウェブ」とは、ただ1つの入口エッジと任意
の数の出口エッジを備えた、フローグラフ内のノードで
ある。この定義により、ウェブは必ず1つのウィーブに
よって支配される。このような出口エッジの1つは、「
リーディング・エッジ」と称し、そのウェブ内の最後の
命令のフォールスルー経路が存在する場合は、それを表
すエッジである。他のすべての出口エッジは、「トレー
リング・エッジ」と称する。「オーダ」とは、ウェブに
適用される用語であって、出口エッジの数を表す。「テ
クスチャ」とは、ちょうど1つのウィーブ・ノードと1
つのウェブ・ノードとを含む部分グラフであって、その
オーダはそれに含まれるウェブのオーダによって定義さ
れ、その入口エッジはそのウィーブの入口エッジである
。すなわち、条件付き分岐命令で終わる入口エッジが1
つの基本ブロックは、オーダが2のテキスチャである。 そのウェブ成分はこの条件付き分岐のみを含み、この基
本ブロック内のそれ以前のすべての命令は、ウィーブ成
分である。「親」とは、オーダが2のテキスチャである
。親テキスチャに続くものは、すべて子として識別され
る。「適格な」(以下、「子」と呼ぶ)とは、ある識別
された親テキスチャに続く、フローグラフ内のノードで
ある。子ノードは、何らかのオーダのテキスチャとして
分類できるが、親が子を支配する場合にのみ適格と見な
される。
【0012】上記の定義に従って定義した時、テキスチ
ャ、ウェブおよびウィーブは、データ・フロー解析で、
制御フローによってスケジューリングが導入される機会
を生み出す。
ャ、ウェブおよびウィーブは、データ・フロー解析で、
制御フローによってスケジューリングが導入される機会
を生み出す。
【0013】本発明は、当業者には容易に理解されるよ
うに、アセンブラまたは中間言語のレベルを含めて、ソ
フトウェア・プログラムをコンパイルする際に最適化ス
テップが実行される各レベルで適用することができる。 本発明は中間言語レベルで適用することが好ましい。当
技術分野で知られているように、中間レベルの言語とは
、人間がコード(しばしば「ソース」と称する)を書く
際に用いる高水準言語と、実際のプロセッサがプログラ
ミングされる機械コードの間のステップである。
うに、アセンブラまたは中間言語のレベルを含めて、ソ
フトウェア・プログラムをコンパイルする際に最適化ス
テップが実行される各レベルで適用することができる。 本発明は中間言語レベルで適用することが好ましい。当
技術分野で知られているように、中間レベルの言語とは
、人間がコード(しばしば「ソース」と称する)を書く
際に用いる高水準言語と、実際のプロセッサがプログラ
ミングされる機械コードの間のステップである。
【0014】新しいRISCシステムには、多数の条件
レジスタと分離式の分岐復号機構を備えたものがあり、
比較結果が実際の条件付き分岐よりも十分以前にわかる
場合には、命令取出しの方向を変更して、命令パイプラ
インが絶対に実行不能な命令を含まないようにすること
が可能である。本発明は、このようなシステムに特に適
している。というのは、分岐復号機構と演算論理機構が
分離していないシステムよりも、多くの形式の命令を引
き上げることができるからである。
レジスタと分離式の分岐復号機構を備えたものがあり、
比較結果が実際の条件付き分岐よりも十分以前にわかる
場合には、命令取出しの方向を変更して、命令パイプラ
インが絶対に実行不能な命令を含まないようにすること
が可能である。本発明は、このようなシステムに特に適
している。というのは、分岐復号機構と演算論理機構が
分離していないシステムよりも、多くの形式の命令を引
き上げることができるからである。
【0015】図1を参照すると、本発明の好ましい実施
例が有向フローグラフで示されている。本発明の方法の
最初のステップでは、最適化すべきプログラムが、命令
のシーケンスとして表される。このプログラムは、固有
の制御フローを有し、それが分析された後フローグラフ
によって表される。開始ノード0から始めて、フローグ
ラフの深さ優先検索(DFS)を使用することによって
、オーダ2のテキスチャとして分類できる基本ブロック
が識別される。図1では、本発明でノードが検査される
順序を示すために、ノードにDFSの順序で番号が付け
てある。ノード1、2、5および8はそれぞれ、2つの
出口エッジを有するので、オーダが2のテキスチャであ
る。
例が有向フローグラフで示されている。本発明の方法の
最初のステップでは、最適化すべきプログラムが、命令
のシーケンスとして表される。このプログラムは、固有
の制御フローを有し、それが分析された後フローグラフ
によって表される。開始ノード0から始めて、フローグ
ラフの深さ優先検索(DFS)を使用することによって
、オーダ2のテキスチャとして分類できる基本ブロック
が識別される。図1では、本発明でノードが検査される
順序を示すために、ノードにDFSの順序で番号が付け
てある。ノード1、2、5および8はそれぞれ、2つの
出口エッジを有するので、オーダが2のテキスチャであ
る。
【0016】本発明によって定義される最適化を実行す
る際、これらのノードは親として識別される。この識別
された親テキスチャの後継ノードのうち、オーダが幾つ
のテキスチャであってもよいが、その先行ノードが親だ
けであるノードは、その親の子ノードとなる。図1では
、ノード1の後継ノードであるノード2と8、ノード2
の後継ノードであるノード3と7、およびノード8の後
継ノードであるノード9と10が、前記親テキスチャの
子ノードである。
る際、これらのノードは親として識別される。この識別
された親テキスチャの後継ノードのうち、オーダが幾つ
のテキスチャであってもよいが、その先行ノードが親だ
けであるノードは、その親の子ノードとなる。図1では
、ノード1の後継ノードであるノード2と8、ノード2
の後継ノードであるノード3と7、およびノード8の後
継ノードであるノード9と10が、前記親テキスチャの
子ノードである。
【0017】このグラフ内の各エッジは、任意のノード
の下端から出て、別の任意のノードの上端に入るものと
して図示されている。たとえば、ノード0からノード1
に向かうエッジは、ノード0から出てノード1に入ると
いわれる。
の下端から出て、別の任意のノードの上端に入るものと
して図示されている。たとえば、ノード0からノード1
に向かうエッジは、ノード0から出てノード1に入ると
いわれる。
【0018】親テキスチャ・ノード5と子テキスチャ・
ノード1の間のエッジが戻りエッジであることを除いて
、親子関係はすべて同一である。しかしながら、この場
合には、戻りエッジが存在すると、親テキスチャ・ノー
ド5に固有の分岐遅延を減少させようと試みる際に、ノ
ード1のウィーブ成分が適格な候補命令を含んでいると
見なされる資格を失うのに十分な理由となる。戻りエッ
ジのゆえに、テキスチャ・ノード5はノード1を支配せ
ず、したがってノード1は、テキスチャ・ノード5の適
格な子ノードではない。それ以外の場合は、両方の子の
ウィーブ成分がなくなるか、または親に固有の分岐遅延
が除去されるまで、それぞれの子のウィーブ成分が、引
上げ可能な候補の命令があるかどうか交互に検査される
。その後、引上げの候補である命令が、親のウィーブ成
分に組み合わされる。
ノード1の間のエッジが戻りエッジであることを除いて
、親子関係はすべて同一である。しかしながら、この場
合には、戻りエッジが存在すると、親テキスチャ・ノー
ド5に固有の分岐遅延を減少させようと試みる際に、ノ
ード1のウィーブ成分が適格な候補命令を含んでいると
見なされる資格を失うのに十分な理由となる。戻りエッ
ジのゆえに、テキスチャ・ノード5はノード1を支配せ
ず、したがってノード1は、テキスチャ・ノード5の適
格な子ノードではない。それ以外の場合は、両方の子の
ウィーブ成分がなくなるか、または親に固有の分岐遅延
が除去されるまで、それぞれの子のウィーブ成分が、引
上げ可能な候補の命令があるかどうか交互に検査される
。その後、引上げの候補である命令が、親のウィーブ成
分に組み合わされる。
【0019】この成分を組み合わせる処理は、子成分か
らの候補命令を、対応する親成分に連結することを伴う
。候補命令を識別する処理は、本来的に機械によって変
わり、したがって、本明細書に開示された判断基準と方
法が与えられれば、どの命令が候補になるかは、使用さ
れる特定の機械用のコンパイラを記述する分野の当業者
には自明であろう。しかし、ほとんどの機械では、命令
セットのうちで、レジスタの内容のみに影響を及ぼして
、疑似的な副作用を伴わないサブセットが引上げ可能で
ある。任意選択として、コンパイラ設計の対象となる機
械ごとにルックアップ・テーブルを設ける。このような
テーブルは、特定の機械上で引上げ可能であるタイプの
命令のリストを含んでおり、これはその機械用のコンパ
イラを書く当業者の手で容易に用意できる。あるコード
・シーケンス内の所与の命令が引上げ可能であるか否か
を判定するステップの間に、その機械用のルックアップ
・テーブルを参照して、合否の回答を得る。
らの候補命令を、対応する親成分に連結することを伴う
。候補命令を識別する処理は、本来的に機械によって変
わり、したがって、本明細書に開示された判断基準と方
法が与えられれば、どの命令が候補になるかは、使用さ
れる特定の機械用のコンパイラを記述する分野の当業者
には自明であろう。しかし、ほとんどの機械では、命令
セットのうちで、レジスタの内容のみに影響を及ぼして
、疑似的な副作用を伴わないサブセットが引上げ可能で
ある。任意選択として、コンパイラ設計の対象となる機
械ごとにルックアップ・テーブルを設ける。このような
テーブルは、特定の機械上で引上げ可能であるタイプの
命令のリストを含んでおり、これはその機械用のコンパ
イラを書く当業者の手で容易に用意できる。あるコード
・シーケンス内の所与の命令が引上げ可能であるか否か
を判定するステップの間に、その機械用のルックアップ
・テーブルを参照して、合否の回答を得る。
【0020】親テキスチャのリーディング・エッジが子
の入口エッジであり、子のウィーブ成分がなくなった場
合、子のウェブ成分を親のウェブ成分と組み合わせて、
親の中により高いオーダのテキスチャを形成することに
よって、その子は親の中に折り込まれる。たとえば、図
1では、子ノード3または7のうちどちらかリーディン
グ・エッジ上にある方が、その子ノード内のすべての命
令がこの引上げ変換によってなくなった場合、親ノード
2に折り込まれることになる。親のトレーリング・エッ
ジが子の入口エッジである場合、子のウィーブ成分が親
のウィーブ成分と組み合わされる。ウェブ成分は変化し
ないままである。子ノードからの選択は、制御フローが
子ノードのうちの一方を優先することがわかっているか
否かに応じて、順に行っても、何らかの優先順序に従っ
てもよい。
の入口エッジであり、子のウィーブ成分がなくなった場
合、子のウェブ成分を親のウェブ成分と組み合わせて、
親の中により高いオーダのテキスチャを形成することに
よって、その子は親の中に折り込まれる。たとえば、図
1では、子ノード3または7のうちどちらかリーディン
グ・エッジ上にある方が、その子ノード内のすべての命
令がこの引上げ変換によってなくなった場合、親ノード
2に折り込まれることになる。親のトレーリング・エッ
ジが子の入口エッジである場合、子のウィーブ成分が親
のウィーブ成分と組み合わされる。ウェブ成分は変化し
ないままである。子ノードからの選択は、制御フローが
子ノードのうちの一方を優先することがわかっているか
否かに応じて、順に行っても、何らかの優先順序に従っ
てもよい。
【0021】一般に発生するコード構成は、IF−−T
HENステートメントである。図1に示したような制御
フローグラフで表すと、このようなステートメントのパ
ターンは、2つの子ノード9および10を有する親テキ
スチャ8として現れる。図示の構成は、親テキスチャが
2つの子ノードを有し、一方の子ノードがもう一方の子
ノードからの入口エッジを有する形式である。ノード9
を通る経路はノード10のみにつながり、したがってノ
ード10は、2つの親テキスチャすなわちノード8とノ
ード9の両方を有すると考えることができる。ノード9
に達するのは“IF”の条件が満足された場合であり、
ノード10は、その条件が満足されなかった場合のフォ
ールスルー経路を表している。ノード9はオーダが1で
ある、すなわち出口エッジが1つだけあり、これはノー
ド10につながっている。原則としては、子ノードが引
上げ可能と見なされるには、入口エッジを1つだけもた
なければならないのだが、それにもかかわらずこの“I
F−−THEN”型のフローグラフ・パターンは、引上
げ可能な命令を含むことができる。多くの形式のプログ
ラムでは、このようなパターンがかなりの数存在し、本
発明の方法に従った引上げにより、コンパイル済みのオ
ブジェクト・コード・プログラムを改善するための大き
な機会をもたらす。図1のノード8、9および10に示
すようなコード・パターンに出会った時、本発明による
コンパイラは、ノード9の命令をノード8に引き上げ、
かつノード10の命令をノード8に引き上げることがで
きる。ノード10からノード9への引上げは、ノード9
のオーダが1なので、この特別な場合でも有利にはなら
ないはずである。
HENステートメントである。図1に示したような制御
フローグラフで表すと、このようなステートメントのパ
ターンは、2つの子ノード9および10を有する親テキ
スチャ8として現れる。図示の構成は、親テキスチャが
2つの子ノードを有し、一方の子ノードがもう一方の子
ノードからの入口エッジを有する形式である。ノード9
を通る経路はノード10のみにつながり、したがってノ
ード10は、2つの親テキスチャすなわちノード8とノ
ード9の両方を有すると考えることができる。ノード9
に達するのは“IF”の条件が満足された場合であり、
ノード10は、その条件が満足されなかった場合のフォ
ールスルー経路を表している。ノード9はオーダが1で
ある、すなわち出口エッジが1つだけあり、これはノー
ド10につながっている。原則としては、子ノードが引
上げ可能と見なされるには、入口エッジを1つだけもた
なければならないのだが、それにもかかわらずこの“I
F−−THEN”型のフローグラフ・パターンは、引上
げ可能な命令を含むことができる。多くの形式のプログ
ラムでは、このようなパターンがかなりの数存在し、本
発明の方法に従った引上げにより、コンパイル済みのオ
ブジェクト・コード・プログラムを改善するための大き
な機会をもたらす。図1のノード8、9および10に示
すようなコード・パターンに出会った時、本発明による
コンパイラは、ノード9の命令をノード8に引き上げ、
かつノード10の命令をノード8に引き上げることがで
きる。ノード10からノード9への引上げは、ノード9
のオーダが1なので、この特別な場合でも有利にはなら
ないはずである。
【0022】プログラムは、その実行時間のほとんどを
、最も深くネストされた経路で費やすことが判明してい
る。したがって、深さ優先検索は、最も頻繁に発生する
可能性の高い命令遅延を招くので、これを検索ステップ
に使用することが好ましい。これらの遅延を最初に最小
にすると、より深いレベルの検索から引き上げられた候
補命令を使って、それより低いレベルの検索での遅延を
短縮することもできるという追加の利益が得られる。 下降形検索ではなく深さ優先検索が最も好ましいのは、
このためである。下降形検索を使用することも可能であ
るが、本発明の方法によって引き上げられる可能性のあ
る命令をすべて見つけるには、通常は、全レベルですべ
てのノードを数回検査する必要がある。
、最も深くネストされた経路で費やすことが判明してい
る。したがって、深さ優先検索は、最も頻繁に発生する
可能性の高い命令遅延を招くので、これを検索ステップ
に使用することが好ましい。これらの遅延を最初に最小
にすると、より深いレベルの検索から引き上げられた候
補命令を使って、それより低いレベルの検索での遅延を
短縮することもできるという追加の利益が得られる。 下降形検索ではなく深さ優先検索が最も好ましいのは、
このためである。下降形検索を使用することも可能であ
るが、本発明の方法によって引き上げられる可能性のあ
る命令をすべて見つけるには、通常は、全レベルですべ
てのノードを数回検査する必要がある。
【0023】例1
本発明の好ましい実施例の1例では、多数の条件レジス
タを有するRISCマシンを使用する。これらの例で、
引上げの候補命令には、S(減算)、A(加算)、C(
算術比較)およびCL(論理比較)が含まれる。話を簡
単にするために、その他すべての命令は、引上げ不能で
あると仮定する。本発明をコードの断片に適用する目的
は、比較命令と、プログラムの流れを異なる命令ストリ
ームに方向変更させる可能性のある条件付き分岐との間
のインターロックによって引き起こされる遅延を減少さ
せることである。比較命令は、条件付き分岐BTおよび
BFで使用される条件レジスタ(crx)を定義する。
タを有するRISCマシンを使用する。これらの例で、
引上げの候補命令には、S(減算)、A(加算)、C(
算術比較)およびCL(論理比較)が含まれる。話を簡
単にするために、その他すべての命令は、引上げ不能で
あると仮定する。本発明をコードの断片に適用する目的
は、比較命令と、プログラムの流れを異なる命令ストリ
ームに方向変更させる可能性のある条件付き分岐との間
のインターロックによって引き起こされる遅延を減少さ
せることである。比較命令は、条件付き分岐BTおよび
BFで使用される条件レジスタ(crx)を定義する。
【0024】本発明の方法による最適化の好ましい実施
例の1例は、図2のCプログラムの断片によって表され
るプログラム・セグメントである。これは、3つの値域
(−1..10)、(20..30)、(50..90
)のうちのいずれかの中にある試験変数の値に基づいて
、特定の処置を選択する。
例の1例は、図2のCプログラムの断片によって表され
るプログラム・セグメントである。これは、3つの値域
(−1..10)、(20..30)、(50..90
)のうちのいずれかの中にある試験変数の値に基づいて
、特定の処置を選択する。
【0025】コンパイルの最初のステップで、図2にC
で示した最適化すべきプログラムが、図3に中間コード
の形式で示すように、命令のシーケンスとして表される
。制御の流れが、図4に示すように、分析された後、フ
ローグラフによって表される。開始ノード0から始めて
フローグラフの深さ優先検索(DFS)を用いることに
よって、オーダ2のテキスチャとして分類できる基本ブ
ロックが識別される。図4では、ノード0、ノード1お
よびノード2がそれぞれこのようなテキスチャであり、
それぞれ2つの出口エッジを有する。ノード0の出口エ
ッジは記号(b)および(g)を付したエッジであり、
ノード1の出口エッジは記号(d)および(h)を付し
たエッジであり、ノード2の出口エッジは記号(f)お
よび(i)を付したエッジである。さらに、エッジ(b
)、(d)、(f)はリーディング・エッジであり、エ
ッジ(g)、(h)、(i)はトレーリング・エッジで
ある。
で示した最適化すべきプログラムが、図3に中間コード
の形式で示すように、命令のシーケンスとして表される
。制御の流れが、図4に示すように、分析された後、フ
ローグラフによって表される。開始ノード0から始めて
フローグラフの深さ優先検索(DFS)を用いることに
よって、オーダ2のテキスチャとして分類できる基本ブ
ロックが識別される。図4では、ノード0、ノード1お
よびノード2がそれぞれこのようなテキスチャであり、
それぞれ2つの出口エッジを有する。ノード0の出口エ
ッジは記号(b)および(g)を付したエッジであり、
ノード1の出口エッジは記号(d)および(h)を付し
たエッジであり、ノード2の出口エッジは記号(f)お
よび(i)を付したエッジである。さらに、エッジ(b
)、(d)、(f)はリーディング・エッジであり、エ
ッジ(g)、(h)、(i)はトレーリング・エッジで
ある。
【0026】DFS中にテキスチャとして識別された各
基本ブロックは、そのウィーブ成分およびウェブ成分に
再分割される。ノード0はノード8およびノード9に分
割される。ノード8は、この基本ブロックの終わりをマ
ークする条件付き分岐以外のすべての命令を含む、ウィ
ーブ成分である。ノード9は、その条件付き分岐だけを
含むウェブ成分である。図4で(a)として識別される
エッジは、テキスチャ・ノード0のウェブ成分とウィー
ブ成分を結び付けるエッジである。このエッジは、条件
付き分岐命令が条件レジスタcr134を規定する比較
命令に近接しているために存在する、パイプライン遅延
サイクルの数によって特徴づけられる。図3の命令番号
4にある原命令ストリームを参照すると、この遅延は3
サイクルであることがわかる。
基本ブロックは、そのウィーブ成分およびウェブ成分に
再分割される。ノード0はノード8およびノード9に分
割される。ノード8は、この基本ブロックの終わりをマ
ークする条件付き分岐以外のすべての命令を含む、ウィ
ーブ成分である。ノード9は、その条件付き分岐だけを
含むウェブ成分である。図4で(a)として識別される
エッジは、テキスチャ・ノード0のウェブ成分とウィー
ブ成分を結び付けるエッジである。このエッジは、条件
付き分岐命令が条件レジスタcr134を規定する比較
命令に近接しているために存在する、パイプライン遅延
サイクルの数によって特徴づけられる。図3の命令番号
4にある原命令ストリームを参照すると、この遅延は3
サイクルであることがわかる。
【0027】DFSの後退の間に、この例で検査すべき
最初のテキスチャは、ノード2であり、このとき子ノー
ド3および6を有する親ノードであると見なされる。エ
ッジ(e)も、上記エッジ(a)と同様の3サイクルの
遅延を含むものとして特徴づけられる。この2つの子ノ
ードの命令ストリームを検査して、テキスチャ・ノード
2のウィーブ成分、すなわちノード12に引き上げるべ
き候補命令を識別する。この例では、どちらの子にも候
補命令が存在しない。しかし、ノード3は、実際には空
のウィーブ成分を有するテキスチャであり、親のリーデ
ィング・エッジが子の入口エッジであるという条件を満
足している。このエッジはエッジ(f)である。したが
って、ウェブ成分のノード13とノード3を連結した後
、エッジ(f)を取り除くことによって、ノード3が親
テキスチャ・ノード2に折り込まれる。
最初のテキスチャは、ノード2であり、このとき子ノー
ド3および6を有する親ノードであると見なされる。エ
ッジ(e)も、上記エッジ(a)と同様の3サイクルの
遅延を含むものとして特徴づけられる。この2つの子ノ
ードの命令ストリームを検査して、テキスチャ・ノード
2のウィーブ成分、すなわちノード12に引き上げるべ
き候補命令を識別する。この例では、どちらの子にも候
補命令が存在しない。しかし、ノード3は、実際には空
のウィーブ成分を有するテキスチャであり、親のリーデ
ィング・エッジが子の入口エッジであるという条件を満
足している。このエッジはエッジ(f)である。したが
って、ウェブ成分のノード13とノード3を連結した後
、エッジ(f)を取り除くことによって、ノード3が親
テキスチャ・ノード2に折り込まれる。
【0028】DFS後退の次の部分の間には、ノード1
が、子ノード2および5を有する親ノードと見なされる
。ノード2の場合と同じく、子ノードを検査して候補命
令を探す。この例では、ノード5には候補が存在しない
が、ノード12の内容全体、すなわちテキスチャ・ノー
ド2のウィーブ成分が引上げ可能な命令であり、このそ
れぞれが引き上げられて、ノード10、すなわち親テキ
スチャ1のウィーブ成分の一部になる。ウィーブ・ノー
ド12がなくなったので、子テキスチャの内容は、ノー
ド2、3および6に関して上記で見たものと同様になる
。したがって、親テキスチャ・ノード1と子ノード2の
ウェブ成分とは、親のリーディング・エッジが、空のウ
ィーブを有する子の入口エッジであるという条件を満足
しているので、折り込まれる。次にそのエッジ、(d)
が除去される。図5は、この時点で得られた親テキスチ
ャを示す図である。このテキスチャは、オーダが3であ
る。
が、子ノード2および5を有する親ノードと見なされる
。ノード2の場合と同じく、子ノードを検査して候補命
令を探す。この例では、ノード5には候補が存在しない
が、ノード12の内容全体、すなわちテキスチャ・ノー
ド2のウィーブ成分が引上げ可能な命令であり、このそ
れぞれが引き上げられて、ノード10、すなわち親テキ
スチャ1のウィーブ成分の一部になる。ウィーブ・ノー
ド12がなくなったので、子テキスチャの内容は、ノー
ド2、3および6に関して上記で見たものと同様になる
。したがって、親テキスチャ・ノード1と子ノード2の
ウェブ成分とは、親のリーディング・エッジが、空のウ
ィーブを有する子の入口エッジであるという条件を満足
しているので、折り込まれる。次にそのエッジ、(d)
が除去される。図5は、この時点で得られた親テキスチ
ャを示す図である。このテキスチャは、オーダが3であ
る。
【0029】最後に、DFSから後退して、テキスチャ
・ノード0を考慮にいれ、本発明の方法をノード2およ
び1と同様にして部分グラフ全体に適用すると、図6に
示した、最終的な最適化されたコード・ストリームが得
られる。図6では、条件付き分岐命令のほとんどのサイ
クル数が0に減らされたことがわかる。わかりやすくす
るために、図6には原命令番号が示してある。
・ノード0を考慮にいれ、本発明の方法をノード2およ
び1と同様にして部分グラフ全体に適用すると、図6に
示した、最終的な最適化されたコード・ストリームが得
られる。図6では、条件付き分岐命令のほとんどのサイ
クル数が0に減らされたことがわかる。わかりやすくす
るために、図6には原命令番号が示してある。
【0030】例2
ロード命令Lも引上げ可能になるように、引上げ可能な
命令に関して異なる制約を仮定した場合、図4のフロー
グラフのエッジ(i)、(h)および(g)に沿って命
令を引き上げることから生ずる別のコード・ストリーム
が生成されるはずである。前の例では、これらのエッジ
上の子ノード、ノード6、5、4は、それぞれテキスチ
ャ・ノード2、1、0のウィーブ成分であるノード12
、10、9に引き上げるべき候補命令を含んでいなかっ
た。例1の場合、ロードに対する制約が、これらの各子
ノードに含まれる加算命令に対して間接的な制約を加え
た。この制約は、ロードが引上げ不能であるため、先行
するロード命令が完了するまで加算オペランドの一方が
使用不能なので、加算を引き上げてはならないというこ
とである。加算は引上げ可能な候補であるにもかかわら
ず、この場合の加算命令は、ロードに従属しており、し
たがってそのロードより前に移動してはならない。この
型式の制約が特定の環境に適用されることは、その環境
でのプログラム作成の熟練者には明白である。ロード命
令に対する制約が緩和されたと仮定すると、ロードを引
き上げる場合、加算も引上げ可能になる。図7の、その
結果得られるコード・ストリームを参照すると、このよ
うな加算命令が1つ、すなわち命令番号22が引き上げ
られたことがわかる。この最適化に続いて、条件付き分
岐命令10の遅延が0に減らされる。この遅延は、以前
の制約が有効であったときは1サイクルであった。
命令に関して異なる制約を仮定した場合、図4のフロー
グラフのエッジ(i)、(h)および(g)に沿って命
令を引き上げることから生ずる別のコード・ストリーム
が生成されるはずである。前の例では、これらのエッジ
上の子ノード、ノード6、5、4は、それぞれテキスチ
ャ・ノード2、1、0のウィーブ成分であるノード12
、10、9に引き上げるべき候補命令を含んでいなかっ
た。例1の場合、ロードに対する制約が、これらの各子
ノードに含まれる加算命令に対して間接的な制約を加え
た。この制約は、ロードが引上げ不能であるため、先行
するロード命令が完了するまで加算オペランドの一方が
使用不能なので、加算を引き上げてはならないというこ
とである。加算は引上げ可能な候補であるにもかかわら
ず、この場合の加算命令は、ロードに従属しており、し
たがってそのロードより前に移動してはならない。この
型式の制約が特定の環境に適用されることは、その環境
でのプログラム作成の熟練者には明白である。ロード命
令に対する制約が緩和されたと仮定すると、ロードを引
き上げる場合、加算も引上げ可能になる。図7の、その
結果得られるコード・ストリームを参照すると、このよ
うな加算命令が1つ、すなわち命令番号22が引き上げ
られたことがわかる。この最適化に続いて、条件付き分
岐命令10の遅延が0に減らされる。この遅延は、以前
の制約が有効であったときは1サイクルであった。
【0031】例3
3つではなく2つの命令の分岐遅延が除去されるという
、もう1つのより簡単な例を以下に示す。
、もう1つのより簡単な例を以下に示す。
【0032】例4
2つの命令の分岐遅延が除去されるという、もう1つの
例を以下に示す。この場合、ST命令は、変数への記憶
を表す。この例では、一部の当業者に知られているなん
らかの他の最適化では、効率を高めるため、ユーザ指定
のラベルLLに先行するすべての実行経路で、変数a、
b、cの値をそれぞれレジスタr100、r200、r
300に事前ロードすべきことがわかっていると仮定す
る。この結果パイプライン遅延が生ずるが、その遅延を
含む基本ブロックはスケジュール可能な命令を含んでい
ないので、この遅延は本発明の適用によってしか除去で
きない。
例を以下に示す。この場合、ST命令は、変数への記憶
を表す。この例では、一部の当業者に知られているなん
らかの他の最適化では、効率を高めるため、ユーザ指定
のラベルLLに先行するすべての実行経路で、変数a、
b、cの値をそれぞれレジスタr100、r200、r
300に事前ロードすべきことがわかっていると仮定す
る。この結果パイプライン遅延が生ずるが、その遅延を
含む基本ブロックはスケジュール可能な命令を含んでい
ないので、この遅延は本発明の適用によってしか除去で
きない。
【0033】従来技術では、レジスタ割振りより以前の
コードの並べ替えは、いくつかの理由から奨励されなか
った。第1に、スケジューリングによってレジスタの寿
命が延びる傾向があり、レジスタの寿命が長いと、余分
なレジスタ・スピル・コードが導入される傾向があるの
で、「良好な」レジスタ割振りを得ることが難しくなる
。第2に、命令間に存在するある種のインターロックの
特性が、レジスタの割当てが完了するまでわからない。 第3に、コード生成の時点で最適化を実行する場合、特
に異なる中間コードを用いる場合には、各コンパイラが
何らかの形態の最適化を実施しなければならない。しか
し、レジスタ割振りと命令選択の後に適用される技法が
、ハンド・コーディングされたアセンブリ・コードにも
適用できる。
コードの並べ替えは、いくつかの理由から奨励されなか
った。第1に、スケジューリングによってレジスタの寿
命が延びる傾向があり、レジスタの寿命が長いと、余分
なレジスタ・スピル・コードが導入される傾向があるの
で、「良好な」レジスタ割振りを得ることが難しくなる
。第2に、命令間に存在するある種のインターロックの
特性が、レジスタの割当てが完了するまでわからない。 第3に、コード生成の時点で最適化を実行する場合、特
に異なる中間コードを用いる場合には、各コンパイラが
何らかの形態の最適化を実施しなければならない。しか
し、レジスタ割振りと命令選択の後に適用される技法が
、ハンド・コーディングされたアセンブリ・コードにも
適用できる。
【0034】本発明は、いくつかの利益を提供すること
によって、これらの欠点を克服する。レジスタ寿命が引
き延ばされるにもかかわらず、この引き延ばしの性質は
、レジスタの「定義位置」が、単に直線状のコードの前
の方に移動するのではなくて、フローグラフの高位側の
ノードに引き上げられることに起因している。これは、
ループ外に、あるいは少なくとも「ジャム領域」(レジ
スタ資源利用度が最大の領域)の中心から離れたところ
へ計算を移す効果に類似している。この引上げの結果と
してレジスタ・スピル・コードが発生する場合、それは
、「活領域分割」を用いてジャム領域を短くする際に、
フローグラフのより高い位置に挿入される可能性が高い
。第2に、現在の機械は、通常、旧式の装置よりも多数
のレジスタ・セットを使用しており、十分なレジスタが
利用可能な場合には、ほとんどのプログラムはスピル・
コードを含まない。好ましい実施例では、レジスタ割振
り処理の前には未知であった新しいインターロック状況
が、レジスタ割振り処理によって導入されない。 高水準言語に向かう傾向が増大し、汎用最適化機能およ
びコード生成機能が使用されるので、上述した複数の実
施様態のコストは、急速に小さくなってきている。本発
明の方法は、いかなる最適化コンパイラとも使用可能で
あり、例えばFORTRAN、C、PASCAL、PL
/Iなど、単一の最適化機能とコード生成機能を有する
いくつかのコンパイラで試験済みである。
によって、これらの欠点を克服する。レジスタ寿命が引
き延ばされるにもかかわらず、この引き延ばしの性質は
、レジスタの「定義位置」が、単に直線状のコードの前
の方に移動するのではなくて、フローグラフの高位側の
ノードに引き上げられることに起因している。これは、
ループ外に、あるいは少なくとも「ジャム領域」(レジ
スタ資源利用度が最大の領域)の中心から離れたところ
へ計算を移す効果に類似している。この引上げの結果と
してレジスタ・スピル・コードが発生する場合、それは
、「活領域分割」を用いてジャム領域を短くする際に、
フローグラフのより高い位置に挿入される可能性が高い
。第2に、現在の機械は、通常、旧式の装置よりも多数
のレジスタ・セットを使用しており、十分なレジスタが
利用可能な場合には、ほとんどのプログラムはスピル・
コードを含まない。好ましい実施例では、レジスタ割振
り処理の前には未知であった新しいインターロック状況
が、レジスタ割振り処理によって導入されない。 高水準言語に向かう傾向が増大し、汎用最適化機能およ
びコード生成機能が使用されるので、上述した複数の実
施様態のコストは、急速に小さくなってきている。本発
明の方法は、いかなる最適化コンパイラとも使用可能で
あり、例えばFORTRAN、C、PASCAL、PL
/Iなど、単一の最適化機能とコード生成機能を有する
いくつかのコンパイラで試験済みである。
【0035】テスト・ケースでの相対的な性能利得は、
この種のパイプライン遅延に起因して失われるサイクル
時間の量に応じて大きく変わる傾向がある。適当な量の
パイプライン遅延を含むテスト・ケースでは、性能利得
が30%もの高さになることがある。コンパイル時のコ
ストは、利用された機会の数と検索の固定オーバヘッド
との和に比例し、その合計は通常コンパイル時間の1%
以下である。上述したように、最も頻繁に実行される、
遅延を減少させる引上げの機会を最初に見つけるので、
深さ優先検索が下降形検索よりも好ましい。また、深さ
優先検索は、下降形検索よりもオーバヘッドが少ない。
この種のパイプライン遅延に起因して失われるサイクル
時間の量に応じて大きく変わる傾向がある。適当な量の
パイプライン遅延を含むテスト・ケースでは、性能利得
が30%もの高さになることがある。コンパイル時のコ
ストは、利用された機会の数と検索の固定オーバヘッド
との和に比例し、その合計は通常コンパイル時間の1%
以下である。上述したように、最も頻繁に実行される、
遅延を減少させる引上げの機会を最初に見つけるので、
深さ優先検索が下降形検索よりも好ましい。また、深さ
優先検索は、下降形検索よりもオーバヘッドが少ない。
【0036】本発明のスケジューリング技法は、プログ
ラムによって最終的に選択される実際の実行経路とは無
関係に、条件付き実行経路から計算の引上げを実行する
が、そうでなければ、引き上げられた計算を計算するの
に必要なサイクルが完全に失われるはずであるという利
益が、これを補って余りある。この技法は、外部から提
供される何らかのデータによって、特定の実行経路の確
率がコンパイル時にわかっている場合、当業者には既知
の方法によって、条件付き制御経路の適当な側からの引
上げが有利になるように、容易に修正することができる
。
ラムによって最終的に選択される実際の実行経路とは無
関係に、条件付き実行経路から計算の引上げを実行する
が、そうでなければ、引き上げられた計算を計算するの
に必要なサイクルが完全に失われるはずであるという利
益が、これを補って余りある。この技法は、外部から提
供される何らかのデータによって、特定の実行経路の確
率がコンパイル時にわかっている場合、当業者には既知
の方法によって、条件付き制御経路の適当な側からの引
上げが有利になるように、容易に修正することができる
。
【0037】
【発明の効果】本発明は、コード・ストリーム内の特定
の命令の実行中に、マイクロプロセッサによって導入さ
れるパイプライン・インターロック遅延を含むことがわ
かっているコード・ストリーム内に、選択された命令を
挿入することによって、上記遅延の減少を実現する。
の命令の実行中に、マイクロプロセッサによって導入さ
れるパイプライン・インターロック遅延を含むことがわ
かっているコード・ストリーム内に、選択された命令を
挿入することによって、上記遅延の減少を実現する。
【図1】基本ブロックを形成する1つまたは複数の命令
を表すノードを有する、典型的なプログラムの断片の制
御フローグラフである。
を表すノードを有する、典型的なプログラムの断片の制
御フローグラフである。
【図2】3つの範囲(−1..10)、(20..30
)、(50..90)のうちのいずれかに含まれる値が
あるか否かをテストする多岐分岐を伴う、C言語のソー
ス・コードの断片を示す図である。
)、(50..90)のうちのいずれかに含まれる値が
あるか否かをテストする多岐分岐を伴う、C言語のソー
ス・コードの断片を示す図である。
【図3】図2に含まれるソース・テキストの可能な、中
間言語表現を示す図である。
間言語表現を示す図である。
【図4】図3の中間言語表現から導出された制御フロー
グラフである。
グラフである。
【図5】図4のノード1に根を持つ部分グラフに本発明
を適用した後の、ノード1のテキスチャである。
を適用した後の、ノード1のテキスチャである。
【図6】本発明を適用した後の、図2に含まれるソース
・テキストの最適化された中間言語表現である。
・テキストの最適化された中間言語表現である。
【図7】本発明を適用した後の、図2に含まれるソース
・テキストの別の最適化された中間言語表現である。
・テキストの別の最適化された中間言語表現である。
Claims (13)
- 【請求項1】コンピュータ内の命令のシーケンスによる
クロック・サイクルの利用を改善する方法であって、(
a)前記命令を制御フローグラフ中で表すステップと、 (b)前記フローグラフ中の第1ノードから検索して、
オーダが少なくとも2のテキスチャである部分グラフを
識別するステップと、 (c)前記の各テキスチャについて、 (i)あるオーダのテキスチャを形成する各子ノード内
の命令を検査し、 (ii)各命令が引上げ可能であるか否かを判定し、(
iii)前記命令が引上げ可能である場合、前記子ノー
ドからの前記命令をその親テキスチャに組み合わせるス
テップと、 (d)子ノードからのすべての候補命令がなくなるか、
あるいは前記親ノードに固有の遅延が除去されるまで、
各子ノードについてステップ(i)ないし(iii)を
続行するステップとを含む方法。 - 【請求項2】前記検索が深さ優先検索である、請求項1
に記載の方法。 - 【請求項3】前記検索が下降形検索である、請求項1に
記載の方法。 - 【請求項4】さらに、子ノード内のすべての命令が親テ
キスチャに移動されたか否かを判定し、そうである場合
には前記子ノードを前記親テキスチャに折り込むステッ
プを含む、請求項1に記載の方法。 - 【請求項5】前記テキスチャが、2つの子ノードを有す
る親テキスチャを含み、前記子ノードの一方が、前記子
ノードの他方からの入口エッジを有する、請求項1に記
載の方法。 - 【請求項6】命令が引上げ可能であるか否かを判定する
前記ステップが、前記改良を達成すべき特定の機械用の
、前記機械上で引上げ可能な命令のリストを含む、ルッ
クアップ・テーブルを選択するステップと、前記命令が
前記ルックアップ・テーブル内で見つかるか否かを判定
するステップを含む、請求項1ないし5のいずれかに記
載の方法。 - 【請求項7】コンピュータ上で実行されるプログラムを
最適化するための改良されたコンパイラであって、(a
)前記プログラムを命令のシーケンスとして表す手段と
、 (b)前記プログラムの制御フローを制御フローグラフ
として表す手段と、 (c)前記フローグラフ中の第1ノードから検索して、
オーダが少なくとも2のテキスチャである部分グラフを
識別する手段と、 (d)前記部分グラフのリストを作成する手段と、(e
)前記検索から出る手段と、 (f)オーダが少なくとも2のテキスチャを有する、前
記ノードの各子ノードを検査する手段と、(g)各子ノ
ードが、オーダが少なくとも2のテキスチャを有する前
記部分グラフに移動できる命令を含むか否かを判定する
手段と、 (h)前記命令を前記親ノードに移動する手段と、(i
)前記の各子ノード内のすべての命令が移動されたか否
かを判定する手段と (j)前記親ノードに固有の遅延が除去されたか否かを
判定する手段とを含むコンパイラ・システム。 - 【請求項8】前記検索手段が深さ優先検索を実行する、
請求項7に記載のコンパイラ・システム。 - 【請求項9】前記検索手段が下降形検索を実行する、請
求項7に記載のコンパイラ・システム。 - 【請求項10】さらに、前記子ノードを前記親ノードに
折り込む手段を含む、請求項7に記載のコンパイラ・シ
ステム。 - 【請求項11】前記テキスチャが、2つの子ノードを有
する親テキスチャを含み、前記子ノードの一方が、前記
子ノードの他方からの入口エッジを有する、請求項7に
記載のコンパイラ・システム。 - 【請求項12】さらに、前記改良を達成すべき特定の機
械用の、前記機械上で引上げ可能な命令のリストを含む
、ルックアップ・テーブルを含む、請求項7ないし11
のいずれかに記載の改良されたコンパイラ・システム。 - 【請求項13】システム上で実行されるプログラムを最
適化するための命令のセットを含むデジタル・データ処
理システムであって、 (a)前記プログラムをデジタル・データ処理シーケン
スとして表す手段と、 (b)前記プログラムの制御フローを制御フローグラフ
として表す手段と、 (c)前記フローグラフ中の第1ノードから検索して、
オーダが少なくとも2のテキスチャであるノードを識別
する手段と、 (d)前記オーダが少なくとも2のテキスチャのリスト
を作成する手段と、 (e)前記検索から出る手段と、 (f)オーダが少なくとも2のテキスチャを有する、前
記ノードの各子ノードを検査する手段と、(g)各子ノ
ードが、オーダが少なくとも2のテキスチャを有する前
記ノードに移動できる命令を含むか否かを判定する手段
と、 (h)前記命令を前記親ノードに移動する手段と、(i
)前記の各子ノード内のすべての命令が移動されたか否
かを判定する手段と、 (j)前記親ノードに固有の遅延が除去されたか否かを
判定する手段とを含むシステム。
Applications Claiming Priority (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CA002010067A CA2010067C (en) | 1990-02-14 | 1990-02-14 | Reducing pipeline delays in compilers by code hoisting |
| CA2010067 | 1990-02-14 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| JPH04215133A true JPH04215133A (ja) | 1992-08-05 |
| JPH0738158B2 JPH0738158B2 (ja) | 1995-04-26 |
Family
ID=4144297
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP3040550A Expired - Lifetime JPH0738158B2 (ja) | 1990-02-14 | 1991-02-13 | コード最適化方法およびコンパイラ・システム |
Country Status (5)
| Country | Link |
|---|---|
| US (1) | US5450588A (ja) |
| EP (1) | EP0442623A3 (ja) |
| JP (1) | JPH0738158B2 (ja) |
| BR (1) | BR9100576A (ja) |
| CA (1) | CA2010067C (ja) |
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2014206977A (ja) * | 2013-04-12 | 2014-10-30 | 富士通株式会社 | ソフトウェアメトリクスの決定 |
Families Citing this family (16)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH06259262A (ja) * | 1993-03-08 | 1994-09-16 | Fujitsu Ltd | 分岐確率を設定するコンパイラの処理方法および処理装置 |
| JPH0844561A (ja) * | 1994-07-28 | 1996-02-16 | Fujitsu Ltd | ブースティング制御方法及びブースティング制御機構を備えたプロセッサ装置 |
| EP0755003A2 (en) * | 1995-07-19 | 1997-01-22 | Sun Microsystems, Inc. | Method and apparatus for reordering components of computer programs |
| US5721893A (en) * | 1996-05-14 | 1998-02-24 | Hewlett-Packard Company | Exploiting untagged branch prediction cache by relocating branches |
| JP3237693B2 (ja) * | 1996-08-19 | 2001-12-10 | 日本電気株式会社 | 言語処理装置および言語処理方法 |
| US5999736A (en) * | 1997-05-09 | 1999-12-07 | Intel Corporation | Optimizing code by exploiting speculation and predication with a cost-benefit data flow analysis based on path profiling information |
| US6230317B1 (en) * | 1997-07-11 | 2001-05-08 | Intel Corporation | Method and apparatus for software pipelining of nested loops |
| US6487715B1 (en) * | 1999-04-16 | 2002-11-26 | Sun Microsystems, Inc. | Dynamic code motion optimization and path tracing |
| US7100124B2 (en) * | 2000-07-03 | 2006-08-29 | Cadence Design Systems, Inc. | Interface configurable for use with target/initiator signals |
| US6701518B1 (en) * | 2000-08-03 | 2004-03-02 | Hewlett-Packard Development Company, L.P. | System and method for enabling efficient processing of a program that includes assertion instructions |
| GB0025053D0 (en) * | 2000-10-12 | 2000-11-29 | Sgs Thomson Microelectronics | Compiling computer programs including branch instructions |
| GB0025052D0 (en) * | 2000-10-12 | 2000-11-29 | Sgs Thomson Microelectronics | Compiling computer programs including branch instructions |
| WO2008019528A1 (en) * | 2006-08-08 | 2008-02-21 | Intel Corporation | Methods and apparatus to optimize computer instruction |
| US8484630B2 (en) * | 2008-12-23 | 2013-07-09 | International Business Machines Corporation | Code motion based on live ranges in an optimizing compiler |
| CN112035116B (zh) * | 2020-08-26 | 2021-07-16 | 大连理工大学 | 多目标编译优化序列选择的代理建模方法 |
| US11500673B2 (en) * | 2020-09-02 | 2022-11-15 | International Business Machines Corporation | Dynamically generating an optimized processing pipeline for tasks |
Citations (3)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPS6155737A (ja) * | 1984-08-27 | 1986-03-20 | Fujitsu Ltd | 不変式の移動方式 |
| JPS63186333A (ja) * | 1987-01-28 | 1988-08-01 | Nec Corp | 局所的分岐命令に対する命令のスケジユ−リング処理方式 |
| JPH01214936A (ja) * | 1988-02-24 | 1989-08-29 | Hitachi Ltd | 最適化コンパイラ |
Family Cites Families (12)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US4435758A (en) * | 1980-03-10 | 1984-03-06 | International Business Machines Corporation | Method for conditional branch execution in SIMD vector processors |
| US4642764A (en) * | 1984-08-13 | 1987-02-10 | International Business Machines Corporation | Method of developing formal identities and program bases in an optimizing compiler |
| US4656583A (en) * | 1984-08-13 | 1987-04-07 | International Business Machines Corporation | Method for improving global common subexpression elimination and code motion in an optimizing compiler |
| US4667290A (en) * | 1984-09-10 | 1987-05-19 | 501 Philon, Inc. | Compilers using a universal intermediate language |
| JPS6226535A (ja) * | 1985-07-22 | 1987-02-04 | インタ−ナショナル ビジネス マシ−ンズ コ−ポレ−ション | プログラム内の変換テ−ブルの修正方法 |
| US4782444A (en) * | 1985-12-17 | 1988-11-01 | International Business Machine Corporation | Compilation using two-colored pebbling register allocation method such that spill code amount is invariant with basic block's textual ordering |
| US5021947A (en) * | 1986-03-31 | 1991-06-04 | Hughes Aircraft Company | Data-flow multiprocessor architecture with three dimensional multistage interconnection network for efficient signal and data processing |
| US5133072A (en) * | 1986-11-13 | 1992-07-21 | Hewlett-Packard Company | Method for improved code generation in reduced instruction set computers |
| US5050068A (en) * | 1988-10-03 | 1991-09-17 | Duke University | Method and apparatus for using extracted program flow information to prepare for execution multiple instruction streams |
| US5202995A (en) * | 1989-10-12 | 1993-04-13 | International Business Machines Corporation | Method for removing invariant branches from instruction loops of a computer program |
| US5119495A (en) * | 1989-12-21 | 1992-06-02 | Bull Hn Information Systems Inc. | Minimizing hardware pipeline breaks using software scheduling techniques during compilation |
| US5107418A (en) * | 1990-06-11 | 1992-04-21 | Supercomputer Systems Limited Partnership | Method for representing scalar data dependences for an optimizing compiler |
-
1990
- 1990-02-14 CA CA002010067A patent/CA2010067C/en not_active Expired - Fee Related
-
1991
- 1991-01-23 EP EP19910300524 patent/EP0442623A3/en not_active Withdrawn
- 1991-02-08 BR BR919100576A patent/BR9100576A/pt unknown
- 1991-02-13 JP JP3040550A patent/JPH0738158B2/ja not_active Expired - Lifetime
-
1993
- 1993-07-12 US US08/090,984 patent/US5450588A/en not_active Expired - Fee Related
Patent Citations (3)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPS6155737A (ja) * | 1984-08-27 | 1986-03-20 | Fujitsu Ltd | 不変式の移動方式 |
| JPS63186333A (ja) * | 1987-01-28 | 1988-08-01 | Nec Corp | 局所的分岐命令に対する命令のスケジユ−リング処理方式 |
| JPH01214936A (ja) * | 1988-02-24 | 1989-08-29 | Hitachi Ltd | 最適化コンパイラ |
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2014206977A (ja) * | 2013-04-12 | 2014-10-30 | 富士通株式会社 | ソフトウェアメトリクスの決定 |
Also Published As
| Publication number | Publication date |
|---|---|
| CA2010067C (en) | 1993-10-26 |
| EP0442623A2 (en) | 1991-08-21 |
| EP0442623A3 (en) | 1993-01-07 |
| BR9100576A (pt) | 1991-10-29 |
| CA2010067A1 (en) | 1991-08-14 |
| JPH0738158B2 (ja) | 1995-04-26 |
| US5450588A (en) | 1995-09-12 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US6487715B1 (en) | Dynamic code motion optimization and path tracing | |
| US6718541B2 (en) | Register economy heuristic for a cycle driven multiple issue instruction scheduler | |
| US6988183B1 (en) | Methods for increasing instruction-level parallelism in microprocessors and digital system | |
| US5202975A (en) | Method for optimizing instruction scheduling for a processor having multiple functional resources | |
| JPH04215133A (ja) | コード最適化方法およびコンパイラ・システム | |
| US5761514A (en) | Register allocation method and apparatus for truncating runaway lifetimes of program variables in a computer system | |
| JP3311462B2 (ja) | コンパイル処理装置 | |
| EP1115059A2 (en) | Method for collapsing the prolog and epilog of software pipelined loops | |
| US20030066061A1 (en) | Method and apparatus for performing compiler transformation of software code using fastforward regions and value specialization | |
| Chang et al. | The importance of prepass code scheduling for superscalar and superpipelined processors | |
| US5809308A (en) | Method and apparatus for efficient determination of an RMII vector for modulo scheduled loops in an optimizing compiler | |
| JPH06250846A (ja) | コンパイル装置 | |
| JPH0792752B2 (ja) | 命令スケジューラ及び入力命令シーケンスを再スケジュールする方法 | |
| US5901318A (en) | Method and system for optimizing code | |
| JPH10161884A (ja) | パイプラインコンピュータのための改善されたコードオプティマイザ | |
| US5854933A (en) | Method for optimizing a computer program by moving certain load and store instructions out of a loop | |
| Schlansker et al. | Height reduction of control recurrences for ILP processors | |
| JP3311381B2 (ja) | コンパイラにおける命令スケジューリング処理方法 | |
| EP0535107B1 (en) | Method for optimizing instruction scheduling | |
| Lee et al. | Software pipelining and superblock scheduling: compilation techniques for VLIW machines | |
| Mantripragada et al. | A new framework for integrated global local scheduling | |
| US7114151B2 (en) | Code conversion method and apparatus | |
| August | Hyperblock performance optimizations for ILP processors | |
| JPH06290057A (ja) | ループ最適化方法 | |
| Berson et al. | Integrating program optimizations and transformations with the scheduling of instruction level parallelism |