DE102019208566A1 - Verwalten von Lade- und Speicherinstruktionen für eine Speicherbarrieren- Handhabung - Google Patents

Verwalten von Lade- und Speicherinstruktionen für eine Speicherbarrieren- Handhabung Download PDF

Info

Publication number
DE102019208566A1
DE102019208566A1 DE102019208566.0A DE102019208566A DE102019208566A1 DE 102019208566 A1 DE102019208566 A1 DE 102019208566A1 DE 102019208566 A DE102019208566 A DE 102019208566A DE 102019208566 A1 DE102019208566 A1 DE 102019208566A1
Authority
DE
Germany
Prior art keywords
instructions
instruction
barrier instruction
storage
order
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.)
Pending
Application number
DE102019208566.0A
Other languages
English (en)
Inventor
Shubhendu Sekhar Mukherjee
Michael Bertone
David Albert Carlson
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.)
Marvell Asia Pte Ltd
Original Assignee
Marvell Asia Pte Ltd
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 Marvell Asia Pte Ltd filed Critical Marvell Asia Pte Ltd
Publication of DE102019208566A1 publication Critical patent/DE102019208566A1/de
Pending legal-status Critical Current

Links

Images

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 or 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 or 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/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • 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 or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)

Abstract

Ein Front-End-Teil einer Pipeline weist eine Stufe auf, die spekulativ zumindest einige Instruktionen außerhalb einer Reihenfolge bzw. Out-of-Order ausgibt. Ein Back-End-Teil der Pipeline weist eine oder mehrere Stufen auf, die auf ein Prozessorspeichersystem zugreifen. In dem Front-End-Teil (Back-End-Teil) wird die Ausführung von Instruktionen basierend auf einer Information verwaltet, die in dem Front-End-Teil (Back-End-Teil) verfügbar ist. Das Verwalten der Ausführung einer ersten Speicherbarrieren-Instruktion weist auf, eine spekulative Ausgabe von Speicherinstruktionen außerhalb der Reihenfolge zu verhindern. Die Back-End-Steuerschaltung weist Informationen auf, die für die Front-End-Steuerschaltung zugänglich ist, welche anzeigt, dass eine oder mehrere spezielle Speicherinstruktionen eine Handhabung durch das Prozessorspeichersystem vollendet haben. Die Front-End-Steuerschaltung identifiziert eine oder mehrere Ladeinstruktionen, die ausgegeben wurden bevor die erste Speicherbarrieren-Instruktion ausgegeben wurde, und nach der Speicherbarrieren-Instruktion eingeordnet sind, und bewirkt, dass mindestens eine der identifizierten Ladeinstruktionen erneut ausgegeben wird, nachdem die erste Speicherbarrieren-Instruktion ausgegeben worden ist.

