DE102014011332B4 - Priorisieren von anweisungen basierend auf typ - Google Patents

Priorisieren von anweisungen basierend auf typ Download PDF

Info

Publication number
DE102014011332B4
DE102014011332B4 DE102014011332.9A DE102014011332A DE102014011332B4 DE 102014011332 B4 DE102014011332 B4 DE 102014011332B4 DE 102014011332 A DE102014011332 A DE 102014011332A DE 102014011332 B4 DE102014011332 B4 DE 102014011332B4
Authority
DE
Germany
Prior art keywords
instruction
instructions
queue
queues
functional unit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
DE102014011332.9A
Other languages
English (en)
Other versions
DE102014011332A1 (de
Inventor
c/o Imagination Technologies Ltd. Khot Anand
c/o Imagination Technologies Ltd. Jackson Hugh
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.)
MIPS Tech LLC
Original Assignee
MIPS Tech LLC
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 MIPS Tech LLC filed Critical MIPS Tech LLC
Publication of DE102014011332A1 publication Critical patent/DE102014011332A1/de
Application granted granted Critical
Publication of DE102014011332B4 publication Critical patent/DE102014011332B4/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3856Reordering of instructions, e.g. using queues or age tags
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • 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
    • 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/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • 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/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3888Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple threads [SIMT] in parallel

Landscapes

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

Abstract

Verfahren zum Auswählen von Anweisungen zur Ausgabe an eine Funktionseinheit in einem Out-of-Order-Prozessor, wobei das Verfahren umfasst:Empfangen einer Mehrzahl von Anweisungen an einer Reservierungsstation, wobei jede Anweisung eine einer Mehrzahl von Anweisungstypen ist und in eine einer Mehrzahl von Kategorien basierend auf dem Anweisungstyp klassifiziert ist;Speichern an der Reservierungsstation jeder Anweisung in einer einer Mehrzahl von Anweisungswarteschlangen, wobei jede Anweisungswarteschlange mit einer der Mehrzahl von Kategorien assoziiert ist, wobei jeder Anweisungswarteschlange eine Priorität und eine Höchstzahl von in einem Taktzyklus bewerteten Anweisungen zugewiesen ist; undAuswählen an der Reservierungsstation von Anweisungen aus einer oder mehreren der Anweisungswarteschlangen zur Ausgabe an die Funktionseinheit in Reihenfolge der zugewiesenen Prioritäten, so dass Anweisungen basierend auf einer relativen Priorität der Mehrzahl von Anweisungstypen (400) ausgewählt werden;wobei das Auswählen von Anweisungen aus einer bestimmten Anweisungswarteschlange ein Bewerten in einem Taktzyklus von jeder von einer oder mehreren Anweisungen in der bestimmten Anweisungswarteschlange bis zur Höchstzahl von Anweisungen für diese bestimmte Warteschlange umfasst, um zu bestimmen, ob die Anweisung bereit ist und nicht schon ausgegeben worden ist (404, 406, 420, 422).

Description

  • 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 (Wi) nicht die Höchstzahl von Anweisungen (Wmax) ü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. i = 0 i = X 1 W i W max
    Figure DE102014011332B4_0001
  • 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.

