DE112005002173B4 - Prozessor mit Abhängigkeitsmechanismus, um vorherzusagen, ob ein Ladevorgang von einem älteren Schreibvorgang abhängig ist - Google Patents

Prozessor mit Abhängigkeitsmechanismus, um vorherzusagen, ob ein Ladevorgang von einem älteren Schreibvorgang abhängig ist Download PDF

Info

Publication number
DE112005002173B4
DE112005002173B4 DE112005002173T DE112005002173T DE112005002173B4 DE 112005002173 B4 DE112005002173 B4 DE 112005002173B4 DE 112005002173 T DE112005002173 T DE 112005002173T DE 112005002173 T DE112005002173 T DE 112005002173T DE 112005002173 B4 DE112005002173 B4 DE 112005002173B4
Authority
DE
Germany
Prior art keywords
prediction
load
dependency
load operation
operations
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.)
Active
Application number
DE112005002173T
Other languages
English (en)
Other versions
DE112005002173T5 (de
Inventor
Michael A. Manchaca Filippo
James K. Austin Pickett
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.)
Advanced Micro Devices 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 DE112005002173T5 publication Critical patent/DE112005002173T5/de
Application granted granted Critical
Publication of DE112005002173B4 publication Critical patent/DE112005002173B4/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/38Concurrent instruction execution, e.g. pipeline, look ahead
    • 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
    • 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
    • G06F9/345Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
    • G06F9/3455Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results using stride
    • 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
    • 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
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding

Abstract

Mikroprozessor (100) mit:
einer zum Ausgeben von Operationen ausgebildeten Disponiereinheit (118); und
einer Lade/Schreibeinheit (126c), die zum Empfangen von von der Disponiereinheit (118) ausgegebenen Speicheroperationen und zur Ausführung der Speicheroperationen ausgebildet ist;
wobei die Lade/Schreibeinheit (126c) eine Abhängigkeitsverifizierlogik (305) und eine Abhängigkeitsvorhersagelogik (303), die eine globale Vorhersageeinheit (340) aufweist mit einem globalen Historienregister (342) und mehreren globalen Vorhersageeinträgen (345), enthält, wobei das globale Historienregister (342) ausgebildet ist, mehrere Abhängigkeitsvorhersagewerte zu speichern, die einem entsprechenden Abhängigkeitsverhalten einer von mehreren ausgeführten Ladeoperationen entsprechen, wobei mindestens zwei der mehreren ausgeführten Ladeoperationen unterschiedliche Ladeoperationen sind;
wobei die Lade/Schreibeinheit (126c) weiterhin einen Operationsspeicher (307) aufweist, der mit der Abhängigkeitsverifizierlogik (305) und der Abhängigkeitsvorhersagelogik (303) verbunden ist;
wobei die Abhängigkeitsvorhersagelogik (303) weiterhin eine lokale Vorhersageeinheit (330) aufweist, die mehrere lokale Vorhersageeinträge (335) enthält, wobei jede der mehreren lokalen Vorhersageeinträge (335) einen Abhängigkeitsvorhersagewert (337) enthält, und wobei die Abhängigkeitsvorhersagelogik (303) dazu ausgebildet...

Description

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