Description

  • Die Erfindung bezieht sich auf die Verwaltung von Lade- und Speicherinstruktionen für Speicherbarrieren-Handhabung.
  • Eine Prozessor-Pipeline bzw. Prozessorverarbeitungslinie weist mehrere Stufen auf, durch welche sich Instruktionen voranbewegen, jeweils bei einem Zyklus. In einem skalaren Prozessor schreiten Instruktionen einzeln durch die Pipeline voran, wobei höchstens eine einzige Instruktion pro Zyklus übergeben bzw. ausgeführt wird. In einem super-skalaren Prozessor können mehrere Instruktionen durch die gleiche Pipeline-Stufe zur gleichen Zeit voranschreiten, was gestattet, dass mehr als eine Instruktion pro Zyklus ausgegeben wird, und zwar abhängig von gewissen Bedingungen (die Hazards bzw. Konflikte genannt werden) und zwar bis zu einer Ausführungsbreite. Einige Prozessoren geben Instruktionen in einer Reihenfolge (gemäß einer Programmreihenfolge) aus, wobei aufeinander folgende Instruktionen durch die Pipeline in der Programmreihenfolge voranschreiten. Andere Prozessoren gestatten, dass Instruktionen neu geordnet werden und außer der Reihenfolge ausgegeben werden, was potentiell den Gesamtdurchsatz der Pipeline vergrößert. Wenn eine Änderung der Reihenfolge gestattet ist, können Instruktionen in einem gleitenden Instruktionsfenster (dessen Größe größer sein kann als die Ausgabebreite) neu geordnet werden, und ein Neuordnungspuffer kann verwendet werden, um Ergebnisse (und andere Informationen) temporär zu speichern, die mit Instruktionen in dem Instruktionsfenster assoziiert sind, um zu gestatten, dass die Instruktionen in einer Reihenfolge übergeben werden (was potentiell gestattet, dass mehrere Instruktionen in dem gleichen Zyklus übergeben werden, solang sie in der Programmreihenfolge angrenzend sind).
  • Zusammenfassung
  • Gemäß einem Aspekt weist eine integrierte Schaltung im Allgemeinen folgendes auf: zumindest einen ersten Prozessorkern, der Instruktionen in einer Verarbeitungsreihe bzw. Pipeline ausführt, wobei die Pipeline eine oder mehrere Stages bzw. Stufen in einem vorderen Teil bzw. Front-End-Teil der Pipeline und eine Vielzahl von Stufen in einem hinteren Teil bzw. Back-End-Teil der Pipeline aufweist, wobei der Front-End-Teil eine Stufe aufweist, die spekulativ zumindest einige Instruktionen außer einer Reihenfolge gemäß einer Programmreihenfolge ausgibt, und wobei der Back-End-Teil eine oder mehrere Stufen aufweist, die auf ein Prozessorspeichersystem zugreifen; weiter eine Front-End-Steuerschaltung, die konfiguriert ist, um eine Ausführung von Instruktionen basierend auf Informationen zu verwalten, die in dem Front-End-Teil verfügbar sind; und eine Back-End-Steuerschaltung, die konfiguriert ist, um eine Ausführung von Instruktionen basierend auf Information zu verwalten, die in dem Back-End-Teil verfügbar ist. Das Managen bzw. Verwalten einer ersten Speicherbarrieren-Instruktion weist folgendes auf: Verhindern einer spekulativen Ausgabe außerhalb einer Reihenfolge von Speicherinstruktionen durch die Stufe, die spekulativ zumindest einige Instruktionen außerhalb der Reihenfolge ausgibt, wobei die Back-End-Steuerschaltung Informationen vorsieht, die für die Front-End-Steuerschaltung zugänglich ist, welche anzeigt, dass eine oder mehrere spezielle Speicherinstruktionen eine Handhabung durch das Prozessorspeichersystem vollendet haben, wobei die Front-End-Steuerschaltung eine oder mehrere Ladeinstruktionen identifiziert, die ausgegeben wurden, bevor die erste Speicherbarrieren-Instruktion ausgegeben wurde, und die nach der ersten Speicherbarrieren-Instruktion in der Programmreihenfolge eingeordnet sind, und wobei die Front-End-Steuerschaltung bewirkt, dass zumindest eine der identifizierten Ladeinstruktionen erneut ausgegeben wird, nachdem die erste Speicherbarrieren-Instruktion ausgegeben worden ist.
  • Gemäß einem weiteren Aspekt weist ein Verfahren im Allgemeinen folgendes auf: Ausführen von Instruktionen in einer Verarbeitungsleitung bzw. Pipeline von mindestens einem ersten Prozessorkern, wobei die Pipeline eine oder mehrere Stages bzw. Stufen in einem vorderen Teil bzw. Front-End-Teil der Pipeline und eine Vielzahl von Stufen in einem hinteren Teil bzw. Back-End-Teil der Pipeline aufweist, wobei der Front-End-Teil eine Stufe aufweist, die spekulativ zumindest einige Instruktionen außerhalb einer Reihenfolge gemäß einer Programmreihenfolge ausgibt, und wobei der Back-End-Teil eine oder mehrere Stufen aufweist, welche auf ein Prozessorspeichersystem zugreifen; weiter Verwalten einer Ausführung von Instruktionen in einer Front-End-Steuerschaltung basierend auf Information, die in dem Front-End-Teil verfügbar ist; und Verwalten einer Ausführung von Instruktionen in einer Back-End-Steuerschaltung basierend auf Information, die in dem Back-End-Teil verfügbar ist. Das Verwalten einer Ausführung einer ersten Speicherbarrieren-Instruktion weist folgendes auf: Verhindern einer spekulativen Ausgabe von Speicherinformationen außerhalb einer Reihenfolge durch die Stufe, die spekulativ zumindest einige Instruktionen außerhalb der Reihenfolge ausgibt, wobei die Back-End-Steuerschaltung Information vorsieht, die für die Front-End-Steuerschaltung zugänglich ist, welche anzeigt, dass eine oder mehrere spezielle Speicherinstruktionen eine Handhabung durch das Prozessorspeichersystem vollendet haben, wobei die Front-End-Steuerschaltung eine oder mehrere Ladeinstruktionen identifiziert, die ausgegeben worden sind, bevor die erste Speicherbarrieren-Instruktion ausgegeben wurde, und die nach der ersten Speicherbarrieren-Instruktion in der Programmreihenfolge eingeordnet sind, und wobei die Front-End-Steuerschaltung bewirkt, dass zumindest eine der identifizierten Ladeinstruktionen erneut ausgegeben wird, nachdem die erste Speicherbarrieren-Instruktion ausgegeben worden ist.
  • Aspekte können eines oder mehrere der folgenden Merkmale aufweisen.
  • Veranlassen, dass mindestens eine der identifizierten Ladeinstruktionen erneut ausgegeben wird, nachdem die erste Speicherbarrieren-Instruktion ausgegeben worden ist, wobei dies aufweist, dass veranlasst wird, dass alle identifizierten Ladeinstruktionen erneut ausgegeben werden, nachdem die erste Speicherbarrieren-Instruktion ausgegeben worden ist.
  • Veranlassen, dass zumindest eine der identifizierten Ladeinstruktionen erneut ausgegeben wird, nachdem die erste Speicherbarrieren-Instruktion ausgegeben worden ist, wobei dies aufweist, dass veranlasst wird, dass eine oder mehrere ausgewählte Ladeinstruktionen der identifizierten Ladeinstruktionen erneut ausgegeben wird bzw. werden, nachdem die ersten Speicherbarrieren-Instruktion ausgegeben worden ist, wobei eine ausgewählte Ladeinstruktion irgendeine Ladeinstruktion aufweist, welche eine Target- bzw. Zieladresse aufweist, die zu einer Adresse passt, die mit einer Ungültigkeits- bzw. Invalidierungsinstruktion assoziiert ist, die vor der ersten Speicherbarrieren-Instruktion und nach der ausgewählten Ladeinstruktion in der Programmreihenfolge eingeordnet ist.
  • Die Invalidierungsinstruktion wird durch den ersten Prozessorkern durch einen zweiten Prozessorkern aufgenommen, der in der integrierten Schaltung in Verbindung bzw. Kommunikation mit dem ersten Prozessorkern vorgesehen ist.
  • Die eine oder die mehreren speziellen Speicherinstruktionen weisen alle Speicherinstruktionen auf, welche: (1) vor der ersten Speicherbarrieren-Instruktion in der Programmreihenfolge eingeordnet sind, und (2) nicht die Handhabung durch das Prozessorspeichersystem vollendet hatten, als die erste Speicherbarrieren-Instruktion durch die Front-End-Steuerschaltung empfangen wurde.
  • Das Verwalten einer Ausführung der ersten Speicherbarrieren-Instruktion weist weiter auf, durch die Front-End-Schaltung (1) zu bestimmen, dass alle Instruktionen, die vor der ersten Speicherbarrieren-Instruktion in der Programmreihenfolge eingeordnet sind, eine Ausführung abgeschlossen haben (2) in der Programmreihenfolge alle Instruktionen zu übergeben, die in der Programmreihenfolge vor der ersten Speicherbarrieren-Instruktion eingeordnet sind, und (3) die erste Speicherbarrieren-Instruktion zu übergeben.
  • Das Verwalten einer Ausführung der ersten Speicherbarrieren-Instruktion weist weiter auf, eine spekulative Ausgabe von Eingabe/Ausgabe- (I/O) - Ladeinstruktionen (I/O = Input/Output) außerhalb der Reihenfolge durch die Stufe zu verhindern, die in spekulativer Weise zumindest einige Instruktionen außerhalb der Reihenfolge ausgibt.
  • Das Prozessorspeichersystem weist weiter einen Schreibpuffer zum Initialisieren einer Ausführung von Speicherinstruktionen und einen Datenzwischenspeicher bzw. Daten-Cache zum Initialisieren einer Ausführung von Ladeninstruktionen auf.
  • Die Information, die anzeigt, dass eine oder mehrere spezielle Speicherinstruktionen die Handhabung durch das Prozessorspeichersystem vollendet haben, weisen Informationen auf, welche anzeigen, dass eine oder mehrere spezielle Speicherinstruktionen an den Schreibpuffer gesendet worden sind, und Ergebnisse von einer oder mehreren speziellen Ladeinstruktionen von dem Daten-Cache oder -Anzeige, dass eine oder mehrere spezielle Ladeinstruktionen ein Miss- bzw. ein Fehltreffer in dem Daten-Cache zur Folge hatten.
  • Das Verwalten der Ausführung einer ersten Speicherbarrieren-Instruktion weist weiter auf, dass die Front-End-Steuerschaltung Reihenfolgen-Information für Ladeinstruktionen basierend auf der Programmreihenfolge hält bzw. speichert.
  • Die identifizierten Ladeinstruktionen werden durch die Front-End-Steuerschaltung basierend zumindest teilweise auf der Reihenfolgen-Information identifiziert, die von der Front-End-Steuerschaltung gehalten bzw. gespeichert wird.
  • Die Aspekte können einen oder mehrere der folgenden Vorteile haben.
  • Bei einer Ausgabe von Instruktionen außerhalb der Reihenfolge bzw. einer Out-of-Order-Ausgabe kann ein Architekturzustand temporär inkonsistent mit der Programmreihenfolge sein. Barriereninstruktionen können ausgegeben werden, um sicherzustellen, dass ein gewisser für die Software sichtbarer Architekturzustand konsistent ist. Beispielsweise kann in einem Mehrkern-Prozessor eine Barriereninstruktion verwendet werden, um sicherzustellen, dass es einen konsistenten globalen Zustand gibt, so wie er von der Software gesehen wird, die auf unterschiedlichen Prozessorkernen ausgeführt wird. Es kann unterschiedliche Arten von Barriereninstruktionen geben, die eine Reihenfolge für unterschiedliche Arten von Instruktionen durchsetzen. Eine Speicherbarrieren-Instruktion, wie beispielsweise eine Data Memory Barrier bzw. DMB-Instruktion, die in einigen Prozessorarchitekturen verwendet wird, kann verwendet werden, um sicherzustellen, dass irgendwelche beobachtbaren Effekte von gewissen Speicherzugriffsinstruktionen in einer Reihenfolge bezüglich einer Programmreihenfolge auftreten. Beispielsweise kann man beobachten, dass irgendwelche Lade- und Speicherinstruktionen, die vor der Speicherbarriere in der Programmreihenfolge auftreten, vor allen Lade- und Speicherinstruktionen ausgeführt worden sind, die nach der Speicherbarriere in der Programmreihenfolge auftreten. Wenn solche Instruktionen tatsächlich außerhalb der Reihenfolge bzw. Out-of-Order ausgeführt werden würden, jedoch ihre sichtbaren Effekte, nachdem sie übergeben worden sind, so erscheinen würden, wie wenn sie in der Reihenfolge ausgeführt worden wären, dann ist die Bedingung der Speicherbarriere erfüllt worden. Das folgende ist das Beispiel einer Sequenz von (Pseudocode)-Instruktionen in einer Programmreihenfolge (von oben nach unten):
    • Store X DATA (Speichern X DATA)
    • Memory Barrier (Speicherbarriere)
    • Load Y (Laden Y)
  • Die Instruktion „Store X DATA“ speichert DATA (beispielsweise durch ein Register, welches einen Wert von zu speichernden Daten speichert) an einer Speicheradresse X. Die Instruktion „Memory Barrier“ zeigt an, dass alle vorherigen Lade- und Speicherinstruktionen vollendet sein sollten. Die Instruktion „Load Y“ lädt Daten von einer Speicheradresse Y. Der Effekt der Speicherbarrieren-Instruktion zwischen den Speicher- und Ladeinstruktionen in diesem Beispiel ist, dass garantiert wird, dass das Ergebnis der Speicherinstruktion global zu sehen ist, bevor das Ergebnis der Ladeinstruktion (die durch den gleichen Kern ausgeführt wird, der die Speicherinstruktion ausgeführt hat) global sichtbar ist. Ohne die Speicherbarrieren-Instruktion könnte die Ladeinstruktion ihrer Ausführung vor der Speicherinstruktion vollendet haben, wenn die Instruktionen außerhalb der Reihenfolge ausgegeben worden wären. Die hier beschriebenen Techniken ermöglichen das Implementieren von solchen Speicherbarrieren-Instruktionen ohne in signifikanter Weise Leistung zu opfern.
  • Andere Merkmale und Vorteile der Erfindung werden aus der folgenden Beschreibung und aus den Ansprüchen offensichtlich.
  • Figurenliste
    • 1 ist eine schematische Abbildung eines Computersystems.
    • 2 ist eine schematische Abbildung einer Prozessorkern-Pipeline.
  • Beschreibung
  • 1 zeigt ein Beispiel eines Computersystems 100, bei welchem die hier beschriebenen Speicherbarrieren-Handhabungstechniken verwendet werden können. Das System 100 weist zumindest einen Prozessorkern 102 auf, der eine einzelne zentrale Verarbeitungseinheit (CPU = Central Processing Unit) oder einer von mehreren Prozessorkernen in einer Multi-Core- bzw. Mehrkern-Architektur sein könnte, wobei jeder Prozessorkern (oder jeder „Core“) eine individuelle CPU mit assoziierter Schaltung aufweist. In diesem Beispiel einer Mehrkern-Architektur weist jeder Prozessorkern 102 eine Verarbeitungslinie bzw. Pipeline 104, eine oder mehrere Registerdateien 106 und ein Prozessorspeichersystem 108 auf. Jeder Prozessorkern ist mit einem Unkern bzw. Uncore 110 verbunden, der ein Verbindungsnetzwerk 112 (beispielsweise einen Bus, einen Cross-Bar-Switch, ein Gitter- bzw. Mesh-Netzwerk usw.) und ein externes Speichersystem 113 aufweist. Das Verbindungsnetzwerk 112 ermöglicht eine Kommunikation mit dem externen Speichersystem 113 und einer Eingabe/Ausgabe- bzw. I/O-Brücke 114 (I/O = Input/Output). Die I/O-Brücke 114 ermöglicht eine Kommunikation über einen I/O-Bus 116 mit verschiedenen Eingabe/Ausgabe- bzw. I/O-Vorrichtungen, welche eine Speichervorrichtung 118A und andere I/O-Vorrichtungen 118B-118D (beispielsweise Netzwerkschnittstelle, Anzeigeadapter und/oder Nutzereingabevorrichtungen, wie beispielsweise Tastatur oder Maus) aufweisen. Die Speichervorrichtung 118A, wie beispielsweise ein Plattenlaufwerk oder eine andere (typischerweise nicht-volatile bzw. nicht-flüchtige) Speichervorrichtung mit großer Kapazität kann einigen Raum aussparen bzw. bereithalten, um als sekundärer Speicher (oder „Backing store“- bzw. Sicherungsspeicher) in einem virtuellen Speicherschema für den (typischerweise volatilen) Hauptspeicher zu dienen.
  • Das Prozessorspeichersystem 108 und das externe Speichersystem 113 bilden zusammen ein hierarchisches Speichersystem, welches zumindest einen Cache einer ersten Hierarchieebene bzw. L1-Cache (L1 = first Level = erste Hierarchieebene) in dem Prozessorspeichersystem 108 und irgendeiner Anzahl von Caches von höheren Hierarchieebenen (L2, L3,...) in dem externen Speichersystem 113 aufweist. Auf jeder Hierarchieebene kann der Cache ein Modul aufweisen, welches einen Instruktions-Cache zum Cachen bzw. Zwischenspeichern von Instruktionen vorsieht, sowie ein separates Modul, welches einen Daten-Cache zum Zwischenspeichern von Daten vorsieht. Zusätzlich zu einem L1-Instruktions-Cache und dem Daten-Cache weist das Prozessorspeichersystem 108 einen TLB und verschiedene andere Schaltungen auf, um einen Miss- bzw. Fehltreffer in den L1-Instruktions- oder Daten-Caches oder in dem TLB zu behandeln. Beispielsweise kann diese Schaltung in dem Prozessorspeichersystem 108 eines Prozessorkerns 102 einen Schreibpuffer aufweisen, um temporär Werte zu halten, die geschrieben werden sollen, und zwar aus einer Speicherinstruktion, die ausgeführt worden ist, und die übergeben werden sollten, und zwar innerhalb der Pipeline 104.
  • Der Cache mit dem höchsten Hierarchie-Niveau innerhalb des externen Speichersystems 113 (was der L2-Cache sein kann, wenn es nur zwei Ebenen in der Hierarchie gibt) ist der LLC 120, auf den gerade vor dem Hauptspeicher zugegriffen wird. Natürlich ist dies nur ein Beispiel. Die exakte Unterteilung dazwischen, welche Caches auf welcher Ebene innerhalb des Prozessorspeichersystems 108 sind, und welche in dem externen Speichersystem 113 sind, kann in anderen Beispielen anders sein. Beispielsweise könnten der L1-Cache und der L2-Cache beide innerhalb des Prozessorkerns 102 sein und der L3-Cache (und höhere Caches) könnten außerhalb des Prozessorkerns 102 sein. Jeder Prozessorkern 102 könnte seinen eigenen internen L1-Cache haben, und die Prozessorkerne könnten einen L2-Cache gemeinsam verwenden. Das externe Speichersystem 113 weist auch eine Hauptspeichervorrichtung 122 auf, die mit irgendeiner Anzahl von Speichermodulen 124 verbunden ist, die als Hauptspeicher dienen (beispielsweise dynamische Speichermodule mit wahlfreiem Zugriff bzw. DRAM-Module). In einer speziellen Cache-Ebene der Hierarchie weist jeder Cache-Eintrag einen Raum auf, um die speziellen Speicherblocks zusammen mit Bits zu speichern, um zu bestimmen, ob ein spezielles Wort aus einem Speicherblock in dieser Cache-Ebene vorhanden ist (d.h. ein „Hit“ bzw. „Treffer“) oder nicht in dieser Cache-Ebene vorhanden ist (d.h. ein „Miss“ bzw. „Fehltreffer“). Nach einem Miss in einer Ebene versucht das Cache-System auf den Speicherblock von einem Cache von einer höheren Ebene zuzugreifen (lesen oder schreiben) oder auf den Hauptspeicher (im Fall eines Miss in dem LLC).
  • Die Pipeline 104 weist mehrere Stages bzw. Stufen auf, durch welche sich Instruktionen voran bewegen, jeweils einen Zyklus gleichzeitig. Einige Stufen treten in einen Front-End-Teil der Pipeline auf. Eine Instruktion wird geholt (beispielsweise in einer Instruktionsholstufe bzw. IF-Stufe (IF = Instruction Fetch) oder mehreren Stufen). Instruktionen werden basierend auf einem Programmzähler bzw. PC (PC = Programm Counter) geholt, was ein Zeiger bzw. Pointer ist, der verwendet wird, um Instruktionen in dem Speicher zu identifizieren (beispielsweise innerhalb eines Teils des Hauptspeichers oder innerhalb eines Instruktions-Caches des Prozessors). Der PC kann durch Adressen eines Blocks von kompilierten Instruktionen voranschreiten („Basisblock“ genannt), wobei um eine spezielle Anzahl von Bytes inkrementiert bzw. weitergeschaltet wird (abhängig davon wie lang jede Instruktion ist und wieviele Instruktionen jedes Mal geholt werden). Eine Instruktion wird dann decodiert (beispielsweise in einer Instruktions-Decodierungs- bzw. ID-Stufe (ID = instruction decode) oder mehreren Stufen), um eine Operation und einen oder mehrere Operanden zu bestimmen. Alternativ könnten in einigen Pipelines die Instruktionshol- und Instruktions-Decodierungsstufen überlappen. Eine Instruktion lässt ihre Operanden holen (beispielsweise in einer Operandenhol- bzw. OF-Stufe oder-Stufen (OF = Operand Fetch)). Eine Instruktion ist dann bereit zum Ausgeben. Das Ausgeben einer Instruktion startet das Voranschreiten der Instruktion durch Stufen in einem Back-End-Teil der Pipeline, um die Instruktion auszuführen. Die Ausführung kann das Anwenden der Operation der Instruktion auf ihren Operanden (ihre Operanden) umfassen, um ein Ergebnis für eine ALU-Instruktion (ALU = Arithmetic Logic Unit = arithmetische Logikeinheit) zu erzeugen, weiter das Speichern oder Laden auf oder von einer Speicheradresse für eine Speicherinstruktion, oder kann aufweisen, einen Zustand einer konditionellen Verzweigungs- bzw. bedingten Sprunginstruktion zu bewerten, um zu bestimmen, ob die Verzweigung genommen bzw. der Sprung ausgeführt wird oder nicht. Nachdem eine Instruktion eine Ausführung vollendet hat, kann die Instruktion übergeben werden, so dass irgendein Effekt der Instruktion global für die Software sichtbar gemacht wird. Das Übergeben einer Instruktion kann beispielsweise das Speichern eines Ergebnisses in einer Registerdatei umfassen (beispielsweise in einer Write Back- bzw. WB-Stufe oder -Stufen). Bei den meisten Implementierungen werden alle Instruktionen allgemein in der Reihenfolge übergeben, auch wenn irgendwelche Instruktionen außerhalb der Reihenfolge ausgegeben wurden.
  • 2 zeigt ein Beispiel bei welchem die Pipeline 104 konfiguriert ist, um das Laden und Speichern von Instruktionen in einer effizienten Weise zu managen bzw. zu verwalten, wenn Speicherbarrieren-Instruktionen gehandhabt bzw. verwendet werden, wie genauer unten beschrieben wird. Die Pipeline 104 weist Schaltungen für die verschiedenen Stufen auf. Für eine oder mehrere Instruktions-Holstufen sieht eine Instruktions-Holschaltung bzw. Instruktions-Fetch-Schaltung 200 einen PC für einen Instruktions-Cache in dem Prozessorspeichersystem 108 (1) vor, um Instruktionen zu holen, die in die Pipeline 104 eingespeist werden sollen. Beispielsweise kann der PC eine virtuelle Adresse der nächsten Instruktion sein, wobei in diesem Fall der PC um die Länge einer virtuellen Adresse im Fall einer sequentiellen Ausführung (d.h. ohne das irgendwelche Verzweigungen genommen bzw. Sprünge ausgeführt werden) implementiert werden kann. Die Hol- bzw. Fetch-Schaltung 200 liefert auch den Programmzähler bzw. PC zur Verzweigungs- bzw. Sprungvorhersageschaltung 201, die verwendet wird, um ein Ergebnis eines vorhergesagten Sprungs für Sprunginstruktionen für eine spekulative Ausführung von Instruktionen (möglicherweise außerhalb der Reihenfolge bzw. Out-of-Order) vorzusehen. Die Sprungvorhersageschaltung 201 speichert auch Verzweigungs- bzw. Sprungverlaufsinformation, die basierend auf einem empfangenen Ergebnis bezüglich des tatsächlichen Sprungs, aktualisiert wird. Bei einigen Ausführungen wird ein Teil der Sprungvorhersageschaltung 201 oder die gesamte Sprungvorhersageschaltung als ein Teil der Hol- bzw. Fetch-Schaltung 200 angesehen. Für eine oder mehrere Instruktions-Decodierungs-Stufen speichert die Instruktions-Decodierungs-Schaltung 202 Information in einer Ausgabeschlange für Instruktionen in dem Instruktionsfenster, die darauf warten, ausgegeben zu werden.
  • Die Ausgabeschaltung 206 bestimmt in welchem Zyklus jede der Instruktionen in der Ausgabeschlange ausgegeben werden soll und sie sendet Instruktionen von dem Front-End-Teil 207 der Pipeline 104, damit diese das Voranschreiten durch die Ausführungsstufen 208A, 208B, und 208C in dem Back-End-Teil 209 der Pipeline 104 beginnen. (Zur Vereinfachung hat dieses Beispiel drei Ausführungsstufen, jedoch können andere Beispiele mehr oder weniger Ausführungsstufen haben.) Es gibt auch mindestens eine Übergabestufe 210 in dem Back-End-Teil 209, welche Ergebnisse von einigen Instruktionen übergibt, die ihren Weg durch die Ausführungsstufen 208A, 208B und 208C gemacht haben. Beispielsweise kann die Übergabestufenschaltung 217 ein Ergebnis zurück in eine Registerdatei 106 ( 1) schreiben. Jedoch können einige Instruktionen nicht durch die Übergabestufenschaltung 217 übergeben werden, sondern können stattdessen durch eine Schaltung in dem Front-End-Teil 207 unter Verwendung eines Kommunikationspfades 218 übergeben werden, der verwendet werden kann, um Informationen zwischen einer oder mehreren Stufen in dem Back-End-Teil 209 und einer oder mehreren Stufen in dem Front-End-Teil 207 zu senden. Beispielsweise können Instruktionen, wie beispielsweise gewisse Speicherzugriffsinstruktionen und Speicherverwaltungsinstruktionen, durch die Schaltung in dem Front-End-Teil 207 unter Verwendung einer solchen Kommunikation übergeben werden, wie genauer unten beschrieben wird.
  • Zwischen benachbarten Stufen der Pipeline 104 weisen die verschiedenen Pfade durch die Pipeline-Schaltung Pipeline-Register 211 auf (in 2 für die Ausführungsstufen gezeigt), welche Ergebnisse für eine stromaufwärts liegende Stufe speichern, die darauf warten, stromabwärts zur nächsten Stufe geleitet zu werden. Die Pipeline-Register 211 können durch einen gemeinsamen (nicht gezeigten) Taktgeber getaktet sein (beispielsweise ein Clock- bzw. Taktsignal empfangen, welches von diesem abgeleitet wird). Somit leitet jedes Pipeline-Register 211 (auch Latch oder Satz von Flip-Flops genannt) bei jedem Taktzyklus ein Ergebnis von seinem Eingang zu seinem Ausgang und wird bereit, um ein neues Ergebnis in seinem Eingang zu empfangen, nach dem das Ergebnis durch die Schaltung von dieser Stufe erzeugt worden ist.
  • Es kann mehrere separate Pfade durch die Ausführungsstufen geben, welche verschiedene Schaltungen aufweisen, um unterschiedliche Arten von Instruktionen auszuführen. In 2 sind zwei Pfade 208A und 208B gezeigt, jedoch können die Ausführungsstufen irgendeine Anzahl von Pfaden mit entsprechenden Schaltungen aufweisen, die durch Pipeline-Register 211 getrennt sind. Die Anzahl der Pfade durch die Ausführungsstufen ist im Allgemeinen abhängig von der speziellen Architektur, kann jedoch genügend Pfade aufweisen, so dass eine Anzahl von Instruktionen bis zur Ausgabebreite durch die gleichen Ausführungsstufen in den gleichen Zyklen voranschreiten können. Die Anzahl der Stufen, welche eine funktionelle Schaltung für einen gegeben Pfad aufweisen, können auch abweichen. In diesem Beispiel weist ein erster Pfad 212A eine Funktionsschaltung 214A, 214B und 214C auf, die in der entsprechenden ersten Ausführungsstufe 208A bzw. der zweiten Ausführungsstufe 208B bzw. dritten Ausführungsstufe 208C eingeordnet ist. Der zweite Pfad 212B weist eine Funktionsschaltung 216A und 216B auf, die in der entsprechenden ersten Ausführungsstufe 208A bzw. der zweiten Ausführungsstufe 208B eingeordnet sind, wobei die dritte Ausführungsstufe 208C einfach eine „Silo Stufe“ bzw. „Vorratsstufe“ ist, welche ein Ergebnis weiterleitet, ohne irgendeine weitere Berechnung auszuführen, was sicherstellt, dass jeder Pfad durch die gleiche Anzahl von Stufen durch die Pipeline läuft. Ein Pfad kann eine Schaltung zur Ausführung von Speicherinstruktionen aufweisen, ein weiterer Pfad kann Einheiten für verschiedene Operationen aufweisen (beispielsweise ALU, Multiplikator, Gleitkommaeinheit) und ein weiterer Pfad kann eine Schaltung zur Ausführung von Speicherzugriffsinstruktionen aufweisen, was Ladeinstruktionen, welche Datenwerte aus dem Speichersystem lesen und Speicherinstruktionen einschließt, um Datenwerte in das Speichersystem zu schreiben.
  • Wenn eine Speicherbarrieren-Instruktion decodiert und ausgegeben wird, weist das Verwalten der Ausführung der Speicherbarrieren-Instruktion auf, wie oben beschrieben, sicherzustellen, dass irgendwelche Lade- und Speicherinstruktionen, wie vor der Speicherbarriere in der Programmreihenfolge auftreten, als ausgeführt gesehen werden können bzw. erkennbar sind, und zwar vor allen Lade- und Speicherinstruktionen, die nach der Speicherbarriere in der Programmreihenfolge auftreten und zwar basierend auf sichtbaren Effekten der Instruktionen. Bei einigen Ausführungen weist das ordnungsgemäße Verwalten von Speicherbarrieren-Instruktionen auf, die Pipeline 104 so zu konfigurieren, dass sie Ladeinstruktionen und Speicherinstruktionen unterschiedlich handhabt.
  • Da eine spekulative Out-of-Order-Ausgabe von Ladeinstruktionen einen größeren Leistungsnutzen bieten kann als eine spekulative Out-of-Order-Ausgabe von Speicherinstruktionen kann die Pipeline 104 konfiguriert sein, um für Speicherinstruktionen eine spekulative Out-of-Order-Ausgabe bzw. -Ausgabe außerhalb der Reihenfolge von Speicherinstruktionen zu verhindern. In dem sichergestellt wird, dass Speicherinstruktionen durch den Front-End-Teil 207 in der Reihenfolge In-Order ausgegeben werden (bezüglich einander und bezüglich Ladeinstruktionen innerhalb der Reihenfolge) kann der Back-End-Teil 209 Speicherinstruktionen ohne die Notwendigkeit handhaben, irgendwelche Ergebnisse oder sichtbare Effekte von Instruktionen neu zu ordnen, um Speicherbarrieren-Instruktionen zu berücksichtigen. Insbesondere kann der Back-End-Teil 209 Schritte mit potentiell sichtbaren Effekten ausführen, wie beispielsweise das Senden von Daten, die gespeichert werden sollen an einen Schreibpuffer, ohne das nötig wird, Information in Reihenfolge zu bringen, die in dem Back-End-Teil 209 gehalten werden soll. Daten von mehreren Speicherinstruktionen können in dem Schreibpuffer akkumuliert werden, bis der Schreibpuffer geflushed bzw. verworfen wird. In einigen Implementierungen bewirkt die Ausführung einer Speicherbarrieren-Instruktion, dass übergebene Speicher-Instruktionen in dem Schreibpuffer aus dem Schreibpuffer geflushed bzw. ausgeführt werden. Lade- bzw. Speicherinstruktionen, die nach der Speicherbarrieren-Instruktion eingeordnet sind, können durch den Front-End-Teil 207 in der Ausgabereihe gehalten werden, bis das Prozessorspeichersystem 108 angezeigt hat (beispielsweise unter Verwendung des Pfadweges 218), dass alle Speicherinstruktionen, die vor der Speicherbarrieren-Instruktion eingeordnet sind, global sichtbar sind (beispielsweise an den Schreibpuffer gesendet worden sind oder aus dem Schreibpuffer geflushed bzw. ausgeführt oder geleert worden sind) bevor die Speicherbarrieren-Instruktion übergeben wird.
  • Da es effizienter sein kann, Reihenfolgeninformation in Strukturen zu verwalten, die bei dem Front-End-Teil 207 zugänglich sind, kann der Front-End-Teil 207 für Ladeinstruktionen konfiguriert sein, sichtbare Effekte von Ladeinstruktionen ansprechend auf Speicherbarriereninstruktionen zu verwalten. Dies kann einen Teil der Komplexität vermeiden, die anderen falls nötig wäre um Reihenfolgeninformation in dem Back-End-Teil 209 zu halten bzw. zu pflegen. Beispielsweise kann eine potentiell komplexe Back-End-Reihenfolgenlogik vermieden werden und/oder der Overhead bzw. der Verwaltungsaufwand zum Markieren von Instruktionen mit Reihenfolgeninformation kann vermieden werden. Ein einfacherer Ladereihenfolgenring 220, der für den Front-End-Teil 207 zugänglich ist, kann verwendet werden, um die Programmreihenfolge der Ladeinstruktionen zu verfolgen. Weil die Programmreihenfolge beim Front-End-Teil 207 bekannt ist, beispielsweise basierend auf einer Reihenfolge in welcher Instruktionen decodiert werden, ist es bequem den Ladereihenfolgenring 220 für eine vorbestimmte Anzahl von Ladeinstruktionen zu aktualisieren (beispielsweise basierend auf der Größe des Instruktionsfenster, so dass ein Feld, welches nach zweimal der maximalen Anzahl von Instruktionen in dem Instruktionsfenster durchläuft bzw. rolls over).
  • Der Front-End-Teil 207 ist fähig, Ladeinstruktionen zu übergeben, die außerhalb der Reihenfolge ausgegeben worden sind, und zwar basierend auf Information, die in dem Ladereihenfolgenring 220 gespeichert ist. Beispielsweise werden Ladeinstruktionen, die vor einer Speicherbarrieren-Instruktion eingeordnet sind, übergeben bevor die Speicherbarrieren-Instruktion übergeben wird, und Ladeinstruktionen, die nach der Speicherbarrieren-Instruktion eingeordnet sind, werden übergeben nach dem die Speicherbarrieren-Instruktion übergeben wurde. Der Front-End-Teil 207 kann auch Informationen verwenden, die von dem Back-End-Teil 209 empfangen wurden (beispielsweise unter Verwendung des Pfadweges 218), um zu bestimmen, ob Ladeinstruktionen bereit zur Übergabe sind, oder ob Ladeinstruktionen erneut ausgegeben werden müssen. Der Front-End-Teil 207 kann auch Informationen berücksichtigen, welche die Gültigkeit von Adressübersetzungen beeinflussen. Beispielsweise kann eine Invalidierung einer Übersetzung für eine oder mehrere virtuelle Adressen empfangen worden sein, nachdem eine Ladeinstruktion außerhalb der Reihenfolge ausgegeben worden ist, und bevor eine Speicherbarrieren-Instruktion vollendet worden ist. Die Ausgabeschaltung 206 kann konfiguriert sein, um zu bestimmen ob die Ladeinstruktion erneut ausgegeben werden soll, und zwar basierend darauf, ob die Zieladresse der Ladeinstruktion durch die Invalidierung beeinflusst ist.
  • Bei einigen Ausführungen bzw. Implementierungen ist nicht gestattet, dass alle Ladeinstruktionen außerhalb der Reihenfolge bzw. Out-of-Order sind (obwohl sie immer noch außerhalb der Reihenfolge übergeben werden können). Beispielsweise können Ladeinstruktionen, welche auf Adressen in einem Teil des Speicherraums gerichtet sind, der für Eingabe/Ausgabe- bzw. I/O-Vorrichtungszugriff reserviert ist (auch „I/O-Ladeinstruktionen“ genannt), so verwaltet werden, dass sie immer in der Reihenfolge ausgeführt werden. Dies stellt sicher, dass I/O-Ladeinstruktionen nicht verursachen werden, dass irgendwelche Seiteneffekte nicht korrekt wiederholt werden. Ein Weg, dies zu erreichen, ist es dass der Back-End-Teil 209 Ladeinstruktionen als I/O-Ladeinstruktionen identifiziert (nachdem eine Adressübersetzung ausgeführt worden ist) und mit dem Front-End-Teil 207 kommuniziert (und zwar vor der Ausführung und somit vor irgendwelchen potentiellen Seiteneffekten) um die I/O-Ladeinstruktion in der Reihenfolge erneut auszugeben, und zwar mit einer Anzeige, dass es eine I/O-Ladeinstruktion ist. Der Back-End-Teil 209 kann dann, wenn er eine Ladeinstruktion empfängt, die explizit als eine I/O-Ladeinstruktion identifiziert ist, die I/O-Ladeinstruktion sicher ausführen.
  • Im Allgemeinen erweist die Handhabung von Speicherbarrieren-Instruktionen potentiell eine Handhabung von vier unterschiedlichen Kategorien von ausstehenden (d.h. noch nicht übergebenden) Speicherzugriffsinstruktionen auf, welche zu dem Zeitpunkt decodiert sein können, wenn die Speicherbarrieren-Instruktion ausgegeben wird. Es kann (A) Ladeinstruktionen geben, die ausgegeben wurden, bevor die Speicherbarrieren-Instruktion ausgegeben wurde, und die noch nicht übergeben worden sind. Es kann (B) Speicherinstruktionen geben, die ausgegeben wurden, bevor die Speicherbarrieren-Instruktion ausgegeben wurde, und die noch nicht übergeben worden sind. Es kann (C) Ladeinstruktionen geben, die bereit zum Ausgeben waren, jedoch noch nicht ausgegeben worden sind, bevor die Speicherbarrieren-Instruktion ausgegeben wurde. Es kann (D) Speicherinstruktionen geben, die bereit zum Ausgeben waren, jedoch noch nicht ausgegeben worden sind, bevor die Speicherbarrieren-Instruktionen ausgegeben wurde.
  • Lade- und Speicherinstruktionen in unterschiedlichen Kategorien können unterschiedlich gehandhabt werden, wenn eine Speicherbarrieren-Instruktion gehandhabt wird. Da Speicherinstruktionen in der Reihenfolge bzw. In-Order ausgegeben werden, sind Speicherinstruktionen, die vor der Speicherbarrieren-Instruktion eingeordnet sind, in der Kategorie B, und Speicherinstruktionen, die nach der Speicherbarrieren-Instruktion eingeordnet sind, sind in der Kategorie D. Speicherinstruktionen in der Kategorie B sind schon ausgegeben worden, somit kann der Back-End-Teil 209 einfach die Ausführung für irgendwelche empfangenen Speicherinstruktionen vollenden (ohne das er auf die Programmreihenfolge zugreifen muss). Speicherinstruktionen, die nach der Speicherbarrieren-Instruktion eingeordnet sind, sind noch nicht ausgegeben worden, und werden durch den Front-End-Teil 207 nicht ausgegeben und daher wird der Back-End-Teil 209 nicht irgendwelche Speicherinstruktionen für die Kategorie D verwalten müssen. Für eine Ladeinstruktion in der Kategorie C wird der Front-End-Teil 207 nur jene ausgeben, die vor der Speicherbarrieren-Instruktion eingeordnet sind, somit kann der Back-End-Teil 209 einfach die Ausführung für irgendwelche empfangenen Ladeinstruktionen vollenden (ohne dass er auf die Programmreihenfolge Zugriff haben muss) und den Front-End-Teil 207 benachrichtigen, wenn sie vollendet sind.
  • Dies lässt Instruktionen in der Kategorie A übrig. Einige dieser ausgegebenen Ladeinstruktionen in der Kategorie A sind vor der Speicherbarrieren-Instruktion eingeordnet und andere dieser ausgegebenen Ladeinstruktionen („spekulative Ladevorgänge“ genannt) wurden in spekulativer Weise vor der Speicherbarrieren-Instruktion ausgegeben, sind jedoch nicht vor der Speicherbarrieren-Instruktion gemäß der Programmreihenfolge eingeordnet. Der Front-End-Teil 207 kann den Ladereihenfolgenring 220 und/oder irgendwelche andere Ladereihenfolgeninformation verwenden, um die Programmreihenfolge einer ausgegebenen Ladeinstruktion zu bestimmen. Für jene Ladeinstruktionen, die vor der Speicherbarrieren-Instruktion eingeordnet sind, kann der Front-End-Teil 207 sie in der Reihenfolge bzw. In-Order übergeben, nachdem der Back-End-Teil 209 den Front-End-Teil 207 benachrichtigt, dass sie vollendet sind. Für spekulative Ladevorgänge übergibt jedoch der Front-End-Teil 207 diese nicht notwendigerweise nach dem der Back-End-Teil 209 dem Front-End-Teil 207 dahingehend benachrichtigt, dass sie vollendet sind. Bevor bestimmt wird, ob eine spekulative Ladeinstruktion, die vollendet worden ist, übergeben wird, oder nicht, kann der Front-End-Teil 207 bestimmen, ob die spekulative Ladeinstruktion erneut ausgegeben werden soll oder nicht (wobei irgendwelche Daten ignoriert werden, die durch die zuvor vollendete spekulative Ladeinstruktion geladen wurden).
  • Bei einigen Ausführungen bzw. Implementierungen kann der Front-End-Teil 207 so konfiguriert sein, dass er immer eine spekulative Ladeinstruktion erneut ausgibt, die vor einer Speicherbarrieren-Instruktion ausgegeben wurde, jedoch nach der Speicherbarrieren-Instruktion eingeordnet ist. Bei anderen Ausführungen ist der Front-End-Teil 207 konfiguriert, um selektiv solche spekulativen Ladeinstruktionen erneut auszugeben. Wenn eine spekulative Ladeinstruktion einen Wert geladen hat, kann es nicht notwendig sein, dass die spekulative Ladeinstruktion nicht erneut ausgegeben wird, außer wenn die Adresse von diesem Wert zu einer Adresse passt, die durch eine Invalidierungsinstruktion ungültig gemacht wurde, die vor der Speicherbarrieren-Instruktion und nach der spekulativen Ladeinstruktion eingeordnet ist.
  • Nachdem jegliche spekulative Ladeinstruktionen neu ausgegeben wurden, falls nötig, kann der Front-End-Teil 207 die Reihenfolgeninformation verwenden und einen Puffer übergeben der Ergebnisse von irgendwelchen Instruktionen speichert, die eine Ausführung vollendet haben, jedoch noch nicht übergeben worden sind, um sicherzustellen, dass alle Instruktionen in der Programmreihenfolge übergeben werden. Als ein Teil des Übergebens von Ladeinstruktionen ermöglich der Front-End-Teil 207, dass jegliche Daten, die geladen wurden, verfügbar sind (beispielsweise in einem Register). Als Teil der Übergabe von Ladeinstruktionen ermöglicht der Front-End-Teil 207, das jegliche Daten, die gespeichert werden sollen, zum Speicher gesendet werden (beispielsweise anfänglich zu einem Schreibpuffer gesendet werden). Wenn der Back-End-Teil 209 irgendwelche Probleme bei der erfolgreichen Vollendung der Ausführung von irgendeiner Instruktion angetroffen hat, kann der Back-End-Teil 209 mit dem Front-End-Teil 207 kommunizieren (beispielsweise unter Verwendung des Fahrtweges 218), und der Front-End-Teil 209 kann irgendwelche derartigen Probleme handhaben, möglicherweise durch erneutes Ausgeben von gewissen Instruktionen oder in dem er darauf wartet, dass der Back-End-Teil 209 verzögerte Ergebnisse liefert, bevor betroffene Instruktionen übergeben werden.
  • Andere Ausführungsbeispiele sind innerhalb des Umfangs der folgenden Ansprüche.

