JPH103391A - 多重インターフェアレンス・グラフを使用するレジスタ割り当て方法及びシステム - Google Patents
多重インターフェアレンス・グラフを使用するレジスタ割り当て方法及びシステムInfo
- Publication number
- JPH103391A JPH103391A JP9072122A JP7212297A JPH103391A JP H103391 A JPH103391 A JP H103391A JP 9072122 A JP9072122 A JP 9072122A JP 7212297 A JP7212297 A JP 7212297A JP H103391 A JPH103391 A JP H103391A
- Authority
- JP
- Japan
- Prior art keywords
- register
- node
- nodes
- registers
- primary
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- 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)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
(57)【要約】
【課題】 条件付き制約に起因する実行時間の遅れを回
避するインターフェアレンス・グラフ・レジスタ割り当
て技法を提供すること。 【解決手段】 一次的インターフェアレンス・グラフと
二次的インターフェアレンス・グラフとを用い、コンパ
イラによって、インターフェアレンス・グラフ内でノー
ドによって表される仮想レジスタ即ちシンボリック・レ
ジスタへの実レジスタの割り当てを実行する。一次的イ
ンターフェアレンス・グラフは標準的なエッジを含み、
このエッジによって連結されたノードによって表される
仮想レジスタ間のレイテンシーを示す。ノード間の二次
的リンクは、許容可能であるが、レジスタ割り当てプロ
セスにおいて回避されればプログラム・セグメントの実
行速度が向上する、条件付きコンフリクトを示す。
避するインターフェアレンス・グラフ・レジスタ割り当
て技法を提供すること。 【解決手段】 一次的インターフェアレンス・グラフと
二次的インターフェアレンス・グラフとを用い、コンパ
イラによって、インターフェアレンス・グラフ内でノー
ドによって表される仮想レジスタ即ちシンボリック・レ
ジスタへの実レジスタの割り当てを実行する。一次的イ
ンターフェアレンス・グラフは標準的なエッジを含み、
このエッジによって連結されたノードによって表される
仮想レジスタ間のレイテンシーを示す。ノード間の二次
的リンクは、許容可能であるが、レジスタ割り当てプロ
セスにおいて回避されればプログラム・セグメントの実
行速度が向上する、条件付きコンフリクトを示す。
Description
【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、データ処理システ
ムにおけるプログラムのコンパイル時のレジスタ割り当
ての最適化に関する。更に詳細には、本発明は、インタ
ーフェアレンス・グラフ・カラーリング技法(interfere
nce graph coloring techniques)を用いたレジスタ割り
当ての最適化に関するものである。
ムにおけるプログラムのコンパイル時のレジスタ割り当
ての最適化に関する。更に詳細には、本発明は、インタ
ーフェアレンス・グラフ・カラーリング技法(interfere
nce graph coloring techniques)を用いたレジスタ割り
当ての最適化に関するものである。
【0002】
【従来の技術】インターフェアレンス・グラフ・カラー
リング技法を用いたレジスタの割り当ては既知であり、
プログラムの実行に先だってコンパイルする際、実レジ
スタをシンボリック・レジスタ即ち仮想レジスタに割り
当てる場合に用いるために広く採用されている。一般的
に、この技法を実施するには、データ処理システムのコ
ンパイラにおいて、シンボリック・レジスタ即ち仮想レ
ジスタを用いてレジスタ・インターフェアレンス・グラ
フを作成し、シンボリック・レジスタをこのグラフにお
いて個々のノードとする。内容が同時的にに進行する(l
ive)ノードについては、かかるノードをエッジで接続す
る。一旦インターフェアレンス・グラフが形成される
と、等級(degree)がkより低いノード(kはデ
ータ処理システムにおいて使用可能な実レジスタの数)
は、何らかの論理的な方法でグラフから削除される。等
級がk以上のノードは、スピリング処理(spilling oper
ation)のために選択され、ここで実レジスタの内容が
(プログラムを実行するときに)、後で呼び戻すため
に、どこかに格納される。その後新たなインターフェア
レンス・グラフが構成され、各ノードは同じように検査
される。この繰り返しプロセスは、インターフェアレン
ス・グラフから全てのノードが除去されるまで続けられ
る。その後、逆の順序でノードを検査し、個々のカラー
を割り当て(実際には実レジスタ番号)、こうしてプロ
セスは完了する。
リング技法を用いたレジスタの割り当ては既知であり、
プログラムの実行に先だってコンパイルする際、実レジ
スタをシンボリック・レジスタ即ち仮想レジスタに割り
当てる場合に用いるために広く採用されている。一般的
に、この技法を実施するには、データ処理システムのコ
ンパイラにおいて、シンボリック・レジスタ即ち仮想レ
ジスタを用いてレジスタ・インターフェアレンス・グラ
フを作成し、シンボリック・レジスタをこのグラフにお
いて個々のノードとする。内容が同時的にに進行する(l
ive)ノードについては、かかるノードをエッジで接続す
る。一旦インターフェアレンス・グラフが形成される
と、等級(degree)がkより低いノード(kはデ
ータ処理システムにおいて使用可能な実レジスタの数)
は、何らかの論理的な方法でグラフから削除される。等
級がk以上のノードは、スピリング処理(spilling oper
ation)のために選択され、ここで実レジスタの内容が
(プログラムを実行するときに)、後で呼び戻すため
に、どこかに格納される。その後新たなインターフェア
レンス・グラフが構成され、各ノードは同じように検査
される。この繰り返しプロセスは、インターフェアレン
ス・グラフから全てのノードが除去されるまで続けられ
る。その後、逆の順序でノードを検査し、個々のカラー
を割り当て(実際には実レジスタ番号)、こうしてプロ
セスは完了する。
【0003】
【発明が解決しようとする課題】プログラムがコンパイ
ルされているときの実レジスタの割り当てには一般的に
有効であるが、多くの特定の用途では条件付きの制約を
設けており、このために、インターフェアレンス・グラ
フ・カラーリング技法の結果として、レジスタ割り当て
が最適ではなくなることになる。例えば、単精度浮動小
数点処理を採用したデータ処理システムには、実レジス
タが対として結合されているものがあり、その結果デー
タ処理システムが一対のうちの個々のレジスタ間の区別
ができない場合がある。対をなすレジスタの一方を第1
ノードに割り当て、このレジスタ対の他方を第1ノード
と共通のレイテンシーとして第2ノードに割り当てると
(即ち、第1および第2ノードはエッジで連結されてい
る)、システムは次の命令に進むのを許可される前に、
所与の命令の実行完了のために数マシン・サイクル待た
なければならないという、インターロック状態が存在す
る。浮動インターロック状態が招く実行の遅延は通常ス
ピル処理が誘発するもの程大きくはないが、それでもプ
ログラムのその部分の実行時間は影響を受け、それは望
ましいことではなく、また最適でもない。
ルされているときの実レジスタの割り当てには一般的に
有効であるが、多くの特定の用途では条件付きの制約を
設けており、このために、インターフェアレンス・グラ
フ・カラーリング技法の結果として、レジスタ割り当て
が最適ではなくなることになる。例えば、単精度浮動小
数点処理を採用したデータ処理システムには、実レジス
タが対として結合されているものがあり、その結果デー
タ処理システムが一対のうちの個々のレジスタ間の区別
ができない場合がある。対をなすレジスタの一方を第1
ノードに割り当て、このレジスタ対の他方を第1ノード
と共通のレイテンシーとして第2ノードに割り当てると
(即ち、第1および第2ノードはエッジで連結されてい
る)、システムは次の命令に進むのを許可される前に、
所与の命令の実行完了のために数マシン・サイクル待た
なければならないという、インターロック状態が存在す
る。浮動インターロック状態が招く実行の遅延は通常ス
ピル処理が誘発するもの程大きくはないが、それでもプ
ログラムのその部分の実行時間は影響を受け、それは望
ましいことではなく、また最適でもない。
【0004】
【課題を解決するための手段】本発明は、条件付き制約
(単精度浮動小数点レジスタを対にすることによる制
約)に起因する実行時間の遅れを回避する、改良された
インターフェアレンス・グラフ・レジスタ割り当て技法
に関し、プログラムをマシン実行可能形態にコンパイル
する際に、実レジスタの最適割り当てを可能にするもの
である。
(単精度浮動小数点レジスタを対にすることによる制
約)に起因する実行時間の遅れを回避する、改良された
インターフェアレンス・グラフ・レジスタ割り当て技法
に関し、プログラムをマシン実行可能形態にコンパイル
する際に、実レジスタの最適割り当てを可能にするもの
である。
【0005】プロセスの観点からは、本発明は、データ
処理システムのCPU内にある実レジスタの割り当てを
最適化する方法であって、この方法は、仮想レジスタを
表わすノードと、レイテンシーが共存するノードを連結
する一次的エッジとを有する、一次的インターフェアレ
ンス・グラフを作成することから開始する。所与のノー
ドのエッジ数をノードの等級と呼ぶ。次に、仮想レジス
タを表わすノードと、条件付きコンフリクトを有するノ
ードを連結する二次的エッジとを有する二次的インター
フェアレンス・グラフを作成する。条件付きコンフリク
トとは、単精度浮動小数点処理において対をなすレジス
タの一対の一方の使用を要求するノードのように、許容
することはできるが、最適ではないもののことである。
CPUの使用可能な実レジスタ数よりも少ない等級を有
するノードを一次的インターフェアレンス・グラフから
選択する。これは、全てのノードが選択されるまで行
う。その後、一次的および二次的インターフェアレンス
・グラフの両方のエッジ制約を用いて、選択したノード
にレジスタを割り当て可能か否かについて最初に判定す
ることにより、それらを選択したのと逆の順序で、選択
したノードに実レジスタを割り当てる試みを行う。可能
であれば、一次的および二次的インターフェアレンスグ
ラフに基づいて、所与のノードへの実レジスタの割り当
てを行う。一次的および二次的インターフェアレンス・
グラフ両方のエッジを用いて、選択したノードにレジス
タを割り当てることができない場合、一次的グラフのみ
に基づいて実レジスタを割り当てる。割り当てステップ
は、ノードを最初に選択したのとは逆の順序で、ノード
に対して実行することが好ましい。即ち、最初に選択し
たノードは、最後にレジスタの割り当てを受ける。
処理システムのCPU内にある実レジスタの割り当てを
最適化する方法であって、この方法は、仮想レジスタを
表わすノードと、レイテンシーが共存するノードを連結
する一次的エッジとを有する、一次的インターフェアレ
ンス・グラフを作成することから開始する。所与のノー
ドのエッジ数をノードの等級と呼ぶ。次に、仮想レジス
タを表わすノードと、条件付きコンフリクトを有するノ
ードを連結する二次的エッジとを有する二次的インター
フェアレンス・グラフを作成する。条件付きコンフリク
トとは、単精度浮動小数点処理において対をなすレジス
タの一対の一方の使用を要求するノードのように、許容
することはできるが、最適ではないもののことである。
CPUの使用可能な実レジスタ数よりも少ない等級を有
するノードを一次的インターフェアレンス・グラフから
選択する。これは、全てのノードが選択されるまで行
う。その後、一次的および二次的インターフェアレンス
・グラフの両方のエッジ制約を用いて、選択したノード
にレジスタを割り当て可能か否かについて最初に判定す
ることにより、それらを選択したのと逆の順序で、選択
したノードに実レジスタを割り当てる試みを行う。可能
であれば、一次的および二次的インターフェアレンスグ
ラフに基づいて、所与のノードへの実レジスタの割り当
てを行う。一次的および二次的インターフェアレンス・
グラフ両方のエッジを用いて、選択したノードにレジス
タを割り当てることができない場合、一次的グラフのみ
に基づいて実レジスタを割り当てる。割り当てステップ
は、ノードを最初に選択したのとは逆の順序で、ノード
に対して実行することが好ましい。即ち、最初に選択し
たノードは、最後にレジスタの割り当てを受ける。
【0006】システムの観点からは、本発明は、一定数
の割り当て可能なレジスタを備えたCPUとコンパイラ
とを有するデータ処理システムであって、コンパイラ
は、仮想レジスタを表わすノードと、レイテンシーが共
存するノードを連結する一次的エッジとを有し、所与の
ノードのエッジ数が当該ノードの等級となる、一次的イ
ンターフェアレンス・グラフを作成する第1手順と、仮
想レジスタを表わすノードと、条件付きコンフリクトを
有するノードを連結する二次的エッジとを有する二次的
インターフェアレンス・グラフを作成する第2手順と、
全てのノードを選択するまで、前記CPUのレジスタ数
よりも等級が低いノードを、前記一次的インターフェア
レンスグラフから選択する第3手順と、前記一次的およ
び二次的インターフェアレンス・グラフの両方のエッジ
を用いて、選択したノードにレジスタを割り当て可能か
否かを最初に判断し、可能である場合、その基準にした
がって実レジスタを割り当て、可能でない場合前記一次
的グラフのエッジのみを用いて実レジスタを割り当てる
第4手順とを含む。割り当て手順は、ノードを最初に選
択したのとは逆の順序で、ノードに対して実行される。
これら手順の特定の実施例では、二次的インターフェア
レンス・グラフのエッジは、共通のレイテンシーを有す
る別の仮想レジスタと対をなすレジスタの使用を要求す
る、仮想レジスタを連結する。
の割り当て可能なレジスタを備えたCPUとコンパイラ
とを有するデータ処理システムであって、コンパイラ
は、仮想レジスタを表わすノードと、レイテンシーが共
存するノードを連結する一次的エッジとを有し、所与の
ノードのエッジ数が当該ノードの等級となる、一次的イ
ンターフェアレンス・グラフを作成する第1手順と、仮
想レジスタを表わすノードと、条件付きコンフリクトを
有するノードを連結する二次的エッジとを有する二次的
インターフェアレンス・グラフを作成する第2手順と、
全てのノードを選択するまで、前記CPUのレジスタ数
よりも等級が低いノードを、前記一次的インターフェア
レンスグラフから選択する第3手順と、前記一次的およ
び二次的インターフェアレンス・グラフの両方のエッジ
を用いて、選択したノードにレジスタを割り当て可能か
否かを最初に判断し、可能である場合、その基準にした
がって実レジスタを割り当て、可能でない場合前記一次
的グラフのエッジのみを用いて実レジスタを割り当てる
第4手順とを含む。割り当て手順は、ノードを最初に選
択したのとは逆の順序で、ノードに対して実行される。
これら手順の特定の実施例では、二次的インターフェア
レンス・グラフのエッジは、共通のレイテンシーを有す
る別の仮想レジスタと対をなすレジスタの使用を要求す
る、仮想レジスタを連結する。
【0007】
【発明の実施の形態】本発明の性質および利点をより完
全に理解するために、添付図面と共に、以下の詳細な説
明を参照する。
全に理解するために、添付図面と共に、以下の詳細な説
明を参照する。
【0008】図1は、本発明を示す簡略化されたインタ
ーフェアレンス・グラフである。この図に見られるよう
に、インターフェアレンス・グラフは、仮想レジスタ1
00を表わすノード12、仮想レジスタ101を表わす
ノード14、および仮想レジスタ102を表わすノード
16の3つのノードを有する。ノード12,14は、こ
れら2つのレジスタの内容間の共通レイテンシー(la
tency)を表わす第1の一次的エッジ13によっ
て、連結されている。同様に、ノード12,16は、こ
れら2つのレジスタの内容間の共通レイテンシーを表わ
す第2の一次的エッジ15によって連結されている。加
えて、ノード12,14は、これら2つのノードの内容
間の二次的コンフリクト(secondary conflict)を表わす
二次的エッジ17によって連結されている。二次的コン
フリクトは条件付きコンフリクトである。即ち、許容可
能ではあるが、回避すれば、ノード12,14における
仮想レジスタへの実レジスタの割り当ての最適化が図ら
れるものである。例えば、前述した単精度浮動小数点処
理では、二次的リンク17は、ノード12,14の一方
の内容が対をなす2つのレジスタの一方に格納されてい
ることをシステムでは容易には区別できないことを示し
ている。このような場合、2つのノード12,14の一
方への実レジスタの割り当ては、この対の残りのレジス
タ以外の、いずれかの別のレジスタにすべきである。
ーフェアレンス・グラフである。この図に見られるよう
に、インターフェアレンス・グラフは、仮想レジスタ1
00を表わすノード12、仮想レジスタ101を表わす
ノード14、および仮想レジスタ102を表わすノード
16の3つのノードを有する。ノード12,14は、こ
れら2つのレジスタの内容間の共通レイテンシー(la
tency)を表わす第1の一次的エッジ13によっ
て、連結されている。同様に、ノード12,16は、こ
れら2つのレジスタの内容間の共通レイテンシーを表わ
す第2の一次的エッジ15によって連結されている。加
えて、ノード12,14は、これら2つのノードの内容
間の二次的コンフリクト(secondary conflict)を表わす
二次的エッジ17によって連結されている。二次的コン
フリクトは条件付きコンフリクトである。即ち、許容可
能ではあるが、回避すれば、ノード12,14における
仮想レジスタへの実レジスタの割り当ての最適化が図ら
れるものである。例えば、前述した単精度浮動小数点処
理では、二次的リンク17は、ノード12,14の一方
の内容が対をなす2つのレジスタの一方に格納されてい
ることをシステムでは容易には区別できないことを示し
ている。このような場合、2つのノード12,14の一
方への実レジスタの割り当ては、この対の残りのレジス
タ以外の、いずれかの別のレジスタにすべきである。
【0009】図1のインターフェアレンス・グラフ10
は、実際に、1対のベクトルを各ノードに割り当てるこ
とによって、コンパイル時間の間に構成される。一方の
ベクトルは一次的リンクを表し、他方のベクトルは二次
的リンクを表わす。図1のインターフェアレンス・グラ
フは、簡略化および明確化のために3つのノードを示す
に止めたが、典型的には、所与のインターフェアレンス
・グラフには多数のノードが存在することは理解されよ
う。
は、実際に、1対のベクトルを各ノードに割り当てるこ
とによって、コンパイル時間の間に構成される。一方の
ベクトルは一次的リンクを表し、他方のベクトルは二次
的リンクを表わす。図1のインターフェアレンス・グラ
フは、簡略化および明確化のために3つのノードを示す
に止めたが、典型的には、所与のインターフェアレンス
・グラフには多数のノードが存在することは理解されよ
う。
【0010】一旦グラフが構成されたなら、インターフ
ェアレンス・グラフの一次的構成要素および二次的構成
要素の双方を用いて、実レジスタの割り当て、即ち、
「カラーリング」を試みる。図2は、このプロセス全体
を示すフロー・チャートである。この図に見られるよう
に、本発明のレジスタ割り当て技法は、ステップ22に
おける、一次的インターフェアレンス・グラフと二次的
インターフェアレンス・グラフとを作成するステップか
ら開始する。次に、一次的インターフェアレンス・グラ
フ内に、マシン・レジスタの数よりも等級が低いノード
があるか否かについてチェックを行う。なければ、次
に、従来のスピル・ルーチン25に入り、ステップ22
を通過する第2のパスにおいて、新たな一次的インター
フェアレンス・グラフおよび二次的インターフェアレン
ス・グラフを構成する。
ェアレンス・グラフの一次的構成要素および二次的構成
要素の双方を用いて、実レジスタの割り当て、即ち、
「カラーリング」を試みる。図2は、このプロセス全体
を示すフロー・チャートである。この図に見られるよう
に、本発明のレジスタ割り当て技法は、ステップ22に
おける、一次的インターフェアレンス・グラフと二次的
インターフェアレンス・グラフとを作成するステップか
ら開始する。次に、一次的インターフェアレンス・グラ
フ内に、マシン・レジスタの数よりも等級が低いノード
があるか否かについてチェックを行う。なければ、次
に、従来のスピル・ルーチン25に入り、ステップ22
を通過する第2のパスにおいて、新たな一次的インター
フェアレンス・グラフおよび二次的インターフェアレン
ス・グラフを構成する。
【0011】マシン・レジスタの数よりも等級が低いノ
ードがある場合、ステップ26において当該ノードおよ
びそのエッジに選択のためのマークを付ける。次に、ス
テップ28においてグラフを検査し、全てのノードが選
択されたか否かを判定し、選択されていなければ、ルー
チンはステップ24に戻り、他のノードおよびそのエッ
ジを選択する。
ードがある場合、ステップ26において当該ノードおよ
びそのエッジに選択のためのマークを付ける。次に、ス
テップ28においてグラフを検査し、全てのノードが選
択されたか否かを判定し、選択されていなければ、ルー
チンはステップ24に戻り、他のノードおよびそのエッ
ジを選択する。
【0012】一旦一次的インターフェアレンス・グラフ
からのノード全てを選択したなら、ステップ30におい
て、一次的および二次的インターフェアレンス・グラフ
双方を用いて、ノードの選択順とは逆の順序で実レジス
タ番号を個々の選択したノードに割り当てる。最後に、
ステップ32においてシンボリック・レジスタを実マシ
ン・レジスタ番号で置き換えることによってプログラム
を書き換え、このレジスタ割り当て技法を終了する。
からのノード全てを選択したなら、ステップ30におい
て、一次的および二次的インターフェアレンス・グラフ
双方を用いて、ノードの選択順とは逆の順序で実レジス
タ番号を個々の選択したノードに割り当てる。最後に、
ステップ32においてシンボリック・レジスタを実マシ
ン・レジスタ番号で置き換えることによってプログラム
を書き換え、このレジスタ割り当て技法を終了する。
【0013】図3は、実レジスタ番号割り当てステップ
30をより詳細に示すものである。この図に見られるよ
うに、選択した各ノードをたどりながら、ステップ42
において検査を行い、一次的および二次的インターフェ
アレンス・グラフ双方を満足するように、このノードに
実レジスタを割り当て可能か否かについて判定を行う。
可能であれば、ステップ44において一次的および二次
的インターフェアレンス・グラフ双方を用いてレジスタ
番号を割り当てる。可能でないなら、ステップ46にお
いて一次的インターフェアレンスグラフのみを用いてレ
ジスタ番号を割り当てる。その後、検査を行い、最後の
ノードに実レジスタを割り当てたか否かについて判定を
行う。最後のノードでない場合、ルーチンはステップ4
2に戻る。最後のノードに実レジスタを割り当てたな
ら、ルーチンは、割り当てプロセス全体の最後のステッ
プ34に入る。
30をより詳細に示すものである。この図に見られるよ
うに、選択した各ノードをたどりながら、ステップ42
において検査を行い、一次的および二次的インターフェ
アレンス・グラフ双方を満足するように、このノードに
実レジスタを割り当て可能か否かについて判定を行う。
可能であれば、ステップ44において一次的および二次
的インターフェアレンス・グラフ双方を用いてレジスタ
番号を割り当てる。可能でないなら、ステップ46にお
いて一次的インターフェアレンスグラフのみを用いてレ
ジスタ番号を割り当てる。その後、検査を行い、最後の
ノードに実レジスタを割り当てたか否かについて判定を
行う。最後のノードでない場合、ルーチンはステップ4
2に戻る。最後のノードに実レジスタを割り当てたな
ら、ルーチンは、割り当てプロセス全体の最後のステッ
プ34に入る。
【0014】上述のレジスタ割り当て技法は、図4に示
すようなデータ処理システムにおいて実施される。この
図に見られるように、高水準形態のプログラム(C+ま
たはC++で書かれたソース・コードのような)を、ソー
ス50からコンパイラ52に供給する。コンパイラ52
は、レジスタ割り当て手順(およびその他の最適化手
順)を実行し、アセンブリ・コードを生成し、これをC
PU54に供給する。CPU54は、主メモリ56、大
容量記憶装置57および様々なI/O装置58を有す
る。CPUは、インターフェアレンスグラフ・カラーリ
ング技法の結果として、仮想レジスタ即ちシンボリック
・レジスタに割り当てられる実レジスタを内蔵する。
すようなデータ処理システムにおいて実施される。この
図に見られるように、高水準形態のプログラム(C+ま
たはC++で書かれたソース・コードのような)を、ソー
ス50からコンパイラ52に供給する。コンパイラ52
は、レジスタ割り当て手順(およびその他の最適化手
順)を実行し、アセンブリ・コードを生成し、これをC
PU54に供給する。CPU54は、主メモリ56、大
容量記憶装置57および様々なI/O装置58を有す
る。CPUは、インターフェアレンスグラフ・カラーリ
ング技法の結果として、仮想レジスタ即ちシンボリック
・レジスタに割り当てられる実レジスタを内蔵する。
【0015】前述したように、二次的インターフェアレ
ンス・グラフは、条件付きであり、種々のプログラム・
セグメントの実行に際して、実レジスタの最適な使用を
犠牲にすれば許容できるコンフリクトを示すために構成
される。以下に示すのは、二次的インターフェアレンス
・グラフ・エッジを使用して、浮動小数点インターロッ
クの条件付きコンフリクトを排除するようにレジスタを
割り当てる、スパーク・アセンブリ言語(Sparc assembl
y language)による一連の命令の例である。
ンス・グラフは、条件付きであり、種々のプログラム・
セグメントの実行に際して、実レジスタの最適な使用を
犠牲にすれば許容できるコンフリクトを示すために構成
される。以下に示すのは、二次的インターフェアレンス
・グラフ・エッジを使用して、浮動小数点インターロッ
クの条件付きコンフリクトを排除するようにレジスタを
割り当てる、スパーク・アセンブリ言語(Sparc assembl
y language)による一連の命令の例である。
【0016】
【表1】
【0017】この例では、同じマシン・サイクルにおい
て発行する命令群は、アステリスクで構成された線によ
って分離されている。最初の命令は、fdivs命令と
いう名の命令である。1対の数(80 86)は、命令
がサイクル80で発行し、サイクル86で完了予定であ
ることを示す。その結果、fdivs命令は、示した命
令群全てにわたって実行される(最後の命令群がサイク
ル85で発行するため)。fdivs命令は、潜在的な
フロー・インターロック(flow interlock)を伴う命令で
あり、命令の結果がレジスタf2に格納されるので、最
適なレジスタ割り当てのためには、マシン・サイクル8
0〜86の間命令は対をなすレジスタf3を使用しない
ことが必要である。さもなければ、このような命令は、
実行の開始からfdivs命令の実行終了(即ち、マシ
ン・サイクル86)までインターロックを発生すること
になろう。f3(およびf2)以外の実レジスタを選択
することによって、浮動インターロックの問題は回避さ
れ、この命令集合は、最大の実行速度で処理を進めるこ
とが可能となる。
て発行する命令群は、アステリスクで構成された線によ
って分離されている。最初の命令は、fdivs命令と
いう名の命令である。1対の数(80 86)は、命令
がサイクル80で発行し、サイクル86で完了予定であ
ることを示す。その結果、fdivs命令は、示した命
令群全てにわたって実行される(最後の命令群がサイク
ル85で発行するため)。fdivs命令は、潜在的な
フロー・インターロック(flow interlock)を伴う命令で
あり、命令の結果がレジスタf2に格納されるので、最
適なレジスタ割り当てのためには、マシン・サイクル8
0〜86の間命令は対をなすレジスタf3を使用しない
ことが必要である。さもなければ、このような命令は、
実行の開始からfdivs命令の実行終了(即ち、マシ
ン・サイクル86)までインターロックを発生すること
になろう。f3(およびf2)以外の実レジスタを選択
することによって、浮動インターロックの問題は回避さ
れ、この命令集合は、最大の実行速度で処理を進めるこ
とが可能となる。
【0018】これまで述べたことは本発明の好適実施例
の全体的かつ完全な開示を与えるものであるが、種々の
変更、代替構造、および均等物を用いることも可能であ
る。例えば、レジスタ対を伴う単精度浮動小数点のイン
ターロックの問題を参照しながら、二次的インターフェ
アレンス・グラフについて説明したが、必要に応じて他
の条件付き制約も二次的インターフェアレンス・グラフ
を構成する際に使用してもよい。同様に、本発明は、単
一の一次的インターフェアレンス・グラフおよび単一の
二次的インターフェアレンスグラフのみの使用に限定さ
れるものではなく、三次的グラフおよび更に他のレベル
のグラフにも同様に拡張可能である。したがって、これ
までの記載は、本発明の限定として解釈すべきではな
く、本発明は特許請求の範囲によってのみ規定されるも
のとする。
の全体的かつ完全な開示を与えるものであるが、種々の
変更、代替構造、および均等物を用いることも可能であ
る。例えば、レジスタ対を伴う単精度浮動小数点のイン
ターロックの問題を参照しながら、二次的インターフェ
アレンス・グラフについて説明したが、必要に応じて他
の条件付き制約も二次的インターフェアレンス・グラフ
を構成する際に使用してもよい。同様に、本発明は、単
一の一次的インターフェアレンス・グラフおよび単一の
二次的インターフェアレンスグラフのみの使用に限定さ
れるものではなく、三次的グラフおよび更に他のレベル
のグラフにも同様に拡張可能である。したがって、これ
までの記載は、本発明の限定として解釈すべきではな
く、本発明は特許請求の範囲によってのみ規定されるも
のとする。
【図1】本発明を示すインターフェアレンス・グラフ。
【図2】本発明のインターフェアレンス・グラフ・カラ
ーリング技法全体を示すフロー・チャート。
ーリング技法全体を示すフロー・チャート。
【図3】本発明による一次的インターフェアレンス・チ
ャートおよび二次的インターフェアレンス・チャートの
使用を示すフロー・チャート。
ャートおよび二次的インターフェアレンス・チャートの
使用を示すフロー・チャート。
【図4】本発明を組み込んだデータ処理システムのブロ
ック図。
ック図。
12,14,16 ノード 13 一次的エッジ 17 二次的エッジ 50 ソース 52 コンパイラ 54 CPU 56 主メモリ 57 大容量記憶装置 58 I/O装置 100,101,102 仮想レジスタ
───────────────────────────────────────────────────── フロントページの続き (71)出願人 597004720 2550 Garcia Avenue,MS PAL1−521,Mountain V iew,California 94043− 1100,United States of America (72)発明者 カート・ジェイ・ガーベル アメリカ合衆国カリフォルニア州94043, マウンテン・ヴュー,プロムミーシアン・ ウェイ 120
Claims (9)
- 【請求項1】 CPU内にある実レジスタを前記CPU
上で実行される目標コンピュータ・プログラムの命令に
割り当てるため、コンパイラにおいて使用するコンピュ
ータ実行方法であって、 仮想レジスタを表わすノードと、レイテンシーが共存す
るノードを連結する一次的エッジとを有し、所与のノー
ドのエッジ数が当該ノードの等級となる一次的インター
フェアレンス・グラフ表現を作成するステップと、 仮想レジスタを表わすノードと、条件付きコンフリクト
を有するノードを連結する二次的エッジとを有する二次
的インターフェアレンス・グラフの表現を作成するステ
ップと、 全てのノードが選択されるまで、前記CPUのレジスタ
数よりも等級が低いノードを、前記一次的インターフェ
アレンス・グラフから選択するステップと、 前記一次的および二次的インターフェアレンス・グラフ
のエッジを用いて、選択したノードにレジスタを割り当
て可能か否かを最初に判断し、可能である場合、その基
準にしたがって実レジスタを割り当て、可能でない場合
前記一次的グラフのエッジのみを用いて実レジスタを割
り当てるステップと、を備えた方法。 - 【請求項2】 請求項1記載の方法において、前記割り
当てステップが、前記ノードを最初に選択したときの順
序と逆の順序で、前記ノードに対して実行される方法。 - 【請求項3】 請求項1記載の方法において、前記二次
的インターフェアレンス・グラフ・エッジは、他の仮想
レジスタと対をなすレジスタの使用を要求する仮想レジ
スタを連結する方法。 - 【請求項4】 コンピュータ・システムであって、 有限数の割り当て可能なレジスタを有する中央演算装置
(CPU)と、 仮想レジスタを表わすノードと、レイテンシーが共存す
るノードを連結する一次的エッジとを有し、所与のノー
ドのエッジ数が当該ノードの等級となる、一次的インタ
ーフェアレンス・グラフ表現を作成する第1手順と、仮
想レジスタを表わすノードと、条件付きコンフリクトを
有するノードを連結する二次的エッジとを有する二次的
インターフェアレンス・グラフの表現を作成する第2手
順と、全てのノードが選択されるまで、前記CPUのレ
ジスタの数よりも等級が低いノードを、前記一次的イン
ターフェアレンス・グラフから選択する第3手順と、前
記一次的および二次的インターフェアレンス・グラフの
両方のエッジを用いて、選択したノードにレジスタを割
り当て可能か否かを最初に判断し、可能である場合、そ
の基準にしたがって実レジスタを割り当て、可能でない
場合前記一次的グラフのエッジのみを用いて実レジスタ
を割り当てる第4手順とを含むコンパイラと、を備えた
コンピュータ・システム。 - 【請求項5】 請求項4記載のコンピュータ・システム
において、前記第4手順は、前記ノードを最初に選択し
たときの順序と逆の順序で、前記ノードに対して実行す
るコンピュータ・システム。 - 【請求項6】 請求項4記載の方法において、前記二次
的インターフェアレンス・グラフ・エッジは、他の仮想
レジスタと対をなすレジスタの使用を要求する仮想レジ
スタを連結するコンピュータ・システム。 - 【請求項7】 コンピュータ・プログラム・プロダクト
であって、 コンピュータ・システムにおいて、実レジスタの割り当
てを最適化する、コンピュータが読み取り可能なコード
を具現化した、コンピュータが使用可能な媒体から成
り、前記コンピュータ・プログラム・プロダクトは、 仮想レジスタを表わすノードと、レイテンシーが共存す
るノードを連結する一次的エッジとを有し、所与のノー
ドのエッジ数が当該ノードの等級となる、一次的インタ
ーフェアレンス・グラフ表現を作成し、仮想レジスタを
表わすノードと、条件付きコンフリクトを有するノード
を連結する二次的エッジとを有する二次的インターフェ
アレンス・グラフの表現を作成する、第1組のコンピュ
ータ読み取り可能プログラム・コード・デバイスと、 全てのノードが選択されるまで、前記CPUのレジスタ
の数よりも等級が低いノードを、前記一次的インターフ
ェアレンス・グラフからコンピュータに選択させるよう
に構成された、第2組のコンピュータ読み取り可能プロ
グラム・コード・デバイスと、 コンピュータに、前記一次的および二次的インターフェ
アレンス・グラフのエッジを用いて、選択したノードに
レジスタを割り当て可能か否かを最初に判断させ、可能
である場合、その基準にしたがって実レジスタを割り当
てさせ、可能でない場合、前記一次的グラフのエッジの
みを用いて実レジスタを割り当てさせるように構成され
た、第3組のコンピュータ読み取り可能プログラム・コ
ード・デバイスと、を備えたコンピュータ・プログラム
・プロダクト。 - 【請求項8】 請求項7記載のコンピュータ・プログラ
ム・プロダクトにおいて、前記第1組のコンピュータ読
み取り可能プログラム・コード・デバイスは、他の仮想
レジスタと対をなすレジスタの使用を要求する仮想レジ
スタを連結する二次的エッジを有する二次的インターフ
ェアレンス・グラフの表現を、前記コンピュータに作成
させるように構成されているコンピュータ・プログラム
・プロダクト。 - 【請求項9】 請求項7記載のコンピュータ・プログラ
ム・プロダクトにおいて、前記第3組のコンピュータ読
み取り可能プログラム・コード・デバイスは、コンピュ
ータに、前記ノードを最初に選択したときの順序と逆の
順序で、実レジスタの割り当てを実行させるコンピュー
タ・プログラム・プロダクト。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US621409 | 1996-03-25 | ||
US08/621,409 US5901317A (en) | 1996-03-25 | 1996-03-25 | Method and system for register allocation using multiple interference graphs |
Publications (1)
Publication Number | Publication Date |
---|---|
JPH103391A true JPH103391A (ja) | 1998-01-06 |
Family
ID=24490061
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP9072122A Pending JPH103391A (ja) | 1996-03-25 | 1997-03-25 | 多重インターフェアレンス・グラフを使用するレジスタ割り当て方法及びシステム |
Country Status (4)
Country | Link |
---|---|
US (1) | US5901317A (ja) |
EP (1) | EP0798636B1 (ja) |
JP (1) | JPH103391A (ja) |
DE (1) | DE69712965T9 (ja) |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6059840A (en) * | 1997-03-17 | 2000-05-09 | Motorola, Inc. | Automatic scheduling of instructions to reduce code size |
US6182284B1 (en) * | 1998-09-30 | 2001-01-30 | Hewlett-Packard Company | Method and system for eliminating phi instruction resource interferences and redundant copy instructions from static-single-assignment-form computer code |
JP4573189B2 (ja) | 1998-10-10 | 2010-11-04 | インターナショナル・ビジネス・マシーンズ・コーポレーション | プログラムコード変換方法 |
US7086045B2 (en) * | 2001-10-19 | 2006-08-01 | Sun Microsystems, Inc. | Heuristic to improve register allocation using pass degree |
US20030079210A1 (en) * | 2001-10-19 | 2003-04-24 | Peter Markstein | Integrated register allocator in a compiler |
US7469404B2 (en) * | 2004-06-30 | 2008-12-23 | Intel Corporation | Bank assignment for partitioned register banks |
CN100368992C (zh) * | 2005-06-16 | 2008-02-13 | 中国科学院计算技术研究所 | 一种解决多寄存器组冲突的方法 |
US7650598B2 (en) * | 2006-08-09 | 2010-01-19 | National Tsing Hua University | Method for allocating registers for a processor |
US8832671B1 (en) * | 2010-07-07 | 2014-09-09 | Nvidia Corporation | Conflict-free register allocation |
US8555035B1 (en) | 2010-07-07 | 2013-10-08 | Nvidia Corporation | Conflict-free register allocation using a multi-bank register file with input operand alignment |
US20150078260A1 (en) * | 2013-09-13 | 2015-03-19 | Fujitsu Limited | Parallel resource management in white space bands using transmit power control and channel set assignment |
CN108804222B (zh) * | 2018-04-13 | 2021-07-27 | 南京南瑞继保电气有限公司 | 一种临时变量的数据区分配方法 |
DE102022125248B4 (de) | 2022-09-30 | 2024-05-02 | Oliver Bartels | Prozessor und Computer mit mindestens einem Prozessor mit vorzeitiger Programmvariantenauswahl bei noch unbekannten Vergleichsergebnissen |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
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 |
US4667290A (en) * | 1984-09-10 | 1987-05-19 | 501 Philon, Inc. | Compilers using a universal intermediate language |
US4763255A (en) * | 1984-10-31 | 1988-08-09 | International Business Machines Corporation | Method for generating short form instructions in an optimizing compiler |
US4782444A (en) * | 1985-12-17 | 1988-11-01 | International Business Machine Corporation | Compilation using two-colored pebbling register allocation method such that spill code amount is invariant with basic block's textual ordering |
JPH02187825A (ja) * | 1989-01-13 | 1990-07-24 | Mitsubishi Electric Corp | コンピュータ |
US5175856A (en) * | 1990-06-11 | 1992-12-29 | Supercomputer Systems Limited Partnership | Computer with integrated hierarchical representation (ihr) of program wherein ihr file is available for debugging and optimizing during target execution |
US5249295A (en) * | 1990-06-20 | 1993-09-28 | Rice University | Digital computer register allocation and code spilling using interference graph coloring |
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 |
US5293631A (en) * | 1991-08-06 | 1994-03-08 | Hewlett-Packard Company | Analysis and optimization of array variables in compiler for instruction level parallel processor |
US5418958A (en) * | 1992-07-15 | 1995-05-23 | Sun Microsystems, Inc. | Register allocation by decomposing, re-connecting and coloring hierarchical program regions |
US5481706A (en) * | 1993-11-01 | 1996-01-02 | International Business Machines Corporation | System and method for creating thread-safe shared libraries |
US5590329A (en) * | 1994-02-04 | 1996-12-31 | Lucent Technologies Inc. | Method and apparatus for detecting memory access errors |
US5659754A (en) * | 1995-03-31 | 1997-08-19 | Sun Microsystems, Inc. | Method and apparatus for an improved optimizing compiler |
-
1996
- 1996-03-25 US US08/621,409 patent/US5901317A/en not_active Expired - Lifetime
-
1997
- 1997-02-28 DE DE69712965T patent/DE69712965T9/de not_active Expired - Fee Related
- 1997-02-28 EP EP97103331A patent/EP0798636B1/en not_active Expired - Lifetime
- 1997-03-25 JP JP9072122A patent/JPH103391A/ja active Pending
Also Published As
Publication number | Publication date |
---|---|
DE69712965T2 (de) | 2003-01-09 |
EP0798636A1 (en) | 1997-10-01 |
DE69712965D1 (de) | 2002-07-11 |
DE69712965T9 (de) | 2004-09-09 |
EP0798636B1 (en) | 2002-06-05 |
US5901317A (en) | 1999-05-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Rau et al. | Efficient code generation for horizontal architectures: Compiler techniques and architectural support | |
US5418958A (en) | Register allocation by decomposing, re-connecting and coloring hierarchical program regions | |
US5784066A (en) | Method and apparatus for using partner information to color nodes in an interference graph within a computer system | |
US5761514A (en) | Register allocation method and apparatus for truncating runaway lifetimes of program variables in a computer system | |
EP0428084B1 (en) | Method and apparatus for compiling computer programs with interprocedural register allocation | |
US5303357A (en) | Loop optimization system | |
US5946491A (en) | Register allocation method and apparatus for gernerating spill code as a function of register pressure compared to dual thresholds | |
US5774730A (en) | Method and apparatus for improving colorability of constrained nodes in an interference graph within a computer system | |
EP0416768A2 (en) | Thread private memory storage for multi-thread digital data processors | |
JPH0256640A (ja) | 共通ブロックへのアクセス競合軽減方法 | |
JPH103391A (ja) | 多重インターフェアレンス・グラフを使用するレジスタ割り当て方法及びシステム | |
US20090064112A1 (en) | Technique for allocating register to variable for compiling | |
US5933644A (en) | Method and apparatus for conflict-based block reordering | |
US5613121A (en) | Method and system of generating combined storage references | |
JPH06103463B2 (ja) | コード生成方法 | |
US5261062A (en) | Register allocation system adaptive for pipelining | |
JPH04330527A (ja) | プログラムの最適化方法及びコンパイラ・システム | |
JP2004220583A (ja) | アセンブラにおいて大域的プロセッサ資源割当てを実行するための方法およびシステム | |
US6351848B1 (en) | Unitary data structure systems, methods, and computer program products, for global conflict determination | |
US7376818B2 (en) | Program translator and processor | |
JPH04266125A (ja) | ディジタルコンピュータの操作方法 | |
US6009272A (en) | Register allocation via selective spilling | |
JP3311381B2 (ja) | コンパイラにおける命令スケジューリング処理方法 | |
US6139200A (en) | Register resource allocation feedback | |
JP2000010791A (ja) | グロ―バルレジスタを初期化するための方法、コンピュ―タプログラム製品及び装置 |