Claims (19)

  1. Verfahren zum Auswählen von Anweisungen zur Ausgabe an eine Funktionseinheit in einem Out-of-Order-Prozessor, wobei das Verfahren umfasst: Empfangen einer Mehrzahl von Anweisungen an einer Reservierungsstation, wobei jede Anweisung eine einer Mehrzahl von Anweisungstypen ist und in eine einer Mehrzahl von Kategorien basierend auf dem Anweisungstyp klassifiziert ist; Speichern an der Reservierungsstation jeder Anweisung in einer einer Mehrzahl von Anweisungswarteschlangen, wobei jede Anweisungswarteschlange mit einer der Mehrzahl von Kategorien assoziiert ist, wobei jeder Anweisungswarteschlange eine Priorität und eine Höchstzahl von in einem Taktzyklus bewerteten Anweisungen zugewiesen ist; und Auswählen an der Reservierungsstation von Anweisungen aus einer oder mehreren der Anweisungswarteschlangen zur Ausgabe an die Funktionseinheit in Reihenfolge der zugewiesenen Prioritäten, so dass Anweisungen basierend auf einer relativen Priorität der Mehrzahl von Anweisungstypen (400) ausgewählt werden; wobei das Auswählen von Anweisungen aus einer bestimmten Anweisungswarteschlange ein Bewerten in einem Taktzyklus von jeder von einer oder mehreren Anweisungen in der bestimmten Anweisungswarteschlange bis zur Höchstzahl von Anweisungen für diese bestimmte Warteschlange umfasst, um zu bestimmen, ob die Anweisung bereit ist und nicht schon ausgegeben worden ist (404, 406, 420, 422).
  2. Verfahren nach Anspruch 1, wobei das Verfahren ferner ein Klassifizieren an einer von der Reservierungsstation und einer Decodier- und Umbenennungsstufe von jeder Anweisung in eine der Mehrzahl von Kategorien basierend auf dem Anweisungstyp umfasst.
  3. Verfahren nach Anspruch 1, wobei Anweisungen aus den Anweisungswarteschlangen in Reihenfolge der Prioritäten ausgewählt werden, bis eine Höchstzahl von Anweisungen ausgewählt worden ist (412).
  4. Verfahren nach Anspruch 3, wobei die Funktionseinheit eine oder mehrere Pipelines umfasst und die Höchstzahl von ausgewählten Anweisungen gleich der Anzahl von Pipelines ist.
  5. Verfahren nach Anspruch 1, wobei das Auswählen von Anweisungen aus einer bestimmten Anweisungswarteschlange ferner ein Herstellen eines die Anweisungen in einer bestimmten zu bewertenden Warteschlange abdeckenden Fensters umfasst, wobei das Fenster durch einen auf eine Kopfanweisung zeigenden Kopfzeiger und einen auf eine Abschlussanweisung zeigenden Abschlusszeiger definiert wird.
  6. Verfahren nach Anspruch 5, wobei die Kopfanweisung die älteste Anweisung in der bestimmten Anweisungswarteschlange ist, die nicht ausgegeben worden ist.
  7. Verfahren nach Anspruch 5, wobei die Kopfanweisung die älteste Anweisung in der bestimmten Anweisungswarteschlange ist, die bereit ist und nicht ausgegeben worden ist.
  8. Verfahren nach einem der Ansprüche 5 bis 7, wobei die Abschlussanweisung die (X-1)-te Anweisung in der bestimmten Anweisungswarteschlange nach der Kopfanweisung ist, wobei X die Höchstzahl von in der bestimmten Anweisungswarteschlange bewerteten Anweisungen ist.
  9. Verfahren nach einem beliebigen der Ansprüche 1 bis 8, wobei das Auswählen von Anweisungen aus einer bestimmten Anweisungswarteschlange ein Auswählen bis zu einer Höchstzahl von Anweisungen aus der bestimmten Anweisungswarteschlange umfasst.
  10. Verfahren nach einem beliebigen der Ansprüche 1 bis 9, wobei die Mehrzahl von Kategorien eine Kategorie für wenigstens eine von Control-Transfer-Anweisungen, Flagsetzanweisungen und Adresserzeugungsanweisungen umfasst.
  11. Verfahren nach einem beliebigen der Ansprüche 1 bis 10, wobei die Mehrzahl von Kategorien eine Kategorie für Control-Transfer-Anweisungen, eine Kategorie für Flagsetzanweisungen und eine Kategorie für Adresserzeugungsanweisungen umfasst.
  12. Verfahren nach Anspruch 10 oder Anspruch 11, wobei der mit der Kategorie für Control-Transfer-Anweisungen verbundenen Anweisungswarteschlange die höchste Priorität zugewiesen wird.
  13. Verfahren nach einem beliebigen der Ansprüche 1 bis 12, ferner umfassend ein Ausgeben an der Reservierungsstation der ausgewählten Anweisungen an die Funktionseinheit zur Ausführung.
  14. Verfahren nach Anspruch 13, wobei die Funktionseinheit eine oder mehrere Pipelines umfasst und das Ausgeben der ausgewählten Anweisung an die Funktionseinheit ein Ausgeben jeder ausgewählten Anweisung an eine der Pipelines umfasst.
  15. Verfahren nach einem beliebigen der Ansprüche 1 bis 14, wobei der Out-of-Order-Prozessor ein Multithreaded-Prozessor ist und Anweisungen aus den Anweisungswarteschlangen basierend auf einer relativen Priorität der Mehrzahl von Anweisungstypen ausgewählt werden und innerhalb eines Typs von Anweisungen Anweisungen aus allen Threads in dem Multithreaded-Prozessor ausgewählt werden.
  16. Reservierungsstation (108) zum Auswählen von Anweisungen zur Ausgabe an eine Funktionseinheit (110) in einem Out-of-Order-Prozessor (100), wobei die Reservierungsstation (108) umfasst: einen Anweisungsklassifizierer (202) ausgelegt zum Empfangen einer Mehrzahl von Anweisungen, wobei jede Anweisung eine einer Mehrzahl von Anweisungstypen ist und in eine einer Mehrzahl von Kategorien basierend auf dem Anweisungstyp klassifiziert ist; eine Mehrzahl von Anweisungswarteschlangen (204-210) in Verbindung mit dem Anweisungsklassifizierer (202), wobei jede Anweisungswarteschlange (204-210) zum Empfangen von Anweisungen von dem Anweisungsklassifizierer (202) ausgelegt ist, die in eine bestimmte Kategorie klassifiziert worden sind, und Speichern der empfangenen Anweisungen, wobei jeder Anweisungswarteschlange (204-210) eine Priorität und eine Höchstzahl von in einem Taktzyklus bewerteten Anweisungen zugewiesen ist; und einen Anweisungsplaner (212) in Verbindung mit jeder der Mehrzahl von Anweisungswarteschlangen (204-210), wobei der Anweisungsplaner (212) zum Auswählen von Anweisungen aus einer oder mehreren der Anweisungswarteschlangen (204-210) zur Ausgabe an die Funktionseinheit (110) in Reihenfolge der zugewiesenen Prioritäten ausgelegt ist, so dass Anweisungen basierend auf einer relativen Priorität der Mehrzahl von Anweisungstypen ausgewählt werden; wobei ein Auswählen von Anweisungen aus einer bestimmten Anweisungswarteschlange (204-210) ein Bewerten in einem Taktzyklus jeder von einer oder mehreren Anweisungen in der bestimmten Anweisungswarteschlange (204-210) bis zur Höchstzahl von Anweisungen für diese bestimmte Warteschlange umfasst, um zu bestimmen, ob die Anweisung bereit ist und nicht schon ausgegeben worden ist.
  17. Prozessor (100) umfassend die Reservierungsstation (108) nach Anspruch 16.
  18. Computerlesbares Speichermedium mit darauf codiertem computerlesbarem Programmcode zum Erzeugen eines Prozessors (100) umfassend die Reservierungsstation (108) nach Anspruch 16.
  19. Computerlesbares Speichermedium mit darauf codiertem computerlesbarem Programmcode zum Erzeugen eines Prozessors (100) ausgelegt zum Durchführen des Verfahrens nach einem der Ansprüche 1 bis 14.
