DE69712965T9 - Verfahren, System und Rechnerprogrammprodukt zur Registerzuweisung unter Verwendung mehrerer Interferenzgraphen - Google Patents

Verfahren, System und Rechnerprogrammprodukt zur Registerzuweisung unter Verwendung mehrerer Interferenzgraphen Download PDF

Info

Publication number
DE69712965T9
DE69712965T9 DE69712965T DE69712965T DE69712965T9 DE 69712965 T9 DE69712965 T9 DE 69712965T9 DE 69712965 T DE69712965 T DE 69712965T DE 69712965 T DE69712965 T DE 69712965T DE 69712965 T9 DE69712965 T9 DE 69712965T9
Authority
DE
Germany
Prior art keywords
nodes
register
primary
registers
edges
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 - Fee Related
Application number
DE69712965T
Other languages
English (en)
Other versions
DE69712965D1 (de
DE69712965T2 (de
Inventor
Kurt J. Mountain View Goebel
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sun Microsystems Inc
Original Assignee
Sun Microsystems Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Sun Microsystems Inc filed Critical Sun Microsystems Inc
Publication of DE69712965D1 publication Critical patent/DE69712965D1/de
Application granted granted Critical
Publication of DE69712965T2 publication Critical patent/DE69712965T2/de
Publication of DE69712965T9 publication Critical patent/DE69712965T9/de
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/441Register 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)

Description

  • 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.
  • Figure 00090001
  • 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 8086 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.

Claims (9)

  1. Computerimplementiertes Verfahren zur Verwendung in einem Kompilierer (52), um reale Register in einer CPU (24) Befehlen eines Zielcomputerprogramms zuzuweisen, welche in der CPU ausgeführt werden sollen, wobei das Verfahren die Schritte umfaßt: Erzeugen einer Darstellung einer primären Interferenzkurve (22) 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; Erzeugen einer Darstellung einer sekundären Interferenzkurve (22) mit Knoten, die virtuelle Register darstellen, und sekundären Kanten, die Knoten mit bedingten Konflikten verbinden; Auswählen von Knoten (26) aus der primären Interferenzkurve mit Graden, die geringer sind als die Anzahl von Registern der CPU (24), bis alle Knoten ausgewählt wurden (28); und 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 (42), und wenn ja, Zuweisen eines realen Registers auf dieser Basis (44); und wenn nicht, Zuweisen eines realen Registers unter Verwendung der Kanten der primären Kurve allein (46).
  2. Verfahren nach Anspruch 1, wobei der Schritt des Zuweisens an den Knoten in umgekehrter Reihenfolge, in der die Knoten ursprünglich ausgewählt wurden, durchgeführt wird.
  3. Verfahren nach Anspruch 1, wobei die Kanten der sekundären Interferenzkurve ein virtuelles Register, das die Verwendung eines gepaarten Registers erfordert, mit einem weiteren virtuellen Register verknüpfen.
  4. Computersystem mit: einer Zentralverarbeitungseinheit (CPU) (54) mit einer endlichen Anzahl von zuweisbaren Registern; und einem Kompilierer mit einer ersten Prozedur zum Erzeugen einer Darstellung 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 Darstellung 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.
  5. Computersystem nach Anspruch 4, wobei die vierte Prozedur an den Knoten in umgekehrter Reihenfolge, in der die Knoten ursprünglich ausgewählt wurden, durchgeführt wird.
  6. Computersystem nach Anspruch 4, wobei die Kanten der sekundären Interferenzkurve ein virtuelles Register, das die Verwendung eines gepaarten Registers erfordert, mit einem weiteren virtuellen Register verknüpfen.
  7. Computerprogrammprodukt mit: einem vom Computer verwendbaren Medium mit einem darin verkörperten maschinenlesbaren Code zum Optimieren der Zuweisung von realen Registern in einem Computersystem, wobei das Computerprogrammprodukt umfaßt: einen ersten Satz von Vorrichtungen eines maschinenlesbaren Programmcodes zum Erzeugen einer Darstellung 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, und zum Erzeugen einer Darstellung einer sekundären Interferenzkurve mit Knoten, die virtuelle Register darstellen, und sekundären Kanten, die Knoten mit bedingten Konflikten verbinden; einen zweiten Satz von Vorrichtungen eines maschinenlesbaren Programmcodes, die dazu ausgelegt sind, einen Computer zu veranlassen, Knoten aus der primären Interferenzkurve mit Graden, die geringer sind als die Anzahl von realen Registern in dem Computersystem, auszuwählen, bis alle Knoten ausgewählt wurden; und einen dritten Satz von Vorrichtungen eines maschinenlesbaren Programmcodes, die dazu ausgelegt sind, einen Computer zu veranlassen, reale Register den ausgewählten Knoten zuzuweisen, durch zuerst Feststellen, ob ein reales 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.
  8. Computerprogrammprodukt nach Anspruch 7, wobei der erste Satz von Vorrichtungen eines maschinenlesbaren Programmcodes dazu ausgelegt ist, einen Computer zu veranlassen, eine Darstellung einer sekundären Interferenzkurve mit sekundären Kanten zu erzeugen, die ein virtuelles Register, das die Verwendung eines gepaarten Registers erfordert, mit einem weiteren virtuellen Register verknüpfen.
  9. Computerprogrammprodukt nach Anspruch 7, wobei der dritte Satz von Vorrichtungen eines maschinenlesbaren Programmcodes dazu ausgelegt ist, einen Computer zu veranlassen, die Zuweisung von realen Registern in der umgekehrten Reihenfolge, in der die Knoten ursprünglich ausgewählt wurden, durchzuführen.
DE69712965T 1996-03-25 1997-02-28 Verfahren, System und Rechnerprogrammprodukt zur Registerzuweisung unter Verwendung mehrerer Interferenzgraphen Expired - Fee Related DE69712965T9 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/621,409 US5901317A (en) 1996-03-25 1996-03-25 Method and system for register allocation using multiple interference graphs
US621409 1996-03-25

Publications (3)

Publication Number Publication Date
DE69712965D1 DE69712965D1 (de) 2002-07-11
DE69712965T2 DE69712965T2 (de) 2003-01-09
DE69712965T9 true DE69712965T9 (de) 2004-09-09

Family

ID=24490061

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69712965T Expired - Fee Related DE69712965T9 (de) 1996-03-25 1997-02-28 Verfahren, System und Rechnerprogrammprodukt zur Registerzuweisung unter Verwendung mehrerer Interferenzgraphen

Country Status (4)

Country Link
US (1) US5901317A (de)
EP (1) EP0798636B1 (de)
JP (1) JPH103391A (de)
DE (1) DE69712965T9 (de)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
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 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラムコード変換方法
US20030079210A1 (en) * 2001-10-19 2003-04-24 Peter Markstein Integrated register allocator in a compiler
US7086045B2 (en) * 2001-10-19 2006-08-01 Sun Microsystems, Inc. Heuristic to improve register allocation using pass degree
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)

