JPH0776927B2 - コンパイル方法 - Google Patents
コンパイル方法Info
- Publication number
- JPH0776927B2 JPH0776927B2 JP61266812A JP26681286A JPH0776927B2 JP H0776927 B2 JPH0776927 B2 JP H0776927B2 JP 61266812 A JP61266812 A JP 61266812A JP 26681286 A JP26681286 A JP 26681286A JP H0776927 B2 JPH0776927 B2 JP H0776927B2
- Authority
- JP
- Japan
- Prior art keywords
- registers
- graph
- node
- register
- allocation
- 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 - Lifetime
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
-
- 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/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)
Description
【発明の詳細な説明】 A.産業上の利用分野 本発明はスカラプロセツサ又はベクトルプロセツサのい
ずれかで、原始コードをマシの実行可能なコードにコン
パイルする際に、レジスタの割当ての最適化を行うコン
パイラに関する。
ずれかで、原始コードをマシの実行可能なコードにコン
パイルする際に、レジスタの割当ての最適化を行うコン
パイラに関する。
B.従来技術及びその問題点 コンパイラ構成に関する標準的な著作の中で、Aho等に
よる“Principles of Compiler Design"、Addision−We
sley Publishing Co.,1977、及びWaite等による“Compi
ler Construction"、Springer−Verlag,1984は、PASCAL
やFORTRAN等のコンピユータの原始言語を、目的計算機
によつて実行可能なコードに変換する場合、一連の変換
によつて行なわれることを指摘している。まず、原始記
号例は字句解析されて、翻訳のためのアトミツク単位す
なわちワードが確定され、次に構文解析されて、ワード
間の文関係を確定する。この出力は、「解析木」の形で
表現される。この解析木は、原始コードの中間言語表現
に変換される。大抵のコンパイラは、解析木を明示的に
生成しないが、構文解析が生じるように中間コードを形
成する。次に、最適化が中間コードに適用され、その
後、目的計算機の実行可能コード、すなわち目的コード
が生成される。
よる“Principles of Compiler Design"、Addision−We
sley Publishing Co.,1977、及びWaite等による“Compi
ler Construction"、Springer−Verlag,1984は、PASCAL
やFORTRAN等のコンピユータの原始言語を、目的計算機
によつて実行可能なコードに変換する場合、一連の変換
によつて行なわれることを指摘している。まず、原始記
号例は字句解析されて、翻訳のためのアトミツク単位す
なわちワードが確定され、次に構文解析されて、ワード
間の文関係を確定する。この出力は、「解析木」の形で
表現される。この解析木は、原始コードの中間言語表現
に変換される。大抵のコンパイラは、解析木を明示的に
生成しないが、構文解析が生じるように中間コードを形
成する。次に、最適化が中間コードに適用され、その
後、目的計算機の実行可能コード、すなわち目的コード
が生成される。
コンパイラが実行しなければならないタスクの中には、
原始コード命令のストリームによつて指定される計算が
効率よく完了されることができるように、計算資源が割
り付け及び割り当てられる使用可能な「資源」の中に
は、ALUのような計算機構、入出力、レジスタを含むメ
モリ、及び、オペレーティングシステム要素等が含まれ
る。コンパイラの最適化部の目的は、(a)コードサイ
ズを縮小する(b)可能な場合、実行速度を増大する
(c)資源割り付けにより、コストを最小限にすること
にある。資源使用又は消費パターンのスケジユールは、
コンパイルされるコードに埋め込まれる。
原始コード命令のストリームによつて指定される計算が
効率よく完了されることができるように、計算資源が割
り付け及び割り当てられる使用可能な「資源」の中に
は、ALUのような計算機構、入出力、レジスタを含むメ
モリ、及び、オペレーティングシステム要素等が含まれ
る。コンパイラの最適化部の目的は、(a)コードサイ
ズを縮小する(b)可能な場合、実行速度を増大する
(c)資源割り付けにより、コストを最小限にすること
にある。資源使用又は消費パターンのスケジユールは、
コンパイルされるコードに埋め込まれる。
命令ストリームはグラフ構成に写像されることができ、
グラフ理論の特性を利用することができることは周知で
ある。コード列は、局所最適化に対して基本ブロツクの
グラフ特性により、そして大域最適化に対して基本ブロ
ツクのフローグラフにより解析される。
グラフ理論の特性を利用することができることは周知で
ある。コード列は、局所最適化に対して基本ブロツクの
グラフ特性により、そして大域最適化に対して基本ブロ
ツクのフローグラフにより解析される。
基本ブロツクとは、連続した文の列からなる。この列は
開始においてのみ入力され、入力されると、この文は停
止又は分岐の可能性もなく(ただし、列の終わりは除
く)順次実行される。
開始においてのみ入力され、入力されると、この文は停
止又は分岐の可能性もなく(ただし、列の終わりは除
く)順次実行される。
フローグラフは、基本ブロツク間の制御フローを記述す
る。フローグラフは、例えば、反復計算又は再帰計算に
必要な基本ブロツク間のループ、分岐及びネステイング
動作を示す。
る。フローグラフは、例えば、反復計算又は再帰計算に
必要な基本ブロツク間のループ、分岐及びネステイング
動作を示す。
データ依存の閉路のない有向グラフ(DAG)は、基本ブ
ロツクを解析するためのデータ構造である。例えば、a
=s+cは、b+cにより、それぞれの辺を通して各々
が共通節点Cに接続される開始節として表現される。フ
ローグラフの各節点又は(基本ブロツク)はそれぞれDA
Gによつて表現されることができるけれども、それはフ
ローグラフではない。
ロツクを解析するためのデータ構造である。例えば、a
=s+cは、b+cにより、それぞれの辺を通して各々
が共通節点Cに接続される開始節として表現される。フ
ローグラフの各節点又は(基本ブロツク)はそれぞれDA
Gによつて表現されることができるけれども、それはフ
ローグラフではない。
「生きている変数の解析」は、名前が後に計算に使われ
るかもしれない値を有するか否かを確定する技術を称す
る。この名前が基本ブロツク内で再定義される前に使わ
れるか、又は、この基本ブロツクから「生きて」出てき
て該基本ブロツク内で「再定義」されないかのいずれか
の場合、その名前はブロツクに「生きて」入ると考えら
れる。したがつて、レジスタである値が計算され、基本
ブロツク内で多分使用された後、その値が基本ブロツク
の終わりで「死んで」いるならば、その値を記録する必
要はない。また、全レジスタが満杯で、かつ他のレジス
タが必要とされるならば、「死んでいる」値を現在含む
レジスタに割り当てがなされ得る。
るかもしれない値を有するか否かを確定する技術を称す
る。この名前が基本ブロツク内で再定義される前に使わ
れるか、又は、この基本ブロツクから「生きて」出てき
て該基本ブロツク内で「再定義」されないかのいずれか
の場合、その名前はブロツクに「生きて」入ると考えら
れる。したがつて、レジスタである値が計算され、基本
ブロツク内で多分使用された後、その値が基本ブロツク
の終わりで「死んで」いるならば、その値を記録する必
要はない。また、全レジスタが満杯で、かつ他のレジス
タが必要とされるならば、「死んでいる」値を現在含む
レジスタに割り当てがなされ得る。
概念的に、第1のコンパイラ変換は、原始コードのスト
リングをフローグラフに写像することからなる。フロー
グラフの節点のそれぞれは基本ブロツクで、かつフロー
グラフの制御とデータパスの関係は、フローグラフの有
向辺によつて定義される。資源の割り付け及び割り当て
の最適化は、まず局所ブロツクレベル、すなわち基本ブ
ロツクレベルで考慮され、次に、大域グラフレベルすな
わちフローグラフレベルで考慮されることができる。
リングをフローグラフに写像することからなる。フロー
グラフの節点のそれぞれは基本ブロツクで、かつフロー
グラフの制御とデータパスの関係は、フローグラフの有
向辺によつて定義される。資源の割り付け及び割り当て
の最適化は、まず局所ブロツクレベル、すなわち基本ブ
ロツクレベルで考慮され、次に、大域グラフレベルすな
わちフローグラフレベルで考慮されることができる。
局所最適化では、各基本ブロツクは別々の単位として扱
われ、その内容と無関係に最適化される。データ依存グ
ラフは、基本ブロツクのために形成され、変形され、そ
して、最終機械コードを生成するのに用いられる。その
後、該グラフは放棄され、次の基本ブロツクが考慮され
る。「データ依存グラフ」とは、基本ブロツク内のグラ
フ論理的属性の表現である。基本ブロツクは閉路を含む
ことができないので、全てのデータ依存グラフの基本ブ
ロツクは、DAGによつて表現されることができる。因にD
AGは必ずしも木ではない。実例として、基本ブロツクが
2つの計算文x=u+v、y=u+wから成るならば、
DAGは、閉路がないけれども、木ではない。最後に、大
域最適化は、フローグラフの大域再配置を行ない、基本
ブロツクの境界に文脈情報を提供する。
われ、その内容と無関係に最適化される。データ依存グ
ラフは、基本ブロツクのために形成され、変形され、そ
して、最終機械コードを生成するのに用いられる。その
後、該グラフは放棄され、次の基本ブロツクが考慮され
る。「データ依存グラフ」とは、基本ブロツク内のグラ
フ論理的属性の表現である。基本ブロツクは閉路を含む
ことができないので、全てのデータ依存グラフの基本ブ
ロツクは、DAGによつて表現されることができる。因にD
AGは必ずしも木ではない。実例として、基本ブロツクが
2つの計算文x=u+v、y=u+wから成るならば、
DAGは、閉路がないけれども、木ではない。最後に、大
域最適化は、フローグラフの大域再配置を行ない、基本
ブロツクの境界に文脈情報を提供する。
コンピュータはメモリを含み、その最高速の形態が、最
も高価である。有限個の物理レジスタは、計算及び制御
のために直接使用するオペランドを記憶する。レジスタ
間で演算をコンピユータの命令は、最高速で実行され
る。レジスタが使用できない場合は、中間結果は、プロ
グラム及びデータの大部分が記録されているメインメモ
リにロードされるか、又は、レジスタが使用可能である
場合、前記メインメモリからレジスタにロードされるか
のいずれかでなければならない。メモリからレジスタへ
のロード及びストアは、実質的に長い時間を有する。し
たがつて、フローグラム又は基本ブロツクのいずれかを
評価する場合、1つの目的は、多数の計算名又は計算変
数をレジスタに保持するか、又は必要とされるレジスタ
を使用可能にすることにある。
も高価である。有限個の物理レジスタは、計算及び制御
のために直接使用するオペランドを記憶する。レジスタ
間で演算をコンピユータの命令は、最高速で実行され
る。レジスタが使用できない場合は、中間結果は、プロ
グラム及びデータの大部分が記録されているメインメモ
リにロードされるか、又は、レジスタが使用可能である
場合、前記メインメモリからレジスタにロードされるか
のいずれかでなければならない。メモリからレジスタへ
のロード及びストアは、実質的に長い時間を有する。し
たがつて、フローグラム又は基本ブロツクのいずれかを
評価する場合、1つの目的は、多数の計算名又は計算変
数をレジスタに保持するか、又は必要とされるレジスタ
を使用可能にすることにある。
レジスタの割り付けは、レジスタ(すなわち、必要とさ
れるレジスタ数に常駐すべきソフトウエアストリームの
名前)を伴う一方、割り当てとは、基礎をなすスキー
ム、規則又はモデルに従う節点にレジスタを割り当てる
ステツプである。従来、使用される割り付け方法に中に
は、割り当てを固定することがあつた。すなわち、オブ
ジエクトプログラム量の特定の種類は、一定のレジスタ
に割り当てられた。例えば、サブルーチンリンクは第1
のレジスタ群に、ベースアドレスは第2のレジスタ群
に、算術計算は、第3のレジスタ群に、実行時のスタツ
クポイントは一定のレジスタなどに割り当てることがで
きた。このような固定写像の欠点は、レジスタの使用が
実行要求に動的に従わないことである。これは、幾つか
のレジスタが、全く使用されなかつたり、過剰使用され
たり、又は過少に使用されたりすることを意味する。
れるレジスタ数に常駐すべきソフトウエアストリームの
名前)を伴う一方、割り当てとは、基礎をなすスキー
ム、規則又はモデルに従う節点にレジスタを割り当てる
ステツプである。従来、使用される割り付け方法に中に
は、割り当てを固定することがあつた。すなわち、オブ
ジエクトプログラム量の特定の種類は、一定のレジスタ
に割り当てられた。例えば、サブルーチンリンクは第1
のレジスタ群に、ベースアドレスは第2のレジスタ群
に、算術計算は、第3のレジスタ群に、実行時のスタツ
クポイントは一定のレジスタなどに割り当てることがで
きた。このような固定写像の欠点は、レジスタの使用が
実行要求に動的に従わないことである。これは、幾つか
のレジスタが、全く使用されなかつたり、過剰使用され
たり、又は過少に使用されたりすることを意味する。
大域レジスタ割り付けは、ほとんどプログラムがその時
間のほとんどを内側のループで費すという観測に関係す
る。したがつて、割り当ての1つ方法には、頻繁に使用
される名前を、ループの間中、固定レジスタに保持して
おくことである。したがつて、1つの方法は、一定数の
レジスタを割り当て、各内側のループの最活性名を保持
することである。選択された名前は、異なるループでは
異なる。他の非専用レジスタは、1つのブロツクに対し
て局所的である値を保持するのに使用される。この割り
付け及び割り当ては、いかなる所定のレジスタ数も、大
域レジスタ割り付けに使用可能にするために普遍的な正
しい数ではないという欠点がある。
間のほとんどを内側のループで費すという観測に関係す
る。したがつて、割り当ての1つ方法には、頻繁に使用
される名前を、ループの間中、固定レジスタに保持して
おくことである。したがつて、1つの方法は、一定数の
レジスタを割り当て、各内側のループの最活性名を保持
することである。選択された名前は、異なるループでは
異なる。他の非専用レジスタは、1つのブロツクに対し
て局所的である値を保持するのに使用される。この割り
付け及び割り当ては、いかなる所定のレジスタ数も、大
域レジスタ割り付けに使用可能にするために普遍的な正
しい数ではないという欠点がある。
Chaitin等による“Relister Allocation Via Colorin
g",Computer Languages,Vol.6,1981,pp.47−57,Pergamo
n Press Limited及びChaitinによる“Register Allocat
ion and Spilling Via GraphColoring",Proceeding SIG
NPLAN82,Symposium onCompiler Construction,SIGPLAN
Notices,1982,pp.98−105には、全手続きにわたり大域
レジスタ割り付け方法が記載されている。前記文献で
は、1つを除いて全レジスタは一様なプールの一部であ
ると考えられ、全計算は、これらのレジスタのために同
一の根拠で競合する。実際、いかなるレジスタの部分集
合も保有されない。
g",Computer Languages,Vol.6,1981,pp.47−57,Pergamo
n Press Limited及びChaitinによる“Register Allocat
ion and Spilling Via GraphColoring",Proceeding SIG
NPLAN82,Symposium onCompiler Construction,SIGPLAN
Notices,1982,pp.98−105には、全手続きにわたり大域
レジスタ割り付け方法が記載されている。前記文献で
は、1つを除いて全レジスタは一様なプールの一部であ
ると考えられ、全計算は、これらのレジスタのために同
一の根拠で競合する。実際、いかなるレジスタの部分集
合も保有されない。
前記文献では、メモリよりもむしろレジスタで、できる
だけ多くの計算を保持することが意図されている。なぜ
なら、ロード及びストア命令は、レジスタ−レジスタの
命令よりも高価だからである。また、前記文献には、無
限数のレジスタ(すなわちプールとみなされる。これ
は、中間言語で、プログラムのロード及びストアの数を
最小限にするために許される)を利用することは、コー
ド生成及び最適化の責任であると記載されている。
だけ多くの計算を保持することが意図されている。なぜ
なら、ロード及びストア命令は、レジスタ−レジスタの
命令よりも高価だからである。また、前記文献には、無
限数のレジスタ(すなわちプールとみなされる。これ
は、中間言語で、プログラムのロード及びストアの数を
最小限にするために許される)を利用することは、コー
ド生成及び最適化の責任であると記載されている。
前記文献の批評的な観察によれば、レジスタの割り付け
は、グラフ彩色問題として解析可能である。グラフ彩色
とは、2つの節点が隣接されているならば(グラフの辺
によつて連結される)それらは異なる色を有するように
その節の各々に色を割り当てることをいう。グラフの
「彩色数」とはその任意の彩色における最少彩色数をい
う。前記文献には、レジスタ割り付けは「レジスタ干渉
グラフ」と呼ばれる構造を利用している。マシン・レジ
スタに常駐する計算又は名前は、それらがプログラムの
任意の点で同時に「生きて」いるならば、互いに「干渉
する」といわれる。
は、グラフ彩色問題として解析可能である。グラフ彩色
とは、2つの節点が隣接されているならば(グラフの辺
によつて連結される)それらは異なる色を有するように
その節の各々に色を割り当てることをいう。グラフの
「彩色数」とはその任意の彩色における最少彩色数をい
う。前記文献には、レジスタ割り付けは「レジスタ干渉
グラフ」と呼ばれる構造を利用している。マシン・レジ
スタに常駐する計算又は名前は、それらがプログラムの
任意の点で同時に「生きて」いるならば、互いに「干渉
する」といわれる。
前記文献のグラフ彩色方法は、次のテツプを含んでい
る。(a)コードの特定のテキスト配列に対して、名前
から干渉グラフを形成する(b)該グラフの彩色数を確
定し、該彩色数が使用可能なレジスタ数を越えなけれ
ば、彩色(節点にレジスタを割り当てる)して、そうで
ない場合は、最大入出次数を有する節、すなわち節点及
びその連結辺を削除することにより、このグラフを削減
する。(c)値が収束するまで、ステツプ(b)を繰り
返す。(d)コンパイルされたコードストリームに、適
当なメモリへの書込み及びメモリからのロードを埋め込
むことによつて、「こぼれ(spills)」の報告及び管理
を行う。
る。(a)コードの特定のテキスト配列に対して、名前
から干渉グラフを形成する(b)該グラフの彩色数を確
定し、該彩色数が使用可能なレジスタ数を越えなけれ
ば、彩色(節点にレジスタを割り当てる)して、そうで
ない場合は、最大入出次数を有する節、すなわち節点及
びその連結辺を削除することにより、このグラフを削減
する。(c)値が収束するまで、ステツプ(b)を繰り
返す。(d)コンパイルされたコードストリームに、適
当なメモリへの書込み及びメモリからのロードを埋め込
むことによつて、「こぼれ(spills)」の報告及び管理
を行う。
本発明の目的は、スカラプロセツサ又はベクトルプロセ
ツサのいずれかで、原始コードを実行可能なコードにコ
ンパイルする際に、最適なレジスタの割り付け及び割り
当てを行い、それによつてこぼれ数(メモリへの参照数
及びメモリからの参照数)を最少にすることにある。関
連する目的は、こぼれコード量が基本ブロツク内のテキ
スト配列に対して不変であるように、レジスタを割り付
け及び割り当てることにある。
ツサのいずれかで、原始コードを実行可能なコードにコ
ンパイルする際に、最適なレジスタの割り付け及び割り
当てを行い、それによつてこぼれ数(メモリへの参照数
及びメモリからの参照数)を最少にすることにある。関
連する目的は、こぼれコード量が基本ブロツク内のテキ
スト配列に対して不変であるように、レジスタを割り付
け及び割り当てることにある。
C.問題点を解決するための手段 スカラプロセツサ又はベクトルプロセツサのいずれかで
原始コードを実行可能コードにコンパイルする際の最適
化フエーズ中、レジスタを割り付け、かつ「基本ブロツ
ク」と呼ばれる分岐のないコード領域に局所的に前記割
り付けを最適化する方法によつて、前記目的は達成され
る。各基本ブロツクは、計算を定義する文を有する。ま
た、各プロセツサは、実行可能コード及びデータ列を記
憶するメモリと、前記メモリをアクセスし、かつアクセ
スされたコードを実行する手段とを含む。このプロセツ
サでは、メモリは、有限のP個のレジスタとそれと同等
の無限の内部メモリとを含む2レベルメモリ・モデルと
して写像される。関連することだが、レジスタのアクセ
ス時間は、内部メモリのアクセス時間よりも速い。
原始コードを実行可能コードにコンパイルする際の最適
化フエーズ中、レジスタを割り付け、かつ「基本ブロツ
ク」と呼ばれる分岐のないコード領域に局所的に前記割
り付けを最適化する方法によつて、前記目的は達成され
る。各基本ブロツクは、計算を定義する文を有する。ま
た、各プロセツサは、実行可能コード及びデータ列を記
憶するメモリと、前記メモリをアクセスし、かつアクセ
スされたコードを実行する手段とを含む。このプロセツ
サでは、メモリは、有限のP個のレジスタとそれと同等
の無限の内部メモリとを含む2レベルメモリ・モデルと
して写像される。関連することだが、レジスタのアクセ
ス時間は、内部メモリのアクセス時間よりも速い。
本発明の方法は、プロセツサで実現される次の(a),
(b)のステツプを含む。(a)基本ブロツクのデータ
依存グラフの属性を確定する。(b)2レベルメモリ・
モデルを使用する確定データ依存グラフに「2色の小石
ゲーム」発見法を実行することにより、基本ブロツク内
の全計算に関して、p個のレジスタのうちq個の割り付
け及び割り当てを生成する。
(b)のステツプを含む。(a)基本ブロツクのデータ
依存グラフの属性を確定する。(b)2レベルメモリ・
モデルを使用する確定データ依存グラフに「2色の小石
ゲーム」発見法を実行することにより、基本ブロツク内
の全計算に関して、p個のレジスタのうちq個の割り付
け及び割り当てを生成する。
上記(a),(b)に加えて、(c)生きている変数の
解析を行い、それに応じてループが最も重要な最適化エ
ンテイテイーであると仮定する大域レジスタ割り付け及
び割り当てを生成するステツプを含んでいる局所レジス
タ及び大域レジスタの最適化のための方法によつて、前
述の目的は一層よく達成される。
解析を行い、それに応じてループが最も重要な最適化エ
ンテイテイーであると仮定する大域レジスタ割り付け及
び割り当てを生成するステツプを含んでいる局所レジス
タ及び大域レジスタの最適化のための方法によつて、前
述の目的は一層よく達成される。
前記文献の「レジスタ干渉グラフ」と異なり、データ依
存グラフはテキスト配列に対して不変である。本発明の
方法は、割り付け処理を2つのステツプに分割する。第
1のステツプは、有効な局所的割り付けを得ることであ
る。第2のステツプは、局所的割り付けを用いて大域的
割り付けを得ることである。データ依存グラフで行われ
る小石ゲーム発見法は、基本ブロツク内のこぼれが最少
にされることを保証する。該発見法は、基本ブロツクに
対応するグラフ上で赤と青の小石ゲームを行うことを意
味する。メモリへのアクセスは、該グラフ上に青い小石
を置くことによつてモデル化され、一方、レジスタへの
アクセスは、該グラフ上に赤い小石を置くことによつて
モデル化される。このモデルは、こぼれを正確に制御す
る。同じデータ依存グラフは同じ割り付けを生じる。
存グラフはテキスト配列に対して不変である。本発明の
方法は、割り付け処理を2つのステツプに分割する。第
1のステツプは、有効な局所的割り付けを得ることであ
る。第2のステツプは、局所的割り付けを用いて大域的
割り付けを得ることである。データ依存グラフで行われ
る小石ゲーム発見法は、基本ブロツク内のこぼれが最少
にされることを保証する。該発見法は、基本ブロツクに
対応するグラフ上で赤と青の小石ゲームを行うことを意
味する。メモリへのアクセスは、該グラフ上に青い小石
を置くことによつてモデル化され、一方、レジスタへの
アクセスは、該グラフ上に赤い小石を置くことによつて
モデル化される。このモデルは、こぼれを正確に制御す
る。同じデータ依存グラフは同じ割り付けを生じる。
重要なことは、局所的割り付けを実行する間、使用可能
レジスタの全てが使用されるわけではないことである。
実際、幾つかのレジスタは、大域情報を伝送するために
取つて置かれる。関連することだか、2番目の大きなス
テツプは、これらのレジスタを使用してメモリへのアク
セスをさらに減少させる大域最適化を行うステツプであ
る。これらの大域レジスタのために選ばれる変数は、全
プログラムのロード操作数又はストア操作数を最大限に
減少させるように選択される。
レジスタの全てが使用されるわけではないことである。
実際、幾つかのレジスタは、大域情報を伝送するために
取つて置かれる。関連することだか、2番目の大きなス
テツプは、これらのレジスタを使用してメモリへのアク
セスをさらに減少させる大域最適化を行うステツプであ
る。これらの大域レジスタのために選ばれる変数は、全
プログラムのロード操作数又はストア操作数を最大限に
減少させるように選択される。
本発明のために、小石ゲームは、DAGで行われる1人用
のゲームである。プレヤーには、2つの種類の赤と青の
小石が与えられる。青い小石の数は無限である一方、赤
い小石の数は、ある数、例えばp、に制限さている。最
初、DAGに全てのソースに青の小石を置いている。プレ
ヤーには、以下の動きの何れかをすることが許される。
のゲームである。プレヤーには、2つの種類の赤と青の
小石が与えられる。青い小石の数は無限である一方、赤
い小石の数は、ある数、例えばp、に制限さている。最
初、DAGに全てのソースに青の小石を置いている。プレ
ヤーには、以下の動きの何れかをすることが許される。
(1)青い小石の隣りに赤い小石を置く。
(2)赤い小石の隣りに青い小石を置く。
(3)ある節点に赤い小石を置く。ただしすべての先行
節に赤い小石が置かれている場合に限る。
節に赤い小石が置かれている場合に限る。
(4)ある節点に、赤い小石を先行節の1つからスライ
ドさせる。ただし、このスライド前に先行節の赤い小石
が置かれていた場合に限る。
ドさせる。ただし、このスライド前に先行節の赤い小石
が置かれていた場合に限る。
(5)任意の時間に赤い小石を取り除く。
これに関連して、青い小石はメモリ位置で、赤い小石は
レジスタである。この意味で、規則(1)はメモリから
のロード、規則(2)はメモリへの書込み、規則(3)
は値の計算を新たなレジスタへにストアすること、規則
(4)は、計算に使用されたオペランドを以前保持して
いたレジスタに前期値の計算をストアすることに相当す
る。レジスタ割り付けの状況におけるゲームの目的は、
こぼれ数を最少にすることである。ここで、こぼれは規
則(1)又は(2)の使用を伴う。
レジスタである。この意味で、規則(1)はメモリから
のロード、規則(2)はメモリへの書込み、規則(3)
は値の計算を新たなレジスタへにストアすること、規則
(4)は、計算に使用されたオペランドを以前保持して
いたレジスタに前期値の計算をストアすることに相当す
る。レジスタ割り付けの状況におけるゲームの目的は、
こぼれ数を最少にすることである。ここで、こぼれは規
則(1)又は(2)の使用を伴う。
小石ゲームは、Pippengerによつて、“Pebbling"5th I
BM Symposium on the Machematical Foundations of C
omputerSciece,1980年5月26〜28日、箱根、日本におい
て述べられている。この論文では、小石ゲームがコンパ
イラ、特にコード生成と最適化を含む応用範囲を見付け
たことを指摘している。この論文で述べられているのは
1色のゲームであり、「黒色小石ゲーム」と呼ばれるこ
ともある。
BM Symposium on the Machematical Foundations of C
omputerSciece,1980年5月26〜28日、箱根、日本におい
て述べられている。この論文では、小石ゲームがコンパ
イラ、特にコード生成と最適化を含む応用範囲を見付け
たことを指摘している。この論文で述べられているのは
1色のゲームであり、「黒色小石ゲーム」と呼ばれるこ
ともある。
実を言えば、「黒色小石ゲーム」は、時間−空間トレー
ドオフの研究に用いられてきた。「時間−空間トレード
オフ」は、使用可能レジスタ数と計算を実行するのに要
する時間との積によつて形成される係数の変更の結果を
含む。この積は、データ依存グラフの節点数に比例する
量である。もし1色だけがレシスタを表現するならば、
所定の計算の場合、「前記計算を実行するのに必要とさ
れるレジストの最低数はいくつ?」という問いかけが従
来なされてきた。しかしながら、前記1色小石ゲーム
は、本発明の方法を教示も示唆もしない。重要なこと
は、本発明が、2色小石ゲームにより、DAG上でレジス
タの割り付け及び割り当てを扱い、それによつて、通常
のグラフ配色方法に比べ、こぼれを共に最少にする局所
最適化及びループに基づいた大域最適化を行うことであ
る。
ドオフの研究に用いられてきた。「時間−空間トレード
オフ」は、使用可能レジスタ数と計算を実行するのに要
する時間との積によつて形成される係数の変更の結果を
含む。この積は、データ依存グラフの節点数に比例する
量である。もし1色だけがレシスタを表現するならば、
所定の計算の場合、「前記計算を実行するのに必要とさ
れるレジストの最低数はいくつ?」という問いかけが従
来なされてきた。しかしながら、前記1色小石ゲーム
は、本発明の方法を教示も示唆もしない。重要なこと
は、本発明が、2色小石ゲームにより、DAG上でレジス
タの割り付け及び割り当てを扱い、それによつて、通常
のグラフ配色方法に比べ、こぼれを共に最少にする局所
最適化及びループに基づいた大域最適化を行うことであ
る。
D.実施例 まず、小石ゲーム発見法アルゴリズムを記述して、局所
最適化を達成するレジスタの割り付け及び割り当てにつ
いて説明する。続いて、大域割り付けを説明する。
最適化を達成するレジスタの割り付け及び割り当てにつ
いて説明する。続いて、大域割り付けを説明する。
局所最適化 局所最適化は「小石ゲーム」発見法を利用する。本発明
のために、「発見法」は、上来、最適な結果を達成する
ために直観に基づいたマシンで実現可能な手続き又はア
ルゴリズムである。
のために、「発見法」は、上来、最適な結果を達成する
ために直観に基づいたマシンで実現可能な手続き又はア
ルゴリズムである。
第1例 第1図〜第6図には、基本ブロツクに分割され、かつDA
Gタイプ対応のデータ依存グラフによつて表現される計
算シーケンスが示されている。第1の近似への発見法
は、以下のようにして進行する。
Gタイプ対応のデータ依存グラフによつて表現される計
算シーケンスが示されている。第1の近似への発見法
は、以下のようにして進行する。
1.DAGを調査し、p個の支配節、すなわち、最大後続節
数を識別する。ここで、pは赤い小石の数である。この
ようなp個の節点の集合毎に、赤でない集合の節点数で
あるコストを関連させる。次に、これらの集合の中か
ら、最少の支配節のコスト/サイズの値を有する集合を
選ぶ。これは、計算のために「有望な」領域を規定す
る。
数を識別する。ここで、pは赤い小石の数である。この
ようなp個の節点の集合毎に、赤でない集合の節点数で
あるコストを関連させる。次に、これらの集合の中か
ら、最少の支配節のコスト/サイズの値を有する集合を
選ぶ。これは、計算のために「有望な」領域を規定す
る。
2.次に、上記選択された集合の直接後続節である節点毎
のカバーコストを計算することにより、「有効な」計算
を見つける。カバーコストは2つのパラメータを有す
る。これらは、(a)赤い小石が置かれていない先行節
の数、(b)この節点の直接行節の最少スライドコスト
を含む。関連して、このスライドコストは、最少の出次
数を有する(a)の先行節を参照する。出次数によつ
て、このスライドはまた計算されていない後続節を意味
する。因に一旦計算が実行されると、計算されていない
後続節数は変化する。したがつて、例えば基本ブロツク
1を説明する第2図では、節点t1はカバーコスト(2、
1)を有する。ここで、先行節数は2である(節x,
y)。一方、スライドコスト(計算されていない後続節
に対する出次数)は、最初、xに対して1、yに対して
3である。スライドコストがより小さいものが選択され
る。一旦カバーコストが計算されると、アルゴリズムの
次のステツプで実行される計算は、最小のカバーコスト
を有するように選ばれる。
のカバーコストを計算することにより、「有効な」計算
を見つける。カバーコストは2つのパラメータを有す
る。これらは、(a)赤い小石が置かれていない先行節
の数、(b)この節点の直接行節の最少スライドコスト
を含む。関連して、このスライドコストは、最少の出次
数を有する(a)の先行節を参照する。出次数によつ
て、このスライドはまた計算されていない後続節を意味
する。因に一旦計算が実行されると、計算されていない
後続節数は変化する。したがつて、例えば基本ブロツク
1を説明する第2図では、節点t1はカバーコスト(2、
1)を有する。ここで、先行節数は2である(節x,
y)。一方、スライドコスト(計算されていない後続節
に対する出次数)は、最初、xに対して1、yに対して
3である。スライドコストがより小さいものが選択され
る。一旦カバーコストが計算されると、アルゴリズムの
次のステツプで実行される計算は、最小のカバーコスト
を有するように選ばれる。
3.一旦、「有効」計算を決定すると、赤い小石を置く従
属節は、小石をスライデイングをするための規則を使用
する。いかなる赤い小石もスライドを実行するのに使用
されることができない場合、DAG上に現在ない小石が、
存在すれば用いられる。
属節は、小石をスライデイングをするための規則を使用
する。いかなる赤い小石もスライドを実行するのに使用
されることができない場合、DAG上に現在ない小石が、
存在すれば用いられる。
4.レジスタが使用できないならば、中間又は最終結果は
メモリに書き込まれ、かつ、必要な場合、使用可能なレ
ジスタにロードし直さなければならない。
メモリに書き込まれ、かつ、必要な場合、使用可能なレ
ジスタにロードし直さなければならない。
次に、第2図を参照すると、節点t1は節点xおよびyに
依存している一方、節点qは節点y及びzに依存してい
る。この結果vは接点t1に及びyに依存する。3つのレ
ジスタr0,r1,r2が使用可能であると仮定すると、3つを
節点からなる支配節が選ばれる。唯一の可能な支配節
は、集合(x,y,z)である。したがつて、これは「有望
な」集合と呼ばれる。
依存している一方、節点qは節点y及びzに依存してい
る。この結果vは接点t1に及びyに依存する。3つのレ
ジスタr0,r1,r2が使用可能であると仮定すると、3つを
節点からなる支配節が選ばれる。唯一の可能な支配節
は、集合(x,y,z)である。したがつて、これは「有望
な」集合と呼ばれる。
節点t1及びqは、選択された支配集合の後続節である。
各節点毎に、カバーコストが計算される。節点t1のカバ
ーコストは(2,1)である。その理由は、節点t1の2つ
の先行節には小石が置かれていなく、かつ、xの計算さ
れていない後続節は1つだけなので、最少スライドコス
トは1であることによる。このことは節点qの場合も同
様である。節点1、節点qの両方のカバーコストはどち
らも同じなので、1つの節点(例えば節点t1)が任意に
選ばれる。節点t1を計算するためには、まず、赤い小石
は節点x及びyに置かなければならない。次に、節点x
のスライドコストが1であるため、節点xを節点t1にス
ライドさせる。いま、節点vは節点t1の赤い小石を節点
yにスライドさせることで計算されることができる。続
いて、節点qは、節点zにロードした後、節点yの小石
を節点qにスライドさせることで計算されることができ
る。
各節点毎に、カバーコストが計算される。節点t1のカバ
ーコストは(2,1)である。その理由は、節点t1の2つ
の先行節には小石が置かれていなく、かつ、xの計算さ
れていない後続節は1つだけなので、最少スライドコス
トは1であることによる。このことは節点qの場合も同
様である。節点1、節点qの両方のカバーコストはどち
らも同じなので、1つの節点(例えば節点t1)が任意に
選ばれる。節点t1を計算するためには、まず、赤い小石
は節点x及びyに置かなければならない。次に、節点x
のスライドコストが1であるため、節点xを節点t1にス
ライドさせる。いま、節点vは節点t1の赤い小石を節点
yにスライドさせることで計算されることができる。続
いて、節点qは、節点zにロードした後、節点yの小石
を節点qにスライドさせることで計算されることができ
る。
前述の解析は、十分な数のレジスタが与えられると、ス
ケジユーリングは合理的にスムーズに行えることを指摘
している。
ケジユーリングは合理的にスムーズに行えることを指摘
している。
次に、第3図及び第4図を参照する。この第3図及び第
4図には、第1図に示した計算シーケンスの前記文献に
よる従来のレジスタ干渉グラフが示されている。第3図
のグラフは、技術的に3色で彩色可能である。しかしな
がら、2つのレジスタ(r0,r1)のみが使用可能なら
ば、グラフの彩色は本質的に可能でない。最高次数の節
点を除去させることが可能になるであろう。この点につ
いて、第4図は、節点x及びyが除去された従来の干渉
グラフの例である。しかしながら、2色で彩色を可能に
するためには、節点zもまた除去されなければならな
い。3つの節点を除去させることは、こぼれコードの実
質量を示す。対照的に、2つのレジスタのみが使用可能
にされ、かつ、第2のデータ依存グラフにより割り当て
られるならば、比べると3つのロード及び1つのストア
のみが必要とされる。
4図には、第1図に示した計算シーケンスの前記文献に
よる従来のレジスタ干渉グラフが示されている。第3図
のグラフは、技術的に3色で彩色可能である。しかしな
がら、2つのレジスタ(r0,r1)のみが使用可能なら
ば、グラフの彩色は本質的に可能でない。最高次数の節
点を除去させることが可能になるであろう。この点につ
いて、第4図は、節点x及びyが除去された従来の干渉
グラフの例である。しかしながら、2色で彩色を可能に
するためには、節点zもまた除去されなければならな
い。3つの節点を除去させることは、こぼれコードの実
質量を示す。対照的に、2つのレジスタのみが使用可能
にされ、かつ、第2のデータ依存グラフにより割り当て
られるならば、比べると3つのロード及び1つのストア
のみが必要とされる。
改良例 次に、第5図及び第6図を参照する。再び、3つのレジ
スタと3つの赤い小石が使用可能であると仮定する。ア
ルゴリズムによると、節点u,v及びwは、支配節として
選ばれる。カバーコスト(x)=(2,1)であり、一方
カバーコスト(y)=(2,2)である。したがつてこの
アルゴリズムは、節点xを評価するために選択する。カ
バーコスト=(c1,C2)であるので、c1=2の場合、こ
のアルゴリズムは、現境界に対するこぼれ節点(x)を
計算する。この境界という用語は、集合のあらゆる節点
vに対して、この節点か小石を有しており、かつ節点v
の少なくとも1つの後続節が計算されていない性質を有
する節点の集合から得られる。これが境界と呼ばれてい
る。
スタと3つの赤い小石が使用可能であると仮定する。ア
ルゴリズムによると、節点u,v及びwは、支配節として
選ばれる。カバーコスト(x)=(2,1)であり、一方
カバーコスト(y)=(2,2)である。したがつてこの
アルゴリズムは、節点xを評価するために選択する。カ
バーコスト=(c1,C2)であるので、c1=2の場合、こ
のアルゴリズムは、現境界に対するこぼれ節点(x)を
計算する。この境界という用語は、集合のあらゆる節点
vに対して、この節点か小石を有しており、かつ節点v
の少なくとも1つの後続節が計算されていない性質を有
する節点の集合から得られる。これが境界と呼ばれてい
る。
DAG上にいかなる赤い小石も置かれていないので、空で
ある。したがつて、この方法によれば、節点u及びvに
自由に赤い小石を置くことができる。また、c2=1なの
で、節点uにおけるレジスタは節点xにスライドされ、
1つの計算が終了される。もう1度、他の支配節が選択
される。カバーコスト(p)=(0,1)であるため、今
度は、節点pが計算のために目標とされる。前述のよう
に、c2=1である。これは、節点x上のレジスタが節点
pにスライドされることを意味する。
ある。したがつて、この方法によれば、節点u及びvに
自由に赤い小石を置くことができる。また、c2=1なの
で、節点uにおけるレジスタは節点xにスライドされ、
1つの計算が終了される。もう1度、他の支配節が選択
される。カバーコスト(p)=(0,1)であるため、今
度は、節点pが計算のために目標とされる。前述のよう
に、c2=1である。これは、節点x上のレジスタが節点
pにスライドされることを意味する。
いかなる他の選択も使用可能でないため、この方法は節
点y、続いて節点計算しなければならないことが明から
である。第5図を参照する。3つのロードのみが実行さ
れ、かつ節点p及びzがレジスタで使用可能であること
を注意すべきである。これは、いずれかが後に使用され
るならば、メモリからのロードを行なう必要が全くない
ことを意味する。
点y、続いて節点計算しなければならないことが明から
である。第5図を参照する。3つのロードのみが実行さ
れ、かつ節点p及びzがレジスタで使用可能であること
を注意すべきである。これは、いずれかが後に使用され
るならば、メモリからのロードを行なう必要が全くない
ことを意味する。
重要なことは、シーケンスコードがどんなに並べ変えら
れても、データ依存グラフは不変である。したがつて、
この方法により生じる結果は、テキスト順序に依存しな
い。
れても、データ依存グラフは不変である。したがつて、
この方法により生じる結果は、テキスト順序に依存しな
い。
また、従来の彩色が第6図に示されるようなコードに適
用されたならば、ロード数は4であり、一方本発明の方
法の場合、ロード数は、最小限の3のみであることを注
意すべきである。
用されたならば、ロード数は4であり、一方本発明の方
法の場合、ロード数は、最小限の3のみであることを注
意すべきである。
大域最適化 本発明では、大域最適化は、まず、使用可能なレジスタ
の全数のある一部を用いて、フローグラフに現われる順
序で、各基本ブロツク毎に局所的割り付けを実行するこ
とを含む。次に、ループが最も決定的なエンテイテイー
であると仮定し、残りのレジスタを使用して大域情報を
伝える。
の全数のある一部を用いて、フローグラフに現われる順
序で、各基本ブロツク毎に局所的割り付けを実行するこ
とを含む。次に、ループが最も決定的なエンテイテイー
であると仮定し、残りのレジスタを使用して大域情報を
伝える。
第7図には、開始節で初期設定され、かつ終了節で終了
するフローグラフが示されている。
するフローグラフが示されている。
局所的割り付けなされたと仮定すると、大域ステツプ
は、各局所的割り付けでロードされ、かつストアされる
変数の集合を調査する。これらの変数に対して、変数の
ロード又はストアの回数の係数が行なわれる。この計数
は、いわゆる変数のネステイングレベルによつてバイア
スされる。このネステイングレベルは、該変数を取り囲
むフローグラフのループ数を参照する。このリストか
ら、最高値を有する変数が大域レジスタに常駐するよう
に選択される。この処理は、使用可能な大域レジスタが
なくなるか又は、このリストが空になるまで、繰り返さ
れる。
は、各局所的割り付けでロードされ、かつストアされる
変数の集合を調査する。これらの変数に対して、変数の
ロード又はストアの回数の係数が行なわれる。この計数
は、いわゆる変数のネステイングレベルによつてバイア
スされる。このネステイングレベルは、該変数を取り囲
むフローグラフのループ数を参照する。このリストか
ら、最高値を有する変数が大域レジスタに常駐するよう
に選択される。この処理は、使用可能な大域レジスタが
なくなるか又は、このリストが空になるまで、繰り返さ
れる。
この大域的割り付け方法は、いくつかの変形を有する。
例えば、大域レジスタに入れられる変数は、局所的割り
付けに対応するフローグラフの最大の生きている範囲を
表わすものである。すなわち、局所的割り付けは、入力
プログラムの対応する基本ブロツクと取り換えられる。
続いて、基本ブロツクに局所的でない全ての変数に対し
て、生きている範囲が計算される。生きている範囲は、
使用回数及びネステイングレベル・ブレイキングタイを
有する大域レジスタに割り当てられるのはどの変数であ
るかを決定するのに使用される。つまり、基本ブロツク
に局所的でない変数であつて、最大の生きている範囲を
有する変数が大域レジスタに割り当てられるのである。
そして、2つ以上の変数が同じ生きている範囲を有する
場合は、使用回数又はネステイングレベルが最大である
変数に、大域レジスタの1つが指定されるのである。
例えば、大域レジスタに入れられる変数は、局所的割り
付けに対応するフローグラフの最大の生きている範囲を
表わすものである。すなわち、局所的割り付けは、入力
プログラムの対応する基本ブロツクと取り換えられる。
続いて、基本ブロツクに局所的でない全ての変数に対し
て、生きている範囲が計算される。生きている範囲は、
使用回数及びネステイングレベル・ブレイキングタイを
有する大域レジスタに割り当てられるのはどの変数であ
るかを決定するのに使用される。つまり、基本ブロツク
に局所的でない変数であつて、最大の生きている範囲を
有する変数が大域レジスタに割り当てられるのである。
そして、2つ以上の変数が同じ生きている範囲を有する
場合は、使用回数又はネステイングレベルが最大である
変数に、大域レジスタの1つが指定されるのである。
ループの底で、変数が異なるレジスタで終わる場合に
は、これらがループの先頭にあると想定されるので、い
かなる転送も必要なく、又は、転送数がある所定のしき
い値以下であるまで、該ループを展開することが可能で
ある。
は、これらがループの先頭にあると想定されるので、い
かなる転送も必要なく、又は、転送数がある所定のしき
い値以下であるまで、該ループを展開することが可能で
ある。
下記表は、局所レジスタの割り付けに使用する小石ゲー
ム発見法のアルゴリズムを詳述したものである。
ム発見法のアルゴリズムを詳述したものである。
Algorithm Local_Alloc(DAG,num_registers)current_
frontier:=sources(D):/*set frontier to source
s of DAG*/ current_configuration:=(empty,current_frontie
r); while(number of uncomputed nodes not zero)do Find a est S,of p nodes, in the current frontier,s
uch that move_cost(S)/(number of nodes that S
dominates)in minimized. /*find a good computation to do*/compute the co
ver cost of every node if FS(S); Let u be the node in FS(S) with the smallest co
ver cost,where cover_cost(u)=(c1,c2); /*find the possible spill nodes for the computat
ion*/ if c1>0 then for each node v in spill_nodes(u,
S),if v is not pebbled blue then place a blue peb
ble on v.Remove the red pebble from v. while not all predecessors of u are pebbled red do put a free red pebble on a predecessor of u not pe
bled red. /*pebble the computation*/ if c2=1 then slide the node with slide_cost=1 to
u else ie any free red pebbles, then put free pelle on u else begin let v be the predecessor of u with the smallest sl
ide cost. if slide_cost(v)>0,put a blue pebble on v; slide v to u; end; od; 本発明の拡張 本発明の方法は、IBM(登録商標)システム/370タイプ
のスカラプロセツサ、又は、IBM3090によつて代表され
るようなベクトルマシンで使用されることができる。ベ
クトルプロセツサでは、最高速度で計算を実行すること
が望まれる。これは、計算がメモリをアクセスする頻度
をできるだけ少なくすべきであることを意味する。なぜ
なら、ベクトルレジスタへのアクセスに比べると、メモ
リ・アクセスは非常に遅いからである。前述のように、
小石ゲームの発見法は、次のようにしてベクトルレジス
タの数を決定するのに使うことができる。まず、ベクト
ルレジスタの開始番号を選択する。続いて、実行される
べきベクトル計算に対応するデータ依存グラフDAGに該
発見法を実行する。次に、この一定数のレジスタのため
に実行されるロード/ストアの数を計算する。この後、
この数と、必要とされるアクセス数(すなわち、ソース
数とシンク数の和)の下限と比較する。あまり多くのア
クセス数が実行されるならば、レジスタ数を倍にしてア
ルゴリズムを再適用する。下限に達したならば、レジス
タ数を半分にして、最適レジスタ数が識別されるまで、
アルゴリズムを繰り返す。これは、ベクトルレジスタ数
について二分探索を行ない、探索パラメータを決定する
のに小石ゲーム発見法を用いることと等価である。
frontier:=sources(D):/*set frontier to source
s of DAG*/ current_configuration:=(empty,current_frontie
r); while(number of uncomputed nodes not zero)do Find a est S,of p nodes, in the current frontier,s
uch that move_cost(S)/(number of nodes that S
dominates)in minimized. /*find a good computation to do*/compute the co
ver cost of every node if FS(S); Let u be the node in FS(S) with the smallest co
ver cost,where cover_cost(u)=(c1,c2); /*find the possible spill nodes for the computat
ion*/ if c1>0 then for each node v in spill_nodes(u,
S),if v is not pebbled blue then place a blue peb
ble on v.Remove the red pebble from v. while not all predecessors of u are pebbled red do put a free red pebble on a predecessor of u not pe
bled red. /*pebble the computation*/ if c2=1 then slide the node with slide_cost=1 to
u else ie any free red pebbles, then put free pelle on u else begin let v be the predecessor of u with the smallest sl
ide cost. if slide_cost(v)>0,put a blue pebble on v; slide v to u; end; od; 本発明の拡張 本発明の方法は、IBM(登録商標)システム/370タイプ
のスカラプロセツサ、又は、IBM3090によつて代表され
るようなベクトルマシンで使用されることができる。ベ
クトルプロセツサでは、最高速度で計算を実行すること
が望まれる。これは、計算がメモリをアクセスする頻度
をできるだけ少なくすべきであることを意味する。なぜ
なら、ベクトルレジスタへのアクセスに比べると、メモ
リ・アクセスは非常に遅いからである。前述のように、
小石ゲームの発見法は、次のようにしてベクトルレジス
タの数を決定するのに使うことができる。まず、ベクト
ルレジスタの開始番号を選択する。続いて、実行される
べきベクトル計算に対応するデータ依存グラフDAGに該
発見法を実行する。次に、この一定数のレジスタのため
に実行されるロード/ストアの数を計算する。この後、
この数と、必要とされるアクセス数(すなわち、ソース
数とシンク数の和)の下限と比較する。あまり多くのア
クセス数が実行されるならば、レジスタ数を倍にしてア
ルゴリズムを再適用する。下限に達したならば、レジス
タ数を半分にして、最適レジスタ数が識別されるまで、
アルゴリズムを繰り返す。これは、ベクトルレジスタ数
について二分探索を行ない、探索パラメータを決定する
のに小石ゲーム発見法を用いることと等価である。
本発明の他の拡張は、計算をメモリへのロード及びスト
アとオーバーラツプされるマシンでの使用である。該発
見法は、現在レジスタにあるデータに基づいて、できる
だけ多くの計算を試みるので、計算とメモリアクセスと
の間の有効なオーバーラツプを提供すべきである。
アとオーバーラツプされるマシンでの使用である。該発
見法は、現在レジスタにあるデータに基づいて、できる
だけ多くの計算を試みるので、計算とメモリアクセスと
の間の有効なオーバーラツプを提供すべきである。
処理環境 本発明は、PL/I,FORTRAN,COBOL等の高級言語コンパイラ
のオプテイマイザ部に埋め込まれ、かつ、IBMシステム/
370等のシステム上で、米国特許第3400371号明細書およ
びIBM System/370 Principles of Operation,IBM Publi
cation GA22−7000−6に記載されているように実行す
ると、簡便に実行できる。
のオプテイマイザ部に埋め込まれ、かつ、IBMシステム/
370等のシステム上で、米国特許第3400371号明細書およ
びIBM System/370 Principles of Operation,IBM Publi
cation GA22−7000−6に記載されているように実行す
ると、簡便に実行できる。
E.発明の効果 本発明によれば、コンパイル時に最適なレジスタの割り
付けを行うことができ、メモリへのアクセスを最小限に
抑えることができる。
付けを行うことができ、メモリへのアクセスを最小限に
抑えることができる。
第1図は、3つの基本ブロツクの計算シーケンスを示す
図である。 第2図は、本発明により、小石ゲーム発見法を用いる局
所的レジスタ割り付けを説明する第1の例で用いられた
第1のブロツクのデータ依存グラフへの表現を示す図で
ある。 第3図は、従来技術による第1図のシーケンスのレジス
タ干渉グラフを示す図である。 第4図は、従来技術による彩色を可能とするようにいく
つかの節点を除去した第3図の干渉グラフを示す図であ
る。 第5及び第6図は、本発明により、小石ゲーム発見法を
用いる局所的レジスタ割り付けの第2例で使用された計
算例、データ依存グラフ及びレジスタ活動シーケンスを
示す。 第7図は、本発明による大域的割り付けのステツプの記
述に関係するフローグラフの説明図である。
図である。 第2図は、本発明により、小石ゲーム発見法を用いる局
所的レジスタ割り付けを説明する第1の例で用いられた
第1のブロツクのデータ依存グラフへの表現を示す図で
ある。 第3図は、従来技術による第1図のシーケンスのレジス
タ干渉グラフを示す図である。 第4図は、従来技術による彩色を可能とするようにいく
つかの節点を除去した第3図の干渉グラフを示す図であ
る。 第5及び第6図は、本発明により、小石ゲーム発見法を
用いる局所的レジスタ割り付けの第2例で使用された計
算例、データ依存グラフ及びレジスタ活動シーケンスを
示す。 第7図は、本発明による大域的割り付けのステツプの記
述に関係するフローグラフの説明図である。
Claims (1)
- 【請求項1】有限数p個のレジスタと、このレジスタの
総容量に比べて十分大きい記憶容量を有し、前記レジス
タよりアクセス時間の遅い内部メモリとを備えたプロセ
ッサで実行可能な目的コードを生成するように原始コー
ドをコンパイルする際に、計算を定義する連続した文の
列からなり、分岐しないコード領域を含む各基本ブロッ
クへのレジスタの割り付けを最適化するようにしたコン
パイル方法において、 前記基本ブロックのデータ依存関係を閉路のない有向グ
ラフで表現したデータ依存グラフを形成し、 前記形成されたデータ依存グラフに対して2色小石ゲー
ム発見法を実行することによって前記p個のレジスタの
うちのq個(ここで0<q<pである)に局所レジスタ
を割り付け、 前記各基本ブロックのフローグラフで生きている変数の
解析を実行し、かつ前記基本ブロック間の前記フローグ
ラフのループが最も重要な最適化エンティティであると
仮定する残りのレジスタ(p−q)個に大域レジスタを
割り付けし、 使用可能なレジスタと同数を節を、前記データ依存グラ
フの節の中から後続節の数が多いものの順に選択し、選
択された前記集合の直接後続節である全ての節点のカバ
ーコストを計算し、かつ前記カバーコストが最小である
前記集合の直接後続節にレジスタを割り当て、使用可能
で割り付け可能なレジスタがない場合、計算で得られた
中間結果又は最終結果を前記内部メモリに書き込み、必
要な場合、その後使用可能なレジスタに前記結果をロー
ドし直すことを含み、 前記大域レジスタの割り付けは、基本ブロックに局所的
でない全ての変数に対して生きている範囲を定め、最大
の生きている範囲を有する変数を大域レジスタに割り付
け、同一の生きている範囲を有する2以上の変数の場
合、最大の使用回数を有する変数に前記(p−q)個の
レジスタの1つを割り当てることを含むことを特徴とす
るコンパイル方法。
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 JPS62144247A (ja) | 1987-06-27 |
| JPH0776927B2 true 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) |
Families Citing this family (111)
| 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 |
| JPS6481035A (en) * | 1987-09-22 | 1989-03-27 | Nec Corp | C compiler |
| 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 |
| US5107418A (en) * | 1990-06-11 | 1992-04-21 | Supercomputer Systems Limited Partnership | Method for representing scalar data dependences for an optimizing compiler |
| US5202975A (en) * | 1990-06-11 | 1993-04-13 | Supercomputer Systems Limited Partnership | Method for optimizing instruction scheduling for a processor having multiple functional resources |
| JPH0816871B2 (ja) * | 1990-12-07 | 1996-02-21 | 富士ゼロックス株式会社 | プログラム翻訳装置およびプログラム翻訳方法 |
| 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 |
| JP2970785B2 (ja) * | 1991-10-18 | 1999-11-02 | 松下電器産業 株式会社 | 資源割り付け装置 |
| 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 |
| AU5954194A (en) * | 1992-12-21 | 1994-07-19 | 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 |
| CA2643234C (en) * | 1993-10-29 | 2012-05-15 | Microsoft Corporation | Method and system for generating a computer program |
| US5491823A (en) * | 1994-01-25 | 1996-02-13 | Silicon Graphics, Inc. | Loop scheduler |
| US5966539A (en) * | 1994-03-01 | 1999-10-12 | Digital Equipment Corporation | Link time optimization with translation to intermediate program and following optimization techniques including program analysis code motion live variable set generation order analysis, dead code elimination and load invariant 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 |
| US20100131081A1 (en) * | 1995-05-30 | 2010-05-27 | Brown David W | Systems and methods for motion control |
| 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 |
| 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 |
| US20060206219A1 (en) * | 1995-05-30 | 2006-09-14 | Brown David W | Motion control systems and methods |
| 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 |
| 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 |
| 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 |
| US6029005A (en) * | 1997-04-01 | 2000-02-22 | Intel Corporation | Method for identifying partial redundancies in a new processor architecture |
| US6016398A (en) * | 1997-04-01 | 2000-01-18 | Intel Corporation | Method for using static single assignment to color out artificial register dependencies |
| US5991540A (en) * | 1997-04-01 | 1999-11-23 | Intel Corporation | Method for identifying partial redundancies in existing processor architectures |
| CA2205797C (en) * | 1997-05-22 | 2001-04-24 | Andrew Wilfred Macleod | A system for local context spilling for graph colouring register allocators |
| US6139200A (en) * | 1997-06-30 | 2000-10-31 | Sun Microsystems, Inc. | Register resource allocation feedback |
| US5987259A (en) * | 1997-06-30 | 1999-11-16 | Sun Microsystems, Inc. | Functional unit switching for the allocation of registers |
| US6009272A (en) * | 1997-06-30 | 1999-12-28 | Sun Microsystems, Inc. | Register allocation via selective spilling |
| 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 | インターナショナル・ビジネス・マシーンズ・コーポレーション | コンパイラ及びそのレジスタ割付方法 |
| US6912647B1 (en) | 2000-09-28 | 2005-06-28 | International Business Machines Corportion | Apparatus and method for creating instruction bundles in an explicitly parallel architecture |
| 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 |
| US6799262B1 (en) | 2000-09-28 | 2004-09-28 | International Business Machines Corporation | Apparatus and method for creating instruction groups for explicity parallel architectures |
| US6883165B1 (en) | 2000-09-28 | 2005-04-19 | International Business Machines Corporation | Apparatus and method for avoiding deadlocks in a multithreaded environment |
| US7904194B2 (en) | 2001-02-09 | 2011-03-08 | Roy-G-Biv Corporation | Event management systems and methods for motion control systems |
| WO2002071241A1 (en) | 2001-02-09 | 2002-09-12 | Roy-G-Biv Corporation | Event management systems and methods for the distribution of motion control commands |
| 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 |
| US20060064503A1 (en) | 2003-09-25 | 2006-03-23 | Brown David W | Data routing systems and methods |
| US8027349B2 (en) * | 2003-09-25 | 2011-09-27 | Roy-G-Biv Corporation | Database event driven motion systems |
| US20100131077A1 (en) * | 2004-02-25 | 2010-05-27 | Brown David W | Data Collection Systems and Methods for Motion Control |
| US7469404B2 (en) * | 2004-06-30 | 2008-12-23 | Intel Corporation | Bank assignment for partitioned register banks |
| 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 - Lifetime
- 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 Expired
- 1986-12-01 BR BR8605865A patent/BR8605865A/pt not_active IP Right Cessation
- 1986-12-09 ES ES8603326A patent/ES2004348A6/es not_active Expired
Also Published As
| Publication number | Publication date |
|---|---|
| CN1003679B (zh) | 1989-03-22 |
| EP0229245A2 (en) | 1987-07-22 |
| CA1264859A (en) | 1990-01-23 |
| KR910009116B1 (ko) | 1991-10-31 |
| EP0229245A3 (en) | 1990-03-21 |
| KR870006460A (ko) | 1987-07-11 |
| ES2004348A6 (es) | 1989-01-01 |
| US4782444A (en) | 1988-11-01 |
| JPS62144247A (ja) | 1987-06-27 |
| BR8605865A (pt) | 1987-08-25 |
| CN86107764A (zh) | 1987-07-01 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US4782444A (en) | Compilation using two-colored pebbling register allocation method such that spill code amount is invariant with basic block's textual ordering | |
| Dehnert et al. | Compiling for the Cydra | |
| Chow et al. | The priority-based coloring approach to register allocation | |
| Click | Global code motion/global value numbering | |
| US6446258B1 (en) | Interactive instruction scheduling and block ordering | |
| Kieburtz | The G-machine: A fast, graph-reduction evaluator | |
| JPH04225431A (ja) | 命令キャッシュ効率を増大するコンピュータ命令をコンパイルする方法 | |
| Rawat et al. | Associative instruction reordering to alleviate register pressure | |
| Cierniak et al. | Just‐in‐time optimizations for high‐performance Java programs | |
| CN112130848B (zh) | 一种面向便笺式存储器的带宽感知循环分块优化方法、编译系统、设备及存储介质 | |
| Tang et al. | Heap analysis and optimizations for threaded programs | |
| Gheorghioiu | Statistically determining memory consumption of real-time java threads | |
| Ekanadham | Future scientific programming on parallel machines | |
| Gupta et al. | Compile-time techniques for improving scalar access performance in parallel memories | |
| Lang | Improved stack allocation using escape analysis in the KESO multi-JVM | |
| CN121478289A (zh) | 一种动态稀疏计算编译优化方法 | |
| Muller et al. | Caches with compositional performance | |
| Williams et al. | Genetic compilers: A new technique for automatic parallelisation | |
| Anderson et al. | Implementing and optimizing Lisp for the Cray | |
| Ju et al. | Develop and prototype code generation techniques for a clause-based GPU | |
| Cooper et al. | Compiler-Based Code-Improvement Techniques | |
| JPH03135630A (ja) | 命令スケジューリング方式 | |
| Maurer | An SSA-based register allocator for the Glasgow Haskell compiler | |
| CN120780309A (zh) | 面向图计算统一编程模型的编译方法及系统 | |
| Sampaio | GPU Divergence: Analysis and Register Allocation |