-
Technisches Gebiet
-
Diese
Erfindung betrifft das Gebiet der Prozessoren und betrifft insbesondere
die datenspekulative Ausführung
in einem Prozessor.
-
Hintergrund
-
Superscalare
Prozessoren erreichen eine hohe Leistungsfähigkeit, indem mehrere Befehle
gleichzeitig ausgeführt
werden und indem der kürzest
mögliche
Taktzyklus, der mit dem Aufbau verträglich ist, verwendet wird.
Jedoch können
Daten- und Steuerablaufabhängigkeiten
zwischen Befehlen begrenzend sein dafür, wie viele Befehle pro Zeit
ausgegeben werden können.
Als Folge davon unterstützen
einige Prozessoren die spekulative Ausführung, um eine weitere Leistungssteigerung
zu erreichen.
-
Eine
Art einer spekulative Ausführung
ist die Steuerablaufspekulation. Bei der Steuerablaufspekulationsausführung wird
die Richtung vorhergesagt, in der die Programmsteuerung voran schreiten
wird. Beispielsweise kann eine Verzweigungsvorhersage eingesetzt
werden, um vorherzusagen, ob eine Verzweigung durchgeführt wird.
Es sind viele Arten einer Verzweigungsvorhersage verfügbar, die
vom Verfahren, einfach jedes Mal die gleiche Vorhersage zu treffen,
bis zu jenen Verfahren reichen, die anspruchvolle geschichtliche
Abläufe der
vorhergehenden Verzweigungen in der Programmreihenfolge aufrechterhalten,
um eine auf die Geschichte gestützte
Vorhersage zu treffen. Die Verzweigungsvorhersage kann durch Hardware-Optimierungen,
Compiler-Optimierungen oder beides verbessert werden. Auf der Grundlage
der Vorhersage, die durch den Verzweigungsvorhersagemechanismus
geliefert wird, können
Befehle spekulativ abgeholt und ausgeführt werden. Wenn der Verzweigungsbefehl
schließlich
bewertet wird, kann die Verzweigungsvorhersage verifiziert werden. Wenn
die Vorhersage nicht korrekt war, werden Befehle, die auf der Grundlage
der nicht korrekten Vorhersage spekulativ ausgeführt wurden, verworfen.
-
Eine
weitere Art der spekulativen Ausführung, die vorgeschlagen wurde,
ist Datenspekulation. Beispielsweise kann eine Datenvorhersage,
die den Wert von Datenpunkten vorhersagt, das Beobachten von Mustern
in Daten beinhalten, und es kann die Vorhersage auf diesen Mustern
begründet
werden (beispielsweise kann der Wert einer Indexzählervariable
vorhergesagt werden, indem beobachtet wird, wie Werte dieser Variable
erhöht
oder verringert werden). Die Vorhersage von Adressen beinhaltet
das Vorhersagen der Speicherstelle der Daten. Eine weitere Art der
Datenspekulation wird als Speichersystemoptimismus bezeichnet. In
Multi-Prozessorsystemen tritt der Speichersystemoptimismus auf,
wenn ein Prozessor spekulativ einen Befehl ausführt, wobei Daten aus dem lokalen
Cache-Speicher dieses Prozessors verwendet werden, bevor die Kohärenzprüfung abgeschlossen
ist. In ähnlicher
Weise kann eine weitere Art der Datenspekulation es ermöglichen,
dass ein Ladebefehl spekulativ vor einem Schreibbefehl ausgeführt wird,
der eine nicht berechnete Adresse zu dem Zeitpunkt der Ausführung des
Ladebefehls aufweist, obwohl der Schreibbefehl Daten in die gleiche
Adresse schreiben kann, auf die der Ladebefehl zugreift. In allen
diesen Arten von Datenspekulation werden die zu Grunde liegenden
Bedingungen schließlich
bewertet, wodurch die Spekulation verifiziert oder ungeschehen gemacht
werden kann. Wenn sich die Spekulation als nicht korrekt ergibt,
können
die Befehle, die unter Anwendung der spekulativen Daten ausgeführt wurden,
so dann erneut ausgeführt
werden (beispielsweise mit aktualisierten und/oder nicht-spekulativen
Daten).
-
Die
WO 03/093982 A1 offenbart
ein Verfahren zum Verknüpfen
spekulativer Ergebnisse von Ladeoperationen mit Registerwerten.
Adressiermuster von Operationen werden mit einem oder mehreren Adressiermustern
vorheriger Operationen verglichen. Durch Ausführen von Adressenberechnungen
und Vergleichen verknüpfter
Datenwerte mit aktuell geladenen Ergebnisdatenwerten kann ein spekulatives
Ergebnis einer Register-to-Register-Move-Operation verifiziert werden, und
es können
Adressenberechnungen zur Verifikation davon verwendet werden, ob
eine spekulative Verknüpfung
korrekt ist.
-
In
der
US 6 065 103 A wird
ein spekulatives Aktualisieren eines spekulativen Pufferspeichers
beschrieben, das in Reaktion auf spekulative Speicheroperationen
erfolgt, die in einem Puffer einer Lade-/Speichereinheit eines Mikroprozessors
gepuffert sind.
-
-
Da
Spekulation das Voranschreiten der Ausführung ermöglicht, ohne dass auf den Abschluss
der Abhängigkeitsprüfung gewartet
wird, können
deutliche Leistungssteigerungen erreicht werden, wenn die aus den korrekten
Spekulationen erreichte Leistungssteigerung den Leistungsverlust übersteigt,
der auf unkorrekte Spekulationen zurückzuführen ist. Somit liegt der vorliegenden
Erfindung die Aufgabe zugrunde, eine effiziente Datenspekulation
in einem Mikroprozessor insbesondere unter Verifikation einer Speicherdatei
in dem Mikroprozessor bereitzustellen.
-
Überblick über die Erfindung
-
Zur
Lösung
der genannten Aufgabe stellt die vorliegende Erfindung einen Mikroprozessor
zur Verfügung
mit:
einer Speicherdatei mit einem Eintrag, der ausgebildet
ist, ein erstes Adressiermuster und eine erste Markierung zu speichern,
wobei die Speicherdatei ausgebildet ist, das erste Adressiermuster,
das in dem Eintrag enthalten ist, mit einem zweiten Adressiermuster
einer Ladeoperation zu vergleichen, wobei, wenn das zweite Adressiermuster
mit dem ersten Adressiermuster, das in dem Eintrag gespeichert ist, übereinstimmt,
die Speicherdatei ausgebildet ist, einen durch die erste Markierung
bezeichneten Datenwert mit einem spekulativen Ergebnis der Ladeoperation
zu verknüpfen;
einem
Ausführungskern
der mit der Speicherdatei verbunden ist, wobei der Ausführungskern
ausgebildet ist, auf das spekulative Ergebnis zuzugreifen, wenn
er eine zweite Operation ausführt,
die von der Ladeoperation abhängig
ist; und
einer Lade/Schreibeinheit, die mit der Speicherdatei
verbunden ist und Schreib-zu-Lade-Weiterleitungskomparatoren umfasst,
und die ausgebildet ist, die Verknüpfung zwischen dem durch die
erste Markierung gekennzeichneten Datenwert und dem spekulativen
Ergebnis der Ladeoperation zu verifizieren, indem sie eine Adresse,
auf die von der Ladeoperation zugegriffen wird, berechnet und mithilfe
der Schreib-zu-Lade-Weiterleitungskomparatoren einen Vergleich zwischen
der berechneten Adresse und einer oder mehreren Adressen ausführt, auf
die von vorangegangenen Schreiboperationen zugegriffen wurde.
-
Weiterhin
stellt die Erfindung ein Verfahren zum Verifizieren einer Speicherdatei
in einem Mikroprozessor zur Verfügung
mit den Schritten:
Speichern eines Eintrags in der Speicherdatei,
der ein erstes Adressiermuster und eine erste Markierung enthält;
Vergleichen
mithilfe der Speicherdatei des in dem Eintrag enthaltenen ersten
Adressiermusters mit einem zweiten Adressiermuster einer Ladeoperation,
die auf Speichern des Eintrags folgt;
Verknüpfen mithilfe der Speicherdatei
eines durch die erste Markierung gekennzeichneten Datenwertes mit
einem spekulativen Ergebnis der Ladeoperation in Reaktion auf den
Vergleich, wenn das zweite Adressiermuster mit dem ersten Adressiermuster,
das in dem Eintrag gespeichert ist, übereinstimmt;
Zugreifen
durch einen Ausführungskern
des Mikroprozessors auf das spekulative Ergebnis, wenn eine zweite Operation,
die von der Ladeoperation abhängig
ist, nachfolgend zu der Verknüpfung
ausgeführt
wird; und
Verifizieren durch die Lade/Schreibeinheit des Mikroprozessors
der Verknüpfung
zwischen dem durch die erste Markierung gekennzeichneten Datenwert
und dem spekulativen Ergebnis der Ladeoperation durch Berechnen
der Adresse, auf die von der Ladeoperation zugegriffen wird und
durch Ausführen
eines Vergleichs zwischen der berechneten Adresse und einer oder
mehreren Adressen, auf die von vorangegangenen Schreiboperationen
zugegriffen wurde, nach dem Verknüpfen.
-
Kurze Beschreibung der Zeichnungen
-
Ein
besseres Verständnis
der vorliegenden Erfindung kann erreicht werden, wenn die folgende
detaillierte Beschreibung mit Bezug zu den folgenden Zeichnungen
studiert wird, in denen:
-
1 eine
Ausführungsform
eines Prozessors zeigt.
-
2A eine
Blockansicht einer Ausführungsform
einer Ausgabeeinheit ist.
-
2B einen
anschaulichen Speichereintrag einer Speicherdatei zeigt, der in
einer Ausführungsform verwendet
wird.
-
3 ein
Flussdiagramm ist, das eine Ausführungsform
eines Verfahrens zum Verknüpfen
des spekulativen Ergebnisses einer Ladeoperation mit einem durch
eine spezielle Markierung gekennzeichneten Datenwert zeigt.
-
4A eine
Blockansicht einer Lade/Schreibeinheit gemäß einer Ausführungsform
ist.
-
4B eine
Blockansicht einer Lade/Schreibeinheit gemäß einer weiteren Ausführungsform
ist.
-
5A ein
Flussdiagramm eines Verfahrens zum Verifizieren einer Verknüpfung zwischen
dem spekulativen Ergebnis einer Ladeoperation mit einem durch eine
spezielle Markierung gekennzeichneten Datenwert gemäß einer
Ausführungsform
ist.
-
5B ein
Flussdiagramm eines Verfahrens zum Abschließen einer Speicheroperation
ist, auf der Grundlage, ob eine dieser Speicheroperation zugeordnete
Verknüpfung
verifiziert ist, gemäß einer
Ausführungsform.
-
6A eine
Blockansicht einer Lade/Schreibeinheit zeigt, die ausgebildet ist,
eine Verknüpfung
zwischen dem spekulativen Ergebnis einer Ladeoperation mit einem
durch eine spezielle Markierung gekennzeichneten Datenwert gemäß einer
Ausführungsform
zu verifizieren.
-
6B eine
Blockansicht eines Ausführungskerns
zeigt, der ausgebildet ist, eine Verknüpfung zwischen dem spekulativen
Ergebnis einer Ladeoperation mit einem durch eine spezielle Markierung
gekennzeichneten Datenwert gemäß einer
Ausführungsform
zu verifizieren.
-
7 ein
Flussdiagramm eines Verfahrens ist, um eine Verknüpfung zwischen
dem spekulativen Ergebnis einer Ladeoperation mit einem durch eine
spezielle Markierung gekennzeichneten Datenwert unter Anwendung
von Vergleichsergebnissen gemäß einer
Ausführungsform
zu verifizieren.
-
8 eine
Blockansicht einer Ausführungsform
einer Ablauforganisationseinheit beziehungsweise einer Disponiereinheit
ist.
-
9 ein
Flussdiagramm einer Ausführungsform
eines Verfahrens zur Ausgabe von Operationen und zur erneuten Ausgabe
von Operationen in Reaktion auf eine Angabe, dass die Datenspekulation
unkorrekt ist, zeigt.
-
10 eine
Blockansicht einer Disponiereinheit ist, die ausgebildet ist, selektiv
den Ausgabezustand einer auszugebenden Operation auf der Grundlage
spekulativer Operandenquellen oder nichtspekulativer Operandenquellen
gemäß einer
Ausführungsform
zu bestimmen.
-
11 eine
Blockansicht einer weiteren Ausführungsform
einer Ausgabeeinheit ist.
-
12 eine
Blockansicht einer noch weiteren Ausführungsform einer Ausgabeeinheit
ist.
-
13 eine
spekulative Registerzuordnung zeigt, die ausgebildet ist, eine Angabe über die
einer Markierung zugeordnete Farbe für den speziellen Operanden
gemäß einer
Ausführungsform
zu bewahren.
-
14 eine
Ausführungsform
eines Computersystems zeigt.
-
15 eine
weitere Ausführungsform
eins Computersystems zeigt.
-
Obwohl
die Erfindung diversen Modifizierungen und alternativen Formen unterliegen
kann, sind dennoch spezielle Ausführungsformen davon beispielhaft
in den Zeichnungen gezeigt und werden nachfolgend detailliert beschrieben.
Es sollte jedoch beachtet werden, dass die Zeichnungen und die detaillierte
Beschreibung nicht beabsichtigen, die Erfindung auf die spezielle
offenbarte Form einzuschränken,
sondern die Erfindung soll alle Modifizierungen, Äquivalente
und Alternativen abdecken, die innerhalb des Grundgedankens und
Schutzbe reiches der vorliegenden Erfindung, wie sie durch die angefügten Patentansprüche definiert
ist, liegen. Zu beachten ist ferner, dass Überschriften lediglich zur
Unterteilung dienen und nicht die Beschreibung oder die Patentansprüche begrenzen
oder in ihrer Bedeutung beschreiben sollen. Ferner ist zu beachten,
dass das Wort „kann” in dieser
Anmeldung als in einem möglichen
Sinne (das heißt,
hat die Möglichkeit,
ist in der Lage zu) verwendet wird, und nicht in einem erforderlichen
Sinne (das heißt,
muss). Der Begriff „enthalten” und Ableitungen
davon bedeuten „einschließlich aber
nicht beschränkt
auf”.
Der Begriff „verbunden” bedeutet „direkt
oder indirekt verbunden” und
der Begriff „gekoppelt” bedeutet „direkt
oder indirekt gekoppelt”.
-
Art(en) zum Ausführen der Erfindung
-
1 ist
eine Blockansicht einer Ausführungsform
eines Prozessors 100. Der Prozessor 100 ist ausgebildet,
Befehle, die in einem Systemspeicher 200 gespeichert sind,
auszuführen.
Viele dieser Befehle operieren auf Daten, die in dem Systemspeicher 200 gespeichert
sind. Zu beachten ist, dass der Systemspeicher 200 physikalisch über ein
Computersystem verteilt sein kann und von einem oder mehreren Prozessoren 100 angesprochen
werden kann.
-
Der
Prozessor 100 kann einen Befehlscache-Speicher 106 und
einen Datencache-Speicher 128 aufweisen. Der Prozessor 100 kann
ferner eine Vorabholeinheit 108 aufweisen, die mit dem
Befehlscache-Speicher 106 verbunden ist. Eine Ausgabeeinheit 104 ist
ausgebildet, Befehle aus dem Befehlscache-Speicher 106 zu
erhalten und Operationen an eine oder mehrere Disponiereinheiten 118 auszugeben.
Die eine oder die mehreren Disponiereinheiten 118 sind
angeschlossen, um ausgegebene Operationen von der Ausgabeeinheit 104 zu
erhalten und um Operationen zu einem oder mehreren Ausführungskernen 124 auszugeben.
Der eine oder die mehreren Ausführungskerne 124 können eine
Lade/Schreibeinheit 126 beinhalten, die ausgebildet ist,
Zugriffe auf den Datencache-Speicher 128 auszuführen. Von
dem einen oder den mehreren Ausführungskernen 124 erzeugte
Ergebnisse können
auf einem Ergebnisbus 130 ausgegeben werden. Diese Ergebnisse können als
Operandenwerte für
nachfolgend ausgegebene Befehle verwendet und/oder in einer Registerdatei 116 gespeichert
werden. Eine Rücknahme-
beziehungsweise Abschlusswarteschlange 102 ist mit der
beziehungsweise den Disponiereinheiten 118 und der Ausgabeeinheit 104 verbunden.
Die Abschlusswarteschlage ist ausgebildet, zu bestimmen, wann jede
ausgegebene Operation abgeschlossen werden kann. In einer Ausführungsform
ist der Prozessor 100 kompatibel zu der x86-Architektur
gestaltet. Zu beachten ist, dass der Prozessor 100 auch
viele weitere Komponenten aufweisen kann. Beispielsweise kann der
Prozessor 100 eine Verzweigungsvorhersageeinheit (nicht
gezeigt) aufweisen.
-
Der
Befehlcache-Speicher 106 speichert temporär Befehle,
bevor sie von der Ausgabeeinheit 104 empfangen werden.
Die Befehlskodierung kann dem Befehlscache-Speicher 106 zugeführt werden,
indem Kodierung aus dem Systemspeicher 200 über die
Vorabholeinheit 108 im Voraus abgeholt wird. Der Befehlscache-Speicher 106 kann
in diversen Konfigurationen eingerichtet sein (beispielsweise teilassoziativ,
vollständig assoziativ
oder direkt zugeordnet).
-
Die
Vorabholeinheit 108 kann Befehlskodierung aus dem Systemspeicher 200 zur
Speicherung in dem Befehlscache-Speicher 106 im Voraus
abholen. In einer Ausführungsform
ist die Vorabholeinheit 108 ausgebildet, gebündelt Kodierung
aus dem Systemspeicher 200 in den Befehlscache-Speicher 106 abzulegen.
Die Vorabholeinheit 108 kann eine Vielzahl spezieller Kodierungsvorabholtechniken
und Algorithmen anwenden.
-
Die
Ausgabeeinheit 104 gibt Signale aus, die Bit-kodierte Operationen
enthalten, die von dem einen oder den mehreren Ausführungskernen 124 ausführbar sind,
die auch Operandenadresseninformationen, unmittelbare Daten und/oder
Verschiebungsdaten enthalten. In einigen Ausführungsformen ist die Ausgabeeinheit 104 eine
Dekodierschaltung (nicht gezeigt) zum Dekodieren gewisser Befehle
in Operationen, die von dem beziehungsweise den Ausführungskernen 124 ausführbar sind.
Einfache Befehle entsprechen einer einzelnen Operation. In einigen
Ausführungsformen
können
komplexere Befehle mehreren Operationen entsprechen. Beim Dekodieren
einer Operation, die das Aktualisieren eines Registers beinhaltet,
wird eine Registerspeicherstelle innerhalb der Registerdatei 116 reserviert,
um spekulative Registerzustände
zu speichern (in einer alternativen Ausführungsform wird ein Umordnungspuffer
verwendet, um einen oder mehrere spekulative Registerzustände für jedes
Register zu speichern). Eine Registerzuordnung 134 übersetzt
logische Registernamen von Quellen- und Zieloperanden in physikalische
Registernamen, um die Registerumbenennung zu ermöglichen. Die Registerzuordnung 134 verfolgt,
welche Register in der Registerdatei 116 aktuell reserviert
und nicht reserviert sind.
-
Der
Prozessor 100 aus 1 unterstützt eine
Ausführung „außer der
Reihenfolge”.
Eine Abschluss- beziehungsweise Rücknahmewarteschlange 102 kann
die ursprüngliche
Programmreihenfolge für
Registerlese- und Schreiboperationen verfolgen, kann eine spekulative
Befehlsausführung
und eine Wiederherstellung nach Verzweigungsfehlvorhersage ermöglichen
und kann ferner präzise
Sonderbefehlsausführung
ermöglichen.
In einigen Ausführungsformen
kann die Abschlusswarteschlange 102 ferner eine Registerumbenennung unterstützen, indem
die Datenwertspeicherung für
spekulative Registerzustände
vorgesehen ist. In den Ausführungsformen
kann die Abschlusswarteschlange 102 in ähnlicher Weise wie ein Umordnungspuffer
funktionieren. Jedoch anders als ein typischer Umordnungspuffer
stellt die Abschlusswarteschlange 102 keinen Datenwertspeicherplatz
zur Verfügung.
In einigen Ausführungsformen
kann die Abschlusswarteschlange 102 in einer Konfiguration
mit „zuerst
hinein zuerst heraus” eingerichtet
sein, in der die Operationen sich zur „Unterseite” des Puffers
beim Validisieren bzw. für
gültig
Erklären
bewegen, so dass an der „Oberseite” der Warteschlange
für neue
Einträge
Platz geschaffen wird. Wenn Operationen zurückgenommen beziehungsweise
abgeschlossen werden, hebt die Abschlusswarteschlange 102 die
Reservierung von Registern in der Registerdatei 116 auf,
die nicht mehr benötigt
werden, um spekulative Registerzustände zu speichern, und liefert
Signale an die Registerzuordnung 134, die angeben, welche
Register aktuell verfügbar
sind. Durch Beibehalten spekulativer Registerzustände innerhalb
der Registerdatei 116 (oder in alternativen Ausführungsformen
innerhalb eines Umordnungspuffers), wenn die Operationen, die diese
Zustände
erzeugt haben, als gültig
erklärt sind,
können
die Ergebnisse spekulativ ausgeführter
Operationen entlang einem fehlvorhergesagtem Pfad in der Registerdatei 116 als
ungültig
erklärt
werden, wenn eine Verzweigungsvorhersage nicht korrekt ist.
-
Beim
Dekodieren einer speziellen Operation kann, wenn ein erforderlicher
Operand eine Registerspeicherstelle ist, eine Registeradresseninformation
der Registerzuordnung 134 (oder einen Umordnungspuffer) zugeführt werden.
Beispielsweise gibt es in der x86-Architektur acht 32-Bit-Logikregister
(beispielsweise EAX, EBX, ECX, EDX, EBP, ESI, EDI und ESP). Die
physikalische Registerdatei 116 (oder ein Umordnungspuffer) enthält Speicherplatz
für Ergebnisse,
die den Inhalt dieser logischen Register ändern, wodurch die Ausführung außer der
Reihenfolge möglich
ist. Ein physikalisches Register in der Registerdatei 116 kann
reserviert werden, um das Ergebnis jeder Operation zu speichern,
die beim Dekodieren erkannt wird, den Inhalt eines der logischen
Register zu modifizieren. Daher kann während diverser Zeitpunkte während des
Ausführens
eines speziellen Programms die Registerdatei 116 (oder
in alternativen Ausführungsformen
ein Umordnungspuffer) ein oder mehrere Register aufweisen, die spekulativ
ausgeführte
Inhalte eines gegebenen lokalen Registers enthalten.
-
Die
Registerdatei 134 kann einem physikalischen Register ein
spezielles logisches Register, das als ein Zieloperand einer Operation
angegeben ist, zuordnen. Die Ausgabeeinheit 104 kann bestimmen,
dass die Registerdatei 116 ein oder mehrere zuvor reservierte
physikalische Register besitzt, die einem logischen Register zugewiesen
sind, das als ein Quellenoperand in einer gegebenen Operation spezifiziert
ist. Die Registerzuordnung 134 kann eine Markierung für das physikalische
Register liefern, das zuletzt diesem logischen Register zugeordnet
wurde. Diese Markierung kann verwendet werden, um auf den Datenwert
des Operanden in der Registerdatei 116 zuzugreifen oder
um den Datenwert über
eine Ergebnisweiterleitung auf dem Ergebnisbus 130 zu empfangen.
Wenn der Operand einer Speicherstelle entspricht, kann der Operandenwert
auf dem Ergebnisbus (für
die Ergebnisweiterleitung und/oder für die Speicherung in der Registerdatei 116) über die
Lade/Schreibeinheit 126 bereitgestellt werden. Operandendatenwerte
können
dem beziehungsweise den Ausführungskernen 124 zugeführt werden,
wenn die Operation von einer der Disponiereinheiten 118 ausgegeben
wird. Zu beachten ist, dass in alternativen Ausführungsformen Operandenwerte
einer entsprechenden Disponiereinheit 118 zugeführt werden
können,
wenn eine Operation ausgegeben wird (anstatt dass diese einem entsprechenden
Ausführungskern 124 zugeleitet
wird, wenn die Operation ausgegeben wird).
-
Die
Bit-kodierten Operationen und die unmittelbaren Daten, die an den
Ausgängen
der Ausgabeeinheit 104 bereit gestellt werden, können zu
einer oder zu mehreren Disponiereinheiten 118 weitergeleitet
werden. Zu beachten ist, dass im hierin verwendeten Sinne eine Disponiereinheit
bzw. Ablauforganisationseinheit eine Vorrichtung ist, die erkennt,
wenn Operationen zum Ausführen
sind und dazu bereite Operationen zu einem oder mehreren Ausführungskernen
ausgibt. Beispielsweise ist eine Reservierungsstation eine Disponiereinheit.
Jede Disponiereinheit 118 ist in der Lage, Operationsinformation
zu halten (beispielsweise Bit-kodierte Ausführungsbits sowie Operandenwerte,
Operandenmarkierungen und/oder unmittelbare Daten) für mehrere anhängige Operationen,
die auf die Ausgabe zu einem Ausführungskern 124 warten.
In einigen Ausführungsformen
bietet nicht jede Disponiereinheit 118 Speicherplatz für Operandenwerte.
Stattdessen kann jede Disponiereinheit ausgegebene Operationen und
Ergebnisse, die in einer Registerdatei 116 verfügbar sind, überwachen,
um zu bestimmen, wann Operandenwerte für das Auslesen durch einen
oder mehrere Operationskerne 124 verfügbar sind (von der Registerdatei 116 oder
dem Ergebnisbus 130). In einigen Ausführungsformen ist jede Disponiereinheit 118 mit
einem gewissen Ausführungskern 124 verknüpft. In
anderen Ausführungsformen
kann eine einzelne Disponiereinheit 118 Operationen an
mehr als einen Ausführungskern 124 ausgeben.
-
Die
Disponiereinheiten 118 sind vorgesehen, um temporär Schreiboperationsinformation
zu speichern, die von dem beziehungsweise den Ausführungskernen 124 auszuführen ist.
Wie zuvor dargelegt ist, kann jede Disponiereinheit 118 Operationsinformation
für anhängige Operationen
speichern. Des weiteren kann jede Disponiereinheit Operationsinformationen
für Operationen
speichern, die bereits ausgeführt
wurden, aber nochmals ausgegeben werden. Operationen werden an einen
oder mehrere Ausführungskerne 124 zum Ausführen in
Reaktion auf Werte von abgeschlossenen Operanden, die zum Zeitpunkt
des Ausführens
verfügbar
sind, ausgegeben. Folglich kann die Reihenfolge, in der die Operationen
ausgeführt
werden, gegebenenfalls nicht der Reihenfolge der ursprünglichen
Programmbefehlssequenz entsprechen. Operationen, die eine Datenspekulation
beinhalten, können
in der beziehungsweise den Disponiereinheiten 118 verbleiben,
bis sie nichtspekulativ werden, so dass diese erneut ausgegeben
werden können,
wenn die Datenspekulation nicht korrekt ist.
-
In
einer Ausführungsform
kann jeder der Ausführungskerne 124 Komponenten
enthalten, die ausgebildet sind, Ganzzahlarithmetikoperationen der
Addition und Subtraktion sowie Verschiebungen, zyklisches Vertauschen,
Logikoperationen und Vertreibungsoperationen auszuführen. Es
kann auch eine Fließkommaeinheit
enthalten sein, um eine Fließkommaoperationen
auszuführen.
Einer oder mehrerer der Ausführungskerne 124 kann
ausgebildet sein, eine Adressenerzeugung für Lade- und Schreibspeicheroperationen
die von der Lade/Schreibeinheit 126 auszuführen sind,
durchzuführen.
-
Der
beziehungsweise die Ausführungskerne 124 können auch
Information hinsichtlich des Ausführens von bedingten Verzweigungsbefehlen
für eine
Verzweigungsvorhersageeinheit bereitstellen, so dass, wenn die Verzweigung
falsch vorhergesagt wurde, die Verzweigungsvorhersageeinheit Befehle
löschen
kann, die auf die falsch vorhergesagte Verzwei gung folgen und in
die Befehlsverarbeitungspipeline eingespeist wurden, und kann damit
die Vorabholeinheit 106 neu unterweisen. Die neu angewiesene
Vorabholeinheit 106 kann dann beginnen, den korrekten Satz
an Befehlen von dem Befehlscache-Speicher 106 oder dem
Systemspeicher 200 abzuholen. In derartigen Situationen
können
Ergebnisse von Befehlen in der ursprünglichen Programmreihenfolge,
die nach dem fehlvorhergesagten Verzweigungsbefehl auftraten, verworfen
werden, einschließlich
jener, die spekulativ ausgeführt
und zeitweilig in der Registerdatei 116 gespeichert wurden.
Ergebnisse, die von Komponenten innerhalb eines oder mehrerer Ausführungskerne 124 erzeugt
wurden, können auf
dem Ergebnisbus 130 an die Registerdatei 116 ausgegeben
werden, wenn ein Registerwert aktualisiert wird. Wenn der Inhalt
einer Speicherstelle geändert
wird, kann das in dem einen oder den mehreren Ausführungskernen 124 erzeugte
Ergebnis der Lade/Schreibeinheit 126 zugeführt werden.
-
Die
Lade/Schreibeinheit 126 bildet eine Schnittstelle zwischen
dem beziehungsweise den Ausführungskernen 124 und
dem Datencache-Speicher 128. In einer Ausführungsform
ist die Lade/Schreibeinheit 126 aus dem Lade/Schreibpuffer
mit mehreren Speicherplätzen
für Daten-
und Adressinformationen für
anhängige
Ladeoperationen oder Schreiboperationen versehen. Die Lade/Schreibeinheit 126 kann
ferner eine Abhängigkeitsprüfung für Ladebefehle
gegenüber
anhängigen
Schreibbefehlen ausführen,
um damit sicherzustellen, dass die Datenkohärenz bewahrt wird.
-
Der
Datencache-Speicher 128 ist ein Cache-Speicher beziehungsweise
ein schneller Zwischenspeicher, der vorgesehen ist, um temporär zu speichern,
die zwischen der Lade/Schreibeinheit 126 und dem Systemspeicher 200 ausgetauscht
werden. Ähnlich
wie der Befehlscache-Speicher 106, der zuvor beschrieben ist,
kann der Datencache-Speicher 128 in einer Vielzahl von
speziellen Speicherkonfigurationen eingerichtet sein, wozu eine
teilassoziative Konfiguration gehört. Des weiteren können der
Datencache-Speicher 106 und der Befehlscache-Speicher 128 in
einigen Ausführungsformen
als gemeinsamer Cache-Speicher eingerichtet sein.
-
Speicherdatei
-
2A zeigt
eine Ausführungsform
einer Ausgabeeinheit 104. In dieser Ausführungsform
umfasst die Ausgabeeinheit 104 eine Registerzuordnung 134 und
eine Speicherdatei 132. Wie zuvor erwähnt ist, kann die Registerzuordnung 134 ausgebildet
sein, eine Registerum benennung bereitzustellen. Die Registerzuordnung 134 erhält Logikregisternamen
für jeden
Quellenoperanden und jeden Zieloperanden und gibt die physikalischen
Registernamen der physikalischen Register aus, die zuletzt den logischen
Registern zugeordnet sind. Die Speicherdatei 132 enthält eine
Speicherdateisteuerung 202 und einen Speicherdateispeicherbereich 204.
-
Der
Speicherdateispeicherbereich 204 enthält einen oder mehrere Einträge 220.
Jeder Eintrag 220 enthält
ein Adressiermuster 206 und eine Markierung 208,
die mit dem Adressiermuster dieses Eintrags verknüpft ist.
Jede Markierung bezeichnet einen Datenwert durch Angabe, wo dieser
Datenwert gespeichert wird (beispielsweise innerhalb eines Umordnungspuffers
oder in einer Speicherdatei 116), wenn der Datenwert erzeugt
wird. Wie beispielsweise in der dargestellten Ausführungsform
gezeigt ist, bezeichnet jede Markierung das physikalische Register,
das reserviert ist, um diesen Datenwert zu speichern, wie dies durch
die Registerzuordnung 134 angegeben ist. Jedes Adressiermuster
kann die gesamte oder Teile der Information enthalten, die zum Spezifizieren
einer Adresse in einer Operation verwendet wird. Es sei beispielsweise
kurz auf 28 verwiesen, in der ein
beispielhaftes Adressiermuster 206 gezeigt ist. In dieser
Ausführungsform
umfasst das Adressiermuster 206 einen logischen Basisregisternamen 210,
einen logischen Indexregisternamen 212 und eine Verschiebung 214.
Einige Adressiermuster 206 können einen logischen Segmentregisternamen
eines Registers aufweisen, das ein spezielles Segment im Speicher
kennzeichnet. Der Speicherdateispeicherbereich 204 kann
in Form mehrerer Register, Signalspeicher, Flip-Flops, oder anderer
getakteter Speichereinrichtungen in einigen Ausführungsformen eingerichtet sein.
In alternativen Ausführungsformen
umfasst der Speicherdateispeicherbereich 204 eine oder
mehrere RAM (Speicher mit wahlfreiem Zugriff) Zellen.
-
Zu
beachten ist, dass in einigen Ausführungsformen das Adressiermuster 206,
das in dem Speicherdateispeicherbereich 204 enthalten ist,
weniger als die gesamte Adressierinformation, die für eine Operation spezifiziert
ist, enthalten kann. Beispielsweise können Einträge in dem Speicherdateispeicherbereich 204 weniger
als alle Bits enthalten, die zum Spezifizieren einer Verschiebung
innerhalb eines Verschiebefeldes 214 verwendet werden.
In anderen Ausführungsformen
kann die Speicherdateisteuerung 202 selektiv wählen, ob ein
Eintrag in dem Speicherdateispeicherbereich 204 zu reservieren
ist, abhängig
davon, ob ein Eintrag in der Speicherdatei die gesamte Adressierinformation
für eine
spezielle Operation speichern kann. Wenn beispielsweise jeder Eintrag
in dem Speicherdateispeicherbereich 204 bis zu 16 Bits
an Verschiebungsinformation speichert und die Adressierinformation
für eine
spezielle Operation 24 Bits aus Verschiebungsinformationen enthält, kann
die Speicherdateisteuerung 202 keinen Speicherdateieintrag
für die
Adressierinformation dieser Operation zuweisen.
-
Die
Speicherdateisteuerung 202 kann die Adressiermustern, die
in nicht ausgegebenen Operationen angegeben sind, mit jenen vergleichen,
die in Einträgen
in dem Speicherdateispeicherbereich 204 gespeichert sind.
Wenn das Adressiermuster einer Operation nicht mit den Adressiermustern übereinstimmt,
die aktuell in den Einträgen
in dem Speicherdateispeicherbereich 204 gespeichert sind
(das heißt,
das Adressiermuster der Operation fehlt in dem Speicherdateispeicherbereich),
kann die Speicherdateisteuerung 202 einem neunen Eintrag
in dem Speicherdateispeicherbereich 204 zuweisen, um das
gesamte oder einen Teil des Adressiermusters dieser Operation zu
speichern. Wenn es keine freien Einträge in dem Speicherdateispeicherbereich 204 für die Zuweisung
gibt, kann die Speicherdateisteuerung 202 einen Eintrag
für das Überschreiben
auswählen,
wobei ein Austauschschema, etwa LRU (am wenigsten aktuell verwendet),
FIFO (zuerst herein, zuerst heraus), zufällige Ersetzung, etc. angewendet
wird.
-
Zusätzlich zu
dem Speichern des Adressiermusters der Operation in dem zugewiesenen
Eintrag kann die Speicherdateisteuerung 202 auch einen
physikalischen Registernamen 208 speichern, der eine Markierung
enthält
(beispielsweise den Namen des physikalischen Registers), der einen
Wert angibt, der den durch das Adressiermuster dieser Operation
gekennzeichneten Speicherplatz angibt, aus dem geladen oder in den gespeichert
wird. Wenn beispielsweise eine Ladeoperation, die Daten aus dem
Speicher einlädt,
behandelt wird, kann der in Reaktion auf diese Ladeoperation zugewiesene
Eintrag den Namen des physikalischen Registers enthalten, der zum
Speichern des Ergebnisses der Ladeoperation zugewiesen ist. Wenn
eine Schreiboperation, die Daten in eine Speicherstelle schreibt,
bearbeitet wird, kann die Speicherdateisteuerung 202 den
physikalischen Registernamen des Registers speichern, in welchem
der Quellenwert der Schreiboperation in dem Speicherdateispeicherbereich 204 gespeichert
wird.
-
Wenn
das Adressiermuster einer Operation (oder ein Teil dieses Musters)
bereits in dem Eintrag in der Speicherdatei 204 abgelegt
ist (das heißt,
das Adressiermuster der Operation trifft in den Speicherdateispeicherbereich),
kann die Speicherdateisteuerung 202 den Eintrag, der das übereinstimmende
Adressiermuster enthält,
verwenden oder modifizieren.
-
Wenn
eine Ladeoperation (eine Operation, die einen Wert aus der speziellen
Adresse in ein Register einlädt)
abgearbeitet wird, kann die Speicherdateisteuerung 202 den
physikalischen Registernamen 208, der in dem betreffenden
Eintrag enthalten ist, ausgeben. Wenn eine Schreiboperation (eine
Operation, die einen Wert aus einem Register in eine spezielle Adresse
schreibt) abgearbeitet wird, kann die Speicherdateisteuerung 202 die
Markierung (beispielsweise den physikalischen Registernamen 208),
die in dem betreffenden Eintrag gespeichert ist, durch die Markierung
der gespeicherten Daten überschreiben.
-
Wenn
eine Ladeoperation abgearbeitet wird und die Ladeoperation den Speicherdateispeicherbereich 204 betrifft,
kann die durch die Speicherdateisteuerung 202 ausgegebene
Markierung verwendet werden, um den gespeicherten Wert, der durch
die Markierung angegeben ist, mit einem spekulativen Ergebnis der
Ladeoperation zu verknüpfen.
Wenn beispielsweise in einigen Ausführungsformen die Ladeoperation
an die eine oder mehrere Disponiereinheiten 118 ausgegeben
wird, kann die von der Speicherdatei 132 ausgegebene Markierung
ebenso zu der oder den Disponiereinheiten zugeführt werden (beispielsweise
als spekulative Quellenoperandenmarkierung). Eine Disponiereinheit 118 kann
die Ladeoperation in Reaktion auf die Verfügbarkeit (beispielsweise in
der Registerdatei 116 oder auf dem Ergebnisbus 130)
des Wertes, der durch diese Markierung angegeben ist, ausgeben.
Ein Ausführungskern 124 kann
die Ladeoperation ausführen,
so dass der verknüpfte
Wert in allgemein adressierter Weise als das spekulative Ergebnis
der Ladeoperation auf dem Ergebnisbus 130 ausgegeben wird
(zu beachten ist, dass der Datenwert, der als das Ergebnis der Ladeoperation erzeugt
wird, in den Ausführungsformen
nicht selbst als ein spekulativer Wert markiert oder anderweitig
gekennzeichnet sein muss). In anderen Ausführungsformen kann der Datenwert
mit dem spekulativen Ergebnis der Ladeoperation verknüpft werden,
indem die Markierung in einer spekulativen Zuordnung gespeichert
wird, wie dies nachfolgend beschrieben ist.
-
Als
Ergebnis der Verknüpfung
kann der durch die Markierung gekennzeichnete Datenwert als das
spekulative Ergebnis der Ladeoperation weitergeleitet werden, wenn
der Datenwert verfügbar
ist (beispielsweise in der Registerdatei 116 oder auf dem
Ergebnisbus 130), um es zu ermöglichen, dass abhängige Operationen unter
Anwendung des spekulativen Ergebnisses ausgeführt werden können. In
vielen Fällen
kann dies ermöglichen,
dass abhängige
Operationen unter Anwendung des spekulativen Ergebnisses der Ladeoperation
früher ausgeführt werden,
als wenn ihre Ausführungsform
verzögert
wird, bis das nicht spekulative Ergebnis der Ladeoperation verfügbar ist.
In einigen Ausführungsformen
kann der Datenwert weitergeleitet werden, indem die Ladeoperation
so ausgeführt
wird, dass der Datenwert auf dem Ergebnisbus 130 als das
spekulative Ergebnis der Ladeoperation ausgegeben wird. Beispielsweise
kann in einer Ausführungsform
anstelle des Ausführens dreier
Zyklen, um die Ladeoperation in nicht spekulativer Weise auszuführen (unter
der Annahme, dass die Ladeoperation den Datencache-Speicher 128 trifft),
die Ladeoperation in einem einzelnen Zyklus ausgeführt werden,
indem der Datenwert und eine den Datenwert angebende Markierung
als das Ladeergebnis ausgegeben werden. In anderen Ausführungsformen
kann der Datenwert in einer direkteren Weise weitergeleitet werden,
indem die von der Speicherdateisteuerung 202 ausgegebene
Markierung direkt an die abhängigen Operationen
(Operationen mit einem Operanden, der durch die Ladeoperation erzeugt
wird) als eine spekulative Operandenquelle beim Ausgeben zugeführt wird.
Mittel zum Weiterleiten des Datenwertes können eines oder mehrere der
folgenden Mittel aufweisen: eine Ausgabeeinheit, die ausgebildet
ist, die Ladeoperation so zu modifizieren, dass diese als eine spekulative
Register-Register-Transferoperation (move-Operation) ausgeführt wird,
oder um die Markierung einer abhängigen
Operation als eine spekulative Operandenquellenmarkierung zuzuführen, eine
Disponiereinheit, die ausgebildet ist, die modifizierte Ladeoperation
und/oder die abhängige
Operation in Abhängigkeit
der Verfügbarkeit
des verknüpften
Datenwertes zu modifizieren, und einen Ausführungskern, der ausgebildet
ist, den verknüpften
Datenwert als das Ergebnis der Ladeoperation auszugeben oder die
abhängige
Operation unter Anwendung des verknüpften Datenwertes auszuführen.
-
Wie
gezeigt ist, verfolgt die Speicherdatei 132 die Adressiermuster
in den Operationen, die auf Daten in dem Datencache-Speicher 128 (oder
dem Systemspeicher 200) zugreifen. Als Folge davon können in
den physikalischen Registern gespeicherte Registerwerte mit Werten
verknüpft
werden, die in speziellen Adressen in dem Speicher abgelegt sind.
Zu beachten ist, dass die Speicherdatei 132 es ermöglicht,
Abhängigkeiten
zwischen Operationen, die in dem Ablauf der Operationen relativ
weit entfernt sind, zu verwenden, um Registerwerte mit spekulativen
Ladeergebnissen zu verknüpfen.
Somit kann eine Speicherdatei eine Abhängigkeitsentwicklung beziehungsweise
-historie zwischen Operationen bereitstellen, die durch einige dazwischen
liegende Operationen getrennt sind.
-
3 zeigt
ein Flussdiagramm einer Ausführungsform
eines Verfahrens zum Verknüpfen
des spekulativen Ergebnisses einer Ladeoperation mit einem Registerwert.
Bei 301 wird eine Registermarkierung mit einem Adressiermuster
verknüpft,
wodurch angegeben wird, dass das Register und die Adresse mit hoher
Wahrscheinlichkeit den gleichen Datenwert enthalten. Die Markierung
und das Adressiermustern sind für
eine erste Ladeoperation oder Schreiboperation spezifiziert. Wenn
beispielsweise die erste Operation eine Ladeoperation ist, kann
die Markierung das physikalische Register angeben, das zur Speicherung
des Ergebnisses der Ladeoperation reserviert ist, und das Adressiermuster
kann verwendet werden, um die Adresse für die Ladeoperation zu berechnen.
Wenn stattdessen die erste Operation eine Schreiboperation ist,
kann das Adressiermuster die Adresse des Ziels des Schreibbefehls
angeben, und die Markierung kann die Daten angeben, die durch die
Schreiboperation gespeichert werden. In einigen Ausführungsformen
können
die Markierung und das Adressiermuster verknüpft werden, indem beide in
einem Eintrag in einer Speicherdatei gespeichert werden.
-
Wenn
das Adressiermuster der Ladeoperation mit dem Adressiermuster der
ersten Operation übereinstimmt,
wird das spekulative Ergebnis des Ladebefehls mit dem Datenwert
verknüpft,
der durch die für
die erste Operation spezifizierte Markierung angegeben wird, wie
dies durch 303–305 gezeigt
ist. Wenn das Adressiermuster der Ladeoperation nicht mit jenem
der ersten Operation übereinstimmt,
werden das Adressiermuster der Ladeoperation durch die Markierung
für das
Ziel der Ladeoperation verknüpft
(beispielsweise indem beide in einem Eintrag in eine Speicherdatei
gespeichert werden) wie dies durch 303–311 angegeben ist.
Ferner kann die Ladeoperation normalerweise ausgeführt werden,
indem auf den Datencache-Speicher zugegriffen wird, wie dies bei 313 gezeigt
ist. In einer Ausführungsform
wird das Adressiermuster der Ladeoperation mit mehr als einem früheren Adressiermuster
einer Operation verglichen. Beispielsweise kann das Adressiermuster
der Ladeoperation mit jedem Adressiermuster verglichen werden, das
aktuell in einer Speicherdatei enthalten ist.
-
Wenn
das spekulative Ergebnis der Ladeoperation mit einem Datenwert verknüpft ist,
der durch die Markierung angegeben ist, kann dieser Datenwert zu
einer oder mehreren abhängigen
Operationen als das spekulative Ergebnis der Ladeoperation weitergegeben
werden, wie dies bei 307 angegeben ist. Der Datenwert kann über die
Ergebnisweiterleitung oder durch Weiterleiten einer Angabe, dass
abhängige
Operationen den Datenwert als eine spe kulative Operandenquelle verwenden
können,
weitergegeben werden, wie dies nachfolgend detaillierter erläutert ist.
Wenn der Datenwert über
die Ergebnisweiterleitung weitergegeben wird, können in einer Ausführungsform
abhängige
Operationen unter Anwendung des weitergeleiteten Datenwertes einen
Zyklus nach einer abgeschlossenen Operation, die den Datenwert erzeugt,
ausgeführt
werden. Wenn der Datenwert mittels einer Angabe, dass abhängige Operationen
das physikalische Register als eine spekulative Operandenquelle
verwenden können,
weitergegeben wird, können
abhängige
Operationen ausgegeben werden, sobald die den Datenwert erzeugende
Operation abgeschlossen ist. Das spekulative Ergebnis kann weitergeleitet
werden, bevor das spekulativer Ergebnis verifiziert wird, wie dies
bei 309 angegeben ist. Das spekulative Ergebnis kann ohne
Zugreifen auf den Datencache-Speicher weitergeleitet werden (das
heißt
das spekulative Ergebnis kann früher
als das nicht-spekulative Ergebnis weitergeleitet werden, das durch
Zugreifen auf den Datencache-Speicher erzeugt wird).
-
Wenn
das spekulative Ergebnis als richtig bei 309 erkannt wird,
kann die Ladeoperation ohne Ausführen
eines Datencache-Zugriffs abgeschlossen werden. Wenn jedoch das
spekulative Ergebnis bei 309 als nicht korrekt erkannt
wird, kann der Datencache-Zugriff ausgeführt werden, um das korrekte
Ergebnis zu erhalten (nicht gezeigt). In diesem Falle werden abhängige Operationen,
die unter Anwendung des spekulativen Ergebnisses der Ladeoperation
ausgeführt
wurden, erneut ausgeführt,
wobei das korrekte Ergebnis der Ladeoperation verwendet wird. Zu
beachten ist, dass in einigen Situationen die Verifizierung (bei 309)
durchgeführt werden
kann, bevor der verknüpfte
Datenwert als das spekulative Ergebnis der Ladeoperation (bei 307)
weitergeleitet wird. In derartigen Situationen kann die Ladeoperation
normal ausgeführt
werden, oder, wenn die Verknüpfung
als korrekt erkannt wurde, kann der Datenwert als das nicht-spekulative
Ergebnis der Ladeoperation weitergegeben werden.
-
Um
die Funktionsweise der Speicherdatei
132 noch weiter zu
erläutern,
sie angenommen, dass eine Sequenz aus Operationen, die von der Ausgabeeinheit
104 zu
bearbeiten ist, die folgenden Operationen enthält:
MOV
EBX, (EDX + EAX – Verschiebung
A) | (Ladeoperation
1) |
... | |
MOV
ECX, (EDX + EAX – Verschiebung
A) | (Ladeoperation
2) |
... | |
MOV
(EDX + EAX – Verschiebung
A), EAX | (Schreiboperation
1). |
-
Jede
dieser Operationen kann durch eine oder mehrere dazwischen liegende
Operationen in der Programmreihenfolge getrennt sein. Wie gezeigt
enthält
jede dieser drei Operationen das gleiche Adressiermuster, das heißt EDX +
EAX – Verschiebung
A.
-
Wenn
das Adressiermuster der Ladeoperation 1 der Speicherdatei 132 zugeführt wird,
kann die Speichersteuerung 202 den Speicherdateispeicherbereich 204 im
Hinblick auf ein Adressiermuster überprüfen, das mit dem Adressiermuster
der Ladeoperation 1 übereinstimmt.
Es sei angenommen, dass das Adressiermuster in dem Speicherdateispeicherbereich 204 fehlt,
so dass die Speicherdateisteuerung 202 einen Eintrag reservieren
kann (durch Verwenden eines nicht zugewiesenen Eintrags oder durch Überschreiben
eines bereits zugewiesenen Eintrags), um das gesamte oder einen
Teil des Adressiermusters der Ladeoperation und des physikalischen
Registernamens des physikalischen Zielregisters der Ladeoperation,
wie er durch die Registerzuordnung 134 bereitgestellt wird,
zu speichern. Da die Ladeoperation nicht den Speicherdateispeicherbereich trifft,
kann die Speicherdateisteuerung 202 keine Markierung für diese
Ladeoperation ausgeben.
-
Wenn
die Ladeoperation 2 nachfolgend von der Speicherdatei 132 abgearbeitet
wird, kann ihr Adressiermuster mit dem Adressiermuster mit dem in
Reaktion auf die Ladeoperation 1 zugewiesenen Eintrag übereinstimmen
(unter der Annahme, dass der Eintrag der Ladeoperation nicht bereits
in Reaktion auf eine dazwischen liegende Operation überschrieben
wurde). In Reaktion auf das Treffen des Adressiermusters der Ladeoperation
2 in den Speicherdateispeicherbereich 204 kann die Speicherdateisteuerung 202 den
physikalischen Registernamen des zugewiesenen physikalischen Registers
ausgeben, um das Ergebnis der Ladeoperation 1 zu speichern. Der
physikalische Registername kann verwendet werden, um den Datenwert,
der von der Ladeoperation 1 eingeladen wurde, mit dem spekulativen
Ergebnis der Ladeoperation 2 zu verknüpfen.
-
Wenn
die Schreiboperation 1 von der Speicherdatei 132 abgearbeitet
wird, kann das Adressiermuster in den Eintrag zielen, der in Reaktion
auf die Ladeoperation 1 zugewiesen wurde (wobei wieder angenommen wird,
dass keine dazwischen liegende Operation eine Überschreibung dieses Eintrags
hervorgerufen hat). Anstatt den physikalischen Registernamen des
physikalischen Registers auszugeben, der reserviert wurde, um das
Ergebnis der La deoperation 1 zu speichern (wie dies für die Ladeoperation
2 erfolgt ist), kann die Speicherdateisteuerung 202 den
physikalischen Registernamen 208, der in diesem Eintrag
gespeichert ist, mit dem physikalischen Registernamen des Registers überschreiben,
das die Daten enthält,
die von der Schreiboperation 1 geschrieben werden. Wenn daher nachfolgende
Ladeoperationen diesen Eintrag betreffen, kann die Speicherdateisteuerung 202 den
physikalischen Registernamen des physikalischen Quellenregisters
der Schreiboperation ausgeben, anstatt den physikalischen Registernamen
des Zielregisters der Ladeoperation auszugeben.
-
Da
die Speicherdatei 132 als eine spekulative Struktur verwendet
wird, ist die Genauigkeit der in dem Speicherdateispeicherbereich 204 gespeicherte
Information nicht kritisch für
den korrekten Betrieb des Prozessors 100 (beispielsweise
verursachen Fehlvorhersagen in der Speicherdatei 132 keine
Fehler in dem Ausgangsverhalten des Prozessors 100). Es
kann jedoch wünschenswert
sein, die Genauigkeit der Speicherdatei 132 zu erhöhen, um
die Verbesserung größer zu machen,
die durch das korrekte Verknüpfen
der spekulativen Ergebnisse von Ladeoperationen mit Werten erreicht
wird, die in physikalischen Registern gespeichert sind, und/oder
um Leistungseinbußen
zu reduzieren, die für
fehl vorhergesagte spekulative Verknüpfungen erhalten werden. In
einigen Ausführungsformen
kann die Genauigkeit der Speicherdatei 132 gesteigert werden,
indem Einträge
in dem Speicherdateispeicherbereich 204 als unzulässig erklärt werden,
wenn Aktualisierungen für Register
erkannt werden, die zum Spezifizieren von Adressen verwendet werden.
Beispielsweise kann jedes Adressiermuster eine oder mehrere logische
Registerkennungen enthalten, die verwendet werden, um eine Basis
und einen Index für
die Adressenberechnung anzugeben. Wenn eine nachfolgende Operation
eines der logischen Register modifiziert, die als ein Teil eines
Adressiermusters 206 eines Eintrags ausgegeben sind, kann
dieser Eintrag als ungültig
erklärt
werden. Somit können
logische Registernamen des Zielregisters jeder Operation in die
Speicherdatei 132 eingespeist werden, um Einträge als unzulässig zu
erklären,
wie in 2A gezeigt ist.
-
Ferner
können
in einigen Ausführungsformen
Einträge
in dem Speicherdateispeicherbereich 204 als unzulässig erklärt werden
in Reaktion auf das Erkennen, dass ein weiteres Gerät einen
Schreibzugriff auf Daten an einer speziellen Adresse erhalten will.
In ähnlicher
Weise kann ein Eintrag als unzulässig
erklärt
werden in Reaktion auf das Erkennen einer Fehlvorhersage. Im Allgemeinen
können
viele Bedingungen, etwa jene, die die Genauigkeit der Einträge in dem
Speicherdateispeicherbereich 204 beeinflussen, überwacht
und verwendet werden, um zu bestimmen, wann Einträge als ungültig zu
erklären
sind. Da jedoch die Speicherdatei 132 eine spekulative
Struktur ist, werden in einigen Ausführungsformen einige dieser Überwachungsverfahren nicht
eingerichtet, wenn der zusätzliche
Hardwareaufwand, gewisse Überwachungsverfahren
einzurichten, die potenzielle Verbesserung der Speicherdateigenauigkeit übertrifft.
-
Speicherdateivalidisierung
-
Die
Lade/Schreibeinheit 126 (oder eine weitere Einrichtung
zum Verifizieren der Verknüpfung
innerhalb des Prozessors 100) kann die Prüfung des
Wertes, der in dem durch die Speicherdatei 132 bezeichneten physikalischen
Register gespeichert ist, mit dem spekulativen Ergebnis der Ladeoperation
verifizieren. Wenn die Verknüpfung
nicht korrekt ist, kann die Lade/Schreibeinheit 126 veranlassen,
dass die Ladeoperation erneut ausgegeben wird und/oder kann das
korrekte Ergebnis der Ladeoperation in allgemein adressierter Weise auf
dem Ergebnisbus 130 ausgeben. Das erneute Ausgeben der
Ladeoperation kann bewirken, dass abhängige Operationen, die unter
Anwendung des spekulativen Ergebnisses der Ladeoperation ausgeführt wurden, erneut
ausgegeben und ausgeführt
werden, wobei der aktualisierte nicht spekulative Wert verwendet
wird. Wenn alternativ die Verknüpfung
nicht korrekt ist, kann der Prozessor 100 die Operationen,
die nach der falschen Spekulation auftreten, verwerfen und kann
das Ausführen
dieser Operationen unter Anwendung des korrekten Ergebnisses der
Ladeoperation erneut beginnen.
-
In
einigen Ausführungsformen
kann die Verifizierung der Verknüpfung
in der Lade/Schreibeinheit 126 ausgeführt werden, indem die Operationsadressen
verglichen werden. Die Lade/Schreibeinheit 126 kann die Adressen
diverser Speicheroperationen vergleichen, um zu erkennen, welche
Operationen verknüpft
sein sollten. In einer Ausführungsform
kann die Lade/Schreibeinheit 126 die spekulative Verknüpfung unter
Anwendung von Komparatoren für
die Schreib-zu-Lade-Weiterleitung verifizieren. Die „Schreib-zu-Lade-Weiterleitung”-Komparatoren
können
zusätzlich
zur Verknüpfungsverifizierung
verwendet werden, um das Ergebnis einer jüngeren Ladeoperation aus einem älteren Schreibbefehl
weiterzugeben. Beispielsweise kann die Lade/Schreibeinheit Komparatoren
aufweisen, die verwendet werden, um die Schreib-zu-Lade-Weiterleitung auszuführen. Diese
Komparatoren können
die Adresse jedes anhängigen
Ladebefehls mit Adressen eines Satzes aus älteren Schreiboperationen vergleichen.
Die jüngste
Operation aus dem Satz älterer
Schreiboperationen mit einer Adresse, die mit der Adresse einer
jüngeren
Ladeoperation übereinstimmt,
wird dann gewählt.
Die Daten, die von der ausgewählten
Operation des Satzes aus älteren
Schreiboperationen gespeichert wurden, können dann als das Ergebnis
der Ladeoperation weitergegeben werden.
-
4A zeigt
eine Ausführungsform
einer Lade/Schreibeineinheit 126, die ausgebildet ist, „Schreib-zu-Lade-Weiterleitungs”-(STLF)Komparatoren 280 zum
Ausführen
einer Verknüpfungsverifizierung durch
Vergleichen von Operationsadressen zu verwenden. Wie gezeigt, kann
eine Lade/Schreibeinheit 126 Speicherplatz für anhängige Ladeoperationen
und Schreiboperationen aufweisen. In der dargestellten Ausführungsform
ist ein separater Speicherbereich für die Ladeoperationen (in dem
Ladespeicherbereich 250) und für Schreiboperationen (in dem
Schreibspeicherbereich 260) vorgesehen; jedoch können in
anderen Ausführungsformen
Ladeoperationen und Schreiboperationen in dem gleichen Operationsspeicherbereich
abgelegt werden (beispielsweise kann ein zusätzliches Feld angeben, ob jeweils
eine Operation eine Ladeoperation, eine Speicheroperation oder beides
ist). In einigen Ausführungsformen
kann dieser Operationsspeicherbereich ein Teil einer Disponiereinheit 18 sein.
-
Die
Information, die jede Ladeoperation angibt, kann in einem Eintrag 252 in
dem Ladespeicherbereich 250 gespeichert werden. Diese Information
kann enthalten: eine Markierung 254, die die Ladeoperation angibt,
eine Weiterleitungsmarkierung 256, die eine Speicheroperation
(eine weitere Lade- oder Schreiboperation) angibt mit einem Wert,
mit der das spekulative Ergebnis der Ladeoperation verknüpft ist,
und eine Adresse 258, die die Adresse des Ziels der Ladeoperation
angibt. Andere Felder (nicht gezeigt) können ebenso enthalten sein.
-
Die
Weiterleitungsmarkierung 256 kann von der Speicherdatei 132 in
Reaktion auf einen Treffer in die Speicherdatei 132 für eine Ladeoperation
erzeugt werden (diese Ladeoperation, die ihr spekulatives Ergebnis mit
einem Datenwert verknüpft,
der durch eine Markierung angeben ist, die von der Speicherdatei
bereitgestellt wird, wird als die „verbindende beziehungsweise
verknüpfende
Ladeoperation” bezeichnet).
Zusätzlich
zum Speichern einer Markierung 208 und eines Adressiermusters 206 in
jedem Speicherdateieintrag 220 kann die Speicherdatei 132 eine
Markierung speichern, die die Speicheroperation (bei spielsweise
Ladeoperation oder Schreiboperation) angibt, die verursacht, dass
der Eintrag 220 anfänglich
zugewiesen wurde. Diese Markierung kann als eine Weiterleitungsmarkierung 256 ausgegeben
werden, die die ältere
Speicheroperation angibt, deren Operand mit dem spekulativen Ergebnis
einer jüngeren
Speicheroperation verknüpft
ist.
-
Die
Information, die jede Schreiboperation kennzeichnet, kann in einem
Eintrag 262 in dem Schreibspeicherbereich 260 abgelegt
werden. Diese Information kann eine Markierung 264 beinhalten,
die die Schreiboperation kennzeichnet, und kann eine Adresse 268 aufweisen,
die die von der Schreiboperation angesprochene Adresse kennzeichnet.
-
Die
STLF-Komparatoren 280 sind ausgebildet zu bestimmen, von
welcher Schreiboperation, falls vorhanden, eine Ladeoperation Daten
weiterleiten sollte. Ferner können
die STLF-Komparatoren 280 Verknüpfungen
zwischen spekulativen Ergebnissen von Ladeoperationen und Werten
verifizieren. Diese Verknüpfungen
können
durch eine Speicherdatei 132 erzeugt werden, wie dies zuvor
beschrieben ist. Die STLF-Komparatoren 280 sind ausgebildet,
eine Verknüpfung
zwischen dem spekulativen Ergebnis einer Ladeoperation und einem
Schreiboperanden zu verifizieren, indem nach der Schreiboperation,
falls eine vorhanden ist, gesucht wird, von der diese Ladeoperation
Daten weitergeleitet haben sollte, indem die Adresse 258 der
Ladeoperation mit den Adressen 268 einer oder mehrerer
Schreiboperationen verglichen wird. Wenn keine übereinstimmende Schreiboperation
vorhanden ist (eine Schreiboperation mit der gleichen Adresse wie
die verknüpfende
Ladeoperation), jedoch die Weiterleitungsmarkierung 256 für die Ladeoperation
angibt, dass das spekulative Ergebnis der Ladeoperation mit einem
Datenwert verknüpft
war, können
die STLF-Komparatoren 280 eine Angabe ausgeben, dass die
Verknüpfung
nicht korrekt war (unter der Annahme, dass keine andere Ladeoperation
erkannt wird, von der diese Ladeoperation Daten weitergeleitet haben
könnte,
wie dies nachfolgend beschrieben ist). Wenn eine passende Schreiboperation
ermittelt wird, aber die Markierung 264 der zugehörigen Schreiboperation
nicht mit der Weiterleitungsmarkierung 256 der Ladeoperation übereinstimmt,
können
die STLF-Komparatoren 280 in ähnlicher Weise ein Angabe ausgeben,
dass die Verknüpfung
nicht korrekt ist. Wenn eine passende Schreiboperation gefunden
wird und die Markierung 264 der passenden Schreiboperation
mit der weiterleitenden Ladeoperation übereinstimmt, geben die STLF-Komparatoren 280 eine
Angabe aus, die die Verknüpfung
verifiziert (oder geben einfach keine Angabe aus, dass die Verknüpfung nicht
korrekt ist). In einigen Ausführungsformen
kann zumindest ein Teil des Verknüpfungsverifizie rungsprozesses
im Wesentlichen gleichzeitig zu einem Prozess stattfinden, mit welchem
die Schreib-zu-Lade-Weiterleitung für den Ladebefehl ausgeführt wird.
-
Wenn
das spekulative Ergebnis eines speziellen Ladebefehls nicht mit
einem Operanden einer weiteren Speicheroperation verknüpft ist,
kann die Weiterleitungsmarkierung 256 diese Ladeoperation
auf einen unzulässigen
Wert oder einen Wert gesetzt werden, der anderweitig angibt, dass
keine Verknüpfungsverifizierung für diese
Ladeoperation durchgeführt
werden muss. Für
eine derartige Ladeoperation können
die STLF-Koparatoren 280 eine Schreib-zu-Lade-Weiterleitung
jedoch ohne Verknüpfungsverifizierung
ausführen.
-
Zusätzlich zu
den verifizierenden Verknüpfungen
zwischen den spekulativen Ergebnissen von Ladeoperationen und Schreiboperanden
können
die STLF-Komparatoren 280 auch ausgebildet sein, Verknüpfungen zwischen
den spekulativen Ergebnissen von Ladeoperationen und anderen Ladeoperanden
zu verifizieren. Beispielsweisen kann die Speicherdatei 132 das
spekulative Ergebnis einer jüngeren
Ladeoperation mit den Operanden einer älteren Ladeoperation verknüpfen. Somit
kann die Weiterleitungsmarkierung 256 für die jüngere Ladeoperation die ältere Ladeoperation
kennzeichnen. Die STLF-Komparatoren 280 können eine
derartige Lade-Lade-Verknüpfung
verifizieren, indem erkannt wird, dass keine Schreiboperationen,
die in der Programmreihenfolge zwischen den verknüpften Ladeoperationen
auftreten, Schreibadressen besitzen, die mit der Adresse der jüngeren Ladeoperation übereinstimmen. Ähnlich zur
Verifizierung von Verknüpfungen
zwischen einer jüngeren
Ladeoperation und einer älteren
Schreiboperation, wenn die STLF-Komparatoren 280 bestimmen,
dass die Verknüpfung
nicht korrekt ist (beispielsweise weil die Adresse eine dazwischen
liegenden Schreiboperation mit der Adresse der jüngeren Ladeoperation übereinstimmt),
können
die STLF-Komparatoren 280 eine Angabe ausgeben, dass die
Verknüpfung
nicht korrekt ist.
-
In
einer Ausführungsform
können
die STLF-Komparatoren eine Verknüpfung
zwischen zwei Ladeoperationen verifizieren, indem nach der jüngsten Operation
aus der Menge der Ladeoperationen und Schreiboperationen gesucht
wird, die älter
ist als die verknüpfende
Ladeoperation, die eine Adresse aufweist, die mit der Adresse der
Ladeoperation übereinstimmt,
deren spekulatives Ergebnis mit einem Operanden einer älteren Operation
verknüpft
ist. Wenn die jüngste übereinstimmende
Operation die Operation ist, die von der Weiterleitungsmarkierung 256 gekennzeichnet
ist, die mit der verknüpfenden
Ladeoperation gespeichert ist, können
die STLF-Komparatoren erkennen, dass die Verknüpfung korrekt ist. Wenn keine übereinstimmenden Operationen
ermittelt wird, oder wenn die übereinstimmende
Operation nicht die Operation ist, die von der Weiterleitungsmarkierung 256 gekennzeichnet
ist, können
die STLF-Komparatoren 280 eine Angabe ausgeben, dass die
Verknüpfung
nicht korrekt ist.
-
In
einer weiteren Ausführungsform
können
die STLF-Komparatoren 280 nach der jüngsten übereinstimmenden Ladeoperation
(aus der Menge der Ladeoperationen, die älter sind als die verknüpfende Ladeoperation
und Adressen aufweisen, die mit der Adresse der verknüpfenden
Ladeoperation übereinstimmen)
und der jüngsten übereinstimmenden
Schreiboperation (aus der Menge der Schreiboperationen, die älter sind
als die verknüpfende
Ladeoperation und Adressen aufweisen, die mit der Adresse der verknüpfenden
Ladeoperation übereinstimmen)
suchen. Wenn die jüngste übereinstimmende
Ladeoperation jünger
(in der Programmreihenfolge) als die jüngste übereinstimmende Schreiboperation
ist, und wenn die jüngste übereinstimmende Ladeoperation
die Operation ist, die von der Weiterleitungsmarkierung 256 der
verknüpfenden
Ladeoperation ist, können
die STLF-Komparatoren 280 bestimmen,
dass die Verknüpfung
korrekt ist. Wenn die jüngst übereinstimmende
Ladeoperation älter
als die jüngste übereinstimmende
Schreiboperation ist, dann können
die STLF-Komparatoren 280 bestimmen, dass die Verknüpfung nicht
korrekt ist (beispielsweise weil die verknüpfende Ladeoperation mit der
jüngsten übereinstimmenden
Schreiboperation verknüpft
sein sollte).
-
Wenn
Verknüpfungen
zwischen zwei Ladeoperationen betrachtet werden, können die
STLF-Komparatoren 280 mehrere übereinstimmende Ladeoperationen
vergleichen, da die verknüpfende
Ladeoperation in geeigneter Weise mit einer beliebigen übereinstimmenden
Ladeoperation verknüpft
werden kann, die gemäß der Programmreihenfolge
jünger
ist, als die jüngste übereinstimmende
Schreiboperation, die älter
ist als die verknüpfende
Ladeoperation (im Gegensatz dazu, dass diese lediglich geeignet
mit der jüngsten
der übereinstimmenden älteren Ladeoperationen
verknüpft
ist). Somit können
zusätzlich
zur bloßen
Erkennung der jüngsten übereinstimmenden
Ladeoperation die STLF-Komparatoren einen Satz aus übereinstimmenden
Ladeoperationen erkennen und bestimmen, ob eine aus dieser Menge
die verknüpfte
Ladeoperation ist, die in der Weiterleitungsmarkierung 256 der
verknüpfenden
Ladeoperation gekennzeichnet ist.
-
In
einigen Situationen kann die mit dem Speicher verknüpfte Operation
abgeschlossen sein oder kann aus dem Prozessor 100 entfernt
worden sein, bevor die Verknüpfung
verifiziert ist. Somit können
aufgrund des Entfernens der älteren
Operation die STLF-Komparatoren 280 unter Umständen nicht
in der Lage sein, eine übereinstimmende
Speicheroperation für
eine Ladeoperation zu erkennen, deren spekulatives Ergebnis mit
einem Operanden der entfernten Operation verknüpft ist, selbst wenn die Verknüpfung korrekt
ist. In Situationen, in denen die Verknüpfung nicht verifiziert werden
kann, können
die STLF-Komparatoren 280 eine Angabe ausgeben, dass die
Verknüpfung
nicht korrekt ist.
-
In
Reaktion auf eine Angabe, dass eine Verknüpfung nicht korrekt ist, können die
gesamte oder ein Teil der Speicherdatei 132 als ungültig erklärt werden.
Beispielsweise kann in einer Ausführungsform der spezielle Speicherdateieintrag,
der verwendet wurde, um das spekulative Ergebnis der Ladeoperation
bereitzustellen, als ungültig
erklärt
werden. In anderen Ausführungsformen
kann die gesamte Speicherdatei 132 in Reaktion darauf als
ungültig
erklärt
werden, dass eine nicht korrekte Verknüpfung durch die STLF-Komparatoren 280 erkannt
wird. Des weiteren können
abhängige
Operationen, die von dem Ergebnis der Ladeoperation abhängen, ausgeführt werden
(oder erneut ausgeführt
werden, wenn jene Operationen bereits ausgeführt wurden), wobei das nicht
spekulative Ergebnis der Ladeoperation verwendet wird, anstatt das
spekulative Ergebnis zu verwenden, das von der Speicherdatei 132 erhalten
wurde.
-
Zu
beachten ist, dass obwohl die dargestellte Ausführungsform eine Verknüpfungsverifizierung
unter Anwendung der STLF-Komparatoren beschreibt, in anderen Ausführungsformen
spezielle Komparatoren verwendet werden können, die ansonsten nicht für die Schreib-zu-Lade-Weiterleitung
eingesetzt werden, um eine Verknüpfungsverifizierung
durchzuführen,
indem die Schreiboperationsadressen und/oder Adressiermuster verglichen
werden.
-
In
einigen Ausführungsformen
kann, jedes Mal wenn die Speicherdatei 132 eine Markierung
ausgibt, die einen Datenwert kennzeichnet, mit dem das spekulative
Ergebnis einer Ladeoperation verknüpft werden sollte, die Speicherdatei 132 auch
veranlassen, dass eine Flagge beziehungsweise Marke gesetzt wird,
die mit der Speicheroperation verknüpft ist, mit der die Ladeoperation
verknüpft
wird. Wenn beispielsweise ein spekulatives Ergebnis einer Ladeoperation
mit einem Schreiboperanden einer älteren Schreiboperation in
Reaktion darauf verknüpft
wird, dass das Adressiermuster der Ladeoperation einen Speicherdateieintrag
trifft, kann die Speicherdatei 132 die Markierung des Datenwertes
zur Verknüpfung
mit dem spekulativen Ergebnis eine Angabe ausgeben, dass der ältere Schreibbefehl
mit einer jüngeren
Ladeoperation verknüpft
ist. In Reaktion auf die Angabe kann die Lade/Schreibeinheit 126 eine
Rücknahme-
beziehungsweise Abschlussflagge 269 setzten, die mit der älteren Schreiboperation
verknüpft
ist, wie in 4B gezeigt ist. Die Lade/Schreibeinheit 126 kann
dann fortfahren, die Abschlussflagge 269 gesetzt zu lassen,
bis alle jüngeren
Ladeoperationen, deren spekulative Ergebnisse mit dem Operanden
der Schreiboperation verknüpft
sind, verifiziert sind. Zu beachten ist, dass in einigen Ausführungsformen
eine Abschlussflagge, die mit einer älteren Ladeoperation verknüpft ist (nicht
gezeigt), auch gesetzt werden kann, wenn das spekulative Ergebnis
einer jüngeren
Ladeoperation mit dem Zieloperanden der älteren Ladeoperation verknüpft ist.
-
Die
Lade/Schreibeinheit 126 und/oder die Abschlusswarteschlange 102 können die
Abschlussflagge 269, die mit jeder Schreiboperation verknüpft ist,
verwenden, wenn bestimmt wird, wann ein Eintrag 262, der dieser
Schreiboperation zugewiesen ist, wieder freigegeben wird, und wann
diese Schreiboperation abzuschließen ist. Wenn die Abschlussflagge
einer Schreiboperation gesetzt ist, kann die Lade/Schreibeinheit 126 weiterhin
einen Eintrag 262 für
diese Schreiboperation reserviert halten, so dass die Verknüpfung zwischen dem
Operanden der Schreiboperation und dem spekulativen Ergebnis einer
jüngeren
Schreiboperation verifiziert werden kann. In ähnlicher Weise kann die Abschlusswarteschlange 102 die
Operation unter Umständen nicht
abschließen,
während
die entsprechende Abschlussflagge 269 gesetzt ist. In Ausführungsformen,
in denen eine Abschlussflagge enthalten ist, die mit einer Ladeoperation
verknüpft
ist, können
die Lade/Schreibeinheit 126 und/oder die Abschlusswarteschlange 102 die
mit jeder Ladeoperation verknüpfte
Abschlussflagge verwenden, wenn bestimmt wird, wann ein Eintrag 252,
der dieser Ladeoperation zugewiesen ist, wieder freizugeben ist
und wann diese Ladeoperation abzuschließen ist, in ähnlicher
Weise, wie dies für
die Schreiboperationen beschrieben ist.
-
5A ist
ein Flussdiagramm eines Verfahrens zum Verifizieren einer Verknüpfung zwischen
dem spekulativen Ergebnis einer Ladeoperation mit einem Datenwert,
der durch eine spezielle Markierung gekennzeichnet ist, gemäß einer
Ausführungsform.
Wenn das spekulative Ergebnis einer Ladeoperation mit einem Operanden
einer älteren
(gemäß der Programmreihenfolge)
Speicheroperation verknüpft
ist, kann die Markierung der älteren
Operation verknüpften
Operation mit der verknüpfenden
(jüngeren)
Ladeoperation gespeichert werden, wie dies bei 321 und 323 gezeigt
ist. Beispielsweise kann eine Speicherdatei, etwa die in 2A gezeigte
Datei, verwendet werden, um das spekulative Ergebnis der verknüpfenden
Ladeoperation mit dem Datenwert zu verknüpfen, der von einer älteren Schreiboperation
gespeichert wird, oder mit dem Datenwert zu verknüpfen, der
von einer älteren
Ladeoperation eingeladen wird. Die Markierung der älteren Ladeoperation oder
Schreiboperation kann mit der verknüpfenden Ladeoperation gespeichert
werden (beispielsweise in einer Disponiereinheit und/oder in der
Lade/Schreibeinheit), um anzugeben, mit welcher Operation diese
Ladeoperation verknüpft
ist.
-
Zu
einem gewissen Punkt kann die Lade/Schreibeinheit die Verknüpfung zwischen
der verknüpfenden Ladeoperation
und der mit der älteren
Operation verknüpften
Operation verifizieren, wie dies bei 325 gezeigt ist. In
einigen Ausführungsformen
kann die Lade/Schreibeinheit STLF-Komparatoren verwenden, um diese Verifizierung
auszuführen.
Zusätzlich
zu dem Ausführen
der Verknüpfungsverifizierung
können
die STLF-Komparatoren auch eingesetzt werden, um eine Schreib-zu-Lade-Weiterleitung
auszuführen.
Alternativ kann die Lade/Schreibeinheit eine spezielle Logik aufweisen,
die lediglich die Verknüpfungsverifizierung
durchführt.
-
Wenn
die Lade/Schreibeinheit bestimmt, dass die Verknüpfung korrekt ist, wie dies
bei 325 erkannt wird, kann die Lade/Schreibeinheit bestimmen,
dass das spekulative Ergebnis der Ladeoperation nicht spekulativ
ist (zumindest im Hinblick auf die Spekulation, die von der Speicherdatei
ausgeführt
wird), wie dies bei 327 gezeigt ist. In einigen Ausführungsformen
kann die Lade/Schreibeinheit anderen Komponenten (beispielsweise
der Disponiereinheit) in dem Prozessor anzeigen, dass die Verknüpfung verifiziert
ist.
-
Wenn
die Lade/Schreibeinheit bestimmt, dass die Verknüpfung nicht korrekt ist, wie
dies bei 325 und 329 gezeigt ist, kann die Lade/Schreibeinheit
eine Angabe ausgeben, dass die Verknüpfung nicht korrekt ist (beispielsweise
an die Disponiereinheit und/oder Ausgabeeinheit). In Reaktion auf
diese Angabe wird ein neues Ergebnis der verknüpfenden Ladeoperation erzeugt.
Wenn beispielsweise STLF-Komparatoren eingesetzt werden, um die
Verknüpfung
zu verifizieren, können
während
des Verifizierungsvorganges die STLF-Komparatoren eine Schreiboperation
erkannt haben, von der die verknüpfende
Ladeoperation Daten weitergeleitet haben sollte. Die durch die erkannte
Schreiboperation gespeicherten Daten können als das nicht spekulative Ergebnis
der Ladeoperation weitergeleitet werden. Ferner kann die Speicherdatei
(oder zumindest ein Eintrag in der Speicherdatei) in Reaktion auf
das Erkennen der nicht korrekten Verknüpfung als ungültig erklärt werden.
-
5B ist
ein Flussdiagramm eines Verfahrens gemäß einer Ausführungsform
zum Abschließen
einer Speicheroperation auf der Grundlage darauf, ob eine Verknüpfung, an
der diese Speicheroperation beteiligt ist, verifiziert ist. Wenn
das spekulative Ergebnis einer jüngeren
Ladeoperation mit Daten verknüpft
ist, auf denen von einer älteren
Speicheroperation operiert wird (beispielsweise geladen oder geschrieben),
wird eine Flagge, die mit der älteren
Operation verknüpft
ist (die dazu verknüpfte
Operation), gesetzt, wie dies bei 331–333 gezeigt ist.
In einigen Ausführungsformen
kann diese Flagge in einer Disponiereinheit oder der Lade/Schreibeinheit
enthalten sein.
-
Wenn
die Flagge der Operation gesetzt ist, kann der Abschluss der Operation
verzögert
werden, bis die Verknüpfung
zwischen dem spekulativen Ergebnis der jüngeren Ladeoperation und den
Daten, auf denen von der älteren
Operation operiert wird, verifiziert ist, wie dies bei 335. 337 angegeben
ist. Ansonsten kann die ältere
Operation in normaler Weise abgeschlossen werden, wie dies bei 339 gezeigt
ist.
-
Obwohl
die vorhergehenden Beispiele eine Verknüpfungsverifizierung unter Anwendung
von Adressenvergleichsvorgängen
(das heißt
das Vergleichen von Adressen, auf die von Speicheroperationen zugegriffen
wird) durchgeführt
wird, kann in anderen Ausführungsformen
die Verknüpfungsverifizierung
unter Anwendung von Wertevergleichen ausgeführt werden (das heißt das Vergleichen
von Datenwerten, die sich aus den Speicheroperationszugriffen ergeben).
Beispielsweise kann die Verknüpfung
für eine
Ladeoperation verifiziert werden, die keinen speziellen Registerwert
für die
Adressenberechnung verwendet, indem dieser Registerwert für die Verifizierung
der spekulativen Verknüpfung
verwendet wird. Das Register, das nicht für die Adressenberechnung verwendet
wird, kann verwendet werden, um den Wert zu speichern, der spekulativ
mit dem Ergebnis der Ladeoperation verknüpft wird. Wenn das tatsächliche
Ergebnis der Ladeoperation erhalten wird, kann die Lade/Schreibeinheit
(oder der Ausführungskern)
den Wert in dem ansonsten nicht benutzen Register mit dem tatsächlichen
Ergebniswert vergleichen. Wenn die zwei gleich sind, ist die Verknüpfung korrekt.
Ansonsten wird die Verknüpfung
nicht korrekt und das korrekte nicht spekulative Ergebnis der Ladeoperation kann
in allgemein adressierter Weise ausgegeben werden, um die Richtigkeit
im ganzen Prozessor mitzuteilen. Ferner kann die gesamte oder ein
Teil der Speicherdatei als unzulässig
erklärt
werden, in Reaktion auf das Erkennen einer nicht korrekten Verknüpfung.
-
Das
Register, das zum Speichern des spekulativ verknüpften Ergebniswertes verwendet
wird, kann in einer Ausführungsform
das Indexregister sein. Die Speicherdateisteuerung kann ausgebildet
sein, lediglich Einträge
in dem Speicherdateispeicherbereich für Speicheroperationen zu reservieren,
die nicht das Indexregister für
die Adressenberechnung verwenden.
-
In
einer Ausführungsform
kann die wertegestützte
Verknüpfungsverifizierung
in der Lade/Schreibeinheit 126 ausgeführt werden, wie dies in 6A gezeigt
ist. Hier enthält
die Lade/Schreibeinheit 126 spezielle Wertekomparatoren 282,
die ausgebildet sind, den tatsächlichen
Wert 255, der von der Ladeoperation eingeladen wird (entweder
durch eine Schreib-zu-Lade-Weiterleitung oder durch Zugreifen auf
den Daten-Speicher und/oder den Speicher), mit dem spekulativen
Ergebnis 257 der Ladeoperation zu vergleichen. Wenn die
zwei Werte gleich sind, bestimmt die Lade/Schreibeinheit 126,
dass die Verknüpfung
korrekt ist. Ansonsten kann die Lade/Schreibeinheit 126 das
korrekte Ergebnis der Ladeoperation, der eingeladene Wert 255,
in allgemein adressierter Weise ausgeben, so dass beliebige abhängige Operationen
unter Anwendung des korrekten Wertes ausgeführt (oder erneut ausgeführt) werden
können.
Die Lade/Schreibeinheit 126 kann ferner ein Signal an die
Ausgabeeinheit 104 zuführen,
das angibt, dass ein oder mehrere Einträge in der Speicherdatei 132 ungültig erklärt werden
sollten, in Reaktion auf das Erkennen einer nicht korrekten Verknüpfung.
-
Alternativ
kann die wertegestützte
Verknüpfungsverifizierung
in dem einen oder den mehreren Ausführungskernen 124 ausgeführt werden,
wie in 6B gezeigt ist. In diesen Ausführungsformen
kann eine Ladeoperation, deren spekulatives Ergebnis mit einem Datenwert
verknüpft
ist, der durch die Speicherdatei 132 gekennzeichnet ist,
in eine Kombination aus Ladeoperation und Vergleichsoperation durch
die Ausgabeeinheit 104 umgewandelt werden. Diese Operationen
können
an die Lade/Schreibeinheit 126 beziehungsweise eine Funktionseinheit 126 ausgegeben
werden. Die Lade/Schreibeinheit 126 kann die Ladeoperation
in normaler Weise ausführen.
Wenn das nicht spekulative Ergebnis der Ladeoperation verfügbar ist,
kann die Vergleichsoperation ausgeführt werden, indem auf das spekulative
Ergebnis über
das nicht verwendete Adressenberechnungsregister (beispielsweise
das Indexregister) zugegriffen wird und das spekulative Ergebnis
mit dem nicht spekulativen Ergebnis, das von der Lade/Schreibeinheit 126 erzeugt
wird, verglichen wird. Wenn die beiden gleich sind, ist die Verknüpfung korrekt;
ansonsten ist die Verknüpfung
nicht korrekt.
-
7 ist
ein Flussdiagramm eines Verfahrens zum Verifizieren einer Verknüpfung zwischen
einem spekulativen Ergebnis einer Ladeoperation mit einem Datenwert,
der durch eine spezielle Markierung gekennzeichnet ist, wobei Wertevergleiche
gemäß einer
Ausführungsform
eingesetzt werden. Wenn das spekulative Ergebnis einer Ladeoperation
mit einem Operanden einer älteren
Speicheroperation (beispielsweise einer Speicherdatei) verknüpft ist,
kann ein Operand, der nicht für
die Adressenberechnung der Ladeoperation benötigt wird, verwendet werden,
um das spekulative Ergebnis der Ladeoperation zu speichern, wie
dies bei 341–343 gezeigt
ist. Wenn beispielsweise die Ladeoperation nicht das Indexregister
für die
Adressenberechnung verwendet, kann das Indexregister Speicherung
des spekulativen Ergebnisses der Ladeoperation verwendet werden.
-
Wenn
das tatsächliche
Ergebnis der Ladeoperation mit dem spekulativen Ergebnis der Ladeoperation übereinstimmt
(beispielsweise wie dies durch Ausführen eines Wertevergleichs
in einer Funktionseinheit erkannt wird), ist die Verknüpfung korrekt
und das spekulative Ergebnis wird nicht spekulativ, wie dies bei 345 und 347 angegeben
ist. Ansonsten ist die Verknüpfung
nicht korrekt und das tatsächliche
Ergebnis der Ladeoperation kann in allgemein adressierter Weise
auf einem Ergebnisbus ausgegeben werden, um das korrekte Ergebnis
an beliebige abhängige
Operationen weiterzugeben, wie dies bei 349 angegeben ist.
-
Weiterleitung
eines spekulativen Ergebnisses einer Ladeoperation als ein Quellenoperand
-
In
diversen Ausführungsformen
kann eine Verknüpfung
des spekulativen Ergebnisses einer Ladeoperation mit einem Registerdatenwert
auf viele unterschiedliche Weisen durchgeführt werden. In einigen Ausführungsformen
können
Werte verknüpft
werden, indem zwei Quellen für
einen Operanden spezifiziert werden: eine spekulative Quelle und
eine nicht spekulative Quelle. Die spekulative Quelle kann mit dem
Datenwert verknüpft
sein. Spekulative Quellen können
für Ladeoperationen
vorgesehen werden, um den Datenwert anzugeben, der mit dem spekulativen
Ergebnis der Ladeoperation verknüpft
ist. In einigen Ausführungsformen
werden spekulative Quellen für
Operationen vorgesehen, die von einer derartigen Ladeoperation abhängig sind.
Folglich können
gewisse Operanden zwei Markierungen besitzen: eine, die die spekulative
Quelle angibt, und eine, die die nicht spekulative Quelle angibt.
In derartigen Ausführungsformen
kann jede Disponiereinheit 118 einen Markie rungsspeicherplatz
für sowohl
den spekulativen Operanden als auch den nicht spekulativen Operanden bereitstellen,
wie in 8 gezeigt ist.
-
8 zeigt
eine Ausführungsform
einer Disponiereinheit 118, die in einem Prozessor enthalten
sein kann. In der dargestellten Ausführungsform umfasst die Disponiereinheit 118 eine
Disponiersteuerung 502 und einen Operationsspeicherbereich 504.
In Reaktion darauf, dass die Ausgabeeinheit 104 eine Operation
ausgibt, kann die Disponiersteuerung 502 einen Eintrag
in dem Operationsspeicherbereich 504 reservieren, um Information
entsprechend dieser Operation zu speichern. Beispielsweise kann
ein Eintrag 522 in dem Operationsspeicherbereich 504 ein
Operationskodierungs- beziehungsweise Opcode-Feld 510,
ein oder mehrere Operandenfelder und ein Ergebnisfeld 516 aufweisen.
Das Ergebnisfeld 516 speichert eine Markierung, die das
physikalische Register kennzeichnet, in dem das Ergebnis der Operationen
dieses Eintrags gespeichert werden soll. Wenn die Operation ausgegeben
wird, wird diese Markierung zu jeder Disponiereinheit 118 auf einem
oder mehreren der Markierungsbusse 520 weitergeleitet.
Jede Disponiereinheit kann die Markierungen, die auf den Markierungsbussen 520 weitergeleitet
werden, mit den Operandenmarkierungen (sowohl spekulative als auch
nicht spekulative, wie dies nachfolgend beschrieben ist) für anhängige Operationen
vergleichen, um zu bestimmen, wann die Operanden der abhängigen Operationen
verfügbar
sind. Folglich kann eine Operation daraufhin ausgegeben werden (oder
als bereit für
die Ausgabe markiert werden) in Reaktion darauf, dass seine Quellenoperandenmarkierungen
auf dem Markierungsbus 520 auftauchen.
-
Jedes
oder alle Operandenfelder können
Speicherplatz für
eine spekulative Markierung enthalten, die eine spekulative Operandenquelle
angibt, und Speicherplatz für
eine nicht spekulative Markierung beinhalten, die eine nicht spekulative
Operandenquelle kennzeichnet. In dem dargestellten Eintrag 522 werden
die zwei Quellen des Operanden 1 durch die nicht spekulative Markierung 512 und
durch die spekulative Markierung 514 gekennzeichnet. Die
Disponiereinheit 118 ist ausgebildet, eine Operation in
Reaktion darauf auszugeben, dass eine oder mehrere Angaben auftreten,
dass die Operanden der Operation verfügbar sind. Ein Operand ist
verfügbar,
wenn dieser von einer spekulativen Quelle oder einer nicht spekulativen
Quelle verfügbar
ist. Wenn ein Operand sowohl von einer spekulativen Quelle als auch
von einer nicht spekulativen Quelle verfügbar ist, wird die Operation
unter Anwendung des Wertes ausgeführt, der von der nicht spekulativen
Quelle verfügbar
ist. In einigen Ausführungsformen
kann die Disponiereinheit 118 das Ausgeben von Opera tionen,
deren nicht spekulative Operandenquellen verfügbar sind, gegenüber Operationen
bevorzugt ausgeben, für
die lediglich spekulative Operandenquelle verfügbar sind.
-
Zu
beachten ist, dass eine Operation gewisse Operanden beinhalten kann,
die spekulative Quellen und andere Operanden aufweisen können, die
keine spekulativen Quellen besitzen. Des weiteren ist zu beachten,
dass die gleiche Quelle eine spekulative Quelle für eine Operation
und eine nicht spekulative Quelle für eine weitere Operation aufweisen
kann. In einigen Ausführungsformen
wird, wenn eine Operation ausgeführt
wird, lediglich ein Datenwert für
jeden Operanden eingelesen (beispielsweise kann der Ausführungskern 124 die
spekulative Operandenquelle oder die nicht spekulative Operandenquelle,
aber nicht beide, auslesen). Dies macht es unnötig, weitere Anschlüsse beziehungsweise
Ports in die Registerdatei 116 mit aufzunehmen. Spekulative
Quellen und physikalische Quellen können in den gleichen Speicherbereichen
(beispielsweise in der Registerdatei 116) gespeichert werden
und spekulative Quellen müssen
nicht markiert oder anderweitig als spekulative Quellen in einigen
Ausführungsformen
gekennzeichnet werden.
-
In
vielen Ausführungsformen
ist die Disponiereinheit 118 ausgebildet, Einträge zu bewahren,
die Operationen zugewiesen sind, nachdem diese Operationen an den
einen oder den mehreren Ausführungskerne 124 ausgegeben
wurden. Wenn eine Operation von der Disponiereinheit 118 in
Reaktion auf die Verfügbarkeit eines
oder mehrerer spekulativer Operanden ausgegeben wird, kann die Disponiereinheit
einen Eintrag 522 für
diese Operation bereithalten, so dass die Operation erneut ausgegeben
werden kann, wenn die spekulative Verknüpfung nicht korrekt ist. In
einigen Ausführungsformen
ist die Lade/Schreibeinheit ausgebildet, spekulative Verknüpfungen
zu verifizieren, die auftreten, wenn ein spekulatives Ladeergebnis
mit einem Datenwert verknüpft
wird, der in einem physikalischen Register gespeichert ist. Wenn
die Verknüpfung
korrekt ist, ist die Lade/Schreibeinheit ausgebildet, ein nicht
spekulatives Ergebnis der Ladeoperation nicht allgemein adressiert auszugeben,
da das korrekte Ergebnis bereits durch die Verknüpfung verfügbar ist. Wenn dies der Fall
ist, können
die eine oder die mehreren Disponiereinheiten 118 ausgebildet
sein, eine Operation erneut auszugeben, wenn eine nicht spekulative
Operandenquelle kennzeichnende Markierungen für diese Operation auf dem Ergebnisbus 130 allgemein
adressiert ausgegeben wird.
-
Alternativ
kann die Lade/Schreibeinheit das Ergebnis des Schreibbefehls zusammen
mit einem zusätzlichen
Statusbit allgemein adressiert ausgeben, das die Allgemeinadressierung maskiert
oder angibt, dass die spekulative Verknüpfung korrekt war und dass
die Ladeoperation nicht erneut ausgegeben werden sollte. Wenn jedoch
die spekulative Verknüpfung
nicht korrekt ist, kann die Lade/Schreibeinheit einen Zugriff auf
den Datencache-Speicher
und/oder auf den Speicher ausführen,
um damit das korrekte Ergebnis für
die Ladeoperation zu erhalten und kann das Ergebnis der Ladeoperation
allgemein ausgeben. In Ausführungsformen,
in denen Ergebnisse stets allgemein beziehungsweise allgemein adressiert
ausgegeben werden, kann das zusätzliche
Statusbit angeben, dass die spekulative Verknüpfung nicht korrekt war. Somit
können
in vielen Ausführungsformen
die gleichen Markierungs- und Ergebnisbusse, die bereits in einem
Prozessor verfügbar
sind, verwendet werden, um anzugeben, dass eine spekulative Verknüpfung nicht
korrekt ist. In anderen Ausführungsformen
können
alternative Mechanismen zur Kennzeichnung (beispielsweise unter
Anwendung separater Ergebnisbusse 130 und/oder Ergebnismarkierungsbusse 520 zur
Angabe von Fehlvorhersagen) eingerichtet werden.
-
9 zeigt
ein Flussdiagramm einer Ausführungsform
eines Verfahrens zum Ausgeben und erneutem Ausgeben von Operationen,
die sowohl spekulative als auch nicht spekulative Operandenquellen
aufweisen. Wenn eine spekulative Operandenquelle einer Operation
verfügbar
ist, kann die Operation ausgegeben werden, wie dies bei 801–803 gezeigt
ist. Eine spekulative Operandenquelle einer Operation wird verfügbar, wenn ein
Datenwert in einem speziellen Register innerhalb der Registerdatei
vorhanden ist, oder wenn der Datenwert auf dem Ergebnisbus ausgegeben
wird. Zu beachten ist, dass in einigen Situationen die nicht spekulative Operandenquelle
der Operation für
den gleichen Operanden vor der spekulativen Operandenquelle verfügbar sein
kann. In diesen Situationen wird die Operation ausgegeben, bevor
die spekulative Operandenquelle verfügbar wird. Eine darauf folgende
Verfügbarkeit
der spekulativen Quelle führt
in einigen Ausführungsformen nicht
zu einer erneuten Ausgabe der Operation.
-
Die
ausgegebene Operation wird unter Anwendung des Datenwertes ausgeführt, der
von der spekulativen Operandenquelle bereit gestellt wird, wie dies
bei 805 gezeigt ist, und das Ergebnis der Operation wird allgemein
ausgegeben, wie dies bei 807 angegeben ist. Das allgemein
adressierte Ausgeben des Ergebnisses der Operation ermöglicht es,
dass abhängige
Operationen ausgeführt
werden können.
-
Wenn
zu einer gewissen späteren
Zeit die spekulative Quelle als nicht korrekt erkannt wird (beispielsweise
sind der von der spekulativen Quelle und der nicht spekulativen
Quelle be reit gestellte Datenwert nicht gleich, oder eine spekulative
Verknüpfung,
die zum Erzeugen der Markierung der spekulativen Quelle verwendet
wurde, ist nicht korrekt), wird die Markierung der nicht spekulativen
Quelle als eine Angabe dafür
allgemein ausgegeben, dass der Wert der spekulativen Quelle nicht
korrekt ist. Das allgemeine Ausgeben der Markierung der nicht spekulativen
Quelle beinhaltet das allgemein adressierte Ausgeben der Markierung
derart, dass die Disponiereinheit(en) mit einem erneuten Ausgeben
der Operation reagieren. Beispielsweise kann in einigen Ausführungsformen
die Disponiereinheit antworten, wenn die Markierung allgemein ausgegeben
wird und eine Statusflagge, die mit der Markierung verknüpft ist,
auf einen gewissen Wert gesetzt ist, während in anderen Ausführungsformen
es keine zugeordnete Statusflagge gibt und eine Disponiereinheit
kann ausgebildet sein, eine Operation jedes Mal neu auszugeben,
wenn die nicht spekulative Markierung allgemein ausgegeben wird.
-
Bestimmen des Bereitseins für die Ausgabe
auf der Grundlage spekulativer oder nicht spekulativer Quellen
-
In
einigen Ausführungsformen,
wie dies in 10 dargestellt ist, ist die
Disponiereinheit 118 ausgebildet, das Bereitsein eines
gegebenen Operanden zu bestimmen, wie dies durch die Verfügbarkeit
des Operanden der spekulativen Quelle oder des Operanden der nicht
spekulativen Quelle angegeben ist, wobei nicht beides gleichzeitig
auftritt. Dies kann die nachteilige Auswirkungen des Einladens auf
den Ergebnismarkierungsbus 520 verringern.
-
In 10 bestimmt
die Disponiereinheit das Bereitsein eines Operanden einer Operation,
indem die Markierung 514 der spekulativen Quelle des Operanden
oder die Markierung 512 der nicht spekulativen Quelle des
Operanden, wie dies durch den Multiplexer 534 ausgewählt wird,
mit den Markierungen verglichen wird, die gleichzeitig auf dem Ergebnismarkierungsbus
beziehungsweise -bussen 520 vorhanden sind, wobei der Komparator 532 verwendet
wird. Somit kann die Disponiereinheit bestimmen, ob diese Operation
für die
Ausgabe bereit ist, indem die Verfügbarkeit der spekulativen Quelle
und die Verfügbarkeit
der nicht spekulativen Quelle, jedoch nicht beides, auf dem Ergebnismarkierungsbus 520 überwacht
wird. Um daher anstatt allgemeines Ausgeben einer Ergebnismarkierung
auf dem Ergebnismarkierungsbus mit sowohl der spekulativen Quellenmarkierung
des Operanden und der nicht spekulativen Quellenmarkierung des Operanden
zu vergleichen, kann die Disponiereinheit allgemein ausgegebene
Ergebnismarkierungen mit nur einer der Quellenmarkierungen des Operanden
vergleichen. Wenn alle Operanden einer Operation verfügbar sind
(entweder aus spekulativen oder nicht spekulativen Quellen) kann
die „Fertig”- beziehungsweise
Bereitflagge 508 für
diese Operation gesetzt werden, wodurch angegeben wird, dass diese
Operation für
die Ausgabe bereit ist.
-
Eine
Erkennungslogik für
unkorrekte Spekulation 530 kann steuern, ob die Disponiereinheit
das Bereitsein einer Operation für
die Ausgabe auf der Grundlage der spekulativen Quellen der Operation
oder der nicht spekulativen Quellen bestimmt. Die Detektionslogik
für unkorrekte
Spekulation 530 kann für
jede anhängige
Operation in den Ausführungsformen
in der Disponiereinheit doppelt vorgesehen sein, so dass jede Operation
unabhängig
spekulative oder nicht spekulative Quellen auf dem Ergebnisbus 520 überwachen
kann. In anderen Ausführungsformen
werden alle anhängigen
Operationen in der gleichen Weise gesteuert, so dass alle Operationen
spekulative Quellen (wenn verfügbar)
oder alle Operationen nicht spekulative Quellen überwachen.
-
Die
Detektionslogik für
unkorrekte Spekulation 530 kann ausgebildet sein, das Verhalten
der Disponiereinheit 118 so zu steuern, dass die Disponiereinheit
die Bereitschaft von Operationen für die Ausgabe auf der Grundlage
der Verfügbarkeit
jeder spekulativen Quellen bestimmt, solange keine nicht korrekten
Spekulationen erkannt werden. Wenn eine nicht korrekte Spekulation
erkannt wird, kann die Detektionslogik für unkorrekte Spekulation 530 auf
das Überwachen
im Hinblick auf die Bereitschaft für nicht spekulative Quellen „umschalten”. Wenn
beispielsweise die Lade/Schreibeinheit 126 eine nicht korrekte
Verknüpfung über Adressen- oder
Wertevergleich erkennt, kann die Detektionslogik für unkorrekte
Spekulation 530 umschalten, um nicht spekulative Quellen
zum Bestimmen der Bereitschaft einer Operation für die Ausgabe zu verwenden.
Das Erkennen der nicht korrekten Verknüpfung kann auch bewirken, dass
die gesamte oder ein Teil der Speicherdatei 132 oder eine
andere Quelle der Spekulation als ungültig erklärt wird. Die Detektionslogik
für die
unkorrekte Spekulation 530 fährt dann fort, eine Überwachung
im Hinblick auf nicht spekulative Quellen anstatt auf spekulative
Quellen durchzuführen,
bis die Quelle der Spekulation zurückgesetzt ist oder anderweitig
eine Korrektur im Hinblick auf die nicht korrekte Spekulation ausgeführt ist.
-
Wenn
die Detektionslogik 530 für unkorrekte Spekulation vom Überwachen
im Hinblick auf die Verfügbarkeit
spekulativer Quellen auf die Überwachung
im Hinblick auf die Verfügbar keit
nicht spekulativer Quellen „umschaltet”, fehlt
der Disponiereinheit 118 unter Umständen Information über die
Verfügbarkeit
der nicht spekulativen Quellen. In einigen Ausführungsformen nimmt die Disponiereinheit 118 an,
dass alle nicht spekulativen Quellen verfügbar sind und dass die Operation
somit für
die Ausgabe bereit ist. Wenn diese Annahme nicht korrekt ist, kann
die Operation zu einer späteren
Zeit erneut ausgegeben werden, wenn die nicht spekulativen Quellen
tatsächlich
verfügbar
sind (beispielsweise wie dies erkannt wird, wenn die Markierungen
der nicht spekulativen Quellen auf dem Ergebnismarkierungsbus 520 allgemein
ausgegeben werden).
-
Spekulative Registerzuordnung
-
11 zeigt
eine weitere Ausführungsform
einer Ausgabeeinheit 104, die in einem Prozessor 100 vorgesehen
ist. In dieser Ausführungsform
umfasst die Disponiereinheit 104 eine Registerzuordnung 134,
eine Speicherdatei 132 und eine spekulative Registerzuordnung 800.
Wie die Registerzuordnung 134 wandelt die spekulative Registerzuordnung 800 logische
Registernamen in physikalische Registernamen um. Jedoch kann die
spekulative Registerzuordnung 800 einen logischen Registernamen
spekulativ einem physikalischen Registernamen zuordnen (beispielsweise
in Reaktion darauf, dass die Speicherdatei 132 einen in
einem physikalischen Register gespeicherten Wert mit einem spekulativen
Ergebnis einer Ladeoperation verknüpft). Die spekulative Registerzuordnung 800 ermöglicht es,
dass spekulative Operandenwerte für Operationen, die keine Adressiermuster
enthalten, mit Registerdatenwerten verknüpft werden. Wenn beispielsweise
eine gültige spekulative
Zuordnung für
das logische Register EAX vorhanden ist, kann eine Operation mit
EAX als Quellenoperanden zwei Quellenmarkierungen aufweisen: eine
nicht spekulative Markierung, die von der Registerzuordnung 134 bereit
gestellt wird, und eine spekulative Markierung, die von der spekulativen
Registerzuordnung 800 bereit gestellt wird. Da die Operation
ausgegeben werden kann, sobald die spekulative Quelle verfügbar ist,
kann die spekulative Registerzuordnung 800 Datennutzer
direkt mit einem Datenerzeuger über
eine spekulative Operandenmarkierung verknüpfen, wobei die dazwischen
liegenden Ladeoperationen und Schreiboperationen umgangen werden.
Zu beachten ist, dass die spekulative Zuordnung Schreibmarkierungen,
die nicht den physikalischen Registernamen entsprechen, in einigen
Ausführungsformen
zuordnen kann (beispielsweise in Ausführungsformen, in denen ein Umordnungspuffer
vorhanden ist, der Speicherplatz für spekulative Registerzustände enthält).
-
Die
spekulative Registerzuordnung 800 umfasst eine spekulative
Registerzuordnungssteuerung 802 und einen spekulativen
Registerzuordnungsspeicherbereich 804. Der spekulative
Registerzuordnungsspeicherbereich kann einen oder mehrere Einträge 820 aufweisen.
Jeder Eintrag 820 kann einem speziellen logischen Register
zugeordnet sein und kann eine physikalische Registerkennung 812 des
physikalischen Registers angeben, das dem logischen Register aktuell
spekulativ zugeordnet ist. Jeder spekulative Registerzuordnungseintrag 820 kann
ferner eine Angabe (nicht gezeigt) beinhalten, in Bezug darauf,
ob der Eintrag aktuell gültig
ist oder nicht. In einer Ausführungsform
umfasst der spekulative Registerzuordnungsspeicherbereich 804 einen
Eintrag für
jedes logische Register. In anderen Ausführungsformen kann der spekulative
Registerzuordnungsspeicherbereich 804 weniger Einträge aufweisen,
als es logische Register gibt. In derartigen Ausführungsformen
kann jeder Eintrag 820 eine Angabe für das logische Register enthalten,
welchem der Eintrag aktuell zugeordnet ist.
-
Die
spekulative Registerzuordnungssteuerung 802 ist ausgebildet,
einen Eintrag 820 in Reaktion auf eine Angabe zu aktualisieren,
dass ein spekulatives Ergebnis einer Ladeoperation mit einem Datenwert
verknüpft
ist, der durch einen speziellen physikalischen Registernamen gekennzeichnet
ist. In der dargestellten Ausführungsform
wird diese Angabe von der Speicherdatei 132 bereit gestellt.
Der Eintrag 820 zur Aktualisierung ist der Eintrag für das logische
Register, das als das Ziel der Ladeoperation spezifiziert ist. Der
Eintrag kann so aktualisiert werden, dass die physikalische Registerkennung,
die von der Speicherdatei 132 für diese Ladeoperation ausgegeben
wird, enthalten ist. In anderen Ausführungsformen können spekulative
Registerzuordnungseinträge
in Reaktion auf Angaben erzeugt werden, die nicht von einer Speicherdatei 132 bereit
gestellt werden (in einigen dieser Ausführungsformen weist die Ausgabeeinheit 104 keine
Speicherdatei auf). Beispielsweise kann die Ausgabeeinheit 104 einen
bedingten Transfer beziehungsweise move-Befehl erkennen CMOV EAX,
EBX if Z, und in Reaktion darauf angeben, dass der spekulative Registerzuordnungseintrag für EAX das
physikalische Register bezeichnen sollte, das aktuell EBX zugeordnet
ist. Im Allgemeinen können spekulative
Registerzuordnungseinträge
in Reaktion auf einen beliebigen Vorhersagemechanismus erzeugt werden,
der angibt, dass ein logisches Register spekulativ auf eine spezielles
physikalisches Register abgebildet werden sollte.
-
In
einigen Ausführungsformen
werden Operationen der spekulativen Registerzuordnung 800 während des
gleichen Taktzyklus zugeführt,
in welchem diese einer Registerzuordnung 134 zugeführt werden.
Wenn die Registerzuordnung 134 die nicht spekulative Registerumbenennung
für eine
Operation ausführt,
kann die spekulative Registerzuordnung 800 angeben, ob
irgendwelche logischen Register, die als eine der spekulativen Quellenoperanden
einer Operation speichernde Register spezifiziert sind, mit einem
speziellen physikalischen Register verknüpft sind. Wenn ein gültiger Eintrag
im spekulativen Registerzuordnungsspeicherbereich 804 für eine der
logische Registerquellen der Operation existiert, kann die spekulative
Registerzuordnungssteuerung 802 den physikalischen Registernamen
ausgeben, der in diesem Eintrag des logischen Registers gespeichert
ist. Die Ausgabeeinheit 104 kann dann diesen spekulativen
physikalischen Registernamen als spekulative Quelle ausgeben, wenn
die Operation an die Disponiereinheit 118 ausgegeben wird.
Wenn daher eine ADD-Operation
der spekulativen Registerzuordnung 800 zugeführt wird
und eine der Quellen der ADD-Operation einen gültigen Eintrag in dem spekulativen
Registerzuordnungsspeicherbereich 804 aufweist, kann die
Markierung für
das physikalische Register, das in diesem Eintrag spezifiziert ist,
eine spekulative Quellenoperandenmarkierung eine Disponiereinheit 118 bereit
gestellt werden. Die Disponiereinheit kann ausgebildet sein, sowohl
spekulative als auch nicht spekulative Operandenmarkierungen zu
speichern, wie dies zuvor beschrieben ist. In einigen Ausführungsformen
ist diese ausgebildet, Operationen (wenn nicht bereits ausgegeben)
in Reaktion darauf erneut auszugeben, dass die nicht spekulative
Markierung auf einem Ergebnisbus allgemein adressiert ausgegeben
wird.
-
Einträge in der
spekulativen Zuordnung können
in Reaktion darauf als ungültig
erklärt
werden, dass eine Angabe vorliegt, dass ein Datenwert für ein spezielles
logisches Register modifiziert wird. Wenn beispielsweise eine Operation
ADD EAX, ECX von der Ausgabeeinheit 104 behandelt wird,
kann die spekulative Registerzuordnungssteuerung 802 den
spekulativen Zuordnungseintrag, der aktuell dem Register EAX zugeordnet
ist, als unzulässig
erklären,
da die ADD-Operation diesen Registerwert modifizieren wird.
-
Im
Allgemeinen können
spekulative Operandenmarkierungen der Disponiereinheit
118 zugeführt werden,
wann immer ein spekulatives Ergebnis einer Operation mit einem Registerdatenwert
verknüpft
ist. In einigen Ausführungsformen
kann eine Speicherdatei
132 oder eine weitere Struktur,
die die Abhängigkeiten über mehrere
Zyklen hinweg verfolgt (beispielsweise eine spekulative Registerzuordnung,
wie sie nachfolgend beschrieben ist) verwendet werden, um spekulative
Ergebnisse mit Registerwerten zu verknüpfen. Beispielsweise kann die
Ausgabeeinheit
104 spekulative Markierungen für eine Operation
in Reaktion erzeugen, dass eine Speicherdatei
132 eine
Verknüpfung
angibt. In einigen Ausführungsformen
können
spekulative Markierungen ohne die Verwendung einer derartigen spekulativen
Zuordnung erzeugt werden. Beispielsweise kann eine Reihe aus Befehlen
enthalten:
ADD
EBX, EBX | (ADD
1), |
MOV
(Adressiermuster A), EBX | (Schreiboperation
1) |
ADD
(Adressiermuster A), ECX | (ADD
2). |
-
Diese
Befehle können
zusammenhängende
Befehle sein (beispielsweise können
sie in der Programmreihenfolge direkt aufeinander folgen). Diese
Befehle können
in die folgenden Komponentenoperationen unterteilt werden (wobei
die logischen Adressen in physikalische Adressen übersetzt
gezeigt sind), so dass sie in den Ausführungskernen
124 ausgeführt werden
können:
ADD
PR2, PR2, PR1 | (ADD
1) |
MOV
(Adressiermuster A), PR2 | (Schreiboperation
1) |
MOV
PR3, (Adressiermuster A) | (Ladeoperation
für ADD
2) |
ADD
PR4, PR3, PR5 | (Addition
für ADD
2) |
MOV
(Adressiermuster A), PR4 | (Schreiboperation
für ADD
2) |
-
Bevor
die Komponenten der Lade-, Addier- und Schreiboperationen von ADD
2 ausgegeben werden, kann eine Ausgabeeinheit
104 erkennen,
ob es Abhängigkeiten
zwischen Komponentenoperationen in der Sequenz gibt, die eine Verknüpfung mit
spekulativen Ergebnissen ermöglichen.
Ferner können
die von der Schreiboperation 1 gespeicherten Daten mit dem spekulativen
Ergebnis der Ladeoperation (beispielsweise durch eine Speicherdatei)
verknüpft
werden. Da es keine dazwischen liegenden Operationen gibt, weist
die Ausgabeeinheit alle benötigten
Informationen auf, um eine Abhängigkeit
zwischen der Ladeoperation und der Addieroperation (beide Operationen
gehen aus demselben Befehl hervor) im gleichen Ausgabezyklus zu
erkennen. Auf der Grundlage dieser beiden Abhängigkeiten kann die Ausgabeeinheit
104 die
Markierung der von dem Schreibbefehl 1, PR2, gespeicherten Daten
mit dem spekulativen Ergebnis der Ladeoperation, die als Teil von
ADD 2 ausgeführt
wird, verknüpfen.
Diese spekulative Verknüpfung
kann wiederum ermöglichen,
dass die Ausgabeeinheit die Quelle der Addieroperation, die als
Teil von ADD 2 ausgeführt
wird, mit dem in PR2 gespeicherten Wert zu verknüpfen. Folglich kann die Ausgabeeinheit
104 eine
Angabe ausgeben, dass PR2 spekulativ als die Quelle eines der Operanden
für die
Addition verwendet werden kann, dass aber PR3 die nicht spekulative
Quelle für
den Operanden ist. Somit können
in einer Ausführungsform
die Operationen und Operandenkennungen, die von der Ausgabeeinheit
ausgegeben werden, wie folgt spezifiziert werden:
ADD
PR2, PR2, PR1 | (ADD
1) |
MOV
(Adressiermuster A), PR2 | (Schreiboperation
1) |
MOV
PR3, (Adressiermuster A) | (Ladeoperation
für ADD
2) |
ADD
PR4, PR2*, PR3, PR5 | (Addition
für ADD
2, wobei PR2* eine spekulative Quelle für ECX und PR3 die nicht spekulative
Quelle für
ECX ist) |
MOV
(Adressiermuster A), PR4 | (Schreiboperation
für ADD
2). |
-
In
anderen Ausführungsformen
ist die Ausgabeeinheit 104 nicht ausgebildet, spekulative
Quellenoperanden für
Operationen zu erkennen, die von einer Ladeoperation abhängen. So
kann, wie in 12 gezeigt ist, die Ausgabeeinheit 104 einen
Operationskonverter 180 enthalten, der ausgebildet ist,
Ladeoperationen in eine oder mehrere Operationen umzuwandeln, die
eine Register-Register-Transferoperation beziehungsweise move-Operation enthalten,
um damit spekulative Ladeergebnisse zu abhängigen Operationen zuzuführen. Die Konversion
einer Ladeoperation kann in Reaktion auf eine Angabe ausgeführt werden,
dass eine Verknüpfung zwischen
einem spekulativen Ergebnis der Ladeoperation und einem Datenwert
besteht, der durch einen speziellen physikalischen Registernamen
gekennzeichnet ist. Diese Angabe wird von dem Verknüpfungsdetektor 182 bereit
gestellt, der in einigen Ausführungsformen
eine Speicherdatei 132 beinhaltet. In anderen Ausführungsformen
kann der Verknüpfungsdetektor 182 eine
Logik aufweisen, die ausgebildet ist, Datenwerte in Reaktion auf
Operationen, etwa die bedingte Transferbeziehungsweise move-Operationen
zu verknüpfen,
wie dies zuvor beschrieben ist.
-
In
einer Ausführungsform
empfängt
der Operationskonverter einen Eingangsoperationscode für eine Operation
sowie eine Angabe, ob eine Verknüpfung
zwischen einem Registerwert und einem spekulativen Ergebnis der
Operation für
diese Operation erkannt wurde. Wenn die Operation eine Ladeoperation
ist und eine spekulative Verknüpfung
erkannt ist, kann der Operationskonverter einen Operationscode für eine move-Operation
von Register zu Register ausgeben. Die Ausgabeeinheit 104 kann
eine move- beziehungsweise Transferoperation von Register zu Register
ausgeben, wobei die von der Verknüpfungsdetektionseinheit ausgegebene
Markierung als die Quellenoperandenmarkierung für den Register-zu-Register-Transfer
verwendet wird.
-
In
eineigen Ausführungsformen
ist der Operationskonverter ausgebildet, den sich ergebenden Register-zu-Register-Transfer
so auszugeben, dass die Disponiereinheit die Operandenmarkierungen,
die sowohl für
den Register-Register-Transfer als auch die ursprüngliche
Ladeoperation erforderlich sind, in dem Eintrag speichert, der der
Register-Register-Transfer-Operation
zugewiesen ist. Dies ermöglicht
es, dass die Operation als die ursprüngliche Ladeoperation erneut
ausgegeben wird, wenn das spekulative Ergebnis der Register-Register-Transfer-
beziehungsweise move-Operation als nicht korrekt erkannt wird. Um
dies einzurichten, wird jede Register-Register-move-Operation, die
sich aus einem Modifizieren einer Ladeoperation ergibt, hinzugefügt (oder
in alternativen Ausführungsformen
wird ein Quellenoperand, der bereits vorhanden ist, so modifiziert,
dass dies erreicht wird). In einigen Ausführungsformen kann das spekulative
Ergebnis der Register-Register-Transferoperation verifiziert werden,
indem die Adressenberechnung für
die ursprüngliche
Ladeoperation ausgeführt
wird und/oder indem der verknüpfte
Datenwert mit dem eigentlichen Ladeoperationsergebnisdatenwert verglichen
wird. Wenn das spekulative Ergebnis nicht korrekt ist, kann auf
dem Datencache-Speicher zugegriffen werden, um das korrekte Ladeergebnis
zu erhalten. Das erneute allgemeine Ausgeben des korrekten Ladeergebnisses
veranlasst die Disponiereinheit, abhängige Operationen erneut auszugeben,
die unter Anwendung des nicht korrekten Wertes ausgeführt wurden.
-
In
einigen Ausführungsformen
ist der Operationskonverter 180 ausgebildet, eine Ladeoperation
in eine „duale” Operation
umzuwandeln. Ähnlich
wie eine Ladeoperation kann diese duale Operation sowohl eine Adressenberechnung
als auch eine Datenverschiebung beinhalten. Anders als eine Ladeoperation
ist eine Datenverschiebung, die von einer Operation mit doppelter
Eigenschaft initiiert wird, eine Register-Register-Transferoperation.
Ferner kann die Datenverschiebung, die von der dualen Operation
initiiert wird, ausgeführt
werden, bevor die Adressenberechnung abgeschlossen ist. Die Adressenberechnung
kann verwendet werden, um zu verifizieren, ob die spekulative Verknüpfung korrekt
war. Wenn die spekulative Verknüpfung
nicht korrekt war, kann die duale Operation erneut als eine normale
Ladeoperation ausgegeben werden und ihr Ergebnis kann erneut für abhängige Operationen
nach dem Ende eines Datencache-Speicherzugriffs ausgegeben werden.
-
Die
folgenden Beispiele zeigen, wie unterschiedliche Ausführungsformen
diese beispielhafte Reihenfolge aus Operationen umwandeln:
ADD
PR2, PR1, PR1 | (ADD
1) |
... | |
Schreiben
(Adressiermuster A), PR2 | (Schreiboperation
1) |
... | |
Laden
PR3, (Adressiermuster A) | (Ladeoperation
1) |
... | |
ADD
PR4, PR3, PR3 | (ADD
2) |
-
In
dieser Sequenz ist es möglich,
dass die spezifizierten Operationen durch eine oder mehrere dazwischen
liegende Operationen getrennt sind. Es wird jedoch angenommen, dass
keine dazwischen liegenden Operationen auftreten, um die Werte zu
modifizieren, die in dem Adressiermuster A verwendet werden, oder um
Datenwerte zu modifizieren, die in der Adresse gespeichert sind,
die aus dem Adressiermuster A in PR2 berechnet wird, und es wird
eine spekulative Verknüpfung
zwischen den in PR2 gespeicherten Datenwerten und der Adresse erkannt,
die aus dem Adressiermuster A berechnet wird.
-
In
einer Ausführungsform
konvertiert in Reaktion auf das Erkennen der spekulativen Verknüpfung mittels
des spekulativen Verknüpfungsdetektors 182,
der Operationskonverter 180 die Ladeoperation 1 (LORD 1) in
eine duale Transferoperation: MOV PR3, PR2. Zusätzlich zum Spezifizieren der
Registerquelle und des Registerziels kann diese duale beziehungsweise
doppelte Transferoperation auch das Adressiermuster A spezifizieren,
so dass die Adressenberechnung für
die Ladeoperation 1 ausgeführt
wird. Der Transfer- beziehungsweise move-Bereich der dualen Transferoperation
kann jedoch ausgegeben werden, sobald ECX verfügbar ist. Sobald das Ergebnis
des Transferbereichs der dualen Operation allgemein ausgegeben wird,
kann ADD 2 ausgegeben werden, wobei das spekulative Ergebnis der
Transferoperation als ein Operand verwendet wird. Wenn die Adressenberechnung
ausgeführt
ist, kann die spekulative Verknüpfung
verifiziert werden. Wenn die spekulative Verknüpfung nicht korrekt ist, kann
die Lade/Schreibeinheit eine Angabe an die Disponiereinheit ausgeben,
so dass die Disponiereinheit veranlasst wird, die Transferoperation
mit doppelter Eigenschaft als eine Ladeoperation erneut auszugeben.
Das Ergebnis der Ladeoperation wird dann allgemein adressiert ausgegeben,
wodurch bewirkt wird, dass abhängige
Operationen, etwa ADD 2, die unter Anwendung des spekulativen Ergebnisses
der move- beziehungsweise Transferoperation ausgeführt werden,
erneut ausgegeben werden. Zu beachten ist, dass diese duale Operation
ausgegeben wird, wobei ein einzelner Disponiereintrag verwendet
wird, und es kann eine Disponiereinheit 118 die duale Operation
für die
zweimalige Ausgabe auswählen:
einmal für
die Adressenberechnung der Ladeoperation und einmal für die Transferoperation
von Register zu Register.
-
In
einer alternativen Ausführungsform
kann der Operationskonverter 180 die Ladeoperation 1 in
zwei verknüpfte
Operationen LORD PR3, (Adressiermuster A) und MOV PR3, PR2 in Reaktion
darauf umwandeln, dass die spekulative Verknüpfung erkannt wurde. Anders
als in dem früheren
Beispiel, wobei eine duale Operation beteiligt war, können diese
verknüpften
Operationen jeweils einen Eintrag in einer Disponiereinheit 118 einnehmen,
anstelle dass ein einzelner Disponiereintrag gemeinsam verwendet
wird. Wenn eine Register-Register-Transferoperation
ausgegeben wird, können
abhängige
Operationen, etwa ADD 2, unter Anwendung des spekulativen Wertes
von PR3 als ein Operandenwert ausgegeben werden. Die Ladeoperation
kann als eine spezielle Art einer Ladeoperation markiert werden,
so dass die spekulative Verknüpfung
als korrekt erkannt wird und die Ergebnismarkierung der Ladeoperation
nicht allgemein ausgegeben wird (oder mit einer Angabe allgemein
adressiert ausgegeben wird, dass das Ergebnis der Transferoperation
korrekt ist und dass die abhängigen
Operationen nicht erneut ausgegeben werden sollten). Wenn ferner
sowohl die Ladeoperation als auch die Transferoperation ihre Ergebnisse
im gleichen Zyklus allgemein ausgeben, kann eine Angabe bereitgestellt
werden, so dass das Ladeergebnis für abhängige Operationen anstelle
des Transferergebnisses verwendet wird. In einigen Ausführungsformen
kann dies durch Hinzufügen
eines zusätzlichen
Bits zu jedem Markierungsbus innerhalb des Prozessors 100 erfolgen,
wobei dieses angibt, auf welche Markierung eine Disponiereinheit
antworten sollte. Wenn die spekulative Verknüpfung nicht korrekt ist (beispielsweise
wie dies durch die allgemeine Ausgabe der Ergebnismarkierung der
Ladeoperation angegeben ist), kann die Transfer- beziehungsweise
move-Operation gelöscht
werden (beispielsweise kann die Disponiereinheit 118, die
die Transferoperation behandelt, den Disponiereintrag, der aktuell
dem Register-Register-Transfer zugeordnet ist, wieder freigeben,
so dass die Operation nicht erneut ausgegeben werden kann). In vielen
Ausführungsformen
ist die Disponiereinheit ausgebildet, abhängige Operationen erneut auszugeben,
die unter Anwendung des spekulativen Ladeergebnisses ausgeführt werden,
in Reaktion darauf, dass die Ladeergebnismarkierung erneut auf dem
Ergebnisbus erscheint.
-
Wenn
in einer Ausführungsform
eine Verknüpfung
zwischen einem Registerdatenwert, der durch eine spezielle Markierung
gekennzeichnet ist, und einem spekulativen Ergebnis einer Ladeoperation
erkannt wird (beispielsweise durch eine Speicherdatei), wird die
Ladeoperation so modifiziert, dass diese eine Register-Register-Transferoperation
mit einer Quellenoperandenmarkierung enthält, die gleich ist der Markierung
des Datenwertes, der mit dem spekulativen Ladeergebnis verknüpft ist.
Das Ausführen
der Register-Register-Transferoperation kann das Ausgeben des Datenwertes,
der von der Markierung gekennzeichnet ist, auf dem Ergebnisbus zusammen
mit der Markierung des Ergebnisses der Ladeoperation beinhalten.
-
Das
spekulative Ergebnis kann verifiziert werden (beispielsweise durch
Ausführen
der Adressenberechnung für
die ursprüngliche
Ladeoperation). Wenn das spekulative Ergebnis korrekt ist, kann
das Ergebnis der Ladeoperation erneut auf dem Ergebnisbus allgemein
ausgegeben werden (oder alternativ das Ergebnis der Ladeoperation
kann zusammen mit einer Angabe allgemein erneut ausgegeben werden,
dass die abhängigen
Operationen in Reaktion auf das erneut allgemein ausgegebene Ergebnis
nicht als ausgegeben werden sollten). Wenn das spekulative Ergebnis
nicht korrekt ist, kann auf dem Datencache-Speicher zugegriffen
werden, um das korrekte Ladeergebnis abzurufen und das korrekte
Ladeergebnis kann auf dem Ergebnisbus allgemein adressiert ausgegeben
werden. Dies kann wiederum bewirken, dass abhängige Operationen, die unter Anwendung
des spekulative Ergebniswertes ausgegeben wurden, erneut ausgegeben
werden. Zu beachten ist, dass in einigen Situationen das spekulative
Ergebnis verifiziert werden kann, bevor die Register-Register-Transferoperation
ausgeführt
wird. Wenn das spekulative Ergebnis nicht korrekt ist, wird die
Register-Register-Transferoperation nicht ausgeführt.
-
Wenn
keine Verknüpfung
zwischen dem spekulativen Ergebnis der Ladeoperation und einem Registerdatenwert
erkannt wird (beispielsweise das Adressiermuster der Ladeoperation
in einer Speicherdatei), wird die Ladeoperation nicht modifiziert.
Die Ladeoperation wird normal ausgeführt, wobei auf den Datencache-Speicher
zugegriffen wird, und das Ergebnis wird auf dem Ergebnisbus allgemein
ausgegeben.
-
Markierungsfärbung
-
In
einigen Situationen kann die Speicherdatei 132 das spekulative
Ergebnis einer Ladeoperation mit einem Wert in einem speziellen
logischen Register verknüpfen.
In einigen Situationen kann das logische Register überschrieben
werden, wobei bewirkt wird, dass das diesen logischen Register von
der Registerzuordnung zugeordnete physikalische Register in die
freie Liste zurück
geführt
wird (das heißt
die Liste freier physikalischer Register, die für eine Zuweisung verfügbar sind).
Das physikalische Register kann dann erneut zugeordnet werden, um
einen weiteren Wert zu speichern. Die Rückgabe des physikalischen Registers
an die freie Liste und/oder das erneute Zuordnen des physikalischen
Registers beeinflusst den Speicherdateieintrag, der dieses physikalische
Register spezifiziert, nicht. Somit werden nachfolgende Verknüpfungen,
die von der Speicherdatei 132 bereitgestellt werden, bei
der erneuten Zuordnung der physikalischen Register nicht berücksichtigt.
Es sei beispielsweise die folgende Sequenz betrachtet:
- MOV
(EBP + 50), EAX
- XOR EAX, EAX
- MOV EBX, (EBP + 50)
-
In
Reaktion auf diese Sequenz kann die Speicherdatei kann die Speicherdatei 132 einen
Eintrag im Adressiermuster EBP + 50 und dem physikalischen Register,
das EAX zugeord net ist, in Reaktion auf die erste Schreiboperation
zuweisen. Wenn EAX von der XOR-Operation überschrieben wird, entspricht
der aktuelle Wert von EAX nicht mehr dem Wert, der mit dem Adressiermuster
in der Speicherdatei 132 verknüpft ist. Jedoch kann die Speicherdatei 132 das
spekulative Ergebnis der nachfolgenden Ladeoperation mit dem früheren Wert
auf der Grundlage der Übereinstimmung
zwischen dem Adressiermuster der Ladeoperation und dem Adressiermuster
der früheren
Schreiboperation verknüpfen.
-
In
einigen Ausführungsformen
wird jedem physikalischen Register in der Registerdatei 116 eine
Farbe zugeordnet. Diese Farbe kann mit der Markierung jedes Registers
verknüpft
sein und wird durch den Prozessor zusammen mit der Markierung des
Registers weitergegeben. Im hierin verwendeten Sinne ist eine Farbe ein
oder mehrere Bits an Informationen, die angeben, welches Register
erneut zugewiesen wurde. In einer Ausführungsform ist eine Farbe ein
einzelnes Bit, das jedes Mal geändert
wird, wenn ein Register zu der freien Liste wieder hinzugefügt wird
oder daraus gestrichen wird. Wenn ein Eintrag, der die Markierung
eines speziellen Registers spezifiziert, der Speicherdatei reserviert
beziehungsweise zugeordnet wird, kann die Speicherdatei auch die
Farbe, die diesem Register zugeordnet ist, in dem reservierten Eintrag
speichern. In ähnlicher Weise
kann die spekulative Registerzuordnung eine Farbe 814 für jede Markierung
speichern, wie dies in 13 gezeigt ist. Die Farbe kann
auch mit der Markierung in der Registerzuordnung 134 und
der Disponiereinheit 118 gespeichert werden. Wenn eine
Registermarkierung auf beziehungsweise den Ergebnisbussen 520 ausgegeben
wird, wird auch die mit dieser Markierung verknüpfte Farbe auf dem beziehungsweise
den Ergebnisbussen 520 ausgegeben.
-
Es
sei als Beispiel ein physikalisches Register betrachtet, das anfänglich eine
Farbe von „0” aufweist. Dieses
physikalische Register mit der Farbe 0 wird einem speziellen logischen
Register durch die Registerzuordnung 134 zugewiesen. Des
weiteren wird dieses physikalische Register mit der Farbe 0 einem
logischen Register in der spekulativen Registerzuordnung 800 zugeordnet.
An einem gewissen Punkt nach der Reservierung des Eintrags der spekulativen
Registerzuordnung 800 wird das physikalische Register wieder
der freien Liste zugeführt
und kann dann für
erneute Zuweisung ausgewählt
werden. Wenn das physikalische Register aus der freien Liste gestrichen
wird, wird seine Farbe mit „1” aktualisiert.
Ab einer gewissen Stelle, nachdem die Farbe des Registers aktualisiert
wurde, kann die spekulative Registerzuordnung 800 eine
spekulative Quelle einer Operation mittels der Markierung des Registers
und der Farbe 0 auf der Grundlage des Eintrags, der vor dem erneuten Zuweisen
des Registers reserviert wurde, kennzeichnen. Diese die spekulative
Quelle kennzeichnende Information kann in der Disponiereinheit 118 gespeichert
werden. Bevor die Operation ausgegeben wird, kann eine weitere Operation
den neue Wert dieses Registers erzeugen, und die Markierung und die
aktuelle Farbe 1 können
auf dem Ergebnisbus 520 allgemein adressiert ausgegeben
werden. Durch Vergleichen der aktuellen Farbe 1, die der Markierung
des Registers zugewiesen ist, mit der Farbe 0, die der Markierung
des Registers in dem spekulativen Registerzuordnungseintrag zugewiesen
ist, kann die Disponiereinheit 118 bestimmen, dass die
Markierung nicht mehr den gleichen Wert kennzeichnet. In einigen
Ausführungsformen
kann die Disponiereinheit 118 dies als eine nicht korrekte
Spekulation behandeln und kann auf das Überwachen der nicht spekulativen
Quelle für
diesen Operanden „umschalten”, wie dies
zuvor mit Bezug zu 10 beschrieben ist. Dieses Umschalten
kann auf die spezielle Operation begrenzt sein, für die die
fehlende Übereinstimmung
der Farbe erkannt wurde (im Gegensatz dazu, dass bewirkt wird, dass
alle anhängigen
Operationen in der Disponiereinheit umschalten).
-
Typischerweise
ist es schwierig, Register-Register-Transferoperationen aus dem
Abhängigkeitsgraphen
zu entfernen, ohne dass Schwierigkeiten bei der Verwaltung der physikalischen
Registerneuzuweisung hervorgerufen werden. Wenn beispielsweise Register-Register-Transferoperationen
durch Aktualisieren der Registerzuordnung 134 so eingerichtet
werden, dass zwei logische Registernummern die gleiche physikalische
Registernummer ansprechen, kann es schwierig sein zu bestimmen,
wann das von dieser physikalischen Registernummer gekennzeichnete
physikalische Register wieder in die freie Liste zurückgegeben
werden soll. Die Registerfärbung
kann als eine Alternative für
dieses System verwendet werden.
-
In
einigen Ausführungsformen
kann die Registerfärbung
verwendet werden, wenn das Verhalten der Register-Register-Transferoperationen
unter Anwendung der spekulativen Registerzuordnung 800 optimiert wird.
Beispielswiese kann die spekulative Registerzuordnung 800 verwendet
werden, um Register-Register-Transferoperationen aus dem Abhängigkeitsgraphen
zu entfernen (das heißt
Operationen, die von dem Ergebnis einer Register-Register-Transferoperation
abhängen
und nicht mehr warten, bis die Transferoperation ausgeführt wird,
wenn die Quelle der Transferoperation bereits verfügbar ist).
Immer wenn eine Register-Register-Transferoperation erkannt wird,
kann die spekulative Registerzuordnung 800 einen Eintrag
reservieren, der das Quellenregister und das Zielregister, die in
dieser Transferoperation spezifiziert sind, verknüpft. Die Farbe
jedes physikalischen Registers kann in dem resultierenden Eintrag
der spekulativen Registerzuordnung 800 gespeichert werden.
In diesem System können
physikalische Register normalerweise ohne Schwierigkeiten erneut
zugewiesen werden, die sich in Systemen ergeben, in denen die Registerzuordnung 134 aktualisiert wird,
sodass mehrere logische Register dem gleichen physikalischen Register
zugeordnet sind. Wenn ein physikalisches Register in dem System
unter Anwendung der Farbengebung erneut zugewiesen wird, wird der spezielle
Wert, dem das physikalische Register aktuell zugeordnet ist, von
anderen Werten unterschieden, die in dem gleichen physikalischen
Register vorhanden waren, bevor das physikalische Register erneut
durch die Farbe zugewiesen wurde, die mit jeder Markierung verknüpft ist,
die dieses physikalische Register bezeichnet.
-
Die
spekulative Registerzuordnung 800 kann ausgebildet sein,
sowohl Ganzzahl- als auch Fließkommaregister
zu handhaben, wobei es möglich
ist, dass die spekulative Registerzuordnung Fließkommaregister-Fließkommaregister-Transferoperationen
aus den Abhängigkeitsgraphen
zu entfernen. Dies ermöglicht
es wiederum, dass Operationen, etwa FXCH (die ein Stapelelement
durch die aktuelle Oberseite des Stapels ersetzt), die eine merkliche
Wartezeit aufweisen, von dem Abhängigkeitsgraphen
entfernt werden. Zu beachten ist, dass obwohl die Verwendung der
spekulativen Registerzuordnung 800 Register-Register-Transferoperationen
von dem Abhängigkeitsgraphen
entfernen kann, die Register-Register-Transferoperationen
beziehungsweise move-Operationen dennoch ausgeführt werden.
-
Beispielhafte Computersysteme
-
14 zeigt
eine Blockansicht einer Ausführungsform
eines Computersystems 400, das einen Prozessor 100 aufweist,
der mit einer Vielzahl von Systemkomponenten mittels einer Busbrücke 402 verbunden ist.
Der Prozessor 100 umfasst in einer Ausführungsform eine Ausgabeeinheit 104,
eine Speicherdatei 132, eine Disponiereinheit 118 und/oder
eine spekulative Registerzuordnung 800, wie dies zuvor
beschrieben ist. Andere Ausführungsformen
eines Computersystems sind möglich
und sind hierin mit eingeschlossen. In dem dargestellten System
ist ein Hauptspeicher 200 mit der Busbrücke 402 über einen
Speicherbus 406 verbunden, und eine Graphiksteuerung 408 ist
mit der Busbrücke 402 über einen
AGP- Bus 410 verbunden.
Diverse PCI-Geräte 412A–412B sind
mit der Busbrücke 402 über einen
PCI-Bus 414 verbunden. Eine sekundäre Busbrücke 416 kann ebenso
vorgesehen sein, um eine elektrische Schnittstelle mit einem oder
mehreren EISA- oder ISA-Geräten 418 über einen
EISA/ISA-Bus 420 bereit zu stellen. In diesem Beispiel
ist der Prozessor 100 mit der Busbrücke 402 über einem
CPU-Bus 424 und zu einem optionalen L2-Cache-Speicher 428 verbunden. In
einigen Ausführungsformen
kann der Prozessor 100 einen integrierten L1-Cache-Speicher (nicht
gezeigt) aufweisen.
-
Die
Busbrücke 402 stellt
eine Schnittstelle zwischen dem Prozessor 100, dem Hauptspeicher 404,
der Graphiksteuerung 408 und dem an den PCI-Bus 414 angeschlossenen
Geräten
bereit. Wenn eine Operation von einem oder mehreren der Geräte, die
mit der Busbrücke 402 verbunden
sind, empfangen wird, erkennt die Busbrücke 402 das Ziel der
Operation (beispielsweise ein spezielles Gerät oder im Falle des PCI-Busses 414, dass
das Ziel auf dem PCI-Bus 414 liegt). Die Busbrücke 402 leitet
die Operation an das angesprochene Gerät weiter. Die Busbrücke 402 übersetzt
im Allgemeinen eine Operation aus dem von dem Quellengerät verwendeten
Protokoll oder Bus in das Protokoll, das von dem Zielgerät oder dem
Zielbus verwendet wird.
-
Zusätzlich zu
der Bereitstellung einer Schnittstelle zu einem ISA/EISA-Bus für den PCI-Bus 414 kann die
sekundäre
Busbrücke 416 weitere
Funktionen enthalten. Eine Eingabe/Ausgabe-Steuerung (nicht gezeigt), die
entweder extern oder in der sekundären Busbrücke 416 integriert
sein kann, kann ebenso in dem Computersystem 400 enthalten
sein, um eine Funktion zum Betreiben einer Tastatur und einer Maus 422 und
für diverse
serielle und parallele Anschlüsse
zu bieten. Eine externe Cache-Speichereinheit (nicht gezeigt) kann ebenso
mit dem CPU-bus 424 zwischen dem Prozessor 100 und
der Busbrücke 402 in
weiteren Ausführungsformen
vorgesehen sein. Alternativ kann der externe Cache-Speicher mit
der Busbrücke 402 verbunden
sein, und die Cache-Steuerlogik für den externen Cache-Speicher
kann in der Busbrücke 402 integriert
sein. Der L2-Cache-Speicher 428 ist
in einer „Rückseiten”-Konfiguration
in Bezug auf den Prozessor 100 gezeigt. Zu beachten ist,
dass der L2-Cache-Speicher 428 separat zu dem Prozessor 100 vorgesehen
sein kann, in einem Gehäuse
(beispielsweise Anschluss 1 oder Anschluss A) mit dem Prozessor 100 integriert
sein kann oder sogar auf einem Halbleitersubstrat zusammen mit dem
Prozessor 100 in integrierter Weise vorgesehen sein kann.
-
Der
Hauptspeicher 200 ist ein Speicher, in welchem Anwenderprogramme
gespeichert sind, und aus welchem heraus der Prozessor 100 im
Wesentlichen arbeitet. Zu einem geeigneten Hauptspeicher 200 gehören DRAM-Speicher
(dynamische Speicher mit wahlfreiem Zugriff). Beispielsweise sind
mehrere Bänke
aus SDRAM (synchrone DRAM) oder Rambus DRAM (RDRAM) geeignet.
-
Die
PCI-Geräte 412A–412B sind
Repräsentanten
für eine
Vielzahl peripherer Einrichtungen, etwa Netzwerkschnittstellenkarten,
Videobeschleuniger, Klangkarten, Festplatten- oder Diskettenlaufwerke
oder Laufwerkssteuerungen, SCSI (Kleincomputersystemschnittstellen-)Adapter
und Telefonkarten. In ähnlicher Weise
ist die ISA-Einrichtung 418 als anschaulicher Kandidat
für diverse
Arten von peripheren Geräten,
etwa ein Modem, eine Klangkarte und eine Vielzahl von Datennahmekarten,
etwa GPIB oder Feldbusschnittstellenkarten, angegeben.
-
Die
Graphiksteuerung 408 ist vorgesehen, das Erzeugen von Text
und Bildern auf einer Anzeige 426 zu steuern. Die Graphiksteuerung 408 kann
einen typischen Graphikbeschleuniger verkörpern, der im Stand der Technik
allgemein bekannt ist, um damit dreidimensionale Datenstrukturen
zu erzeugen, die in effizienter Weise in den Hauptspeicher 200 verschoben
und daraus ausgelesen werden können.
Die Graphiksteuerung 408 kann daher ein übergeordnetes
Steuergerät
beziehungsweise ein „Master” des AGP-Busses 410 sein,
in dem es Zugriff auf eine Zielschnittstelle an der Busbrücke 402 anfordern
und erhalten kann, um damit Zugriff auf den Hauptspeicher 200 zu
erhalten. Ein spezieller Graphikbus übernimmt das rasche Zugreifen
auf Daten in dem Hauptspeicher 404. Für gewisse Operationen kann
die Graphiksteuerung 408 ausgebildet sein, PCI-Protokolltransaktionen
auf dem AGP-Bus 410 zu
erzeugen. Die AGP-Schnittstelle der Busbrücke 402 kann damit
Funktionen enthalten, und sowohl AGP-Protokolltransaktionen sowie
PCI-Protokollziel- und Initiatortransaktionen zu unterstützen. Die
Anzeige 426 kann eine beliebige elektronische Anzeige sein,
auf der Bild oder Text dargestellt werden kann. Zu einer geeigneten
Anzeige 426 gehören
eine Kathodenstrahlerröhre („CRT”), eine
Flüssigkristallanzeige
(„LCD”), etc..
-
Zu
beachten ist, dass obwohl die AGP, PCI und ISA- der EISA-Busse als
Beispiele in der obigen Beschreibung verwendet sind, beliebige Busarchitekturen
nach Bedarf eingesetzt werden können.
Ferner ist zu beachten, dass das Computersystem 400 ein
Multi-Verarbeitungscomputersystem
mit zusätzlichen
Prozessoren sein kann (beispielsweise ein Prozessor 100a,
wie er als optionale Komponente des Computersystems 400 gezeigt
ist). Der Prozessor 100a kann ähnlich zu dem Prozessor 100 sein.
Insbesondere kann der Prozessor 100a eine identische Kopie
des Prozessors 100 sein. Der Prozessor 100a kann
mit der Busbrücke 402 über einen
unabhängigen
Bus (wie in 14 gezeigt ist) verbunden sein
oder kann den CPU-Bus 224 gemeinsam mit dem Prozessor 100 benutzen.
Des weiteren kann der Prozessor 100a mit einem optionalen
L2-Cache-Speicher 428a ähnlich
dem L2-Cache-Speicher 428 verbunden sein.
-
15 zeigt
eine weitere Ausführungsform
eines Computersystems 400, das eine Ausgabeeinheit 104,
eine Speicherdatei 132, eine Disponiereinheit 118 und/oder
eine spekulative Registerzuordnung 800 aufweist, wie dies
zuvor beschrieben ist. Andere Ausführungsformen sind möglich und
sind hierin mit eingeschlossen. In der Ausführungsform aus 15 umfasst
das Computersystem 400 diverse Verarbeitungsknoten 612A, 612B, 612C und 612D.
Jeder Verarbeitungsknoten ist mit einem entsprechenden Speicher 614A–614D über eine
Speichersteuerung 616A–616D verbunden,
die in dem jeweiligen entsprechenden Verarbeitungsknoten 612A–612D enthalten
ist. Des weiteren beinhalten die Verarbeitungsknoten 612A–612D eine
Schnittstellenlogik, die zur Kommunikation mit den Verarbeitungsknoten 612A–612D verwendet
wird. Beispielsweise enthält
der Verarbeitungsknoten 612A eine Schnittstellenlogik 618A zur
Kommunikation mit dem Verarbeitungsknoten 612B, eine Schnittstellenlogik 618B zur
Kommunikation mit dem Verarbeitungsknoten 612C und eine
dritte Schnittstellenlogik 618C zur Kommunikation mit einem
noch weiteren Verarbeitungsknoten (nicht gezeigt). In ähnlicher
Weise umfasst der Verarbeitungsknoten 612B Schnittstellenlogiken 618D, 618E und 618F;
der Verarbeitungsknoten 612C enthält Schnittstellenlogiken 618G, 618H und 618I;
und der Verarbeitungsknoten 612D umfasst Schnittstellenlogiken 618J, 618K und 618L.
Der Verarbeitungsknoten 612D ist angeschlossen, um mit
mehreren Eingabe/Ausgabegeräten
(beispielsweise den Geräten 620A–620B in
einer Prioritätsreihenfolge) über eine
Schnittstellenlogik 618L zu kommunizieren. Andere Verarbeitungsknoten
können
mit anderen I/O-Geräten
in ähnlicher
Weise in Verbindung treten.
-
Die
Verarbeitungsknoten 612A–612D führen eine
paketbasierte Verbindung für
die Kommunikation zwischen den Verarbeitungsknoten aus. In der vorliegenden
Ausführungsform
wird die Verbindung als Sätze aus
unidirektionalen Leitungen eingerichtet (beispielsweise werden die
Leitungen 624A verwendet, um Pakete von den Verarbeitungsknoten 612A zu
den Verarbeitungsknoten 612B zu senden, und Leitungen 624B werden verwendet,
um Pa kete von den Verarbeitungsknoten 612B zu den Verarbeitungsknoten 612A zu
senden). Andere Sätze
aus Leitungen 624C–624H werden
verwendet, um Pakete zwischen anderen Verarbeitungsknoten auszutauschen,
wie dies in 15 gezeigt ist. Im Allgemeinen
umfasst jeder Satz aus Leitungen 624 eine oder mehrere
Datenleitungen, eine oder mehrere Taktleitungen, die den Datenleitungen
zugeordnet sind und eine oder mehrere Steuerleitungen, die die Art
des transportierten Pakets angeben. Die Verbindung kann in einer mit
dem Cache-Speicher kohärenten
Weise zur Kommunikation zwischen den Verarbeitungsknoten oder in
einem mit dem Cache-Speicher nicht kohärenten Weise zur Kommunikation
zwischen einem Verarbeitungsknoten und einem I/O-Gerät betrieben
werden (oder zwischen einer Busbrücke und einem I/O-Bus mit konventionellem
Aufbau, etwa dem PCI-Bus oder ISA-Bus). Des weiteren kann die Verbindung
in einer nicht kohärenten Weise
unter Anwendung prioritätsverwalteten
Struktur zwischen I/O-Geräten
betrieben werden, wie dies gezeigt ist. Zu beachten ist, dass ein
Paket, das von einem Verarbeitungsknoten zu einem weiteren Knoten
zu senden ist, durch einen oder mehrere zwischen liegende Knoten
laufen kann. Beispielsweise kann ein von dem Verarbeitungsknoten 612A zu
dem Verarbeitungsknoten 612D gesendetes Paket durch den
Verarbeitungsknoten 612B oder den Verarbeitungsknoten 612C laufen,
wie dies in 15 gezeigt ist. Es kann ein
beliebiger geeigneter Routenfindungsalgorithmus eingesetzt werden.
In anderen Ausführungsformen
des Computersystems 400 können mehr oder weniger Verarbeitungsknoten
als in der in 15 gezeigten Ausführungsform
vorgesehen sein.
-
Im
Allgemeinen werden die Pakete als eine oder mehrer Bit-Zeiten auf
den Leitungen 624 zwischen den Verarbeitungsknoten ausgetauscht.
Eine Bit-Zeit kann die ansteigende oder die abfallende Flanke des Taktsignals
auf den entsprechenden Taktleitungen sein. Die Pakete können Befehlspakete
zur Initiierung von Transaktionen, Sondierungs- beziehungsweise
Anfragepakete zur Beibehaltung der Cache-Kohärenz und Antwortpakete durch
Antworten auf Anfragen und Befehle sein.
-
Die
Verarbeitungsknoten 612A–612D können zusätzlich zu
der Speichersteuerung und der Schnittstellenlogik einen oder mehrere
Prozessoren aufweisen. Allgemein gesagt, umfasst ein Verarbeitungsknoten mindestens
einen Prozessor und kann optional eine Speichersteuerung zur Kommunikation
mit einem Speicher und andere Logik nach Bedarf aufweisen. Insbesondere
umfasst jeder Verarbeitungsknoten 612A–612D eine oder mehrere
Ko pien des Prozessors 100. Eine externe Schnittstelleneinheit 18 umfasst
die Schnittstellenlogik 618 in dem Verarbeitungsknoten
sowie die Speichersteuerung 616.
-
Die
Speicher 614A–614D können beliebige
geeignete Speichereinrichtungen aufweisen. Beispielsweise können die
Speicher 614A–614D einen
oder mehrere RAMBUS DRAMs (RDRAMs), synchrone DRAMs (SDRAMs), statische
RAM, etc. aufweisen. Der Adressenraum des Computersystems 400 ist
unter den Speichern 614A–614D aufgeteilt.
Jeder Verarbeitungsknoten 612A–612D kann eine Speicherzuordnung
enthalten, die verwendet wird, um zu bestimmen, welche Adressen
welchen Speichern 614A–614D zugewiesen
sind, zu welchem Verarbeitungsknoten 612A–612D eine
Speicheranforderung für
eine spezielle Adresse zugeführt werden
sollte. In einer Ausführungsform
ist der Kohärenzpunkt
für eine
Adresse innerhalb des Computersystems 400 die Speichersteuerung 616A–616D,
die mit dem Speicher verbunden ist, der die der Adresse entsprechenden
Bits enthält.
Anders ausgedrückt,
die Speichersteuerung 616A–616D ist dafür verantwortlich
sicherzustellen, dass jeder Speicherzugriff auf den entsprechenden
Speicher 614A–614D in
einer mit dem Cache-Speicher
kohärenten
Weise stattfindet. Die Speichersteuerungen 616A–616D können eine
Steuerschaltung als Schnittstelle mit den Speichern 614A–614D aufweisen.
Ferner können
die Speichersteuerungen 616A–616D Anforderungswarteschlangen
zur Aufreihung von Speicheranfragen beinhalten.
-
Die
Schnittstellenlogiken 618A–618L können eine
Vielzahl von Puffern zum Empfangen von Paketen aus der Verbindung
und zur Pufferung von Paketen, die über die Verbindung zu senden
sind, aufweisen. Das Computersystem 400 kann einen beliebigen
geeigneten Ablaufsteuerungsmechanismus zum Senden von Paketen benutzen.
Beispielsweise speichert in einer Ausführungsform jede Schnittstellenlogik 618 die
Nummer jeder Art eines Puffers innerhalb des Empfängers an
dem anderen Ende der Verbindung, mit der die Schnittstellenlogik
verbunden ist. Die Schnittstellenlogik sendet kein Paket, sofern
die empfangende Schnittstellenlogik keinen freien Puffer aufweist,
um das Paket zu speichern. Wenn ein Empfangspuffer durch Weiterleiten
eines Pakets freigegeben wird, sendet die empfangende Schnittstellenlogik
eine Nachricht zu der sendenden Schnittstellenlogik, um anzuzeigen,
dass der Puffer freigegeben ist. Ein derartiger Mechanismus wird
als ein „coupongestütztes” System
bezeichnet.
-
Die
I/O-Geräte 620A–620B können beliebige
geeignete I/O-Geräte
sein. Beispielsweise können
die I/O-Geräte 620A–620B Einrichtungen
zur Kommunikation mit einem weiteren Computersystem umfassen, mit welchem
die Geräte
verbunden sind (beispielsweise der Schnittstellenkarten oder Modems).
Des weiteren können
die I/O-Geräte 620A–620B Videobeschleuniger,
Klangkarten, oder Laufwerke oder Laufwerkssteuerungen, SCSI (Kleincomputersystemschnittstellen-)Adapter
und Telefonkarten, Klangkarten und eine Vielzahl von Datennahmekarten,
etwa GPIB- oder Feldbusschnittstellenkarten aufweisen. Zu beachten
ist, dass der Begriff „I/O-Gerät” und der
Begriff „peripheres
Gerät” hierin
als Synonym zu verstehen sind.
-
Im
hierin verwendeten Sinne bezeichnen die Begriffe „Taktzyklus” oder „Zyklus” ein Zeitintervall,
in welchem diverse Stufen der Befehlsverarbeitungspipeline abgeschlossen
werden. Befehle und berechnete Werte werden durch Speicherelemente
(etwa Register oder Arrays) gemäß einem
Taktsignal, das den Taktzyklus definiert, übernommen. Beispielsweise kann
ein Speicherelement einen Wert gemäß ansteigenden oder abfallenden
Flanke des Taktsignals übernehmen.
-
Es
werden zahlreiche Variationen und Modifizierungen für den Fachmann
angesichts der hierin offenbarten Lehre ersichtlich. Es ist daher
beabsichtigt, dass die folgenden Patentansprüche so interpretiert werden,
dass alle derartigen Variationen und Modifizierungen mit eingeschlossen
sind.
-
Industrielle Anwendbarkeit
-
Diese
Erfindung ist im Allgemeinen auf das Gebiet der Prozessoren anwendbar.