Claims (4)

  1. Mikroprozessor (100) mit: einer zum Ausgeben von Operationen ausgebildeten Disponiereinheit (118); und einer Lade/Schreibeinheit (126c), die zum Empfangen von von der Disponiereinheit (118) ausgegebenen Speicheroperationen und zur Ausführung der Speicheroperationen ausgebildet ist; wobei die Lade/Schreibeinheit (126c) eine Abhängigkeitsverifizierlogik (305) und eine Abhängigkeitsvorhersagelogik (303), die eine globale Vorhersageeinheit (340) aufweist mit einem globalen Historienregister (342) und mehreren globalen Vorhersageeinträgen (345), enthält, wobei das globale Historienregister (342) ausgebildet ist, mehrere Abhängigkeitsvorhersagewerte zu speichern, die einem entsprechenden Abhängigkeitsverhalten einer von mehreren ausgeführten Ladeoperationen entsprechen, wobei mindestens zwei der mehreren ausgeführten Ladeoperationen unterschiedliche Ladeoperationen sind; wobei die Lade/Schreibeinheit (126c) weiterhin einen Operationsspeicher (307) aufweist, der mit der Abhängigkeitsverifizierlogik (305) und der Abhängigkeitsvorhersagelogik (303) verbunden ist; wobei die Abhängigkeitsvorhersagelogik (303) weiterhin eine lokale Vorhersageeinheit (330) aufweist, die mehrere lokale Vorhersageeinträge (335) enthält, wobei jede der mehreren lokalen Vorhersageeinträge (335) einen Abhängigkeitsvorhersagewert (337) enthält, und wobei die Abhängigkeitsvorhersagelogik (303) dazu ausgebildet ist: entweder einen gegebenen globalen Vorhersageeintrag (345) für eine gegebene Ladeoperation in Abhängigkeit von zwei oder mehr Abhängigkeitsvorhersagewerten, die in dem globalen Historienregister (342) entsprechend den unterschiedlichen Ladeoperationen gespeichert sind, auszuwählen, wobei die Abhängigkeitsvorhersagewerte anzeigen, dass von der gegebenen Ladeoperation, die in dem Operationsspeicher (307) gespeichert ist, vorhergesagt wird, dass sie unabhängig von älteren Schreiboperationen ist oder nicht; die gegebene Ladeoperation auszuführen, bevor eine Adresse der älteren Schreiboperation berechnet wird, wenn ein Abhängigkeitsvorhersagewert für den ausgewählten globalen Vorhersageeintrag (345) anzeigt, dass die gegebene Ladeoperation als von der älteren Schreiboperation unabhängig vorausgesagt wird; oder einen gegebenen lokalen Vorhersageeintrag (335) auszuwählen, der einen Anhängigkeitsvorhersagewert (337) enthält, der anzeigt, dass von der gegebenen Ladeoperation, die in dem Operationsspeicher (307) gespeichert ist, vorhergesagt wird, dass sie unabhängig von älteren Schreiboperationen ist oder nicht; und die gegebene Ladeoperation auszuführen, bevor eine Adresse der älteren Schreiboperation berechnet wird, wenn ein Abhängigkeitsvorhersagewert für den ausgewählten lokalen Vorhersageeintrag (335) anzeigt, dass die gegebene Ladeoperation als von der älteren Schreiboperation unabhängig vorausgesagt wird; wobei die Abhängigkeitsvorhersagelogik (303) einen Selektor (355) enthält, der dazu ausgebildet ist, die Auswahl des gegebenen globalen Vorhersageeintrags (345) oder des gegebenen lokalen Vorhersageeintrags (335) zu steuern; wobei die Verifizierungslogik (305) dazu ausgebildet ist zu verifizieren dass die gegebene Ladeoperation von der älteren Schreiboperation unabhängig ist; und ein Wiederholungssignal für die Disponiereinheit (118) bereitzustellen, das angibt, dass die Ladeoperation wiederholt werden soll, wenn die gegebene Ladeoperation von der älteren Ladeoperation abhängig ist.
  2. Mikroprozessor (100) nach Anspruch 1, wobei die Lade/Schreibeinheit (126c) dazu ausgebildet ist, durch eine entsprechende Anzeige, die in der gegebenen Schreibeoperation enthalten ist, die in dem Operationsspeicher (307) gespeichert ist, zu bestimmen, ob die gegebene Ladeoperation eine dynamische Ladeoperation ist; und wobei der Selektor (355) dazu ausgebildet ist, die Auswahl des gegebenen globalen Vorhersageeintrags (345) zu steuern, wenn die gegebene Schreiboperation eine dynamische Schreiboperation ist, und die Auswahl des gegebenen lokalen Vorhersageeintrags (335), wenn die gegebene Schreiboperation keine dynamische Schreiboperation ist.
  3. Verfahren zum Vorhersagen, ob ein Ladevorgang von einem älteren Schreibvorgang abhängig ist, mit folgenden Schritten: Empfangen einer Ladeoperation durch eine Lade-/Schreibeinheit (126C), die eine Abhängigkeitsverifizierlogik (305) und eine Abhängigkeitsvorhersagelogik (303); Bestimmen, ob die Ladeoperation eine dynamische Ladeoperation ist; Vorhersagen durch die Abhängigkeitsvorhersagelogik (303), ob die Ladeoperation von einer älteren Schreiboperation abhängig ist; Ausführen der Ladeoperation vor dem Berechnen einer Adresse der älteren Schreiboperation in Reaktion auf das Vorhersagen, dass die gegebene Ladeoperation von der älteren Schreiboperation unabhängig ist; Verifizieren durch die Abhängigkeitsverifizierlogik (305), ob die Ladeoperation falsch vorhergesagt ist, nachdem die Ladeoperation als von der älteren Schreiboperation unabhängig vorhergesagt wurde; Bereitstellen von der Abhängigkeitsverifizierlogik (305) eines Wiederholungssignalsangabe für eine Disponiereinheit (118), die angibt, dass die Ladeoperation wiederholt werden soll, in Reaktion auf das Erkennen, dass die Ladeoperation falsch vorhergesagt ist; wobei das Vorhersagen, ob die Ladeoperation von der älteren Schreiboperation abhängig ist, umfasst: a) wenn die gegebene Ladeoperation eine dynamische Operation ist, Auswählen eines globalen Vorhersageeintrags (345) für die Ladeoperation in Abhängigkeit von zwei oder mehreren Abhängigkeitswerten, die in einem globalen Historienregister (342) gespeichert sind, und Bewerten eines Abhängigkeitsvorhersagewertes (347), der in dem globalen Vorhersageeintrag (345) enthalten ist, der anzeigt, dass die gegebene Ladeoperation als abhängig oder nicht abhängig von älteren Schreiboperationen vorhergesagt ist; b) wenn die gegebene Ladeoperation keine dynamische Operation ist, Auswählen eines lokalen Vorhersageeintrags (335) für die Ladeoperation in Abhängigkeit von einem Abhängigkeitswert und Bewerten des Abhängigkeitsvorhersagewertes (337), der anzeigt, dass die gegebene Ladeoperation, die in dem Operationsspeicher (307) gespeichert ist, als abhängig oder nicht abhängig von älteren Schreiboperationen vorhergesagt ist.
  4. Computersystem mit einem Speicher (200) und einem Prozessor (100) gemäß Anspruch 1 oder 2, der mit dem Speicher (200) verbunden ist.
