-
HINTERGRUND
DER ERFINDUNG
-
Diese Erfindung betrifft die Optimierung
der Registerzuweisung in Datenverarbeitungssystemen während der
Programmkompilierzeit. Insbesondere betrifft diese Erfindung die
Registerzuweisungsoptimierung unter Verwendung von Interferenzkurven-Färbeverfahren.
-
Die Registerzuweisung unter Verwendung
von Interferenzkurven-Färbeverfahren
ist bekannt und wurde zur Verwendung beim Zuweisen von realen Registern
zu symbolischen oder virtuellen Registern, wenn ein Programm vor
der Ausführung
kömpiliert
wird, umfangreich übernommen.
Die grundlegende Bezugsquelle auf diesem Gebiet ist "Register Allocation
Via Coloring", G.
J. CHAITIN ET AL., Computer Languages Band 6, Seiten 47–57, 1981.
Im allgemeinen verfährt
das Verfahren durch Erzeugen einer Registerinterferenzkurve unter Verwendung
von symbolischen oder virtuellen Registern im Datenverarbeitungssystem-Kompilierer, wobei
die symbolischen Register als einzelne Knoten in der Kurve vorliegen.
Für jene
Knoten, in denen der Inhalt gleichzeitig lebendig ist, werden solche
Knoten durch eine Kante verbunden. Wenn die Interferenzkurve einmal
konstruiert ist, werden jene Knoten mit einem Grad von weniger als
k, wobei k die Anzahl von realen Registern ist, die im Datenverarbeitungssystem
verfügbar
sind, in gewisser logischer Weise aus der Kurve gelöscht. Knoten mit
einem Grad von mehr als oder gleich k werden für eine Überlaufoperation ausgewählt, bei
der der Inhalt der realen Register (wenn das Programm ausgeführt wird)
für den
späteren
Abruf anderswo gespeichert wird. Anschließend wird eine neue Interferenzkurve
konstruiert und jeder Knoten wird in derselben Weise untersucht.
Dieser iterative Prozeß fährt fort,
bis alle Knoten aus der Interferenzkurve entfernt wurden. Anschließend werden
die Knoten in umgekehrter Reihenfolge untersucht und individuellen
Farben (in Wirklichkeit Nummern realer Register) zugewiesen und
der Prozeß wird
somit beendet.
-
Obwohl es beim Zuweisen von realen
Registern im allgemeinen wirksam ist, wenn ein Programm kompiliert
wird, sehen viele spezielle Anwendungen bedingte Einschränkungen
vor, die zu einer schlechteren als optimalen Registerzuweisung infolge
des Interferenzkurven-Färbeverfahrens
führen.
Bei einigen Datenverarbeitungssystemen, die Gleitkommaoperationen
mit einfacher Genauigkeit verwenden, sind reale Register beispielsweise
als Paare zusammengebunden, mit einer resultierenden Unfähigkeit
des Datenverarbeitungssystems, zwischen einzelnen Registern eines
Paars zu unterschieden. Wenn eines der gepaarten Register einem ersten
Knoten zugewiesen wird und das andere des Registerpaars einem zweiten
Knoten mit gemeinsamer Wartezeit mit dem ersten Knoten zugewiesen
wird (d. h. der erste und der zweite Knoten sind mit einer Kante verbunden),
existiert ein Sperrzustand, bei dem das System mehrere Maschinenzyklen
auf die Beendung der Ausführung
eines gegebenen Befehls warten muß, bevor gestattet wird, daß der nächste Befehl
fortfährt.
Obwohl die Verzögerung
bei der Ausführung,
die durch eine Gleitkomma-Sperrbedingung eingeführt wird, gewöhnlich nicht
so groß ist
wie jene, die durch eine Überlaufoperation
hervorgerufen wird, leidet die Ausführungszeit dieses Teils des
Programms dennoch, was unerwünscht
und schlechter als optimal ist.
-
ZUSAMMENFASSUNG
DER ERFINDUNG
-
Die Erfindung umfaßt ein verbessertes
Interferenzkurven-Registerzuweisungsverfahren,
das die Ausführungszeitverzögerung,
die durch bedingte Einschränkungen
(wie z. B. die Einschränkung
der Gleitkommaregister-Paarung mit einfacher Genauigkeit) eingeführt wird,
vermeidet und eine optimale Zuweisung von realen Registern während der
Kompilierung des Programms in eine maschinenausführbare Form vorsieht.
-
Aus einem Prozeßstandpunkt umfaßt die Erfindung
ein Verfahren zum Optimieren der Zuweisung von realen Registern
in einer CPU eines Datenverarbeitungssystems, das durch Erzeugen
einer primären
Interferenzkurve mit Knoten, die variable Register darstellen, und
primären
Kanten, die Knoten mit gleichzeitiger Wartezeit verbinden, verfährt, wobei
die Anzahl von Kanten eines gegebenen Knotens als Grad des Knotens
bezeichnet wird. Dann wird eine sekundäre Interferenzkurve mit Knoten,
die virtuelle Register darstellen, und sekundären Kanten, die Knoten mit
bedingten Konflikten verbinden, erzeugt, welche toleriert werden
können, welche
jedoch nicht optimal sind, wie z. B. ein Knoten, der die Verwendung
von einem eines Paars von gepaarten Registern in einer Gleitkommaoperation
mit einfacher Genauigkeit erfordert. Knoten mit Graden von weniger
als der Anzahl von verfügbaren
realen CPU-Registern werden aus der primären Interferenzkurve ausgewählt, bis
alle Knoten so ausgewählt
wurden. Anschließend
wird ein Versuch unternommen, reale Register den ausgewählten Knoten
in umgekehrter Reihenfolge ihrer Auswahl zuzuweisen, indem zuerst
unter Verwendung der Kanteneinschränkungen von sowohl der primären als
auch der sekundären Interferenzkurve
festgestellt wird, ob ein Register für einen ausgewählten Knoten
zugewiesen werden kann. Wenn ja, wird die Zuweisung des realen Registers
zu einem gegebenen Knoten auf der Basis von sowohl der primären als
auch der sekundären
Interferenzkurve durchgeführt.
Wenn ein Register nicht für
einen ausgewählten
Knoten unter Verwendung der Kanten von sowohl der primären als
auch der sekundären
Interferenzkurve zugewiesen werden kann, wird das reale Register
auf der Basis der primären
Kurve allein zugewiesen. Der Schritt der Zuweisung wird vorzugsweise
an den Knoten in der umgekehrten Reihenfolge, in der die Knoten
ursprünglich
ausgewählt wurden,
durchgeführt:
d. h. der erste ausgewählte
Knoten erhält
die letzte Registerzuweisung.
-
Von einem Systemstandpunkt umfaßt die Erfindung
ein Datenverarbeitungssystem mit einer CPU mit einer festen Anzahl
von zuweisbaren Registern und einem Kompilierer mit einer ersten
Prozedur zum Erzeugen einer primären
Interferenzkurve mit Knoten, die virtuelle Register darstellen,
und primären
Kanten, die Knoten mit gleichzeitiger Wartezeit verbinden, wobei
die Anzahl von Kanten eines gegebenen Knotens der Grad des Knotens
ist, einer zweiten Prozedur zum Erzeugen einer sekundären Interferenzkurve
mit Knoten, die virtuelle Register darstellen, und sekundären Kanten,
die Knoten mit bedingten Konflikten verbinden, einer dritten Prozedur
zum Auswählen
von Knoten aus der primären
Interferenzkurve mit einem Grad, der geringer ist als die Anzahl
von CPU-Registern, bis alle Knoten aus der primären Interferenzkurve ausgewählt wurden, und
einer vierten Prozedur zum Zuweisen von realen Registern den ausgewählten Knoten
durch zuerst Feststellen, ob ein Register für einen ausgewählten Knoten
zugewiesen werden kann, unter Verwendung der Kanten von sowohl der
primären
als auch der sekundären
Interferenzkurve, und wenn ja, Zuweisen eines realen Registers auf
dieser Basis; und wenn nicht, Zuweisen eines realen Registers unter
Verwendung der Kanten der primären
Kurve allein. Die Zuweisungsprozedur wird an den Knoten in der umgekehrten
Reihenfolge, in der die Knoten ursprünglich ausgewählt wurden,
durchgeführt.
Bei einem speziellen Ausführungsbeispiel
der Prozeduren verbinden die Kanten der sekundären Interferenzkurve ein virtuelles
Register, das die Verwendung eines gepaarten Registers erfordert,
mit einem weiteren virtuellen Register mit gemeinsamer Wartezeit.
-
Die Erfindung umfaßt auch
ein Computerprogrammprodukt, wie in Anspruch 7 dargelegt.
-
Für
ein volleres Verständnis
der Art und der Vorteile der Erfindung sollte auf die folgende ausführliche Beschreibung
in Verbindung mit den zugehörigen
Zeichnungen Bezug genommen werden.
-
KURZBESCHREIBUNG
DER ZEICHNUNGEN
-
1 ist
eine Interferenzkurve, die die Erfindung darstellt;
-
2 ist
ein Ablaufplan, der das gesamte Interferenzkurven-Färbeverfahren
der Erfindung darstellt;
-
3 ist
ein Ablaufplan, der die Verwendung einer primären und einer sekundären Interferenzkurve gemäß der Erfindung
darstellt; und
-
4 ist
ein Blockdiagramm eines Datenverarbeitungssystems, das die Erfindung
beinhaltet.
-
AUSFÜHRLICHE
BESCHREIBUNG DER BEVORZUGTEN AUSFÜHRUNGSBEISPIELE
-
Wenn man sich nun den Zeichnungen
zuwendet, ist 1 eine
vereinfachte Interferenzkurve, die die Erfindung darstellt. Wie
in dieser Figur zu sehen ist, weist die Interferenzkurve drei Knoten
auf: Knoten 12, der das virtuelle Register 100 darstellt,
Knoten 14, der das virtuelle Register 101 darstellt,
und Knoten 16, der das virtuelle Register 102 darstellt.
Die Knoten 12 und 14 sind durch eine erste primäre Kante 13 verbunden,
die die gemeinsame Wartezeit zwischen dem Inhalt dieser zwei Register
bezeichnet. Ebenso sind die Knoten 12 und 16 durch
eine primäre
Kante 15 verbunden, die die gemeinsame Wartezeit zwischen
dem Inhalt dieser zwei Register darstellt. Außerdem sind die Knoten 12 und 14 durch
eine sekundäre
Kante 17 verbunden, die einen sekundären Konflikt zwischen dem Inhalt
dieser zwei Knoten bezeichnet. Der sekundäre Konflikt ist ein bedingter
Konflikt: d. h. einer, der toleriert werden kann, der jedoch, wenn
er vermieden wird, die Zuweisung von realen Registern zu den virtuellen
Registern an den Knoten 12 und 14 optimiert. Bei
der vorstehend angegebenen Gleitkommaoperation mit einfacher Genauigkeit
kann die sekundäre
Verbindung 17 beispielsweise bedeuten, daß der Inhalt
von einem der Knoten 12, 14 in einem von zwei
gepaarten Registern gespeichert wird, die nicht leicht vom System
unterschieden werden können.
In einem solchen Fall sollte die Zuweisung von realen Registern
für einen
der zwei Knoten 12, 14 ein gewisses anderes Register
sein als das restliche Register in dem Paar.
-
Die Interferenzkurve 10 von 1 wird eigentlich während der
Kompilierzeit durch Zuweisen eines Paars von Vektoren zu jedem Knoten
konstruiert: wobei ein Vektor primäre Verbindungen darstellt und
der andere Vektor die sekundären
Verbindungen darstellt. Obwohl die Interferenzkurve von
-
1 der
Einfachheit und Deutlichkeit halber nur drei Knoten darstellt, ist
es selbstverständlich,
daß typischerweise
in einer gegebenen Interferenzkurve viele Knoten existieren.
-
Wenn die Kurve einmal konstruiert
wurde, werden Zuweisungen oder eine "Färbung" von realen Registern
unter Verwendung von sowohl den primären als auch den sekundären Komponenten
der Interferenzkurve versucht. 2 ist
ein Ablaufplan, der den Gesamtprozeß darstellt. Wie in dieser
Figur zu sehen ist, beginnt das Registerzuweisungsverfahren der
vorliegenden Erfindung mit einem Schritt zum Konstruieren der primären Interferenzkurve
und der sekundären
Interferenzkurve in Schritt 22. Als nächstes wird eine Prüfung durchgeführt, um
festzustellen, ob in der primären
Interferenzkurve ein Knoten vorhanden ist, der nur einen Grad aufweist,
der geringer ist als die Anzahl von Maschinenregistern. Wenn nicht,
dann wird in eine herkömmliche Überlaufroutine 25 eingetreten,
und eine neue primäre
und sekundäre
Interferenzkurve werden in einem zweiten Durchlaufschritt 22 konstruiert.
-
Wenn ein Knoten mit einem Grad von
weniger als der Anzahl von Maschinenregistern vorhanden ist, dann
werden dieser Knoten und seine Kanten zur Auswahl in Schritt 26 markiert.
Als nächstes
wird die Kurve in Schritt 28 geprüft, um festzustellen, ob alle
Knoten ausgewählt
wurden, und wenn nicht, kehrt die Routine zu Schritt 24 zurück, um einen
weiteren Knoten und seine Kanten auszuwählen.
-
Wenn alle der Knoten aus der primären Interferenzkurve
ausgewählt
wurden, werden den einzelnen ausgewählten Knoten in Schritt 30 Nummern
realer Register in umgekehrter Reihenfolge wie der Reihenfolge der
Auswahl der Knoten und unter Verwendung von sowohl der primären als
auch der sekundären
Interferenzkurve zugewiesen. Schließlich wird das Programm in
Schritt 32 umgeschrieben, indem symbolische Register gegen
Nummern realer Maschinenregister ausgetauscht werden, was das Registerzuweisungsverfahren
beendet.
-
3 stellt
Schritt 30 zur Zuweisung von Nummern realer Register genauer
dar. Wie in dieser Figur zu sehen ist, wird, wenn jeder ausgewählte Knoten
besichtigt wird, in Schritt 42 ein Test durchgeführt, um
festzustellen, ob für
diesen Knoten ein reales Register in einer Weise zugewiesen werden
kann, die sowohl der primären
als auch der sekundären
Interferenzkurve genügt.
Wenn ja, wird die Registernummer unter Verwendung sowohl der primären als
auch der sekundären
Interferenzkurve in Schritt 44 zugewiesen. Wenn nicht, wird
eine Registernummer unter Verwendung der primären Interferenzkurve allein
in Schritt 46 zugewiesen. Anschließend wird ein Test durchgeführt, um
festzustellen, ob der letzte Knoten einem realen Register zugewiesen
wurde. Wenn nicht, kehrt die Routine zu Schritt 42 zurück. Wenn
der letzte Knoten einmal einem realen Register zugewiesen wurde,
tritt die Routine in den letzten Schritt 32 des gesamten
Zuweisungsprozesses ein.
-
Das vorstehend beschriebene Registerzuweisungsverfahren
wird in einem Datenverarbeitungssystem wie z. B. dem in 4 dargestellten implementiert.
Wie in dieser Figur zu sehen ist, wird ein Programm in problemorientierter
Form (wie z. B. ein in C oder C++ geschriebener
Quellencode) von einer Quelle 50 zu einem Kompilierer 52 geliefert.
Der Kompilierer 52 führt
die Registerzuweisungsprozedur (und andere Optimierungsprozeduren)
durch und erzeugt einen Assemblercode, der zu einer CPU 54 mit
einem Hauptspeicher 56, einem Massenspeicher 57 und verschiedenen
E/A-Vorrichtungen 58 geliefert
wird. Die CPU enthält
die realen Register, die den virtuellen oder symbolischen Registern
infolge des Interferenzkurven-Färbeverfahrens
zugewiesen werden. Wie vorstehend angemerkt, wird die sekundäre Interferenzkurve
konstruiert, um Konflikte zwischen Knoten anzuzeigen, die bedingt
sind und die somit toleriert werden können, wenn auch auf Kosten
der optimalen Verwendung der realen Register bei der Ausführung von
verschiedenen Programmsegmenten. Das folgende ist ein Beispiel einer
Befehlssequenz in Sparc-Assemblersprache, in der die Kanten der
sekundären
Interferenzkurve (in Kombination mit den Kanten der primären Interferenzkurve)
verwendet wurden, um Register in einer Weise zuzuweisen, um den
bedingten Konflikt einer Gleitkommasperre zu beseitigen.
-
-
Bei diesem Beispiel sind Befehlsgruppen,
die im gleichen Maschinenzyklus ausgegeben werden, durch die Zeilen
getrennt, die aus Sternchen bestehen. Der erste Befehl ist ein Befehl,
der fdivs-Befehl genannt wird. Das Paar von Zahlen (80 86)
zeigt an, daß der
Befehl im Zyklus 80 ausgegeben Wird und seine Beendung
im Zyklus 86 erwartet wird. Folglich wird der fdivs-Befehl
durch alle der gezeigten Befehlsgruppen ausgeführt (da die letzte Gruppe im
Zyklus 85 ausgegeben wird). Der fdivs-Befehl ist ein Befehl,
der eine potentielle Ablaufsperre beinhaltet, und da das Ergebnis
des Befehls im Register f2 gespeichert werden soll, erfordert eine
optimale Registerzuweisung, daß kein
Befehl während
irgendeinem der Maschinenzyklen 80–86 5 gepaarte
Register f3 verwendet. Ansonsten würde ein solcher Befehl vom
Beginn der Ausführung
bis zum Ende der Ausführung
des fdivs-Befehls (d. h. Maschinenzyklus 86) gesperrt werden.
Durch Auswählen
eines anderen realen Registers als f3 (und f2) wird das Gleitkomma-Sperrproblem 10 vermieden
und der Satz von Befehlen kann mit maximaler Ausführungsgeschwindigkeit
fortfahren.
-
Obwohl das obige eine vollständige und
komplette Offenbarung der bevorzugten Ausführungsbeispiele der 15 Erfindung
vorsieht, können
verschiedene Modifikationen, alternative Konstruktionen und Äquivalente verwendet
werden. Obwohl die sekundäre
Interferenzkurve beispielsweise ausdrücklich mit Bezug auf das Gleitkomma-Sperrproblem mit
einfacher Genauigkeit, das gepaarte 20 Register beinhaltet, beschrieben
wurde, können
andere bedingte Einschränkungen
nach Wunsch beim Konstruieren der sekundären Interferenzkurve verwendet
werden. Ebenso ist die Erfindung nicht auf die Verwendung von nur
einer einzelnen primären und
einer einzelnen sekundären
25 Interferenzkurve begrenzt, sondern kann auch ebenso auf tertiäre Kurven und
Kurven anderer Niveaus erweitert werden. Daher sollte das obige
nicht als Begrenzung der Erfindung aufgefaßt werden, die durch die beigefügten Ansprüche definiert
ist.