-
Hintergrund der Erfindung
-
Technisches Gebiet
-
Diese
Erfindung betrifft das Gebiet der Prozessoren und betrifft insbesondere
das Ausführen
einer Datenspekulation in einem Prozessor.
-
Hintergrund
der Erfindung
-
Superskalare
Prozessoren erreichen eine hohe Leistungsfähigkeit, indem mehrere Befehle gleichzeitig
ausgeführt
werden und indem die kleinst mögliche
Taktdauer verwendet wird, die mit dem Aufbau verträglich ist.
Jedoch können
Daten- und Steuerablaufabhängigkeiten
zwischen Befehlen dahingehend begrenzend sein, wie viele Befehle
zu einer gegebenen Zeit ausgegeben werden können. Daher unterstützen einige
Prozessoren die spekulative Ausführung,
um eine weitere Leistungssteigerung zu erreichen.
-
Eine
Art einer Spekulation ist die Steuerablaufspekulation. In der Steuerablaufspekulation
wird die Richtung vorhergesagt, in der der Programmablauf fortschreiten
wird. Beispielsweise kann die Verzweigungsvorhersage eingesetzt
werden, um vorherzusagen, ob eine Verzweigung ausgeführt wird.
Es sind viele Arten der Verzweigungsvorhersage verfügbar, beginnend
von Verfahren, die einfach immer die gleiche Vorhersage treffen,
bis zu jenen, die komplexe historische Abläufe der vorhergehenden Verzweigungen
in dem Programm bewahren, um eine auf die Historie gestützte Vorhersage
zu treffen. Die Verzweigungsvorhersage kann durch Hardwareoptimierungen,
Compileroptimierungen, oder beides unterstützt werden. Auf der Grundlage
der Vorhersage, die von dem Verzweigungsvorhersagemechanismus bereitgestellt
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, können Befehle, die spekulativ
auf der Grundlage der nicht korrekten Vorhersage ausgeführt wurden,
verworfen werden.
-
Eine
weitere Art der Spekulation ist die Datenspekulation, die Datenwerte
voraussagt. Zu vorgeschlagenen Arten der Datenspekulation gehören das
spekulative Erzeugen von Adressen für Speicheroperationen und das
spekulative Erzeugen von Datenwerten zur Verwendung in Berechnungsoperationen.
Ebenso wie bei der Ablaufspekulation werden die zu Grunde liegenden
Bedingungen, die zum spekulativen Erzeugen eines Wertes verwendet
werden, letztlich bewertet, wodurch ein Verifizieren der Spekulation
möglich
ist oder diese wird ungeschehen gemacht.
-
Da
die Spekulation das Voranschreiten der Befehlsausführung ermöglicht,
ohne dass gewartet werden muss, bis die spekulative Bedingung bekannt ist,
können
deutliche Leistungsverbesserungen erreicht werden, wenn der Leistungszuwachs,
der durch korrekte Spekulationen erreicht wird, den Leistungsverlust übersteigt,
der durch nicht korrekte Spekulationen hervorgerufen wird. Es ist
daher wünschenswert,
Leistungseinbußen
auf Grund nicht korrekter Spekulationen zu reduzieren.
-
Überblick über die
Erfindung
-
Es
werden diverse Ausführungsformen
und Verfahren und Systeme zum Vorhersagen der Abhängigkeit
von Ladeoperationen von älteren
(in der Programmreihenfolge) Schreib- bzw. Speicheroperationen in
einem datenspekulativen Prozessor offenbart. In einer Ausführungsform
umfasst ein Prozessor eine Ablauforganisationseinheit bzw. eine
Disponiereinheit, die ausgebildet ist, Operationen auszugeben, und
umfasst eine Lade/Schreibeinheit, die angeschlossen ist, um Speicheroperationen
zu empfangen, die von der Disponiereinheit ausgegeben ist, und die
ausgebildet ist, die Speicheroperationen auszuführen. Die Lade/Schreibeinheit
ist ferner ausgebildet vorherzusagen, ob eine gegebene Ladeoperation von
einer älteren
Schreib- bzw. Speicheroperation abhängt, und sie ist ferner ausgebildet,
die gegebene Ladeoperation auszuführen, bevor eine Adresse der älteren Schreiboperation
berechnet wird, in Reaktion auf das Vorhersagen, dass die gegebene
Ladeoperation von der älteren
Schreiboperation unabhängig
ist, und ist weiterhin ausgebildet zu erkennen, ob die gegebene
Ladeoperation falsch vorhergesagt wurde, im Anschluss auf das Vorhersagen,
dass die gegebene Ladeoperation unabhängig von der älteren Schreiboperation
ist, und ist weiterhin ausgebildet, eine Wiederholangabe für die Disponiereinheit
bereitzustellen, die angibt, dass die Ladeoperation in Reaktion
darauf erneut ausgegeben werden soll, dass die gegebene Ladeoperation
falsch vorhergesagt ist.
-
In
einer speziellen Ausführungsform
umfasst die Lade/Schreibeinheit eine lokale Vorhersageeinheit, die
mehrerer lokale Vorhersageeinträge
aufweist. Jeder der mehreren lokalen Vorhersageeinträge umfasst
einen Abhängigkeitsvorhersagewert,
und die Lade/Schreibeinheit ist ferner ausgebildet, um vorherzusagen,
ob die gegebene Ladeoperation von der älteren Schreiboperation abhängig ist,
indem auf einen gegebenen lokalen Vorhersageeintrag zugegriffen
wird, der der gegebenen Ladeoperation entspricht und indem ein gegebener
Abhängigkeitsvorhersagewert,
der in den gegebenen lokalen Vorhersageeintrag enthalten ist, bewertet
wird.
-
In
einer weiteren speziellen Ausführungsform
umfasst die Lade/Schreibeinheit eine globale Vorhersageeinheit mit
einem globalen Historien- bzw. Geschichtsregistern und mehreren
globalen Vorhersageeinträgen.
Das globale Historienregister ist ausgebildet, um mehrere entsprechende
Abhängigkeitswerte
zu speichern, die mehreren ausgeführten Ladeoperationen entsprechen.
Jeder der mehreren globalen Vorhersageeinträge enthält einen Abhängigkeitsvorhersagewert.
Die Lade/Schreibeinheit ist ferner ausgebildet, um vorherzusagen,
ob die gegebene Ladeoperation von der älteren Schreiboperation abhängig ist,
indem auf einen gegebenen globalen Vorhersageeintrag zugegriffen
wird, der dem globalen Historienregister entspricht, und indem ein
gegebener Abhängigkeitsvorhersagewert,
der in dem gegebenen globalen Vorhersageeintrag enthalten ist, bewertet
wird.
-
In
gemäß einer
noch weiteren speziellen Ausführungsform
umfasst die Lade/Schreibeinheit eine lokale Vorhersageeinheit mit
mehreren lokalen Vorhersageeinträgen,
wobei jeder der mehreren lokalen Vorhersageeinträge einen Abhängigkeitsvorhersagewert
aufweist, und umfasst eine globale Vorhersageeinheit mit einem globalen
Historienregister und mehreren globalen Vorhersageeinträgen, wobei das
globale Historienregister ausgebildet ist, mehrere entsprechende
Abhängigkeitswerte
zu speichern, die mehreren ausgeführten Ladeoperationen entsprechen,
und wobei die mehreren globalen Vorhersageeinträge einen Abhängigkeitsvorhersagewert enthalten.
Die Lade/Schreibeinheit ist ferner ausgebildet, um vorherzusagen,
ob die gegebene Ladeoperation von der älteren Schreiboperation abhängig ist,
indem bestimmt wird, ob die gegebene Ladeoperation eine dynamische
Ladeoperation ist. In Reaktion darauf, dass bestimmt wird, dass
die gegebene Ladeoperation keine dynamische Ladeoperation ist, greift
die Lade/Schreibeinheit auf einen gegebenen lokalen Vorhersageeintrag
zu, der der gegebenen Ladeoperation entspricht, und bewertet einen
lokalen Abhängigkeitsvorhersagewert,
der in dem gegebenen lokalen Vorhersageeintrag enthalten ist. In
Reaktion auf das Bestimmen, dass die gegebene Ladeoperation eine
dynamische Ladeoperation ist, greift die Lade/Schreibeinheit auf
einen gegebenen globalen Vorhersageeintrag zu, der dem globalen
Geschichtsregister entspricht, und bewertet einen globalen Abhängigkeitsvorhersagewert,
der in dem gegebenen globalen Vorhersageeintrag enthalten ist.
-
Kurze Beschreibung
der Zeichnungen
-
Ein
besseres Verständnis
der vorliegenden Erfindung kann gewonnen werden, wenn die folgende
detaillierte Beschreibung in Verbindung mit den folgenden Zeichnungen
studiert wird, in denen:
-
1 eine
Blockansicht ist, die einen Prozessor gemäß einer Ausführungsform
zeigt;
-
2 eine
Blockansicht ist, die eine Lade/Schreibeinheit gemäß einer
Ausführungsform darstellt;
-
3a eine
Blockansicht ist, die eine Ausführungsform
einer Abhängigkeitsvorhersagelogik mit
einer lokalen Vorhersagedatenstruktur zeigt;
-
3b eine
Blockansicht ist, die eine Ausführungsform
einer Abhängigkeitsvorhersagelogik mit
einer globalen Vorhersagedatenstruktur zeigt;
-
3c eine
Blockansicht ist, die eine Ausführungsform
einer Abhängigkeitsvorhersagelogik mit
einer Hybrid-Vorhersagedatenstruktur zeigt;
-
4a eine
Blockansicht ist, die eine Ausführungsform
einer Ausgabeeinheit zeigt;
-
4b eine
Blockansicht ist, die ein beispielhaftes Adressiermuster gemäß einer
Ausführungsform
zeigt;
-
5 ein
Flussdiagramm ist, das eine Ausführungsform
eines Verfahrens für
das Vorhersagen zeigt, ob eine gegebene Ladeoperation von einer älteren Schreiboperation
abhängig
ist;
-
6 eine
Blockansicht ist, die ein beispielhaftes Computersystem gemäß einer
Ausführungsform
zeigt; und
-
7 eine
Blockansicht ist, die ein beispielhaftes Computersystem gemäß einer
weiteren Ausführungsform
zeigt.
-
Obwohl
die Erfindung diversen Modifizierungen und alternativen Formen unterliegen
kann, sind dennoch spezielle Ausführungsformen beispielhaft in den
Zeichnungen gezeigt und werden nachfolgend detailliert beschrieben.
Es sollte jedoch selbstverständlich
sein, dass die Zeichnungen und die detaillierte Beschreibung nicht
beabsichtigen, die Erfindung auf die spezielle offenbarte Form einzuschränken, sondern
die Erfindung soll vielmehr alle Modifizierungen, Äquivalente
und Alternativen abdecken, die innerhalb des Grundgedankens und
Schutzbereichs der vorliegenden Erfindung liegen, wie sie durch
die angefügten
Patentansprüche
definiert ist. Zu beachten ist, dass die Überschriften nur der Unterteilung
dienen und die Beschreibung oder die Ansprüche nicht einschränken oder
interpretieren sollen. Des weiteren ist zu beachten, dass „kann" durchwegs in dieser
Anmeldung in einem zulässigen
Sinne (d. h. besitzt die Möglichkeit
zu, ist in der Lage zu) verwendet wird, und nicht in einem bestimmenden Sinne
(muss). Der Begriff „enthalten" und Ableitungen
davon bedeuten „einschließlich aber
nicht beschränkt
darauf". Der Begriff „verbunden" bedeutet „direkt
oder indirekt verbunden",
und der Begriff „gekoppelt" bedeutet „direkt
oder indirekt gekoppelt".
-
Art bzw. Arten 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 Befehlszwischenspeicher bzw. Befehlscachespeicher 106 und einen
Datenzwischenspeicher bzw. einen Datencachespeicher 128 enthalten.
Der Pro zessor 100 kann eine Vorabholeinheit 108 aufweisen,
die in dem Befehlscachespeicher 106 enthalten ist. Eine
Ausgabeeinheit 104 ist ausgebildet, Befehle von dem Befehlscachespeicher 106 zu
empfangen und Operationen an eine oder mehrere Ablauforganisationseinheiten bzw.
Disponiereinheiten 118 auszugeben. Die eine oder mehreren
Disponiereinheiten 118 sind so angeschlossen, dass diese
ausgegebene Operationen von der Ausgabeeinheit 104 empfangen
und Operationen an einen oder mehrere Ausführungskerne 124 ausgeben.
Der eine oder die mehreren Ausführungskerne 124 enthalten
eine Lade/Schreib- bzw. eine Lade/Speicher-Einheit, die ausgebildet
ist, Zugriffe auf den Datencachespeicher 128 auszuführen. Ergebnisse,
die von dem einen bzw. den mehreren Ausführungskernen 124 erzeugt
werden, werden auf einen Ergebnisbus 130 ausgegeben. Diese
Ergebnisse können
als Operandenwerte für
nachfolgend ausgegebene Befehle verwendet werden und/oder in einer Registerdatei 116 gespeichert
werden. Eine Rücknahmewarteschlange
bzw. eine Rücknahme-
oder Abschlussreihenfolge 102 ist mit der bzw. den Disponiereinheiten 118 und
der Ausgabeeinheit 104 verbunden. Die Rücknahmewarteschlange 102 ist
ausgebildet, um zu bestimmen, wann jede ausgegebene Operation zurückgenommen
bzw. abgeschlossen ist. In einer Ausführungsform ist der Prozessor 100 so gestaltet,
dass dieser mit der x-86-Architektur
kompatibel ist. Zu beachten ist, dass der Prozessor 100 auch
andere Komponenten aufweisen kann. Beispielweise kann der Prozessor 100 eine
Verzweigungsvorhersageeinheit (nicht gezeigt) enthalten.
-
Der
Befehlscachespeicher 106 kann zeitweilig Befehle speichern,
bevor diese von der Ausgabeeinheit 104 empfangen werden.
Befehlscodierung kann dem Befehlscachespeicher 102 zugeführt werden,
indem eine Codierung aus dem Systemspeicher 200 über die
Vorabholeinheit 108 vorläufig ausgelesen wird. Der Befehlscachespeicher 106 kann
in diversen Konfigurationen eingerichtet sein (beispielsweise teilassoziativ,
vollständig
assoziativ oder direkt zugeordnet). In einigen Ausführungsformen
können mehrere
Ebenen aus Befehls- und/oder
Datencache-Speichern 106 und 128 vorgesehen sein.
Gewisse Ebenen können
in dem Prozessor 100 integriert sein, wie dies gezeigt
ist, während
andere Ebenen der Zwischenspeicherung außerhalb des Prozessors liegen
können.
-
Die
Vorabholeinheit 108 kann Befehlscodierung aus dem Systemspeicher 200 zur
Speicherung innerhalb des Befehlscachespeichers 106 abholen. In
einer Ausführungsform
ist die Vorabholeinheit 108 so ausgebildet, um eine Kodierung
blockweise aus dem Systemspei cher 200 in dem Befehlscachespeicher 106 abzulegen.
Die Vorabholeinheit 108 kann eine Vielzahl spezieller Kodierungsvorabholverfahren
und Algorithmen einsetzen.
-
Die
Ausgabeeinheit 104 gibt Signale aus, die bitkodierte Operationen,
die von dem bzw. den Ausführungskernen 124 ausführbar sind,
sowie Operandenadresseninformationen, unmittelbare Daten und/oder
Verschiebungsdaten enthalten. In einigen Ausführungsformen umfasst die Ausgabeeinheit 104 eine
Decodierschaltung (nicht gezeigt), um gewisse Befehle in Operationen
zu dekodieren, die in dem bzw. den Ausführungskernen 124 ausführbar sind. Einfache
Befehle können
einer einzelnen Operation entsprechen. In einigen Ausführungsformen
können komplexere
Befehle mehreren Operationen entsprechen. Wenn eine Operation die
Aktualisierung eines Registers erfordert, kann eine Registerstelle
innerhalb einer Registerdatei 116 reserviert werden (beispielsweise
beim Decodieren dieser Operation), um spekulative Registerzustände zu speichern
(in einer alternativen Ausführungsform
kann ein Umordnungspuffer verwendet werden, um einen oder mehrerer spekulative
Registerzustände
für jedes
Register zu speichern). In einigen Ausführungsformen kann die Ausgabeeinheit 104 eine
Registerkarte bzw. Zuordnung einrichten, die logische Registernamen
von Quellen- und Zieloperanden physikalischen Registernamen zuordnet,
um damit die Registerumbenennung zu ermöglichen. Eine derartige Registerzuordnung
kann auch überwachen,
welche Register innerhalb der Registerdatei 116 aktuell
reserviert sind.
-
Der
Prozessor 100 aus 1 unterstützt die Ausführung außer der
Reihe. Eine Rücknahmewarteschlange 102 verfolgt
die ursprüngliche
Programmsequenz für
Registerlese- und Schreiboperationen, ermöglicht die spekulative Befehlsausführung und die
Wiederherstellung bei Verzweigungsfehlvorhersage und ermöglicht eine
präzise
Ausnahmeereignisbearbeitung. Die Rücknahmewartschlange 102 kann in
einer „zuerst
hinein-zuerst heraus"-
Konfiguration einrichtet sein, in der die Operationen zur „Hinterseite" des Puffers wandern,
wenn sie in der Gültigkeit überprüft werden,
wodurch an der „Vorderseite" der Warteschlange
Platz für
neue Einträge
geschaffen wird. Die Rücknahmewarteschlange 102 kann
eine Operation in Reaktion darauf abschließen bzw. zurücknehmen,
dass diese Operation vollständig
ausgeführt
ist und eine Datenspekulation oder Ablaufspekulation, die an Operationen
bis zu und einschließlich
dieser Operation in der Programmreihenfolgen ausgeführt wurden,
verifiziert sind. Die Rücknahmewarteschlange 102 kann
den spekulativen Zustand eines physikalischen Registers dem Konfigurationszustand
des Prozesses 100 zuordnen, wenn die Operation, die den
Wert in diesem physikalischen Register erzeugt hat, zurück genommen
bzw. abgeschlossen ist. In einigen Ausführungsformen ist die Rücknahmewarteschlange 102 als
ein Teil eines Umordnungspuffers eingerichtet. Ein derartiger Umordnungspuffer
kann ferner einen Datenwertspeicher für spekulative Registerzustände bereitstellen,
um damit die Registerumbenennung zu unterstützen. Zu beachten ist, dass
in anderen Ausführungsformen
die Rücknahmewartschlange 102 keinen
Datenwertspeicher bereitstellen muss. Stattdessen kann, wenn Operationen
abgeschlossen werden, die Rücknahmewarteschlange 102 Register
in der Registerdatei 116 freigeben, die nicht mehr benötigt werden,
um spekulative Registerzustände
zu speichern, und sie kann Signale an die Registerzuordnung 134 bereitstellen,
die angeben, welche Register aktuell verfügbar sind. Durch Bewahren der
spekulativen Registerzustände
innerhalb der Registerdatei 116 (oder in alternativen Ausführungsformen
innerhalb eines Umordnungspuffers) bis die Operationen, die diese
Zustände
erzeugten, als gültig
erklärt
sind, können
die Ergebnisse von spekulativ ausgeführten Operationen entlang eines
falsch vorhergesagten Pfades in der Registerdatei 116 als
ungültig
erklärt
werden, wenn eine Verzweigungsvorhersage nicht korrekt ist.
-
Wenn
ein erforderlicher Operand einer speziellen Operation eine Registerstelle
ist, können
Registeradresseninformationen zu der Registerzuordnung 134 (oder
zu einem Umordnungspuffer) weitergeleitet werden. Beispielsweise
gibt es in der x-86-Architektur 8 logische 32-Bit-Register (beispielsweise EAX,
EBX, ECX, EDX, EBP, ESI, EDI und ESP). Die physikalische Registerdatei 116 (oder
ein Umordnungspuffer) enthalten Speicherplatz für Ergebnisse, die den Inhalt
dieser logischen Register ändern,
wodurch eine Abarbeitung außerhalb
der Reihenfolge möglich
ist. Ein physikalisches Register in der Registerdatei 116 kann
zugeordnet werden, um das Ergebnis jeder Operation zu speichern,
die erkannt wurde, den Inhalt eines der logischen Register zu modifizieren.
Dabei kann während
diverser Stellen während des
Ausführens
eines speziellen Programms die Registerdatei 116 (oder
in alternativen Ausführungsformen
ein Umordnungspuffer) ein oder mehrere Register aufweisen, die den
spekulativ ausgeführten
Inhalt eines gegebenen logischen Registers enthalten.
-
Die
Registerzuordnung 134 kann ein physikalisches Register
einem speziellen logischen Register zuordnen, das als ein Zieloperand
für eine
Operation angegeben ist. Die Ausgabeeinheit 104 kann bestimmen,
dass die Registerdatei 116 ein oder mehrere zuvor zugewiesene
physikalische Register aufweist, die einem logischen Register zugewiesen
sind, das als ein Quellenoperand in einer gegebenen Operation angegeben
ist. Die Registerzuordnung 134 kann eine Markierung für das physikalische
Register bereitstellen, das zuletzt diesem logischen Register zugewiesen
wurde. Diese Markierung kann verwendet werden, um auf den Datenwert
des Operanden in der Registerdatei 116 zuzugreifen oder
um den Datenwert über
die Ergebnisweiterleitung auf dem Ergebnisbus 130 zu empfangen.
Wenn der Operand einer Speicherstelle entspricht, kann der Operandenwert
auf dem Ergebnisbus bereitgestellt werden (die Ergebnisweiterleitung
und/oder Speicherung in der Registerdatei 116) über die
Lade/Schreibeinheit 126c, wie dies nachfolgend beschrieben
ist. Operandendatenwerte können
dem bzw. 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 Operandenwerte
einem entsprechenden Ausführungskern 124 zugeführt werden,
wenn die Operation ausgegeben wird).
-
Die
Bit-kodierten Operationen und die unmittelbaren Daten, die an den
Ausgängen
der Ausgabeeinheit 104 bereitgestellt werden, können zu
einer oder mehreren Disponiereinheiten 118 geführt werden.
Zu beachten ist, dass im hierin verwendeten Sinne eine Disponiereinheit
eine Vorrichtung ist, die erkennt, wann Operationen für das Ausführen bereit sind
und bereitstehende Operationen zu einer oder mehreren Funktionseinheiten
ausgegeben. Z. B. ist eine Reservierstation eine Disponiereinheit.
Operationen in einer Disponiereinheit oder einer Gruppe aus Disponiereinheiten
können
auch als Operationen in einem Befehl oder einem Operationsfenster
oder einem Disponierfenster bezeichnet werden. Jede Disponiereinheit 118 ist
in der Lage, Operationsinformation (beispielsweise Bit-kodierte
Ausführungsbits
sowie Operandenwerte, Operandenmarken und/oder unmittelbare Daten)
für mehrere
anhängige
Operationen halten, die auf die Ausgabe zu einem Ausführungskern 124 warten.
In einigen Ausführungsformen ist
in keiner Disponiereinheit 118 Speicherplatz für einen
Operandenwert. Stattdessen kann jede Disponiereinheit ausgegebene
Operationen und Ergebnisse, die in der Registerdatei 116 verfügbar sind, überwachen,
um zu bestimmen, wann Operandenwerte verfügbar sind, um von den Funktionseinheiten 126 ausgelesen
zu werden (aus der Registerdatei 116 oder dem Ergebnisbus 130).
In einigen Ausführungsformen
ist jede Disponiereinheit 118 mit einer speziellen Funktionseinheit 126 verknüpft. In
anderen Ausführungsformen
kann eine einzelne Disponiereinheit 118 Operationen an
mehr als eine der Funktionseinheiten 126 ausgeben.
-
Die
Disponiereinheiten 118 sind vorgesehen, um zeitweilig Informationsinformation,
die von dem bzw. den Ausführungskernen 124 auszuführen sind, zu
speichern. Wie zuvor dargelegt ist, kann jede Disponiereinheit 118 Operationsinformation
für anhängige Operationen
speichern. Ferner kann jede Disponiereinheit Operationsinformation
für Operationen speichern,
die bereits ausgeführt
sind, aber unter Umständen
nochmals ausgegeben werden. Operationen werden an den bzw. die Ausführungskerne 124 zur
Ausführung
in Reaktion darauf ausgegeben, dass Werte für eine oder mehrere erforderliche
Operanden zum Zeitpunkt des Ausführens
verfügbar
sind. Folglich ist die Reihenfolge, in der die Operationen ausgeführt werden,
unter Umständen
nicht gleich der Reihenfolge der ursprünglichen Programmbefehlssequenz.
Operationen, die Datenspekulation beinhalten, können in der bzw. den Disponiereinheiten 118 verbleiben,
bis sie nicht spekulativ werden, so dass sie erneut ausgegeben werden
können,
wenn die Datenspekulation nicht korrekt war. Wie in 1 gezeigt ist,
stellt die Lade/Schreibeinheit 126c für die Disponiereinheit 118 eine
Wiederholungsangabe bereit, die eine oder mehrere Operationen kennzeichnet,
die erneut auszugeben sind. Beispielsweise kann in einer Ausführungsform
eine derartige Wiederholungsangabe die Marke jeder erneut auszuführenden
Operation enthalten. In einer weiteren Ausführungsform kann eine derartige
Wiederholungsangabe ein Bit enthalten, das jeder Lade/Schreiboperation
in der Disponiereinheit 118 entspricht, so dass die Wertzuweisung
eines speziellen Bits bzw. das Setzen des speziellen Bits angibt,
dass eine entsprechende Operation erneut zu bearbeiten ist. Die
Disponiereinheit 118 kann daraufhin Operationen erneut
ausgeben, die von einer Wiederholungsangabe gekennzeichnet werden.
-
In
einer Ausführungsform
kann jeder des bzw. der Ausführungskerne 124 mehrere
Funktionseinheiten 126 enthalten (beispielsweise Funktionseinheiten 126a bis 126c,
wie in 1 gezeigt ist). Einige Funktionseinheiten, beispielsweise 126a,
sind ausgebildet, um Ganzzahlarithmetikoperationen mit Addition
und Subtraktion sowie Schiebeoperationen, Subtraktionen, logische
Operationen und Verzweigungsoperationen auszuführen. Andere Funktionseinheiten,
beispielsweise 126b, sind ausgebildet, um Fließkommaoperationen
auszuführen.
Eine oder mehrere der Funktionseinheiten sind ausgebildet, um die
Adressenerzeugung für
Lade- und Schreibspeicheroperationen auszuführen, die von einer Funktionseinheit
auszuführen
sind, beispielsweise der Einheit 126c, die die Lade- und
Schreib- bzw. Speicheroperationen ausführt, um in dem Datencachespeicher 128 und/oder
dem Systemspeicher enthaltene Daten abzurufen. In einer Ausführungsform
ist eine derartige Funktionseinheit 126c mit einem Lade/Schreibpuffer
mit mehreren Speicherstellen für Daten-
und Adressinformationen für
anhängige
Ladeoperationen und/oder Schreiboperationen versehen. Die Funktionseinheit 126c wird
im Weiteren auch als eine Lade/Schreibeinheit bezeichnet.
-
Eine
oder mehrere Funktionseinheiten 126 können ferner Information hinsichtlich
des Ausführens
bedingter Verzweigungsbefehle für
eine Verzweigungsvorhersageeinheit bereitstellen, so dass, wenn
eine Verzweigung falsch vorhergesagt wurde, die Verzweigungsvorhersageeinheit
Befehle verwerten kann, die auf die falsch vorhergesagte Verzweigung
folgen, die in dem Befehlsverarbeitungsablauf bzw. der Pipeline
enthalten sind, und die Vorabholeinheit 106 kann entsprechend
neu angewiesen werden. Die neu angewiesene Vorabholeinheit 106 beginnt
dann mit dem Abholen des korrekten Befehlssatzes aus dem Befehlscachespeicher 106 oder
dem Systemspeicher 200. In derartigen Situationen können die
Ergebnisse von Befehlen in der ursprünglichen Programmsequenz, die
nach dem falsch vorhergesagten Verzweigungsbefehl auftraten, verworfen
werden, wobei jene mit eingeschlossen sind, die spekulativ ausgeführt und
temporär
in der Registerdatei 116 gespeichert wurden.
-
Ergebnisse,
die von den Funktionseinheiten 126 in dem bzw. den Ausführungskernen 124 erzeugt wurden,
können
auf dem Ergebnisbus 130 zur Registerdatei 116 ausgegeben
werden, wenn ein Registerwert aktualisiert wird. Wenn der Inhalt
einer Speicherstelle geändert
wird, können
die in dem bzw. den Ausführungskernen 124 erzeugten
Ergebnisse der Lade/Schreibeinheit 126c zugeführt werden.
-
Der
Datencachespeicher 128 ist ein Cachespeicher bzw. ein schneller
Zwischenspeicher, der vorgesehen ist, um temporär Daten zu speichern, die zwischen
dem bzw. den Ausführungskernen 124 und dem
Systemspeicher 200 ausgetauscht werden. Ebenso wie der
zuvor beschriebene Befehlscachespeicher 106 kann auch der
Datencachespeicher 128 in einer Vielzahl spezieller Speicherkonfigurationen
eingerichtet sein, wozu eine teilassoziative Konfiguration gehört. Des
weiteren können
der Datencachespeicher 106 und der Befehlscachespeicher 128 in
einigen Ausführungsformen
als ein einheitlicher Cachespeicher eingerichtet sein.
-
In
einigen Ausführungsformen
enthält
ein Prozessor 100 eine integrierte Speichersteuerung 160,
die es ermöglicht,
dass der Prozessor direkt mit dem Systemspeicher 200 in
Verbin dung tritt. In anderen Ausführungsformen ist die Speichersteuerung 160 in
einer Busbrücke
enthalten, die den Prozessor 100 indirekt mit dem Systemspeicher 200 verbindet.
-
Abhängigkeitsvorhersage
-
Wie
hierin beschrieben ist, ist ein Datenwert spekulativ, wenn es eine
Möglichkeit
gibt, dass der Datenwert als nicht korrekt ermittelt werden kann, und
dieser muss dann neu berechnet werden. Ein spekulativer Datenwert
ist einer, der nicht mit Gewissheit als korrekt oder nicht korrekt
erkannt werden kann. Ein Datenwert kann erneut berechnet werden, wenn
dieser Datenwert das Ergebnis einer Operation ist, für die eine
gewisse Datenspekulation ausgeführt wurde,
oder wenn der Datenwert von einem weiteren spekulativen Datenwert
abhängt
(beispielsweise wenn der Datenwert als das Ergebnis einer Operation
erzeugt wird, die einen oder mehreren spekulativen Operanden besitzt).
Ein nicht spekulativer Wert ist ein Wert, der nicht von einer Datenspekulation
abhängt
(wobei ein derartiger Wert dennoch einer Ablaufspekulation unterliegen
kann).
-
Es
können
diverse Mechanismen in einem Prozessor 100 eine Datenspekulation
ausführen. Beispielsweise
kann in einer Ausführungsform
die Lade/Schreibeinheit 126c vorhersagen, ob eine gegebene
Ladeoperation von einer älteren
Schreib- bzw. Speicheroperation abhängt, bevor die Schreibadresse
berechnet wird. Ladeoperationen, die als unabhängig von älteren Schreiboperationen vorhergesagt
werden, können
in freier Weise in Bezug auf die Schreiboperationen disponiert werden
und können als
spekulativ ausführbar
eingestuft werden. Diese Art der Datenspekulation wird hierin als
Abhängigkeitsvorhersage
bezeichnet. In einem weiteren Beispiel der Abhängigkeitsvorhersage erkennt
die Ausgabeeinheit 104, dass ein Ergebnis einer Operation als
ein spekulativer Operand für
eine weitere Operation verwendet werden kann. Beispielsweise kann die
Ausgabeeinheit 104 vorhersagen, dass eine Ladeoperation
auf Daten zugreifen wird, die in dem Datencachespeicher 128 von
einer früheren
Schreiboperation gespeichert wurden. Die Ausgabeeinheit 104 kann
dementsprechend den Datenwert, der in dem Register gespeichert ist,
das als die Quelle der Schreiboperation verwendet wurde, als das
spekulative Ergebnis der Ladeoperation kennzeichnen. Eine derartige
Abhängigkeitsvorhersage
kann in der Ausgabeeinheit 104 erweitert werden, indem
die Quelle der Schreiboperation als eine spekulative Operandenquelle
verknüpft
wird für
Operationen, die das Ergebnis der Ladeoperation als einen Operanden
angeben.
-
Es
können
viele verschiedene Arten der Datenspekulation ausgeführt werden,
um einige spekulative Ergebnisse zu erzeugen. Beispielsweise kann das
spekulative Ergebnis einer Ganzzahloperation unter Anwendung eines
vorhergesagten Datenwertes erzeugt werden. Dieses spekulative Ergebnis kann
durch eine Schreiboperation gespeichert werden. Eine Ladeoperation
kann als abhängig
von dieser Schreiboperation durch die Abhängigkeitsvorhersage vorhergesagt
werden, und somit ist das spekulative Ergebnis der Ladeoperation
das spekulative Ergebnis der Ganzzahloperation.
-
Operationen,
die von dem Ergebnis von Operationen abhängen, an denen eine Datenspekulation
ausgeführt
wurde, können
ebenso spekulative Ergebnisse erzeugen. Wenn beispielsweise die Adressenvorhersage
verwendet wird, um das spekulative Ergebnis einer Ladeoperation
zu erzeugen, können
abhängige
Operationen, die unter Anwendung des spekulativen Ergebnisses der
Ladeoperation als Operand ausgeführt
werden, spekulative Ergebnisse erzeugen, die wiederum als Operanden von
anderen abhängigen
Operationen verwendet werden können.
Wenn daher die zu Grunde liegende Spekulation in der Ladeoperation
als unkorrekt erkannt wird, können
die Ergebnisse der abhängigen Operationen
ebenso nicht korrekt sein, und damit muss unter Umständen die
gesamte Abhängigkeitskette
an Operationen, die von dieser Ladeoperation abhängen, erneut ausgeführt werden,
um korrekte Ergebnisse zu erzeugen. Wenn andererseits die zu Grunde
liegende Spekulation als richtig erkannt wird, können die Ergebnisse der abhängigen Operationen richtig
sein (unter der Annahme, dass jene Ergebnisse nicht auf anderen
spekulativen Werten beruhen).
-
Es
können
viele Operationen, für
die eine Datenspekulation ausgeführt
wurde, verifiziert werden, wenn jene Operationen von einer Funktionseinheit
ausgeführt
werden. Beispielsweise kann die Datenvorhersage, die zum spekulativen
Erzeugen des Ergebnisses einer Operation angewendet wird, durch die
Funktionseinheit 126 verifiziert werden, die diese Operation
ausführt,
indem das tatsächliche
Ergebnis der Operation mit dem spekulativen Ergebnis verglichen
wird. Derartige Operationen müssen
ggf. nicht erneut ausgeführt
werden, wenn die Datenspekulation nicht korrekt ist, da das korrekte
Ergebnis bereits verfügbar
ist. Andere Operationen können
verifiziert werden, ohne dass diese vollständig ausgeführt werden. Wenn beispielsweise
eine Ladeoperation mit einer nicht berechneten Adresse ein Ergebnis
aus einer früheren
Schreiboperation weitergab (beispielsweise auf Grund der Abhängigkeits-
oder Adressenvorhersage), kann das spekulative Ergebnis der Ladeoperation
verifiziert werden, wenn die Ladeadresse berechnet wird. Wenn die
Datenspekulation nicht korrekt ist, muss eine derartige Operation
unter Umständen
erneut ausgeführt
werden (zumindest teilweise), um das korrekte Ergebnis zu erzeugen.
-
Da
Operationen, für
die die Datenspekulation ausgeführt
wurden, und ihre abhängigen
Operationen unter Umständen
erneut ausgeführt
werden müssen,
ist die Rücknahmewarteschlange 102 ausgebildet,
lediglich Operationen zurückzunehmen bzw.
abzuschließen,
für die
die zu Grunde liegende Datenspekulation geklärt ist.
-
Lade/Schreibeinheit mit
Abhängigkeitsvorhersage
-
In
einem Prozessor, der eine datenspekulative Ausführung unterstützt, kann
eine Lade/Schreibeinheit 126c ausgebildet sein vorherzusagen,
ob eine Ladeoperation von einer älteren
Schreiboperation abhängt,
und kann es ermöglichen,
dass Ladeoperationen, die als unabhängig vorausgesagt werden, in
freier Weise im Vergleich zu Schreiboperationen disponiert werden,
wie dies zuvor beschrieben ist. Ferner kann eine Lade/Schreibeinheit 126c einen Verifiziermechanismus
enthalten, der nicht korrekte Abhängigkeitsvorhersagen erkennt
und der Disponiereinheit anzeigt, dass nicht korrekt vorhergesagte Operationen
erneut bearbeitet werden müssen,
wodurch die Disponiereinheit veranlasst wird, jene Operationen an
die Lade/Schreibeinheit 126c zu einem späteren Zeitpunkt
erneut auszugeben. Es ist zu beachten, dass im hierin verwendeten
Sinne Bezugnahmen auf Lade- oder Schreiboperationen, die älter oder
jünger
sind als andere Operationen, als älter oder jünger relativ zur Programmreihenfolge
der Operationen, die verglichen werden, zu verstehen sind. D. h.,
eine erste Operation, die in der Programmreihenfolge früher auftritt
als eine zweite Operation wird als älter als die zweite Operation
bezeichnet, und die zweite Operation wird als jünger als die erste Operation
bezeichnet.
-
2 zeigt
eine Ausführungsform
einer Lade/Schreibeinheit 126c, die ausgebildet ist, eine
Abhängigkeitsvorhersage
für Ladeoperationen
durchzuführen.
In der dargestellten Ausführungsform
enthält die
Lade/Schreibeinheit 126c eine Abhängigkeitsvorhersagelogik 303 und
eine Abhängigkeitsverifizierlogik 305,
die miteinander und mit einem Operationsspeicher 307 verbunden
sind.
-
Die
Abhängigkeitsvorhersagelogik 303 ist ausgebildet,
eine Abhängigkeitsvorhersage
für Ladeoperationen
durchzuführen,
die von der Lade/Schreibeinheit 126c ausgegeben werden.
Wie nachfolgend detaillierter in Verbindung mit der Beschreibung
der 3a bis 3c dargestellt
ist, kann die Abhängigkeitsvorhersagelogik 303 lokale
und/oder globale Vorhersagedatenstrukturen enthalten, die ausgebildet
sind, Abhängigkeitsvorhersagewerte
entsprechend den Ladeoperationen zu speichern. Die Abhängigkeitsvorhersagelogik 303 ist
ausgebildet, auf einen Abhängigkeitsvorhersagewert
zuzugreifen, der einer gegebenen Ladeoperation entspricht, die in dem
Operationsspeicher 307 gespeichert ist. Wenn der entsprechende
Abhängigkeitsvorhersagewert angibt,
dass die gegebene Ladeoperation als unabhängig von älteren Schreiboperationen vorhergesagt wird,
erlaubt es die Lade/Schreibeinheit 126c der gegebenen Ladeoperation,
dass diese ausgeführt
wird, bevor die Adressen einer oder mehrerer älterer Schreiboperationen berechnet
sind.
-
Die
Abhängigkeitsverifizierlogik 305 ist
ausgebildet, eine Datenspekulation, die von der Abhängigkeitsvorhersagelogik 303 ausgeführt wurde,
zu verifizieren, wie dies nachfolgend detaillierter beschrieben
ist. Die Abhängigkeitsverifizierlogik 305 ist ferner
ausgebildet, eine Datenspekulation, die von anderen Bereichen des
Prozessors 100 ausgeführt wurde,
zu verifizieren. Wenn beispielsweise die Ausgabeeinheit 104 ausgebildet
ist, eine Abhängigkeitsvorhersage
auszuführen
(beispielsweise durch spekulatives Verknüpfen eines Ladeergebnisses
zur Quelle einer früheren
Schreiboperation), ist die Abhängigkeitsverifizierlogik 305 ausgebildet,
diese Abhängigkeitsvorhersage
zu verifizieren.
-
Der
Operationsspeicher 307 ist ausgebildet, Operationen zu
speichern, die an die Lade/Schreibeinheit 126c ausgegeben
wurden (beispielsweise durch die Disponiereinheit 118),
die aber noch nicht vollständig
ausgeführt
sind. Eine Operation, die an die Lade/Schreibeinheit ausgegeben
wurde und an der eine Datenspekulation ausgeführt wurde, wird nicht abgeschlossen,
bis diese Operation von der Abhängigkeitsverifizierlogik 305 verifiziert
ist. Der Operationsspeicher 307 kann alle anhängigen Operationen
innerhalb der Lade/Schreibeinheit 126c überwachen. Der Operationsspeicher 307 enthält einen
Eintrag 310 für
jede anhängige
Lade- und Schreiboperation.
-
Ein
Eintrag 310 kann auch Id/st-Information 313 enthalten,
die angibt, ob der Eintrag einer Ladeoperation oder einer Schreiboperation
zugeordnet ist (oder in einigen Ausführungsformen kann ein Eintrag angeben,
dass dieser sowohl eine Ladeoperation als auch eine Spei cheroperation
enthält,
wenn er einer Operation entspricht, die auf einem Wert operiert,
der von einer Speicheradresse eingeladen wird, wobei das Ergebnis
in einer Speicheradresse gespeichert wird). Ferner kann ein Eintrag 310 eine
Markierung 315 (die beispielsweise die Operation und ihr
Ergebnis in dem Prozessor 100 angibt), eine Adresse 317 und/oder
Daten 319 aufweisen. In einigen Ausführungsformen enthält die Markierung 315 den
Programmzählerwert,
der der Speicheroperation entspricht (beispielsweise den EIP-Wert
in Ausführungsformen,
in denen die x-86-Architektur eingerichtet ist). Das Datenfeld 319 jedes
Eintrags enthält
in einigen Ausführungsformen
Speicherplatz für
spekulative und nicht spekulative Daten. In ähnlicher Weise kann in einigen
Ausführungsformen
das Adressenfeld 317 Speicherplatz für mehr als einen Wert einer Adresse
einer Operation enthalten (beispielsweise eine spekulative Adresse,
die von der Adressenvorhersage erzeugt wird, und einen neuen Adressenwert,
der durch das Ausführen
einer Operation erzeugt wird). In einigen Ausführungsformen können Einträge zusätzliche
Felder enthalten, um Operationen und/oder Operanden als datenspekulativ
anzugeben. Beispielsweise kann die Flagge bzw. das Flag 321 angeben,
dass eine spezielle Ladeoperation als unabhängig von älteren Schreiboperationen vorhergesagt
wird. Ferner kann die Flagge 321 angeben, ob eine spezielle
Operation dynamisch vorhersagbar ist, wie dies nachfolgend detaillierter
beschrieben ist. Ein Eintrag 310 kann in Reaktion darauf
zugeordnet werden, dass die Disponiereinheit 118 eine Operation
an die Lade/Schreibeinheit 126c ausgibt und kann in Reaktion
darauf wieder freigegeben werden, dass die Lade/Schreibeinheit 126c die
Ausführung
der Operation abgeschlossen hat.
-
Die
Abhängigkeitsverifizierlogik 305 verifiziert
in einigen Fällen
der Abhängigkeitsprüfung dadurch,
dass das spekulative Ergebnis einer Operation mit dem tatsächlichen
Ergebnis der Operation verglichen wird. Zum Beispiel wird das spekulative
Ergebnis einer Ladeoperation in dem Eintrag 310 dieser
Ladeoperation innerhalb des Operationsspeichers 307 gespeichert.
Wenn das tatsächliche
Ergebnis dieser Ladeoperation von dem Datencachespeicher 318 erhalten
wird, kann die Abhängigkeitsverifizierlogik
das tatsächliche
Ergebnis mit dem spekulativen Ergebnis, das in dem Operationsspeicher 307 gespeichert
ist, vergleichen.
-
Die
Abhängigkeitsverifizierlogik 305 kann andere
Beispiele der Abhängigkeitsprüfung verifizieren,
indem die Adresse einer Operation mit Adressen einer oder mehrerer
früherer
Operationen verglichen wird. Beispielsweise kann die Abhängigkeitsverifizierlogik 305 entspre chende
Abhängigkeitsverifizierkomparatoren
(nicht gezeigt) aufweisen, oder sie kann Schreib-zu-Lade-Weiterleitungskomparatoren verwenden,
die in einigen Ausführungsformen
der Lade/Schreibeinheit 126c eingerichtet sind. In einer Ausführungsform
kann eine Ladeoperation als unabhängig von älteren Schreiboperationen durch
die Abhängigkeitsvorhersagelogik 303 vorhergesagt
werden, bevor die Adressen einer oder mehrerer älterer Schreiboperationen berechnet
sind. Wenn die Adressen einer oder mehrerer älterer Schreiboperationen verfügbar sind,
können
die Komparatoren ausgebildet sein, die älteren Schreiboperationen mit
der Adresse der als unabhängig
vorhergesagten Ladeoperation zu vergleichen. Wenn die Adresse einer älteren Schreiboperation
mit der Adresse der als unabhängig
vorhergesagten Ladeoperation übereinstimmt,
kann die Abhängigkeitsverifizierlogik 305 diese
Operation als falsch vorhergesagt kennzeichnen. In einigen Ausführungsformen
ist die Abhängigkeitsverifizierlogik 305 ausgebildet,
lediglich jene Ladeoperationen zu überwachen und zu verifizieren,
die als unabhängig
vorausgesagt sind (beispielsweise jene Ladeoperationen, die in dem
Operationsspeicher 307 mit Flaggenwerten 321 gespeichert
sind, die eine derartige Voraussage angeben). In anderen Ausführungsformen
ist die Abhängigkeitsverifizierlogik 305 auch
ausgebildet, um zu erkennen, ob Ladeoperationen, die als abhängig vorhergesagt
werden, auch tatsächlich
unabhängig
von älteren
Schreiboperationen sind.
-
In
Reaktion auf das Erkennen einer falsch vorhergesagten Abhängigkeit
einer Ladeoperation kann die Abhängigkeitsverifizierlogik 305 veranlassen,
dass die falsch vorhergesagten Ladeoperationen (und in einigen Ausführungsformen
andere Operationen), die abhängig
sind oder jünger
sind als die falsch vorhergesagte Ladeoperation) erneut bearbeitet
werden, und kann ferner eine Aktualisierung der Abhängigkeitsvorhersagelogik 303 veranlassen,
wie dies nachfolgend detaillierter beschrieben ist. Eine Operation
kann erneut ausgeführt
werden, indem ein Wiederholungssignal, das diese Operation kennzeichnet,
der Disponiereinheit 118 zugeführt wird. In Reaktion auf ein
derartiges Signal kann die Disponiereinheit 118 die Operation
für ein
wiederholtes Abarbeiten markieren (beispielsweise durch Modifizieren
der Zustandsinformation, die mit dieser Operation verknüpft ist,
um anzugeben, dass die Operation erneut bearbeitet werden soll).
In einer Ausführungsform
veranlasst die Abhängigkeitsverifizierlogik 305, dass
eine Operation erneut bearbeitet wird, indem die Markierung dieser
Operation der Disponiereinheit 118 zusammen mit einer Flagge
zugeführt
wird, die angibt, dass die Operation erneut ausgeführt werden soll.
In Ausführungsformen,
die falsche Vorhersagen von als abhängig vorhergesagten Ladeoperationen erkennen,
aktualisiert die Abhängigkeitsverifizierlogik 305 lediglich
die Abhängigkeitsaussagelogik 303, ohne
dass die falsch vorhergesagte Ladeoperation erneut bearbeitet wird,
da eine unkorrekt vorhergesagte Abhängigkeit von Ladeoperationen
lediglich zu einer Leistungseinbuße und nicht zu einer fehlerhaften
Berechnung führt.
In Ausführungsformen,
in denen die Abhängigkeitsvorhersagelogik 303 Zähler enthält, die
ausgebildet sind, eine Vorhersagehysterese bereitzustellen, wie
dies nachfolgend beschrieben ist, ist die Abhängigkeitsverifizierlogik 305 ausgebildet,
die Abhängigkeitsvorhersagelogik 303 im Falle
korrekter Vorhersagen sowie falscher Vorhersagen zu aktualisieren.
-
In
einigen Ausführungsformen
kann das korrekte Ergebnis einer Ladeoperation mit einer falsch vorhergesagten
Abhängigkeit
bereits verfügbar
sein. Z. B. kann eine als unabhängig
vorhergesagte Ladeoperation tatsächlich
von einer Schreiboperation abhängen,
und die Schreibdaten, etwa die Daten 319 des Eintrags 310,
die der Schreiboperation beispielsweise entsprechen, können verfügbar sein.
Wenn das korrekte Ergebnis der nicht korrekt spekulierten Ladeoperation
bereits verfügbar
ist, veranlasst in einigen Ausführungsformen
die Abhängigkeitsverifizierlogik 305 die
Lade/Schreibeinheit 126c, das korrekte Ergebnis der nicht
korrekt spekulierten Ladeoperation in allgemein adressierter Weise
an andere Komponenten des Prozessors auszugeben, so dass beliebige
abhängige
Operationen innerhalb anderer Bereiche des Prozessors unter Anwendung
des korrekten Wertes erneut ausgeführt werden können. Die Datenspekulationsverifizierlogik 305 veranlasst
in derartigen Ausführungsformen
nicht, dass eine derartige nicht korrekt spekulierte Ladeoperation
erneut ausgeführt
wird. Zu beachten ist, dass die Lade/Schreibeinheit 126c das
Ausführen
einer anhängigen
Operation abschließen
kann, selbst wenn die Lade/Schreibeinheit 126c auch veranlasst,
dass diese Operation erneut ausgeführt wird.
-
Die
Abhängigkeitsvorhersagelogik 303 kann eine
Vielzahl von Datenstrukturen einrichten, die ausgebildet sind vorherzusagen,
ob eine gegebene Ladeoperation von einer älteren Schreiboperation abhängig ist.
In diversen Ausführungsformen
werden für
die Abhängigkeitsvorhersage
lokale Vorhersageeinheiten, globale Vorhersageeinheiten und Hybrid-Vorhersageeinheiten
eingesetzt.
-
3a zeigt
eine Ausführungsform
der Abhängigkeitsvorhersagelogik
mit einer lokalen Vorhersagedatenstruktur. In der dargestellten
Ausführungsform
enthält
die Abhängigkeitsvorhersagelogik 303 eine
lokale Vorhersageeinheit 330, die mehrere lokale Vorhersageein träge 335 enthält. Jeder
lokale Vorhersageeintrag 335 enthält eine Indexmarkierung 336 und
einen Abhängigkeitsvorhersagewert 337.
In der dargestellten Ausführungsform
enthält
jeder lokale Vorhersageeintrag 335 auch einen Zähler 338,
obwohl in einigen Ausführungsformen
der Zähler
auch weggelassen werden kann, wie dies nachfolgend beschrieben ist.
Der Zähler 338 kann
ein Mehrbitzähler sein,
der ausgebildet ist, bei seinem maximalen oder minimalen Wert stehen
zu bleiben bzw. seine Sättigung
zu erreichen.
-
Jeder
lokale Vorhersageeintrag 335 kann ausgebildet sein, eine
Abhängigkeitsvorsageinformation
entsprechend einer gegebenen Ladeoperation zu speichern. Ein gegebener
lokaler Vorhersageeintrag 335 kann durch die Indexmarkierung 336 als
Index verwendet werden, was in einer Ausführungsform den Programmzählerwert
einer entsprechenden Ladeoperation enthalten kann. In anderen Ausführungsformen
kann die Indexmarkierung 336 einen Wert enthalten, um eine
entsprechende Ladeoperation zu kennzeichnen, die jünger ist
als ein Programmzählerwert,
etwa ein Zielmarkierungswert oder ein Ladeadressenwert nur um ein
Beispiel zu nennen. Die Indexmarkierung 336 kann eine Angabe
enthalten, dass der entsprechende lokale Vorhersageeintrag 335 zulässig ist
(d. h. einer gegebenen Ladeoperation zugeordnet ist).
-
Die
Identifizierungsinformation, die einer Ladeoperation entspricht,
etwa der Programmzählerwert,
kann der Abhängigkeitsvorhersagelogik 303 zugeführt werden,
wenn die Ladeoperation an die Lade/Schreibeinheit 126c ausgegeben
wird. In der dargestellten Ausführungsform
kann die lokale Vorhersageeinheit 330 die Identifizierungsinformation
der Ladeoperation im Hinblick auf die Indexmarkierung 336 jedes
lokalen Vorhersageeintrags 335 vergleichen, um zu bestimmen,
ob ein gültiger
Vorhersageeintrag entsprechend der Ladeoperation existiert, und
dies kann in einer assoziativen Weise ähnlich zur Funktionsweise eines
inhaltsadressierbaren Speichers (CAM) erfolgen. Wenn ein gültiger Vorhersageeintrag
existiert, kann sein entsprechender Abhängigkeitsvorhersagewert 337 (sowie
der Wert des Zählers 338,
falls dieser vorgesehen ist) ausgelesen und in dem Eintrag 310,
der der Ladeoperation entspricht, in dem Operationsspeicher 307 gespeichert werden.
Wenn kein gültiger
Vorhersageeintrag existiert und ein freier lokaler Vorhersageeintrag 335 verfügbar ist,
kann der freie Eintrag der Ladeoperation zugeordnet werden und die
Identifizierungsinformation der Ladeoperation kann in der Indexmarkierung 336 des
freien Eintrags gespeichert werden. Ferner kann ein Voreinstellungsvorhersagewert
in dem Abhängigkeitsvorhersagewert 337 des
freien Eintrags gespeichert werden. Z. B. können Ladeoperationen als unabhängig von älteren Schreiboperationen
als Voreinstellung vorhergesagt werden, so dass in diesem Falle
ein Vorhersagewert, der eine vorhergesagte Unabhängigkeit angibt, gespeichert
werden kann.
-
Die
Lade/Schreibeinheit 126c kann die Abhängigkeitsvorhersagewertinformation,
die aus der lokalen Vorhersageeinheit 330 ausgelesen wird,
bewerten, um damit das Ausführen
einer als unabhängig
vorhergesagten Ladeoperation zu ermöglichen, bevor die Adressen
von älteren
Schreiboperationen berechnet werden. Wie zuvor beschrieben ist,
kann die Abhängigkeitsverifizierlogik 305 erkennen,
dass eine Abhängigkeitsvorhersage
einer gegebenen Ladeoperation nicht korrekt ist. In diesem Falle
veranlasst die Abhängigkeitsverifizierlogik 305,
dass der lokale Vorhersageeintrag 335, der der falsch vorhergesagten
Ladeoperation entspricht, aktualisiert wird. Beispielsweise kann
die Abhängigkeitsverifizierlogik 305 zuerst
veranlassen, dass der entsprechende lokale Vorhersageeintrag 335 in
der lokalen Vorhersageeinheit 330 abgerufen wird, indem
Identifizierungsinformation für
die Ladeoperation in ähnlicher
Weise bereitgestellt wird, wie dies zuvor beschrieben ist. Wenn
der geeignete lokale Vorhersageeintrag 335 ausgewählt ist,
veranlasst die Abhängigkeitsverifizierlogik 305,
dass der entsprechende Abhängigkeitsvorhersagewert 337 so
aktualisiert wird, dass er die falsche Vorhersage angibt.
-
In
Ausführungsformen,
in denen der Zähler 338 nicht
eingerichtet ist, kann der Abhängigkeitsvorhersagewert 337 so
aktualisiert werden, dass dieser die korrekte Abhängigkeitsinformation
speichert, wie sie von der Abhängigkeitsverifizierlogik 305 bestimmt wurde.
In Ausführungsformen
mit dem Zähler 338 kann
der Zählerwert
im Falle einer Falschvorhersage verkleinert werden und kann im Falle
einer korrekten Vorhersage erhöht
werden, und der Abhängigkeitsvorhersagewert 337 wird
bei einer falschen Vorhersage lediglich dann aktualisiert, wenn
der entsprechende Zähler 338 auf
einem Minimalwert steht. In derartigen Ausführungsformen kann der Zähler 338 eine
Hysterese für
die Abhängigkeitsvorhersage
bereitstellen, wodurch verhindert wird, dass der Abhängigkeitsvorhersagewert
sich in Reaktion auf eine einzelne korrekte oder nicht korrekte
Vorhersage plötzlich ändert. Der
Zähler 338 kann
die Stärke
der Abhängigkeitsvorhersage
in derartigen Ausführungsformen
angeben (beispielsweise kann ein größerer Zählerwert eine strengere Vorhersage
angeben, und ein kleiner Zählerwert
gibt eine schwächere
Vorhersage an).
-
Wie
gerade beschrieben ist, kann in einer Ausführungsform die lokale Vorhersageeinheit 330 Einträge enthalten,
die den Ladeoperationen entsprechen, die als abhängig oder unabhängig vorhergesagt
sind. In einer alternativen Ausführungsform
ist die lokale Vorhersageeinheit 330 ausgebildet, Einträge lediglich
für Ladeoperationen
zu reservieren, die als abhängig
vorausgesagt werden. In einer derartigen Ausführungsform kann die Ladeoperation
in voreingestellter Weise als unabhängig vorausgesagt werden, wenn
die Identifizierungsinformation einer gegebenen Ladeoperation nicht
mit einem Eintrag mit der lokalen Vorhersageeinheit 330 übereinstimmt,
wenn die gegebene Ladeoperation an die Lade/Schreibeinheit 126c ausgegeben
wird. Wenn nachfolgend die Abhängigkeitsverifizierlogik 305 erkennt,
dass eine Voreinstellungsvorhersage nicht korrekt ist, kann sie
veranlassen, dass ein Eintrag mit der lokalen Vorhersageeinheit 330 mit
der korrekten Vorhersage zugewiesen wird. Wenn ferner in einigen Ausführungsformen
die Abhängigkeitsverifizierlogik 305 erkennt,
dass eine als abhängig
vorhergesagte Ladeoperation tatsächlich
unabhängig
von älteren Schreiboperationen
ist, kann diese ausgebildet sein, den lokalen Vorhersageeintrag 335,
der der falsch vorhergesagten Ladeoperation entspricht, freizugeben.
In Ausführungsformen,
in denen die lokale Vorhersageeinheit 330 ausgebildet ist,
Einträge
nur für als
abhängig
vorhergesagte Ladeoperationen zu reservieren, kann der Abhängigkeitsvorhersagewert 337 aus
jedem lokalen Vorhersageeintrag 335 weggelassen werden.
-
Beim
Vorhersagen einer speziellen Ladeoperation kann die lokale Vorhersageeinheit 330 lediglich
auf dem vergangenen Verhalten der speziellen Ladeoperation beruhen
und nicht auf dem Verhalten anderer Ladeoperationen. Die lokale
Vorhersageeinheit 330 kann daher bei der Vorhersage von
Abhängigkeiten
für Ladeoperationen,
deren Verhalten relativ statisch ist, effizient sein. In einigen
Fällen
kann sich jedoch das Abhängigkeitsverhalten
einer gegebenen Ladeoperation in Abhängigkeit von dem Verhalten
anderer Ladeoperationen ändern
(d. h. das Abhängigkeitsverhalten
der gegebenen Ladeoperation ist dynamisch). Z. B. kann eine gegebene
Ladeoperation von einer älteren
Schreiboperation nur bei jedem zweiten Ausgeben der Ladeoperation
abhängig
sein, wie dies durch das Verhalten einer separaten Ladeoperation
vorgegeben ist. In derartigen Fällen
kann eine globale Vorhersageeinheit, die das Verhalten mehrerer
Ladeoperationen beim Vorhersagen des Verhaltens einer gegebenen
Ladeoperation berücksichtigt,
genauere Vorhersagen liefern.
-
3b zeigt
eine Ausführungsform
der Abhängigkeitsvorhersagelogik
mit einer globalen Vorhersagedatenstruktur. In der dargestellten
Ausführungsform
umfasst die Abhängigkeits vorhersagelogik 303 eine
globale Vorhersageeinheit 340, die ein globales Historienregister 342 enthält, das
mit mehreren globalen Vorhersageeinträgen 345 über eine Kombinationslogik 346 verknüpft ist.
Jeder globale Vorhersageeintrag 345 enthält einen
globalen Abhängigkeitsvorhersagewert 347 und
einen globalen Zähler 348,
der ein Mehrfachbitzähler
sein kann und ein Sättigungsverhalten
bei einem maximalen und minimalen Wert aufweist.
-
Das
globale Historienregister 342 kann ein Schieberegister
sein, das ausgebildete ist, mehrere Bits zu speichern, wobei jedes
Bit dem Abhängigkeitsverhalten
einer entsprechenden ausgeführten Ladeoperation
entspricht. In einer Ausführungsform entspricht
das Abhängigkeitsverhalten
dem tatsächlichen
Abhängigkeitsverhalten
der entsprechenden ausgeführten
Ladeoperation, d. h., ob die entsprechende ausgeführte Ladeoperation
tatsächlich
unabhängig
oder abhängig
von einer älteren
Schreiboperation war. In einer weiteren Ausführungsform entspricht das Abhängigkeitsverhalten
dem vorhergesagten Abhängigkeitsverhalten
der entsprechenden ausgeführten
Ladeoperation, das früher
verfügbar
ist als das tatsächliche
Abhängigkeitsverhalten.
Die Anzahl der in dem globalen Historienregister 342 gespeicherten
Bits und damit die Anzahl der ausgeführten Ladeoperation, die repräsentiert
sind, kann in den diversen Ausführungsformen
unterschiedlich sein. In einer Ausführungsform ist das globale
Historienregister 342 als ein Schieberegister mit programmierbarer Breite
eingerichtet.
-
In
einer Ausführungsform
wird das globale Historienregister 342 immer aktualisiert,
wenn eine Ladeoperation ausgeführt
wird. Beim Aktualisieren wird das Abhängigkeitsverhalten der neu
ausgeführten
Ladeoperation in die Position des wenigsten signifikanten Bits des
globalen Historienregisters 342 geschoben, und alle verbleibenden
Bitpositionen des globalen Historienregisters 342 werden
um eine Bitposition nach links verschoben, wobei das signifikanteste
Bit des globalen Historienregisters 342 verworfen wird.
In einer weiteren Ausführungsform
wird das globale Historienregister 342 als ein Rechtsschieberegister
eingerichtet, wobei das Abhängigkeitsverhalten
einer neu ausgeführten
Ladeoperation in die Position des signifikantesten Bits geschoben
wird und das wenigste signifikante Bit verworfen wird. In einigen
Ausführungsformen
kann das globale Historienregister 342 mehr als eine einzelne
Bitposition gleichzeitig verschieben, um damit gleichzeitig ausgeführte Ladeoperationen
zu berücksichtigen.
-
Der
globale Abhängigkeitsvorhersagewert 347 eines
gegeben globalen Vorhersageeintrags 345 gib eine Abhängigkeitsvorhersage
einer entsprechenden Ladeoperation, etwa ob diese als abhängig oder
unabhängig
vorhergesagt ist. Der globale Vorhersagezähler 348 ist ausgebildet,
einen Wert zu speichern, der die Stärke eines entsprechenden globalen
Abhängigkeitsvorhersagewertes 347 für eine vorgegebene
Ladeoperation angibt, ähnlich
zu dem Zähler 338 des
zuvor beschriebenen lokalen Vorhersageeintrags 335. In
einigen Ausführungsformen wird
der globale Vorhersagezähler 348 von
der Abhängigkeitsverifizierlogik 305 in
dem Falle aktualisiert, dass eine nicht korrekte oder korrekte Vorhersage
detektiert wird, in ähnlicher
Weise, wie dies zuvor für
die lokale Vorhersageeinheit 330 beschrieben ist.
-
Wenn
eine gegebene Ladeoperation an die Lade/Schreibeinheit 126c ausgegeben
wird, ist die Kombinationslogik 346 ausgebildet, den in
dem globalen Historienregister 342 enthaltenen Wert mit
der Identifizierungsinformation der gegebenen Ladeoperation zu kombinieren,
um damit einen Indexwert zu erhalten. Der resultierende Indexwert
kann dann verwendet werden, um auf einen speziellen globalen Vorhersageeintrag 345 zuzugreifen,
und der entsprechende globale Abhängigkeitsvorhersagewert 347 kann
ausgelesen und in den Eintrag 310, der der Ladeoperation
entspricht, in dem Operationsspeicher 307 gespeichert werden,
wo er verwendet werden kann, um das Disponieren der Ladeoperation
in ähnlicher
Weise zu modifizieren, wie dies zuvor für lokale Vorhersageeinheit 330 beschrieben
ist. Es ist zu berücksichtigen,
dass in einigen Ausführungsformen der
globale Vorhersageeintrag 345 Validisierungsinformation
enthalten kann, so dass die Ladeoperationen, die auf nicht zugewiesene
Einträge
innerhalb der globalen Vorhersageinheit 340 zugreifen,
eine voreingestellte Vorhersage erhalten.
-
Die
Kombinationslogik 346 kann ausgebildet sein, den in dem
globalen Historienregister 342 enthaltenen Wert, der die
Abhängigkeitsgeschichte mehrerer
kürzlich
ausgeführter
Ladeoperationen angibt, mit einer speziellen Identifizierungsinformation der
gegebenen Ladeoperation, für
die eine Vorhersage erwünscht
ist, zu kombinieren. Beispielsweise kann der Programmzählerwert,
der der gegebenen Ladeoperation entspricht, in einer Ausführungsform verwendet
werden, während
in anderen Ausführungsformen
die Identifizierungsinformation, etwa ein Zielmarkierungswert oder
eine Ladeadresse, verwendet wird. Die genaue Kombinationstätigkeit,
die von der Kombinationslogik 346 ausgeführt wird,
kann in den diversen Ausführungsformen
unterschiedlich sein. In einer Ausführungsform ist die Kombina tionslogik 346 ausgebildet,
den Wert des globalen Historienregisters 342 mit ausgewählten Bits
(etwa den weniger signifikanten Bits) des Programmierzählerwerts des
gegebenen Ladebefehls unter Anwendung einer logischen Exklusiv-oder-
(XOR) Funktion zu kombinieren, um damit einen Indexwert zu erhalten,
der zur Auswahl eines speziellen globalen Vorhersageeintrags 345 verwendet
werden kann. In einer weiteren Ausführungsform kann der Indexwert
durch Verketten aller oder eines Teils der Werte des globalen Historienregisters 342 mit
ausgewählten
Bits des Programmierzählerwerts
des gegebenen Ladebefehls ermittelt werden.
-
Auf
Grund der Mitberücksichtigung
der Abhängigkeitsgeschichte
bzw. Historie von mehr als einer Ladeoperation kann die globale
Vorhersageeinheit 340 das Ergebnis von Ladeoperationen
mit dynamischen Abhängigkeitsverhalten
besser vorhersagen. In einigen Ausführungsformen können jedoch die
lokale Vorhersageeinheit 330 und die globale Vorhersageeinheit 340 jeweils
eine bessere Vorhersagegenauigkeit als die jeweilige andere Einheit
unter gewissen unterschiedlichen Umständen besitzen. Folglich wird
in einigen anschaulichen Ausführungsformen
eine Hybrid-Vorhersageeinheit unter Anwendung sowohl lokaler als
auch globaler Arten an Vorhersageeinheiten eingesetzt.
-
3c zeigt
eine Ausführungsform
der Abhängigkeitsvorhersagelogik
mit einer Hybrid-Vorhersagedatenstruktur.
In der dargestellten Ausführungsform
umfasst die Abhängigkeitsvorhersagelogik 303 eine
Hybridvorhersageeinheit 350 mit einer lokalen Vorhersageeinheit 330 und
einer globalen Vorhersageeinheit 340, die jeweils mit einer
Auswahleinheit bzw. einem Selektor 355 verbunden sind.
Die Konfiguration und die Funktionsweise der lokalen Vorhersageeinheit 330 und
der globalen Vorhersageeinheit 340 sind so, wie dies in
Verbindung mit den 3a und 3b beschrieben
ist.
-
In
einer Ausführungsform
ist die lokale Vorhersageeinheit 330 als die Voreinstellungsvorhersageeinheit
ausgebildet, deren Vorhersage ausgewählt wird, sofern nicht eine
gegebene Ladeoperation als eine dynamische Ladeoperation erkannt
ist. In einigen Ausführungsformen
wird eine Ladeoperation als eine dynamische Ladeoperation durch
die Abhängigkeitsverifizierlogik 305 gekennzeichnet,
wenn beispielsweise die lokale Vorhersageeinheit 330 die
Ladeoperation für
eine gewisse Häufigkeit
falsch vorhergesagt hat. In anderen Ausführungsformen können andere
Funktionseinheiten einen dynamischen Ladestatus angeben. Beispielsweise
kann in einigen Ausführungsformen
eine Ladeoperation als dynamisch in der Operationsdecodierstufe
auf der Grundlage ihrer Operanden oder ihres Adressiermusters erkannt
werden.
-
In
einer Ausführungsform
können
die in dem Operationsspeicher 307 der Lade/Schreibeinheit 126c gespeicherten
Ladeoperationen eine entsprechende Angabe enthalten, ob die Ladeoperation
eine dynamische Ladeoperation ist, was beispielsweise in dem Flaggenfeld 321 eines
gegebenen Eintrags 310 gespeichert ist. In einer derartigen
Ausführungsform kann
die dynamische Ladeangabe die Auswahleinheit 335 so konfigurieren,
dass diese den Ausgang der lokalen Vorhersageeinheit 330 oder
der globalen Vorhersageeinheit 340 auswählt, wenn die Ladeoperation
als entsprechend statisch bzw. dynamisch angegeben ist. Ferner kann
in einer derartigen Ausführungsform
die nicht verwendete Vorhersageeinheit in einem Ruhezustand sein,
während
auf die ausgewählte
Vorhersageeinheit zugegriffen wird, wodurch die Leistungsaufnahme
der Hybrid-Vorhersageeinheit 350 verringert wird.
-
In
einer alternativen Ausführungsform
wird eine Angabe über
einen dynamischen Ladestatus in einem lokalen Vorhersageeintrag 335,
der der dynamischen Ladeoperation entspricht, gespeichert. Beispielsweise
kann jeder lokale Vorhersageeintrag 335 ausgebildet sein,
ein zusätzliches
Feld (nicht gezeigt) zu enthalten, das den dynamischen Ladezustand
angibt. In einer Version einer derartigen Ausführungsform kann auf die lokale
Vorhersageeinheit 330 und auf die globale Vorhersageeinheit 340 gleichzeitig
für eine
gegebene Ladeoperation zugegriffen werden, und der dynamische Ladestatus,
der in dem entsprechenden lokalen Vorhersageeintrag 335 gespeichert ist,
kann die Auswahleinheit 355 so konfigurieren, dass der
Ausgang der geeigneten Vorhersageeinheit ausgewählt wird. In einer weiteren
Version einer derartigen Ausführungsform
kann auf die globale Vorhersageeinheit 340 in Abhängigkeit
von dem Wert der dynamischen Ladestatusangabe zugegriffen werden,
die in dem entsprechenden lokalen Vorhersageeintrag 355 gespeichert
ist, wodurch speziell die Leistungsaufnahme verringert wird.
-
Speicherdatei
und Abhängigkeitsvorhersage
-
In
einigen Ausführungsformen
des Prozessors 100 ist eine Speicherdatei eingerichtet,
um die Erkennung von Abhängigkeiten
unter Lade- und Schreibbefehlen zu ermöglichen. In derartigen Ausführungsformen
können
die Ergebnisse der Speicherdateioperation ebenso eingesetzt werden,
um eine Abhängigkeitsvorhersage
für Ladeoperationen auszuführen, wie
dies nachfolgend detaillierter beschrieben ist.
-
4a zeigt
eine Ausführungsform
einer Ausgabeeinheit 104. In dieser Ausführungsform
umfasst die Ausgabeeinheit 104 eine Registerzuordnung 134 und
eine Speicherdatei 132. Wie zuvor in Verbindung mit der
Beschreibung der 1 erläutert ist, ist die Registerzuordnung 134 ausgebildet,
eine Registerumbenennung bereitzustellen. Die Registerzuordnung 134 erhält logische
Registernamen für
jeden Quellen- und Zieloperanden und gibt die physikalischen Registernamen
der physikalischen Register aus, die zuletzt den lokalen Registern
zugeordnet sind. Die Speicherdatei 132 enthält eine
Speicherdateisteuerung 202 und eine Speicherdateispeicherplatz 204.
-
Der
Speicherdateispeicherplatz 204 enthält einen oder mehrere Einträge 220.
Jeder Eintrag 220 enthält
ein Adressiermuster 206 und eine Markierung 208,
die dem Adressiermuster dieses Eintrags zugeordnet ist. Jede Markierung
kann einen Datenwert angeben, indem angegeben wird, wo der Datenwert gespeichert
wird (beispielsweise innerhalb eines Umordnungspuffers oder in einer
Registerdatei 116), wenn dieser Wert erzeugt wird. Wie
beispielsweise in der dargestellten Ausführungsform gezeigt ist, gibt jede
Markierung das physikalische Register an, das zur Speicherung dieses
Datenwerts zugeordnet wird, wie dies von der Registerzuordnung 134 angegeben wird.
Jedes Adressiermuster kann die gesamte Information oder einen Teil
der Information enthalten, die zum Spezifizieren einer Adresse in
einer Operation verwendet wird. Es sei kurz auf 4b verwiesen,
in der ein beispielhaftes Adressiermuster 206 gezeigt ist.
In dieser Ausführungsform
enthält
das Adressiermuster 206 einen Basislogikregisternamen 210,
einen Indexlogikregisternamen 212 und eine Verschiebung 214.
Einige Adressiermuster 206 können einen Segmentlogikregisternamen
eines Registers enthalten, der ein spezielles Segment in einem Speicher angibt.
Der Speicherdateispeicherplatz 204 kann aus mehreren Registern,
Signalzwischenspeichern, Flipflops, oder anderen getakteten Speichereinrichtungen
in einigen Ausführungsformen
eingerichtet sein. In alternativen Ausführungsformen kann der Speicherdateispeicherplatz 204 eine
oder mehrere RAM- (Speicher mit wahlfreiem Zugriff) Zellen enthalten.
-
Zu
beachten ist, dass in einigen Ausführungsformen das in dem Speicherdateispeicherplatz 204 gespeicherte
Adressiermuster 206 weniger als die gesamte Adressierinformation,
die für
eine Operation spezifiziert ist, enthalten kann. Beispielsweise können Einträge in dem Speicherdateispeicherplatz 204 weniger
als alle Bits enthalten, die verwendet werden, um eine Verschiebung
innerhalb des Verschiebefelds 214 zu spezifizieren. In
anderen Ausführungsformen
wählt die
Speicherdateisteuerung 202 selektiv aus, ob ein Eintrag
in dem Speicherdateispeicherplatz 204 zuzuordnen ist, abhängig davon,
ob ein Eintrag in der Speicherdatei die gesamte Adressierinformation
für eine
spezielle Operation aufnehmen kann. Wenn beispielsweise jeder Eintrag in
dem Speicherdateispeicherplatz 204 bis zu 16 Bits an Verschiebeinformation
speichern kann und die Adressierinformation für eine spezielle Operation 24 Bits
an Verschiebeinformation enthält,
weist die Speicherdateisteuerung 202 einen Speicherdateieintrag für die Adressierinformation
dieser Operation nicht zu.
-
Die
Speicherdateisteuerung 202 kann die Adressiermuster, die
in nicht ausgegebenen Operationen spezifiziert sind, mit jenen Mustern
vergleichen, die in Einträgen
in dem Speicherdateispeicherplatz 204 gespeichert sind.
Wenn das Adressiermuster einer Operation mit den Adressiermustern übereinstimmt,
die aktuell in den Einträgen
in dem Speicherdateispeicherplatz 204 gespeichert sind
(d. h. das Adressiermuster der Operation trifft nicht den Speicherdateispeicherplatz),
kann die Speicherdateisteuerung 202 einen neuen Eintrag
in dem Speicherdateispeicherplatz 204 zuordnen, um alle
oder einen Teil des Adressiermusters dieser Operation zu speichern. Wenn
es keine freien Einträge
zur Zuweisung innerhalb des Speicherdateispeicherplatzes 204 gibt, kann
die Speicherdateisteuerung 202 einen Eintrag zum Überschreiben
auswählen,
wobei ein Austauschschema angewendet wird, etwa LRU („als jüngstes verwendet"), FIFO (zuerst hinaus,
zuerst heraus), zufälliges
Ersetzen, etc.
-
Zusätzlich zu
dem Speichern des Adressiermusters der Operation in dem zugeordneten
Eintrag kann die Speicherdateisteuerung 202 auch einen physikalischen
Registernamen 208 speichern, der eine Markierung (beispielweise
den Namen des physikalischen Registers) enthält, der einen Wert angibt, der
aus der Speicherstelle zu laden oder in diese zu schreiben ist,
die von dem Adressiermuster dieser Operation gekennzeichnet ist.
Wenn beispielsweise eine Ladeoperation, die Daten aus dem Speicher lädt, abgearbeitet
wird, kann der Eintrag, der in Reaktion auf diese Ladeoperation
zugeordnet wurde, den Namen des physikalischen Registers speichern,
das zugeordnet wurde, um das Ergebnis der Ladeoperation zu speichern.
Wenn eine Schreiboperation, die Daten in eine Speicherstelle schreibt,
zu handhaben ist, speichert die Speicherdateisteuerung 202 den physikalischen Registernamen
des Registers, in welchem der Quellenwert der Schreiboperation gespeichert
ist, in dem Speicherdateispeicherplatz 204.
-
Wenn
das Adressiermuster einer Operation (oder ein Teil dieses Musters)
bereits in einem Eintrag in dem Speicherdateispeicherplatz 204 gespeichert
ist (d. h. das Adressiermuster der Operation zielt auf den Speicherdateispeicherplatz),
kann die Speicherdateispeichersteuerung 202 den Eintrag verwenden
oder modifizieren, der das Übereinstimmen
der Adressiermuster enthält.
Wenn eine Ladeoperation (eine Operation, die einen Wert aus einer speziellen
Adresse in ein Register lädt)
abgearbeitet wird, gibt die Speicherdateisteuerung 202 den
physikalischen Registernamen 208, der in dem übereinstimmenden
Eintrag gespeichert ist, aus. Wenn eine Schreiboperation (eine Operation,
die einen Wert aus einem Register in einer speziellen Adresse speichert bzw.
ablegt) abgearbeitet wird, kann die Speicherdateisteuerung 202 die
Markierung (beispielsweise den physikalischen Registernamen 208),
der in dem übereinstimmenden
Eintrag gespeichert ist, mit der Markierung der zu speichernden
Daten überschreiben.
-
Wenn
eine Ladeoperation bearbeitet wird und die Ladeoperation den Speicherdateispeicherplatz 204 trifft,
kann die von der Speicherdateisteuerung 202 ausgegebene
Markierung verwendet werden, um den gespeicherten Wert, der von
der Markierung angegeben ist, mit einem spekulativen Ergebnis der
Ladeoperation zu verknüpfen.
Wenn beispielsweise in einigen Ausführungsformen die Ladeoperation
an die Disponiereinheit(en) 118 ausgegeben wird, kann auch
die von der Speicherdatei 132 ausgegebene Markierung der
bzw. den Disponiereinheiten zugeführt werden (beispielsweise
als eine 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 gekennzeichnet ist, ausgeben.
Ein Ausführungskern 124 kann
die Ladeoperation ausgeben, so dass der verknüpfte Wert allgemein adressiert
als das spekulative Ergebnis der Ladeoperation auf dem Ergebnisbus 130 ausgegeben
wird (zu beachten ist, dass der von dem Ergebnis der Ladeoperation
erzeugte Datenwert in einigen Ausführungsformen nicht selbst markiert
oder anderweitig als ein spekulativer Wert gekennzeichnet wird).
In anderen Ausführungsformen
wird der Datenwert mit dem spekulativen Ergebnis der Ladeoperation
verknüpft,
indem die Markierung in einer spekulativen Zuordnung gespeichert
wird.
-
Als
Ergebnis der Verknüpfung
kann der durch die Markierung gekennzeichnete Datenwert als das
spekulative Ergebnis der Ladeoperation weitergeleitet werden, sobald
der Datenwert verfügbar ist
(beispielsweise in der Registerdatei 116 oder auf dem Ergebnisbus 130),
um damit zu ermöglichen, dass
abhängige
Operationen unter Anwendung des spekulativen Ergebnisses ausgeführt werden.
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ührung
verzögert
würde,
bis das nicht spekulative Ergebnis der Ladeoperation verfügbar ist.
-
Wenn
ferner eine Ladeoperation mit einem Datenwert verknüpft wird,
wie dies zuvor beschrieben ist, ist die Speicherdatei 132 ausgebildet,
eine Angabe der Verknüpfung
zu der Disponiereinheit 118 zusammen mit der Operandenmarkierungsinformation
der Ladeoperation zu übertragen
(beispielsweise kann die Speicherdatei 132 ein zusätzliches
Bit für den
Status, der die Verknüpfung
angibt, senden). Wenn die Ladeoperation an die Lade/Schreibeinheit 126c zusammen
mit einer Angabe ausgegeben wird, dass die Ladeoperation verknüpft ist,
ist die Flagge 321 des Eintrags 310, der der Ladeoperation
zugeordnet ist, ausgebildet, um anzugeben, dass die Ladeoperation
als abhängig
vorhergesagt ist. In einer Ausführungsform
kann die Abhängigkeitsvorhersagelogik 303 den
Verknüpfungsstatus
detektieren und kann entsprechend die Abhängigkeitsvorhersage angeben.
In einer weiteren Ausführungsform
können die
Abhängigkeitsvorhersagelogik 303 und
die Abhängigkeitsverifizierlogik 305 aus
der Lade/Schreibeinheit 126c weggelassen werden. In einer
derartigen Ausführungsform
liefert die Speicherdatei 132 lediglich die Angabe über die
Abhängigkeitsvorhersage
für die
Ladeoperationen.
-
5 zeigt
eine Ausführungsform
eines Verfahrens zum Vorhersagen, ob eine gegebene Ladeoperation
von älteren
Schreiboperation abhängt.
Es sei auch auf die 1 bis 4b verwiesen;
die Operation beginnt im Block 500, in welchem eine Ladeoperation
an die Lade/Schreibeinheit 126c ausgegeben wird. In Reaktion
auf das Ausgeben der Ladeoperation ist die Abhängigkeitsvorhersagelogik 303 ausgebildet,
um vorherzusagen, ob die Ladeoperation von einer älteren Schreiboperation
(Block 502) abhängig
ist. Beispielsweise ist in einer Ausführungsform die Abhängigkeitsvorhersagelogik 303 ausgebildet,
auf die lokale Vorhersageeinheit 330 zuzugreifen, um die
Ladeabhängigkeit
vorherzusagen, während
in anderen Ausführungsformen
die globale Vorhersageeinheit 340 oder die Hybrid- Vorhersageeinheit 350 verwendet
werden, oder es kann eine Abhängigkeitsvorhersageinformation
aus anderen Einheiten, etwa der Speichedatei 132 abgerufen
werden.
-
In
Reaktion auf die Vorhersage ist die Lade/Schreibeinheit 126c ausgebildet,
die Art der Vorhersage zu bestimmen (Block 504). Wenn die
Ladeoperation als abhängig
vorausgesagt wird, ist die Lade/Schreibeinheit 126c ausgebildet,
das Ausführen zu
verhindern, bis die Adressen von Schreiboperationen, die älter sind
als die Ladeoperation, berechnet sind (Block 506). Wenn
die Ladeoperation als unabhängig
vorausgesagt wird, ist die Lade/Schreibeinheit 126c ausgebildet,
das Ausführen
zuzulassen, bevor die Adressen einer oder mehrerer älterer Schreiboperationen
berechnet sind (Block 508).
-
Nach
dem Bestimmen, dass die Ladeoperation als unabhängig vorausgesagt wird, ist
die Lade/Schreibeinheit 126c ausgebildet, um zu erkennen,
ob die Ladeoperation falsch vorhergesagt ist (Block 510).
In einer Ausführungsform
enthält
beispielsweise die Lade/Schreibeinheit 126c Komparatoren
für die „Schreib-zu-Lade-Weiterleitung", die ausgebildet
sind, um zu erkennen, ob die Adresse der als unabhängig vorhergesagten
Ladeoperation mit einer Adresse einer älteren Schreiboperation übereinstimmt.
Wenn eine falsche Vorhersage nicht auftrat, darf die Ladeoperation
nach ihrer vollständigen
Ausführungsform
abgeschlossen werden (Block 512). Wenn eine falsche Vorhersage
erkannt ist, ist die Lade/Schreibeinheit 126c ausgebildet,
eine Wiederholungsangabe der Disponiereinheit 118 daraufhin
zuzusenden, die angibt, dass die als unabhängig vorhergesagte Ladeoperation
später
erneut ausgeführt
werden soll (Block 514).
-
Zu
beachten ist, dass die diversen Ausführungsformen der Abhängigkeitsvorhersagelogik 303 mit
unterschiedlichen Kombinationen lokaler und globaler Vorhersageeinheiten
als struktureller Elemente der Lade/Schreibeinheit 126c beschrieben
sind, während
in anderen Ausführungsformen
diese Varianten der Abhängigkeitsvorhersagelogik 303 in
einer anderen Einheit des Mikroprozessors 100, beispielsweise
in der Ausgabeeinheit 104, untergebracht sein können. Ferner
ist zu beachten, dass diverse Kombinationen der Ausführungsformen
aus 3a bis 4 möglich sind.
Beispielsweise kann die Abhängigkeitsvorhersage,
die aus der Speicherdatei 134 erhalten wird, mit oder ohne
einer lokalen oder globalen Vorhersageeinheit eingerichtet sein.
-
Beispielhafte
Computersysteme
-
6 zeigt
eine Blockansicht einer Ausführungsform
eines Computersystems 900, das einen Prozessor 100 aufweist,
der mit mehreren Systemkomponenten über eine Busbrücke 902 verbunden ist.
Der Prozessor 100 enthält
eine Ausführungsform einer
Lade/Schreibeinheit, wie sie zuvor beschrieben ist. Andere Ausführungsformen
eines Computersystems sind möglich
und hierin mit eingeschlossen. In dem dargestellten System ist ein
Hauptspeicher 200 mit der Busbrücke 902 über einen
Speicherbus 906 verbunden, und eine Graphiksteuerung 908 ist
mit der Busbrücke 902 über einen
AGP-Bus 910 verbunden. Diverse PCI-Geräte 912a bis 912b sind
mit der Busbrücke 902 über einen
PCI-Bus 914 verbunden. Eine sekundäre Busbrücke 916 kann ebenso
vorgesehen sein, um eine elektrische Schnittstelle mit einem oder
mehreren EISA- oder ISA-Geräten 918 über einen
EISA/ISA-Bus 920 bereitzustellen. In diesem Beispiel ist
der Prozessor 10 mit der Busbrücke 902 über einen
CPU-Bus 924 und einem optionalen L2-Cache-Speicher 928 verbunden.
In einigen Ausführungsformen
enthält
der Prozessor 100 einen integrierten L1-Cache-Speicher (nicht gezeigt).
-
Die
Busbrücke 902 stellt
eine Schnittstelle zwischen dem Prozessor 100 und dem Hauptspeicher 200,
der Graphiksteuerung 908 und den Geräten, die an dem PCI-Bus 914 angeschlossen
sind, bereit. Wenn eine Operation aus einem der Geräte, die
mit der Busbrücke 902 verbunden
sind, empfangen wird, erkennt die Busbrücke 902 das Ziel der Operation
(beispielsweise ein spezielles Gerät oder im Falle des PCI-Busses 914,
dass das Ziel auf dem PCI-Bus 918 liegt). Die Busbrücke 902 leitet
die Operation an das Zielgerät
weiter. Die Busbrücke 902 übersetzt
im Allgemeinen eine Operation von dem Protokoll, das von dem Quellengerät oder dem
Quellenbus verwendet wird, in das Protokoll, das von dem Zielgerät oder dem
Zielbus verwendet wird.
-
Zusätzlich zur
Bereitstellung einer Schnittstelle zwischen einem EISA/ISA-Bus und
einem PCI-Bus 914, kann die sekundäre Busbrücke 916 diverse weitere
Funktionen enthalten. Eine Eingabe/Ausgabesteuerung (nicht gezeigt),
die sowohl extern als auch intern in der sekundären Busbrücke 916 vorgesehen
sein kann, kann ebenso in dem Computersystem 900 vorgesehen
sein, um eine zusätzliche Funktionsunterstützung für eine Tastatur
und eine Maus 922 und für
diverse serielle und parallele Anschlüsse bereitzustellen. Eine externe
Cache-Speichereinheit (nicht gezeigt) kann auch an dem CPU-Bus 924 zwischen
dem Prozessor 100 und der Busbrücke 902 in anderen
Ausführungsformen
angeschlossen sein. Alternativ kann der externe Cache-Speicher mit
der Busbrücke 902 verbunden
sein, und eine Cache-Steuerungslogik für den externen Cache-Speicher
kann in der Busbrücke 902 integriert sein.
Der L2-Cache-Speicher 928 ist in einer Rückseitenkonfiguration
in Bezug auf den Prozessor 100 gezeigt. Zu beachten ist,
dass der L2-Cache-Speicher 928 separat zum Prozessor 100 vorgesehen sein
kann, oder in einem Gehäuse
(beispielsweise Zugang bzw. Schlitz 1 oder Zugang A) mit dem Prozessor 100 integriert
sein kann, oder sogar auf einem Halbleitersubstrat zusammen mit
dem Prozessor 100 integriert sein kann.
-
Der
Hauptspeicher 200 ist ein Speicher, in welchem Anwendungsprogramme
gespeichert sind, und aus welchem heraus der Prozessor 100 hauptsächlich arbeitet.
Zu einem geeigneten Hauptspeicher 200 gehören DRAM
(dynamische Speicher mit wahlfreiem Zugriff). Beispielsweise sind
mehrere SDRAM-Speicherbänke
(synchrone DRAM) oder RAM-Bus DRAM (RDRAM) geeignet.
-
Die
PCI-Geräte 912a bis 912b sind
als anschauliche Beispiele für
eine Vielzahl von Periphergeräten,
etwa Netzwerkschnittstellenkarten, Videobeschleuniger, Audiokarten,
Festplatten oder Laufwerke oder Laufwerkssteuerungen, SCSI (Kleincomputersystemschnittstellen)
Adapter und Telefoniekarten repräsentativ.
In ähnlicher
Weise ist das ISA-Gerät 918 für diverse
Arten von Periphergeräten,
etwa einem Modem, einer Klangkarte oder einer Vielzahl von Datennahmekarten,
etwa GPIB oder Feldbusschnittstellenkarten, repräsentativ.
-
Die
Graphiksteuerung 908 ist vorgesehen, um das Darstellen
von Text und Bildern auf einer Anzeige 926 zu steuern.
Die Graphiksteuerung 908 verkörpert einen typischen Graphikbeschleuniger,
der im Stand der Technik allgemein bekannt ist, um dreidimensionale
Datenstrukturen zu erzeugen, die in effizienter Weise in dem Hauptspeicher 200 verschoben
und darauf abgerufen werden können.
Die Graphiksteuerung 908 kann daher ein übergeordnetes Gerät bzw. ein
Master des AGP-Busses 910 sein, dahingehend, dass sie Zugriff
auf eine Zielschnittstelle innerhalb der Busbrücke 902 anfordern
und erhalten kann, um damit einen Zugriff auf den Hauptspeicher 200 zu
erhalten. Ein spezieller Graphikbus übernimmt das schnelle Abrufen
von Daten aus dem Hauptspeicher 200. Für gewisse Operationen ist die Graphiksteuerung 908 ferner
ausgebildet, um PCI-Protokolltransaktionen auf dem AGP-Bus 910 zu erzeugen.
Die AGP-Schnittstelle der Busbrücke 902 kann
somit die Funktion enthalten, um sowohl AGP-Protokolltransaktionen
sowie auch PCI-Protokoll-Ziel
und Initiationstransaktionen zu unterstützen. Die Anzeige 926 ist
eine beliebige elektronische Anzeige, auf der ein Bild oder Text
dargestellt werden kann. Zu geeigneten Anzeigen 926 gehören eine
Kathodenstrahlröhre
(„CRT"), eine Flüssigkristallanzeige
(„LCD"), etc.
-
Zu
beachten ist, dass obwohl die AGP, PCI und ISA oder EISA-Buss als
Beispiele in der obigen Beschreibung angegeben sind, beliebige Busarchitekturen
nach Bedarf eingesetzt werden können.
Ferner ist zu beachten, dass das Computersystem 900 ein
Mehrfach-Verarbeitungscomputersystem
sein kann, in welchem mehrere zusätzliche Prozessoren (beispielsweise
der Prozessor 100a, der als eine optionale Komponente des
Computersystems 900 gezeigt ist) enthalten kann. Der Prozessor 100a kann ähnlich zum
Prozessor 100 sein. Insbesondere kann der Prozessor 100a eine
identische Kopie des Prozessors 100 sein. Der Prozessor 100a kann
mit der Busbrücke 902 oder
einem unabhängigen
Bus (der in 6 gezeigt ist) verbunden sein
oder kann den CPU-Bus 924 gemeinsam mit dem Prozessor 100 benutzen.
Ferner kann der Prozessor 100a mit einem optionalen Cache-Speicher 928a ähnlich dem
L2-Cache-Speicher 928 verbunden sein.
-
In 7 ist
eine weitere Ausführungsform
eines Computersystem 900 gezeigt, das einen Prozessor 100 mit
einer Ausführungsform
einer Lade/Schreibeinheit enthält,
wie sie zuvor beschrieben ist. Andere Ausführungsformen sind möglich und hierin
berücksichtigt.
In der Ausführungsform
der 7 enthält
das Computersystem 900 mehrere Verarbeitungsknoten 1012A, 1012B, 1012C und 1012D.
Jeder Verarbeitungsknoten ist mit einem entsprechenden Speicher 200A bis 200D über eine Speichersteuerung 1016A bis 1016D,
die in jedem entsprechenden Verarbeitungsknoten 1012A bis 1012D enthalten
ist, verbunden. Ferner enthalten die Verarbeitungsknoten 1012A bis 1012D eine
Schnittstellenlogik, die zur Kommunikation zwischen den Verarbeitungsknoten 1012A bis 1012D verwendet wird.
Beispielsweise enthält
der Verarbeitungsknoten 1012A die Schnittstellenlogik 1018A zur
Kommunikation mit dem Verarbeitungsknoten 1012B, die Schnittstellenlogik 1018B zur
Kommunikation mit dem Verarbeitungsknoten 1012C und eine
dritte Schnittstellenlogik 1018C zur Kommunikation mit
einem noch weiteren Verarbeitungsknoten (nicht gezeigt). In ähnlicher
Weise umfasst der Verarbeitungsknoten 1012B die Schnittstellenlogiken 1018D, 1018E und 1018F.
Der Verarbeitungsknoten 1012C enthält die Schnittstellenlogiken 1018G, 1018N und 1018I;
und der Verarbeitungsknoten 1012D enthält die Schnittstellenlo giken 1018J, 1018K und 1018L. Der
Verarbeitungsknoten 1012D ist angeschlossen, um mit mehreren
Eingabe/Ausgabegeräten
zu kommunizieren (z. B. den Geräten 1012A bis 1012B in
einer Prioritätskettenkonfiguration) über die
Schnittstellenlogik 1018L. Andere Verarbeitungsknoten können mit
anderen I/O (Eingabe/Ausgabe)-Geräten in ähnlicher Weise kommunizieren.
-
Die
Verarbeitungsknoten 1012A bis 1012D bilden eine
paketbasierte Verbindung für
eine Kommunikation zwischen den Knoten. In der vorliegenden Ausführungsform
ist die Verbindung als eine Gruppe aus unidirektionalen Leitungen
(beispielsweise Leitungen 1024A werden verwendet, um Pakete für den Verarbeitungsknoten 1012A zu
dem Verarbeitungsknoten 1012B zu übermitteln, und die Leitungen 1024B werden
verwendet, um Pakete von dem Verarbeitungsknoten 1012B zum
Verarbeitungsknoten 1012A zu senden) vorgesehen. Andere Gruppen
aus Leitungen 1024C bis 1024H werden verwendet,
um Pakete zu anderen Verarbeitungsknoten zu übertragen, wie in 7 gezeigt
ist. Im Allgemeinen enthält
jede Gruppe aus Leitungen 1024 eine oder mehrere Datenleitungen,
eine oder mehrere Taktleitungen, die den Datenleitungen entsprechen
und eine oder mehrere Steuerleitungen, die die Art des übertragenen
Pakets angeben. Die Verbindung kann in einer mit dem Cache-Speicher
kohärenten
Weise zur Kommunikation zwischen dem Verarbeitungsknoten betrieben
werden oder in einer nicht kohärenten
Weise zur Kommunikation zwischen einem Verarbeitungsknoten und einem
I/O-Gerät
(einer Busbrücke
zu einem I/O-Bus für
einen konventionellen Aufbau, etwa dem PCI-Bus oder dem ISA-Bus).
Ferner kann die Verbindung in einer nicht kohärenten Weise unter einer Prioritätskettenstruktur zwischen
I/O-Geräten betrieben
werden, wie dies gezeigt ist. Zu beachten ist, dass ein von einem
Verarbeitungsknoten zu einem anderen zu übermittelndes Paket über einen
oder mehrere dazwischenliegende Knoten laufen kann. Beispielsweise
kann ein Paket, das von dem Verarbeitungsknoten 1012A zu
dem Verarbeitungsknoten 1012B übertragen, durch den Verarbeitungsknoten 1012B oder
den Verarbeitungsknoten 1012C laufen, wie dies in 7 gezeigt
ist. Es kann ein beliebiger geeigneter Weiterleitungsalgorithmus
verwendet werden. Andere Ausführungsformen
des Computersystems 900 können mehr oder weniger Verarbeitungsknoten
enthalten, als dies in der in 7 gezeigten
Ausführungsform
der Fall ist.
-
Allgemein
gesagt, können
die Pakete als eine oder mehrere Bitzeiten auf den Leitungen 1024 zwischen
den Knoten übermittelt
werden. Eine Bitzeit kann die ansteigende oder abfallende Flanke
des Taktsignals auf den entsprechenden Taktleitungen sein. Die Pakete können Befehlspakete
zum Initiieren von Transaktionen, Abfrage- bzw. Sondierungspakete
zur Aufrechterhaltung der Cachespeicherkohärenz und Antwortpakete von
Antworten auf Abfragen und Befehle enthalten.
-
Die
Verarbeitungsknoten 1012A bis 1012D können zusätzlich zu
einer Speichersteuerung und einer Schnittstellenlogik einen oder
mehrere Prozessoren aufweisen. Allgemein gesagt, ein Verarbeitungsknoten
kann mindestens einen Prozessor und optional eine Speichersteuerung
zur Kommunikation mit einem Speicher und anderer Logik nach Bedarf enthalten.
Genauer gesagt, jeder Verarbeitungsknoten 1012A bis 1012D kann
eine oder mehrere Kopien des Prozessors 100 enthalten.
Eine externe Schnittstelleneinheit kann die Schnittstellenlogik 1018 innerhalb
der Knoten sowie die Speichersteuerung 1016 enthalten.
-
Die
Speicher 200A bis 200D können beliebige geeignete Speichereinrichtungen
umfassen. Beispielsweise kann eine Speicher 200A bis 200D eine oder
mehrere RAM-Bus DRAM's
(RDRAM's), synchrone
DRAM's (SDRAM's), statische RAM's, etc. aufweisen.
Der Adressenraum des Computersystems 900 ist auf die Speicher 200A bis 200D aufgeteilt.
Jeder Verarbeitungsknoten 1012A bis 1012D kann
eine Speicherzuordnung enthalten, die verwendet wird, um zu bestimmen,
welche Adresse auf welche Speicher 200A bis 200D abgebildet
ist, und somit zu welchem Verarbeitungsknoten 1012A bis 1012D eine
Speicheranforderung für
eine spezielle Adresse zu richten ist. In einer Ausführungsform
ist der Kohärenzpunkt
für eine
Adresse innerhalb des Computersystems 900 die Speichersteuerung 1016A bis 1016D,
die mit dem Speicher verbunden sind, der Bytes entsprechend der
Adresse enthält.
Anders ausgedrückt,
die Speichersteuerung 1016A bis 1016 ist dafür verantwortlich,
dass sichergestellt ist, dass jeder Speicherzugriff zu dem entsprechenden
Speicher 200A bis 200D in einer mit dem Cache-Speicher kohärenten Weise
abläuft.
Die Speichersteuerungen 1016A bis 1016D können Steuerschaltungen
zur Kommunikation mit den Speichern 200A bis 200D aufweisen.
Zusätzlich
können
die Speichersteuerungen 1016A bis 1016D Anforderungswarteschlangen für das Aneinanderreihen
von Speicheranforderungen enthalten.
-
Die
Schnittstellenlogik 1018A bis 1018L kann eine
Vielzahl von Puffern zur Aufnahme von Paketen aus der Verbindung
und zum Puffern von Paketen, die über die Verbindung zu senden
sind, umfassen. Das Computersystem 900 kann einen beliebigen
geeigneten Ablaufsteuerungsmechanismus zur Übermittlung von Paketen anwenden.
Beispielsweise speichert in einer Ausführungsform jede Schnittstellenlogik 1018 den
Wert der Nummer jedes Typs eines Puffers innerhalb des Empfängers an
dem anderen Ende der Verbindung, mit der die Schnittstellenlogik verbunden
ist. Die Schnittstellenlogik sendet ein Paket nur dann, wenn die
empfangende Schnittstellenlogik einen freien Puffer zur Speicherung
des Pakets aufweist. Wenn ein Empfangspuffer frei wird, indem ein
Paket weitergeleitet wird, sendet die empfangende Schnittstellenlogik
eine Nachricht an die sendende Schnittstellenlogik, um anzuzeigen,
dass der Puffer verfügbar
ist. Ein derartiger Mechanismus wird als „couponbasiertes" System bezeichnet.
-
Die
I/O-Geräte 1020A bis 1020B sind
beliebige I/O-(Eingabe/Ausgabe) Geräte. Beispielsweise können die
I/O-Geräte 1020A bis 1020B Geräte zur Kommunikation
mit einem weiteren Computersystem enthalten, mit dem die Geräte verbunden
sind (beispielsweise Netzwerkschnittstellenkarten oder Modems).
Des weiteren können
die I/O-Geräte 1020A bis 1020B Videobeschleuniger,
Audiokarten, Festplatten oder Laufwerke, Laufwerkssteuerungen, SCSI-
(Kleincomputersystemschnittstellen-) Adapter und Telefoniekarten,
Klangkarten und eine Vielzahl von Datennahmekarten, etwa GPI- oder
Feldbusschnittstellenkarten enthalten. Zu beachten ist, dass der
Begriff „I/O-Gerät bzw. Eingabe/Ausgabe-Gerät" und der Begriff „Periphergerät" hierin als synonym
zu betrachten sind.
-
Im
hierin verwendeten Sinne bezeichnet der Begriff „Taktdauer bzw. Taktzyklus" ein Zeitintervall, in
welchem diverse Stufen der Befehlsverarbeitungspipeline ihre Aufgabe
abschließen.
Befehle und berechnete Werte werden von den Speicherelementen (etwa
Register oder Arrays) entsprechend einem Taktsignal aufgenommen,
das die Taktdauer definiert. Beispielsweise kann ein Speicherelement
einen Wert entsprechend der ansteigenden oder abfallenden Flanke
des Taktsignals übernehmen.
-
Die
zuvor dargestellte Erläuterung
beschreibt Signale als „gesetzt". Ein Signal kann
als gesetzt definiert sein, wenn es einen Wert angibt, der ein spezielles
Informationselement angibt. Ein spezielles Signal kann als gesetzt
definiert sein, wenn es einen Binärwert 1 oder alternativ wenn
es einen Binärwert
0 trägt.
-
Zahlreiche
Variationen und Modifikationen werden für den Fachmann ersichtlich,
sobald er die obige Offenbarung vollständig studiert hat. Es ist beabsichtigt,
dass die folgenden An sprüche
so interpretiert werden, dass sie alle derartigen Variationen und Modifizierungen
umschließen.
-
Industrielle
Anwendbarkeit
-
Diese
Erfindung ist im Allgemeinen auf das Gebiet der Prozessoren anwendbar.
-
Zusammenfassung
-
Ein
Prozessor (100) umfast eine Disponiereinheit (118),
die ausgebildet ist, Operationen auszugeben, und umfasst eine Lade/Schreibeinheit
(126c), die ausgebildet ist, von der Disponiereinheit ausgegebene
Speicheroperationen auszuführen.
Die Lade/Schreibeinheit (126c) ist ausgebildet, Information zu
speichern, die an die Lade/Schreibeinheit (126c) ausgegebene
Speicheroperationen kennzeichnet. In Reaktion auf das Erkennen einer
nicht korrekten Datenspekulation für eine der ausgegebenen Speicheroperationen
ist die Lade/Schreibeinheit (126c) ausgebildet, mindestens
eine der ausgegebenen Speicheroperationen erneut auszuführen, indem
eine Angabe an die Disponiereinheit (118) ausgegeben wird. Die
Disponiereinheit (118) ist ausgebildet, in Reaktion darauf
die Speicheroperationen erneut auszugeben, die von der Lade/Schreibeinheit
(126c) gekennzeichnet werden.