-
Hintergrund
-
Superskalarprozessoren sind ausgelegt zum Ausgeben mehr als einer Anweisung pro Taktzyklus. Allgemein umfassen diese Prozessoren eine oder mehrere Reservierungsstationen, die Anweisungen empfangen und speichern, bis sie bereit sind, an die Out-of-Order Pipelines zur Ausführung ausgegeben zu werden. Eine Anweisung wird als zur Ausgabe bereit angesehen, wenn alle ihre Eingangsoperanden verfügbar sind.
-
In jedem Taktzyklus wählt die Reservierungsstation eine Anzahl von bereiten Anweisungen aus (z.B. eine pro Out-of-Order-Pipeline) und gibt sie an die Out-of-Order-Pipelines zur Ausführung aus. In jedem gegebenen Taktzyklus kann es jedoch eine Anzahl von Anweisungen geben, die zur Ausgabe bereit sind. Dementsprechend muss es einen Mechanismus zum Auswählen von bereiten Anweisungen zur Ausgabe an die Out-of-Order-Pipelines geben.
-
Typischerweise wird die höchste Priorität den ältesten bereiten Anweisungen erteilt und die niedrigste Priorität wird den jüngsten bereiten Anweisungen erteilt. Baldmöglichste Ausgabe der ältesten Anweisungen stellt sicher, dass sich der Umordnungspuffer nicht anfüllt und die Abgabe von Anweisungen aufhält. Mit dieser Strategie allein wird jedoch eine optimale Prozessorleistung nicht sichergestellt.
-
Die Druckschrift Baer, J.L.; Eggers, S.: CSE 471: Computer Design and Organization, Trace Cache and Back-end Operation (Lecture 6), 2007, URL: http://courses.cs.washington.edu/courses/cse471/07sp/lectures.html [abgerufen am 21.10.2014] beschreibt auf hohem Abstraktionsniveau, wie ein Prozessor mit mehreren Reservierungsstationen und mehreren funktionalen Einheiten Anweisungen aus den Reservierungsstationen an die funktionalen Einheiten ausgeben kann.
-
Die Druckschrift sagt aus, dass es mehr bereite Anweisungen geben kann als in einem bestimmten Taktzyklus ausgeführt werden können, so dass es ein Mittel geben muss um sie auszuwählen. Die Druckschrift sagt auch aus, dass Ladeanweisungen „wichtige Anweisungen“ sind. Die Druckschrift umfasst eine Übersicht, die zeigt, dass verschiedene Prozessortypen eine unterschiedliche Anzahl von Reservierungsstationen aufweisen und eine unterschiedliche Anzahl von funktionalen Einheiten. Ferner offenbart die Druckschrift, dass, falls es f funktionale Einheiten und w Reservierungsstationen gibt, man dann 2fw Komparatoren braucht, die von den Reservierungsstationen dadurch reduziert werden können, dass sie nach Funktion aufgeteilt werden.
-
Die Druckschrift Dana Hennry; Bradley C. Kuszmaul: „An Efficient, Prioritized Scheduler Using Cyclic Prefix", in: Yale University, 2, 1998, S. 1-5. http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.44.8290 [abgerufen am 21.10.2014] offenbart, dass Planer gewöhnlich ältere Anweisungen gegenüber jüngeren Anweisungen vorziehen, jedoch werden manchmal bestimmte jüngere Anweisungen (z.B. Anweisungen, die bedingte Abzweigungen auflösen) älteren vorgezogen. Die Druckschrift offenbart ein Verwenden einer CSPP (Cyclic Segmented Parallel Prefix) Schaltung, um eine Anweisung zu identifizieren, die einen Bedingungscode für eine unaufgelöste Verzweigung auflöst. Unter den Anweisungen mit höherer Priorität kann man die älteste unter Verwendung eines CSPP-Planers planen. Eine zweite CSPP-Schaltung wird verwendet, um die Anweisungen mit geringerer Priorität zu planen. Ferner wird offenbart, dass die CSPP-Schaltungen „Anfragen“ aus den Reservierungsstationen nach Ressourcen empfangen (eine Anfrage, die angibt, dass eine Anweisung bereit ist und deren funktionale Einheit benötigt wird). Dementsprechend wird eine Anweisung nur als eine Prioritätsanweisung identifiziert, wenn sie bereit wird.
-
Die unten beschriebenen Ausführungsformen sind nicht auf Ausführungen beschränkt, die irgendwelche oder alle der Nachteile bekannter Prozessoren lösen.
-
Kurzfassung
-
Diese Kurzfassung wird zum Einführen einer Auswahl von Konzepten in vereinfachter Form bereitgestellt, die weiter unten in der ausführlichen Beschreibung beschrieben werden. Diese Kurzfassung soll nicht Schlüsselmerkmale oder wesentliche Merkmale des beanspruchten Gegenstands kennzeichnen und soll auch nicht als Hilfsmittel zum Bestimmen des Schutzumfangs des beanspruchten Gegenstands benutzt werden.
-
Es sind hier Verfahren und Reservierungsstationen zum Auswählen von Anweisungen zur Ausgabe an eine Funktionseinheit eines Out-of-Order (Ausführung in anderer Reihenfolge) - Prozessors beschrieben. Das Verfahren umfasst ein Klassifizieren jeder Anweisung in eine einer Anzahl von Kategorien basierend auf dem Anweisungstyp. Sobald sie klassifiziert ist, wird eine Anweisung in einer Anweisungswarteschlange entsprechend der Kategorie gespeichert, in der sie klassifiziert wurde. Anweisungen werden dann aus einer oder mehreren der Anweisungswarteschlangen zur Ausgabe an die Funktionseinheit basierend auf einer relativen Priorität der Anweisungstypen ausgewählt. Damit wird erlaubt, dass gewisse Anweisungstypen (z.B. Control-Transfer-Anweisungen (engl. control transfer instructions), Flagsetzanweisungen (engl. flag setting instructions) und/oder Adresserzeugungsanweisungen (engl. address generation instructions)) gegenüber anderen Anweisungstypen priorisiert werden, selbst wenn sie jünger sind.
-
Ein erster Aspekt stellt ein Verfahren zum Auswählen von Anweisungen zur Ausgabe an eine Funktionseinheit in einem Out-of-Order-Prozessor) bereit, wobei das Verfahren umfasst: Empfangen einer Mehrzahl von Anweisungen an einer Reservierungsstation, wobei jede Anweisung eine einer Mehrzahl von Anweisungstypen ist und in einer einer Mehrzahl von Kategorien basierend auf dem Anweisungstyp klassifiziert ist; Speichern an der Reservierungsstation jeder Anweisung in einer einer Mehrzahl von Anweisungswarteschlagen, wobei jede Anweisungswarteschlange mit einer der Mehrzahl von Kategorien assoziiert ist; und Auswählen an der Reservierungsstation von Anweisungen aus einer oder mehreren der Anweisungswarteschlangen zur Ausgabe an die Funktionseinheit basierend auf einer relativen Priorität der Mehrzahl von Anweisungstypen.
-
Ein zweiter Aspekt stellt eine Reservierungsstation zum Auswählen von Anweisungen zur Ausgabe an eine Funktionseinheit in einem Out-of-Order-Prozessor bereit, wobei die Reservierungsstation umfasst: einen Anweisungsklassifizierer ausgelegt zum Empfangen einer Mehrzahl von Anweisungen, wobei jede Anweisung eine einer Mehrzahl von Anweisungstypen ist und in eine einer Mehrzahl von Kategorien klassifiziert ist basierend auf den Anweisungstyp; eine Mehrzahl von Anweisungswarteschlangen in Verbindung (kommunizierend) mit dem Anweisungsklassifizierer, wobei jede Anweisungswarteschlange zum Empfangen von Anweisungen von dem Anweisungsklassifizierer, die in eine bestimmte Kategorie klassifiziert worden sind, und Speichern der empfangenen Anweisungen ausgelegt ist; und einen Anweisungsplaner in Verbindung (kommunizierend) mit jeder der Mehrzahl von Anweisungswarteschlangen, wobei der Anweisungsplaner zum Auswählen von Anweisungen aus einer oder mehreren der Anweisungswarteschlangen zur Ausgabe an die Funktionseinheit basierend auf einer relativen Priorität der Mehrzahl von Anweisungstypen ausgelegt ist.
-
Ein dritter Aspekt stellt einen Prozessor umfassend die hier beschriebene Reservierungsstation bereit.
-
Weitere Aspekte stellen einen Out-of-Order-Singlethreaded-Prozessor, so wie er im Wesentlichen unter Bezugnahme auf 1 beschrieben wurde, eine Reservierungsstation, so wie sie im Wesentlichen unter Bezugnahme auf 2 beschrieben wurde, ein Verfahren zum Auswählen von Anweisungen zur Ausgabe an eine Funktionseinheit, so wie sie im Wesentlichen unter Bezugnahme auf 4 beschrieben wurde, und einen Out-of-Order-Multithreaded-Prozessor bereit, so wie er im Wesentlichen unter Bezugnahme auf 5 beschrieben wurde.
-
Die hier beschriebenen Verfahren können durch Software in maschinenlesbarer Form auf einem fassbaren Speichermedium z.B. in der Form eines Computerprogramms umfassend computerlesbaren Programmcode ausgelegt zum Durchführen aller Schritte jeglicher der hier beschriebenen Verfahren durchgeführt werden, wenn das Programm auf einem Computer abläuft und wo das Computerprogramm auf einem computerlesbaren Speichermedium ausgeführt sein kann. Beispiele von fassbaren (oder nichtflüchtigen) Speichermedien umfassen Platten, Flash-Laufwerke, Speicherkarten usw. und enthalten keine sich fortpflanzenden Signale. Die Software kann zur Ausführung auf einem parallelen Prozessor oder einem seriellen Prozessor geeignet sein, so dass die Verfahrensschritte in beliebiger geeigneter Reihenfolge oder gleichzeitig ausgeführt werden können.
-
Die hier beschriebenen Hardware-Bauteile können durch ein computerlesbares Speichermedium erzeugt sein, auf dem computerlesbarer Programmcode codiert ist.
-
Dadurch wird bestätigt, dass Firmware und Software wertvolle, getrennt verkaufsfähige Waren sein können. Damit soll Software umfasst sein, die auf „dummer“ oder standardmäßiger Hardware abläuft oder sie steuert zum Ausführen der gewünschten Funktionen. Damit soll auch Software umfasst sein, die den Aufbau von Hardware „beschreibt“ oder definiert wie beispielsweise HDL-Software (HDL = Hardware Description Language), so wie sie zur Auslegung von Siliziumchips oder zum Einrichten von universell programmierbaren Chips zum Ausführen gewünschter Funktionen benutzt wird.
-
Die bevorzugten Merkmale können wie angemessen kombiniert werden, wie es einem Fachmann offenbar sein würde, und können mit beliebigen der Aspekte der Erfindung kombiniert werden.
-
Kurze Beschreibung der Zeichnungen
-
Es werden Ausführungsformen der Erfindung beispielhaft unter Bezugnahme auf die folgenden Zeichnungen beschrieben, in denen:
- 1 ein schematisches Schaltbild eines beispielhaften Out-of-Order-Singlethreaded-Prozessors ist;
- 2 ein schematisches Schaltbild einer beispielhaften Reservierungsstation und zugehörigen Funktionseinheit der 1 ist;
- 3 ein schematisches Schaltbild einer beispielhaften Anweisungswarteschlange der 2 ist;
- 4 ein Flussdiagramm eines beispielhaften Verfahrens zum Auswählen von Anweisungen zur Ausgabe an eine Funktionseinheit ist;
- 5 ein schematisches Schaltbild eines beispielhaften Out-of-Order-Multithreaded-Prozessors ist;
- 6 ein schematisches Schaltbild mit beispielhaften Warteschlangen für einen Out-of-Order-Multithreaded-Prozessor ist; und
- 7 ein schematisches Schaltbild mit beispielhaften verschachtelten Warteschlangen für einen Out-of-Order-Multithreaded-Prozessor ist.
-
Gemeinsame Bezugsziffern werden in den gesamten Figuren zum Anzeigen gleichartiger Merkmale benutzt.
-
Ausführliche Beschreibung
-
Ausführungsformen der vorliegenden Erfindung werden unten nur beispielsweise beschrieben. Diese Beispiele stellen die besten Arten zur Ausübung der Erfindung dar, die dem Anmelder gegenwärtig bekannt sind, obwohl sie nicht die einzigen Arten sind, auf die dies erreicht werden könnte. In der Beschreibung werden die Funktionen des Beispiels und die Schrittfolge zum Aufbauen und Betreiben des Beispiels aufgeführt. Die gleichen oder gleichwertigen Funktionen und Folgen können jedoch durch andere Beispiele erreicht werden.
-
Es ist erkannt worden, dass ein Ausführen gewisser Anweisungstypen (z.B. Control-Transfer-Anweisungen, Flagsetzanweisungen und Adresserzeugungsanweisungen) sobald wie möglich, selbst wenn sie jünger als andere bereite Anweisungen sind, die Leistung eines Prozessors bedeutsam verbessern kann. Der Grund dafür ist, dass, sobald diese Anweisungstypen ausgegeben sind, sie andere Ressourcen freimachen, die durch andere Anweisungen benutzt werden können.
-
Dementsprechend beziehen sich hier beschriebene Ausführungsformen auf Verfahren, Reservierungsstationen und Prozessoren zum Priorisieren gewisser Anweisungstypen, selbst wenn sie jünger als andere bereite Anweisungen sind. Insbesondere werden in den hier beschriebenen Ausführungsformen Anweisungen in einer Reservierungsstation in eine einer Mehrzahl von Anweisungswarteschlangen basierend auf dem Anweisungstyp einsortiert. Von der Reservierungsstation werden dann Anweisungen zur Ausführung aus den Anweisungswarteschlangen basierend auf einer relativen Priorität der Mehrzahl von Anweisungstypen ausgewählt. Dadurch können gewisse Anweisungstypen gegenüber anderen Anweisungen priorisiert werden, selbst wenn sie jünger als andere bereite Anweisungen sind. Ein Auswählen von Anweisungen auf diese Art stellt sicher, dass Anweisungen höherer Priorität gegenüber Anweisungen niedrigerer Priorität zur Ausgabe ausgewählt werden und damit den Anweisungen höherer Priorität Funktionseinheitsressourcen (z.B. Pipelines) zugesichert werden und die Leistung des Prozessors erhöht wird.
-
Ferner wird durch Auswählen von Anweisungen auf diese Art keine zusätzliche Verzögerung im Prozessor eingeführt. Insbesondere kann selbst nach Abtrennen unterschiedlicher Anweisungstypen in getrennte Anweisungswarteschlangen die Auswahl und Ausgabe von Prozessen in einem einzelnen Zyklus vollendet werden.
-
Es wird nunmehr auf 1 Bezug genommen, die einen Out-of-Order-Singlethreaded-Prozessor 100 darstellt, wobei gewissen Anweisungstypen Priorität gegenüber anderen Anweisungen erteilt wird.
-
Der Prozessor 100 umfasst eine Abrufstufe 102 ausgelegt zum Abrufen von Anweisungen aus einem Programm (in Programmreihenfolge) wie angezeigt durch einen Programmzähler (PC - Program Counter) und eine Decodier- und Umbenennungsstufe 104 ausgelegt zum Ausdeuten der Anweisungen und Durchführen von Registerumbenennung. Wie dem Fachmann bekannt ist, ermöglicht die Registerumbenennung die Ausführung in anderer Reihenfolge von mehr Anweisungen durch Beseitigen gewisser Abhängigkeiten wie beispielsweise WAR-Abhängigkeiten (WAR = Write After Read - Schreiben nach Lesen).
-
Nachdem eine Anweisung die Decodier- und Umbenennungsstufe 104 durchläuft, wird sie (a) in einen Neuordnungspuffer 106 (ROB - Re-Order Buffer) eingefügt und (b) an eine der Reservierungsstationen 108a, 108b oder 108c abgesendet.
-
Der Neuordnungspuffer 106 ist ein Puffer, der ermöglicht, dass die Anweisungen in anderer Reihenfolge ausgeführt, aber in Reihenfolge übergeben werden. Der Neuordnungspuffer 106 hält die in ihn eingefügten Anweisungen in Programmreihenfolge, aber die Anweisungen im ROB 106 können durch die Funktionseinheiten 110a, 110b und 110c in anderer Reihenfolge ausgeführt werden. Anweisungen werden aus dem Neuordnungspuffer 106 in Programmreihenfolge zu einer Übergabestufe 112 ausgegeben, nachdem sie durch die Funktionseinheiten 110a, 110b und 110c ausgeführt worden sind. Die Übergabestufe 112 übergibt dann die Ergebnisse der Anweisung zum Register/Speicher.
-
In einigen Beispielen kann der Neuordnungspuffer 106 als ein Ringspeicher mit einem auf die älteste Anweisung im ROB 106 (die Kopfanweisung) zeigenden Kopfzeiger und einem auf die jüngste Anweisung im ROB 106 (die Abschlussanweisung, engl. tail instruction) zeigenden Abschlusszeiger (engl. tail pointer) ausgebildet sein. In diesen Beispielen wird die Kopfanweisung vom Kopf des ROB 106 ausgegeben, wenn diese Anweisung durch die Funktionseinheiten 110a, 110b und 110c ausgeführt worden ist und der Kopfzeiger wird zum Zeigen auf die nächste Anweisung im ROB 106 erhöht.
-
Jede Reservierungsstation 108a, 108b und 108c empfängt Anweisungen von der Decodier- und Umbenennungsstufe 104 und gibt die Anweisungen an eine entsprechende Funktionseinheit 110a, 110b oder 110c zur Ausführung aus. Obwohl der Prozessor 100 der 1 drei Reservierungsstationen 108a, 108b und 108c umfasst, können andere Prozessoren mehr oder weniger Reservierungsstationen aufweisen.
-
Obwohl außerdem 1 ein Verhältnis eins zu eins zwischen Reservierungsstationen 108a, 108b und 108c und Funktionseinheiten 110a, 110b bzw. 110c aufweist, kann es in anderen Fällen ein Verhältnis eins zu viele zwischen den Reservierungsstationen 108a, 108b und 108c und den Funktionseinheiten 110a, 110b und 110c geben. Beispielsweise kann in einigen Fällen wenigstens eine der Reservierungsstationen 108a, 108b oder 108c zum Bereitstellen von Anweisungen für eine Mehrzahl von Funktionseinheiten 110a, 110b und/oder 110c ausgelegt sein. In anderen Fällen könnte es nur eine einzelne Reservierungsstation 108a, 108b oder 108c geben, die zum Bereitstellen von Anweisungen für alle der Funktionseinheiten 110a, 110b und 110c ausgelegt ist.
-
In den hier beschriebenen Ausführungsformen ist jede Reservierungsstation 108a, 108b und 108c zum Einsortieren der aus der Decodier- und Umbenennungsstufe 104 empfangenen Anweisungen in eine Mehrzahl von Anweisungswarteschlangen basierend auf dem Anweisungstyp ausgelegt. In jedem Taktzyklus versucht die Reservierungsstation 108a, 108b oder 108c, eine Anzahl von Anweisungen aus den Anweisungswarteschlangen zur Ausgabe an die entsprechende Funktionseinheit 110a, 110b oder 110c zur Ausführung auszuwählen. In manchen Fällen sind die Reservierungsstationen 108a, 108b oder 108c zum Auswählen von Anweisungen aus den Anweisungswarteschlangen zum Priorisieren gewisser Anweisungstypen gegenüber anderen ausgelegt.
-
Jede Funktionseinheit 110a, 110b und 110c ist für die Ausführung von Anweisungen verantwortlich und kann eine oder mehrere Funktionseinheits-Pipelines umfassen. Die Funktionseinheiten 110a, 110b und 110c können zum Ausführen bestimmter Typen von Operationen ausgelegt sein oder sie können Universal-Funktionseinheiten sein. Beispielsweise kann eine oder mehrere Funktionseinheiten 110a, 110b und 110c eine Lade-/Speichereinheit, eine Ganzzahleinheit, eine Gleitkommaeinheit (FPU - Floating Point Unit), eine Digitalsignalverarbeitungs-/Einzelanweisungs-Mehrfachdateneinheit (DSP - Digital Signal Processing), (SIMD - Single Instruction Multiple Data) oder eine Multiplizier-Akkumulier-Einheit (MAC - Multiply Accumulate) sein. Eine Lade-/Speichereinheit führt Lade- und Speicher-Speicheroperationen durch, eine Ganzzahleinheit führt Ganzzahloperationen durch, eine FPU führt Gleitkommaoperationen aus, eine DSP/SIMD-Einheit weist mehrere Verarbeitungselemente auf, die die gleiche Operation an mehreren Datenpunkten gleichzeitig durchführen, und eine MAC-Einheit berechnet das Produkt von zwei Zahlen und addiert das Produkt zu einem Akkumulator. Die Funktionseinheiten 110a, 110b und 110c und die Pipelines darin können unterschiedliche Längen und/oder Komplexitäten aufweisen. Beispielsweise ist eine FPU-Pipeline typischerweise länger als eine Ganzzahlausführungs-Pipeline, da sie allgemein kompliziertere Operationen durchführt.
-
Eine beispielhafte Reservierungsstation 108 und zugehörige Funktionseinheit 110 werden unter Bezugnahme auf 2 beschrieben.
-
Der Prozessor 100 umfasst auch einen Zweigprädiktor 114, der zum Vorhersagen ausgelegt ist, welche Richtung der Programmfluss im Fall von Anweisungen einnehmen wird, von denen bekannt ist, dass sie mögliche Flussänderungen verursachen wie beispielsweise Zweiganweisungen. Zweigvorhersage ist nützlich, da sie spekulative Ausführung von Anweisungen durch den Prozessor 100 ermöglicht, ehe das Ergebnis der Zweiganweisung bekannt ist. Der Zweigprädiktor 114 kann in Verbindung mit der Abrufstufe 102, Decodier- und Umbenennungsstufe 104 und/oder den Funktionseinheiten 110a, 110b und 110c stehen. Beispielsweise kann die Abrufstufe 102 Informationen vom Zweigprädiktor 114 zum Bestimmen benutzen, welche Anweisung als Nächstes abzurufen ist; die Decodier- und Umbenennungsstufe 104 kann Informationen für den Zweigprädiktor 114 bereitstellen, die anzeigen, welche Anweisungen Zweiganweisungen sind (in anderen Fällen können die Anweisungen in der Abrufstufe 102 decodiert werden); und die Funktionseinheiten 110a, 110b und 110c können den Zweigprädiktor 114 mit Aktualisierungen des Programmzählers anzeigenden Informationen versorgen.
-
Wenn der Zweigprädiktor 114 den Programmfluss genau vorhersagt, wird dadurch die Leistung des Prozessors 100 verbessert. Wenn jedoch der Zweigprädiktor 114 die Zweigrichtung nicht richtig vorhersagt, dann tritt eine Fehlvorhersage auf, die korrigiert werden muss, ehe das Programm weiterlaufen kann. Zum Korrigieren einer Fehlvorhersage werden die zum ROB 106 gesendeten spekulativen Anweisungen aufgegeben und die Abrufstufe 102 beginnt, Anweisungen aus dem richtigen Programmzweig abzurufen.
-
Nunmehr wird auf 2 Bezug genommen, die eine beispielhafte Reservierungsstation 108 der 1 darstellt, und eine zugehörige Funktionseinheit 110. Wie oben beschrieben, werden von der Reservierungsstation 108 Anweisungen an die Funktionseinheit 110 zur Ausführung auf eine Weise ausgegeben, die gewisse Anweisungstypen gegenüber anderen Anweisungstypen priorisiert.
-
Die Reservierungsstation 110 umfasst einen Anweisungsklassifizierer 202 zum Kategorisieren der von der Decodier- und Umbenennungsstufe 104 empfangenen Anweisungen in eine einer Mehrzahl von Kategorien basierend auf dem Anweisungstyp; eine Mehrzahl von Anweisungswarteschlangen 204-210 zum Speichern von Anweisungen in einer bestimmten Kategorie; und einen Anweisungsplaner 212 zum Auswählen von bereitstehenden Anweisungen aus den Anweisungswarteschlangen 204-210 und Ausgeben derselben zur Funktionseinheit 110 zur Ausführung.
-
Wie oben kurz beschrieben, empfängt der Anweisungsklassifizierer 202 Anweisungen von der Decodier- und Umbenennungsstufe 104; klassifiziert jede Anweisung in eine einer Mehrzahl von Kategorien basierend auf dem Anweisungstyp; und sendet jede klassifizierte Anweisung zur Anweisungswarteschlange 204-210 entsprechend der zugewiesenen Kategorie. In einigen Fällen benutzt die Decodier- und Umbenennungsstufe 104 den Operationscode („Opcode“) der Anweisung zum Bestimmen des Anweisungstyps. Dann stellt die Decodier- und Umbenennungsstufe 104 eine Anzeige des Anweisungstyps in den für die Reservierungsstation 108 bereitgestellten Daten bereit. In anderen Fällen stellt die Decodier- und Umbenennungsstufe 104 die Opcodes an die Reservierungsstation 108 bereit und der Anweisungsklassifizierer 202 benutzt die Opcodes zum Kennzeichnen des Anweisungstyps.
-
In einigen Fällen benutzt der Anweisungsklassifizierer 202 die von der Decodier- und Umbenennungsstufe 104 empfangenen Informationen (z.B. Anzeiger oder Opcode) zum Kennzeichnen wenigstens eines des folgenden Anweisungstyps: Control-Transfer-Anweisungen, Adresserzeugungsanweisungen und Flagsetzanweisungen. Control-Transfer-Anweisungen sind Anweisungen wie beispielsweise Zweiganweisungen, die den Programmzähler (PC - Program Counter) abändern, um den Steuerungsfluss eines Programms zu ändern. Adresserzeugungsanweisungen sind Anweisungen, die die Speicheradresse von Lade- und Speicheranweisungen auflösen. Eine Lade- oder Speicheroperation kann nur nach Ausführung solcher Anweisungen erfolgreich durchgeführt werden. Flagsetzanweisungen sind Anweisungen, die die in einem Flagregister gespeicherten Bedingungsflags abändern, die den Zustand des Prozessors anzeigen.
-
In anderen Fällen kann der Anweisungsklassifizierer 202 die von der Decodier- und Umbenennungsstufe 104 empfangenen Informationen (z.B. Anzeiger oder Opcode) zum Kennzeichnen von mehr, weniger oder anderen Anweisungstypen benutzen.
-
In einigen Fällen kann es eine Kategorie für jeden identifizierten Anweisungstyp geben (z.B. eine Kategorie für Control-Transfer-Anweisungen, eine Kategorie für Adresserzeugungsanweisungen und eine Kategorie für Flagsetzanweisungen) und eine allgemeine Kategorie für alle anderen Anweisungen. In anderen Fällen kann es eine Kategorie für einen oder mehrere Typen identifizierter Anweisungen geben (z.B. eine Kategorie für Control-Transfer-Anweisungen, Adresserzeugungsanweisungen und Flagsetzanweisungen; oder eine Kategorie für Control-Transfer-Anweisungen und eine Kategorie für Adressenerzeugungs- und Flagsetzanweisungen) und eine allgemeine Kategorie für alle anderen Anweisungen.
-
Obwohl es hier beschrieben worden ist, dass der Anweisungsklassifizierer 202 die Klassifizierung der Anweisungen durchführt, kann in anderen Beispielen die Klassifizierung durch eine andere Komponente des Prozessors 100 durchgeführt werden, wie beispielsweise die Decodier- und Umbenennungsstufe 104. In diesen Beispielen kann zusätzlich zum Empfangen der Anweisung selbst von der Decodier- und Umbenennungsstufe 104 der Anweisungsklassifizierer 202 auch Informationen empfangen, die anzeigen, in welche Kategorie die Anweisung klassifiziert worden ist. Der Anweisungsklassifizierer 202 sendet dann die empfangenen Anweisungen zu der zutreffenden Anweisungswarteschlange basierend auf den von der Decodier- und Umbenennungsstufe 104 empfangenen Klassifizierungsinformationen.
-
Jede Anweisungswarteschlange 204-210 empfängt Anweisungen vom Anweisungsklassifizierer 202 für eine bestimmte Kategorie und speichert jede Anweisung in einen verfügbaren Eintrag oder Schlitz. Die Anweisungen können in den Anweisungswarteschlangen in der Reihenfolge gespeichert werden, in der sie von dem Anweisungsklassifizierer 202 empfangen werden. Da der Anweisungsklassifizierer 202 typischerweise die Anweisungen von der Decodier- und Umbenennungsstufe 104 in Programmreihenfolge empfängt und verarbeitet, können die Anweisungen in Programmreihenfolge in den Anweisungswarteschlangen 204-210 gespeichert werden.
-
Es gibt typischerweise eine Anweisungswarteschlange 204-210 für jede Kategorie. In der beispielhaften Reservierungsstation 108 der 4 gibt es vier Kategorien von Anweisungen (z.B. eine für jeden oben identifizierten Anweisungstyp) und es gibt daher vier Anweisungswarteschlangen 204-210. Beispielsweise kann die erste Anweisungswarteschlange 204 (Anweisungswarteschlange 0) für Control-Transfer-Anweisungen bestehen, die zweite Anweisungswarteschlange 206 (Anweisungswarteschlange 1) kann für Adresserzeugungsanweisungen bestehen, die dritte Anweisungswarteschlange 208 (Anweisungswarteschlange 2) kann für Flagsetzanweisungen bestehen und die vierte Anweisungswarteschlange 210 (Anweisungswarteschlange 3) kann für alle anderen Anweisungen bestehen. In anderen Beispielen kann jedoch die Reservierungsstation 108 mehr oder weniger Anweisungswarteschlangen aufweisen.
-
Eine Anweisung wartet in der Anweisungswarteschlange, bis ihre Eingangsoperandenwerte verfügbar sind. Insbesondere kann die Reservierungsstation 108 die Ausgabe der Funktionseinheit(en) 110 überwachen, um Entsprechungen für fehlende Operanden (Operanden mit einem auf 0 gesetzten Bereitschaftsbit) für jede Anweisung in den Anweisungswarteschlangen zu finden. Sobald die Reservierungsstation 108 eine Entsprechung für einen fehlenden Operanden findet, setzt sie das Bereitschaftsbit für diesen Operanden auf 1. In einigen Fällen kopiert die Reservierungsstation 108 auch den Operanden von der Ausgabe der Funktionseinheit 110 in die Anweisungswarteschlange. In anderen Fällen wird der Operandenwert aus der zutreffenden Registerdatei ausgelesen, nachdem die Anweisung an die Funktionseinheit 110 ausgegeben worden ist. Beispielsweise kann die erste Stufe der Pipelines 214-220 zum Auslesen des Operandenwertes aus der zutreffenden Registerdatei ausgelegt sein. Dies kann die Anzahl von Verbindungen zwischen den Funktionseinheiten) 110 und der Reservierungsstation 108 über die Fälle reduzieren, wo die Operandenwerte aus der Ausgabe der Funktionseinheit 110 kopiert werden.
-
Sobald alle Operandenwerte einer Anweisung verfügbar sind, ist die Anweisung als für die Ausführung bereit erachtet und es kann ein Bereitschaftsbit für diese Anweisung gesetzt werden, das anzeigt, dass die Anweisung zur Ausgabe an die Funktionseinheit 110 bereit ist. Operandenwerte einer Anweisung können vor den Operandenwerten für frühere, ältere Anweisungen verfügbar sein, wodurch sie die Anweisungswarteschlange vor diesen früheren, älteren Anweisungen verlassen kann.
-
Eine beispielhafte Anweisungswarteschlange 204 wird unter Bezugnahme auf 3 beschrieben.
-
Auch umfasst die beispielhafte Reservierungsstation 108 der 2 einen Anweisungsplaner 212 zum Ausgeben von (betriebs)bereiten Anweisungen aus den Anweisungswarteschlangen 204-210 an die Funktionseinheit 110 zur Ausführung.
-
Die Funktionseinheit 110 umfasst eine oder mehrere gleiche Pipelines 214-220 zum Ausführen von Anweisungen. Die beispielhafte Funktionseinheit 110 der 2 umfasst vier, von 0 bis 3 nummerierte Pipelines 214-220; in anderen Beispielen kann jedoch die Funktionseinheit 110 mehr oder weniger Pipelines umfassen.
-
In jedem Taktzyklus versucht der Anweisungsplaner 212, jede Pipeline 214-220 mit einer Anweisung aus einer der Anweisungswarteschlangen 204-210 zu versorgen. Wo beispielsweise die Funktionseinheit 110 vier Pipelines 214-220 wie in 2 gezeigt umfasst, versucht der Anweisungsplaner 212, vier betriebsbereite Anweisungen aus den Anweisungswarteschlangen 204-210 auszuwählen und eine der ausgewählten Anweisungen an jede Pipeline 214-220 auszugeben.
-
In vielen Out-of-Order-Prozessoren umfasst die Reservierungsstation nur eine einzelne Anweisungswarteschlange und die ältesten betriebsbereiten Anweisungen in der Warteschlange werden zur Ausgabe an die Pipelines 214-220 ausgewählt. Durch baldmöglichstes Ausgeben der ältesten Anweisungen in der Warteschlange wird sichergestellt, dass der Umordnungspuffer 106 sich nicht anfüllt und die Ablieferung von Anweisungen durch die Decodier- und Umbenennungsstufe 104 aufhält. Dadurch wird jedoch nicht die optimale Leistung des Prozessors sichergestellt. Insbesondere ist erkannt worden, dass baldmöglichste Ausführung gewisser Anweisungstypen (z.B. Control-Transfer-Anweisungen, Flagsetzanweisungen und Adresserzeugungsanweisungen), selbst wenn sie jünger als andere betriebsbereite Anweisungen sind, die Leistung des Prozessors bedeutend verbessern kann. Das liegt daran, dass, sobald diese Anweisungen ausgegeben worden sind, sie andere Ressourcen freigeben, die durch andere Anweisungen benutzt werden können.
-
Insbesondere ist beobachtet worden, dass fehlspekulierte (d.h. falsch vorhergesagte) Control-Transfer-Anweisungen einen kostspieligen Wiedergewinnungs-Overhead aufweisen und daher bald möglichste Ausführung von Control-Transfer-Anweisungen, selbst wenn sie jünger als andere betriebsbereite Anweisungen sind, zu bedeutsamer Leistungsverbesserung führen kann. Ähnliche Beobachtungen sind für Flagsetz- und Adresserzeugungsanweisungen durchgeführt worden.
-
Dementsprechend ist der Anweisungsplaner 212 der 2 zum Auswählen von betriebsbereiten Anweisungen aus den Anweisungswarteschlangen 204-210 auf eine Weise ausgelegt, die gewisse Anweisungstypen priorisiert, selbst wenn sie jünger als andere betriebsbereite Anweisungen sind. In manchen Fällen werden die Anweisungswarteschlangen 204-210 von der höchsten Priorität zur niedrigsten Priorität priorisiert und der Anweisungsplaner 212 wählt aus den Anweisungswarteschlangen betriebsbereite Anweisungen in Prioritätsreihenfolge aus. Wenn beispielsweise die Anweisungswarteschlangen 204-210 in der folgenden Reihenfolge von der höchsten Priorität zur niedrigsten Priorität priorisiert werden - Anweisungswarteschlange 0, Anweisungswarteschlange 1, Anweisungswarteschlange 2 und Anweisungswarteschlange 3 - kann der Anweisungsplaner 212 zuerst betriebsbereite Anweisungen aus Anweisungswarteschlange 0, dann Anweisungswarteschlange 1, dann Anweisungswarteschlange 2, dann Anweisungswarteschlange 3 auswählen.
-
In einigen Fällen kann die Priorität der Anweisungswarteschlangen 204-210 vorbestimmt sein oder festliegen und in anderen Fällen kann die Priorität dynamisch eingestellt sein.
-
Insbesondere kann in manchen Fällen die Priorität der Anweisungswarteschlangen 204-210 durch Offline-Prüfung und/oder Leistungsanalyse bestimmt und dann im Prozessor vorbestimmt oder festgelegt werden. Der Fachmann weiß beispielsweise, dass ungeachtet der sorgvollen Auswahl einer Anweisungsmengenarchitektur (ISA - Instruction Set Architecture) und Mikroarchitektur Leistungsengpässe durch gewisse Anweisungen (z.B. Control-Transfer-Anweisungen) verursacht werden können. Durch Durchführen einer ausführlichen Analyse der Einwirkung der gewählten Mikroarchitektur auf die Leistung von interessierenden Maßstabsanwendungen können Anweisungen priorisiert werden, so wie sie auf einer fallweisen Grundlage als passend erachtet werden. In manchen Fällen können die relativen Prioritäten gewisser Anweisungen durch Untersuchen mehrerer Parameter bestimmt werden, die den Zustand des Prozessors zu einer gegebenen Zeit anzeigen.
-
Eine ausführliche Analyse hat gezeigt, dass in manchen Fällen eine optimale Leistung erreicht werden kann, wenn die mit Control-Transfer-Anweisungen assoziierte Anweisungswarteschlange die höchste Priorität erhält, der mit Flagsetzanweisungen assoziierten Anweisungswarteschlange die zweithöchste Priorität erteilt wird, der mit Adresserzeugungsanweisungen assoziierten Anweisungswarteschlange die dritthöchste Priorität erteilt wird und der mit allen sonstigen Anweisungen assoziierten Anweisungswarteschlange die niedrigste Priorität erteilt wird.
-
In anderen Fällen kann der Prozessor eine zusätzliche Komponente umfassen, wie beispielsweise den automatischen MIPS-Zuteiler (AMA - Automatic MIPS Allocator), der die Gesamtleistung des Prozessors überwacht und zutreffende Steuersignale zum Anweisungsplaner 212 erzeugt, die die Priorität von Anweisungswarteschlangen 204-210 zum Optimieren von Anweisungsausführung in Echtzeit angeben.
-
In manchen Fällen wird, wenn der Anweisungsplaner 212 genug betriebsbereite Anweisungen aus einer Warteschlange mit höherer Priorität oder Warteschlangen mit höherer Priorität auswählen kann, er vielleicht nicht einmal versuchen, Anweisungen aus einer Warteschlange niedrigerer Priorität auszuwählen. Wenn es beispielsweise vier Pipelines in der zugehörigen Funktionseinheit 110 wie in 2 dargestellt gibt und der Anweisungsplaner 212 kollektiv vier betriebsbereite Anweisungen aus der Warteschlange mit höchster Priorität (z.B. Anweisungswarteschlange 0) und der Warteschlange zweithöchster Priorität (z.B. Anweisungswarteschlange 1) erhalten kann, dann wird der Anweisungsplaner möglicherweise nicht einmal versuchen, betriebsbereite Anweisungen aus den zwei Anweisungswarteschlangen niedrigerer Priorität auszuwählen (z.B. Anweisungswarteschlange 2 und Anweisungswarteschlange 3).
-
Der Anweisungsplaner 212 ist typischerweise zum Auswählen der ältesten betriebsbereiten Anweisungen aus jeder beliebigen besonderen Anweisungswarteschlange 204-210 ausgelegt, in einigen Fällen kann jedoch der Anweisungsplaner 212 zum Auswählen von Anweisungen aus einer bestimmten Anweisungswarteschlange unter Verwendung anderer Kriterien ausgelegt sein. Ein Auswählen von Anweisungen unter Verwendung anderer Kriterien kann jedoch den Anweisungsplaner 212 verlangsamen (und die Einzeltaktzykluszeitdauer überschreiten), wenn eine komplexe Menge von Regeln und Ausnahmen benutzt wird. In manchen Fällen kann der Anweisungsplaner 212 Anweisungen aus verschiedenen Anweisungswarteschlangen unter Verwendung verschiedener Kriterien auswählen (d.h. er kann die ältesten betriebsbereiten Anweisungen aus einer Warteschlange auswählen und andere Kriterien zum Auswählen von Anweisungen aus einer anderen Warteschlange benutzen), jedoch kann dies die Komplexität des Anweisungsplaners 212 steigern und/oder ihn langsamer machen.
-
In manchen Fällen kann die Anzahl von Anweisungen, die aus einer bestimmten Anweisungswarteschlange in einem Taktzyklus ausgewählt werden können, begrenzt sein. Dies kann geschehen (a) da minimale Leistungsnutzen zum Priorisieren von mehr als einer Anweisung einer gewissen Art bestehen; und/oder (b) zum Ausschließen der Möglichkeit, dass eine oder mehrere Warteschlangen niedriger Priorität ausgehungert werden (z.B. Anweisungen in einer bestimmten Warteschlange werden niemals an die Funktionseinheit 110 ausgegeben). Wo beispielsweise die Reservierungsstation 108 eine Control-Transfer-Anweisungen zugeordnete Anweisungswarteschlange aufweist, kann der Anweisungsplaner 212 zum Auswählen von maximal einer betriebsbereiten Anweisung aus der Control-Transfer-Anweisungs-Warteschlange in jedem Taktzyklus ausgelegt sein. Das liegt daran, dass erkannt wurde, dass, da eine zweite Control-Transfer-Anweisung wahrscheinlich viel jünger als die erste Control-Transfer-Anweisung sein wird, die Leistungsnutzen zum Priorisieren von mehr als einer Control-Transfer-Anweisung im Vergleich zur Ausgabe von mehr älteren Anweisungen aus einer anderen Anweisungswarteschlange nicht groß sein werden.
-
Beim Auswählen von Anweisungen zur Ausgabe an die Funktionseinheit bewertet der Anweisungsplaner 212 eine Mehrzahl von Anweisungen, um zu bestimmen, ob sie zur Ausgabe wählbar sind. Im Allgemeinen ist eine Anweisung zur Ausgabe wählbar, wenn die Anweisung betriebsbereit ist und nicht ausgegeben worden ist. Ein Bestimmen, ob eine Anweisung betriebsbereit ist und nicht ausgegeben worden ist, kann ein Betrachten einer Bereitschaftsspalte und einer Ausgabespalte (wie unter Bezugnahme auf 3 beschrieben) der Anweisungswarteschlange umfassen. Der Anweisungsplaner 212 kann jedoch typischerweise nur eine maximale Anzahl von Anweisungen Wmax, pro Taktzyklus in Abhängigkeit von der Taktfrequenz des Prozessors 100 bewerten.
-
In manchen Fällen ist zum Sicherstellen, dass der Anweisungsplaner Anweisungen aus allen Anweisungswarteschlangen 204-210 in einem Taktzyklus bewerten kann, die Anzahl von Anweisungen, die in jeder gegebenen Anweisungswarteschlange bewertet werden können, auf eine Höchstzahl Wi begrenzt, wobei i die Anweisungswarteschlangennummer ist. Beispielsweise können maximal W0 Anweisungen in der ersten Anweisungswarteschlange 204 (Anweisungswarteschlange 0) bewertet werden, und es können maximal W1 Anweisungen in der zweiten Anweisungswarteschlange 206 (Anweisungswarteschlange 1) bewertet werden. Die den Anweisungswarteschlangen 204-210 auferlegten Begrenzungen können die gleichen oder unterschiedlich sein.
-
Ungeachtet dessen, ob die Höchstwerte die gleichen oder unterschiedlich über Anweisungswarteschlangen sind, kann die Summe der Höchstwerte (W
i) nicht die Höchstzahl von Anweisungen (W
max) überschreiten, die durch den Anweisungsplaner 212 in jedem beliebigen Zyklus bewerten werden können. Dies wird durch die unten gezeigte Gleichung (1) dargestellt, wobei X die Anzahl von Anweisungswarteschlangen ist.
-
Wo es eine Begrenzung (Wi) der Anzahl von Anweisungen gibt, die in einer bestimmten Anweisungswarteschlange 204-210 bewertet werden können, wenn der Anweisungsplaner 212 betriebsbereite Anweisungen aus der bestimmten Anweisungswarteschlange 204-210 auswählt, kann der Anweisungsplaner 212 mit dem Bewerten von Anweisungen in der bestimmten Anweisungswarteschlange aufhören, wenn der Anweisungsplaner 212 die Höchstzahl von Anweisungen (Wi) für diese bestimmte Anweisungswarteschlange bewertet hat. Sobald er mit dem Bewerten von Anweisungen in einer bestimmten Warteschlange aufhört, kann er zu der Anweisungswarteschlange mit der nächsthöchsten Priorität fortschreiten, um nach Anweisungen zur Ausgabe an die Funktionseinheit 110 zu suchen.
-
Ein Verfahren zum Auswählen von Anweisungen aus der Mehrzahl von Anweisungswarteschlangen, das durch den Anweisungsplaner 212 implementiert werden kann, wird unter Bezugnahme auf 4 beschrieben.
-
Nunmehr wird auf 3 Bezug genommen, die eine beispielhafte Anweisungswarteschlange 204 der 2 darstellt. Die Anweisungswarteschlange 204 kann als eine Tabelle mit einer Anzahl von Zeilen 302-332 und Spalten 334-338 ausgelegt sein. Jede Zeile oder jeder Eintrag 302-332 kann Informationen bezüglich einer einzelnen Anweisung halten. In einigen Fällen sind die Anweisungen in der Anweisungswarteschlange 204 in der Reihenfolge gespeichert, in der sie empfangen werden. Da der Anweisungsklassifizierer 202 typischerweise die Anweisungen von der Decodier- und Umbenennungsstufe 104 in Programmreihenfolge empfängt und verarbeitet, können die Anweisungen durch die Anweisungswarteschlange 204 in Programmreihenfolge empfangen und gespeichert werden. Dementsprechend werden ältere Anweisungen vor jüngeren Anweisungen eingefügt. In dem in 3 gezeigten Beispiel ist die Anweisung 0 die älteste Anweisung und Anweisung 15 die jüngste Anweisung.
-
Die Spalten 334-338 werden zum Speichern bestimmter Informationen für jede Anweisung benutzt. In dem in 3 gezeigten Beispiel gibt es drei Spalten: eine Anweisungsspalte, eine Bereit-Spalte bzw. Bereitschaftsspalte und eine Ausgabespalte, jedoch kann es in anderen Beispielen mehr, weniger oder unterschiedliche Spalten geben. Beispielsweise könnte die Anweisungswarteschlange in einigen Ausführungsformen (z.B. wo Anweisungen aus der Anweisungswarteschlange entfernt werden, sobald sie ausgegeben worden sind), keine Ausgabespalte umfassen.
-
Die Anweisungsspalte 334 wird zum Bewahren von Informationen benutzt, die die Anweisung beschreiben, die durch die Funktionseinheit 110 (z.B. Pipeline) zum Ausführen der Anweisung benutzt wird. Diese Informationen können die Anweisungscodes und Eingangs- und Ausgangsoperanden für die Anweisung umfassen. Die Anweisungsspalte 334 kann in jeder geeigneten Weise ausgeführt sein.
-
Die Bereitschaftsspalte 336 wird zum Anzeigen benutzt, ob die Anweisung bereit ist, zur Funktionseinheit 110 ausgegeben zu werden. Wie oben beschrieben, wird eine Anweisung als zur Ausgabe an die Funktionseinheit 110 bereit erachtet, wenn alle ihre Eingangsoperanden verfügbar sind. Die Bereitschaftsspalte 336 kann auf jede geeignete Weise ausgeführt sein. Beispielsweise kann in einigen Fällen die Bereitschaftsspalte 336 als ein Einzelbit ausgeführt sein und in anderen Fällen kann die Bereitschaftsspalte 336 als ein BoolescherWert ausführt sein. Wenn eine Anweisung anfänglich vom Anweisungsklassifizierer 202 empfangen wird, sind ihre Operandenwerte typischerweise nicht verfügbar. Dementsprechend kann die Bereitschaftsspalte anfänglich (z.B. auf „0“ oder „FALSCH“) gesetzt sein, um anzuzeigen, dass die Anweisung nicht betriebsbereit ist. Wenn die Eingangsoperanden danach verfügbar werden, kann die Bereitschaftsspalte (z.B. auf „1“ oder „WAHR“) gesetzt sein, um anzuzeigen, dass die Anweisung bereit ist, an die Funktionseinheit 110 ausgegeben zu werden.
-
Die Ausgabespalte 338 wird zum Anzeigen benutzt, ob die Anweisung an die Funktionseinheit 110 ausgegeben worden ist. Die Ausgabespalte 338 kann auf jede geeignete Weise ausgeführt sein. Beispielsweise kann in einigen Fällen die Ausgabespalte 338 als ein Einzelbit ausgeführt sein und in anderen Fällen kann die Ausgabespalte 338 als ein BoolescherWert ausgeführt sein. Wenn eine Anweisung anfänglich vom Anweisungsklassifizierer 202 empfangen wird, kann die Ausgabespalte (z.B. auf „0“ oder „FALSCH“) gesetzt sein, um anzuzeigen, dass die Anweisung nicht an die Funktionseinheit 110 ausgegeben worden ist. Sobald die Anweisung ausgegeben worden ist, kann die Ausgabespalte 338 (z.B. auf „1“ oder „WAHR“) gesetzt sein, um anzuzeigen, dass die Anweisung an die Funktionseinheit 110 ausgegeben worden ist.
-
Eine Anweisung kann solange in der Anweisungswarteschlange 204 bleiben, bis (i) sie ausgegeben worden ist; oder (ii) bis sie ausgegeben und danach durch eine andere Anweisung überschrieben worden ist.
-
Eine Anweisung wird typischerweise nur zur Ausgabe an die Funktionseinheit 110 ausgewählt, wenn die Anweisung betriebsbereit ist und nicht an die Funktionseinheit 110 ausgegeben worden ist.
-
Wo die Anzahl von Anweisungen W0 in der Anweisungswarteschlange 204 (Anweisungswarteschlange 0), die durch den Anweisungsplaner 212 in einem Taktzyklus bewertet werden können, begrenzt ist, kann ein Fenster hergestellt werden, um die W0 Anweisungen zu definieren, die zu bewerten sind. Das Fenster kann durch einen Kopfzeiger definiert werden, der auf die Kopfanweisung zeigt (auch als Startanweisung bezeichnet), und einen Abschlusszeiger, der auf die Abschlussanweisung zeigt (auch als Endanweisung bezeichnet). In einigen Fällen kann die Kopfanweisung die älteste Anweisung in der Anweisungswarteschlange 204 sein, die nicht ausgegeben worden ist, und die Abschlussanweisung kann die (W0 -1)-te Anweisung in der Anweisungswarteschlange 204 unmittelbar nach der Kopfanweisung sein.
-
Es wird ein erstes Beispiel zum Darstellen dieses Konzepts benutzt. Insbesondere kann, wenn maximal vier Anweisungen in der Anweisungswarteschlange 204 der 3 bewertet werden können (z.B. W0 = 4) der Kopfzeiger 340 des Fensters auf Anweisung 2 (Kopfanweisung) zeigen, da dies die älteste nichtausgegebene Anweisung in der Anweisungswarteschlange 204 ist, und der Abschlusszeiger 342 des Fensters kann auf Anweisung 5 (Abschlussanweisung) zeigen, da sie die dritte (z.B. W0 - 1 = 4 - 1 = 3) Anweisung unmittelbar nach der Kopfanweisung ist. Wenn in diesem Beispiel der Anweisungsplaner 212 versucht, Anweisungen aus dieser Anweisungswarteschlange 204 (z.B. Anweisungswarteschlange 0) auszuwählen, bewertet der Anweisungsplaner 212 nacheinander Anweisungen 2 bis 5, bis (a) er genug betriebsbereite Anweisungen ausgewählt hat, um die Pipelines (z.B. eine pro Pipeline) anzufüllen, (b) er die Höchstzahl von Anweisungen aus dieser Warteschlange ausgewählt hat (wenn dieser Anweisungswarteschlange eine Höchstzahl zugewiesen worden ist) oder (c) er Anweisung 5 bewertet hat (z.B. er die Höchstzahl von Anweisungen für diese Anweisungswarteschlange bewertet hat). Sobald eine dieser Bedingungen erfüllt worden ist, hört der Anweisungsplaner 212 auf, die Anweisungswarteschlange 204 nach Anweisungen zur Ausgabe zu durchsuchen. Wenn Bedingung (a) erfüllt ist, kann der Anweisungsplaner 212 die ausgewählten Anweisungen an die Funktionseinheit 110 ausgeben. Wenn jedoch Bedingung (b) oder (c) erfüllt ist, kann der Anweisungsplaner 212 zur Anweisungswarteschlange mit der nächstniedrigeren Priorität fortschreiten (wenn es eine Anweisungswarteschlange mit niedrigerer Priorität gibt), um ferner nach Anweisungen zur Ausgabe an die Funktionseinheit 110 zu suchen.
-
In anderen Fällen kann die Kopfanweisung des Fensters die älteste betriebsbereite nichtausgegebene Anweisung in der Anweisungswarteschlange 204 sein und die Abschlussanweisung des Fensters kann die (Wi-1)-te Anweisung in der Anweisungswarteschlange unmittelbar nach der Kopfanweisung sein. Diese Fälle können mehr Logik erfordern, als die Fälle, wo die Kopfanweisung des Fensters die älteste nicht ausgegebene Anweisung in der Anweisungswarteschlange 204 ist, kann aber eine wirkungsvollere Benutzung der Ressourcen des Anweisungsplaners 212 ergeben, da der Anweisungsplaner 212 keine Zeit zum Bewerten älterer Anweisungen verschwendet, die nicht zur Ausgabe bereit sind.
-
Zum Darstellen dieses Konzepts wird ein zweites Beispiel benutzt. Wenn insbesondere maximal sieben Anweisungen in der Anweisungswarteschlange 204 der 3 bewertet werden können (z.B. W0 = 7), kann der Kopfzeiger 344 des Fensters auf Anweisung 3 (Kopfanweisung) zeigen, da dies die älteste betriebsbereite nichtausgegebene Anweisung in der Anweisungswarteschlange 204 ist, und der Abschlusszeiger 346 des Fensters kann auf Anweisung 9 (Abschlussanweisung) zeigen, da sie die sechste (z.B. W0- 1 = 7 - 1 = 6) Anweisung in der Anweisungswarteschlange 204 unmittelbar nach der Kopfanweisung ist. Wenn in diesem Beispiel der Anweisungsplaner 212 versucht, Anweisungen aus dieser Anweisungswarteschlange 204 (z.B. Anweisungswarteschlange 0) auszuwählen, bewertet der Anweisungsplaner 212 nacheinander Anweisungen 3 bis 9, bis eine der folgenden Bedingungen erfüllt ist: (a) er genug betriebsbereite Anweisungen zum Anfüllen der Pipelines (z.B. eine pro Pipeline) ausgewählt hat, (b) er die Höchstzahl von Anweisungen aus dieser Warteschlange ausgewählt hat (wenn dieser Anweisungswarteschlange ein Höchstwert zugewiesen worden ist), oder (c) er Anweisung 9 bewertet hat (z.B. er die Höchstzahl von Anweisungen für diese Warteschlange bewertet hat). Sobald eine dieser Bedingungen erfüllt ist, hört der Anweisungsplaner 212 auf, in der Anweisungswarteschlange nach Anweisungen zur Ausgabe zu suchen. Wenn Bedingung (a) erfüllt ist, kann der Anweisungsplaner 212 die ausgewählten Anweisungen an die Funktionseinheit 110 ausgeben. Wenn jedoch Bedingungen (b) oder (c) erfüllt sind, kann der Anweisungsplaner 212 zur Anweisungswarteschlange mit der nächstniedrigeren Priorität fortschreiten (wenn es eine Anweisungswarteschlange mit niedrigerer Priorität gibt), um nach zusätzlichen Anweisungen zur Ausgabe an die Funktionseinheit 110 zu suchen.
-
Es wird nunmehr auf 4 Bezug genommen, die ein Verfahren 400 darstellt, das durch den Anweisungsplaner 212 der 2 zum Auswählen von Anweisungen aus den Anweisungswarteschlangen 204-210 zur Ausgabe an eine Funktionseinheit 110 durchgeführt werden kann. In dem Verfahren 400 der 4 durchsucht der Anweisungsplaner 212 die Anweisungswarteschlangen 204-210 in Prioritätsreihenfolge nach betriebsbereiten Anweisungen zur Ausgabe an die Funktionseinheit 110.
-
Der Anweisungsplaner 212 kann mit dem Durchsuchen einer bestimmten Warteschlange aufhören, wenn irgendeine der folgenden Bedingungen erfüllt ist: (a) die Höchstzahl von Anweisungen ist ausgewählt worden (z.B. die Anzahl ausgewählter Anweisungen ist gleich der Anzahl von Pipelines in der Funktionseinheit); (b) die Höchstzahl von Anweisungen für die bestimmte Warteschlange ist ausgewählt worden (z.B. eine Anweisungswarteschlange kann eine Begrenzung der Anzahl von Anweisungen aufweisen, die aus dieser Anweisungswarteschlange ausgewählt werden können); und (c) es ist die Höchstzahl von Anweisungen für die bestimmte Warteschlange bewertet worden (z.B. eine Anweisungswarteschlange kann eine Begrenzung der Anzahl von Anweisungen in dieser Anweisungswarteschlange aufweisen, die in einem Taktzyklus bewertet werden können). Wenn Bedingung (a) erfüllt ist, kann der Anweisungsplaner 212 die ausgewählten Anweisungen an die Funktionseinheit 110 ausgeben. Wenn jedoch Bedingung (b) oder (c) erfüllt ist, kann der Anweisungsplaner 212 zu der Anweisungswarteschlange mit der nächsthöheren Priorität fortschreiten, um nach betriebsbereiten Anweisungen zur Ausgabe zu suchen.
-
Bedingung (b) kann nur zutreffen, wenn der durchsuchten bestimmten Warteschlange eine Begrenzung der Anzahl ausgewählter Anweisungen auferlegt worden ist. Auf ähnliche Weise kann Bedingung (c) nur zutreffen, wenn eine Begrenzung der Anzahl von Anweisungen, die bewertet werden können, der bestimmten durchsuchten Warteschlange auferlegt worden ist.
-
Dies wird ausführlicher unten unter Bezugnahme auf Schritte 402 bis 426 beschrieben.
-
In Schritt 402 greift der Anweisungsplaner 212 auf die Anweisungswarteschlange mit der höchsten Priorität zu. Unter Verwendung von 2 als Beispiel greift, wenn Anweisungswarteschlangen 204-210 in der folgenden Reihenfolge von der höchsten Priorität zur niedrigsten Priorität priorisiert sind - Anweisungswarteschlange 0, Anweisungswarteschlange 1, Anweisungswarteschlange 2 und Anweisungswarteschlange 3 - der Anweisungsplaner 212 auf Anweisungswarteschlange 0 zu. Sobald der Anweisungsplaner 212 auf die Anweisungswarteschlange mit der höchsten Priorität zugreift, schreitet das Verfahren 400 zu Schritt 404 fort.
-
Im Schritt 404 bewertet der Anweisungsplaner 212 die Start- oder Kopfanweisung, um zu bestimmen, ob sie zur Ausgabe an die Funktionseinheit 110 ausgewählt werden sollte. Wie oben unter Bezugnahme auf 3 beschrieben, kann in einigen Fällen die Kopfanweisung die älteste nichtausgegebene Anweisung in der Anweisungswarteschlange sein (z.B. Anweisung 2 der 3). In anderen Fällen kann die Kopfanweisung die älteste betriebsbereite nichtausgegebene Anweisung in der Anweisungswarteschlange sein (z.B. Anweisung 3 der 3). Sobald der Anweisungsplaner die Kopfanweisung bewertet hat, schreitet das Verfahren 400 zum Schritt 406 fort.
-
Im Schritt 406 bestimmt der Anweisungsplaner 212, ob die Anweisung, die im Schritt 404 bewertet wurde, betriebsbereit ist (z.B. bereit ist, zur Ausführung an die Funktionseinheit 110 ausgegeben zu werden), und nicht ausgegeben ist (z.B. nicht schon an die Funktionseinheit 110 zur Ausführung ausgegeben worden ist). Wenn die Anweisung betriebsbereit und nicht ausgegeben ist, dann schreitet das Verfahren zu Schritt 408 fort. Wenn jedoch die Anweisung nicht betriebsbereit oder schon ausgegeben ist, dann schreitet das Verfahren zu Schritt 420 fort.
-
In Schritt 408 wählt der Anweisungsplaner 212 die Anweisung, die im Schritt 404 bewertet wurde, zur Ausgabe an die Funktionseinheit 110 aus und aktualisiert den Anweisungswarteschlangenzähler. Der Anweisungswarteschlangenzähler verfolgt die Anzahl von Anweisungen, die aus der Anweisungswarteschlange ausgewählt worden sind, auf die gegenwärtig zugegriffen wird (die „aktuelle Anweisungswarteschlange“). In einigen Fällen kann ein Aktualisieren des Anweisungswarteschlangenzählers ein Erhöhen des Anweisungswarteschlangenzählers umfassen. Sobald der Anweisungswarteschlangenzähler aktualisiert ist, schreitet das Verfahren 400 zu Schritt 410 fort.
-
Im Schritt 410 aktualisiert der Anweisungsplaner 212 einen ausgewählten Anweisungszähler. Der ausgewählte Anweisungszähler verfolgt die Anzahl von Anweisungen, die zur Ausgabe aus allen Anweisungswarteschlangen ausgewählt worden sind. In einigen Fällen umfasst das Aktualisieren des ausgewählten Anweisungszählers ein Erhöhen des ausgewählten Anweisungszählers. Sobald der ausgewählte Anweisungszähler aktualisiert ist, schreitet das Verfahren 400 zu Schritt 412 fort.
-
Im Schritt 412 bestimmt der Anweisungsplaner 212, ob eine Höchstzahl von Anweisungen aus allen Anweisungswarteschlangen ausgewählt worden ist. Die Höchstzahl von Anweisungen, die in jedem Taktzyklus ausgewählt werden kann, ist typischerweise gleich der Anzahl von Pipelines (z.B. Pipelines 214-220) in der zugehörigen Funktionseinheit 110. Das ist so, da nur eine Anweisung an jede Pipeline (z.B. Pipelines 214-220) in einem Taktzyklus ausgegeben werden kann. Dementsprechend kann, wenn die Funktionseinheit 110 vier Pipelines 214-220 wie in 2 gezeigt aufweist, die Höchstzahl von Anweisungen gleich vier sein.
-
Ein Bestimmen, ob die Höchstzahl von Anweisungen ausgewählt worden ist, kann Vergleichen des ausgewählten Anweisungszählers mit der Anzahl von Pipelines umfassen. Wenn der ausgewählte Anweisungszähler gleich der Anzahl von Pipelines ist, dann hört der Anweisungsplaner 212 auf, nach mehr Anweisungen zu suchen und gibt die ausgewählten Anweisungen an die Pipelines aus. Wenn jedoch der ausgewählte Anweisungszähler weniger als die Anzahl von Pipelines ist, dann kann der Anweisungsplaner 212 ferner nach an die Funktionseinheit 110 auszugebenden Anweisungen suchen.
-
Wenn bestimmt wird, dass die Höchstzahl von Anweisungen ausgewählt worden ist, dann schreitet das Verfahren 400 zu Schritt 414 fort. Wenn jedoch bestimmt wird, dass die Höchstzahl von Anweisungen nicht ausgewählt worden ist, dann schreitet das Verfahren 400 zu Schritt 418 fort.
-
Im Schritt 414 werden die ausgewählten Anweisungen an die Funktionseinheit 110 zur Ausführung ausgegeben. In manchen Fällen versucht der Anweisungsplaner 212, eine ausgewählte Anweisung zu jeder der Pipelines 214-220 der Funktionseinheit 110 auszugeben. Wenn es beispielsweise vier Pipelines gibt, wie in 2 gezeigt, und vier Anweisungen ausgewählt wurden, dann wird eine ausgewählte Anweisung zu jeder Pipeline ausgegeben. Wenn es jedoch vier Pipelines gibt und nur drei Anweisungen ausgewählt wurden, dann wird eine ausgewählte Anweisung an jede von drei der Pipelines ausgegeben.
-
Es spielt allgemein keine Rolle, welche Anweisung an welche Pipeline ausgegeben wird. In manchen Fällen kann es jedoch nützlich sein, Anweisungen, die zusätzliche oder besondere Ressourcen erfordern, an eine bestimmte Pipeline oder Menge von Pipelines auszugeben.
-
Beispielsweise kann es in manchen Fällen nützlich sein, Control-Transfer-Anweisungen wie beispielsweise Zweiganweisungen an eine bestimmte Pipeline oder Menge von Pipelines auszugeben, um die Kosten von Buchhaltung und Synchronisation zwischen den verfügbaren Pipelines zu verringern. Insbesondere können Control-Transfer-Anweisungen an eine bestimmte Pipeline ausgegeben werden, um die zwischen den Pipelines erforderliche Buchhaltung und Synchronisation zum Verfolgen des „Zusammenquetschens“ von Control-Transfer-Anweisungen zu minimieren und/oder beseitigen (sollten ihre Eingangsoperanden nicht tatsächlich zur Ausführungszeit bereit sein); und verhindern, dass jüngere Control-Transfer-Anweisungen ältere Control-Transfer-Anweisungen überholen.
-
In Schritt 416 wird der auswählte Anweisungszähler rückgesetzt (z.B. auf null gesetzt). Sobald der Anweisungszähler rückgesetzt worden ist, endet das Verfahren 400.
-
Im Schritt 418 bestimmt der Anweisungsplaner 212, nachdem eine Anweisung zur Ausgabe ausgewählt worden ist und bestimmt worden ist, dass die Höchstzahl von Anweisungen aus allen Anweisungswarteschlangen noch nicht ausgewählt worden ist, ob die Höchstzahl von Anweisungen aus der Anweisungswarteschlange ausgewählt worden ist, auf die gegenwärtig zugegriffen wird.
-
Ein Bestimmen, ob die Höchstzahl von Anweisungen für die Anweisungswarteschlange ausgewählt worden ist, auf die gegenwärtig zugegriffen wird, kann ein Vergleichen des Anweisungswarteschlangenzählers mit der Höchstzahl von Anweisungen umfassen, die aus der aktuellen Anweisungswarteschlange ausgewählt worden sein können. Wenn der Anweisungswarteschlangenzähler gleich der Höchstzahl von Anweisungen ist, dann kann der Anweisungsplaner 212 aufhören, nach mehr Anweisungen aus dieser Anweisungswarteschlange zu suchen. Wenn jedoch der Anweisungswarteschlangezähler weniger als die Höchstzahl von Anweisungen ist, kann der Anweisungsplaner 212 ferner nach Anweisungen aus dieser Anweisungswarteschlange zum Ausgeben an die Funktionseinheit 110 suchen.
-
Wenn bestimmt wird, dass die Höchstzahl von Anweisungen aus dieser Anweisungswarteschlange ausgewählt worden ist, dann schreitet das Verfahren 400 zum Schritt 424 fort, wo der Anweisungsplaner 212 ferner nach Anweisungen aus einer anderen Anweisungswarteschlange suchen kann. Wenn jedoch bestimmt wird, dass die Höchstzahl von Anweisungen aus dieser Anweisungswarteschlange nicht ausgewählt worden ist, dann schreitet das Verfahren 400 zum Schritt 420 fort, wo der Anweisungsplaner 212 ferner nach Anweisungen aus der aktuellen Anweisungswarteschlange suchen kann.
-
Schritt 418 ist wahlfrei. Insbesondere gilt er nur für eine Anweisungswarteschlange, wo die Anzahl von Anweisungen, die aus dieser Anweisungswarteschlange in einem bestimmten Taktzyklus ausgewählt werden kann, begrenzt worden ist. Wenn die Anzahl von Anweisungen, die aus der aktuellen Anweisungswarteschlange ausgewählt werden können, nicht begrenzt worden ist, dann wird der Schritt 418 möglicherweise nicht ausgeführt und das Verfahren 400 kann direkt zum Schritt 420 fortschreiten.
-
Im Schritt 420 bestimmt der Anweisungsplaner 212, nachdem eine Anweisung zur Ausgabe ausgewählt worden ist und bestimmt worden ist, dass die Höchstzahl von Anweisungen aus allen Anweisungen nicht ausgewählt worden ist und die Höchstzahl von Anweisungen aus der aktuellen Anweisungswarteschlange nicht ausgewählt worden ist; oder nachdem eine Anweisung bewertet aber nicht ausgewählt worden ist; ob die jüngstens bewertete Anweisung die Abschlussanweisung ist. Wie oben beschrieben, ist die Abschlussanweisung die (Wi-1)-te Anweisung nach der Kopfanweisung, wobei Wi die Höchstzahl von Anweisungen ist, die in der i-ten Anweisungswarteschlange in einem Taktzyklus bewertet werden kann. Wenn die jüngstens bewertete Anweisung die Abschlussanweisung ist, dann ist die Höchstzahl von Anweisungen, die in der aktuellen Anweisungswarteschlange bewertet werden kann, erreicht worden.
-
Wenn bestimmt wird, dass die Höchstzahl von Anweisungen bewertet worden ist, dann schreitet das Verfahren 400 zum Schritt 424 fort, bei dem der Anweisungsplaner 212 ferner nach Anweisungen aus einer anderen Anweisungswarteschlange suchen kann. Wenn jedoch bestimmt wird, dass die Höchstzahl von Anweisungen nicht bewertet worden ist, dann schreitet das Verfahren 400 zu Schritt 422 fort, bei dem der Anweisungsplaner 212 ferner nach Anweisungen aus dieser Anweisungswarteschlange sucht.
-
Schritt 420 ist optional. Insbesondere gilt er nur für diejenigen Anweisungswarteschlangen, wo eine Begrenzung der Anzahl von Anweisungen auferlegt ist, die in einem Taktzyklus bewertet werden können. Wenn die Anzahl von Anweisungen, die in der aktuellen Anweisungswarteschlange bewertet werden können, nicht begrenzt worden ist, dann wird der Schritt 420 möglicherweise nicht ausgeführt und das Verfahren kann direkt zu Schritt 422 fortschreiten.
-
Im Schritt 422 wird die nächste Anweisung in der aktuellen Anweisungswarteschlange bewertet. In manchen Fällen ist die nächste Anweisung die Anweisung in der aktuellen Anweisungswarteschlange unmittelbar nach der jüngstens bewerteten Anweisung. Sobald die nächste Anweisung bewertet worden ist, schreitet das Verfahren zum Schritt 406 zurück.
-
In Schritt 424 bestimmt der Anweisungsplaner 412, nachdem (a) eine Anweisung zur Ausgabe ausgewählt worden ist und bestimmt worden ist, dass die Höchstzahl von Anweisungen aus allen Anweisungswarteschlangen nicht ausgewählt worden ist, aber die Höchstzahl von Anweisungen aus der aktuellen Anweisungswarteschlange ausgewählt worden ist; oder (b) die Höchstzahl von Anweisungen für die aktuelle Anweisungswarteschlange bewertet worden ist, ob es irgendwelche Anweisungswarteschlangen gibt, deren Priorität niedriger als die der aktuellen Anweisungswarteschlange ist.
-
Falls es wenigstens eine Anweisungswarteschlange niedrigerer Priorität als die aktuelle Anweisungswarteschlange gibt, schreitet das Verfahren 400 zu Schritt 426 fort, wo der Anweisungsplaner 212 nach Anweisungen in der Anweisungswarteschlange der nächsthöheren Priorität sucht. Falls es jedoch keine weiteren Anweisungswarteschlangen geringerer Priorität als die aktuelle Anweisungswarteschlange gibt, schreitet das Verfahren 400 zum Schritt 414 fort, wo die ausgewählten Anweisungen an die Funktionseinheit 110 ausgegeben werden.
-
Im Schritt 426 greift der Anweisungsplaner 212 auf die Anweisungswarteschlange der nächsthöheren Priorität zu der aktuellen Anweisungswarteschlange zu. Sobald der Anweisungsplaner 212 auf die Anweisungswarteschlange der nächsthöheren Priorität zugegriffen hat, schreitet das Verfahren zum Schritt 404 fort, wo die Anweisungen in der Anweisungswarteschlange bewertet werden, um zu bestimmen, ob sie zur Ausgabe an die Funktionseinheit 110 geeignet sind.
-
Das Verfahren 400 kann in jedem Taktzyklus wiederholt werden.
-
Während das Verfahren 400 beschreibt, dass der Anweisungsplaner 212 sequentiell basierend auf Priorität auf die Warteschlangen zugreift und die Anweisungen in einer bestimmten Warteschlange sequentiell bewertet, kann in anderen Beispielen der Anweisungsplaner Hardware umfassen, die: (i) die Bewertung von Anweisungen in einer bestimmten Warteschlange beschleunigt, indem sie dem Anweisungsplaner 212 erlaubt, Informationen über die nächste Anweisung in der Warteschlange zu bestimmen, während er die aktuelle Anweisung bewertet; (ii) ihm erlaubt, mehrere Anweisungen in einer Warteschlange parallel zu bewerten; und/oder (iii) ihm erlaubt, auf Anweisungen zuzugreifen und sie in mehreren Warteschlangen parallel zu bewerten.
-
In anderen Beispielen kann der Anweisungsplaner 212 standardmäßige Auswahllogik (z.B. wie in „Delay Evaluation of Issue Queue in Superscalar Processors with Banking Tag RAM and Correct Critical Path Identification“ (Laufzeitauswertung von Ausgabewarteschlange in Superskalarprozessoren mit Banking-Tag-RAM und Kennzeichnung des korrekten kritischen Weges) von Yamaguchi et al., veröffentlicht in IEICE TRANS. INF. & SYST., BAND E95-D, NR.9 SEPT 2012) zum Auswählen von Anweisungen aus innerhalb jeder Warteschlange benutzen, so dass insgesamt N Anweisungen je Zyklus ausgewählt werden (einer für jede Pipeline). Während die oben beschriebenen Beispiele Out-of-Order-Singlethreaded-Prozessoren betreffen, können die hier beschriebenen Verfahren und Grundsätze gleicherweise auf Out-of-Order- Multithreaded-Prozessoren angewandt werden.
-
Es wird nunmehr auf 5 Bezug genommen, die ein Schaltschema eines Out-of-Order-Multithreaded-Prozessors 500 darstellt. Der Prozessor 500 umfasst zwei Threads 502 und 504, die hier als Thread 0 bzw. Thread 1 bezeichnet werden. Jeder Thread 502 und 504 umfasst eine Abrufstufe 506 oder 508, eine Decodier- und Umbenennungsstufe 510 oder 512, einen Neuordnungspuffer 514 oder 516, eine Commit-Stufe 518 oder 520 und einen Zweigprädiktor 522 oder 524, wie oben in Bezug auf 1 beschrieben. Die Threads 502 und 504 teilen sich die Reservierungsstationen 526a, 526b und 526c und Funktionseinheiten 528a, 528b und 528c wie oben in Bezug auf 1 beschrieben. Wie ebenfalls oben beschrieben, kann jede Funktionseinheit 528a, 528b und 528c eine oder mehrere (nicht gezeigte) Pipelines zum Ausführen der an die Funktionseinheit 528a, 528b oder 528c ausgegebenen Anweisungen umfassen.
-
Jede Decodier- und Umbenennungsstufe 510 und 512 analysiert jede abgerufene Anweisung und liefert dann die Anweisung an die zutreffende Reservierungsstation 526a, 526b oder 526c ab. Entsprechend den oben beschriebenen Grundsätzen und Verfahren in Bezug auf 2 bis 4 sortiert jede Reservierungsstation 526a, 526b oder 526c die empfangenen Anweisungen in eine Mehrzahl von Kategorien basierend auf dem Anweisungstyp; speichert jede Kategorie von Anweisungen in eine getrennte Anweisungswarteschlange ein; wählt Anweisungen aus den Anweisungswarteschlangen auf eine Weise, die gewisse Anweisungstypen gegenüber anderen Anweisungstypen priorisiert, selbst wenn sie jünger als die anderen Anweisungen sind; und gibt die ausgewählten Anweisungen an die zugehörige Funktionseinheit 528a, 528b oder 528c aus.
-
In manchen Fällen kann jeder Thread eine getrennte Menge Kategorien und assoziierten Anweisungswarteschlangen aufweisen, obwohl die Mengen von Kategorien die gleichen für jeden Thread sein können (z.B. eine Kategorie für Control-Transfer-Anweisungen, eine Kategorie für Adresserzeugungsanweisungen, eine Kategorie für Flagsetzanweisungen und eine Kategorie für Universalanweisungen). Ein Beispiel dieser verschiedenen Warteschlangen ist in der oberen schematischen Darstellung 601 in 6 gezeigt. In diesem Beispiel gibt es zwei Threads, Thread 0 und Thread 1 und drei Warteschlangen 602a-606a, 602b-606b für jeden Thread, eine für Zweiganweisungen (Warteschlangen 602a, 602b), eine für Adresserzeugungsanweisungen (Warteschlangen 604a, 604b) und eine für Universalanweisungen (GP - General Purpose) (Warteschlangen 606a, 606b). In diesen Fällen kann es einen Anweisungsplaner für jeden Thread geben, der Anweisungen aus seinen assoziierten Anweisungswarteschlangen gemäß den oben unter Bezugnahme auf 2 bis 4 beschriebenen Grundsätzen auswählt. In diesen Fällen können die Reservierungsstationen 526a, 526b und 526c auch eine (nicht gezeigte) Arbitrierungseinheit umfassen, die Anweisungen aus den zwei Threads entsprechend einem Satz Regeln auswählt. Beispielsweise kann die Arbitrierungseinheit Anweisungen aus den zwei Threads basierend darauf auswählen, wie spekulativ die Anweisungen jedes Threads sind, wie in der ebenfalls anhängigen UK-Patentanmeldung „ALLOCATING RESOURCES TO THREADS BASED ON SPECULATION METRIC“ (Zuordnen von Ressourcen zu Threads basierend auf Spekulationsmetrik) Jackson et al., eingereicht am 21. Januar 2013 beschrieben.
-
In einem beispielhaften Szenario für einen Multithreaded-Prozessor (oder Prozessorkern) kann es zwei Threads (Thread0 und Thread1) und vier Warteschlangen für Thread0 und vier Warteschlangen für Thread1 geben (z.B. eine Warteschlange für jede von vier Kategorien: Control-Transfer-Anweisungen, Adresserzeugungsanweisungen, Flagsetzanweisungen und Universalanweisungen). In diesem Beispiel kann es vier Pipelines geben, die zwischen Thread0 und Thread1 geteilt werden, und so stehen allgemein zwei Pipelines für Thread0 zur Verfügung und zwei Pipelines für Thread1 zur Verfügung.
-
Beginnend mit Thread0 kann eine Anweisung aus jeder Warteschlange in jede der zwei für Thread0 verfügbaren Pipelines ausgegeben werden, oder wenn es zusätzliche betriebsbereite Anweisungen in einer Warteschlange höherer Priorität gibt, kann mehr als eine Anweisung aus dieser Warteschlange ausgegeben werden, mit dem Ergebnis, dass keine Anweisungen aus einer oder mehreren Warteschlangen niedrigster Priorität ausgegeben werden (z.B. eine Anweisung aus der Warteschlange höchster Priorität, eine Anweisung aus der Warteschlange zweithöchster Priorität und keine Anweisungen aus den übrigen zwei Warteschlangen niedrigerer Priorität). Auf ähnliche Weise werden Anweisungen für Thread1 aus einer oder mehreren der vier Warteschlangen für Thread1 basierend auf der relativen Priorität dieser Warteschlangen ausgegeben. Wenn kein Thread genügend betriebsbereite Anweisungen aufweist, nimmt der andere Thread seine Pipelines an (z.B. wenn Thread0 nur eine betriebsbereite Anweisung aufweist, kann Thread1 drei Anweisungen ausgeben).
-
Obwohl dies als Ausgeben betriebsbereiter Anweisungen aus den getrennten Warteschlangen in Prioritätsreihenfolge beschrieben wird, ist dies konzeptmäßig dem Kombinieren aller wählbaren Anweisungen für einen Thread in eine Warteschlange, wobei die Anweisungen in Prioritätsreihenfolge ihrer Kategorie angeordnet sind, und Ausgeben aus dieser Warteschlange gleichwertig. Dieses Verfahren wird für jeden Thread durchgeführt und ist grafisch in der unteren schematischen Darstellung 610 der 6 dargestellt. In dieser unteren Darstellung umfasst jede konzentrierte Warteschlange 611a, 611b für jeden Thread betriebsbereite Anweisungen aus jeder der getrennten Warteschlangen 602a-606a, 602b-606b (in der oberen Darstellung 601), wobei die Anweisungen basierend auf der relativen Priorität der getrennten Warteschlangen geordnet sind, z.B. betriebsbereite Zweiganweisungen 612a, 612b (aus Warteschlangen 602a, 602b) gefolgt von betriebsbereiten Adresserzeugungsanweisungen 614a, 614b (aus Warteschlangen 604a, 604b) gefolgt von betriebsbereiten Universalanweisungen 616a, 616b (aus Warteschlangen 606a, 606b).
-
Im Allgemeinen spielt es keine Rolle, welche Anweisung an welche Pipeline ausgegeben wird. In manchen Fällen können jedoch Anweisungen aus einem bestimmten Thread an die Pipelines in einer vorbestimmten Reihenfolge ausgegeben werden. Wenn es beispielsweise vier Pipelines nummeriert 0 bis 3 gibt, können jegliche aus dem ersten Thread (z.B. Thread0) ausgewählten Anweisungen zuerst an die erste Pipeline ausgegeben werden (z.B. Pipeline 0) und dann an nachfolgende Pipelines (z.B. Pipeline 1) in steigender Reihenfolge; und jegliche aus dem zweiten Thread (z.B. Thread1) ausgewählten Anweisungen können zuerst an die letzte Pipeline ausgegeben werden (z.B. Pipeline 3), und dann an nachfolgende Pipelines (z.B. Pipeline 2) in abnehmender Reihenfolge.
-
Da jede Pipeline in den Funktionseinheiten 528a, 528b und 528c mit Anweisungen aus mehr als einem Thread enden kann, wenn der Anweisungsplaner Anweisungen an die Pipelines ausgibt, kann er auch die Pipelines mit einer Anzeige versehen, mit welchem Thread die Anweisung verbunden ist. Wenn dann eine falsch vorhergesagte Anweisung auftritt, die eine Rückspulung der Pipelines erfordert, können die Pipelines nur diejenigen Anweisungen rückspulen oder ausspülen, die mit dem Thread mit der falsch vorhergesagten Anweisung verbunden sind, anstatt alle Anweisungen rückzuspulen. In einigen Fällen kann zugelassen werden, dass die falsch vorhergesagte Anweisung in der Pipeline fortläuft, bis alle der Anweisungen bis zu der falsch vorhergesagten Anweisung ausgeführt worden sind. An dieser Stelle sind alle Anweisungen in den Pipelines und der Reservierungsstation 526a, 526b oder 526c von dem bestimmten Thread nach der falsch vorhergesagten Anweisung vorgekommen und müssen rückgespult oder ausgespült werden.
-
In einer Variation der oben beschriebenen Verfahren und für Multithreaded-Prozessoren (oder Prozessorkerne) können Anweisungen derselben Kategorie aber für unterschiedliche Threads kombiniert werden, um eine einzelne Warteschlange für die Kategorie durch Verschachteln der Anweisungen aus den getrennten Warteschlangen für jede Kategorie zu bilden. Dies kann unter Bezugnahme auf 7 beschrieben werden. In der oberen Darstellung 601 der 6 (oben beschrieben) gibt es eine Warteschlange für jeden Thread und für jede Kategorie; wie jedoch in der oberen Darstellung 701 in 7 gezeigt, gibt es eine Warteschlange für alle Threads für jede Kategorie: eine Warteschlange für Zweiganweisungen 602c, eine Warteschlange für Adresserzeugungsanweisungen 604c und eine Warteschlange für Universalanweisungen 606c. Wie durch die Bänderung an jeder Warteschlange 602c, 604c, 606c in 7 angedeutet, umfassen diese Warteschlangen verschachtelte Anweisungen aus den zwei Threads Thread0 und Thread1.
-
Durch Kombinieren der Warteschlangen für die Threads auf diese Weise (d.h. durch Verschachteln) ist es möglich, Anweisungen einer bestimmten Kategorie (aus Thread0 sowie Thread1) gegenüber allen anderen Anweisungen aus einem der Threads zu priorisieren. Beim Auswählen von Anweisungen zum Planen bewertet der Anweisungsplaner die verschachtelten Warteschlangen in Reihenfolge abnehmender Priorität und wählt Anweisungen zur Ausgabe unter Verwendung der oben beschriebenen Verfahren aus.
-
Dies kann unter Verwendung des gleichen beispielhaften Szenarios wie oben mit zwei Threads (Thread0 und Thread 1), vier Pipelines, vier Warteschlangen für Thread0 und vier Warteschlangen für Thread1 weiter beschrieben werden. Die vier Warteschlangen werden zwischen Thread0 und Thread1 geteilt, aber es gibt keine Reservierung von zwei Pipelines für Thread0 und zwei für Thread 1.
-
Bei dem Bestimmen, welche Anweisungen auszugeben sind, werden die verschachtelten Warteschlangen in Reihenfolge abnehmender Priorität bewertet, so dass beispielsweise, wenn eine Zweiganweisung aus Thread0 und drei Zweiganweisungen aus Thread1 zur Ausgabe bereit wären, dann würden alle vier Zweiganweisungen in diesem Zyklus ausgegeben werden. Demgegenüber würde ohne Verschachteln eine Zweiganweisung aus Thread0, dann eine Adresserzeugungsanweisung aus Thread0 und zwei Zweiganweisungen aus Thread1 ausgegeben werden.
-
Durch Verschachteln von Anweisungen aus jedem Thread besitzen beide Threads gleiche Priorität und Anweisungen werden basierend auf der relativen Priorität der Warteschlangen ausgegeben (oder den Kategorien, die die Warteschlangen definieren).
-
Auf ähnliche Weise wie in dem früheren Beispiel ist dies, obwohl es als Ausgeben von betriebsbereiten Anweisungen aus den getrennten Warteschlangen (602c, 604c, 606c) in Prioritätsreihenfolge beschrieben ist, konzeptmäßig dem Kombinieren aller wählbaren Anweisungen für alle Threads in eine Warteschlange gleichwertig; wobei die Anweisungen in Prioritätsordnung ihrer Kategorie angeordnet und verschachtelt werden (für die verschiedenen Threads innerhalb jeder Kategorie) und aus dieser Warteschlange ausgegeben werden. Dieser Vorgang ist grafisch in der unteren schematischen Darstellung 710 in 7 dargestellt. In dieser unteren Darstellung umfasst jede konzentrierte Warteschlange betriebsbereite Anweisungen aus jeder der getrennten Warteschlangen 602c-606c (in der oberen Darstellung 701), wobei die Anweisungen basierend auf der relativen Priorität der getrennten Warteschlangen geordnet sind, z.B. verschachtelte betriebsbereite Zweiganweisungen 702 (aus Warteschlange 602c) gefolgt von verschachtelten betriebsbereiten Adresserzeugungsanweisungen 704 (aus Warteschlange 604c) gefolgt von verschachtelten betriebsbereiten Universalanweisungen 706 (aus Warteschlange 606c).
-
Durch Verwenden der Verschachtelung von Anweisungen aus jedem Thread wie oben beschrieben können Ressourcen basierend auf dem Anweisungstyp (z.B. basierend auf der Kategorie) dediziert und Anweisungen priorisiert werden, während jedem Thread immer noch gleiche Priorität innerhalb einer Kategorie erteilt wird. Wenn ansonsten Verschachtelung nicht benutzt wird, können weniger kritische Anweisungen aus einem Thread vor Anweisungen mit höherer Priorität aus einem anderen Thread ausgegeben werden, da der Anweisungsplaner versucht, Ressourcen gleich unter Threads zu teilen, es sei denn, es gibt nicht genügend betriebsbereite Anweisungen. Das Verschachteln, wie unter Bezugnahme auf 6 und 7 beschrieben, kann daher verbesserte Leistung des Prozessors ergeben.
-
Es versteht sich, dass es keine wirkliche verschachtelte Warteschlange in Hardware geben kann, wenn die oben beschriebenen Verfahren ausgeführt werden; jedoch sind die verschachtelten Warteschlangen konzeptmäßig auf die Weise beschrieben, in der betriebsbereite Anweisungen zur Ausgabe durch den Anweisungsplaner ausgewählt werden.
-
Jeder hier gegebene Bereichs- oder Vorrichtungswert kann erweitert oder geändert werden, ohne die gesuchte Wirkung zu verlieren, wie dem Fachmann offenbar sein wird.
-
Es versteht sich, dass die oben beschriebenen Nutzen und Vorteile auf eine Ausführungsform bezogen sein können oder auf mehrere Ausführungsformen bezogen sein können. Die Ausführungsformen sind nicht auf diejenigen begrenzt, die irgendwelche oder alle der angegebenen Probleme lösen, oder diejenigen, die irgendwelche oder alle der angegebenen Nutzen und Vorteile aufweisen.
-
Jeder Verweis auf „einen“ Gegenstand bezieht sich auf einen oder mehrere dieser Gegenstände. Der Begriff „umfassend“ wird hier benutzt, einschließlich der gekennzeichneten Verfahrensblöcke oder Elemente enthaltend zu bedeuten, aber dass diese Blöcke oder Elemente nicht eine exklusive Liste umfassen und eine Vorrichtung zusätzliche Blöcke oder Elemente enthalten kann und ein Verfahren zusätzliche Blöcke oder Operationen enthalten kann.
-
Ein bestimmter Verweis auf „Logik“ bezieht sich auf eine Struktur, die eine Funktion oder Funktionen durchführt. Ein Beispiel von Logik schließt Schaltungen ein, die zum Durchführen dieser Funktion(en) angeordnet sind. Beispielsweise können solche Schaltungen Transistoren und/oder sonstige in einem Herstellungsvorgang verfügbare Hardwareelemente einschließen. Solche Transistoren und/oder sonstigen Elemente können benutzt werden, Schaltungen oder Strukturen zu bilden, die Speicherung implementieren und/oder enthalten wie beispielsweise Register, Flipflops, Riegel, Logikoperatoren wie beispielsweise Boolsche Operationen, mathematische Operatoren wie beispielsweise Addierer, Multiplizierer oder Verschieber, und Verknüpfen. Solche Elemente können als kundenspezifische Schaltungen oder Standard-Zellenbibliotheken, Makros oder auf anderen Abstraktionsebenen vorgesehen sein. Solche Elemente können in einer bestimmten Anordnung verknüpft sein. Logik kann Schaltungen umfassen, die eine feste Funktion aufweisen und Schaltungen können zum Durchführen einer Funktion oder Funktionen programmiert sein; solche Programmierung kann von einem Firmware- oder Software-Aktualisierungs- oder Steuerungsmechanismus bereitgestellt werden. Zum Durchführen einer Funktion gekennzeichnete Logik kann auch Logik einschließen, die eine Teilfunktion oder einen Teilprozess implementiert. In einem Beispiel weist Hardware-Logik Schaltungen auf, die eine Festfunktionsoperation oder Operationen, Zustandsmaschine oder Vorgang ausführen.
-
Die hier beschriebenen Schritte der Verfahren können in jeder geeigneten Reihenfolge ausgeführt werden, oder gleichzeitig wo zutreffend. Zusätzlich können einzelne Blöcke aus einem beliebigen der Verfahren gelöscht werden, ohne vom Wesen und Schutzbereich des hier beschriebenen Gegenstands abzuweichen. Aspekte von beliebigen der oben beschriebenen Beispiele können mit Aspekten von beliebigen der anderen beschriebenen Beispiele kombiniert werden, um weitere Beispiele zu bilden, ohne die gesuchte Wirkung zu verlieren. Wo Elemente der Figuren durch Pfeile verbunden gezeigt sind, versteht es sich, dass diese Pfeile nur einen beispielhaften Fluss von Kommunikationen (einschließlich von Daten- und Steuernachrichten) zwischen Elementen zeigen. Der Fluss zwischen Elementen kann in einer Richtung oder in beiden Richtungen stattfinden.
-
Es versteht sich, dass die obige Beschreibung einer bevorzugten Ausführungsform nur beispielhaft erteilt wird und dass durch den Fachmann verschiedene Abänderungen durchgeführt werden können. Obwohl verschiedene Ausführungsformen oben mit einem gewissen Grad an Bestimmtheit beschrieben worden sind, oder unter Bezugnahme auf eine oder mehrere einzelne Ausführungsformen, könnte der Fachmann zahlreiche Änderungen an den offenbarten Ausführungsformen durchführen, ohne vom Wesen oder Schutzumfang der vorliegenden Erfindung abzuweichen.