DE102014011332.9A 2013-07-31 2014-07-30 Priorisieren von anweisungen basierend auf typ Active DE102014011332B4 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB1313674.2 2013-07-31
GB201313674A GB2510655B (en) 2013-07-31 2013-07-31 Prioritizing instructions based on type

Publications (2)

Publication Number Publication Date
DE102014011332A1 DE102014011332A1 (de) 2015-02-05
DE102014011332B4 true DE102014011332B4 (de) 2024-04-25

Family

ID=49167245

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102014011332.9A Active DE102014011332B4 (de) 2013-07-31 2014-07-30 Priorisieren von anweisungen basierend auf typ

Country Status (4)

Country Link
US (2) US9558001B2 (de)
CN (2) CN108170471B (de)
DE (1) DE102014011332B4 (de)
GB (1) GB2510655B (de)

Families Citing this family (79)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2015101827A1 (en) * 2013-12-31 2015-07-09 Mosys, Inc. Integrated main memory and coprocessor with low latency
US10031758B2 (en) * 2014-03-31 2018-07-24 Netronome Systems, Inc. Chained-instruction dispatcher
US9804845B2 (en) 2014-12-14 2017-10-31 Via Alliance Semiconductor Co., Ltd. Apparatus and method to preclude X86 special bus cycle load replays in an out-of-order processor
WO2016097800A1 (en) 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Power saving mechanism to reduce load replays in out-of-order processor
US10175984B2 (en) 2014-12-14 2019-01-08 Via Alliance Semiconductor Co., Ltd Apparatus and method to preclude non-core cache-dependent load replays in an out-of-order processor
US10146546B2 (en) 2014-12-14 2018-12-04 Via Alliance Semiconductor Co., Ltd Load replay precluding mechanism
US10108420B2 (en) 2014-12-14 2018-10-23 Via Alliance Semiconductor Co., Ltd Mechanism to preclude load replays dependent on long load cycles in an out-of-order processor
JP6286067B2 (ja) * 2014-12-14 2018-02-28 ヴィア アライアンス セミコンダクター カンパニー リミテッド アウトオブオーダープロセッサでの長いロードサイクルに依存するロードリプレイを除外するメカニズム
US10228944B2 (en) 2014-12-14 2019-03-12 Via Alliance Semiconductor Co., Ltd. Apparatus and method for programmable load replay preclusion
US10120689B2 (en) 2014-12-14 2018-11-06 Via Alliance Semiconductor Co., Ltd Mechanism to preclude load replays dependent on off-die control element access in an out-of-order processor
US10114646B2 (en) 2014-12-14 2018-10-30 Via Alliance Semiconductor Co., Ltd Programmable load replay precluding mechanism
US10146547B2 (en) 2014-12-14 2018-12-04 Via Alliance Semiconductor Co., Ltd. Apparatus and method to preclude non-core cache-dependent load replays in an out-of-order processor
WO2016097796A1 (en) * 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Mechanism to preclude i/o-dependent load replays in out-of-order processor
JP6286065B2 (ja) * 2014-12-14 2018-02-28 ヴィア アライアンス セミコンダクター カンパニー リミテッド アウトオブオーダープロセッサの書き込み結合メモリ領域アクセスに依存するロードリプレイを除外する装置及び方法
US10088881B2 (en) 2014-12-14 2018-10-02 Via Alliance Semiconductor Co., Ltd Mechanism to preclude I/O-dependent load replays in an out-of-order processor
US10146540B2 (en) 2014-12-14 2018-12-04 Via Alliance Semiconductor Co., Ltd Apparatus and method to preclude load replays dependent on write combining memory space access in an out-of-order processor
US10127046B2 (en) 2014-12-14 2018-11-13 Via Alliance Semiconductor Co., Ltd. Mechanism to preclude uncacheable-dependent load replays in out-of-order processor
KR101820221B1 (ko) 2014-12-14 2018-02-28 비아 얼라이언스 세미컨덕터 씨오., 엘티디. 프로그래머블 로드 리플레이 억제 메커니즘
US10108427B2 (en) 2014-12-14 2018-10-23 Via Alliance Semiconductor Co., Ltd Mechanism to preclude load replays dependent on fuse array access in an out-of-order processor
US10108421B2 (en) 2014-12-14 2018-10-23 Via Alliance Semiconductor Co., Ltd Mechanism to preclude shared ram-dependent load replays in an out-of-order processor
KR101819316B1 (ko) * 2014-12-14 2018-01-16 비아 얼라이언스 세미컨덕터 씨오., 엘티디. 비순차 프로세서에서 캐시 불가­의존 로드 리플레이를 억제하는 메커니즘
WO2016097815A1 (en) 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Apparatus and method to preclude x86 special bus cycle load replays in out-of-order processor
US10146539B2 (en) 2014-12-14 2018-12-04 Via Alliance Semiconductor Co., Ltd. Load replay precluding mechanism
US10108429B2 (en) 2014-12-14 2018-10-23 Via Alliance Semiconductor Co., Ltd Mechanism to preclude shared RAM-dependent load replays in an out-of-order processor
US10089112B2 (en) 2014-12-14 2018-10-02 Via Alliance Semiconductor Co., Ltd Mechanism to preclude load replays dependent on fuse array access in an out-of-order processor
US10083038B2 (en) 2014-12-14 2018-09-25 Via Alliance Semiconductor Co., Ltd Mechanism to preclude load replays dependent on page walks in an out-of-order processor
US9645827B2 (en) 2014-12-14 2017-05-09 Via Alliance Semiconductor Co., Ltd. Mechanism to preclude load replays dependent on page walks in an out-of-order processor
KR101819314B1 (ko) 2014-12-14 2018-01-16 비아 얼라이언스 세미컨덕터 씨오., 엘티디. 비순차 프로세서에서 오프­다이 제어 부재 접근에 따라 로드 리플레이를 억제하는 장치
KR101819315B1 (ko) 2014-12-14 2018-01-16 비아 얼라이언스 세미컨덕터 씨오., 엘티디. 비순차 프로세서에서 작성 결합 메모리 공간 접근에 따라 로드 리플레이를 억제하기 위한 장치 및 방법
CN104657114B (zh) 2015-03-03 2019-09-06 上海兆芯集成电路有限公司 并行化的多分派系统和用于排序队列仲裁的方法
US10346168B2 (en) 2015-06-26 2019-07-09 Microsoft Technology Licensing, Llc Decoupled processor instruction window and operand buffer
US11755484B2 (en) 2015-06-26 2023-09-12 Microsoft Technology Licensing, Llc Instruction block allocation
CN105117202B (zh) * 2015-09-25 2018-11-27 上海兆芯集成电路有限公司 具有融合保留站结构的微处理器
US10191748B2 (en) * 2015-11-30 2019-01-29 Intel IP Corporation Instruction and logic for in-order handling in an out-of-order processor
KR102526104B1 (ko) * 2016-03-25 2023-04-27 에스케이하이닉스 주식회사 데이터 저장 장치 및 그것의 동작 방법
US10089114B2 (en) * 2016-03-30 2018-10-02 Qualcomm Incorporated Multiple instruction issuance with parallel inter-group and intra-group picking
US20170286114A1 (en) * 2016-04-02 2017-10-05 Intel Corporation Processors, methods, and systems to allocate load and store buffers based on instruction type
US20170364356A1 (en) * 2016-06-16 2017-12-21 International Business Machines Corporation Techniques for implementing store instructions in a multi-slice processor architecture
US10318294B2 (en) 2016-06-20 2019-06-11 International Business Machines Corporation Operation of a multi-slice processor implementing dependency accumulation instruction sequencing
CN106227507B (zh) * 2016-07-11 2019-10-18 北京深鉴智能科技有限公司 计算系统及其控制器
US11086628B2 (en) * 2016-08-15 2021-08-10 Advanced Micro Devices, Inc. System and method for load and store queue allocations at address generation time
CN106484519B (zh) * 2016-10-11 2019-11-08 东南大学苏州研究院 异步线程重组方法及基于该方法的simt处理器
US11054884B2 (en) * 2016-12-12 2021-07-06 Intel Corporation Using network interface controller (NIC) queue depth for power state management
JP2018173747A (ja) * 2017-03-31 2018-11-08 パナソニック デバイスSunx株式会社 電子機器、センサシステム、コントローラ及びセンサユニット
US10977045B2 (en) 2017-11-29 2021-04-13 International Business Machines Corporation Priority instruction handling with optimized issue queue design
US10802829B2 (en) 2017-11-30 2020-10-13 International Business Machines Corporation Scalable dependency matrix with wake-up columns for long latency instructions in an out-of-order processor
US10929140B2 (en) 2017-11-30 2021-02-23 International Business Machines Corporation Scalable dependency matrix with a single summary bit in an out-of-order processor
US10564976B2 (en) 2017-11-30 2020-02-18 International Business Machines Corporation Scalable dependency matrix with multiple summary bits in an out-of-order processor
US10884753B2 (en) * 2017-11-30 2021-01-05 International Business Machines Corporation Issue queue with dynamic shifting between ports
US10572264B2 (en) 2017-11-30 2020-02-25 International Business Machines Corporation Completing coalesced global completion table entries in an out-of-order processor
US10922087B2 (en) 2017-11-30 2021-02-16 International Business Machines Corporation Block based allocation and deallocation of issue queue entries
US10564979B2 (en) * 2017-11-30 2020-02-18 International Business Machines Corporation Coalescing global completion table entries in an out-of-order processor
US10901744B2 (en) 2017-11-30 2021-01-26 International Business Machines Corporation Buffered instruction dispatching to an issue queue
US10942747B2 (en) * 2017-11-30 2021-03-09 International Business Machines Corporation Head and tail pointer manipulation in a first-in-first-out issue queue
US11669333B2 (en) * 2018-04-26 2023-06-06 Qualcomm Incorporated Method, apparatus, and system for reducing live readiness calculations in reservation stations
US11294678B2 (en) 2018-05-29 2022-04-05 Advanced Micro Devices, Inc. Scheduler queue assignment
US10963392B1 (en) 2018-07-30 2021-03-30 Apple Inc. Victim allocations in shared system cache
US10649922B2 (en) 2018-08-06 2020-05-12 Apple Inc. Systems and methods for scheduling different types of memory requests with varying data sizes
US11422821B1 (en) * 2018-09-04 2022-08-23 Apple Inc. Age tracking for independent pipelines
EP3648430B1 (de) * 2018-11-05 2021-06-02 Wincor Nixdorf International GmbH Hardware-sicherheitsmodul
US11182167B2 (en) * 2019-03-15 2021-11-23 International Business Machines Corporation Method to determine the oldest instruction in an instruction queue of a processor with multiple instruction threads
CN114341888A (zh) * 2019-07-03 2022-04-12 华夏芯(北京)通用处理器技术有限公司 用于操作加速器电路的指令
US11567555B2 (en) * 2019-08-30 2023-01-31 Intel Corporation Software assisted power management
CN110633105B (zh) * 2019-09-12 2021-01-15 安徽寒武纪信息科技有限公司 指令序列处理方法、装置、电子设备和存储介质
EP3812891A1 (de) 2019-10-21 2021-04-28 ARM Limited Verarbeitung mit entkoppeltem zugriff-ausführung
US20210157638A1 (en) * 2019-11-22 2021-05-27 Huawei Technologies Co., Ltd. Method and apparatus for functional unit assignment
US11334384B2 (en) * 2019-12-10 2022-05-17 Advanced Micro Devices, Inc. Scheduler queue assignment burst mode
CN111221575A (zh) * 2019-12-30 2020-06-02 核芯互联科技(青岛)有限公司 一种乱序高性能处理器的寄存器重命名方法及系统
US11392410B2 (en) * 2020-04-08 2022-07-19 Microsoft Technology Licensing, Llc Operand pool instruction reservation clustering in a scheduler circuit in a processor
TWI755744B (zh) * 2020-05-28 2022-02-21 芯鼎科技股份有限公司 控制命令列隊的裝置及方法
US11327766B2 (en) * 2020-07-31 2022-05-10 International Business Machines Corporation Instruction dispatch routing
CN112015480A (zh) * 2020-08-31 2020-12-01 上海兆芯集成电路有限公司 指令的分配方法和处理器
WO2022078599A1 (en) * 2020-10-14 2022-04-21 Telefonaktiebolaget Lm Ericsson (Publ) Apparatus and method for simultaneous multithreaded instruction scheduling in a microprocessor
US11403023B2 (en) * 2020-10-20 2022-08-02 Micron Technology, Inc. Method of organizing a programmable atomic unit instruction memory
US11948000B2 (en) 2020-10-27 2024-04-02 Advanced Micro Devices, Inc. Gang scheduling for low-latency task synchronization
US20220374237A1 (en) * 2021-05-21 2022-11-24 Telefonaktiebolaget Lm Ericsson (Publ) Apparatus and method for identifying and prioritizing certain instructions in a microprocessor instruction pipeline
CN113923120B (zh) * 2021-09-29 2023-08-18 广州鲁邦通物联网科技股份有限公司 一种无线通信模块的模块id重命名方法以及终端设备
CN114489479B (zh) * 2021-12-23 2023-06-09 北京云宽志业网络技术有限公司 数据存储磁盘上下电的方法及装置
CN115269014B (zh) * 2022-09-26 2022-12-30 上海登临科技有限公司 一种指令调度方法、芯片及电子设备

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5710902A (en) 1995-09-06 1998-01-20 Intel Corporation Instruction dependency chain indentifier
US20020178346A1 (en) 2001-03-30 2002-11-28 George Elias Lowering priority and elimination scheme for useless instructions
US20030163671A1 (en) 2002-02-26 2003-08-28 Gschwind Michael Karl Method and apparatus for prioritized instruction issue queue

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR0177742B1 (ko) * 1994-12-15 1999-05-15 윤종용 마이크로 콘트롤러의 칩내에 합체 가능한 마이크로 콘트롤러 디벨롭먼트 시스템
US5644742A (en) * 1995-02-14 1997-07-01 Hal Computer Systems, Inc. Processor structure and method for a time-out checkpoint
US6105128A (en) * 1998-04-30 2000-08-15 Intel Corporation Method and apparatus for dispatching instructions to execution units in waves
US6357016B1 (en) * 1999-12-09 2002-03-12 Intel Corporation Method and apparatus for disabling a clock signal within a multithreaded processor
US6678840B1 (en) * 2000-08-31 2004-01-13 Hewlett-Packard Development Company, Lp. Fault containment and error recovery in a scalable multiprocessor
JP2002108703A (ja) * 2000-10-02 2002-04-12 Fujitsu Ltd キャッシュ制御装置及びプロセッサ
US7107433B1 (en) * 2001-10-26 2006-09-12 Lsi Logic Corporation Mechanism for resource allocation in a digital signal processor based on instruction type information and functional priority and method of operation thereof
US20040181651A1 (en) * 2003-03-11 2004-09-16 Sugumar Rabin A. Issue bandwidth in a multi-issue out-of-order processor
US8190863B2 (en) * 2004-07-02 2012-05-29 Intel Corporation Apparatus and method for heterogeneous chip multiprocessors via resource allocation and restriction
US8392590B2 (en) * 2004-09-10 2013-03-05 Cavium, Inc. Deterministic finite automata (DFA) processing
US20060200648A1 (en) * 2005-03-02 2006-09-07 Andreas Falkenberg High-level language processor apparatus and method
US20080063384A1 (en) * 2006-09-08 2008-03-13 Masahide Tanaka Recording device, printing system, and disc medium
CN101344842B (zh) * 2007-07-10 2011-03-23 苏州简约纳电子有限公司 多线程处理器及其多线程处理方法
CN101334766B (zh) * 2008-06-30 2011-05-11 东软飞利浦医疗设备系统有限责任公司 一种并行微处理器及其实现方法
US8285926B2 (en) * 2010-05-03 2012-10-09 Oracle America, Inc. Cache access filtering for processors without secondary miss detection
US8972700B2 (en) * 2011-02-28 2015-03-03 Freescale Semiconductor, Inc. Microprocessor systems and methods for latency tolerance execution
US8880857B2 (en) * 2011-04-07 2014-11-04 Via Technologies, Inc. Conditional ALU instruction pre-shift-generated carry flag propagation between microinstructions in read-port limited register file microprocessor
US9110656B2 (en) * 2011-08-16 2015-08-18 Freescale Semiconductor, Inc. Systems and methods for handling instructions of in-order and out-of-order execution queues
JP2013206095A (ja) * 2012-03-28 2013-10-07 Fujitsu Ltd データ処理装置及びデータ処理装置の制御方法
US9645819B2 (en) * 2012-06-15 2017-05-09 Intel Corporation Method and apparatus for reducing area and complexity of instruction wakeup logic in a multi-strand out-of-order processor

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5710902A (en) 1995-09-06 1998-01-20 Intel Corporation Instruction dependency chain indentifier
US20020178346A1 (en) 2001-03-30 2002-11-28 George Elias Lowering priority and elimination scheme for useless instructions
US20030163671A1 (en) 2002-02-26 2003-08-28 Gschwind Michael Karl Method and apparatus for prioritized instruction issue queue