DE112005002173T 2004-09-08 2005-06-23 Prozessor mit Abhängigkeitsmechanismus, um vorherzusagen, ob ein Ladevorgang von einem älteren Schreibvorgang abhängig ist Active DE112005002173B4 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US10/936,296 US7415597B2 (en) 2004-09-08 2004-09-08 Processor with dependence mechanism to predict whether a load is dependent on older store
US10/936,296 2004-09-08
PCT/US2005/022426 WO2006028555A2 (en) 2004-09-08 2005-06-23 Processor with dependence mechanism to predict whether a load is dependent on older store

Publications (2)

Publication Number Publication Date
DE112005002173T5 DE112005002173T5 (de) 2007-09-27
DE112005002173B4 true DE112005002173B4 (de) 2009-04-16

Family

ID=35159735

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112005002173T Active DE112005002173B4 (de) 2004-09-08 2005-06-23 Prozessor mit Abhängigkeitsmechanismus, um vorherzusagen, ob ein Ladevorgang von einem älteren Schreibvorgang abhängig ist

Country Status (8)

Country Link
US (1) US7415597B2 (de)
JP (1) JP5294632B2 (de)
KR (1) KR101192814B1 (de)
CN (1) CN100524206C (de)
DE (1) DE112005002173B4 (de)
GB (1) GB2432693B (de)
TW (1) TWI383320B (de)
WO (1) WO2006028555A2 (de)