Claims (22)

  1. Integrierte Schaltung, die Folgendes aufweist: zumindest einen ersten Prozessorkern, der Instruktionen in einer Pipeline ausführt, wobei die Pipeline eine oder mehrere Stufen in einem Front-End-Teil der Pipeline und eine Vielzahl von Stufen in einem Back-End-Teil der Pipeline aufweist, wobei der Front-End-Teil eine Stufe aufweist, die spekulativ zumindest einige Instruktionen außerhalb einer Reihenfolge gemäß einer Programmreihenfolge ausgibt, und wobei der Back-End-Teil eine oder mehrere Stufen aufweist, die auf ein Prozessorspeichersystem zugreifen; eine Front-End-Steuerschaltung, die konfiguriert ist, um eine Ausführung von Instruktionen basierend auf einer Information zu verwalten, die in dem Front-End-Teil verfügbar ist; und eine Back-End-Steuerschaltung, die konfiguriert ist, um eine Ausführung von Instruktionen basierend auf einer Information zu verwalten, die in dem Back-End-Teil verfügbar ist, wobei das Verwalten der Ausführung einer ersten Speicherbarrieren-Instruktion folgendes aufweist: Verhindern einer spekulativen Ausgabe außerhalb der Reihenfolge von Speicherinstruktionen durch die Stufe, welche spekulativ zumindest einige Instruktionen außerhalb der Reihenfolge ausgibt, wobei die Back-End-Steuerschaltung eine Information vorsieht, die für die Front-End-Steuerschaltung zugänglich ist, welcher anzeigt, dass eine oder mehrere Speicherinstruktionen eine Handhabung durch das Prozessorspeichersystem vollendet haben, wobei die Front-End-Steuerschaltung eine oder mehrere Ladeinstruktionen identifiziert, die ausgegeben wurden bevor die erste Speicherbarrieren-Instruktion ausgegeben wurde, und die in der Programmreihenfolge nach der Speicherbarrieren-Instruktion eingeordnet sind, und wobei die Front-End-Steuerschaltung veranlasst, dass zumindest eine der identifizierten Ladeinstruktionen erneut ausgegeben wird, nachdem die erste Speicherbarrieren-Instruktion ausgegeben worden ist.
  2. Integrierte Schaltung nach Anspruch 1, wobei das Bewirken, dass mindestens eine der identifizierten Ladeinstruktionen erneut ausgegeben wird, nachdem die erste Speicherbarrieren-Instruktion ausgegeben worden ist, aufweist, zu bewirken, dass alle der identifizierten Ladeinstruktionen erneut ausgegeben werden, nachdem die erste Speicherbarrieren-Instruktion ausgegeben worden ist.
  3. Integrierte Schaltung nach Anspruch 1, wobei das Bewirken, dass mindestens eine der identifizierten Ladeinstruktionen erneut ausgegeben wird, nachdem die erste Speicherbarrieren-Instruktion ausgegeben worden ist, aufweist, zu bewirken, dass eine oder mehrere ausgewählte Ladeinstruktionen der identifizierten Ladeinstruktionen erneut ausgegeben werden, nachdem die erste Speicherbarrieren-Instruktion ausgegeben worden ist, wobei eine ausgewählte Ladeinstruktion irgendeine Ladeinstruktion aufweist, welche eine Zieladresse aufweist, die zu einer Adresse passt, die mit einer Invalidierungsinstruktion assoziiert ist, die vor der ersten Speicherbarrieren-Instruktion und nach der ausgewählten Ladeinstruktion in der Programmreihenfolge eingeordnet ist.
  4. Integrierte Schaltung nach Anspruch 3, wobei die Invalidierungsinstruktion durch den ersten Prozessorkern von einem zweiten Prozessorkern empfangen wird, der in der integrierten Schaltung vorgesehen ist, und zwar in Kommunikation mit dem ersten Prozessorkern.
  5. Integrierte Schaltung nach Anspruch 1, wobei die eine oder die mehreren speziellen Speicherinstruktionen alle Speicherinstruktionen aufweisen, die (1) vor der ersten Speicherbarrieren-Instruktion in der Programmreihenfolge eingeordnet sind, und (2) eine Handhabung durch das Prozessorspeichersystem noch nicht vollendet hatten, als die erste Speicherbarrieren-Instruktion durch die Front-End-Steuerschaltung empfangen worden ist.
  6. Integrierte Schaltung nach Anspruch 1, wobei das Verwalten der Ausführung der ersten Speicherbarrieren-Instruktion weiter aufweist, mittels der Front-End-Schaltung (1) zu Bestimmen, dass alle Instruktionen, die in der Programmreihenfolge vor der ersten Speicherbarrieren-Instruktion eingeordnet sind, die Ausführung vollendet haben (2) in der Programmreihenfolge alle Instruktionen zu übergeben, die vor der ersten Speicherbarrieren-Instruktion in der Programmreihenfolge eingeordnet sind, und (3) die erste Speicherbarrieren-Instruktion zu übergeben.
  7. Integrierte Schaltung nach Anspruch 1, wobei das Verwalten der Ausführung der ersten Speicherbarrieren-Instruktion weiter aufweist, eine spekulative Ausgabe von Eingabe/Ausgabe- bzw. I/O-Ladeinstruktionen außerhalb der Reihenfolge durch die Stufe zu verhindern, welche spekulativ zumindest einige Instruktionen außerhalb der Reihenfolge ausgibt.
  8. Integrierte Schaltung nach Anspruch 1, wobei das Prozessorspeichersystem weiter einen Schreibpuffer zum Initialisieren der Ausführung von Speicherinstruktionen und einen Daten-Cache zum Initialisieren der Ausführung von Ladeinstruktionen aufweist.
  9. Integrierte Schaltung nach Anspruch 8, wobei die Information, welche anzeigt, dass eine oder mehrere spezielle Speicherinstruktionen einer Handhabung durch das Prozessorspeichersystem vollendet haben, Informationen aufweist, die anzeigt, dass eine oder mehrere Speicherinstruktionen an den Schreibpuffer gesendet worden sind, und Ergebnisse von einer oder mehreren speziellen Ladeinstruktionen aus dem Daten-Cache oder einer Anzeige, dass eine oder mehrere spezielle Ladeinstruktionen einen Miss bzw. Fehltreffer in dem Daten-Cache zur Folge hatten.
  10. Integrierte Schaltung nach Anspruch 1, wobei das Verwalten einer Ausführung einer ersten Speicherbarrieren-Instruktion weiter aufweist, das die Front-End-Steuerschaltung Reihenfolgeninformation für Ladeinstruktionen basierend auf der Programmreihenfolge enthält bzw. pflegt.
  11. Integrierte Schaltung nach Anspruch 10, wobei die identifizierten Ladeninstruktionen durch die Front-End-Steuerschaltung basierend zumindest teilweise auf der Reihenfolgeninformation identifiziert wird, die durch die Front-End-Steuerschaltung gehalten bzw. gepflegt wird.
  12. Verfahren, welches Folgendes aufweist: Ausführen von Instruktionen in einer Verarbeitungslinie bzw. Pipeline von mindestens einem Prozessorkern, wobei die Pipeline eine oder mehrere Stufen in einem Front-End-Teil der Pipeline und eine Vielzahl von Stufen in einem Back-End-Teil der Pipeline aufweist, wobei der Front-End-Teil eine Stufe aufweist, die spekulativ zumindest einige Instruktionen außerhalb einer Reihenfolge gemäß einer Programmreihenfolge ausgibt, und wobei der Back-End-Teil eine oder mehrere Stufen aufweist, welche auf ein Prozessorspeichersystem zugreifen; Verwalten der Ausführung von Instruktionen in einer Front-End-Steuerschaltung, basierend auf einer Information, die in dem Front-End-Teil verfügbar ist; und Verwalten einer Ausführung von Instruktionen in einer Back-End-Steuerschaltung, basierend auf einer Information, die in dem Back-End-Teil verfügbar ist, wobei das Verwalten der Ausführung einer ersten Speicherbarrieren-Instruktion folgendes aufweist: Verhindern einer spekulativen Ausgabe von Speicherinstruktionen außerhalb der Reihenfolge bzw. Out-of-Order durch die Stufe, welche spekulativ zumindest einige Instruktionen außerhalb der Reihenfolge ausgibt, wobei die Back-End-Steuerschaltung Information vorsieht, die für die Front-End-Steuerschaltung zugänglich ist, welche anzeigt, dass eine oder mehrere spezielle Speicherinstruktionen eine Handhabung durch das Prozessorspeichersystem vollendet haben, wobei die Front-End-Steuerschaltung eine oder mehrere Ladeinstruktionen identifiziert, die ausgegeben wurden bevor die erste Speicherbarrieren-Instruktion ausgegeben wurde, und die in der Programmreihenfolge nach der ersten Speicherbarrieren-Instruktion eingeordnet sind, und wobei die Front-End-Steuerschaltung bewirkt, dass zumindest eine der identifizierten Ladeinstruktionen erneut ausgegeben wird, nachdem die erste Speicherbarrieren-Instruktion ausgegeben worden ist.
  13. Verfahren nach Anspruch 12, wobei das Bewirken, dass mindestens eine der identifizierten Ladeinstruktionen erneut ausgegeben wird, nachdem die erste Speicherbarrieren-Instruktion ausgegeben worden ist, aufweist, zu bewirken, dass alle der identifizierten Ladeinstruktionen erneut ausgegeben werden, nachdem die erste Speicherbarrieren-Instruktion ausgegeben worden ist.
  14. Verfahren nach Anspruch 12, wobei das Bewirken, dass zumindest eine der identifizierten Ladeinstruktionen erneut ausgegeben wird, nachdem die erste Speicherbarrieren-Instruktion ausgegeben worden ist, aufweist, zu bewirken, dass eine oder mehrere ausgewählte Ladeinstruktionen der identifizierten Ladeinstruktionen erneut ausgegeben werden, nachdem die erste Speicherbarrieren-Instruktion ausgegeben worden ist, wobei eine ausgewählte Ladeinstruktion jegliche Ladeinstruktion aufweist, die eine Zieladresse aufweist, die zu einer Adresse passt, die mit einer Invalidierungsinstruktion assoziiert ist, die vor der ersten Speicherbarrieren-Instruktion und nach der ausgewählten Ladeinstruktion in der Programmreihenfolge eingeordnet ist.
  15. Verfahren nach Anspruch 14, wobei die Invalidierungsinstruktion durch den ersten Prozessorkern von einem zweiten Prozessorkern empfangen wird, der in der integrierten Schaltung vorgesehen ist, und zwar in Kommunikation mit dem ersten Prozessorkern.
  16. Verfahren nach Anspruch 12, wobei die eine oder die mehreren speziellen Speicherinstruktionen alle Speicherinstruktionen aufweisen, die (1) vor der ersten Speicherbarrieren-Instruktion in der Programmreihenfolge eingeordnet sind, und (2) eine Handhabung durch das Prozessorspeichersystem nicht vollendet hatten, als die erste Speicherbarrieren-Instruktion durch die Front-End-Steuerschaltung empfangen wurde.
  17. Verfahren nach Anspruch 12, wobei das Verwalten der Ausführung der ersten Speicherbarrieren-Instruktion weiter aufweist, durch die Front-End-Schaltung (1) zu Bestimmen, dass alle Instruktionen, die in der Programmreihenfolge vor der ersten Speicherbarrieren-Instruktion eingeordnet sind, eine Ausführung vollendet haben, (2) in der Programmreihenfolge alle Instruktionen zu übergeben, die in der Programmreihenfolge vor der ersten Speicherbarrieren-Instruktion eingeordnet sind, und (3) die erste Speicherbarrieren-Instruktion zu übergeben.
  18. Verfahren nach Anspruch 12, wobei das Verwalten der Ausführung der ersten Speicherbarrieren-Instruktion weiter aufweist, eine spekulative Ausgabe von Eingabe/Ausgabe- bzw. I/O-Ladeinstruktionen außerhalb der Reihenfolge durch die Stufe zu verhindern, die spekulativ zumindest einige Instruktionen außerhalb der Reihenfolge ausgibt.
  19. Verfahren nach Anspruch 12, wobei das Prozessorspeichersystem weiter einen Schreibpuffer zum Initialisieren einer Ausführung von Speicherinstruktionen und einen Daten-Cache zum Initiieren einer Ausführung von Ladeinstruktionen aufweist.
  20. Verfahren nach Anspruch 19, wobei die Information, welche anzeigt, dass eine oder mehrere spezielle Speicherinstruktionen einer Handhabung durch das Prozessorspeichersystem vollendet haben, eine Information aufweist, die anzeigt, dass eine oder mehrere spezielle Speicherinstruktionen an den Schreibpuffer gesendet worden sind, und Ergebnisse von einer oder mehreren speziellen Ladeinstruktionen aus dem Daten-Cache oder einer Anzeige, dass eine oder mehrere spezielle Ladeinstruktionen einen Miss bzw. Fehltreffer in dem Daten-Cache zur Folge hatten.
  21. Verfahren nach Anspruch 12, wobei das Verwalten einer Ausführung einer ersten Speicherbarrieren-Instruktion weiter aufweist, das die Front-End-Steuerschaltung eine Reihenfolgeninformation für Ladeinstruktionen basierend auf der Programmreihenfolge enthält bzw. pflegt.
  22. Verfahren nach Anspruch 21, wobei die identifizierten Ladeninstruktionen durch die Front-End-Steuerschaltung basierend zumindest teilweise auf der Reihenfolgeninformation identifiziert werden, die von der Front-End-Steuerschaltung gehalten bzw. gepflegt werden.