* Cited by examiner, † Cited by third party
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

Also Published As

Publication number Publication date
EP0798636B1 (de) 2002-06-05
EP0798636A1 (de) 1997-10-01
US5901317A (en) 1999-05-04
DE69712965D1 (de) 2002-07-11
JPH103391A (ja) 1998-01-06
DE69712965T2 (de) 2003-01-09

Similar Documents

Publication Publication Date Title
EP0689694B1 (de) Verfahren zur maschinellen erzeugung von nebenläufig bearbeitbaren befehlsgruppen aus einem programm für superskalare mikroprozessoren
DE69924857T2 (de) Programm-kode-umwandlung
DE69712965T9 (de) Verfahren, System und Rechnerprogrammprodukt zur Registerzuweisung unter Verwendung mehrerer Interferenzgraphen
DE19945992B4 (de) Dynamisch optimierender Objektcode-Übersetzer zur Architekturemulation und dynamisches optimierendes Objektcode-Übersetzungsverfahren
DE112011104555B4 (de) Vektorkonfliktinstruktionen
DE69838835T2 (de) Verfahren zur Prüfung und zur Darstellung einer Hardware durch Zerlegung und Aufteilung
DE19983330B4 (de) Computerprozessor mit einem Wiederholsystem mit einem Stufungsabschnitt zum getakteten Verzögern und Verfahren zum Verarbeiten eines Befehls in einem solchen Prozessor
DE112012000303B4 (de) Dynamische binäre Optimierung
DE3991231C2 (de) Vektorprozessor und Verfahren zum Suchen einer Stichwortzeichenfolge in einer Textzeichenfolge
DE69832932T2 (de) Programmkonvertiergerät für konstantenrekonstruierenden VLIW Prozessor
DE69722138T2 (de) Code-Optimierer für Pipeline-Rechner
DE69831344T2 (de) Effiziente verarbeitung von gebündelten sprungbefehlen
DE3638572C2 (de)
EP1738257B1 (de) Verfahren zum vermeiden von dateninkonsistenz zwischen zugriffen verschiedener funktionen einer anwendung auf eine globale variable in einer datenverarbeitungsanlage
CH633643A5 (de) Verfahren zur blockierungsfreien verzahnten simultanverarbeitung mehrerer aufgaben mittels mehrerer programme in einer datenverarbeitungsanlage.
DE4301417A1 (de)
DE19983098B4 (de) Mehrfach-Bitanzeige zur Behandlung von Schreib-nach-Schreib-Fehlern und zur Eliminierung von Bypass-Komparatoren
DE4409586C2 (de) Verfahren und Verarbeitungssystem zum Vereinfachen von Verknüpfungshardware
DE112011103406T5 (de) Verwaltung von nicht geänderten Objekten
DE10306051B4 (de) Verfahren zum Optimieren der Verarbeitung von Befehlen durch einen Prozessor und Prozessoren zur Durchführung der Verfahren
DE19924702A1 (de) Systeme mit einheitlicher Datenstruktur, Verfahren und Computerprogrammprodukte zur Feststellung von globalen Konflikten
DE19924437A1 (de) Verfahren, Computerprogrammprodukte und Vorrichtung zur Initialisierung von globalen Registern
DE60311918T2 (de) Methode und Apparat zur Programmkodekonvertierung zum Vermeiden von Interlocking
EP0662226B1 (de) Verfahren zur bearbeitung eines anwenderprogramms auf einem parallelrechnersystem
EP4055473B1 (de) Verfahren zum aktualisieren eines steuerprogramms eines automatisierungssystems mit datenmigration eines programmzustands des steuerprogramms

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
8339 Ceased/non-payment of the annual fee