DE19848742C2 - Registerumbenennung bei einem Prozessor, der Instruktionen ausserhalb der sequentiellen Reihenfolge bearbeiten kann - Google Patents
Registerumbenennung bei einem Prozessor, der Instruktionen ausserhalb der sequentiellen Reihenfolge bearbeiten kannInfo
- Publication number
- DE19848742C2 DE19848742C2 DE19848742A DE19848742A DE19848742C2 DE 19848742 C2 DE19848742 C2 DE 19848742C2 DE 19848742 A DE19848742 A DE 19848742A DE 19848742 A DE19848742 A DE 19848742A DE 19848742 C2 DE19848742 C2 DE 19848742C2
- Authority
- DE
- Germany
- Prior art keywords
- register
- physical
- logical
- registers
- list
- 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
Links
- 238000000034 method Methods 0.000 title claims description 32
- 230000008569 process Effects 0.000 title claims description 17
- 238000012545 processing Methods 0.000 claims description 25
- 238000013507 mapping Methods 0.000 claims description 21
- 238000012546 transfer Methods 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000006073 displacement reaction Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000002250 progressing effect Effects 0.000 description 1
- 230000008929 regeneration Effects 0.000 description 1
- 238000011069 regeneration method Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3838—Dependency mechanisms, e.g. register scoreboarding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3838—Dependency mechanisms, e.g. register scoreboarding
- G06F9/384—Register renaming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3856—Reordering of instructions, e.g. using queues or age tags
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3858—Result writeback, i.e. updating the architectural state or memory
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
Description
Die Erfindung bezieht sich auf das Umbenennen und Zuordnen von
Ressourcen in einem Verarbeitungssystem. Insbesondere gibt die
Erfindung ein Verfahren und eine Vorrichtung zum dynamischen
Verwalten der Zuweisung von physischen Registern zu logischen
Registern an.
Für eine lange Zeit haben Prozessoren Instruktionen in ihrer
sequentiellen Reihenfolge verarbeitet. Dies impliziert, daß
Instruktionen den Verarbeitungseinheiten des Prozessors in der
gleichen Reihenfolge zugeleitet werden wie sie in der
Programmfolge erscheinen, eine nach der anderen.
In solch einem System treten Lese- und Schreiboperationen für
irgendeines der Register des Prozessors in genau der gleichen
Reihenfolge auf wie durch das Programm angegeben. Daher
existiert eine Eins-zu-eins-Entsprechung zwischen den Registern
und ihren Werten. Zu jedem beliebigen vorgegebenen Zeitpunkt
bei der Verarbeitung identifiziert ein Registerbezeichner genau
den Wert, der in dem entsprechenden Register enthalten ist.
Dieser Wert eines Registers stellt auch den aktuellen
Maschinenzustand dar, und es kann auf ihn als auf den
beabsichtigten Registerwert Bezug genommen werden.
Um einen größeren Instruktionsdurchsatz zu erreichen und daher
eine höhere Leistung, wurden Prozessoren eingeführt, die die
Verarbeitung von mehreren unabhängigen Instruktionen pro
Taktzyklus ausgeben oder einleiten. Solche Prozessoren sind
als Superskalarprozessoren bekannt. Mehrere Instruktionen
können in einem einzigen Zyklus verarbeitet
werden, solange als es keine Datenabhängigkeiten,
prozeduralen Abhängigkeiten oder Betriebsmittelkonflikte
gibt. Wenn solche Abhängigkeiten oder Konflikte vorhanden
sind, kann nur die erste Instruktion in einer Folge
verarbeitet werden. Als Folge können in einer
Superskalararchitektur eine Anzahl von Funktionseinheiten
nicht voll genutzt werden.
Der nächste Schritt bei der Entwicklung von
Hochleistungsprozessoren ist in der Einführung einer
Verarbeitung außer der Reihe zu erblicken. Prozessoren für
die Verarbeitung außer der Reihe gehorchen nicht der
Instruktionsreihenfolge beim Ausführen eines Programms und
verarbeiten Instruktionen in einer anderen Reihenfolge als
der sequentiellen Reihenfolge.
Aber wenn eine Instruktion A Zieldaten erzeugt und die
genannten Zieldaten von einer Instruktion B als Quelldaten
benötigt werden, muß diese Datenabhängigkeit beachtet werden.
Wenn Instruktionen außer der Reihe ausgegeben werden, bricht
die Entsprechung zwischen Registern und Werten zusammen.
Einige Registerwerte, die einem logischen Register
entsprechen, können parallel vorhanden sein, da jeder
Schreibzugriff auf ein bestimmtes logisches Register eine
neue Instanz des genannten Registers schafft.
Die Werte verschiedener Registerinstanzen dürfen nicht
verwechselt werden. Daher müssen Registeranordnungen
vorgesehen werden, die eine Vielzahl von Werten pro logischem
Register festhalten und identifizieren können. Bevor
Instruktionen zu irgendeiner der Verarbeitungseinheiten
abgeschickt werden können, muß angegeben werden, welche
Instanzen der adressierten logischen Register zu benutzen
sind. Auf die Aufgabe der Identifizierung der aktuellen
Speicherzelle, die in einem bestimmten Augenblick ein
logisches Register darstellt, wird gewöhnlich Bezug genommen
als auf "Registerumbenennung".
Eine neue Instanz eines bestimmten logischen Registers wird
jedesmal geschaffen, wenn ein Schreibzugriff auf das genannte
logische Register vorkommt. Daher erzeugt jede Instruktion,
die irgendein Register modifiziert, eine neue physische
Instanz des genannten Registers, und jeder neuen Instanz muß
ein physisches Register in der Registeranordnung zugeordnet
werden.
Beim Zuordnen eines neuen physischen Registers jedesmal, wenn
ein logisches Register modifiziert wird, muß auch ein
Mechanismus vorhanden sein, die alten Registerinstanzen
loszuwerden. Andernfalls würde das System eine undefinierte
Menge von Registerinstanzen akkumulieren. Eine Instanz kann
zerstört werden, wenn ihr Wert ersetzt wird und es keine
ausstehenden Bezugnahmen auf den genannten Wert gibt.
Wenn Instruktionen in ihrer sequentiellen Reihenfolge
verarbeitet werden, existiert immer ein definierter "Zustand"
des Prozessors. Dieser definierte Zustand muß für ein
Programm, das unterbrochen wird, gespeichert werden, um die
Möglichkeit von "genauen Unterbrechungen" vorzusehen. Für den
Fall, daß eine Ausnahmebedingung vorkommt, muß der Prozessor
in der Lage sein, zu dem genannten definierten Zustand
zurückzukehren. Auch in dem Fall, daß eine Verzweigung falsch
vorhergesagt wurde und verschiedene Instruktionen, die der
Verzweigung folgten, spekulativ ausgeführt worden sind, muß
der Prozessor in der Lage sein, zu einem wohldefinierten,
nicht spekulativen Maschinenzustand zurückzukehren.
Die Frage erhebt sich, wie der genannte Zustand und die
entsprechenden, beabsichtigten Registerwerte in einem System
mit Verarbeitung außer der Reihe definiert werden. Selbst
wenn Instruktionen außer der Reihe verarbeitet werden, ist es
erwünscht, den beabsichtigten Zustand der Reihe nach
weiterzuschalten.
Ein Weg zum Definieren eines beabsichtigten Reihenfolge-
Zustandes ist der folgende: Wenn eine Instruktion vollendet
ist und alle vorausgehenden Instruktionen auch vollendet
sind, können die Ergebnisse der Instruktion als der
Reihenfolge-Zustand des entsprechenden Registers gespeichert
werden, und die Instruktion kann als "verabschiedet"
angesehen werden. Daher kann der beabsichtigte Zustand eines
Systems mit Verarbeitung außer der Reihe definiert werden
durch die zuletzt vollendete Instruktion der fortlaufenden
Folge vollendeter Instruktionen. Die entsprechenden,
beabsichtigten Registerwerte sind die Werte in dem
Augenblick, in dem die genannte Instruktion vollendet wurde.
Im Fall von Ausnahmebedingungen und im Fall von falsch
vorhergesagten Verzweigungen nimmt die Maschine die
Instruktionsverarbeitung an dem genannten, beabsichtigten
Zustand wieder auf.
Ein Konzept für sowohl die Fähigkeit, verschiedene
Registerinstanzen zu handhaben als auch für das fortlaufende
Weiterschalten des beabsichtigten Reihenfolge-Zustandes ist
die Benutzung eines Umordnungspuffers in Kombination mit
einer Registerdatei. Wenn eine Instruktion dekodiert wird,
wird ihr ein Eintrag an der Spitze des Umordnungspuffers
zugeordnet. Der genannte Umordnungspuffer ist implementiert
als ein Zuerst-hinein zuerst-heraus-Pufferspeicher, abgekürzt
als (FIFO = first-in-first-out). Wenn die Instruktion
vollendet ist, wird ihr Ergebniswert in den zugeordneten
Eintrag zurückgeschrieben. Wenn der Wert den Boden des
Puffers erreicht und keine Ausnahmebedingung aufgetreten ist,
wird er in die Registerdatei eingeschrieben. Wenn die
Instruktion nicht vollendet ist, wenn sie den Boden erreicht,
schaltet der Umordnungspuffer nicht weiter, bis die
Instruktion vollendet ist. Während die spekulativen Werte der
verschiedenen Registerinstanzen in dem Umordnungspuffer
enthalten sind, hält die Registerdatei die beabsichtigten
Registerwerte fest und definiert daher den Reihenfolge-
Zustand. In dem Fall, daß eine Ausnahmebedingung oder eine
Fehlvorhersage einer Verzweigung auftritt, wird der
Umordnungspuffer verworfen, und es wird auf den Reihenfolge-
Zustand zugegriffen.
Ein Nachteil dieser Lösung besteht darin, daß die
Registerwerte von den Einträgen des Umordnungspuffer in die
Registerdatei übertragen werden müssen. In dem Falle, daß
eine präzise Unterbrechung auftritt, wird auf die Werte der
genannten Registerdatei zugegriffen.
Es gibt eine Vielzahl verschiedener Lösungen, die eine
besondere Registerdatei für das Festhalten der beabsichtigten
Registerwerte benutzen. Die temporären Werte der
verschiedenen Registerinstanzen können entweder, wie
beschrieben, in dem Umordnungspuffer enthalten sein oder in
dem Instruktionsfenster selbst oder in einer gesonderten
temporären Registeranordnung. Alle diese Lösungen haben einen
Nachteil gemeinsam: Registerwerte müssen von einem temporären
Registerspeicher - unabhängig davon, wie der genannte
Speicher implementiert ist - zu einer Registeranordnung oder
einer Registerdatei übertragen werden, die die beabsichtigten
Reihenfolge-Registerwerte festhält.
In der internationalen Anmeldung WO 9322722 A1, "A system
and method for retiring instructions in a superscalar
microprocessor" von J. Wang, S. Garg und T. Deosaran wird ein
System und ein Verfahren angegeben, um sich sowohl den
beabsichtigten Zustand als auch die Umbenennungsinstanzen der
logischen Register eines Systems zur Verarbeitung außer der
Reihe genau zu merken. Gemäß dem offenbarten Verfahren werden
Ergebnisse von Instruktionen, die außer der Reihe ausgeführt
werden, zunächst in einem temporären Pufferspeicher
gespeichert, bis alle voraufgehenden Instruktionen ausgeführt
worden sind.
Sobald alle voraufgehenden Instruktionen ausgeführt worden
sind und ihre Ergebnisse der Reihe nach in einer
Registeranordnung gespeichert worden sind, können die
Ergebnisse der infragestehenden Instruktion in die
Registeranordnung eingeschrieben werden und die Instruktion
wird als erledigt angesehen. Um die Integrität der Daten der
Registeranordnung aufrechtzuerhalten, werden die Ergebnisse
von Instruktionen solange nicht in die Registeranordnung
eingeschrieben, bis die Ergebnisse aller voraufgehenden
Instruktionen eingeschrieben wurden. In dieser Weise wird der
Maschinenzustand in sequentieller Reihenfolge aktualisiert.
Die beschriebene Lösung umfaßt Mittel für das Zuordnen und
Einschreiben von Instruktionsergebnissen in einen temporären
Speicherplatz, für das Übertragen der Ergebnisse aus dem
temporären Speicher in die Registeranordnung, so daß die
Registeranordnung der Reihe nach aktualisiert wird, und für
das Zugreifen auf sowohl den temporären Speicher als auch die
Registeranordnung für nachfolgende Operationen.
Wieder erfolgt das Verabschieden der Registerwerte durch ihr
Übertragen zu einer Registeranordnung, die die "endgültigen
Registerwerte" festhält. Ein konstanter Datenverkehr zwischen
der genannten endgültigen Registeranordnung ist notwendig.
In dem Fall, daß der aktuelle Wert eines bestimmten logischen
Registers bestimmt werden muß, muß zuerst geprüft werden, ob
es eine Instanz in der genannten temporären Registerdatei
gibt. Falls es keine temporäre Instanz gibt, muß auf die
genannte endgültige Registeranordnung zugegriffen werden.
Dieser Datenzugriff in zwei Schritten erfordert sowohl Zeit
als auch zusätzliche Logik.
Die US 5,675,759 betrifft ein Verfahren und eine Vorrichtung
zur Verarbeitung von Instruktionen außer der sequentiellen
Reihenfolge eines Instruktionsstroms. Eine in einem
Mikroprozessor vorgesehene Register-Verwaltungs-Vorrichtung
soll die Benutzung von im Mikroprozessor vorgesehenen
physischen Registern koordinieren. Nach Erhalt einer
Instruktion extrahiert die Vorrichtung logische Quellregister
sowie logische Zielregister aus der Instruktion und weist dem
Zielregister eine korrespondierende physische Adresse zu.
Hierbei soll die Vorrichtung die frühere Beziehung zwischen
dem logischen Register und einem anderen physischen Register
speichern. Durch Speichern dieser früheren Beziehung soll der
Vorrichtung ermöglicht werden, auf eine bestimmte Instruktion
zurückzuschreiten, wenn eine Ausführungsausnahme auftritt.
Die Register-Verwaltungs-Vorrichtung 16 weist eine Register-
Dateieinheit 30, eine Register-Regenerierungs-Dateieinheit 32,
eine Freiliste-Einheit 34 sowie eine Kontrolleinheit 36 zur
Steuerung der Register-Verwaltungs-Vorrichtung 16 auf. Die
Register-Dateieinheit 30 soll die Komponente oder ein Satz von
Komponenten in der Vorrichtung 16 sein, die hauptsächlich
verantwortlich für das "mappen" bzw. Abbilden logischer
Register auf physische Register und für die Speicherung von
Daten ist. Die Register-Dateieinheit 30 weist eine Anzahl
verschiedener Komponenten auf, die ein ROM 40, einen
inhaltsadressierbaren Speicher (CAM) 42, ein Daten-RAM 44, ein
Adreßgültigkeits-RAM (AV-RAM 46) und bevorzugt eine Vielzahl
von Kontrollpunkt-RAMs 48 umfassen. Das ROM 40 speichert alle
Register-Adreß-Identifizierer für alle physischen Register im
Prozessor 10. Jeder der Adreß-Identifizierer soll auf einen
Eintrag in dem Daten-RAM 44 zeigen, in dem Daten zusammen mit
einem Daten-Gültigkeitsbit (DV-Bit) gespeichert sind, wobei
die in dem RAM 44 gespeicherten Daten zu dem physischen
Register-Identifizierer korrespondieren. Das CAM 42 in der
Register-Dateieinheit 30 soll zur Speicherung logischer
Registerwerte benutzt werden, die zu dem physischen Register-
Identifizierer korrespondieren. Zusammen sollen das ROM 40,
das CAM 42 und daß AV-RAM 46 einen Mechanismus zur schnellen
und einfachen Zuordnung eines physischen Registers zu einem
logischen Register ermöglichen.
Bei dem von der bekannten Verwaltungs-Vorrichtung benötigten
CAM handelt es sich um einen gegenüber einem herkömmlichen
Speicher, wie einem RAM, besonderen Speicher. Ein CAM (Content
Adressable Memory), d. h. inhaltsadressierbarer Speicher bzw.
Assoziativspeicher bezeichnet einen Speicher oder
Speicherbaustein, bei dem eine Information nicht über eine
Adresse, sondern über einen Abschnitt der Information selbst
adressiert wird, also einen Teil des Speicherinhalts. Der CAM
assoziiert dadurch weitere Daten mit dieser Teilinformation,
so daß unter Umständen mehrere Informationen adressiert
werden, die Adressierung also mehrdeutig sein kann. CAM-
Speicher sind gegenüber RAM-Arrays deutlich schwieriger
herzustellen und benötigen bei gleicher Speicherkapazität eine
deutlich größere Chipfläche wegen zusätzlich benötigter
Transistoren. Ein solcher Sonder-Speicher ist schon für sich
allein aufwendig und damit teuer. Soll ein solcher Speicher
sogar in einen Mikroprozessorchip implementiert werden, so
müßte hierzu die Architektur des Mikroprozessors und dessen
Herstellungsverfahren gegenüber bekannten Architekturen und
Verfahren in aufwendiger Weise angepaßt werden.
Demgegenüber besteht die Aufgabe der Erfindung insbesondere
darin, eine einfache Lösung für das Zuordnen einer
willkürlichen Anzahl von physischen Registern zu einem
bestimmten logischen Register anzugeben, während der
beabsichtigte Zustand des logischen Registers genau
festgehalten wird.
Die Aufgabe der Erfindung wird gelöst durch einen Prozessor nach
Anspruch 1 für eine Verarbeitung außer der Reihe und durch ein
Verfahren zum Zuordnen physischer Register nach Anspruch 6.
Eine Verbindungsliste wird eingeführt, die es erlaubt, ein
physisches Register, das eine bestimmte Instanz des
entsprechenden logischen Registers darstellt, mit dem physischen
Register zu verketten, das die nächste Instanz des gleichen
logischen Registers darstellt. Durch Hinzufügen und Entfernen
von Verbindungen in dieser Verbindungsliste ist es möglich, die
Zuordnung physischer Register zu logischen Registern dynamisch
zu verwalten.
Zu jedem Zeitpunkt ist nur die minimale Anzahl der physischen
Register einem bestimmten logischen Register zugeordnet.
Auf der anderen Seite können, wenn eine bestimmte
Instruktionsfolge eine große Anzahl spekulativer Instanzen für
ein bestimmtes logisches Register erfordert, diese zusätzlichen
Instanzen gemäß der Erfindung durch einfaches Hinzufügen der
entsprechenden Verbindungen zu der Verbindungsliste erstellt
werden.
Die Verbindungsliste selbst ist eine kleine Anordnung. Daher ist
der Umfang der zusätzlich erforderlichen Hardware gering.
Ein anderer Vorteil der Erfindung besteht darin, daß sowohl die
physischen Register, die spekulative Instanzen darstellen, als
auch die physischen Register, die Instanzen der Reihe nach
darstellen, zusammen verwaltet werden. Dies erfolgt mittels
einer Reihenfolge-Liste, die die physischen Register angibt, die
tatsächlich den beabsichtigten Zustand der Maschine darstellen.
Dieser beabsichtigte Zustand wird auch für die Wiederherstellung
benutzt, nachdem eine Ausnahmebedingung
aufgetreten ist.
Der Vorteil des gemeinsamen Verwaltens spekulativer Instanzen
und der Reihenfolge-Instanzen besteht darin, daß
Datenübertragungen zwischen verschiedenen Anordnungen nicht
mehr nötig sind. Dies spart eine Menge an Zeit.
Fig. 1 zeigt den allgemeinen Aufbau eines Systems zur
Verarbeitung außer der Reihe.
Fig. 2 gibt ein Programmbeispiel, das außer der Reihe
auszuführen ist. Um das zu tun, müssen die
adressierten logischen Register in physische
Register umbenannt werden.
Fig. 3 gibt eine genauere Ansicht eines Systems zur
Verarbeitung außer der Reihe.
Fig. 4 zeigt, wie die Reservierungsstation und der
Umordnungspuffer einander wechselseitig
beeinflussen, um den Vollendungsstatus korrekt zu
überwachen und genaue Unterbrechungen zu
ermöglichen.
Fig. 5 zeigt, wie Registerinstanzen in dem
Zuordnungsprozeß erstellt werden und wie sie in dem
Übergabeprozeß entfernt werden.
Fig. 6A zeigt eine Schaltungsimplementierung des Verfahrens
nach Fig. 5, die 4 Anordnungen umfaßt: eine
Zuordnungsliste, eine Reihenfolge-Liste, eine
Verbindungsliste und eine Frei-Liste.
Fig. 6B zeigt genauer, wie die Registerumbenennung und
Zuordnung gemäß der Erfindung durchgeführt wird.
Fig. 7A gibt ein Beispiel eines Registerstatus.
Fig. 7B-Fig. 7E zeigen die Inhalte der Reihenfolge-Liste, der
Zuordnungsliste, der Verbindungsliste und der Frei-
Liste für den in Fig. 7A angegebenen
Registerstatus.
Fig. 8A zeigt das Format eines Eintrags in die
Reservierungsstation.
Fig. 8B zeigt den Registerbezeichner für die Datenfelder
eines Eintrags der Reservierungsstation.
Fig. 9 zeigt den Aufbau einer Datei eines physischen
Registers.
In Fig. 1 ist der typische Aufbau eines Systems zur
Verarbeitung außer der Reihe dargestellt. Instruktionen
werden aus dem Instruktionsspeicher (100) abgerufen und der
Reihe nach in dem Instruktions-Cache (101)
zwischengespeichert. Als Nächstes werden die Instruktionen in
ein allgemeines, internes Instruktionsformat dekodiert (102).
Es gibt auch Lösungen, bei denen eine externe Instruktion in
eine Anzahl kleinerer interner Instruktionen aufgebrochen
wird, die dann außer der Reihe verarbeitet werden können. Die
Instruktions-Dekodiereinheit (102) ist auch verantwortlich
für die Auflösung der Abhängigkeit, was bedeutet, daß
wirkliche physische Speicherzellen den logischen Registern
zugeordnet werden müssen, die als Quellen und Ziele der
entsprechenden Instruktionen benutzt werden. Auf dieser Stufe
ist es unerläßlich, die verschiedenen Instanzen jedes
logischen Registers, die im Verlauf der Programmausführung
auftreten, genau zu verfolgen.
Die Vorhersage von Verzweigungen wird auch in der
Instruktions-Dekodierstufe durchgeführt.
Die Instruktionen werden dann zu der Reservierungsstation
(103) weitergeleitet. Für jede Instanz eines Zielregisters
einer Instruktion wird ein Eintrag in den Umordnungspuffer
(108) gemacht. Daher identifiziert der
Umordnungspufferspeicher in der Reihenfolge des Auftretens,
die die sequentielle Reihenfolge ist, alle die physischen
Register, die Instanzen logischer Register darstellen. In der
Reservierungsstation warten die Instruktionen, bis alle die
Quelldaten, die sie benötigen, berechnet worden sind. In dem
Fall, daß die Quelldaten, die durch eine bestimmte
Instruktion benötigt werden, bereits als Zieldaten einer
früheren Instruktion berechnet worden sind, sind diese
Zieldaten in der Registerdatei (107) enthalten und können von
dort erhalten werden. In dem Fall, daß die Quelldaten, die
von einer bestimmten Instruktion benötigt werden, noch nicht
ausgewertet worden sind, muß die Instruktion die Ergebnisse
überwachen, die sich aus den verschiedenen
Ausführungseinheiten ergeben.
In dem Fall, daß die gesamten Quelldaten einer bestimmten
Instruktion angekommen sind, kann die Instruktion selbst,
abhängig von ihrem Typ und abhängig von der Verfügbarkeit von
Ausführungseinheiten, zu einer der Ausführungseinheiten
abgeschickt werden. Im Fall einer Verzweigung muß die
Instruktion zu der Verzweigungseinheit (104) abgeschickt
werden, muß Ganzzahl-Arithmetik zu einer der Ganzzahl-
Einheiten (105) geschickt werden, und Instruktionen, die auf
den Speicher zugreifen, müssen zu einer der Lade-/
Speichereinheiten (106) geschickt werden. Daher wird jede
Instruktion durch die entsprechende Funktionseinheit
verarbeitet, und die Zieldaten der Instruktion können
berechnet werden. Im Falle eines Speicherzugriffs schreibt
die Lade-/Speichereinheit (106) entweder Daten über einen
Daten-Cache (109) in einen Datenspeicher (110) oder empfängt
Daten von ihm.
Der sogenannte "Übergabeprozeß" ist verantwortlich für das
Verabschieden von Instruktionen, was bedeutet, daß
Zielregisterwerte der genannten Instruktionen zu
beabsichtigten Registerwerten werden. Instruktionen werden
stets der Reihe nach übergeben. Daher definiert der
Verabschiedungszeiger zusammen mit den beabsichtigten
Registerwerten einen präzisen Zustand der Maschine. Dieser
Maschinenzustand ist nicht mehr irgendwelchen Änderungen
unterworfen. Er wird in sequentieller Reihenfolge
fortgeschaltet. Daher sind präzise Unterbrechungen möglich.
Wenn Instruktionen, die ein und dasselbe Register lesen oder
in es schreiben, ausgeführt werden, muß ihre sequentielle
Reihenfolge aufrechterhalten werden. Wenn man nicht
beabsichtigt, die Forderung nach sequentieller Ausführung zu
befolgen, müssen zuerst Datenabhängigkeiten zwischen
verschiedenen Instruktionen aufgelöst werden, die auf das
gleiche Betriebsmittel zugreifen. Dies erfolgt durch Zuweisen
verschiedener physischer Register zu verschiedenen Instanzen
eines Betriebsmittels, wie z. B. eines logischen Registers.
Dies wird "Registerumbenennung" genannt und ist eine der
wesentlichen Merkmale jedes Systems mit Verarbeitung außer
der Reihe.
Fig. 2 erläutert dies mittels eines Programmbeispiels. Das
Auftreten verschiedener Instanzen des Registers R3 ist in der
rechten Spalte der Fig. 2 angegeben.
In der Instruktion 200 werden die Inhalte der Register R2 und
R3 ODER-verknüpft; das Resultat wird in das Register R2
zurückgeschrieben. Hier wird das Register R3 (das einzige,
das wir ansehen) nur als ein Quellregister benutzt. Laßt uns
daher diese Instanz von R3.7 aufrufen, wie das in der rechten
Spalte angegeben ist.
Als Nächstes wird eine "bedingte Verzweigung" (201)
ausgeführt. Die Bedingung, welche bestimmt, ob die
Verzweigung vorzunehmen ist oder nicht, ist im Register M1
enthalten. Die Register R1 und R2 enthalten die Index- und
Basiswerte, welche zusammen mit der Verschiebung benutzt
werden, um die Sprungadresse zu berechnen. Falls die
Verzweigung vorzunehmen ist, fährt die Ausführung des
Programms an der Adresse fort, die durch R1, R2 und die
Verschiebung angegeben ist.
Die nächste Instruktion (202) ist eine Ladeoperation, die
Daten aus dem Speicher abruft. R4, R3 und die Verschiebung
werden für das Berechnen der entsprechenden Speicheradresse
benutzt. Der abgerufene Speicherinhalt ist im Register R3 zu
speichern. Daher wird R3 zuerst als ein Quelloperand (für die
Adreßberechnung) benutzt und dann als ein Ziel. Die als
Quelle benutzte Registerinstanz ist die gleiche wie die, die
in der Instruktion 200 benutzt wurde, die Instanz R3.7. Eine
andere Instanz von R3 muß dem Ziel der Instruktion 202
zugeordnet werden, da die Ladeoperation den Inhalt von R3
modifiziert. Falls die Instruktionen, die der Instruktion 202
folgen, R3 als eine Quelle benutzen, dürfen sie daher den
Wert der Instanz R3.7 wegen der genannten Modifikation nicht
länger enthalten. Aus diesem Grund muß eine neue physische
Instanz R3.8 des Registers R3 als Ziel der Lade-Operation 202
zugeordnet werden.
In 203 wird eine Additionsoperation ausgeführt. Die
Adreßarithmetik bestimmt unter Benutzung von R1, R2 und einer
Verschiebung eine Adresse, und der Inhalt der genannten
Adresse wird dem Inhalt von R3 hinzugefügt. Das Resultat wird
in R3 gespeichert. Daher wird R3 zuerst als eine Quelle
benutzt und dann als ein Ziel. Da R3 jüngst in der
Instruktion 202 modifiziert worden ist, muß der in der
Instruktion 203 benutzte Wert des Quellregisters gleich dem
Wert des Zielregisters der Instruktion 202 sein; es ist R3.8.
Für das Ziel der Instruktion 203 muß ein neues physisches
Register zugeordnet werden, und eine neue Registerinstanz
R3.9 wird dem Ziel der Instruktion 203 zugeordnet.
Die Speicheroperation 204 speichert den Inhalt von R1 in
einer Adresse, die durch R4, R3 und eine Verschiebung
bestimmt ist. R3 wird als ein Quelloperand bei der
Adreßarithmetik benutzt, die Instanz ist R3.9.
Als nächstes wird in 205 auf die durch R1, R2 und eine
Verschiebung bestimmte Adresse zugegriffen und ihr Inhalt
wird ODER-verknüpft mit dem Inhalt des Registers R3. Das
Resultat der genannten ODER-Operation wird im R3
zurückgespeichert. Die Instanz des Quellregisters für die
ODER-Operation ist R3.9 und R3.10 wird dem Ziel zugeordnet.
Die Instruktion 206 speichert den Inhalt von R3 an einer
Speicheradresse, die durch R3 (das sowohl als Index als auch
als Basis benutzt wird) und eine Verschiebung bestimmt ist.
Die Quellregisterinstanz, die hier benutzt wird, ist R3.10.
In 207 tritt ein Ladezugriff auf die Adresse (R4, R3,
Verschiebung) auf, wobei das Resultat der genannten
Ladeoperation in R3 gespeichert wird. R3 wird sowohl als eine
Quelle (für die Adreßarithmetik) als auch als ein Ziel
benutzt. Während R3.10 die Instanz des Quellregisters der
Instruktion ist, wird R3.11 als die neue Instanz des
Zielregisters zugeordnet.
Wenn man auf diese Programmfolge schaut, wird es
offensichtlich, daß in den unterschiedlichen Seqmenten 208-
212 des Instruktionsstromes verschiedene Instanzen von R3
benutzt werden. Die Instruktionen, die R3.10 als eine Quelle
benutzen (206, 207), können nur ausgeführt werden, nachdem
die Instanz R3.10 berechnet worden ist. Dies bedeutet, daß
die Instruktion 205 ausgeführt sein muß, bevor entweder die
Instruktion 206 oder 207 abgeschickt werden kann, aber es ist
von keiner Bedeutung, ob die Instruktion 206 oder die
Instruktion 207 zuerst abgeschickt wird.
Die Beschränkungen, die dem Ausführen von Instruktionen
außerhalb ihrer sequentiellen Reihenfolge auferlegt werden,
können wie folgt zusammengefaßt werden: Immer, wenn eine neue
Registerinstanz als das Ziel einer Instruktion auftaucht, muß
das Abschicken von Instruktionen, welche die genannte
Registerinstanz als ein Quellregister benutzen, aufgeschoben
werden, bis die genannte Registerinstanz berechnet worden
ist.
In Fig. 3 ist ein genaueres Blockschaltbild eines
Superscalar-Computersystems angegeben. Nachdruck wird auf die
Behandlung der verschiedenen Registerinstanzen gelegt. Wie in
Fig. 1 werden Instruktionen, die in einem
Instruktionsspeicher (300) enthalten sind, zuerst zu einem
Instruktions-Cache (301) übertragen. Als Nächstes werden die
Instruktionen der Reihe nach zu einer Vordekodiereinheit
(302) weitergeleitet, die die Instruktionen des externen
Instruktionsstromes in ein allgemeines Instruktionsformat
transformiert, das für eine Verarbeitung außer der Reihe
geeignet ist. In diesem Instruktionsformat gibt es
Datenfelder für den OP-Code für höchstens zwei Quellregister,
für zwei Register, die für die Adreßarithmetik benutzt werden
in dem Fall, daß die Instruktion auf den Speicher zugreifen
muß, und für höchstens zwei Zielregister.
Wenn man auf die linke Spalte der Fig. 2 sieht, wo eine
Instruktionsfolge dargestellt ist, die Teil eines externen
Instruktionsstromes sein könnte, wird es offensichtlich, daß
in dem externen Instruktionsstrom eine Instruktion nur auf
die logischen Register Bezug nimmt, die zu lesen oder zu
modifizieren sind. Das ganze Problem der verschiedenen
physischen Instanzen, die ein logisches Register im Lauf der
Instruktionsausführung haben kann, ist auf dieser Stufe noch
nicht gelöst. Solange die Instruktionen des externen
Instruktionsstromes der Reihe nach verarbeitet werden, ist es
sogar unnötig, sich über dieses Problem Gedanken zu machen.
Aber sobald Instruktionen außerhalb ihrer regulären
Reihenfolge ausgeführt werden, ist es nötig, sich die
verschiedenen physischen Instanzen ein und desselben
logischen Registers sorgfältig zu merken. Dies ist für das
logische Register R3 in der rechten Spalte der Fig. 2
dargestellt.
Das Problem wird gelöst durch Zuordnen eines physischen
Registers zu jeder Instanz eines logischen Registers. Dies
bedeutet, daß immer dann, wenn eine Instruktion ein
bestimmtes logisches Zielregister modifiziert und daher eine
neue Instanz des genannten logischen Registers erstellt, ein
neues physisches Register zugeordnet werden muß. Immer dann,
wenn diese Instanz des genannten logischen Registers als
Quelle durch eine andere Instruktion benutzt wird, muß das
gleiche physische Register benutzt werden. Da eine Vielzahl
von Instanzen eines logischen Registers vorhanden sein kann,
kann auch eine Vielzahl physischer Register, die dem
genannten logischen Register entsprechen, vorhanden sein.
Die Aufgabe des Analysierens, welches physische Register
einem logischen Register entspricht, das durch eine bestimmte
Instruktion benutzt wird, das Ersetzen des genannten
logischen Registers durch das geeignete physische Register
(Registerumbenennung) und das Zuordnen eines neuen physischen
Registers immer dann, wenn eine neue Instanz irgendeines
logischen Registers erstellt wird, (Registerzuordnung) wird
durch die "Registerumbenennungs- und Zuordnungseinheit" (304)
durchgeführt.
Immer dann, wenn ein neues physisches Register zugeteilt
wird, benachrichtigt die "Registerumbenennungs- und
Zuordnungseinheit" (304) auch den Umordnungspuffer (305). Der
Umordnungspuffer hält einen Eintrag für jedes physische Ziel
fest, das eine bestimmte Instanz eines bestimmten logischen
Registers identifiziert. Jeder Eintrag des Umordnungspuffers
enthält das physische Register, das logische Register, das es
darstellt, und den Vollendungsstatus des genannten physischen
Registers. Bei der Implementierung, die beschrieben wird,
können bis zu 32 Einträge im Umordnungspuffer zu einem
gegebenen Zeitpunkt vorhanden sein. Immer dann, wenn ein
neues physisches Register durch die "Registerumbenennungs-
und Zuordnungseinheit" (304) zugeordnet wird, wird ein neuer
Eintrag in dem Umordnungspuffer (305) vorgenommen. Da die
Instruktionen noch in der Reihenfolge der
Vordekodierungsstufe verarbeitet werden, werden die Einträge
im Umordnungspuffer auch in der sequentiellen Reihenfolge
vorgenommen, was bedeutet, daß ein Eintrag, der eine frühere
Instanz eines logischen Registers darstellt, immer einem
Eintrag vorangeht, der einer späteren Instanz desselben
logischen Registers entspricht.
Jeder Eintrag des Umordnungspuffers enthält auch den
Vollendungsstatus seines Zielregisters. Natürlich ist, wenn
der Eintrag vorgenommen wird, der Vollendungsstatus "nicht
vollendet". Sobald ein bestimmter Registerwert ausgewertet
wird, wird der Vollendungsstatus seines entsprechenden
Eintrags im Umordnungspuffer geändert in "vollendet". Der
Umordnungspuffer wird als ein Umlaufpuffer realisiert; er
kann bis zu 32 Einträge enthalten. Der Instruktionspuffer
(303) enthält jetzt zwei Instruktionen des externen
Instruktionsstromes in einem Format, das für die
Reservierungsstation geeignet ist. Die logischen Register
sind durch die geeigneten physischen Register durch die
"Registerumbenennungs- und Zuordnungseinheit" (304) ersetzt
worden, und immer, wenn ein neues physisches Register
zugeordnet werden musste, ist ein entsprechender Eintrag in
dem Umordnungspuffer (305) gemacht worden.
Die Instruktionen sind jetzt bereit, um zu der
Reservierungsstation (306) weitergeleitet zu werden. Die
Reservierungsstation ist als ein Umlaufpuffer mit bis zu 16
möglichen Einträgen implementiert.
In der Reservierungsstation (306) warten die Instruktionen
auf ihre Quelloperanden. Sobald alle Quelloperanden einer
Instruktion angekommen sind, signalisiert die Instruktion,
daß sie bereit ist, zu einer der Funktionseinheiten
abgeschickt zu werden. Instruktionen werden zu den
Funktionseinheiten außerhalb ihrer sequentiellen Reihenfolge
geschickt, was bedeutet, daß das Abschicken einer Instruktion
unabhängig davon ist, ob die vorhergehende oder nachfolgende
Instruktion bereits abgeschickt wurde. Instruktionen werden
zu einer der Funktionseinheiten abgeschickt abhängig von der
Art der Instruktion: Verzweigungen werden zu der
Verzweigungseinheit (307) weitergeleitet, Ganzzahlarithmetik
wird durch eine Ganzzahleinheit (308) durchgeführt, und alle
Instruktionen, die auf den Speicher zugreifen, werden zu der
Lade-/Speichereinheit (309) abgeschickt. Die Lade-
/Speichereinheit tauscht Daten mit dem Datenspeicher (312)
über einen Daten-Cache (311) aus.
Eine Kopie der Registerdatei (310) wird jeder
Funktionseinheit beigefügt. Wenn Änderungen an irgendeiner
dieser Registerdateien vorgenommen werden, werden die anderen
Registerdateien an verschiedenen Funktionseinheiten
aktualisiert. Jede Registerdatei (310) enthält die Werte all
der physischen Register, die bis dahin zugeordnet wurden.
Da jedes physische Register einer Instanz eines bestimmten
logischen Registers entspricht, hält die Registerdatei (310)
die Werte derjenigen Instanzen der logischen Register fest,
die bis dahin ausgewertet worden sind.
Es ist vorteilhaft, eine Kopie der Registerdatei in enger
Nachbarschaft zu jeder Funktionseinheit zu haben. Eine
Instruktion, die zu einer der Funktionseinheiten (307, 308,
309) weitergeleitet wurde, muß auf die Werte ihres
entsprechenden Quellregisters zugreifen. Diese Registerwerte
sind in der lokalen Kopie der Registerdatei (310) enthalten.
Sobald Resultatdaten erzeugt werden, werden diese
Resultatdaten in die lokale Registerdatei eingeschrieben. Da
die logischen Quell- und Zielregister einer Instruktion
bereits in der Vordekodierstufe (302) in physische Register
umbenannt wurden, kann eine Instruktion, die zu einer
Funktionseinheit weitergeleitet wird, direkt auf die
physischen Quell- und Zielregister der Registerdatei
zugreifen, da es nicht mehr nötig ist, logische in physische
Register zu übersetzen. Diese Übersetzung ist ein für allemal
an der Vordekodierungsstufe (302) durch die
"Registerumbenennungs- und Zuteilungseinheit" (304) erfolgt.
Durch Aufbewahren einer lokalen Kopie der Registerdatei in
jeder Funktionseinheit ist es möglich, die Zugriffszeit auf
die Registerinhalte weiter zu verringern.
Während des Übergabeprozesses werden die durch diese
Instruktionen erzeugten Zielregisterwerte zu beabsichtigten
Registerwerten. Daher definiert der Übergabe- oder
Verabschiedungsprozeß einen beabsichtigten Zustand der
Maschine. Dieser beabsichtigte Zustand schreitet in
sequentieller Reihenfolge von alten zu jüngeren Instruktionen
fort und transformiert dadurch die entsprechenden
provisorischen Instanzen der logischen Register in gültige,
beabsichtigte Registerwerte.
Um zu verstehen, wie der Übergabeprozeß arbeitet, ist es
notwendig, auf den Vollendungsstatus der verschiedenen
Zielregisterinstanzen zu blicken, die in dem Umordnungspuffer
(305) gespeichert sind. Der Übergabeprozeß beginnt das Suchen
nach der ältesten Instruktion, die noch nicht vollendet ist.
Der Verabschiedungszeiger (313) zeigt auf den Eintrag, der
der genannten Instruktion entspricht. Diese Instruktion kann
noch nicht verabschiedet werden, da ihre Resultate noch nicht
verfügbar sind. Aber alle die Instruktionen und alle die
entsprechenden Zielregister, die den Eintrag voraufgehen, der
durch den Verabschiedungszeiger definiert ist, können
übergeben werden. Die entsprechenden Instruktionen werden aus
der Reservierungsstation gelöscht, und die Zielregisterwerte
werden zu beabsichtigten Registerwerten. Daher ist der
beabsichtigte Zustand (314) durch die Zielregisterwerte
definiert, die dem Eintrag im Umordnungspuffer voraufgehen,
auf den der Verabschiedungszeiger (313) verweist.
Das Zusammenspiel zwischen der Reservierungsstation und dem
Umordnungspuffer wird klarer, wenn man die Fig. 4 betrachtet.
Die Reservierungsstation (400) kann bis zu 16 Instruktionen
unterbringen. Einer der Einträge (402) der
Reservierungsstation ist dargestellt. Er enthält den OP-Code
der Instruktion, Datenfelder für Quellregister, Zielregister
und für die Adreßberechnung. Jede Instruktion kann auf bis zu
zwei Zielregister zugreifen.
Für die Zielregister, die zu einer Instruktion gehören, wird
ein Eintrag in dem Umordnungspuffer (401) gemacht. Jedes neue
Zielregister entspricht einer neuen Instanz eines bestimmten
logischen Registers. Sowohl sein physisches Register als auch
sein logisches Register sind in dem entsprechenden Eintrag
(404, 411) des Umordnungspuffers identifiziert.
Die Verbindung zwischen dem Eintrag (402) der
Reservierungsstation und dem entsprechenden Eintrag (404) des
Umordnungspuffers, der die Informationen über das
Zielregister oder die Zielregister enthält, das oder die
durch die Instruktion benutzt wird (werden), wird durch den
Zeiger (403) des Umordnungspuffers hergestellt. Der Zeiger
des Umordnungspuffers ist Teil des Eintrags (402) der
Reservierungsstation.
In jedem Eintrag (404) des Umordnungspuffers ist weiter ein
Datenfeld (405) vorhanden, das den Vollendungsstatus des
Zielregisters (404) überwacht, der in dem Eintrag des UOP
enthalten ist. Anfänglich ist der Status eines Zielregisters
"nicht vollendet" (405).
Sobald alle die Quelldaten eines Eintrags der
Reservierungsstation verfügbar sind, kann eine Instruktion zu
einer der Ausführungseinheiten (408) abgeschickt werden. In
dem Beispiel der Fig. 4 wird die Instruktion (409) gerade
durch die Verarbeitungseinheit (408) verarbeitet, was
bedeutet, daß die Instruktion sich in irgendeiner Stufe der
Pipeline der Verarbeitungseinheit befindet. Zusammen mit der
Instruktion ist der Zeiger des UOP (410) zu der
Ausführungseinheit (408) weitergeleitet worden. Daher wird
die Verbindung zwischen der Instruktion (409) und ihrem
entsprechenden Eintrag in den Umordnungspuffer (411) sogar
während des Verlaufs der Instruktionsausführung
aufrechterhalten.
Sobald die Resultate der Instruktionsausführung verfügbar
sind, was gewöhnlich am Ende der Pipeline der
Ausführungseinheit der Fall ist, ändert sich der
Vollendungsstatus in dem UOP von "nicht vollendet" in
"vollendet". Daher enthält der Umordnungspuffer (401) die
Bezeichner der verschiedenen Instanzen der logischen Register
in ihrer sequentiellen Reihenfolge und enthält weiter
Informationen darüber, ob der Wert der genannten
Registerinstanzen bereits ausgewertet wurde oder nicht.
Die Reservierungsstation (400) wird als eine Umlauf-Anordnung
implementiert, wobei die Verwaltung mittels Zeigern erfolgt.
Immer, wenn eine Instruktion in ihrem korrekten Format von
dem Instruktionspuffer (303) zu der Reservierungsstation
(400) weiterzuleiten ist, wird die geeignete Eingabeposition
durch den Hinein-Zeiger (406) bestimmt. Falls die Instruktion
ein oder zwei Zielregister adressiert, muß auch ein Eintrag
in den Umordnungspuffer gemacht werden.
Der Umordnungspuffer (401) ist auch als ein Umlaufpuffer
implementiert. Es gibt einen Zuordnungszeiger (407), der als
der In-Zeiger des Umordnungspuffers dient. Er zeigt auf die
Position in dem Umordnungspuffer, an der der nächste Eintrag
zu machen ist.
Während der Zuordnungszeiger (407) nötig ist, um die Ziele
der neuen Instruktionen unterzubringen, ist der
Verabschiedungszeiger (412) für das Entfernen alter
Zielregisterwerte nötig.
- 1. Der Verabschiedungs-Zeiger (412) zeigt auf das älteste Zielregister, das noch nicht vollendet ist. Der Übergabeprozeß übergibt die Zielregister von Einträgen, die älter, d. h. eher an der Reihe sind als der Eintrag, auf den der Verabschiedungs-Zeiger zeigt. Dies bedeutet, daß die betreffenden Einträge freigegeben werden und daß die Zielregisterwerte die Werte der beabsichtigten Register werden, die den "offiziellen" Zustand der Maschine darstellen. Das Ausführen von Instruktionen außer der Reihe erzeugt eine Anzahl provisorischer Instanzen von logischen Registern, die noch Änderungen und Löschungen unterworfen sein können. Aber es gibt auch einen genauen, beabsichtigten Zustand (413), der ein definierter Punkt in dem sequentiellen Instruktionsstrom ist, wobei die beabsichtigten Registerwerte dem genannten Punkt in dem Instruktionsstrom entsprechen.
Im Folgenden wird ein Verfahren zum Zuordnen und Umbenennen
von Registern beschrieben, das es erlaubt, physische Register
eines Pools physischer Register flexibel einem logischen
Register zuzuordnen, um verschiedene Instanzen des genannten
logischen Registers darzustellen.
In Fig. 5 ist gezeigt, wie entsprechend dem vorgeschlagenen
Verfahren diese Zuordnungen erstellt und entfernt werden. In
dem gegebenen Beispiel gibt es acht logische Register
R0, R1, . . . R7, auf die häufig durch den Prozessor, dem sie
gehören, zugegriffen wird. Die Reihenfolge-Liste (500) setzt
jedes der logischen Register R0, . . . R7 zu dem physischen
Register in Beziehung, das tatsächlich den beabsichtigten
Zustand darstellt. In Fig. 5 ist diese Reihenfolge-Liste
(500) als eine Spalte von Kästen dargestellt, wobei die
physischen Register als eingekreiste Zahlen dargestellt sind.
Zum Beispiel steht das physische Register "7" (501) mit dem
logischen Register R0 in Verbindung. Es ist in dem Kasten 500
enthalten, der die Reihenfolge-Liste darstellt, was
impliziert, daß das physische Register "7" (501) den
beabsichtigten Zustand von R0 darstellt. Demgemäß ist das
physische Register "3" (506) Teil der Reihenfolge-Liste 500.
Es gibt einen Eintrag in der Reihenfolge-Liste 500, der das
logische Register R1 mit dem physischen Register "3" (506) in
Beziehung setzt, und daher stellt das physische Register
"3" den beabsichtigten Zustand von R1 dar. Es ist zu
beachten, daß in jedem Augenblick ein beabsichtigter Zustand
jedes Registers vorhanden sein muß. Zu jedem Zeitpunkt muß
zumindest ein physisches Register jedem logischen Register
zugeordnet sein.
Zu einem bestimmten Augenblick können mehr als eine Instanz
eines bestimmten logischen Registers vorhanden sein.
Natürlich muß jede Instanz durch ein verschiedenes physisches
Register dargestellt werden. Werfen wir einen Blick auf das
logische Register R0 in Fig. 5. Es sind drei Instanzen von R0
vorhanden und diese Instanzen werden durch die physischen
Register "7" (501), "4" (502) und "12" (504) dargestellt. Wie
das Register "7" in der Reihenfolge-Liste 500 zeigt, stellt
es den beabsichtigten Zustand dar. Die andern beiden Register
"4" (502) und "12" (504) enthalten Werte, die noch nicht
durch den Übergabeprozeß übergeben worden sind, und die noch
Änderungen unterworfen sein können. Zum Beispiel könnten in
dem Fall, daß eine Verzweigung falsch vorhergesagt wurde, die
entsprechenden Registerinstanzen noch zu löschen sein.
Die verschiedenen physischen Register, die Instanzen eines
bestimmten logischen Registers darstellen, werden durch
Verbindungselemente (503, 505) verkettet. Das physische
Register, das eine bestimmte Instanz darstellt, wird mit dem
physischen Register verbunden, das die vorhergehende Instanz
des gleichen logischen Registers darstellt. Zum Beispiel ist
das Register "4" (502) verbunden (503) mit dem Register "7"
(501), das die voraufgehende Instanz von R0 darstellt.
Entsprechend ist das Register "12" (504) verbunden (505) mit
dem Register "4" (502), da das Register "4" eine
voraufgehende Instanz von R0 darstellt.
Immer, wenn eine Instruktion einen Schreibzugriff auf ein
bestimmtes logisches Register durchführt, muß eine neue
Instanz des genannten logischen Registers zugeordnet werden.
Als ein Beispiel wird die "Addiere"-Instruktion (203) in
Fig. 2 betrachtet. Die genannte "Addiere"-Instruktion benutzt
die Instanz R3.8 des logischen Registers R3 als eine Quelle
und schreibt ihre Resultate in die Instanz 3.9 des
Zielregisters. An diesem Punkt des Instruktionsstromes muß
ein physisches Register zugeordnet werden, das weiterhin die
Instanz R3.9 darstellt.
Als ein Beispiel ist die Zuordnung einer neuen Instanz des
logischen Registers R5 in Fig. 5 gezeigt. Bevor die genannte
Zuordnung stattfindet, gibt es zwei Instanzen von R5,
dargestellt durch das physische Register "2" und das
physische Register "13" (507). Das Register "2" stellt den
beabsichtigten Zustand des R5 dar. Es muß ein drittes
physisches Register vorgesehen werden, und dieses Register
muß mit dem Register "13" (507) verbunden werden. Physische
Register, die zu einem bestimmten Zeitpunkt nicht benutzt
werden, sind in der Frei-Liste 509 enthalten. Von dort wird
das physische Register "6" (508) abgerufen (510). Als
Nächstes muß angezeigt werden, daß das Register "6" eine neue
Instanz von R5 darstellt. Dies erfolgt durch Errichten einer
Verbindung 511 vom Register "6" zum Register "13" (507).
Daneben wird das Register "6" (508) in der Frei-Liste 509
gelöscht.
Es ist die Aufgabe des Übergabeprozesses, den beabsichtigten
Zustand des Computersystems in der Reihenfolge der
Instruktionsfolge weiterzuschalten. Der beabsichtigte Zustand
eines bestimmten logischen Registers wird weitergeschaltet
durch Entfernen des physischen Registers, das bis jetzt den
beabsichtigten Zustand dargestellt hat, durch Entfernen der
Verbindung von dem nachfolgenden (nicht beabsichtigten)
physischen Register und durch Anzeigen, daß das nachfolgende
physische Register fortan den beabsichtigten Zustand
darstellt. Als ein Beispiel wird das logische Register R3 in
Fig. 5 betrachtet. Bisher wird der beabsichtigte Zustand von
R3 durch das physische Register "15" (512) dargestellt. Wenn
weitere Instruktionen entfernt werden und wenn der
beabsichtigte Zustand fortschreitet, wird das Register "15"
(512) freigesetzt (513). Ein Eintrag in die Frei-Liste 509
wird vorgenommen, um anzuzeigen, daß das Register "15" (514)
augenblicklich nicht benutzt wird. Die erste spekulative
Instanz des logischen Registers R3 ist durch das physische
Register "11" (515) dargestellt worden, die mit dem früher
beabsichtigten Zustand des Registers "15" verbunden (516)
war. Diese Verbindung 516 wird entfernt, und das Register
"11" (515) wird das Register, das den beabsichtigten Zustand
darstellt. Dies wird in der Reihenfolge-Liste 500 angezeigt,
in der das Register "15" durch das Register "11" ersetzt
wird. Die Verbindung 518, die das Register "8" (517) mit dem
Register "11" (515) verkettet, bleibt ungeändert.
In den Fig. 6A und 6B ist eine Schaltung angegeben, die
verschiedene Anordnungen umfaßt. Diese Schaltung ist eine
Implementierung des Verfahrens für das Zuordnen und
Umbenennen von Registern, das in Fig. 5 veranschaulicht ist.
Die Reihenfolge-Liste 601 umfaßt acht Einträge und setzt
jedes der logischen Register R0, . . . R7 mit dem physischen
Register in Beziehung, das den beabsichtigten Zustand
darstellt. Die Anordnung 601 ist daher die
Schaltungsimplementierung des "Kastens" 500 in Fig. 5.
Neben der Reihenfolge-Liste 601 ist eine zweite Anordnung,
die Zuordnungsliste 600 vorgesehen, die auch jedes der
logischen Register R0, . . . R7 zu einem physischen Register in
Beziehung setzt. Die Zuordnungsliste enthält auch acht
Einträge. Jeder Eintrag gibt das physische Register an, das
die jüngst zugeordnete Instanz des entsprechenden logischen
Registers darstellt.
Verbindungen setzen ein physisches Register, das eine
bestimmte Instanz eines logischen Registers darstellt, zu dem
physischen Register in Beziehung, das die vorhergehende
Instanz des gleichen logischen Registers darstellt. Die
verschiedenen Verbindungen (z. B. die Verbindungen 503, 505,
518 in Fig. 5) sind in der Verbindungsliste 602 enthalten.
Die Verbindungsliste wird als eine Anordnung implementiert,
die 16 Einträge aufweist, wobei jeder Eintrag ein erstes
physisches Register zu einem zweiten physischen Register in
Beziehung setzt, wodurch beide physischen Register das
gleiche logische Register darstellen, und wodurch das
genannte erste physische Register früher zugeordnet wurde.
Alle physischen Register, die nicht benutzt werden, sind in
der Frei-Liste 603 enthalten, die die Implementierung der
Anordnung der Frei-Liste 509 in Fig. 5 ist. Die Frei-Liste
603 umfaßt acht Eintragspositionen, und daher kann sie bis zu
acht physische Register zu einem Zeitpunkt enthalten. Dies
ist trotzdem ausreichend, weil zu jedem Zeitpunkt zumindest
ein physisches Register jedem der acht logischen Register
zugeordnet werden muß (um den beabsichtigten Zustand
darzustellen). Da es 16 physische Register gibt, wobei acht
der genannten 16 Register für das Darstellen des
beabsichtigten Zustandes notwendig sind, gibt es nie mehr als
acht unbenutzte Register.
Als Nächstes wird erörtert, wie die Registerzuteilung und
Umbenennung tatsächlich stattfindet. Wir nehmen an, daß eine
Instruktion sich in der Stufe (604) des Dispatchers 1
befindet. Die logischen Quellregister der Instruktion, die
logischen Zielregister und der OP-Code der Instruktion sind
angegeben.
Die logischen Quell- und Zielregister müssen in physische
Register übersetzt werden, da es die physischen Register
sind, auf die tatsächlich zugegriffen wird. Zu diesem Zweck
werden sowohl die logischen Quellregister als auch die
logischen Zielregister zu der Zuordnungsliste 600
weitergeleitet (605, 606). Die Zuordnungsliste setzt jedes
der logischen Register R0, . . . R7 zu dem physischen Register in
Beziehung, das die jüngst zugeordnete Instanz darstellt. Das
logische Quellregister wird zu dem genannten jüngst
zugeordneten physischen Register umbenannt (die
augenblickliche Instanz des genannten logischen
Quellregisters) durch Zugreifen auf den entsprechenden
Eintrag in der Zuordnungsliste 600 und durch Auslesen seines
Inhalts, der der Bezeichner des physischen Registers ist.
Dies ist auch in Fig. 6B dargestellt. Die Aufgabe des
Umbenennens des logischen Quellregisters zu einem physischen
Quellregister wird durchgeführt durch Weiterleiten (605) des
logischen Quellregisters zu der Zuordnungsliste (600) durch
Ausführen eines Lesezugriffs auf den entsprechenden Eintrag
607 der Anordnung und durch Liefern (609) des Bezeichners des
umbenannten physischen Quellregisters.
Für jedes der logischen Zielregister, die durch eine
Instruktion bestimmt werden, muß ein neues physisches
Register zugeordnet werden, das eine neue Instanz des
genannten logischen Zielregisters darstellt. Für diesen Zweck
muß ein "freies" physisches Register benutzt werden. Diese
"freien" Register sind in der Frei-Liste (603) enthalten, und
von dort werden sie zu dem "Puffer für Register der Frei-
Liste" 612 weitergeleitet (611). Die Aufgabe des Zuordnens
eines neuen physischen Registers für ein logisches
Zielregister wird durchgeführt durch Auslesen des Bezeichners
eines physischen Registers aus dem genannten "Puffer für
Register aus der Frei-Liste" 612. Diese physischen
Zielregister werden dann als zugeordnete physische
Zielregister bereitgestellt (613). Der "Puffer für Register
aus der Frei-Liste" 612 wird dann wieder aufgefüllt mit neuen
"freien"-Registern aus der Frei-Liste 603 (611).
Zusätzlich wird für jedes logische Zielregister ein
Lesezugriff auf den Eintrag der Zuordnungsliste, der dem
genannten logischen Zielregister (608 in Fig. 6B) entspricht,
durchgeführt. Das Resultat dieses Lesezugriffs ist das
voraufgehende physische Zielregister, das physische Register,
das - bis jetzt - die jüngste Instanz des logischen
Zielregisters dargestellt hat. Dieses voraufgehende physische
Zielregister wird für das Erstellen der korrekten Verbindung
in der Verbindungsliste 602 benutzt (610).
Sobald der Lesezugriff auf den Eintrag der Zuordnungsliste
vollendet ist, der dem logischen Ziel entspricht, muß dieser
Eintrag aktualisiert werden. Ein neues physisches
Zielregister ist zugeordnet worden (613), und das physische
Ziel, das in dem Eintrag enthalten ist, stellt nicht länger
die jüngste Instanz dar. Stattdessen stellt das unlängst
zugeordnete physische Zielregister die neueste Instanz des
logischen Zielregisters dar.
Daher ist eine Korrektur notwendig. Der Bezeichner des
unlängst zugeordneten physischen Registers muß weitergeleitet
werden (614) von dem "Puffer für Register aus der Frei-Liste"
(612) zu der Zuordnungsliste 600. Dort wird der Bezeichner
des unlängst zugeordneten physischen Registers in den Eintrag
615 geschrieben, der dem logischen Zielregister entspricht,
da das unlängst zugeordnete physische Register jetzt die
jüngste Instanz des logischen Zieles darstellt. Beginnend mit
dem nächsten Taktzyklus kann auf das unlängst zugeordnete
physische Register als auf ein physisches Quellregister in
dem Umbenennungsprozeß (616) zugegriffen werden.
Wenn man auf die Fig. 5 zurückblickt, entspricht der Prozeß
des Zuordnens eines neuen physischen Registers, das eine neue
Instanz eines bestimmten logischen Registers darstellen soll,
dem Schritt 510. Bisher hat das physische Register "13" (507)
die jüngste Instanz von R5 dargestellt, und daher ist in der
Zuordnungsliste "13" in dem Eintrag für R5 enthalten. Sobald
eine neue Instruktion R5 als logisches Zielregister benutzt,
kann die Instruktion den Inhalt von R5 modifizieren. Daher
muß ein neues physisches Register (Register "6" in Fig. 5),
das die neue Instanz von R5 darstellt, zugeordnet werden.
Dieses neue physische Register wird von der Frei-Liste 509
geliefert.
Wenn das physische Register "6" (508) mit dem physischen
Register "13" verkettet wird (511), muß dies in der
Zuordnungsliste (600) auch angezeigt werden: Register "13"
stellt nicht länger die jüngste Instanz von R5 dar, sondern
stattdessen stellt Register "6" die jüngste Instanz von R5
dar. Der Eintrag in der Zuordnungsliste, der R5 zu "13" in
Beziehung gesetzt hat, muß geändert werden, er setzt künftig
R5 zu dem Register "6" in Beziehung. In nachfolgenden Zyklen
wird, wenn immer das logische Register R5 als ein
Quellregister auftritt, es umbenannt zum physischen Register
"6".
Im Folgenden wird diskutiert, wie die Verbindungen, die
physische Register verketten, die zu einem bestimmten
logischen Register gehören, mittels der Verbindungsliste 602
verwaltet werden. Eine "Verbindung", z. B. die Verbindung 511
in Fig. 5, verbindet ein physisches Register, das eine
Instanz eines bestimmten logischen Registers darstellt, mit
dem physischen Register, das die vorhergehende Instanz des
gleichen logischen Registers darstellt. Zum Beispiel
verbindet die Verbindung 511 das Register "6" mit dem
Register "13". Immer, wenn eine Verbindung hergestellt oder
entfernt wird, wird ein entsprechender Eintrag in die
Verbindungsliste 602 vorgenommen oder daraus entfernt. In
jedem Zeitpunkt werden alle die Verbindungen durch
entsprechende Einträge in der Verbindungsliste 602
dargestellt. Eine Verbindung kann bei irgendeinem der
vorhandenen physischen Register beginnen, und sie kann das
genannte physische Register mit irgend einem anderen
physischen Register verbinden.
Die Verbindungsliste ist entsprechend den physischen
Registern aufgebaut, von denen aus die Verbindung beginnt.
Zum Beispiel hätte man, um die Verbindung 511 unterzubringen,
"13" in die Eintragsposition "6" zu schreiben.
Beim Betrachten der Fig. 6A wird es offensichtlich, wie die
Verbindungsliste immer dann, wenn eine neue Verbindung
errichtet wird, aktualisiert wird. Zu diesem Zweck wird das
unlängst zugeordnete physische Zielregister 613 zum
Adressieren der Position eines Eintrags in der
Verbindungsliste 602 benutzt. In unserem Beispiel der
Verbindung 511 würde der Verbindungszeiger 613 auf die
Position des Eintrags "6" zeigen. In diese Position des
Eintrags wird das voraufgehende physische Zielregister "13"
eingeschrieben (610). Daher wird die Verbindung zwischen der
jüngeren Instanz, die für das Adressieren der Einträge der
Verbindungsliste benutzt wird, und der älteren Instanz, die
in den genannten Eintrag eingeschrieben wird, erstellt.
Für jede Instruktion wird ein Eintrag in der
Reservierungsstation 617 vorgenommen. In diesem Eintrag sind
die Quell- und Zieloperanden der Instruktion durch die
physischen Register angegeben, die ihnen zugeordnet sind,
welches die umbenannten physischen Quellregister (609) und
die zugeordneten physischen Zielregister (613) sind. Die
Datei 622 der physischen Register, die Teil jeder der
Verarbeitungseinheiten 621 ist, hält die augenblicklichen
Werte all der physischen Register fest. In der
Reservierungsstation 617 wird aufgezeichnet, welche der
physischen Register bis jetzt ausgewertet wurden. Die
entsprechenden umbenannten Quellregister werden als "gültig"
angegeben. Sobald alle die umbenannten Quellregister einer
Instruktion als "gültig" angegeben sind, kann die Instruktion
an die Ausführungseinheit 621 ausgegeben werden (620), wo sie
ausgeführt wird. Ein Zugriff mit geringer Wartezeit auf die
Inhalte der Datei 622 der physischen Register wird durch
Aufbewahren einer Kopie der genannten Registerdatei in enger
Nachbarschaft zu jeder Ausführungseinheit garantiert.
Für jeden Zieloperanden einer Instruktion an der Stufe (604)
des Dispatchers 1 wird ein Eintrag in den Umordnungspuffer
618 vorgenommen (619). Der Eintrag wird an der Position des
UOP gemacht, auf die der Zuordnungszeiger hinweist. Der
Aufbau der UOP-Einträge (624), die Aufrechterhaltung der
Verbindung zwischen dem UOP-Eintrag und dem entsprechenden
Eintrag in der Reservierungsstation mittels eines UOP-Zeigers
623 und die Art und Weise, in der der Vollendungszustand
jedes der Zielregister aktualisiert wird, ist bereits bei der
Fig. 4 diskutiert worden. Der Verabschiedungs-Zeiger 625
zeigt auf den ersten UOP-Eintrag, der noch nicht übergeben
wurde. Der Vollendungsstatus dieses Zielregisters ist "nicht
vollendet". Sobald die entsprechende Instruktion ausgeführt
wurde und ihre Resultate verfügbar sind, ändert sich der
Vollendungsstatus des genannten UOP-Eintrages in "vollendet".
Der Verabschiedungs-Zeiger 625 verweist auf einen anderen
Eintrag, und das entsprechende physische Register kann
übergeben werden.
In Fig. 5 ist dargestellt, wie das physische Register "11"
(515) übergeben wird, was bedeutet, daß das physische
Register "11" als der beabsichtigte Wert von R3 angegeben
wird. Das physische Register "15", das bis jetzt den
beabsichtigten Zustand dargestellt hat, wird gelöscht. Das
Register "15" wird von der Reihenfolge-Liste 500 entfernt, es
wird auf die Frei-Liste 509 gesetzt. Dies impliziert, daß
zwei Anordnungen, die Reihenfolge-Liste 601 und die Frei-
Liste 603, aktualisiert werden müssen.
Zu diesem Zweck wird das physische Register, das zu übergeben
ist (in Fig. 5 wäre dies das Register 11), sowohl zu der
Reihenfolge-Liste 601 als auch der Verbindungsliste 602
weitergeleitet (626). In der Reihenfolge-Liste wird auf den
Eintrag des entsprechenden logischen Registers zugegriffen,
und das physische "Übergabe"-Register wird in den Eintrag
geschrieben (626). In der Verbindungsliste sind die
Verbindungen gemäß ihrem Startregister geordnet. Wenn die
Verbindungsliste mit dem physischen "Übergabe"-Register 626
adressiert wird, wird die Verbindung, die das "Übergabe"-
Register mit einer früheren Registerinstanz verbindet,
ausgewählt.
Ein Beispiel macht das klar: Wenn das Register "11" aus Fig.
5 für das Adressieren (626) der Verbindungsliste 602 benutzt
wird, wird die Verbindung 516 gefunden, die das Register "11"
mit dem Register "15" verbindet. Das Register "15" stellt
eine Instanz von R3 dar, die gelöscht werden sollte. Dies
erfolgt durch Weiterleiten (627) des Registers, das zu
löschen ist (Register "15" im Fall der Verbindung 516), zu
der Frei-Liste 603.
Die Frei-Liste wird implementiert als eine Umlaufanordnung.
Die Folge der "freien" Register erstreckt sich von dem
"letzten Hinein-Zeiger" (629) zu dem "nächsten Heraus-Zeiger"
(630). Immer, wenn eine Verbindung aus der Verbindungsliste
entfernt wird und ein physisches Register freigesetzt wird,
muß das genannte Register in der Frei-Liste untergebracht
werden. Es wird in die Position der Anordnung eingeschrieben,
die derjenigen benachbart ist, auf die der "letzte Hinein-
Zeiger" 629 verweist. Immer, wenn unbenutzte Register für den
Registerzuteilungsprozeß vorgesehen werden müssen (611),
werden sie aus der Position der Anordnung ausgelesen, auf die
der "nächste Heraus-Zeiger" 630 verweist. Der genannte Zeiger
630 wird dann um eine Position der Anordnung verschoben. Die
Verwaltung sowohl der Zeiger 629 als auch 630 erfolgt durch
die "Steuerung der Frei-Liste" (628).
Fig. 7A zeigt den Zustand der Register der Fig. 5, nachdem
das Register "15" (512), das eine Instanz von R3 darstellt,
entfernt wurde und nachdem das Register "6", das eine Instanz
von R5 darstellt, hinzugefügt wurde. Wieder sind Verbindungen
als Pfeile angegeben, die von der jüngeren Instanz zu der
älteren zeigen. Die physischen Register, die in der Box
enthalten sind, stellen den beabsichtigten Zustand der
Maschine dar, und daher zeigen ihre Bezeichner in der
Reihenfolge-Liste, die in Fig. 7B angegeben ist, nach oben.
In der Reihenfolge-Liste ist jedes logische Register R0, . . . R7
einem physischen Register zugeordnet, das den beabsichtigten
Zustand darstellt.
In Fig. 7A ist das physische Register, das die jüngst
zugeordnete Instanz eines logischen Registers darstellt, mit
einem Kreis angegeben. Zum Beispiel ist die jüngst
zugeordnete Instanz des logischen Registers R0 dargestellt
durch das physische Register "12". In der Zuordnungsliste in
Fig. 7C steht jedes logische Register R0, . . . R7 mit dem jüngst
zugeordneten physischen Register in Beziehung, das das
betreffende "eingekreiste" Register ist. In einigen Fällen,
wie für die logischen Register R1, R2, R4, R6 und R7 stellt
das jüngst zugeordnete physische Register auch den
beabsichtigten Zustand dar. In anderen Fällen, wie für die
logischen Register R0, R3 und R5, stellt die jüngst
zugeordnete Instanz nicht den beabsichtigten Zustand dar.
Fig. 7D bildet die Verbindungsliste ab, die dem in Fig. 7A
angegebenen Registerstatus entspricht. Es gibt fünf
Verbindungen, wobei jede Verbindung eine jüngere Instanz zu
einer früheren Instanz eines bestimmten logischen Registers
in Beziehung setzt. Die Verbindung von "4" zu "7" ist an der
Adresse "4" der Verbindungsliste gespeichert durch Speichern
des Inhaltes "7" in die Anordnungsposition "4". Demgemäß ist
"13" an der Position "6" gespeichert worden, "11" ist in "8"
gespeichert worden usw. Bei dem gegebenen Beispiel gibt es
acht logische Register, aber 16 physische Register. Da eine
Verbindung bei irgendeinem der physischen Register beginnen
könnte, müssen 16 Eintragspositionen der Verbindungslisten
vorgesehen werden. Daher reichen die Adressen in Fig. 7D von
0 bis 15.
Außer den 8 physischen Registern, die den beabsichtigten
Zustand der logischen Register R0-R7 darstellen, werden
tatsächlich 5 weitere physische Register zugeordnet und
stellen spekulative Instanzen dar. Daher sind 13 von den 16
physischen Registern augenblicklich in Benutzung und nur 3
physische Register, die Register "14", "1" und "15", sind
nicht in Benutzung. Diese 3 Register bilden den Inhalt der
Frei-Liste, die in Fig. 7E dargestellt ist. Die Frei-Liste
kann bis zu 8 Einträge festhalten.
In Fig. 8A ist das Format eines Eintrags in der
Reservierungsstation dargestellt. Jede Instruktion des
externen Instruktionsstromes wird in dieses Format in der
Vordekodierstufe (302) umgewandelt.
Bei jedem Eintrag der Reservierungsstation gibt es ein
Datenfeld für den OP-Code (800) der Instruktion. Weiterhin
gibt es 4 Felder (801, 802 803, 804) von Quelldaten, die die
physischen Quellregister der Instruktion angeben. Zwei der
genannten Felder für Quelldaten, S0 (801) und S1 (802), geben
direkt die Operanden der Instruktion an. Die Datenfelder A0
(803) und A1 (804) geben die physischen Quellregister an, die
für die Adreßarithmetik benutzt werden (als "Index" und
"Basis"). Für jedes dieser Quelldatenfelder gibt ein
Gültigkeitsbit (808) an, ob der Inhalt des entsprechenden
physischen Registers verfügbar ist oder nicht.
Daten, die während der Ausführung der Instruktion erzeugt
werden, werden in die Zielregister der Instruktion
eingeschrieben. Die Datenfelder T0 (805) und T1 (806) geben
die physischen Register an, in die die Resultate zu schreiben
sind. Wie in Fig. 4 beschrieben wurde, ist weiter ein Zeiger
(807) des Umordnungspuffers in jedem Eintrag der
Reservierungsstation vorhanden, der die Verbindung mit dem
entsprechenden Eintrag im Umordnungspuffer herstellt.
Es ist bereits darauf hingewiesen worden, daß für das
Zugreifen auf die Inhalte der physischen Register, die in
einer physischen Registerdatei enthalten sind, es nur nötig
ist, die Nummer des physischen Registers zu kennen. Wie aus
der Fig. 8B zu ersehen ist, umfassen die Bezeichner für S0,
S1, A0, A1, T0 und T1 nur die Nummern der physischen
Register. Bezeichner für logische Register werden für das
Zugreifen auf die aktuellen Daten, die in der Datei der
physischen Register enthalten sind, nicht benötigt.
In Fig. 9 ist die Datei der physischen Register dargestellt,
die Datenfelder umfaßt für das Festhalten der Inhalte von 16
physischen Registern. Auf jedes physische Register kann durch
seine Nummer zugegriffen werden. Um einen schnellen Zugriff
auf die Daten zu ermöglichen, wird eine Kopie dieser Datei
(622) der physischen Register an jeder der
Ausführungseinheiten 621 aufrechterhalten.
Claims (10)
1. Prozessor mit der Möglichkeit, Instruktionen außerhalb
der sequentiellen Reihenfolge des Instruktionsstromes zu
verarbeiten, wobei die genannten Instruktionen logische
Register adressieren und der Prozessor umfaßt:
physische Register (1, . . ., 12) zum Speichern/Festhalten von Instanzen der logischen Register (R0, . . ., R7),
eine Reihenfolgeliste (500) für das Inbeziehungsetzen jedes logischen Registers zu dem physischen Register, das den beabsichtigten Zustand des Systems zur Verarbeitung außer der Reihe darstellt,
eine Verbindungsliste (602) zum Inbeziehungsetzen eines physischen Registers, das eine Instanz eines logischen Registers darstellt, zu dem physischen Register, das die vorhergehende/frühere Instanz des gleichen logischen Registers darstellt, um eine Verkettung der physischen Register gemäß der Reihenfolge der entsprechenden Instanzen des logischen Registers in der Instruktionsfolge vorzusehen,
gekennzeichnet durch
eine Zuordnungsliste (600) zum Inbeziehungsetzen jedes logischen Registers zu dem physischen Register, das die jüngste Instanz des genannten logischen Registers darstellt, wobei
die Zuordnungsliste (600) Einträge (Fig. 7C) aufweist und jeder Eintrag einem logischen Register (R0, . . ., R7) entspricht, und daß das Resultat eines Lesezugriffs auf einen Eintrag das Auslesen des dem logischen Register (R0, . . ., R7) zugeordneten physischen Registers (1, . . ., 12) ist.
physische Register (1, . . ., 12) zum Speichern/Festhalten von Instanzen der logischen Register (R0, . . ., R7),
eine Reihenfolgeliste (500) für das Inbeziehungsetzen jedes logischen Registers zu dem physischen Register, das den beabsichtigten Zustand des Systems zur Verarbeitung außer der Reihe darstellt,
eine Verbindungsliste (602) zum Inbeziehungsetzen eines physischen Registers, das eine Instanz eines logischen Registers darstellt, zu dem physischen Register, das die vorhergehende/frühere Instanz des gleichen logischen Registers darstellt, um eine Verkettung der physischen Register gemäß der Reihenfolge der entsprechenden Instanzen des logischen Registers in der Instruktionsfolge vorzusehen,
gekennzeichnet durch
eine Zuordnungsliste (600) zum Inbeziehungsetzen jedes logischen Registers zu dem physischen Register, das die jüngste Instanz des genannten logischen Registers darstellt, wobei
die Zuordnungsliste (600) Einträge (Fig. 7C) aufweist und jeder Eintrag einem logischen Register (R0, . . ., R7) entspricht, und daß das Resultat eines Lesezugriffs auf einen Eintrag das Auslesen des dem logischen Register (R0, . . ., R7) zugeordneten physischen Registers (1, . . ., 12) ist.
2. Prozessor gemäß Anspruch 1,
dadurch gekennzeichnet, daß der Bezeichner des unlängst
zugeordneten physischen Registers in den Eintrag (615)
der Zuordnungsliste (600) geschrieben ist, der dem
betreffenden logischen Zielregister entspricht.
3. Prozessor gemäß Anspruch 1, gekennzeichnet durch
Mittel zur Behandlung von Ausnahmebedingungen, die die
Inhalte des genannten Mittels der Reihenfolgeliste (601)
zu dem genannten Mittel der Zuordnungsliste (600) im
Falle einer Ausnahmebedingung kopieren.
4. Prozessor gemäß Anspruch 1, gekennzeichnet durch
eine Frei-Liste (603) zum Festhalten physischer Register,
die zeitweilig keine Instanz irgendeines logischen
Registers darstellen.
5. Prozessor gemäß Anspruch 1, gekennzeichnet durch
Kopien der physischen Register, die jedem der
Funktionseinheiten des Systems zur Verarbeitung außer der
Reihe zugeordnet sind.
6. Verfahren zum Zuordnen physischer Register in einem
Prozessor, der Instruktionen außerhalb der sequentiellen
Reihenfolge des Instruktionsstromes verarbeiten kann und
der umfaßt:
physische Register (1, . . ., 12) zum Speichern/Festhalten von Instanzen der logischen Register (R0, . . ., R7),
gekennzeichnet durch
eine Zuordnungsliste (600) zum Inbeziehungsetzen jedes logischen Registers zu dem physischen Register, das die jüngste Instanz des genannten logischen Registers darstellt, wobei
die Zuordnungsliste (600) Einträge (Fig. 7C) aufweist und jeder Eintrag einem logischen Register (R0, . . ., R7) entspricht, und daß das Resultat eines Lesezugriffs auf einen Eintrag das Auslesen des dem logischen Register (R0, . . ., R7) zugeordneten physischen Registers (1, . . ., 12) ist,
eine Verbindungsliste (602) zum Inbeziehungsetzen eines physischen Registers, das eine Instanz eines logischen Registers darstellt, zu dem physischen Register, das die frühere Instanz des gleichen logischen Registers darstellt, um für eine Verkettung der physischen Register gemäß der Reihenfolge der entsprechenden Instanzen des logischen Registers in der Instruktionsfolge zu sorgen,
umfassend die Schritte des
Abrufens eines neuen physischen Registers (Fig. 5), das künftig eine neue Instanz eines bestimmten logischen Registers darstellt,
Aktualisierens der Zuordnungsliste (Fig. 6B) so, daß das genannte logische Register zu dem neuen physischen Register in Beziehung gesetzt wird, und
Hinzufügens der Verbindung zwischen dem neuen physischen Register und dem physischen Register, das die frühere Instanz des genannten logischen Registers darstellt, zu der Verbindungsliste.
physische Register (1, . . ., 12) zum Speichern/Festhalten von Instanzen der logischen Register (R0, . . ., R7),
gekennzeichnet durch
eine Zuordnungsliste (600) zum Inbeziehungsetzen jedes logischen Registers zu dem physischen Register, das die jüngste Instanz des genannten logischen Registers darstellt, wobei
die Zuordnungsliste (600) Einträge (Fig. 7C) aufweist und jeder Eintrag einem logischen Register (R0, . . ., R7) entspricht, und daß das Resultat eines Lesezugriffs auf einen Eintrag das Auslesen des dem logischen Register (R0, . . ., R7) zugeordneten physischen Registers (1, . . ., 12) ist,
eine Verbindungsliste (602) zum Inbeziehungsetzen eines physischen Registers, das eine Instanz eines logischen Registers darstellt, zu dem physischen Register, das die frühere Instanz des gleichen logischen Registers darstellt, um für eine Verkettung der physischen Register gemäß der Reihenfolge der entsprechenden Instanzen des logischen Registers in der Instruktionsfolge zu sorgen,
umfassend die Schritte des
Abrufens eines neuen physischen Registers (Fig. 5), das künftig eine neue Instanz eines bestimmten logischen Registers darstellt,
Aktualisierens der Zuordnungsliste (Fig. 6B) so, daß das genannte logische Register zu dem neuen physischen Register in Beziehung gesetzt wird, und
Hinzufügens der Verbindung zwischen dem neuen physischen Register und dem physischen Register, das die frühere Instanz des genannten logischen Registers darstellt, zu der Verbindungsliste.
7. Verfahren gemäß Anspruch 6, dadurch gekennzeichnet,
daß der Bezeichner des unlängst zugeordneten physischen
Registers in den Eintrag (615) der Zuordnungsliste (600)
geschrieben wird, der dem betreffenden logischen
Zielregister entspricht.
8. Verfahren gemäß Anspruch 6, gekennzeichnet durch
eine Frei-Liste (603) zum Festhalten physischer Register, die gegenwärtig nicht irgendeine Instanz irgendeines logischen Registers darstellen,
das Abrufen (Fig. 5) eines neuen physischen Registers der Frei-Liste (603), das künftig eine neue Instanz eines bestimmten logischen Registers darstellt, und
das Löschen (Fig. 6A) des abgerufenen physischen Registers aus der Frei-Liste (603).
eine Frei-Liste (603) zum Festhalten physischer Register, die gegenwärtig nicht irgendeine Instanz irgendeines logischen Registers darstellen,
das Abrufen (Fig. 5) eines neuen physischen Registers der Frei-Liste (603), das künftig eine neue Instanz eines bestimmten logischen Registers darstellt, und
das Löschen (Fig. 6A) des abgerufenen physischen Registers aus der Frei-Liste (603).
9. Verfahren gemäß Anspruch 6, gekennzeichnet durch die
Übergabe physischer Register, wobei der Prozessor ferner
umfaßt:
eine Reihenfolgeliste (601) zum Inbeziehungsetzen jedes logischen Registers zu dem physischen Register, das den beabsichtigten Zustand des Systems zur Verarbeitung außer der Reihe speichert,
umfassend die Schritte des
Angebens (Fig. 5), daß ein bestimmtes physisches Register übergeben wurde und daß der beabsichtigte Zustand des entsprechenden logischen Registers künftig dargestellt wird durch das übergebene physische Register,
Aktualisierens (Fig. 5) der Reihenfolgeliste so, daß das logische Register zu dem übergebenen physischen Register in Beziehung gesetzt wird, und
Entfernens (Fig. 5) der Verbindung zwischen dem physischen Register, das bis jetzt den beabsichtigten Zustand dargestellt hat, und dem übergebenen physischen Register, das jetzt den beabsichtigten Status des entsprechenden logischen Registers darstellt, aus der Verbindungsliste.
eine Reihenfolgeliste (601) zum Inbeziehungsetzen jedes logischen Registers zu dem physischen Register, das den beabsichtigten Zustand des Systems zur Verarbeitung außer der Reihe speichert,
umfassend die Schritte des
Angebens (Fig. 5), daß ein bestimmtes physisches Register übergeben wurde und daß der beabsichtigte Zustand des entsprechenden logischen Registers künftig dargestellt wird durch das übergebene physische Register,
Aktualisierens (Fig. 5) der Reihenfolgeliste so, daß das logische Register zu dem übergebenen physischen Register in Beziehung gesetzt wird, und
Entfernens (Fig. 5) der Verbindung zwischen dem physischen Register, das bis jetzt den beabsichtigten Zustand dargestellt hat, und dem übergebenen physischen Register, das jetzt den beabsichtigten Status des entsprechenden logischen Registers darstellt, aus der Verbindungsliste.
10. Verfahren gemäß Anspruch 9, dadurch gekennzeichnet, daß
der Prozessor weiter umfaßt:
eine Frei-Liste (603) zum Festhalten physischer Register, die zeitweilig nicht irgendeine Instanz irgendeines logischen Registers darstellen, und
weiter umfassend den Schritt des
Hinzufügens (Fig. 5) des physischen Registers, das bis jetzt den beabsichtigten Status dargestellt hat, zu der Frei-Liste (603).
eine Frei-Liste (603) zum Festhalten physischer Register, die zeitweilig nicht irgendeine Instanz irgendeines logischen Registers darstellen, und
weiter umfassend den Schritt des
Hinzufügens (Fig. 5) des physischen Registers, das bis jetzt den beabsichtigten Status dargestellt hat, zu der Frei-Liste (603).
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
EP97122466 | 1997-12-19 |
Publications (2)
Publication Number | Publication Date |
---|---|
DE19848742A1 DE19848742A1 (de) | 1999-06-24 |
DE19848742C2 true DE19848742C2 (de) | 2002-05-02 |
Family
ID=8227834
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE19848742A Expired - Fee Related DE19848742C2 (de) | 1997-12-19 | 1998-10-22 | Registerumbenennung bei einem Prozessor, der Instruktionen ausserhalb der sequentiellen Reihenfolge bearbeiten kann |
Country Status (2)
Country | Link |
---|---|
US (1) | US6108771A (de) |
DE (1) | DE19848742C2 (de) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6779106B1 (en) | 2000-09-28 | 2004-08-17 | International Business Machines Corporation | Apparatus and method for an enhanced integer divide in an IA64 architecture |
US6883165B1 (en) | 2000-09-28 | 2005-04-19 | International Business Machines Corporation | Apparatus and method for avoiding deadlocks in a multithreaded environment |
US6886094B1 (en) | 2000-09-28 | 2005-04-26 | International Business Machines Corporation | Apparatus and method for detecting and handling exceptions |
US6912647B1 (en) | 2000-09-28 | 2005-06-28 | International Business Machines Corportion | Apparatus and method for creating instruction bundles in an explicitly parallel architecture |
US6799262B1 (en) | 2000-09-28 | 2004-09-28 | International Business Machines Corporation | Apparatus and method for creating instruction groups for explicity parallel architectures |
US7844799B2 (en) * | 2000-12-23 | 2010-11-30 | International Business Machines Corporation | Method and system for pipeline reduction |
US7191315B2 (en) * | 2001-06-04 | 2007-03-13 | Sun Microsystems, Inc. | Method and system for tracking and recycling physical register assignment |
US7055020B2 (en) * | 2001-06-13 | 2006-05-30 | Sun Microsystems, Inc. | Flushable free register list having selected pointers moving in unison |
KR20030042289A (ko) * | 2001-11-22 | 2003-05-28 | 이용석 | 레지스터 리네이밍 방법을 사용하는 비순차적 명령어 이슈컴퓨터 시스템 |
US7930426B1 (en) * | 2003-04-01 | 2011-04-19 | Cisco Technology, Inc. | Method for tracking transmission status of data to entities such as peers in a network |
US7487337B2 (en) * | 2004-09-30 | 2009-02-03 | Intel Corporation | Back-end renaming in a continual flow processor pipeline |
JP4814653B2 (ja) * | 2006-02-27 | 2011-11-16 | 富士通株式会社 | リオーダリング装置 |
US7793086B2 (en) * | 2007-09-10 | 2010-09-07 | International Business Machines Corporation | Link stack misprediction resolution |
US9645637B2 (en) | 2015-09-04 | 2017-05-09 | International Business Machines Corporation | Managing a free list of resources to decrease control complexity and reduce power consumption |
US10430197B2 (en) | 2017-05-12 | 2019-10-01 | Samsung Electronics Co., Ltd. | Banking register renaming to reduce power |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1993022722A1 (en) * | 1992-05-01 | 1993-11-11 | Seiko Epson Corporation | A system and method for retiring instructions in a superscalar microprocessor |
US5675759A (en) * | 1995-03-03 | 1997-10-07 | Shebanow; Michael C. | Method and apparatus for register management using issue sequence prior physical register and register association validity information |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4511964A (en) * | 1982-11-12 | 1985-04-16 | Hewlett-Packard Company | Dynamic physical memory mapping and management of independent programming environments |
USRE37305E1 (en) * | 1982-12-30 | 2001-07-31 | International Business Machines Corporation | Virtual memory address translation mechanism with controlled data persistence |
US4612612A (en) * | 1983-08-30 | 1986-09-16 | Amdahl Corporation | Virtually addressed cache |
US5828903A (en) * | 1994-09-30 | 1998-10-27 | Intel Corporation | System for performing DMA transfer with a pipeline control switching such that the first storage area contains location of a buffer for subsequent transfer |
US5872949A (en) * | 1996-11-13 | 1999-02-16 | International Business Machines Corp. | Apparatus and method for managing data flow dependencies arising from out-of-order execution, by an execution unit, of an instruction series input from an instruction source |
-
1998
- 1998-01-29 US US09/015,870 patent/US6108771A/en not_active Expired - Fee Related
- 1998-10-22 DE DE19848742A patent/DE19848742C2/de not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1993022722A1 (en) * | 1992-05-01 | 1993-11-11 | Seiko Epson Corporation | A system and method for retiring instructions in a superscalar microprocessor |
US5675759A (en) * | 1995-03-03 | 1997-10-07 | Shebanow; Michael C. | Method and apparatus for register management using issue sequence prior physical register and register association validity information |
Also Published As
Publication number | Publication date |
---|---|
US6108771A (en) | 2000-08-22 |
DE19848742A1 (de) | 1999-06-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE19848742C2 (de) | Registerumbenennung bei einem Prozessor, der Instruktionen ausserhalb der sequentiellen Reihenfolge bearbeiten kann | |
DE69833008T2 (de) | Prozessor mit instruktionskodierung mittels eines schablonenfeldes | |
DE69133302T2 (de) | Registerabbildung in einem einzigen Taktzyklus | |
DE2224537C2 (de) | Einrichtung und Verfahren zur Instruktionsauswahl in einem Fließbandprozessor | |
DE2411963C3 (de) | Elektronische Datenverarbeitungsanlage mit einer Prioritätssteuerschaltung mit änderbaren Steuerblöcken | |
DE60010907T2 (de) | Sram-steuerungvorrichtung für parallele prozessorarchitektur mit adressen- und befehlswarteschlange und arbiter | |
DE60006270T2 (de) | Parallele prozessorarchitektur | |
DE60308201T2 (de) | Datenverarbeitungssystem mit externen und internen anweisungssätzen | |
DE3131341C2 (de) | ||
DE69929936T2 (de) | Verfahren und Vorrichtung zum Abrufen von nicht-angrenzenden Befehlen in einem Datenverarbeitungssystem | |
DE69636861T2 (de) | Mikroprozessor mit Lade-/Speicheroperation zu/von mehreren Registern | |
DE2855106A1 (de) | Einrichtung zur durchfuehrung von instruktionsverzweigungen | |
DE2714805A1 (de) | Datenverarbeitungssystem | |
DE1815234A1 (de) | Adressiereinrichtung fuer ein Speichersystem mit einem Grossraumspeicher und einem schnellen Arbeitsspeicher | |
DE2641722C3 (de) | Hierarchisch geordnetes Speichersystem für eine datenverarbeitende Anlage mit virtueller Adressierung | |
DE2054835A1 (de) | Prozessor fur ein Informationsver arbeitungssystem und ein Betriebsver fahren fur diesen Prozessor | |
EP0635792A2 (de) | Verfahren zur Koordination von parallelen Zugriffen mehrerer Prozessoren auf Resourcenkonfigurationen | |
DE2339636A1 (de) | Programmsteuereinrichtung | |
DE4207158A1 (de) | Speicher-zugriffssteuerung | |
DE2054947A1 (de) | Adressenvorbereitungseinnchtung und verfahren und Speicherzugnffan forderungseinnchtung fur ein Infor mationsver arbeitungssystem | |
DE2626703A1 (de) | Intern programmierbares datenverarbeitungssystem | |
DE1549474B2 (de) | Anordnung in einer elektronischen digitalen Datenverarbeitungsanlage zur Ausführung eines ersten Befehls und gleichzeitigen Decodierung eines folgenden Befehls | |
DE69831282T2 (de) | Verwaltung von umbenannten Register in einem superskalaren Rechnersystem | |
DE2548720C2 (de) | Mikroprogramm-Steuerwerk | |
DE2617127A1 (de) | Mehrfachprogramm-datenverarbeitungssystem |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
OP8 | Request for examination as to paragraph 44 patent law | ||
D2 | Grant after examination | ||
8364 | No opposition during term of opposition | ||
8339 | Ceased/non-payment of the annual fee |