Non-Patent Citations (6)

* Cited by examiner, † Cited by third party
Title
Baer, J.L.; Eggers, S.: CSE 471: Computer Design and Organization, Trace cacge abd vacj.ebd ios (Lecture 6), 2007. URL: http://courses.cs.washington.edu/courses/cse471/07sp/lectures.html [abgerufen am 21.10.2014]
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]
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]
Dana Henry; 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]
Simone, M. [u.a.]: Implementation Trade-offs in Using a Restricted Data Flow Architecture in a High Performance RISC Microprocessor. In: SIGARCH Comput. Archit. News, 23, 1995, 2, S. 151-162. - ISSN 0163-5964. http://doi.acm.org/10.1145/225830.224411 [abgerufen am 21.10.2014]
Yamaguchi et al., veröffentlicht in IEICE TRANS. INF. & SYST., BAND E95-D, NR.9 SEPT 2012

Also Published As

Publication number Publication date
US9558001B2 (en) 2017-01-31
US20170102949A1 (en) 2017-04-13
GB201313674D0 (en) 2013-09-11
GB2510655A (en) 2014-08-13
CN108170471A (zh) 2018-06-15
CN104346223B (zh) 2018-02-13
CN104346223A (zh) 2015-02-11
GB2510655B (en) 2015-02-25
US20150106595A1 (en) 2015-04-16
DE102014011332A1 (de) 2015-02-05
US10001997B2 (en) 2018-06-19
CN108170471B (zh) 2022-03-29