DE102019208566.0A 2019-05-31 2019-06-12 Verwalten von Lade- und Speicherinstruktionen für eine Speicherbarrieren- Handhabung Pending DE102019208566A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/427,678 2019-05-31
US16/427,678 US11507379B2 (en) 2019-05-31 2019-05-31 Managing load and store instructions for memory barrier handling

Publications (1)

Publication Number Publication Date
DE102019208566A1 true DE102019208566A1 (de) 2020-12-03

Family

ID=73264825

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102019208566.0A Pending DE102019208566A1 (de) 2019-05-31 2019-06-12 Verwalten von Lade- und Speicherinstruktionen für eine Speicherbarrieren- Handhabung

Country Status (2)

Country Link
US (1) US11507379B2 (de)
DE (1) DE102019208566A1 (de)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11321262B2 (en) * 2020-09-08 2022-05-03 Intel Corporation Interconnected systems fence mechanism
US11513962B2 (en) * 2020-10-13 2022-11-29 Arm Limited Draining operation to cause store data to be written to persistent memory

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5584037A (en) * 1994-03-01 1996-12-10 Intel Corporation Entry allocation in a circular buffer
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
US6463522B1 (en) 1997-12-16 2002-10-08 Intel Corporation Memory system for ordering load and store instructions in a processor that performs multithread execution
US6098166A (en) 1998-04-10 2000-08-01 Compaq Computer Corporation Speculative issue of instructions under a load miss shadow
US6625660B1 (en) * 2000-06-06 2003-09-23 International Business Machines Corporation Multiprocessor speculation mechanism for efficiently managing multiple barrier operations
US6880073B2 (en) * 2000-12-28 2005-04-12 International Business Machines Corporation Speculative execution of instructions and processes before completion of preceding barrier operations
WO2005121948A1 (en) * 2004-06-02 2005-12-22 Sun Microsystems, Inc. Method and apparatus for enforcing membar instruction semantics in an execute-ahead processor
CN102541511B (zh) 2010-12-30 2015-07-08 世意法(北京)半导体研发有限责任公司 用于可乱序执行指令的处理器的流水线排空
US8935513B2 (en) * 2012-02-08 2015-01-13 International Business Machines Corporation Processor performance improvement for instruction sequences that include barrier instructions
US9535695B2 (en) 2013-01-25 2017-01-03 Apple Inc. Completing load and store instructions in a weakly-ordered memory model
US9870328B2 (en) 2014-11-14 2018-01-16 Cavium, Inc. Managing buffered communication between cores
US9910776B2 (en) 2014-11-14 2018-03-06 Cavium, Inc. Instruction ordering for in-progress operations

