JPS62144247A - コンパイル方法 - Google Patents
コンパイル方法Info
- Publication number
- JPS62144247A JPS62144247A JP61266812A JP26681286A JPS62144247A JP S62144247 A JPS62144247 A JP S62144247A JP 61266812 A JP61266812 A JP 61266812A JP 26681286 A JP26681286 A JP 26681286A JP S62144247 A JPS62144247 A JP S62144247A
- Authority
- JP
- Japan
- Prior art keywords
- registers
- register
- clause
- graph
- nodes
- 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
- 230000015654 memory Effects 0.000 claims description 32
- 238000000034 method Methods 0.000 claims description 20
- 238000005457 optimization Methods 0.000 claims description 19
- 238000004364 calculation method Methods 0.000 description 12
- 238000004040 coloring Methods 0.000 description 6
- 238000010586 diagram Methods 0.000 description 4
- 239000003086 colorant Substances 0.000 description 3
- 230000005574 cross-species transmission Effects 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 238000013468 resource allocation Methods 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- 238000013519 translation Methods 0.000 description 2
- 101150097504 LHX1 gene Proteins 0.000 description 1
- 241001465754 Metazoa Species 0.000 description 1
- 241001208007 Procas Species 0.000 description 1
- 101100082623 Rattus norvegicus Pdlim7 gene Proteins 0.000 description 1
- 241001274197 Scatophagus argus Species 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 150000001768 cations Chemical class 0.000 description 1
- 239000003795 chemical substances by application Substances 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 230000001747 exhibiting effect Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000000844 transformation Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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/441—Register allocation; Assignment of physical memory space to logical memory space
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & 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
【発明の詳細な説明】
A、産業上の利用分野
本発明は、スカシ・プロセッサまたはベクトル・プロセ
ッサにおいて、原始コード(ソース・コード)をマシン
の実行可能なコードにコンパイルする際に、レジスタの
割り当ての最適化を行う方法に関する。
ッサにおいて、原始コード(ソース・コード)をマシン
の実行可能なコードにコンパイルする際に、レジスタの
割り当ての最適化を行う方法に関する。
B、従来技術およびその問題点
コンパイラの作成に関する標準的な著作の中で、Aha
等による“Pr1nciples of Compil
er Design”、Addision−Wesle
y Publishing Co、、1977、および
Waite等による“Compiler Con5tr
uction”。
等による“Pr1nciples of Compil
er Design”、Addision−Wesle
y Publishing Co、、1977、および
Waite等による“Compiler Con5tr
uction”。
Springer−Verlag、 1984は、PA
SCALやFORTRAN等のコンピュータの原始言語
を、ターゲット・マシンによって実行可能なコードに変
換する場合、一連の変形(トランスフォーメーション)
を経ることを指摘している。まず、原始記号のストリン
グは字句的に解析されて、翻訳用の原始的ユニツ1〜ま
たはワードが確定され、続いて構文的に解析されて、ワ
ード間の文法的関係を確定する。
SCALやFORTRAN等のコンピュータの原始言語
を、ターゲット・マシンによって実行可能なコードに変
換する場合、一連の変形(トランスフォーメーション)
を経ることを指摘している。まず、原始記号のストリン
グは字句的に解析されて、翻訳用の原始的ユニツ1〜ま
たはワードが確定され、続いて構文的に解析されて、ワ
ード間の文法的関係を確定する。
出力は、「解析木」の形で表現される。解析木は。
原始コードの中間言語表現に変形される。はとんどのコ
ンパイラは、解析木を明示的に生成しないで、構文的解
析が生じる際に、中間コードを形成する。続いて、中間
コードに対して最適化が施され、その後、ターゲット・
マシンの実行可能なオブジェクト・コードが生成される
。
ンパイラは、解析木を明示的に生成しないで、構文的解
析が生じる際に、中間コードを形成する。続いて、中間
コードに対して最適化が施され、その後、ターゲット・
マシンの実行可能なオブジェクト・コードが生成される
。
コンパイラが実行しなければならないタスクの中には、
原始コード命令のストリームによって指定される計算を
効率よく完了できるようにするための、計算資源の割り
当て・指定がある。使用可能な「資源」の中には、AL
U (演算論理機構)のような計算機構、入力/出力、
レジスタを含むメモリ、および、オペレーティング・シ
ステム要素等が含まれる。コンパイラの最適化部の目的
は、(a)コートのサイズを縮める(b)可能な場合、
実行速度を上げる(c)効率のよい資源割当てにより、
コストを最小限にすることにある。資源使用または消費
パターンのスケジュールは、コンパイルされつつあるコ
ードに組み込まれる。
原始コード命令のストリームによって指定される計算を
効率よく完了できるようにするための、計算資源の割り
当て・指定がある。使用可能な「資源」の中には、AL
U (演算論理機構)のような計算機構、入力/出力、
レジスタを含むメモリ、および、オペレーティング・シ
ステム要素等が含まれる。コンパイラの最適化部の目的
は、(a)コートのサイズを縮める(b)可能な場合、
実行速度を上げる(c)効率のよい資源割当てにより、
コストを最小限にすることにある。資源使用または消費
パターンのスケジュールは、コンパイルされつつあるコ
ードに組み込まれる。
よく知られているように、命令のストリームをグラフ構
造に写像(マツプ)して、グラフ理論の特性を利用する
ことができる。コード列は、局所的最適化に関しては基
本ブロックのグラフィカルな特性により、そして大域的
最適化に関してはブロックのフロー・グラフにより、そ
れぞれ解析可能である。
造に写像(マツプ)して、グラフ理論の特性を利用する
ことができる。コード列は、局所的最適化に関しては基
本ブロックのグラフィカルな特性により、そして大域的
最適化に関してはブロックのフロー・グラフにより、そ
れぞれ解析可能である。
基本ブロックとは、連続するステートメントの列である
。この列は始めからしか入ることができず、一度入ると
停止したり分岐したりすることなく(ただし、列の終わ
りは除く)順番に実行される。
。この列は始めからしか入ることができず、一度入ると
停止したり分岐したりすることなく(ただし、列の終わ
りは除く)順番に実行される。
フロー・グラフは、基本ブロックの間の制御の流れを記
述する。フロー・グラフは、例えば、繰返し計算または
再帰的計算に必要な、基本ブロックの間のルーピング1
、ブランチングおよびネスティングの振舞を示す。
述する。フロー・グラフは、例えば、繰返し計算または
再帰的計算に必要な、基本ブロックの間のルーピング1
、ブランチングおよびネスティングの振舞を示す。
データ依存性に関する閉路のない有向グラフ(DAG)
とは、基本ブロックを解析するデータ構造である。例え
ば、a = s + cは、b+cにより、それぞれの
辺を通してそれぞれが共通節Cに接続される開始節とし
て表現される。フロー・グラフの節(基本ブロック)は
それぞれDAGによって表現され得るけれども、それは
フロー・グラフではない。
とは、基本ブロックを解析するデータ構造である。例え
ば、a = s + cは、b+cにより、それぞれの
辺を通してそれぞれが共通節Cに接続される開始節とし
て表現される。フロー・グラフの節(基本ブロック)は
それぞれDAGによって表現され得るけれども、それは
フロー・グラフではない。
「生変数解析」は、名前が後で計算に使われるかもしれ
ない値を持つか否かを確定する一群の技術を指す。名前
が基本ブロック内で再定義される前に使われるか、また
は、該ブロックから「生きて」出てきて該ブロック内で
「再定義」されないならば、その名前はブロックに[生
きて」入ると考えられる。その結果、レジスタである値
が計算され、基本ブロック内で用いられると推定された
後に、該値がブロックの終わりで「死んで」いるならば
、該値を記憶する必要はない。また、レジスタがすべて
一杯であり、かつ別のレジスタが必要であるならば、「
死んでいる」値を現在含むレジスタに対して、指定がな
され得る。
ない値を持つか否かを確定する一群の技術を指す。名前
が基本ブロック内で再定義される前に使われるか、また
は、該ブロックから「生きて」出てきて該ブロック内で
「再定義」されないならば、その名前はブロックに[生
きて」入ると考えられる。その結果、レジスタである値
が計算され、基本ブロック内で用いられると推定された
後に、該値がブロックの終わりで「死んで」いるならば
、該値を記憶する必要はない。また、レジスタがすべて
一杯であり、かつ別のレジスタが必要であるならば、「
死んでいる」値を現在含むレジスタに対して、指定がな
され得る。
概念的に言って、第1のコンパイラ・トランスフォーメ
ーションは、原始コードのストリングのフロー・グラフ
への写像からなる。フロー・グラフの節のそれぞれは基
本ブロックであり、かつフロー・グラフの制御とデータ
・パスの関係は、フロー・グラフの有向辺によって定義
される。資源の割当ておよび指定における最適化は、ま
ず局所的レベル、つまり基本ブロック・レベルで考慮し
、次に、大域的レベル、つまりフロー・グラフ・レベル
で考慮することができる。
ーションは、原始コードのストリングのフロー・グラフ
への写像からなる。フロー・グラフの節のそれぞれは基
本ブロックであり、かつフロー・グラフの制御とデータ
・パスの関係は、フロー・グラフの有向辺によって定義
される。資源の割当ておよび指定における最適化は、ま
ず局所的レベル、つまり基本ブロック・レベルで考慮し
、次に、大域的レベル、つまりフロー・グラフ・レベル
で考慮することができる。
局所的最適化において、各基本ブロックは別々のユニッ
トとして扱われ、その内容と無関係に最適化される。デ
ータ依存グラフは、基本ブロックのために築かれ、変形
され、そして、最終マシン・コードを生成するのに用い
られる。その後、該グラフは放棄され、次の基本ブロッ
クが考慮される。
トとして扱われ、その内容と無関係に最適化される。デ
ータ依存グラフは、基本ブロックのために築かれ、変形
され、そして、最終マシン・コードを生成するのに用い
られる。その後、該グラフは放棄され、次の基本ブロッ
クが考慮される。
「データ依存グラフ」とは、基本ブロック内でのグラフ
理論的属性の表現である。基本ブロックは閉路を含めな
いので、データ依存グラフの基本ブロックは、すべてD
AGによって表現され得る。
理論的属性の表現である。基本ブロックは閉路を含めな
いので、データ依存グラフの基本ブロックは、すべてD
AGによって表現され得る。
ちなみに、DAGは必ずしも木ではない。実例として、
基本ブロックが2つの計算ステートメントx=u+v、
y=u+wから構成されるならば、DAGは、閉路を含
まないけれども、木にはならない。最後に、大域的最適
化は、フロー・グラフの大域的再配置を行うとともに、
基本ブロックの境界での文脈情報を提供する。
基本ブロックが2つの計算ステートメントx=u+v、
y=u+wから構成されるならば、DAGは、閉路を含
まないけれども、木にはならない。最後に、大域的最適
化は、フロー・グラフの大域的再配置を行うとともに、
基本ブロックの境界での文脈情報を提供する。
コンピュータはメモリを含み、その最高速の形態が、最
も高価である。有限個の物理的レジスタが、計算および
制限のために直接的に用いるオペランドを記憶する。レ
ジスタ・ツー・スターの操作をするコンピュータの命令
は、最高速で実行される。レジスタが使用不能ならば、
中間結果を、プログラムとメモリの大半が配Inされて
いるメイン・メモリにロードするか、または、レジスタ
が使用可能になると、前記メイン・メモリからレジスタ
にロードするかしなければならない。メモリからレジス
タへのロードと記憶は、実質的に長い時間を要する。し
たがって、フロー・グラフまたは基本ブロックの一方を
評価するとき、1つの目的は、必要とされる数の、計算
名前または変数をレジスタに留めるか、もしくはレジス
タを使用可能にすることにある。
も高価である。有限個の物理的レジスタが、計算および
制限のために直接的に用いるオペランドを記憶する。レ
ジスタ・ツー・スターの操作をするコンピュータの命令
は、最高速で実行される。レジスタが使用不能ならば、
中間結果を、プログラムとメモリの大半が配Inされて
いるメイン・メモリにロードするか、または、レジスタ
が使用可能になると、前記メイン・メモリからレジスタ
にロードするかしなければならない。メモリからレジス
タへのロードと記憶は、実質的に長い時間を要する。し
たがって、フロー・グラフまたは基本ブロックの一方を
評価するとき、1つの目的は、必要とされる数の、計算
名前または変数をレジスタに留めるか、もしくはレジス
タを使用可能にすることにある。
レジスタの割当てには、レジスタに常駐すべきソフトウ
ェア・ストリームの中の名前(、つまり、必要とされる
レジスタの数)の識別が含まれる。
ェア・ストリームの中の名前(、つまり、必要とされる
レジスタの数)の識別が含まれる。
一方、指定とは、基礎的なスキーム、ルールまたはモデ
ルに従って5節にレジスタを指定するステップのことで
ある。従来の割当て戦略の中には、指定の固定化があっ
た。すなわち、オブジェクト・プログラムの特定タイプ
の量が、一定のレジスタに指定されていた。例えば、サ
ブルーチンのリンクは、第2レジスタ、グループに、基
底アドレスは第2レジスタ・グループに、算術計算は、
第3レジスタ・グループに、実行時のスタックポイント
は固定したレジスタに、という具合に指定することがで
きた。このような固定写像の問題点は。
ルに従って5節にレジスタを指定するステップのことで
ある。従来の割当て戦略の中には、指定の固定化があっ
た。すなわち、オブジェクト・プログラムの特定タイプ
の量が、一定のレジスタに指定されていた。例えば、サ
ブルーチンのリンクは、第2レジスタ、グループに、基
底アドレスは第2レジスタ・グループに、算術計算は、
第3レジスタ・グループに、実行時のスタックポイント
は固定したレジスタに、という具合に指定することがで
きた。このような固定写像の問題点は。
レジスタの使用が実行要求に動的に従わないことである
。これは、レジスタの中に、全く使われなかったり、過
度に使われたり、使用頻度が少ないものがあることを意
味する。
。これは、レジスタの中に、全く使われなかったり、過
度に使われたり、使用頻度が少ないものがあることを意
味する。
大域的レジスタ割当ては、はとんどのプログラムがその
ほとんどの時間を内側のループで過ごすというwtaに
関係する。したがって、指定の1つの方策は、頻繁に用
いられる名前を、ループの間中、固定レジスタに留めて
おくことである。したがって、1つの戦略として、ある
固定数のレジスタを指定して、各内側のループの最も活
動的な名前を保持することが挙げられる。選択された名
前は、ループ毎に違っていても差し支えない。他の非専
用レジスタは、1つのブロックについて、局所的な値を
保持するのに使用できる。このように割当て・指定には
、レジスタの数をどのような付与しても、大域的レジス
タ割当てにとって使用可能となる普遍的に正しい数には
ならないという欠点がある。
ほとんどの時間を内側のループで過ごすというwtaに
関係する。したがって、指定の1つの方策は、頻繁に用
いられる名前を、ループの間中、固定レジスタに留めて
おくことである。したがって、1つの戦略として、ある
固定数のレジスタを指定して、各内側のループの最も活
動的な名前を保持することが挙げられる。選択された名
前は、ループ毎に違っていても差し支えない。他の非専
用レジスタは、1つのブロックについて、局所的な値を
保持するのに使用できる。このように割当て・指定には
、レジスタの数をどのような付与しても、大域的レジス
タ割当てにとって使用可能となる普遍的に正しい数には
ならないという欠点がある。
ChaLtin等による“Reqister A11o
cation ViaColoring”、Compu
ter Languages、Vol、6,1981.
pp。
cation ViaColoring”、Compu
ter Languages、Vol、6,1981.
pp。
47−57.Pergamon Press Lim1
tedおよびChaitinによる”Register
A11ocation and Spilling
ViaGraph Coloring” 、Proca
edings 5IGPLAN82゜Symposiu
m on Compiler Con5tructio
n、5IGPLANNotices、 1982.pp
、98−105は、プロシージャー全体にまたがる大域
的レジスタ割当て方法を記述している。前記文献では、
1つを除いて全レジスタが均一プールの一部だと考えら
れるとともに、全計算が、これらのレジスタに同じよう
に基づいて競合する。実際、レジスタのサブセットは保
留されない。
tedおよびChaitinによる”Register
A11ocation and Spilling
ViaGraph Coloring” 、Proca
edings 5IGPLAN82゜Symposiu
m on Compiler Con5tructio
n、5IGPLANNotices、 1982.pp
、98−105は、プロシージャー全体にまたがる大域
的レジスタ割当て方法を記述している。前記文献では、
1つを除いて全レジスタが均一プールの一部だと考えら
れるとともに、全計算が、これらのレジスタに同じよう
に基づいて競合する。実際、レジスタのサブセットは保
留されない。
前記文献は、記憶装置ではなくてレジスタに、できるだ
け多くの計算を保つことが意図されることを指摘してい
る。なぜなら、ロードおよび記憶命令は、レジスタ・ツ
ー・レジスタの命令よりも高価だからである。また、前
記文献では、無限数のレジスタ(つまりプールと考えら
れ、中間言語において、プログラムでのロードと記憶の
数を最小限にするために許される)を利用するのは、コ
ード生成および最適化の責任であると書かれている。
け多くの計算を保つことが意図されることを指摘してい
る。なぜなら、ロードおよび記憶命令は、レジスタ・ツ
ー・レジスタの命令よりも高価だからである。また、前
記文献では、無限数のレジスタ(つまりプールと考えら
れ、中間言語において、プログラムでのロードと記憶の
数を最小限にするために許される)を利用するのは、コ
ード生成および最適化の責任であると書かれている。
前記文献のクリティカルなIl!察によれば、レジスタ
の割当ては、グラフの配色問題として解析可能である。
の割当ては、グラフの配色問題として解析可能である。
グラフの配色とは、隣り合う(グラフの辺によって連絡
される)2つの節の色が異なるように、各節に色を指定
することをいう。グラフの「彩色数」とは配色における
最小限の色の数をいう。前記文献では、レジスタ割当て
が「レジスタ干渉グラフ」と呼ばれる構成体を利用して
いる。
される)2つの節の色が異なるように、各節に色を指定
することをいう。グラフの「彩色数」とは配色における
最小限の色の数をいう。前記文献では、レジスタ割当て
が「レジスタ干渉グラフ」と呼ばれる構成体を利用して
いる。
マシン・レジスタに常駐する計算または名前は、それら
がプログラムのどの点でも同時に「生きて」いるならば
、互いに「干渉する」といわれる。
がプログラムのどの点でも同時に「生きて」いるならば
、互いに「干渉する」といわれる。
前記文献のグラフ配色方法は、次のチップを含んでいる
。(a)コードの特定のテキスト配列に関して、名前か
ら干渉グラフを築<、(b)該グラフの彩色数を確定し
、該彩色数が使用可能なレジスタの数を越えなければ、
着色(節にレジスタを指定)して、そうでない場合は、
427798度が最高の節を退ける(核部および連結す
る辺を削除する)ことにより、グラフを簡約化する。
。(a)コードの特定のテキスト配列に関して、名前か
ら干渉グラフを築<、(b)該グラフの彩色数を確定し
、該彩色数が使用可能なレジスタの数を越えなければ、
着色(節にレジスタを指定)して、そうでない場合は、
427798度が最高の節を退ける(核部および連結す
る辺を削除する)ことにより、グラフを簡約化する。
(c)値が収束するまで、ステップ(b)を繰り返す。
(d)コンパイルされるコード・ストリームに、適当な
、メミリへの書込みとメモリからのロードを組み込むこ
とによって、「こぼれ(spills)」の報告および
管理を行う。
、メミリへの書込みとメモリからのロードを組み込むこ
とによって、「こぼれ(spills)」の報告および
管理を行う。
本発明の目的は、スカシ・プロセッサまたはベクトル・
プロセッサにおいて、原始コードを実行可能なコードに
コンパイルする際に、最適なレジスタの割当て・指定を
行い、こぼれの数(メモリへの参照およびメモリからの
参照の数)を最小限にすることにある。関連する目的は
、基本ブロック内で、原文の配列に対してこぼれコード
の量が不変であるように、レジスタの割当て・指定を行
うことである。
プロセッサにおいて、原始コードを実行可能なコードに
コンパイルする際に、最適なレジスタの割当て・指定を
行い、こぼれの数(メモリへの参照およびメモリからの
参照の数)を最小限にすることにある。関連する目的は
、基本ブロック内で、原文の配列に対してこぼれコード
の量が不変であるように、レジスタの割当て・指定を行
うことである。
C0問題点を解決するための手段
スカシ・プロセッサまたはバク1−ル・プロセッサで原
始コードを実行可能コードにコンパイルする際の最適化
段階において、レジスタを割り当てるとともに、「基本
ブロック」と呼ばれる分岐のないコード領域に局所的な
前記割当てを最適化する方法によって、前記目的は達成
される。各基本ブロックは、計算を定義するステートメ
ントを持つ。また、各プロセッサは、実行可能なコード
およびデータの列を記憶するメモリと、前記メモリをア
クセスしてアクセスされたコードを実行する手段とを含
む。プロセッサにおいて、メモリは。
始コードを実行可能コードにコンパイルする際の最適化
段階において、レジスタを割り当てるとともに、「基本
ブロック」と呼ばれる分岐のないコード領域に局所的な
前記割当てを最適化する方法によって、前記目的は達成
される。各基本ブロックは、計算を定義するステートメ
ントを持つ。また、各プロセッサは、実行可能なコード
およびデータの列を記憶するメモリと、前記メモリをア
クセスしてアクセスされたコードを実行する手段とを含
む。プロセッサにおいて、メモリは。
有限の2個のレジスタとそれに比較して無限側の内部メ
モリとを含む2レベル・モデルとして写像される。関連
することだが、レジスタのアクセス時間は、内部メモリ
のアクセス時間よりも速い。
モリとを含む2レベル・モデルとして写像される。関連
することだが、レジスタのアクセス時間は、内部メモリ
のアクセス時間よりも速い。
本発明の方法は、プロセッサで実現される次の(a)、
(b)のステップからなる。(a)基本ブロックのデー
タ依存グラフ属性を確定する。
(b)のステップからなる。(a)基本ブロックのデー
タ依存グラフ属性を確定する。
(b)2レベル・メモリ・モデルを利用して、確定され
たデータ依存グラフにつき「2色の小石ゲーム」発見法
を実行することにより、基本ブロック内の全計算に関し
て、2個のレジスタのうちの9個の割当てと指定を生成
する。
たデータ依存グラフにつき「2色の小石ゲーム」発見法
を実行することにより、基本ブロック内の全計算に関し
て、2個のレジスタのうちの9個の割当てと指定を生成
する。
上記(a)、(b)に加えて、(c)生変数解析を行い
、それに応答してループが最も重要な最適化エンテイテ
イーであると仮定して大域的なレジスタ割当てと指定を
生成するステップを含んでなり、局所的および大域的レ
ジスタ最適化を行う方法によって、前述の目的は一層よ
く達成される。
、それに応答してループが最も重要な最適化エンテイテ
イーであると仮定して大域的なレジスタ割当てと指定を
生成するステップを含んでなり、局所的および大域的レ
ジスタ最適化を行う方法によって、前述の目的は一層よ
く達成される。
Chaintinの[レジスタ干渉グラフ」と異なり、
データ依存グラフは原文の配列に対して不変である。本
発明の方法は、割当て処理を2つのステップに分ける。
データ依存グラフは原文の配列に対して不変である。本
発明の方法は、割当て処理を2つのステップに分ける。
第1のステップは、良性の局所的割当てを得ることであ
る。第2のステップは、局所的割当てを用いて大域的割
当てを得ることである。
る。第2のステップは、局所的割当てを用いて大域的割
当てを得ることである。
データ依存グラフで行われる小石ゲーム発見法は、基本
ブロック内のこぼれが最小になることを保証する。該発
見法は、基本ブロックに対応するグラフ上で赤と青の小
石ゲームを行うことを意味する。
ブロック内のこぼれが最小になることを保証する。該発
見法は、基本ブロックに対応するグラフ上で赤と青の小
石ゲームを行うことを意味する。
メモリへのアクセスは、ゲラフレこ青い小石を置くこと
によってモデル化される一方、レジスタへのアクセスは
、グラフに赤い小石を置くことによってモデル化される
。このモデルは、こぼれを正確に制御する。同じデータ
依存グラフは同じ割当てをもたらす。
によってモデル化される一方、レジスタへのアクセスは
、グラフに赤い小石を置くことによってモデル化される
。このモデルは、こぼれを正確に制御する。同じデータ
依存グラフは同じ割当てをもたらす。
重要なことは、局所的割当てを実行する間、使用可能な
レジスタのすべてが使われるわけではないことである。
レジスタのすべてが使われるわけではないことである。
実際、いくつかのレジスタは、大域的情報を運ぶために
取って置かれる。関連することだが、2番目の大きなス
テップは、これらのレジスタを用いてメモリへのアクセ
スをさらに減らす大域的最適化を行うステップである。
取って置かれる。関連することだが、2番目の大きなス
テップは、これらのレジスタを用いてメモリへのアクセ
スをさらに減らす大域的最適化を行うステップである。
これらの大域的レジスタのために選ばれる変数は、プロ
グラム全体のロードまたは記憶操作の数を最大限に減ら
すように選択される。
グラム全体のロードまたは記憶操作の数を最大限に減ら
すように選択される。
本発明のために、小石ゲームとは、DAGで行われる1
人用のゲームである。プレヤーには、赤と青の2つのタ
イプの小石が与えられる。青い小石の数は無限である一
方、赤い小石の数は、ある数、例えばp、に制限されて
いる。最初、DAGはすべてのソースに青の小石を置い
ている。プレヤーには、以下の動きの何れかが許される
。
人用のゲームである。プレヤーには、赤と青の2つのタ
イプの小石が与えられる。青い小石の数は無限である一
方、赤い小石の数は、ある数、例えばp、に制限されて
いる。最初、DAGはすべてのソースに青の小石を置い
ている。プレヤーには、以下の動きの何れかが許される
。
(1)青い小石の隣りの赤い小石を置く。
(2)赤い小石の隣りに青い小石を置く。
(3)ある節に赤い小石を置く。ただし、すべての先行
節に赤い小石が置かれている場合に限る。
節に赤い小石が置かれている場合に限る。
(4)ある節に、赤い小石を先行節の1つからスライド
させる。ただし、その前に先行節に赤い小石が置かれて
いた場合に限る。
させる。ただし、その前に先行節に赤い小石が置かれて
いた場合に限る。
(5)赤い小石を取り除く。これはいつでも差し支えな
い。
い。
これに関連して、青い小石はメモリ位置であり、赤い小
石はレジスタである。この意味で、ルール(1)はメモ
リからのロート、ルール(2)はメモリへの書込み、ル
ール(3)は値を計算してレジスタに格納すること、ル
ール(4)は値を計算して、計算に用いられていたオペ
ランドを以前保持していたレジスタに格納することに相
当する。
石はレジスタである。この意味で、ルール(1)はメモ
リからのロート、ルール(2)はメモリへの書込み、ル
ール(3)は値を計算してレジスタに格納すること、ル
ール(4)は値を計算して、計算に用いられていたオペ
ランドを以前保持していたレジスタに格納することに相
当する。
レジスタ割当てに関連するゲームの目的は、こぼれの数
を最小化することである。ここで、こほれはルール(1
)または(2)の利用に関係する。
を最小化することである。ここで、こほれはルール(1
)または(2)の利用に関係する。
小石ゲームは、 Pippengerによって、“Pe
bbling”5th IBM Symposiu
m on the MachematicalF
oundations of Computer 5c
ience、 1980年5月26〜28日、箱板、日
本において述べられている。彼は、コンパイラ、特にコ
ード生成と最適化を含めて、小石ゲームの応用範囲が広
いことを指摘している。彼が述べたのは1色のゲームで
あり、「黒色小石ゲーム」と呼ばれることもある。
bbling”5th IBM Symposiu
m on the MachematicalF
oundations of Computer 5c
ience、 1980年5月26〜28日、箱板、日
本において述べられている。彼は、コンパイラ、特にコ
ード生成と最適化を含めて、小石ゲームの応用範囲が広
いことを指摘している。彼が述べたのは1色のゲームで
あり、「黒色小石ゲーム」と呼ばれることもある。
明らかに、「黒色小石ゲーム」は1時間−空間トレード
オフの研究に用いられてきた。1時間−空間トレードオ
フ」には、使用可能なレジスタの数の積によって形成さ
れるファクタの変更の結果と、計算の実行に要する時間
とが関係する。該積は、データ依存グラフの中の節の数
に比例する量である。もし1色だけがレジスタを表現す
るならば、所与の計算について、「前記計算を実行する
のに必要とされるレジスタの最低数はいくつか?」とい
う問いかけが従来なされてきた。しかしながら、前記1
色小石ゲームは、本発明の方法を教示も示唆もしない。
オフの研究に用いられてきた。1時間−空間トレードオ
フ」には、使用可能なレジスタの数の積によって形成さ
れるファクタの変更の結果と、計算の実行に要する時間
とが関係する。該積は、データ依存グラフの中の節の数
に比例する量である。もし1色だけがレジスタを表現す
るならば、所与の計算について、「前記計算を実行する
のに必要とされるレジスタの最低数はいくつか?」とい
う問いかけが従来なされてきた。しかしながら、前記1
色小石ゲームは、本発明の方法を教示も示唆もしない。
重要なことは、本発明が、2色小石ゲームにより、DA
G上でレジスタの割当て・指定を扱い5それによって5
一般のグラフ配色方法に比べ、こぼれを協働して最小化
する局所的最適化およびループ準拠の大域的最適化を行
うことである。
G上でレジスタの割当て・指定を扱い5それによって5
一般のグラフ配色方法に比べ、こぼれを協働して最小化
する局所的最適化およびループ準拠の大域的最適化を行
うことである。
D、実施例
まず、小石ゲーム発見法アルゴリムズを記述して、局所
的最適化を達成するレジスタの割当て・指定について説
明する。続いて、大域的割当てについて論じる。
的最適化を達成するレジスタの割当て・指定について説
明する。続いて、大域的割当てについて論じる。
漫ノけm化
局所的最適化は、「小石ゲームJ発見法を利用する。本
発明のために、「発見法」とは、予期的に近最適な結果
を達成するための、直観に基づく、マシンで実現可能な
プロシージャまたはアルゴリズムをいう。
発明のために、「発見法」とは、予期的に近最適な結果
を達成するための、直観に基づく、マシンで実現可能な
プロシージャまたはアルゴリズムをいう。
第1例
第1図ないし第6図には、基本ブロックに分割され、か
つDAGタイプのカウンタパート・データ依存グラフに
よって表現される計算例が示されている。第1近似に至
る発見法は、以下のようにして進行する。
つDAGタイプのカウンタパート・データ依存グラフに
よって表現される計算例が示されている。第1近似に至
る発見法は、以下のようにして進行する。
1、DAGを検査し、2個の支配節、つまり、後続節の
数が最も多い節を識別する。ここで、pは赤い小石の数
である。そのような2個の節のセット毎に、該セットの
中の赤でない節の数であるコス1〜を関連させる。続い
て、これらのセットの中から、支配者のコスト/サイズ
の値が最小のセットを選ぶ。これは、計算のための「有
望な」エリアを定義する。
数が最も多い節を識別する。ここで、pは赤い小石の数
である。そのような2個の節のセット毎に、該セットの
中の赤でない節の数であるコス1〜を関連させる。続い
て、これらのセットの中から、支配者のコスト/サイズ
の値が最小のセットを選ぶ。これは、計算のための「有
望な」エリアを定義する。
2、上記選択されたセットの直接的な後続節である節毎
のカバー・コストを計算することにより、「良性の」計
算を見つける。カバー・コストには3つのパラメータが
ある。それらには、 (a)赤い小石が置かれていない
先行節の数、(b)カバー・コストを計算する節の直接
的な前身全体での最小スライドコストが含まれる。関連
して、スライド・コストは、最小の「アウト度」を持つ
(a)の中の先行節を参照する。「アウト度」とは、ま
だ計算されていない後続節を意味する。ちなみに、一旦
計算が実行されると、未計算後続節の数は変化する。し
たがって1例えば基本ブロック1を参照する第2図にお
いて、節t1はカバー・コスト(2,1)を持つ。ここ
で、先行節の数は2である(節x+y)一方、スライド
・コスト(未計算後続節に対するアウト度)は、最初、
Xについては1、yについては3である。選択は、スラ
イド・コストがより小さいものについてなされる。一旦
カバー・コストが計算されると、アルゴリズムの次のス
テップで実行される計算が、最小のカバー・コストを持
つものとなるように選ばれる。
のカバー・コストを計算することにより、「良性の」計
算を見つける。カバー・コストには3つのパラメータが
ある。それらには、 (a)赤い小石が置かれていない
先行節の数、(b)カバー・コストを計算する節の直接
的な前身全体での最小スライドコストが含まれる。関連
して、スライド・コストは、最小の「アウト度」を持つ
(a)の中の先行節を参照する。「アウト度」とは、ま
だ計算されていない後続節を意味する。ちなみに、一旦
計算が実行されると、未計算後続節の数は変化する。し
たがって1例えば基本ブロック1を参照する第2図にお
いて、節t1はカバー・コスト(2,1)を持つ。ここ
で、先行節の数は2である(節x+y)一方、スライド
・コスト(未計算後続節に対するアウト度)は、最初、
Xについては1、yについては3である。選択は、スラ
イド・コストがより小さいものについてなされる。一旦
カバー・コストが計算されると、アルゴリズムの次のス
テップで実行される計算が、最小のカバー・コストを持
つものとなるように選ばれる。
3、一旦「良性の」計算を決定すると、赤い小石を置く
従属節は、小石のスライディングに関するルールを用い
る。スライドを実行するのに用いることのできる赤い小
石がない場合は、現在DAG上にない小石が、存在すれ
ば用いられる。
従属節は、小石のスライディングに関するルールを用い
る。スライドを実行するのに用いることのできる赤い小
石がない場合は、現在DAG上にない小石が、存在すれ
ば用いられる。
4、レジスタが使用不能ならば、中間(または最終)結
果をメモリに書き出すとともに、必要なときに(使用可
能なレジスタに)ロードし直さなければならない。
果をメモリに書き出すとともに、必要なときに(使用可
能なレジスタに)ロードし直さなければならない。
第2図を参照すると、節t1はソースXとyに依存して
いる一方、節qは節yと2に依存している。結果Vはt
lとyに依存する。3つのレジスタro、rl、r2が
使用可能だと仮定すると、3つの節からなる支配者が選
ばれる。可能性のある唯一の支配者は、セラ1〜(x+
y+ z)である。
いる一方、節qは節yと2に依存している。結果Vはt
lとyに依存する。3つのレジスタro、rl、r2が
使用可能だと仮定すると、3つの節からなる支配者が選
ばれる。可能性のある唯一の支配者は、セラ1〜(x+
y+ z)である。
したがって、これを「有望な」セットと呼ぶことにする
。
。
節t1とqは、選択された支配セットの後続節である。
各節毎に、カバー・コストが計算される。
tlのカバー・コストは(2,1)である。その理由は
、tlの2つの先行節には小石が置かれていないこと、
および、Xの未計算後続節は1つだけなので、最小スラ
イド・コストは1であることによる。qの場合も同様の
ことがあてはまる。t1+ qのカバー・コストはどち
らも同じなので、1つの節(例えばし1)が任意に選ば
れる。tlを計算するためには、まず、赤い小石をXと
yに置かねばならない。次に、Xのスライド・コストが
1なので、Xをtlにスライドさせる。すると、tlの
赤い小石をVにスライドさせることにより、節Vが計算
可能になる。続いて、2のロード後に、yの小石をqに
スライドさせることにより、節qが計算可能になる。
、tlの2つの先行節には小石が置かれていないこと、
および、Xの未計算後続節は1つだけなので、最小スラ
イド・コストは1であることによる。qの場合も同様の
ことがあてはまる。t1+ qのカバー・コストはどち
らも同じなので、1つの節(例えばし1)が任意に選ば
れる。tlを計算するためには、まず、赤い小石をXと
yに置かねばならない。次に、Xのスライド・コストが
1なので、Xをtlにスライドさせる。すると、tlの
赤い小石をVにスライドさせることにより、節Vが計算
可能になる。続いて、2のロード後に、yの小石をqに
スライドさせることにより、節qが計算可能になる。
前述の解析は、十分な数のレジスタが与えられると、ス
ケジューリングの提供を合理的にスムーズに行えること
を指摘している。
ケジューリングの提供を合理的にスムーズに行えること
を指摘している。
第3図および第4図には、第1図に記した計算列のCh
aitinの文献による従来のレジスタ干渉グラフが示
されている。第3図のグラフは、技術的に3色で配色可
能である。しかしながら、2つのレジスタ(ro、r2
)だけが使用可能ならば、グラフの配色は本質的に可能
でなくなる。度の高さの順に、節を除去する。または退
けることが必要になるであろう。これに関連して、第4
図は、節Xとyを除去した従来の干渉グラフの例である
。
aitinの文献による従来のレジスタ干渉グラフが示
されている。第3図のグラフは、技術的に3色で配色可
能である。しかしながら、2つのレジスタ(ro、r2
)だけが使用可能ならば、グラフの配色は本質的に可能
でなくなる。度の高さの順に、節を除去する。または退
けることが必要になるであろう。これに関連して、第4
図は、節Xとyを除去した従来の干渉グラフの例である
。
しかしながら、2色で配色を可能にするには、節2も除
去しなければならないだろう。3つの節を退けることは
、こぼれコードの量が相当あることを示す。対照的に、
使用可能なレジスタが2つだけ提供されるとともに、第
2図のデータ依存グラフに応じてそれらが指定されるな
らば、比較して3回のロードと1回の記憶だけが必要と
される。
去しなければならないだろう。3つの節を退けることは
、こぼれコードの量が相当あることを示す。対照的に、
使用可能なレジスタが2つだけ提供されるとともに、第
2図のデータ依存グラフに応じてそれらが指定されるな
らば、比較して3回のロードと1回の記憶だけが必要と
される。
必」1匹
第5図および第6図を参照する。再び、3つのレジスタ
と3つの赤い小石が使用可能であると仮定する。アルゴ
リズムによると、節tl、vおよびWは、支配節として
選ばれる。カバー・コスト(x)= (2,1)である
一方、カバー・コスト(y)= (2,2)である。し
たがってカルボリズムは、節Xの評価を選択する。カバ
ー・コスト= (cl、C2)であって、C1=2だか
ら、アルゴリズムは、現在の辺境(フロンティア)のた
めにこぼれ節(X)を計算する。辺境という言葉は、セ
ット内のすべての節Vについて、核部が小石を持ってお
り、かつVの後続節の少なくとも1つが未計算であると
いう性質を持つ節のセットから由来する。これが辺境と
呼ばれている。
と3つの赤い小石が使用可能であると仮定する。アルゴ
リズムによると、節tl、vおよびWは、支配節として
選ばれる。カバー・コスト(x)= (2,1)である
一方、カバー・コスト(y)= (2,2)である。し
たがってカルボリズムは、節Xの評価を選択する。カバ
ー・コスト= (cl、C2)であって、C1=2だか
ら、アルゴリズムは、現在の辺境(フロンティア)のた
めにこぼれ節(X)を計算する。辺境という言葉は、セ
ット内のすべての節Vについて、核部が小石を持ってお
り、かつVの後続節の少なくとも1つが未計算であると
いう性質を持つ節のセットから由来する。これが辺境と
呼ばれている。
DAG上に赤い小石が全く置かれていないので。
空である。したがって、この方法によれば、節UとVに
自由な赤い小石を置くことができる。また、C2=1な
ので、節Uにおけるレジスタは節Xにスライドされ、1
つの計算が完了する。もう1度、別の支配者が選択され
る。今度は5節pが計算の目票となる。なぜなら、カバ
ー・コスト(p)=(0,1)だからである。前のよう
に、C2=1である。これは、節X上のレジスタが節p
にスライドされることを意味する。
自由な赤い小石を置くことができる。また、C2=1な
ので、節Uにおけるレジスタは節Xにスライドされ、1
つの計算が完了する。もう1度、別の支配者が選択され
る。今度は5節pが計算の目票となる。なぜなら、カバ
ー・コスト(p)=(0,1)だからである。前のよう
に、C2=1である。これは、節X上のレジスタが節p
にスライドされることを意味する。
明らかに、今度計算しなければならない節は、yそして
2である。なぜなら、他の選択は使用不能だからである
。第5図を参照する。ロードは3回だけ行われ、かつp
と2はレジスタ内にあって使用可能であることに注意す
べきである。これは、どちらかが後で使われる場合、メ
モリからロードする必要が全くないことを意味する。
2である。なぜなら、他の選択は使用不能だからである
。第5図を参照する。ロードは3回だけ行われ、かつp
と2はレジスタ内にあって使用可能であることに注意す
べきである。これは、どちらかが後で使われる場合、メ
モリからロードする必要が全くないことを意味する。
重要なことは1列の中のコードがどんなに並べ変えられ
ても、データ依存グラフが不変であることである。した
がって、この方法によりもたらされる結果は、原文の配
列に依存しない。
ても、データ依存グラフが不変であることである。した
がって、この方法によりもたらされる結果は、原文の配
列に依存しない。
また、第6図に示すようなコードに従来の配色が適用さ
れたならば、ロードの数は4になるところ2本発明の方
法によれば、ロードの数は、最小限の3だけになること
に注意すべきである。
れたならば、ロードの数は4になるところ2本発明の方
法によれば、ロードの数は、最小限の3だけになること
に注意すべきである。
太部ば庭11生
本発明において、大域的最適化は、まず、使用可能なレ
ジスタの全体数のある一部を用い、フロー・グラフに現
われ順番で、各基本ブロック毎に局所的割当てを実行す
ることを含む。次に、ループが最もクリティカルなエン
テイテイーであると仮定し、残りのレジスタを用いて大
域的情報を運ぶ。
ジスタの全体数のある一部を用い、フロー・グラフに現
われ順番で、各基本ブロック毎に局所的割当てを実行す
ることを含む。次に、ループが最もクリティカルなエン
テイテイーであると仮定し、残りのレジスタを用いて大
域的情報を運ぶ。
第7図には、開始節で初期設定され、かつ終了節で終了
するフロー・グラフが示されている。
するフロー・グラフが示されている。
局所的割当てがなされたと仮定すると、大域的ステップ
が、各局所的割当てにおいてロード・記憶される変数の
セットを検査する。これらの変数のために、カウントが
、変数のロードまたは記憶の回数によって構成される。
が、各局所的割当てにおいてロード・記憶される変数の
セットを検査する。これらの変数のために、カウントが
、変数のロードまたは記憶の回数によって構成される。
このカウントは、いわゆる変数のネスティング・レベル
によってバイアスされる。該ネスティング・レベルは、
該変数を囲むフロー・グラフのループの数に関連するも
のである。このリストから、最高の値を持つ変数が選択
されて、大域的レジスタに常駐する。該プロセスは、使
用可能な大域的レジスタがなくなるまで、または、該リ
ストが空になるまで、繰り返される。
によってバイアスされる。該ネスティング・レベルは、
該変数を囲むフロー・グラフのループの数に関連するも
のである。このリストから、最高の値を持つ変数が選択
されて、大域的レジスタに常駐する。該プロセスは、使
用可能な大域的レジスタがなくなるまで、または、該リ
ストが空になるまで、繰り返される。
この大域的割当てのスキームまたはステップには、変形
が存在する。例えば、大域的レジスタに入れられる変数
は、局所的割当てに対応するフロー・グラフの生きてい
る最大範囲を表わすものである。すなわち、局所的割当
てが、入力プログラムの中の対応する基本ブロックの代
わりに用いられる。続いて、基本ブロックにとって局所
的ではない変数すべてのために、生きている範囲が計算
される。生きている範囲は、ネスティング・レベルプレ
イキング・タイおよび使用の数を持つ大域的レジスタに
割り当てられるのはどの変数であるかを判断するのに用
いられる。つまり、基本ブロックに局所的でない変数で
あって、最大の生きている範囲を持つ変数が大域的レジ
スタに割り当てられるのである。そして、2つ以上の変
数が同じ生きている範囲を持つ場合は、使用の数または
ネスティング・レベルが最大である変数に、大域的レジ
スタの1つが指定されるのである。
が存在する。例えば、大域的レジスタに入れられる変数
は、局所的割当てに対応するフロー・グラフの生きてい
る最大範囲を表わすものである。すなわち、局所的割当
てが、入力プログラムの中の対応する基本ブロックの代
わりに用いられる。続いて、基本ブロックにとって局所
的ではない変数すべてのために、生きている範囲が計算
される。生きている範囲は、ネスティング・レベルプレ
イキング・タイおよび使用の数を持つ大域的レジスタに
割り当てられるのはどの変数であるかを判断するのに用
いられる。つまり、基本ブロックに局所的でない変数で
あって、最大の生きている範囲を持つ変数が大域的レジ
スタに割り当てられるのである。そして、2つ以上の変
数が同じ生きている範囲を持つ場合は、使用の数または
ネスティング・レベルが最大である変数に、大域的レジ
スタの1つが指定されるのである。
ループの底において、変数が異なるレジスタで終わる(
ワインド・アップ)けれども、これらがループの先頭に
あると想定される場合は、転送の必要がなくなるまで、
または、転送数がある所定のしきい値より小さくなるま
で、該ループを展開することが可能である。
ワインド・アップ)けれども、これらがループの先頭に
あると想定される場合は、転送の必要がなくなるまで、
または、転送数がある所定のしきい値より小さくなるま
で、該ループを展開することが可能である。
下記表は、小石ゲーム発見法のアルゴリズムを詳述した
ものである。
ものである。
■
−一
η) 1 個+
ψ
リ本滲遭μ贋劇張 本発明の方法は、IBM(登録商標)システム/370
タイプのスカシ・プロセッサ、または、IBM3090
によって代表されるようなベクトル・マシンにおいて、
用いることができる。ベクトル・プロセッサにおいては
、トップ・スピードで計算を行うことが望まれる。これ
は、計算がメモリをアクセスする頻度をできるだけ少な
くすべきであることを意味する。なぜなら、ベクトル・
レジスタへのアクセスに比べると、メモリ・アクセスは
非常に遅いからである。前述のように、小石ゲームの発
見法は、次のようにしてベクトル・レジスタの数を決定
するのに使うことができる。
−一
η) 1 個+
ψ
リ本滲遭μ贋劇張 本発明の方法は、IBM(登録商標)システム/370
タイプのスカシ・プロセッサ、または、IBM3090
によって代表されるようなベクトル・マシンにおいて、
用いることができる。ベクトル・プロセッサにおいては
、トップ・スピードで計算を行うことが望まれる。これ
は、計算がメモリをアクセスする頻度をできるだけ少な
くすべきであることを意味する。なぜなら、ベクトル・
レジスタへのアクセスに比べると、メモリ・アクセスは
非常に遅いからである。前述のように、小石ゲームの発
見法は、次のようにしてベクトル・レジスタの数を決定
するのに使うことができる。
まず、ベクI・ル・レジスタの開始番号を選択する。
続いて、実行されるべきベクトル計算に対応するデータ
依存グラフDACで、該発見法を実行する。
依存グラフDACで、該発見法を実行する。
次に、この固定数のレジスタのために行われるロート/
記憶の合計数を計算する。続いて、この数を、必要とさ
れるアジセスの数(つまり、ソースの数とシンクの数の
和)の下限と比較する。実行されるアクセスの数が多す
ぎるならば、レジスタの数を倍にしてアルゴリズムを再
適用する。下限に達したならば、レジスタの数を半分に
して、最適なレジスタ数が識別されるまで、アルゴリズ
ムを繰り返す。これは、ベクトル・レジスタの数につい
て二分探索を行うとともに、探索パラメータを決定する
のに小石ゲーム発見法を用いることと等価である。
記憶の合計数を計算する。続いて、この数を、必要とさ
れるアジセスの数(つまり、ソースの数とシンクの数の
和)の下限と比較する。実行されるアクセスの数が多す
ぎるならば、レジスタの数を倍にしてアルゴリズムを再
適用する。下限に達したならば、レジスタの数を半分に
して、最適なレジスタ数が識別されるまで、アルゴリズ
ムを繰り返す。これは、ベクトル・レジスタの数につい
て二分探索を行うとともに、探索パラメータを決定する
のに小石ゲーム発見法を用いることと等価である。
本発明の別の拡張は、計算をメモリに対するロードと記
憶オーバーラツプであるマシンでの使用である。該発見
法は、現在レジスタにあるデータに基づいて、できるだ
け多くの計算を試みるので。
憶オーバーラツプであるマシンでの使用である。該発見
法は、現在レジスタにあるデータに基づいて、できるだ
け多くの計算を試みるので。
計算とメモリ・アクセスとの間の良性のオーバーラツプ
を提供しなければならない。
を提供しなければならない。
差星皿咀
本発明は、PL/I、FORTRAN、C0BOL等の
高級言語コンパイラのオプテイマイザ部に組み込まれ、
かつ、IBMシステム/370等のシステム上で、米国
特許第3400371号明細書およびI B M S
ystem/370 Pr1nciples of0p
eration、 IBM Publication
GA22−7000−6に記載されているように実行す
ると、簡便に実行できる。
高級言語コンパイラのオプテイマイザ部に組み込まれ、
かつ、IBMシステム/370等のシステム上で、米国
特許第3400371号明細書およびI B M S
ystem/370 Pr1nciples of0p
eration、 IBM Publication
GA22−7000−6に記載されているように実行す
ると、簡便に実行できる。
E3発明の効果
本発明によれば、コンパイル時に最適なレジスタの割当
てを行うことができ、メモリへのアクセスを最小限に抑
えることができる。
てを行うことができ、メモリへのアクセスを最小限に抑
えることができる。
第1図は、3つの基本ブロックの計算列を示す図である
。 2図は、本発明により、小石ゲーム発見法を用いる局所
的レジスタ割当てを説明する第1列で用いられた、第1
図のブロックのデータ依存グラフへの翻訳を示す図であ
る。 第3図は、従来技術による、第1図の列のレジスタ干渉
グラフを示す図である。 第4図は、従来技術により、配色が可能となるようにい
くつかの節を除去した第3図の干渉グラフを示す図であ
る。 第5図および第6図は、本発明により、小石ゲーム発見
法を用いる局所的レジスタ割当ての第2列で用いられた
、計算列、データ依存グラフおよびレジスタ活動列を示
す。 第7図は、本発明による大域的割当てのステップの記述
に関係するフロー・グラフの説明図である。 出願人 インターナショナル・ビジネス・マシーンズ
・コーポレーション 代理人 弁理士 頓 宮 孝 −(外1名)
。 2図は、本発明により、小石ゲーム発見法を用いる局所
的レジスタ割当てを説明する第1列で用いられた、第1
図のブロックのデータ依存グラフへの翻訳を示す図であ
る。 第3図は、従来技術による、第1図の列のレジスタ干渉
グラフを示す図である。 第4図は、従来技術により、配色が可能となるようにい
くつかの節を除去した第3図の干渉グラフを示す図であ
る。 第5図および第6図は、本発明により、小石ゲーム発見
法を用いる局所的レジスタ割当ての第2列で用いられた
、計算列、データ依存グラフおよびレジスタ活動列を示
す。 第7図は、本発明による大域的割当てのステップの記述
に関係するフロー・グラフの説明図である。 出願人 インターナショナル・ビジネス・マシーンズ
・コーポレーション 代理人 弁理士 頓 宮 孝 −(外1名)
Claims (2)
- (1)有限個のレジスタと、該レジスタの総容量に比べ
て十分大きい記憶容量を有し該レジスタより遅いアクセ
ス時間を有するメモリとに接続されたプロセッサで原始
コードを実行可能コードにコンパイルする際に、基本ブ
ロックへのレジスタの割当てを最適化する方法において
、 (a)前記基本ブロックのデータ依存グラフ属性を確定
し、 (b)確定されたデータ依存グラフについて、(b1)
使用可能なレジスタと同じ数の節を、前記データ依存グ
ラフの節の中から後続節の数が多いものの順に選択し、
該選択された節にレジスタを割当て、 (b2)次に、レジスタを割り当てられた節の直接の後
続節のすべてについてカバー・コストを確定し、そのう
ちのカバー・コストが最小である1つの後続節にその時
点で使用可能なレジスタを割り当て、以下このステップ
をその時点でレジスタを割り当てられている節の直接の
後続節について繰り返し、 (b3)後続節への割り当てに使用可能なレジスタがな
い場合は、該節での計算結果をメモリに書き込み、その
後必要に応じて該結果を使用可能となつたレジスタにロ
ードする ことを特徴とするコンパイル時のレジスタの割当て方法
。 - (2)有限のp個のレジスタと、該レジスタの総容量に
比べて十分大きい記憶容量を有し該レジスタより遅いア
クセス時間を有するメモリとに接続されたプロセッサで
原始コードを実行可能コードにコンパイルする際に、 (a)基本ブロックのそれぞれについてデータ依存グラ
フ属性を確定し、 (b)確定されたデータ依存グラフについて、(b1)
使用可能なレジスタと同じ数の節を、前記データ依存グ
ラフの節の中から後続節の数が多いものの順に選択し、
該選択された節にレジスタを割当て、 (b2)次に、レジスタを割り当てられた節の直接の後
続節のすべてについてカバー・コストを確定し、そのう
ちのカバー・コストが最小である1つの後続節にその時
点で使用可能なレジスタを割り当て、以下このステップ
をその時点でレジスタを割り当てられている節の直接の
後続節について繰り返し、 (b3)後続節への割り当てに使用可能なレジスタがな
い場合は、該節での計算結果をメモリに書き込み、その
後必要に応じて該結果を使用可能となつたレジスタにロ
ードする ことにより、各基本ブロックへの、p個のうちのq個の
レジスタの割り当てを最適化するとともに、 (c)基本ブロックのフロー・グラフ状の表現について
生変数解析を行い、それに応じて、該表現においてルー
プが最も重要な最適化エンティティーであると仮定して
、(p−q)個のレジスタを用いた大域的なレジスタの
割り当てを最適化することを特徴とするコンパイル時の
レジスタの割り当て方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US809989 | 1985-12-17 | ||
US06/809,989 US4782444A (en) | 1985-12-17 | 1985-12-17 | Compilation using two-colored pebbling register allocation method such that spill code amount is invariant with basic block's textual ordering |
Publications (2)
Publication Number | Publication Date |
---|---|
JPS62144247A true JPS62144247A (ja) | 1987-06-27 |
JPH0776927B2 JPH0776927B2 (ja) | 1995-08-16 |
Family
ID=25202684
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP61266812A Expired - Lifetime JPH0776927B2 (ja) | 1985-12-17 | 1986-11-11 | コンパイル方法 |
Country Status (8)
Country | Link |
---|---|
US (1) | US4782444A (ja) |
EP (1) | EP0229245A3 (ja) |
JP (1) | JPH0776927B2 (ja) |
KR (1) | KR910009116B1 (ja) |
CN (1) | CN1003679B (ja) |
BR (1) | BR8605865A (ja) |
CA (1) | CA1264859A (ja) |
ES (1) | ES2004348A6 (ja) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS6481035A (en) * | 1987-09-22 | 1989-03-27 | Nec Corp | C compiler |
JPH04213118A (ja) * | 1990-12-07 | 1992-08-04 | Fuji Xerox Co Ltd | プログラム翻訳装置およびプログラム翻訳方法 |
JPH05108373A (ja) * | 1991-10-18 | 1993-04-30 | Matsushita Electric Ind Co Ltd | 資源割り付け装置 |
JP2008500654A (ja) * | 2004-06-30 | 2008-01-10 | インテル・コーポレーション | 仕切りのあるレジスタバンクのためのバンク付与 |
Families Citing this family (107)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS6378231A (ja) * | 1986-09-22 | 1988-04-08 | Nec Corp | 部分的プログラム結合方式 |
JPS6476322A (en) * | 1987-09-18 | 1989-03-22 | Hitachi Ltd | Program synthesizing method |
US4953084A (en) * | 1987-11-16 | 1990-08-28 | Hewlett-Packard Company | Method and apparatus using variable ranges to support symbolic debugging of optimized code |
US5121498A (en) * | 1988-05-11 | 1992-06-09 | Massachusetts Institute Of Technology | Translator for translating source code for selective unrolling of loops in the source code |
US5129086A (en) * | 1988-11-29 | 1992-07-07 | International Business Machines Corporation | System and method for intercommunicating between applications and a database manager |
US5070453A (en) * | 1989-04-10 | 1991-12-03 | At&T Bell Laboratories | System and method for scheduling data transfers among a plurality of data processing units to avoid conflicting data requests |
US5193190A (en) * | 1989-06-26 | 1993-03-09 | International Business Machines Corporation | Partitioning optimizations in an optimizing compiler |
US5274820A (en) * | 1989-08-14 | 1993-12-28 | International Business Machines Corporation | Method and system for eliminating operation codes from intermediate prolog instructions |
JPH03150637A (ja) * | 1989-11-08 | 1991-06-27 | Oki Electric Ind Co Ltd | パイプライン対応のレジスタ割付け方式 |
US5428793A (en) * | 1989-11-13 | 1995-06-27 | Hewlett-Packard Company | Method and apparatus for compiling computer programs with interproceduural register allocation |
WO1991010954A1 (en) * | 1990-01-19 | 1991-07-25 | Alliant Computer Systems Corporation | A risc vectorization system |
CA2010067C (en) * | 1990-02-14 | 1993-10-26 | Steven Murray Hoxey | Reducing pipeline delays in compilers by code hoisting |
EP0453160A3 (en) * | 1990-04-20 | 1993-09-15 | Digital Equipment Corporation | A method and apparatus for analyzing the flow of data through a complex information exchange system |
US5212794A (en) * | 1990-06-01 | 1993-05-18 | Hewlett-Packard Company | Method for optimizing computer code to provide more efficient execution on computers having cache memories |
US5202975A (en) * | 1990-06-11 | 1993-04-13 | Supercomputer Systems Limited Partnership | Method for optimizing instruction scheduling for a processor having multiple functional resources |
US5107418A (en) * | 1990-06-11 | 1992-04-21 | Supercomputer Systems Limited Partnership | Method for representing scalar data dependences for an optimizing compiler |
US5511218A (en) * | 1991-02-13 | 1996-04-23 | Hughes Aircraft Company | Connectionist architecture for weapons assignment |
JP3032031B2 (ja) * | 1991-04-05 | 2000-04-10 | 株式会社東芝 | ループ最適化方法及び装置 |
JP3049814B2 (ja) * | 1991-04-09 | 2000-06-05 | 日本電気株式会社 | マイクロコンピュータの言語処理装置 |
US5530866A (en) * | 1991-07-30 | 1996-06-25 | Tera Computer Company | Register allocation methods having upward pass for determining and propagating variable usage information and downward pass for binding; both passes utilizing interference graphs via coloring |
US5339428A (en) * | 1991-09-04 | 1994-08-16 | Digital Equipment Corporation | Compiler allocating a register to a data item used between a use and store of another data item previously allocated to the register |
US5386562A (en) * | 1992-05-13 | 1995-01-31 | Mips Computer Systems, Inc. | Circular scheduling method and apparatus for executing computer programs by moving independent instructions out of a loop |
US5418958A (en) * | 1992-07-15 | 1995-05-23 | Sun Microsystems, Inc. | Register allocation by decomposing, re-connecting and coloring hierarchical program regions |
US5367651A (en) * | 1992-11-30 | 1994-11-22 | Intel Corporation | Integrated register allocation, instruction scheduling, instruction reduction and loop unrolling |
US5469572A (en) * | 1992-12-01 | 1995-11-21 | Taylor; James M. | Post compile optimizer for linkable object code |
WO1994015304A1 (en) * | 1992-12-21 | 1994-07-07 | Apple Computer, Inc. | Method and apparatus for transforming an arbitrary topology collection of nodes into an acyclic directed graph |
SE502733C2 (sv) * | 1993-06-11 | 1995-12-18 | Ellemtel Utvecklings Ab | Sätt att undvika ej önskvärd interferens mellan tjänster i ett telekommunikationssystem |
CA2134059C (en) * | 1993-10-29 | 2009-01-13 | Charles Simonyi | Method and system for generating a computer program |
US5491823A (en) * | 1994-01-25 | 1996-02-13 | Silicon Graphics, Inc. | Loop scheduler |
US5999737A (en) * | 1994-03-01 | 1999-12-07 | Digital Equipment Corporation | Link time optimization via dead code elimination, code motion, code partitioning, code grouping, loop analysis with code motion, loop invariant analysis and active variable to register analysis |
US5590356A (en) * | 1994-08-23 | 1996-12-31 | Massachusetts Institute Of Technology | Mesh parallel computer architecture apparatus and associated methods |
JP3606387B2 (ja) * | 1994-09-13 | 2005-01-05 | 松下電器産業株式会社 | コンパイル装置 |
US5802375A (en) * | 1994-11-23 | 1998-09-01 | Cray Research, Inc. | Outer loop vectorization |
CN1149476C (zh) * | 1995-03-16 | 2004-05-12 | 松下电器产业株式会社 | 资源分配装置 |
US5659754A (en) * | 1995-03-31 | 1997-08-19 | Sun Microsystems, Inc. | Method and apparatus for an improved optimizing compiler |
US5691897A (en) * | 1995-05-30 | 1997-11-25 | Roy-G-Biv Corporation | Motion control systems |
US20060206219A1 (en) | 1995-05-30 | 2006-09-14 | Brown David W | Motion control systems and methods |
US7137107B1 (en) | 2003-04-29 | 2006-11-14 | Roy-G-Biv Corporation | Motion control systems and methods |
US7024666B1 (en) * | 2002-01-28 | 2006-04-04 | Roy-G-Biv Corporation | Motion control systems and methods |
US20100131081A1 (en) * | 1995-05-30 | 2010-05-27 | Brown David W | Systems and methods for motion control |
US7139843B1 (en) | 1995-05-30 | 2006-11-21 | Roy-G-Biv Corporation | System and methods for generating and communicating motion data through a distributed network |
JP3060907B2 (ja) * | 1995-07-28 | 2000-07-10 | 日本電気株式会社 | 言語処理プログラムの処理方式 |
US5761514A (en) * | 1995-08-31 | 1998-06-02 | International Business Machines Corporation | Register allocation method and apparatus for truncating runaway lifetimes of program variables in a computer system |
US6135650A (en) * | 1995-12-22 | 2000-10-24 | Sun Microsystems, Inc. | Method and system for wrapper routine optimization |
US5901317A (en) * | 1996-03-25 | 1999-05-04 | Sun Microsystems, Inc. | Method and system for register allocation using multiple interference graphs |
US5946491A (en) * | 1996-06-06 | 1999-08-31 | International Business Machines Corporation | Register allocation method and apparatus for gernerating spill code as a function of register pressure compared to dual thresholds |
US5901316A (en) * | 1996-07-01 | 1999-05-04 | Sun Microsystems, Inc. | Float register spill cache method, system, and computer program product |
KR100186338B1 (ko) * | 1996-08-02 | 1999-05-15 | 문정환 | 교환법칙이 성립하는 연산기의 입력단수 저감방법 |
WO1998006038A1 (en) * | 1996-08-07 | 1998-02-12 | Sun Microsystems, Inc. | Architectural support for software pipelining of loops |
US6049864A (en) * | 1996-08-20 | 2000-04-11 | Intel Corporation | Method for scheduling a flag generating instruction and a subsequent instruction by executing the flag generating instruction in a microprocessor |
US5937195A (en) * | 1996-11-27 | 1999-08-10 | Hewlett-Packard Co | Global control flow treatment of predicated code |
US5890000A (en) * | 1996-12-04 | 1999-03-30 | International Business Machines Corporation | Cooperation of global and local register allocators for better handling of procedures |
US6016398A (en) * | 1997-04-01 | 2000-01-18 | Intel Corporation | Method for using static single assignment to color out artificial register dependencies |
US6031994A (en) * | 1997-04-01 | 2000-02-29 | Intel Corporation | Method for determining the set of variables that may be ambiguously defined at a point in a computer program |
US6029005A (en) * | 1997-04-01 | 2000-02-22 | Intel Corporation | Method for identifying partial redundancies in a new processor architecture |
US5991540A (en) * | 1997-04-01 | 1999-11-23 | Intel Corporation | Method for identifying partial redundancies in existing processor architectures |
US6151704A (en) * | 1997-04-01 | 2000-11-21 | Intel Corporation | Method for optimizing a loop in a computer program by speculatively removing loads from within the loop |
CA2205797C (en) * | 1997-05-22 | 2001-04-24 | Andrew Wilfred Macleod | A system for local context spilling for graph colouring register allocators |
US6009272A (en) * | 1997-06-30 | 1999-12-28 | Sun Microsystems, Inc. | Register allocation via selective spilling |
US5987259A (en) * | 1997-06-30 | 1999-11-16 | Sun Microsystems, Inc. | Functional unit switching for the allocation of registers |
US6139200A (en) * | 1997-06-30 | 2000-10-31 | Sun Microsystems, Inc. | Register resource allocation feedback |
US6314562B1 (en) | 1997-09-12 | 2001-11-06 | Microsoft Corporation | Method and system for anticipatory optimization of computer programs |
US20010032278A1 (en) * | 1997-10-07 | 2001-10-18 | Brown Stephen J. | Remote generation and distribution of command programs for programmable devices |
US6058265A (en) * | 1997-10-21 | 2000-05-02 | Hewlett Packard Company | Enabling troubleshooting of subroutines with greatest execution time/input data set size relationship |
US6292938B1 (en) * | 1998-12-02 | 2001-09-18 | International Business Machines Corporation | Retargeting optimized code by matching tree patterns in directed acyclic graphs |
US6954927B2 (en) * | 1999-02-17 | 2005-10-11 | Elbrus International | Hardware supported software pipelined loop prologue optimization |
US6317876B1 (en) * | 1999-06-08 | 2001-11-13 | Hewlett-Packard Company | Method and apparatus for determining a maximum number of live registers |
JP4041248B2 (ja) * | 1999-07-09 | 2008-01-30 | 松下電器産業株式会社 | コンパイラ装置、コンパイルプログラムが記録されたコンピュータ読み取り可能な記録媒体及びコンパイル方法 |
US8032605B2 (en) | 1999-10-27 | 2011-10-04 | Roy-G-Biv Corporation | Generation and distribution of motion commands over a distributed network |
US20100131078A1 (en) * | 1999-10-27 | 2010-05-27 | Brown David W | Event driven motion systems |
US6885898B1 (en) | 2001-05-18 | 2005-04-26 | Roy-G-Biv Corporation | Event driven motion systems |
CA2288614C (en) | 1999-11-08 | 2004-05-11 | Robert J. Blainey | Loop allocation for optimizing compilers |
US6725218B1 (en) | 2000-04-28 | 2004-04-20 | Cisco Technology, Inc. | Computerized database system and method |
JP3651774B2 (ja) * | 2000-09-12 | 2005-05-25 | インターナショナル・ビジネス・マシーンズ・コーポレーション | コンパイラ及びそのレジスタ割付方法 |
US6883165B1 (en) | 2000-09-28 | 2005-04-19 | International Business Machines Corporation | Apparatus and method for avoiding deadlocks in a multithreaded environment |
US6799262B1 (en) | 2000-09-28 | 2004-09-28 | International Business Machines Corporation | Apparatus and method for creating instruction groups for explicity parallel architectures |
US6779106B1 (en) | 2000-09-28 | 2004-08-17 | International Business Machines Corporation | Apparatus and method for an enhanced integer divide in an IA64 architecture |
US6886094B1 (en) | 2000-09-28 | 2005-04-26 | International Business Machines Corporation | Apparatus and method for detecting and handling exceptions |
US6912647B1 (en) | 2000-09-28 | 2005-06-28 | International Business Machines Corportion | Apparatus and method for creating instruction bundles in an explicitly parallel architecture |
WO2002071241A1 (en) | 2001-02-09 | 2002-09-12 | Roy-G-Biv Corporation | Event management systems and methods for the distribution of motion control commands |
US7904194B2 (en) | 2001-02-09 | 2011-03-08 | Roy-G-Biv Corporation | Event management systems and methods for motion control systems |
US7013460B2 (en) * | 2001-05-15 | 2006-03-14 | Hewlett-Packard Development Company, L.P. | Specifying an invariant property (range of addresses) in the annotation in source code of the computer program |
US20030079210A1 (en) * | 2001-10-19 | 2003-04-24 | Peter Markstein | Integrated register allocator in a compiler |
US7263694B2 (en) * | 2001-10-26 | 2007-08-28 | International Business Machines Corporation | Directed non-cyclic graph walking system for data processing and analysis in software application |
US20030237080A1 (en) * | 2002-06-19 | 2003-12-25 | Carol Thompson | System and method for improved register allocation in an optimizing compiler |
US7069548B2 (en) * | 2002-06-28 | 2006-06-27 | Intel Corporation | Inter-procedure global register allocation method |
US20040025151A1 (en) * | 2002-07-31 | 2004-02-05 | Shan-Chyun Ku | Method for improving instruction selection efficiency in a DSP/RISC compiler |
US7111287B2 (en) * | 2003-01-10 | 2006-09-19 | International Business Machines Corporation | Global processor resource assignment in an assembler |
US7185329B1 (en) | 2003-03-28 | 2007-02-27 | Applied Micro Circuits Corporation | Use of different color sequences for variables of different sizes and different semantics |
US7207032B1 (en) * | 2003-03-28 | 2007-04-17 | Applied Micro Circuits Corporation | Expanding a software program by insertion of statements |
US8027349B2 (en) * | 2003-09-25 | 2011-09-27 | Roy-G-Biv Corporation | Database event driven motion systems |
US20060064503A1 (en) | 2003-09-25 | 2006-03-23 | Brown David W | Data routing systems and methods |
US20100131077A1 (en) * | 2004-02-25 | 2010-05-27 | Brown David W | Data Collection Systems and Methods for Motion Control |
KR100597414B1 (ko) * | 2004-10-21 | 2006-07-05 | 삼성전자주식회사 | 데이터 처리 장치 및 이를 이용한 레지스터 할당 방법 |
CN100337202C (zh) * | 2004-12-03 | 2007-09-12 | 中国科学院计算技术研究所 | 一种汇编代码热函数中的热路径搜寻方法 |
US20060200811A1 (en) * | 2005-03-07 | 2006-09-07 | Cheng Stephen M | Method of generating optimised stack code |
CN100414505C (zh) * | 2005-07-08 | 2008-08-27 | 中国科学院计算技术研究所 | 一种基于组合并算法的偏移量分配优化方法 |
US7797692B1 (en) * | 2006-05-12 | 2010-09-14 | Google Inc. | Estimating a dominant resource used by a computer program |
US8237726B2 (en) * | 2009-06-26 | 2012-08-07 | Intel Corporation | Register allocation for message sends in graphics processing pipelines |
US8933954B2 (en) | 2011-03-23 | 2015-01-13 | Qualcomm Incorporated | Register allocation for graphics processing |
CN103399741B (zh) * | 2013-07-24 | 2016-05-25 | 中国科学院声学研究所 | 一种汇编级静态路径剖析方法及装置 |
US9619214B2 (en) | 2014-08-13 | 2017-04-11 | International Business Machines Corporation | Compiler optimizations for vector instructions |
US10169014B2 (en) | 2014-12-19 | 2019-01-01 | International Business Machines Corporation | Compiler method for generating instructions for vector operations in a multi-endian instruction set |
US9588746B2 (en) | 2014-12-19 | 2017-03-07 | International Business Machines Corporation | Compiler method for generating instructions for vector operations on a multi-endian processor |
US9569190B1 (en) | 2015-08-04 | 2017-02-14 | International Business Machines Corporation | Compiling source code to reduce run-time execution of vector element reverse operations |
US9880821B2 (en) | 2015-08-17 | 2018-01-30 | International Business Machines Corporation | Compiler optimizations for vector operations that are reformatting-resistant |
KR20170047957A (ko) * | 2015-10-26 | 2017-05-08 | 삼성전자주식회사 | 반도체 장치의 동작 방법 및 반도체 시스템 |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE1250659B (de) * | 1964-04-06 | 1967-09-21 | International Business Machines Corporation, Armonk, NY (V St A) | Mikroprogrammgesteuerte Datenverarbeitungsanlage |
US3921153A (en) * | 1973-08-02 | 1975-11-18 | Ibm | System and method for evaluating paging behavior |
US4493020A (en) * | 1980-05-06 | 1985-01-08 | Burroughs Corporation | Microprogrammed digital data processor employing microinstruction tasking and dynamic register allocation |
US4378590A (en) * | 1980-09-03 | 1983-03-29 | Burroughs Corporation | Register allocation apparatus |
US4435753A (en) * | 1980-10-31 | 1984-03-06 | International Business Machines Corporation | Register allocation system using recursive queuing during source code compilation |
US4571678A (en) * | 1982-11-05 | 1986-02-18 | International Business Machines Corporation | Register allocation and spilling via graph coloring |
US4567574A (en) * | 1983-03-14 | 1986-01-28 | International Business Machines Corporation | Optimizing cobol object code instruction path length with respect to perform statements |
JPS6140643A (ja) * | 1984-07-31 | 1986-02-26 | Hitachi Ltd | システムの資源割当て制御方式 |
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 |
US4656582A (en) * | 1985-02-04 | 1987-04-07 | International Business Machines Corporation | Generating storage reference instructions in an optimizing compiler |
US4722071A (en) * | 1985-04-19 | 1988-01-26 | Pertron Controls, Corporation | Compiler for evaluating Boolean expressions |
-
1985
- 1985-12-17 US US06/809,989 patent/US4782444A/en not_active Expired - Lifetime
-
1986
- 1986-10-15 CA CA000520567A patent/CA1264859A/en not_active Expired - Fee Related
- 1986-10-28 EP EP86114964A patent/EP0229245A3/en not_active Withdrawn
- 1986-11-11 JP JP61266812A patent/JPH0776927B2/ja not_active Expired - Lifetime
- 1986-11-14 CN CN86107764.4A patent/CN1003679B/zh not_active Expired
- 1986-11-15 KR KR1019860009654A patent/KR910009116B1/ko not_active IP Right Cessation
- 1986-12-01 BR BR8605865A patent/BR8605865A/pt not_active IP Right Cessation
- 1986-12-09 ES ES8603326A patent/ES2004348A6/es not_active Expired
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS6481035A (en) * | 1987-09-22 | 1989-03-27 | Nec Corp | C compiler |
JPH04213118A (ja) * | 1990-12-07 | 1992-08-04 | Fuji Xerox Co Ltd | プログラム翻訳装置およびプログラム翻訳方法 |
JPH05108373A (ja) * | 1991-10-18 | 1993-04-30 | Matsushita Electric Ind Co Ltd | 資源割り付け装置 |
JP2008500654A (ja) * | 2004-06-30 | 2008-01-10 | インテル・コーポレーション | 仕切りのあるレジスタバンクのためのバンク付与 |
Also Published As
Publication number | Publication date |
---|---|
CN1003679B (zh) | 1989-03-22 |
JPH0776927B2 (ja) | 1995-08-16 |
BR8605865A (pt) | 1987-08-25 |
CN86107764A (zh) | 1987-07-01 |
KR910009116B1 (ko) | 1991-10-31 |
EP0229245A2 (en) | 1987-07-22 |
EP0229245A3 (en) | 1990-03-21 |
CA1264859A (en) | 1990-01-23 |
ES2004348A6 (es) | 1989-01-01 |
KR870006460A (ko) | 1987-07-11 |
US4782444A (en) | 1988-11-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JPS62144247A (ja) | コンパイル方法 | |
Govindarajan et al. | A framework for resource-constrained rate-optimal software pipelining | |
CN104965687B (zh) | 基于指令集生成的大数据处理方法及装置 | |
Beaty | Instruction scheduling using genetic algorithms | |
Gualandi et al. | Pallene: a statically typed companion language for lua | |
Majchrzak et al. | Logic java: combining object-oriented and logic programming | |
Antoy et al. | A virtual machine for functional logic computations | |
Ibrahim et al. | Performance portability of sparse block diagonal matrix multiple vector multiplications on gpus | |
Zhu et al. | Locality analysis for parallel C programs | |
Gheorghioiu | Statistically determining memory consumption of real-time java threads | |
Johnsson | An approach to global register allocation. | |
Weening | Parallel execution of Lisp programs | |
Hagedorn et al. | Achieving High Performance the Functional Way: Expressing High-Performance Optimizations as Rewrite Strategies | |
Ekanadham | Future scientific programming on parallel machines | |
Lawrence | Optimizing compilation with the value state dependence graph | |
Browne et al. | Visual programming and parallel computing | |
Jagannathan | Communication-passing style for coordination languages | |
Poletto | Language and compiler support for dyanmic code generation | |
Waite et al. | Code generation | |
Schmitt et al. | A language extension set to generate adaptive versions automatically | |
Papazoglou et al. | An outline of the programming language Simula | |
Widemann et al. | The Functional Programming Language R and the Paradigm of Dynamic Scientific Programming: (Position Paper) | |
Browne | Understanding execution behavior of software systems | |
Lin | Code Generation from Functional to Imperative: Combining Destination-Passing Style and Views | |
JPH03135630A (ja) | 命令スケジューリング方式 |