Similar Documents

Publication Publication Date Title
DE102014011332B4 (de) Priorisieren von anweisungen basierend auf typ
DE102013014169B4 (de) Dynamisch grössenveränderbare Zirkularpuffer
DE19506435C2 (de) Verfahren und Einrichtung zum Vermeiden von Rückschreibkonflikten zwischen einen gemeinsamen Rückschreibpfad verwendenden Ausführungseinheiten
DE69719235T2 (de) Prozessor und Verfahren zur spekulativen Ausführung von bedingten Verzweigungsbefehlen unter Verwendung einer von mehreren Verzweigungsvorhersageverfahren
DE69031991T2 (de) Verfahren und Gerät zur Beschleunigung von Verzweigungsbefehlen
DE69932066T2 (de) Mechanismus zur "store-to-load forwarding"
DE69032465T2 (de) Prozessorarchitektur mit entkoppelter Befehlsbereitstellung
DE69904083T2 (de) Anordnung und verfahren zum etikettieren und ungültig-erklären von spekulativ ausgeführten befehlen
DE69624158T2 (de) Superskalarer Prozessor mit mehreren Registerblöcken und Erzeugung von spekulativen Antwortadressen
DE60032481T2 (de) Verfahren und vorrichtung zur threadumschaltung in einem multithreadprozessor
DE102014000384A1 (de) ZUWEISEN VON RESSOURCEN ZU THREADS AUF DER BASIS VON SPEKULATIONSMESSGRÖßEN
DE112013000486T5 (de) Anweisungsausgleich durch Anweisungsunsicherheit für Prozessoren mit mehreren Threads
DE112011101086T5 (de) Optimieren von Energieverbrauch und Anwendungsleistung in einem Multithread-Mehrkernprozessorsystem
DE112018006124B4 (de) ZUSAMMENFÜHREN VON EINTRÄGEN GLOBALER ABSCHLUSSTABELLEN IN EINEM OoO-PROZESSOR
DE102014003799A1 (de) Systeme und Verfahren zur Übertragungseliminierung mit Bypass-Mehrfachinstanziierungstabelle
DE69702350T2 (de) Verzweigungsvorhersageschema für cachespeicherzeile, das von sätzen eines set-assoziativen cachespeichers gemeinsam verwendet wird
DE102012210895A1 (de) Vorhersage der ungeordneten Parallelverarbeitung der Befehle von Threads in einem Multithread-Prozessor
DE102014003434A1 (de) Vorhersage indirekter Verzweigungen
DE112011100715T5 (de) Hardware-hilfs-thread
DE112010003595T5 (de) Verfahren, System und maschinenverarbeitbares Medium zur Bereitstellung einer verteiltenPrädikatvorhersage
DE112018006127B4 (de) Abschliessen von verbundenen einträgen einer globalen abschlusstabelle in einem out-of-order-prozessor
DE102014002012A1 (de) Spekulative Ladeausgabe
DE102013205059A1 (de) Durchführen von vordecodierzeitoptimierten Anweisungen zusammen mit Sequence Caching von vordecodierzeitoptimierten Anweisungen
DE10085273B4 (de) Verfahren und Einrichtung zum Einplanen und Abfertigen von Befehlen in einer Prozessor-Pipeline
DE4134392C2 (de) Verfahren und Vorrichtung zum Ungültigmachen von Befehlen in Geräten mit Parallelverarbeitung

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R016 Response to examination communication
R081 Change of applicant/patentee

Owner name: MIPS TECH, LLC (N.D.GES.D.STAATES DELAWARE), S, US

Free format text: FORMER OWNER: IMAGINATION TECHNOLOGIES LIMITED, KINGS LANGLEY, HERTFORDSHIRE, GB

R082 Change of representative

Representative=s name: CMS CAMERON MCKENNA NABARRO OLSWANG LLP, GB

Representative=s name: OLSWANG GERMANY LLP, DE

R082 Change of representative

Representative=s name: CMS CAMERON MCKENNA NABARRO OLSWANG LLP, GB

Representative=s name: GLOBAL IP EUROPE PATENTANWALTSKANZLEI, DE

R082 Change of representative

Representative=s name: GLOBAL IP EUROPE PATENTANWALTSKANZLEI, DE

R018 Grant decision by examination section/examining division