Non-Patent Citations (5)

* Cited by examiner, † Cited by third party
Title
Asanović, Krste: Lecture 15: Out-of-Order Memory Accesses, Complex Superscalar Review, Computer Science 152: Computer Architecture and Engineering, University of California at Berkeley, Folien 1-28, 31.03.2009. URL: https://inst.eecs.berkeley.edu/~cs152/sp09/ [abgerufen am 27.03.2020] *
Cache coherence. In: Wikipedia, the free encyclopedia. Bearbeitungsstand: 27.05.2019. URL: https://en.wikipedia.org/w/index.php?title=Cache_coherence&oldid=899087755 [abgerufen am 27.03.2020] *
Lin, C.; Nagarajan, V.; Gupta, R.: Fence Scoping. In: SC '14: Proceedings of the International Conference for High Performance Computing, Networking, Storage and Analysis, 2014, S. 105-116. https://doi.org/10.1109/SC.2014.14 [abgerufen am 27.03.2020] *
Memory barrier. In: Wikipedia, the free encyclopedia. Bearbeitungsstand: 05.04.2019. URL: https://en.wikipedia.org/w/index.php?title=Memory_barrier&oldid=891104823 [abgerufen am 27.03.2020] *
Shinsel, Alex: Understanding the Instruction Pipeline. In: Intel. Santa Clara (USA): Tech.Decoded. 25.04.2018. S. 1-7. - Firmenschrift. https://web.archive.org/web/20180425131705/https://techdecoded.intel.io/resources/understanding-the-instruction-pipeline/# [abgerufen am 27.03.2020] *