Families Citing this family (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2881246B1 (fr) * 2005-01-21 2007-03-23 Meiosys Soc Par Actions Simpli Procede perdictif de gestion, de journalisation ou de rejeu d'operations non deterministes au sein du deroulement d'un processus applicatif
US7590825B2 (en) * 2006-03-07 2009-09-15 Intel Corporation Counter-based memory disambiguation techniques for selectively predicting load/store conflicts
JP5145809B2 (ja) * 2007-07-31 2013-02-20 日本電気株式会社 分岐予測装置、ハイブリッド分岐予測装置、プロセッサ、分岐予測方法、及び分岐予測制御プログラム
US20090138890A1 (en) * 2007-11-21 2009-05-28 Arm Limited Contention management for a hardware transactional memory
US8285947B2 (en) * 2009-02-06 2012-10-09 Apple Inc. Store hit load predictor
US8930679B2 (en) * 2009-05-29 2015-01-06 Via Technologies, Inc. Out-of-order execution microprocessor with reduced store collision load replay by making an issuing of a load instruction dependent upon a dependee instruction of a store instruction
US20100325395A1 (en) * 2009-06-19 2010-12-23 Doug Burger Dependence prediction in a memory system
CN101944012B (zh) * 2009-08-07 2014-04-23 威盛电子股份有限公司 指令处理方法以及其所适用的超纯量管线微处理器
CN101907984B (zh) * 2009-08-07 2014-10-29 威盛电子股份有限公司 指令处理方法以及其所适用的超纯量管线微处理器
US8601240B2 (en) * 2010-05-04 2013-12-03 Oracle International Corporation Selectively defering load instructions after encountering a store instruction with an unknown destination address during speculative execution
US8918625B1 (en) 2010-11-24 2014-12-23 Marvell International Ltd. Speculative scheduling of memory instructions in out-of-order processor based on addressing mode comparison
US9442735B1 (en) * 2012-04-13 2016-09-13 Marvell International Ltd. Method and apparatus for processing speculative, out-of-order memory access instructions
US9128725B2 (en) * 2012-05-04 2015-09-08 Apple Inc. Load-store dependency predictor content management
US9600289B2 (en) 2012-05-30 2017-03-21 Apple Inc. Load-store dependency predictor PC hashing
US9384002B2 (en) * 2012-11-16 2016-07-05 International Business Machines Corporation Speculative finish of instruction execution in a processor core
US9158691B2 (en) 2012-12-14 2015-10-13 Apple Inc. Cross dependency checking logic
US9141803B2 (en) 2013-02-26 2015-09-22 Microsoft Technology Licensing, Llc Self-healing of operating system components
US9619750B2 (en) * 2013-06-29 2017-04-11 Intel Corporation Method and apparatus for store dependence prediction
US9524164B2 (en) 2013-08-30 2016-12-20 Advanced Micro Devices, Inc. Specialized memory disambiguation mechanisms for different memory read access types
US9286073B2 (en) * 2014-01-07 2016-03-15 Samsung Electronics Co., Ltd. Read-after-write hazard predictor employing confidence and sampling
US9710268B2 (en) 2014-04-29 2017-07-18 Apple Inc. Reducing latency for pointer chasing loads
US10514925B1 (en) 2016-01-28 2019-12-24 Apple Inc. Load speculation recovery
US10437595B1 (en) 2016-03-15 2019-10-08 Apple Inc. Load/store dependency predictor optimization for replayed loads
US20170329607A1 (en) * 2016-05-16 2017-11-16 International Business Machines Corporation Hazard avoidance in a multi-slice processor
US10528353B2 (en) 2016-05-24 2020-01-07 International Business Machines Corporation Generating a mask vector for determining a processor instruction address using an instruction tag in a multi-slice processor
US10467008B2 (en) 2016-05-31 2019-11-05 International Business Machines Corporation Identifying an effective address (EA) using an interrupt instruction tag (ITAG) in a multi-slice processor
US10740107B2 (en) * 2016-06-01 2020-08-11 International Business Machines Corporation Operation of a multi-slice processor implementing load-hit-store handling
US10684859B2 (en) * 2016-09-19 2020-06-16 Qualcomm Incorporated Providing memory dependence prediction in block-atomic dataflow architectures
CN108920191B (zh) * 2018-06-05 2020-11-20 上海兆芯集成电路有限公司 处理器电路及其操作方法
US10929142B2 (en) * 2019-03-20 2021-02-23 International Business Machines Corporation Making precise operand-store-compare predictions to avoid false dependencies
US11243774B2 (en) 2019-03-20 2022-02-08 International Business Machines Corporation Dynamic selection of OSC hazard avoidance mechanism
US10606603B1 (en) * 2019-04-08 2020-03-31 Ye Tao Methods and apparatus for facilitating a memory mis-speculation recovery
US20220121447A1 (en) * 2021-12-23 2022-04-21 Intel Corporation Hardening cpu predictors with cryptographic computing context information

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2003093982A1 (en) * 2002-04-30 2003-11-13 Advanced Micro Devices, Inc. System and method for linking speculative results of load operations to register values
US20040143721A1 (en) * 2003-01-21 2004-07-22 Pickett James K. Data speculation based on addressing patterns identifying dual-purpose register

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5666506A (en) * 1994-10-24 1997-09-09 International Business Machines Corporation Apparatus to dynamically control the out-of-order execution of load/store instructions in a processor capable of dispatchng, issuing and executing multiple instructions in a single processor cycle
US5781752A (en) 1996-12-26 1998-07-14 Wisconsin Alumni Research Foundation Table based data speculation circuit for parallel processing computer
JPH11212788A (ja) * 1998-01-28 1999-08-06 Toshiba Corp プロセッサのデータ供給装置
US6658554B1 (en) * 1999-03-09 2003-12-02 Wisconsin Alumni Res Found Electronic processor providing direct data transfer between linked data consuming instructions
US6502188B1 (en) * 1999-11-16 2002-12-31 Advanced Micro Devices, Inc. Dynamic classification of conditional branches in global history branch prediction
US6484254B1 (en) * 1999-12-30 2002-11-19 Intel Corporation Method, apparatus, and system for maintaining processor ordering by checking load addresses of unretired load instructions against snooping store addresses
US6542984B1 (en) * 2000-01-03 2003-04-01 Advanced Micro Devices, Inc. Scheduler capable of issuing and reissuing dependency chains
JP3729087B2 (ja) * 2001-05-23 2005-12-21 日本電気株式会社 マルチプロセッサシステム、データ依存投機実行制御装置およびその方法
US7024545B1 (en) * 2001-07-24 2006-04-04 Advanced Micro Devices, Inc. Hybrid branch prediction device with two levels of branch prediction cache
US7058795B2 (en) * 2002-06-25 2006-06-06 Intel Corporation Method and apparatus of branch prediction
US6944744B2 (en) 2002-08-27 2005-09-13 Advanced Micro Devices, Inc. Apparatus and method for independently schedulable functional units with issue lock mechanism in a processor
US6950925B1 (en) * 2002-08-28 2005-09-27 Advanced Micro Devices, Inc. Scheduler for use in a microprocessor that supports data-speculative execution
US7165167B2 (en) * 2003-06-10 2007-01-16 Advanced Micro Devices, Inc. Load store unit with replay mechanism

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2003093982A1 (en) * 2002-04-30 2003-11-13 Advanced Micro Devices, Inc. System and method for linking speculative results of load operations to register values
US20040143721A1 (en) * 2003-01-21 2004-07-22 Pickett James K. Data speculation based on addressing patterns identifying dual-purpose register

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
BLACK, B. et al: Load Execution Latency Reduction. ACM 1998, S. 29-36 *
CALDER, B., REINMAN, G.: A Comparative Survey of L oad Speculation Architectures. In: Journal of Inst ruction-Level Parallelism 1, Mai 2000, S.1-39; MOS HOVOS, A., SOHI, G.S.: Memory Dependence Speculati on Tradeoffs in Centralized, Continous-Window Supe rscalar Processors. Sixth International Symposium on High-Performance Computer Architecture 8-12 Jan uar 2000, S. 301-312; BLACK, B. et al: Load Execut ion Latency Reduction. ACM 1998, S. 29-36
CALDER, B., REINMAN, G.: A Comparative Survey of Load Speculation Architectures. In: Journal of Instruction-Level Parallelism 1, Mai 2000, S.1-39 *
MOSHOVOS, A., SOHI, G.S.: Memory Dependence Speculation Tradeoffs in Centralized, Continous-Window Superscalar Processors. Sixth International Symposium on High-Performance Computer Architecture 8-12 Januar 2000, S. 301-312 *

Also Published As

Publication number Publication date
GB2432693B (en) 2008-03-12
GB0704887D0 (en) 2007-04-18
WO2006028555A2 (en) 2006-03-16
KR101192814B1 (ko) 2012-10-18
US7415597B2 (en) 2008-08-19
US20060095734A1 (en) 2006-05-04
TWI383320B (zh) 2013-01-21
WO2006028555A3 (en) 2006-08-10
JP2008512769A (ja) 2008-04-24
CN100524206C (zh) 2009-08-05
CN101014934A (zh) 2007-08-08
DE112005002173T5 (de) 2007-09-27
JP5294632B2 (ja) 2013-09-18
TW200620118A (en) 2006-06-16
GB2432693A (en) 2007-05-30
KR20070068351A (ko) 2007-06-29

Similar Documents

Publication Publication Date Title
DE112005002173B4 (de) Prozessor mit Abhängigkeitsmechanismus, um vorherzusagen, ob ein Ladevorgang von einem älteren Schreibvorgang abhängig ist
DE112004002848B4 (de) Mikroprozessor und Verfahren zum Verifizieren einer Speicherdatei in einem derartigen Mikroprozessor
DE60036016T2 (de) Schnell multithreading für eng gekoppelte multiprozessoren
DE112007003801B3 (de) Vorrichtung mit einer speichereinheit und einer logik zur bereitstellung eines effizienten mechanismus‘ für transaktionalspeicherausführungen in out-of-order-prozessoren
DE69908193T2 (de) Ausführung von speicher- und ladeoperationen mittels einer linkdatei
DE60009151T2 (de) Vorhersage von datenbeförderung von speicher- zum ladebefehl mit untrainierung
DE112004002365T5 (de) Übergang vom Befehls-Cache-Speicher zum Ablaufverfolgungs-Cache-Speicher basierend auf Markengrenzen
DE112004001854T5 (de) System und Verfahren zur Handhabung von Sonderinstruktionen in einem Prozessor auf Grundlage eines Cache-Speichers mit Ablaufverfolgung
DE112006002237B4 (de) Verfahren zur selbstinitiierenden Synchronisierung in einem Computersystem
DE69932066T2 (de) Mechanismus zur "store-to-load forwarding"
US8370609B1 (en) Data cache rollbacks for failed speculative traces with memory operations
DE60222402T2 (de) Verfahren und system zur spekulativen ungültigkeitserklärung von zeilen in einem cachespeicher
US7877630B1 (en) Trace based rollback of a speculatively updated cache
DE602004010265T2 (de) Load-store-einheit mit wiederholungsmechanismus
DE60005860T2 (de) Ablaufsteuerung zum ausgeben und wiederausgeben von ketten abhängiger befehle
DE112010004322T5 (de) Vorhersagen und Vermeiden von Operand-Speichervorgang-Vergleich-Gefahren in Mikroprozessoren mit abweichender Reihenfolge
DE202007019502U1 (de) Globaler Überlauf für virtualisierten Transaktionsspeicher
DE102004013676A1 (de) Schleifenbetrieb mit null Overhead in einem Mikroprozessor mit Anweisungspuffer
DE112018006127B4 (de) Abschliessen von verbundenen einträgen einer globalen abschlusstabelle in einem out-of-order-prozessor
DE102012216567A1 (de) Verwalten eines register-cachespeichers auf grundlage eines architekturdefinierten computeranweisungssatzes
DE112006003632B4 (de) Dynamische selbstzerfallende Bauteilarchitektur
DE102012216571A1 (de) Nutzung einer architekturdefinierten letztverwendungs-operandenangabe in einem computersystem-operandenressourcenpool
US8898395B1 (en) Memory management for cache consistency
DE112005002403T5 (de) Prozessor-Pipeline mit konstantem Durchsatz
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