DE112004002848T5 - System und Verfahren zum Validisieren einer Speicherdatei, die spekulative Ergebnisse von Ladeoperationen mit Registerwerten verknüpft - Google Patents

System und Verfahren zum Validisieren einer Speicherdatei, die spekulative Ergebnisse von Ladeoperationen mit Registerwerten verknüpft Download PDF

Info

Publication number
DE112004002848T5
DE112004002848T5 DE112004002848T DE112004002848T DE112004002848T5 DE 112004002848 T5 DE112004002848 T5 DE 112004002848T5 DE 112004002848 T DE112004002848 T DE 112004002848T DE 112004002848 T DE112004002848 T DE 112004002848T DE 112004002848 T5 DE112004002848 T5 DE 112004002848T5
Authority
DE
Germany
Prior art keywords
speculative
load
load operation
register
entry
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
DE112004002848T
Other languages
English (en)
Other versions
DE112004002848B4 (de
Inventor
Benjamin T. Austin Sander
Krishnan V. Cupertino Ramani
Ramsey W. Cupertino Haddad
Mitchell Austin Alsup
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
GlobalFoundries US Inc
Original Assignee
Advanced Micro Devices Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Advanced Micro Devices Inc filed Critical Advanced Micro Devices Inc
Publication of DE112004002848T5 publication Critical patent/DE112004002848T5/de
Application granted granted Critical
Publication of DE112004002848B4 publication Critical patent/DE112004002848B4/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3824Operand accessing
    • G06F9/3826Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching
    • G06F9/3832Value prediction for operands; operand history buffers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching

Abstract

System (100) mit
einer Speicherdatei (132) mit einem Eintrag (220), der ausgebildet ist, ein erstes Adressiermuster (206) und eine erste Markierung (208) zu speichern, wobei die Speicherdatei (132) ausgebildet ist, das erste Adressiermuster (206), das in dem Eintrag (220) enthalten ist, mit einem zweiten Adressiermuster (206) einer Ladeoperation zu vergleichen, wobei, wenn das zweite Adressiermuster (206) mit dem ersten Adressiermuster (206), das in dem Eintrag (220) gespeichert ist, übereinstimmt, die Speicherdatei (132) ausgebildet ist, einen durch die erste Markierung (208) bezeichneten Datenwert mit einem spekulativen Ergebnis der Ladeoperation zu verknüpfen;
einem Ausführungskern (124) der mit der Speicherdatei (132) verbunden ist, wobei der Ausführungskern (124) ausgebildet ist, auf das spekulative Ergebnis zuzugreifen, wenn er eine zweite Operation ausführt, die von der Ladeoperation abhängig ist; und
einer Funktionseinheit (126), die mit der Speicherdatei (132) verbunden und ausgebildet ist, die Verknüpfung zwischen dem durch die erste Markierung (208) gekennzeichneten Datenwert...

Description

  • 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).
  • 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. Daher ist es wünschenswert, eine Datenspekulation in einem Prozessor ausführen zu können, und einen effizienten Wiederherstellungsmechanismus für Fehlspekulationen zu besitzen.
  • Überblick über die Erfindung
  • Es werden diverse Ausführungsformen von Systemen und Verfahren zum Verknüpfen spekulativer Ergebnisse von Ladeoperationen mit Registerwerten offenbart. In einer Ausfüh rungsform umfasst ein System eine 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, und wenn das zweite Adressiermuster mit dem ersten Adressiermuster, das in dem Eintrag gespeichert ist, übereinstimmt, ist die Speicherdatei ausgebildet, einen durch die erste Markierung gekennzeichneten Datenwert mit einem spekulativen Ergebnis der Ladeoperation zu verknüpfen. Das System kann ferner einen Ausführungskern aufweisen, der mit der Speicherdatei verbunden ist, wobei der Ausführungskern ausgebildet ist, auf das spekulative Ergebnis zuzugreifen, wenn eine zweite Operation ausgeführt wird, die von der Ladeoperation abhängt. Ferner umfasst das System eine Lade/Schreibeinheit, die mit der Speicherdatei verbunden und ausgebildet ist, die Verknüpfung zwischen dem durch die erste Markierung gekennzeichneten Datenwert und dem spekulativen Ergebnis der Ladeoperation zu verifizieren, indem ein Vergleich zwischen einer oder mehreren Adressen durchgeführt wird.
  • In einer weiteren Ausführungsform umfasst ein System eine 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, und 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 gekennzeichneten Datenwert mit einem spekulativen Ergebnis der Ladeoperation zu verknüpfen. Das System umfasst ferner einen Ausführungskern, der mit der Speicherdatei verbunden ist, wobei der Ausführungskern ausgebildet ist, auf das spekulative Ergebnis zuzugreifen, wenn eine zweite Operation ausgeführt wird, die von der Ladeoperation abhängt, wobei ferner eine Funktionseinheit vorgesehen ist, die mit der Speicherdatei verbunden und ausgebildet ist, die Verknüpfung zwischen dem durch die ersten Markierung gekennzeichneten Datenwert und dem spekulativen Ergebnis der Ladeoperation zu verifizieren, indem ein Vergleich zwischen dem spekulativen Ergebnis und einem tatsächlichen Ergebnis der Ladeoperation durchgeführt wird.
  • 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 Disponiereinheit 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 2B 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 303305 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 303311 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 331333 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 341343 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 801803 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 (LOAD 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 LOAD 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 412A412B 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 412A412B 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 614A614D über eine Speichersteuerung 616A616D verbunden, die in dem jeweiligen entsprechenden Verarbeitungsknoten 612A612D enthalten ist. Des weiteren beinhalten die Verarbeitungsknoten 612A612D eine Schnittstellenlogik, die zur Kommunikation mit den Verarbeitungsknoten 612A612D 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 620A620B 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 612A612D 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 624C624H 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 612A612D 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 612A612D 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 614A614D können beliebige geeignete Speichereinrichtungen aufweisen. Beispielsweise können die Speicher 614A614D einen oder mehrere RAMBUS DRAMs (RDRAMs), synchrone DRAMs (SDRAMs), statische RAM, etc. aufweisen. Der Adressenraum des Computersystems 400 ist unter den Speichern 614A614D aufgeteilt. Jeder Verarbeitungsknoten 612A612D kann eine Speicherzuordnung enthalten, die verwendet wird, um zu bestimmen, welche Adressen welchen Speichern 614A614D zugewiesen sind, zu welchem Verarbeitungsknoten 612A612D 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 616A616D, die mit dem Speicher verbunden ist, der die der Adresse entsprechenden Bits enthält. Anders ausgedrückt, die Speichersteuerung 616A616D ist dafür verantwortlich sicherzustellen, dass jeder Speicherzugriff auf den entsprechenden Speicher 614A614D in einer mit dem Cache-Speicher kohärenten Weise stattfindet. Die Speichersteuerungen 616A616D können eine Steuerschaltung als Schnittstelle mit den Speichern 614A614D aufweisen. Ferner können die Speichersteuerungen 616A616D Anforderungswarteschlangen zur Aufreihung von Speicheranfragen beinhalten.
  • Die Schnittstellenlogiken 618A618L 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 620A620B können beliebige geeignete I/O-Geräte sein. Beispielsweise können die I/O-Geräte 620A620B 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 620A620B 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.
  • Zusammenfassung
  • System und Verfahren zum Verknüpfen spekulativer Ergebnisse von Ladeoperationen mit Registerwerten. Ein System (100) umfasst eine Speicherdatei (132) mit einem Eintrag (220), der gestaltet ist, ein erstes Adressiermuster (206) und eine erste Markierung (208) zu speichern. Die Speicherdatei (132) ist ausgebildet, das erste Adressiermuster (206) mit einem zweiten Adressiermuster (206) einer Ladeoperation zu vergleichen und einen durch die erste Markierung (208) gekennzeichneten Datenwert mit einem spekulativen Ergebnis der Ladeoperation zu verknüpfen, wenn eine Übereinstimmung besteht. Das System (100) umfasst ferner einen Ausführungskern (124), der mit der Speicherdatei (132) verbunden und ausgebildet ist, auf das spekulative Ergebnis zuzugreifen, wenn eine zweite Operation, die von der Ladeoperation abhängig ist, ausgeführt wird, und umfasst ferner eine Funktionseinheit (126), die mit der Speicherdatei (132) verbunden und ausgebildet ist, die Verknüpfung zwischen dem Datenwert und dem spekulativen Ergebnis der Ladeoperation zu verifizieren, indem ein Vergleich zwischen einer oder mehreren Adressen ausgeführt wird.

Claims (10)

  1. System (100) mit einer Speicherdatei (132) mit einem Eintrag (220), der ausgebildet ist, ein erstes Adressiermuster (206) und eine erste Markierung (208) zu speichern, wobei die Speicherdatei (132) ausgebildet ist, das erste Adressiermuster (206), das in dem Eintrag (220) enthalten ist, mit einem zweiten Adressiermuster (206) einer Ladeoperation zu vergleichen, wobei, wenn das zweite Adressiermuster (206) mit dem ersten Adressiermuster (206), das in dem Eintrag (220) gespeichert ist, übereinstimmt, die Speicherdatei (132) ausgebildet ist, einen durch die erste Markierung (208) bezeichneten Datenwert mit einem spekulativen Ergebnis der Ladeoperation zu verknüpfen; einem Ausführungskern (124) der mit der Speicherdatei (132) verbunden ist, wobei der Ausführungskern (124) ausgebildet ist, auf das spekulative Ergebnis zuzugreifen, wenn er eine zweite Operation ausführt, die von der Ladeoperation abhängig ist; und einer Funktionseinheit (126), die mit der Speicherdatei (132) verbunden und ausgebildet ist, die Verknüpfung zwischen dem durch die erste Markierung (208) gekennzeichneten Datenwert und dem spekulativen Ergebnis der Ladeoperation zu verifizieren, indem ein Vergleich zwischen einer oder mehreren Adressen ausgeführt wird.
  2. System (100) nach Anspruch 1, wobei die Funktionseinheit (126) Schreib-zu-Lade-Weiterleitungskomparatoren (280) aufweist, die ausgebildet sind, den Vergleich auszuführen und eine nicht spekulative Schreib-zu-Lade-Weiterleitung auszuführen.
  3. System (100) nach Anspruch 1, wobei der Eintrag (220) ferner gestaltet ist, eine Weiterleitungsmarkierung (256) zu speichern, die eine Ladeoperation oder eine Schreiboperation kennzeichnet, auf Grund derer der Eintrag (220) zugeordnet wurde, und um die Weiterleitungsmarkierung (256) auszugeben, wenn das zweite Adressiermuster (206) mit dem in dem Eintrag (220) gespeicherten ersten Adressiermuster (206) übereinstimmt.
  4. System (100) nach Anspruch 3, wobei die Funktionseinheit (126) ausgebildet ist, die Weiterleitungsmarkierung (256) zu empfangen und ferner ausgebildet ist, den Vergleich auszuführen, indem eine jüngste Operation, die älter ist als die Ladeoperation und eine mit der Adresseladeoperation übereinstimmende Adresse aufweist, ausgewählt wird, und indem die Weiterleitungsmarkierung (256) mit einer Kennungsmarkierung der ausgewählten jüngsten Operation verglichen wird, wobei die ausgewählte jüngste Operation eine Ladeoperation oder eine Schreiboperation ist.
  5. System (100) nach Anspruch 3, wobei die Funktionseinheit (126) angeschlossen ist, die Weiterleitungsmarkierung (256) zu empfangen und ferner ausgebildet ist, den Vergleich auszuführen, indem eine jüngste Ladeoperation und eine jüngste Schreiboperation, die jeweils älter als die Ladeoperation sind und jeweils eine mit einer Adresse der Ladeoperation übereinstimmende Adresse aufweisen, ausgewählt werden, indem bestimmt wird, dass die ausgewählte jüngste Ladeoperation in der Programmreihenfolge jünger ist als die ausgewählte jüngste Schreiboperation, und indem die Weiterleitungsmarkierung (256) mit einer Kennungsmarkierung der ausgewählten jüngsten Ladeoperation verglichen wird.
  6. Verfahren mit: Speichern eines Eintrags (220), der ein erstes Adressiermuster (206) und eine erste Markierung (208) enthält; Vergleichen des in dem Eintrag (220) enthaltenen erstes Adressiermusters (206) mit einem zweiten Adressiermuster (206) einer Ladeoperation, die auf Speichern des Eintrags (220) folgt; Verknüpfen eines durch die erste Markierung (208) gekennzeichneten Datenwertes mit einem spekulativen Ergebnis der Ladeoperation in Reaktion auf den Vergleich, wenn das zweite Adressiermuster (206) mit dem ersten Adressiermuster (206), das in dem Eintrag (220) gespeichert ist, übereinstimmt; Zugreifen 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 der Verknüpfung zwischen dem durch die erste Markierung (208) gekennzeichneten Datenwert und dem spekulativen Ergebnis der Ladeoperation durch Ausführen eines Vergleichs für eine oder mehrere auf die Verknüpfung folgenden Adressen.
  7. Verfahren nach Anspruch 6, wobei der Eintrag (220) in Reaktion auf eine Schreiboperation zugewiesen wird, die früher in der Programmreihenfolge als die Ladeoperation auftritt, und wobei das Verfahren ferner umfasst: Setzten einer Flagge (269), die der Schreiboperation zugeordnet ist, in Reaktion auf das Verknüpfen des durch die Markierung gekennzeichneten Datenwertes mit dem spekulativen Ergebnis der Ladeoperation.
  8. Verfahren nach Anspruch 7, das ferner umfasst: Beibehalten von mit der Schreiboperation verknüpfter Information bis die Verknüpfung verifiziert ist, indem der Vergleich ausgeführt wird, wobei das Beibehalten in Reaktion auf das Setzten der Flagge (269) erfolgt.
  9. Verfahren nach Anspruch 8, das ferner umfasst: nicht Abschließen der Schreiboperation bis die Verknüpfung verifiziert ist in Reaktion auf das Setzten der Flagge (269).
  10. Verfahren mit: Speichern eines Eintrags (220), der ein erstes Adressiermuster (206) und eine erste Markierung (208) enthält; Vergleichen des ersten Adressiermusters (206), das in dem Eintrag (220) enthalten ist, mit einem zweiten Adressiermuster (206) einer Ladeoperation, die auf das Speichern des Eintrags (220) folgt; Verknüpfen eines durch die erste Markierung (208) gekennzeichneten Datenwertes mit einem spekulativen Ergebnis der Ladeoperation in Reaktion auf das Vergleichen, wenn das zweite Adressiermuster (206) mit dem ersten Adressiermuster (206), das in dem Eintrag (220) gespeichert ist, übereinstimmt; Zugreifen 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 der Verknüpfung zwischen dem durch die erste Markierung (208) gekennzeichneten Datenwert und dem spekulativen Ergebnis der Ladeoperation durch Ausführen eines Vergleichs zwischen dem spekulativen Ergebnis und einem tatsächlichen Ergebnis der Ladeoperation nach dem Verknüpfen.
DE112004002848T 2004-05-05 2004-12-17 Mikroprozessor und Verfahren zum Verifizieren einer Speicherdatei in einem derartigen Mikroprozessor Active DE112004002848B4 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US10/839,474 2004-05-05
US10/839,474 US7263600B2 (en) 2004-05-05 2004-05-05 System and method for validating a memory file that links speculative results of load operations to register values
PCT/US2004/042683 WO2005111794A1 (en) 2004-05-05 2004-12-17 System and method for validating a memory file that links speculative results of load operations to register values

Publications (2)

Publication Number Publication Date
DE112004002848T5 true DE112004002848T5 (de) 2007-04-05
DE112004002848B4 DE112004002848B4 (de) 2010-06-17

Family

ID=34959784

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112004002848T Active DE112004002848B4 (de) 2004-05-05 2004-12-17 Mikroprozessor und Verfahren zum Verifizieren einer Speicherdatei in einem derartigen Mikroprozessor

Country Status (7)

Country Link
US (1) US7263600B2 (de)
JP (1) JP2007536626A (de)
CN (1) CN100424635C (de)
DE (1) DE112004002848B4 (de)
GB (1) GB2429557B (de)
TW (1) TWI362613B (de)
WO (1) WO2005111794A1 (de)

Families Citing this family (45)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7571304B2 (en) * 2005-03-18 2009-08-04 Sun Microsystems, Inc. Generation of multiple checkpoints in a processor that supports speculative execution
US7376817B2 (en) * 2005-08-10 2008-05-20 P.A. Semi, Inc. Partial load/store forward prediction
US20080010440A1 (en) * 2006-07-05 2008-01-10 International Business Machines Corporation Means for supporting and tracking a large number of in-flight stores in an out-of-order processor
US20080010441A1 (en) * 2006-07-05 2008-01-10 International Business Machines Corporation Means for supporting and tracking a large number of in-flight loads in an out-of-order processor
US7624253B2 (en) * 2006-10-25 2009-11-24 Arm Limited Determining register availability for register renaming
US20080162889A1 (en) * 2007-01-03 2008-07-03 International Business Machines Corporation Method and apparatus for implementing efficient data dependence tracking for multiprocessor architectures
US7689812B2 (en) * 2007-02-14 2010-03-30 International Business Machines Corporation Method and system for restoring register mapper states for an out-of-order microprocessor
US9069672B2 (en) * 2009-06-12 2015-06-30 Intel Corporation Extended fast memory access in a multiprocessor computer system
US8521992B2 (en) * 2009-12-22 2013-08-27 International Business Machines Corporation Predicting and avoiding operand-store-compare hazards in out-of-order microprocessors
US8468325B2 (en) 2009-12-22 2013-06-18 International Business Machines Corporation Predicting and avoiding operand-store-compare hazards in out-of-order microprocessors
US9135014B2 (en) * 2012-02-15 2015-09-15 Freescale Semiconductor, Inc Data processing system with latency tolerance execution
US9996348B2 (en) * 2012-06-14 2018-06-12 Apple Inc. Zero cycle load
US10467010B2 (en) * 2013-03-15 2019-11-05 Intel Corporation Method and apparatus for nearest potential store tagging
US10198265B2 (en) 2013-03-15 2019-02-05 Intel Corporation Microprocessor for gating a load operation based on entries of a prediction table
US9436476B2 (en) 2013-03-15 2016-09-06 Soft Machines Inc. Method and apparatus for sorting elements in hardware structures
US9471480B2 (en) * 2013-12-02 2016-10-18 The Regents Of The University Of Michigan Data processing apparatus with memory rename table for mapping memory addresses to registers
GB2518022B (en) * 2014-01-17 2015-09-23 Imagination Tech Ltd Stack saved variable value prediction
US11068271B2 (en) 2014-07-28 2021-07-20 Apple Inc. Zero cycle move using free list counts
GB2532232A (en) * 2014-11-12 2016-05-18 Ibm Verifying a graph-based coherency verification tool
CN107710153B (zh) * 2015-07-09 2022-03-01 森蒂彼得塞米有限公司 具有有效的存储器访问的处理器
US10185561B2 (en) * 2015-07-09 2019-01-22 Centipede Semi Ltd. Processor with efficient memory access
US9575897B2 (en) 2015-07-09 2017-02-21 Centipede Semi Ltd. Processor with efficient processing of recurring load instructions from nearby memory addresses
US20170010973A1 (en) * 2015-07-09 2017-01-12 Centipede Semi Ltd. Processor with efficient processing of load-store instruction pairs
US10331357B2 (en) * 2016-08-19 2019-06-25 Advanced Micro Devices, Inc. Tracking stores and loads by bypassing load store units
US10534609B2 (en) 2017-08-18 2020-01-14 International Business Machines Corporation Code-specific affiliated register prediction
US10719328B2 (en) 2017-08-18 2020-07-21 International Business Machines Corporation Determining and predicting derived values used in register-indirect branching
US10884746B2 (en) 2017-08-18 2021-01-05 International Business Machines Corporation Determining and predicting affiliated registers based on dynamic runtime control flow analysis
US10884745B2 (en) 2017-08-18 2021-01-05 International Business Machines Corporation Providing a predicted target address to multiple locations based on detecting an affiliated relationship
US10908911B2 (en) 2017-08-18 2021-02-02 International Business Machines Corporation Predicting and storing a predicted target address in a plurality of selected locations
US11150904B2 (en) 2017-08-18 2021-10-19 International Business Machines Corporation Concurrent prediction of branch addresses and update of register contents
US10884747B2 (en) 2017-08-18 2021-01-05 International Business Machines Corporation Prediction of an affiliated register
US11150908B2 (en) 2017-08-18 2021-10-19 International Business Machines Corporation Dynamic fusion of derived value creation and prediction of derived values in a subroutine branch sequence
US10713050B2 (en) 2017-09-19 2020-07-14 International Business Machines Corporation Replacing Table of Contents (TOC)-setting instructions in code with TOC predicting instructions
US10884929B2 (en) 2017-09-19 2021-01-05 International Business Machines Corporation Set table of contents (TOC) register instruction
US10705973B2 (en) 2017-09-19 2020-07-07 International Business Machines Corporation Initializing a data structure for use in predicting table of contents pointer values
US10725918B2 (en) 2017-09-19 2020-07-28 International Business Machines Corporation Table of contents cache entry having a pointer for a range of addresses
US11061575B2 (en) 2017-09-19 2021-07-13 International Business Machines Corporation Read-only table of contents register
US10620955B2 (en) 2017-09-19 2020-04-14 International Business Machines Corporation Predicting a table of contents pointer value responsive to branching to a subroutine
US10896030B2 (en) 2017-09-19 2021-01-19 International Business Machines Corporation Code generation relating to providing table of contents pointer values
US10620961B2 (en) * 2018-03-30 2020-04-14 Intel Corporation Apparatus and method for speculative conditional move operation
US11334485B2 (en) * 2018-12-14 2022-05-17 Eta Scale Ab System and method for dynamic enforcement of store atomicity
US11061683B2 (en) * 2019-06-13 2021-07-13 Microsoft Technology Licensing, Llc Limiting replay of load-based control independent (CI) instructions in speculative misprediction recovery in a processor
US11200062B2 (en) 2019-08-26 2021-12-14 Apple Inc. History file for previous register mapping storage and last reference indication
US11416254B2 (en) 2019-12-05 2022-08-16 Apple Inc. Zero cycle load bypass in a decode group
US11392387B2 (en) 2020-11-04 2022-07-19 Microsoft Technology Licensing, Llc Predicting load-based control independent (CI) register data independent (DI) (CIRDI) instructions as CI memory data dependent (DD) (CIMDD) instructions for replay in speculative misprediction recovery in a processor

Family Cites Families (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5778219A (en) * 1990-12-14 1998-07-07 Hewlett-Packard Company Method and system for propagating exception status in data registers and for detecting exceptions from speculative operations with non-speculative operations
US5428807A (en) * 1993-06-17 1995-06-27 Digital Equipment Corporation Method and apparatus for propagating exception conditions of a computer system
US5584009A (en) * 1993-10-18 1996-12-10 Cyrix Corporation System and method of retiring store data from a write buffer
US5452426A (en) * 1994-01-04 1995-09-19 Intel Corporation Coordinating speculative and committed state register source data and immediate source data in a processor
US5799179A (en) * 1995-01-24 1998-08-25 International Business Machines Corporation Handling of exceptions in speculative instructions
US6237082B1 (en) * 1995-01-25 2001-05-22 Advanced Micro Devices, Inc. Reorder buffer configured to allocate storage for instruction results corresponding to predefined maximum number of concurrently receivable instructions independent of a number of instructions received
US5751983A (en) * 1995-10-03 1998-05-12 Abramson; Jeffrey M. Out-of-order processor with a memory subsystem which handles speculatively dispatched load operations
US5892936A (en) * 1995-10-30 1999-04-06 Advanced Micro Devices, Inc. Speculative register file for storing speculative register states and removing dependencies between instructions utilizing the register
US6108769A (en) * 1996-05-17 2000-08-22 Advanced Micro Devices, Inc. Dependency table for reducing dependency checking hardware
US5781752A (en) * 1996-12-26 1998-07-14 Wisconsin Alumni Research Foundation Table based data speculation circuit for parallel processing computer
US6021485A (en) * 1997-04-10 2000-02-01 International Business Machines Corporation Forwarding store instruction result to load instruction with reduced stall or flushing by effective/real data address bytes matching
US5845103A (en) * 1997-06-13 1998-12-01 Wisconsin Alumni Research Foundation Computer with dynamic instruction reuse
US6065103A (en) * 1997-12-16 2000-05-16 Advanced Micro Devices, Inc. Speculative store buffer
US6044430A (en) * 1997-12-17 2000-03-28 Advanced Micro Devices Inc. Real time interrupt handling for superscalar processors
US6041405A (en) * 1997-12-18 2000-03-21 Advanced Micro Devices, Inc. Instruction length prediction using an instruction length pattern detector
US6112296A (en) * 1997-12-18 2000-08-29 Advanced Micro Devices, Inc. Floating point stack manipulation using a register map and speculative top of stack values
US6175910B1 (en) * 1997-12-19 2001-01-16 International Business Machines Corportion Speculative instructions exection in VLIW processors
JPH11212788A (ja) * 1998-01-28 1999-08-06 Toshiba Corp プロセッサのデータ供給装置
US6202204B1 (en) * 1998-03-11 2001-03-13 Intel Corporation Comprehensive redundant load elimination for architectures supporting control and data speculation
US6108770A (en) * 1998-06-24 2000-08-22 Digital Equipment Corporation Method and apparatus for predicting memory dependence using store sets
US6463580B1 (en) * 1998-11-18 2002-10-08 Intel Corporation Parallel processing utilizing highly correlated data values
US6349382B1 (en) * 1999-03-05 2002-02-19 International Business Machines Corporation System for store forwarding assigning load and store instructions to groups and reorder queues to keep track of program order
US6658554B1 (en) * 1999-03-09 2003-12-02 Wisconsin Alumni Res Found Electronic processor providing direct data transfer between linked data consuming instructions
US6393536B1 (en) * 1999-05-18 2002-05-21 Advanced Micro Devices, Inc. Load/store unit employing last-in-buffer indication for rapid load-hit-store
US6266744B1 (en) * 1999-05-18 2001-07-24 Advanced Micro Devices, Inc. Store to load forwarding using a dependency link file
US6662280B1 (en) 1999-11-10 2003-12-09 Advanced Micro Devices, Inc. Store buffer which forwards data based on index and optional way match
US6438673B1 (en) * 1999-12-30 2002-08-20 Intel Corporation Correlated address prediction
US6643767B1 (en) * 2000-01-27 2003-11-04 Kabushiki Kaisha Toshiba Instruction scheduling system of a processor
US6675287B1 (en) * 2000-04-07 2004-01-06 Ip-First, Llc Method and apparatus for store forwarding using a response buffer data path in a write-allocate-configurable microprocessor
DE10121792C2 (de) * 2000-05-26 2003-09-25 Ibm Universelle Ladeadresse/Wertevorhersageschema
US6671780B1 (en) * 2000-05-31 2003-12-30 Intel Corporation Modified least recently allocated cache replacement method and apparatus that allows skipping a least recently allocated cache block
JP3497832B2 (ja) * 2001-03-28 2004-02-16 株式会社半導体理工学研究センター ロード・ストアキュー
US6883086B2 (en) * 2002-03-06 2005-04-19 Intel Corporation Repair of mis-predicted load values
US7028166B2 (en) * 2002-04-30 2006-04-11 Advanced Micro Devices, Inc. System and method for linking speculative results of load operations to register values

Also Published As

Publication number Publication date
US7263600B2 (en) 2007-08-28
GB2429557A (en) 2007-02-28
DE112004002848B4 (de) 2010-06-17
TWI362613B (en) 2012-04-21
GB0622878D0 (en) 2006-12-27
WO2005111794A1 (en) 2005-11-24
JP2007536626A (ja) 2007-12-13
TW200606709A (en) 2006-02-16
US20050247774A1 (en) 2005-11-10
GB2429557B (en) 2007-09-05
CN100424635C (zh) 2008-10-08
CN1954290A (zh) 2007-04-25

Similar Documents

Publication Publication Date Title
DE112004002848B4 (de) Mikroprozessor und Verfahren zum Verifizieren einer Speicherdatei in einem derartigen Mikroprozessor
DE112005002173B4 (de) Prozessor mit Abhängigkeitsmechanismus, um vorherzusagen, ob ein Ladevorgang von einem älteren Schreibvorgang abhängig ist
DE60036016T2 (de) Schnell multithreading für eng gekoppelte multiprozessoren
DE60025028T2 (de) Speicherpuffer, der daten, basierend auf index und freiwilliger weisebemusterung überträgt
DE69908193T2 (de) Ausführung von speicher- und ladeoperationen mittels einer linkdatei
DE112007003801B3 (de) Vorrichtung mit einer speichereinheit und einer logik zur bereitstellung eines effizienten mechanismus‘ für transaktionalspeicherausführungen in out-of-order-prozessoren
DE112004002365T5 (de) Übergang vom Befehls-Cache-Speicher zum Ablaufverfolgungs-Cache-Speicher basierend auf Markengrenzen
DE60005860T2 (de) Ablaufsteuerung zum ausgeben und wiederausgeben von ketten abhängiger befehle
DE60222402T2 (de) Verfahren und system zur spekulativen ungültigkeitserklärung von zeilen in einem cachespeicher
DE112004001854T5 (de) System und Verfahren zur Handhabung von Sonderinstruktionen in einem Prozessor auf Grundlage eines Cache-Speichers mit Ablaufverfolgung
DE60009151T2 (de) Vorhersage von datenbeförderung von speicher- zum ladebefehl mit untrainierung
DE112009000741B4 (de) Vektorbefehle zum Ermöglichen von effizienter Synchronisation und parallelen Reduktionsoperationen
DE60102017T2 (de) Räumungsfilter für adressenübersetzungspuffer
DE112010003492B4 (de) Transaktionsspeichersystem mit wirksamerZwischenspeicherunterstützung
DE69433339T2 (de) Lade-/Speicherfunktionseinheiten und Datencachespeicher für Mikroprozessoren
DE60003235T2 (de) Cachespeicher zum bereitstellen von partiellen etiketten aus nicht-vorhergesagten wegen um die suche bei wegvorhersagefehlgriffen zu leiten
DE69633474T2 (de) Adressierungsverfahren zur nicht-sequentiellen Ausführung von Ladebefehlen hinsichtlich Speicherungsbefehlen
DE112017001825T5 (de) Prozessoren, verfahren, systeme und instruktionen zum atomischen speichern von daten, die breiter als eine nativ unterstützte datenbreite sind, in einem speicher
DE112010004322T5 (de) Vorhersagen und Vermeiden von Operand-Speichervorgang-Vergleich-Gefahren in Mikroprozessoren mit abweichender Reihenfolge
DE202007019502U1 (de) Globaler Überlauf für virtualisierten Transaktionsspeicher
DE602004010265T2 (de) Load-store-einheit mit wiederholungsmechanismus
US8898395B1 (en) Memory management for cache consistency
DE102005032949A1 (de) Verfahren und Vorrichtung zum Implementieren von Speicherordnungsmodellen mit Ordnungsvektoren
DE19506734A1 (de) Computersystem und Verfahren zum Aufrechterhalten der Speicherkonsistenz in einer Busanforderungswarteschlange
DE102014003799A1 (de) Systeme und Verfahren zur Übertragungseliminierung mit Bypass-Mehrfachinstanziierungstabelle

Legal Events

Date Code Title Description
OP8 Request for examination as to paragraph 44 patent law
8364 No opposition during term of opposition
8327 Change in the person/name/address of the patent owner

Owner name: GLOBALFOUNDRIES INC., GRAND CAYMAN, KY

8328 Change in the person/name/address of the agent

Representative=s name: GRUENECKER, KINKELDEY, STOCKMAIR & SCHWANHAEUSSER,

R081 Change of applicant/patentee

Owner name: GLOBALFOUNDRIES U.S. INC., SANTA CLARA, US

Free format text: FORMER OWNER: GLOBALFOUNDRIES INC., GRAND CAYMAN, KY

R082 Change of representative

Representative=s name: GRUENECKER PATENT- UND RECHTSANWAELTE PARTG MB, DE