Also Published As

Publication number Publication date
US20200379772A1 (en) 2020-12-03
US11507379B2 (en) 2022-11-22

Similar Documents

Publication Publication Date Title
DE112004002848B4 (de) Mikroprozessor und Verfahren zum Verifizieren einer Speicherdatei in einem derartigen Mikroprozessor
DE60009151T2 (de) Vorhersage von datenbeförderung von speicher- zum ladebefehl mit untrainierung
DE112005002173B4 (de) Prozessor mit Abhängigkeitsmechanismus, um vorherzusagen, ob ein Ladevorgang von einem älteren Schreibvorgang abhängig ist
DE60205363T2 (de) Mikroprozessor mit einem performance-drosselmechanismus für das energiemanagement
DE60036016T2 (de) Schnell multithreading für eng gekoppelte multiprozessoren
DE60308201T2 (de) Datenverarbeitungssystem mit externen und internen anweisungssätzen
DE69932066T2 (de) Mechanismus zur "store-to-load forwarding"
DE60003235T2 (de) Cachespeicher zum bereitstellen von partiellen etiketten aus nicht-vorhergesagten wegen um die suche bei wegvorhersagefehlgriffen zu leiten
DE69929936T2 (de) Verfahren und Vorrichtung zum Abrufen von nicht-angrenzenden Befehlen in einem Datenverarbeitungssystem
DE60005860T2 (de) Ablaufsteuerung zum ausgeben und wiederausgeben von ketten abhängiger befehle
DE69908193T2 (de) Ausführung von speicher- und ladeoperationen mittels einer linkdatei
DE112010004322T5 (de) Vorhersagen und Vermeiden von Operand-Speichervorgang-Vergleich-Gefahren in Mikroprozessoren mit abweichender Reihenfolge
DE60102017T2 (de) Räumungsfilter für adressenübersetzungspuffer
DE112018006124B4 (de) ZUSAMMENFÜHREN VON EINTRÄGEN GLOBALER ABSCHLUSSTABELLEN IN EINEM OoO-PROZESSOR
DE69305366T2 (de) System und verfahren zum kennzeichnen von befehlen zur steuerung der befehlsausführung
DE112007000812T5 (de) Transaktionalspeicher in Out-of-Order-Prozessoren
DE112018006127B4 (de) Abschliessen von verbundenen einträgen einer globalen abschlusstabelle in einem out-of-order-prozessor
DE19506734A1 (de) Computersystem und Verfahren zum Aufrechterhalten der Speicherkonsistenz in einer Busanforderungswarteschlange
DE102010053088A1 (de) Sammeln und Streuen mehrerer Datenelemente
DE112010004971T5 (de) Ein System, Verfahren und eine Vorrichtung für einen Cache-Flush eines Seitenbereichs und TLB Invalidierung eines Bereichs von Einträgen
DE112007001171T5 (de) Verfahren für virtualisierten Transaktionsspeicher bei globalem Überlauf
DE112004002365T5 (de) Übergang vom Befehls-Cache-Speicher zum Ablaufverfolgungs-Cache-Speicher basierend auf Markengrenzen
DE102014003799A1 (de) Systeme und Verfahren zur Übertragungseliminierung mit Bypass-Mehrfachinstanziierungstabelle
DE112013004800T5 (de) Anweisung zur Bitverschiebung nach links mit Ziehen von Einsen in niedrigwertigere Bit
DE102018002525A1 (de) Hybridatomaritätsunterstützung für einen binärübersetzungsbasierten mikroprozessor

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R082 Change of representative

Representative=s name: WAGNER & GEYER PARTNERSCHAFT MBB PATENT- UND R, DE

R016 Response to examination communication
R082 Change of representative

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