-
HINTERGRUND
-
Anweisungen in Mikroprozessoren werden häufig erneut zur Ausführung für ein oder mehrere Male aufgrund von Pipeline-Fehlern oder Daten-Gefährdungen (data hazards) verschickt bzw. abgesetzt (redispatched). Eine Anweisung mag z. B. benötigt sein, erneut abgesetzt zu werden, wo sich eine Anweisung auf ein Ergebnis bezieht, welches noch nicht berechnet oder abgerufen worden ist. Weil es nicht bekannt ist, ob ein unvorhergesehener Pipeline-Stillstand (stall) während der Ausführung der Anweisung auftreten wird, kann eine Ausführung der Anweisung zu einer Vorauslauf-Operation (runahead operation) führen, welche konfiguriert ist, andere Fehler bzw. Verfehlungen (misses) zu detektieren, während der anhängige Fehler aufgelöst wird.
-
ZUSAMMENFASSUNG
-
Verschiedene Ausführungsformen sind bereitgestellt, welche ein erneutes Absetzen für erneute Ausführung einer Anweisung von einem Puffer eines Mikroprozessors betreffen. In einer Ausführungsform umfasst ein Mikroprozessor Holen-Logik; einen oder mehrere Ausführungs-Mechanismen zum Ausführen einer abgerufenen Anweisung, welche mittels der Holen-Logik bereitgestellt ist; und Planer-Logik (scheduler logic) zum Planen (scheduling) der abgerufenen Anweisung zur Ausführung. Die Planer-Logik umfasst einen Puffer zum Speichern der abgerufenen Anweisung und einer oder mehrerer zusätzlicher Anweisungen. Die Planer-Logik kann konfiguriert sein, daraufhin, dass der Mikroprozessor bei einer bestimmten Ausführungs-Stelle nach Vorauslaufen wieder eintritt (re-entering), eine Anweisung von dem Puffer erneut abzusetzen, welche vorher an einen der Ausführungs-Mechanismen abgesetzt worden ist.
-
KURZE BESCHREIBUNG DER ZEICHNUNGEN
-
1 zeigt schematisch einen Mikroprozessor eines Rechen-Geräts gemäß einer Ausführungsform der vorliegenden Erfindung.
-
2 zeigt ein Verfahren eines Erneut-Absetzens einer Anweisung von einem Puffer gemäß einer Ausführungsform der vorliegenden Offenbarung.
-
3 zeigt ein Flussdiagramm, welches ein Verfahren eines Erneut-Absetzens zur erneuten Ausführung einer Anweisung von einem Puffer nach Vorauslaufen gemäß einer Ausführungsform der vorliegenden Offenbarung illustriert.
-
4 zeigt ein Verfahren eines Kontroll-Punkt-Versehens (checkpointing) und eines Erneut-Absetzens einer Anweisung von einem Puffer gemäß einer Ausführungsform der vorliegenden Offenbarung.
-
5 zeigt schematisch eine Mehrzahl von Speicher-Zellen für einen Puffer gemäß einer Ausführungsform der vorliegenden Offenbarung.
-
DETAILLIERTE BESCHREIBUNG
-
In modernen Mikroprozessoren sind Architektur-Niveau-Anweisungen oft in Mikro-Operationen zur Ausführung in einer Pipeline getrennt bzw. dividiert. Solche Mikro-Operationen können individuell oder als Bündel von Mikro-Operationen an verschiedene Ausführungs-Mechanismen in dem Mikroprozessor abgesetzt werden. Wenn eine oder mehrere Mikro-Operationen abgesetzt werden, ist nicht bekannt, ob Ausführung einer Mikro-Operation vollenden wird oder nicht. Anders ausgedrückt, ist es nicht bekannt, ob ein Fehler oder eine Ausnahme-Bedingung (exception) während einer Ausführung einer Mikro-Operation auftreten wird. In einigen Beispielen kann, wenn eine Mikro-Operation nicht vollendet, die Mikro-Operation erneut ausgeführt werden, nachdem der unerwartete Stillstand bzw. Unterbrechung (stall) aufgelöst ist. Weil andere Fehler auftreten können, ist es möglich, dass eine Mikro-Operation mehrere Male vor der Beendigung der Mikro-Operation erneut ausgeführt wird.
-
Ein gewöhnlicher Pipeline-Ausführungs-Stillstand, welcher während einer Ausführung eines Bündels auftreten kann, ist eine Lade-Operation, welche zu einem Zwischenspeicher-Fehler bzw. Verfehlen (cache miss) führt. Solche Zwischenspeicher-Fehler können ein Eintreten (entrance) in einen Vorauslauf-Modus(runahead mode)-Betrieb (nachfolgend als ein „Vorauslaufen” bezeichnet) auslösen, welche konfiguriert ist, andere Zwischenspeicher-Fehler, Anweisungs-Adressen-Übersetzungs-Puffer-Fehler(instruction translation lookaside buffer misses), Verzweigungs-Fehl-Vorhersagen (branch mispredicts), oder dergleichen zu detektieren, während der anfängliche Lade-Fehler aufgelöst bzw. gelöst wird. Wie hierin benutzt, beschreibt Vorauslaufen virtuell irgendein geeignetes spekulatives Ausführungsschema, welches von einem Lang-Latenz-Ereignis herrührt, wie etwa ein Zwischenspeicher-Fehler, wo das resultierende Lade-Ereignis die fehlende Anweisung oder Daten von einer Niedrigerer-Zugriff-Speicher-Stelle zieht bzw. holt (pulls). Sobald der anfängliche Lade-Fehler aufgelöst ist, verlässt der Mikroprozessor Vorauslaufen und die Anweisung wird erneut ausgeführt. Ein erneutes Holen der Anweisung von dem Anweisungs-Zwischenspeicher oder unifizierten Zwischenspeicher kann jedoch einen Prozessor-Betrieb verlangsamen. Demgemäß sind hierin verschiedene Ausführungsformen offenbart, welche ein erneutes Absetzen einer Anweisung betreffen, welche zu erneuten Ausführung von einem Puffer ausgewählt ist, daraufhin, dass ein Mikroprozessor erneut in eine bestimmte Ausführungs-Stelle nach Vorauslaufen eintritt. In einem Beispiel ist ein Mikroprozessor bereitgestellt. Der Beispiel-Mikroprozessor umfasst Holen-Logik, einen oder mehrere Ausführungs-Mechanismen zum Ausführen einer abgerufenen Anweisung, welche mittels der Holen-Logik bereitgestellt ist, und eine Planer-Logik zum Planen der Anweisung zur Ausführung. Die Beispiel-Planer-Logik umfasst einen Puffer zum Speichern der abgerufenen Anweisung und einer oder mehrerer zusätzlicher Anweisungen, wobei die Planer-Logik konfiguriert ist, daraufhin, dass der Mikroprozessor bei einer bestimmten Ausführungs-Stelle nach Vorauslaufen erneut eintritt, eine Anweisung von bzw. aus (from) dem Puffer erneut abzusetzen, welche vorher an einen der Ausführungs-Mechanismen abgesetzt worden ist.
-
1 zeigt schematisch eine Ausführungsform eines Mikroprozessors 100, welcher in Verbindung mit den hierin beschriebenen Systemen und Verfahren eingesetzt werden kann. Mikroprozessor 100 umfasst verschiedentlich Prozessor-Register 109 und kann auch eine Speicher-Hierarchie 110 umfassen, welche einen L1-Prozessor-Zwischenspeicher 110A, einen L2-Prozessor-Zwischenspeicher 110B, einen L3-Prozessor-Zwischenspeicher 110C, Hauptspeicher 110D (z. B. einen oder mehrere DRAM-Chips), sekundären Speicher 110E (z. B. magnetische und/oder optische Speicher-Einheiten) und/oder tertiären Speicher 110F (z. B. eine Bandfarm) umfassen kann. Es wird verstanden sein, dass die Beispiel-Speicher/Speicherungs-Komponenten in einer ansteigenden Ordnung von Zugriffs-Zeit und Kapazität aufgelistet sind, obwohl es mögliche Ausnahmen gibt.
-
Eine Speicher-Steuerung 110G kann benutzt werden, um das Protokoll zu handhaben und die Signal-Schnittstelle bereitzustellen, die von Hauptspeicher 110D erforderlich ist und erforderlich ist, Speicher-Zugriffe zu planen. Die Speicher-Steuerung kann auf dem Prozessor-Die oder einem separaten Die implementiert sein. Es ist zu verstehen, dass die oben bereitgestellte Speicher-Hierarchie nicht begrenzend ist und dass andere Speicher-Hierarchien benutzt werden können, ohne von dem Geltungsbereich dieser Offenbarung abzuweichen.
-
Mikroprozessor 100 umfasst auch eine Pipeline, welche in vereinfachter Form in 1 als Pipeline 102 illustriert ist. Ein in einer Pipeline-Anordnen (pipelining) kann erlauben, dass mehr als eine Anweisung in verschiedenen Stadien bzw. Stufen eines Abrufens und einer Ausführung gleichzeitig sein können. Anders ausgedrückt kann ein Satz von Anweisungen durch verschiedene Ausführungs-Mechanismen, welche in einer Pipeline 102 umfasst sind, passiert werden bzw. durchgeschleust werden, während eine andere Anweisung und/oder Daten von Speicher abgerufen wird. Somit können die Ausführungs-Mechanismen benutzt werden, während Stromaufwärts-Abruf-Mechanismen darauf warten, dass Speicher Anweisungen und/oder Daten zurückgibt, was verschiedene Strukturen, wie etwa Zwischenspeicher- und Verzweigungs-Prädiktoren involviert bzw. umgreift, so dass andere Zwischenspeicher-Fehler und/oder Verzweigungs-Fehl-Vorhersagen möglicherweise entdeckt werden können. Diese Zugangsweise kann möglicherweise Anweisung- und Daten-Verarbeitung mittels des Mikroprozessors relativ zu Zugangsweisen beschleunigen, welche Anweisungen und/oder Daten in einer individuellen, serialen Weise abrufen und ausführen.
-
Wie in 1 gezeigt ist, umfasst Pipeline 102 Holen-Logik 120, Dekodier-Logik 122, Planer-Logik 124, Ausführungs-Logik 130, mem-Logik 132 und Rückschreibe-Logik 134. Holen-Logik 120 ruft Anweisungen von der Speicher-Hierarchie 110 ab, typischerweise entweder von dem unifizierten oder dedizierten L1-Zwischenspeichern, welcher durch L2-L3-Zwischenspeicher und Hauptspeicher unterstützt bzw. abgesichert sind (backed). Dekodier-Logik 122 dekodiert die Anweisungen, z. B. mittels eines Parsens bzw. textuellen Analysierens von Opcodes, Operanden und Adressierungs-Moden. Auf ein Parsen hin, werden die Anweisungen dann mittels Planer-Logik 124 zur Ausführung mittels der Ausführungs-Logik 130 geplant bzw. angesetzt (scheduled).
-
Planer-Logik 124 umfasst einen Puffer 126 zum Speichern von einer oder mehreren Anweisungen. Wenn Anweisungen in Planer-Logik 124 eintreten, sind sie in Puffer 126 in einer Schlange angeordnet (queued). Die Anweisungen sind in dem Puffer 126 gehalten, selbst nachdem die Anweisungen an Ausführungs-Logik 130 geschickt bzw. abgesetzt sind. Somit kann es möglich sein, vorher abgesetzte bzw. verschickte Anweisungen von dem Puffer in Antwort auf Pipeline-Diskontinuitäten erneut abzusetzen, welche dazu führen, dass eine Anweisung daran scheitert, nach einem Absetzen bzw. Verschicken zu vollenden, wie etwa ein Laden, welches in einem Daten-Zwischenspeicher verfehlt bzw. scheitert. Solch ein erneutes Absetzen kann dadurch ohne ein erneutes Holen der Anweisungen von außerhalb des Puffers durchgeführt werden. Eine Anweisung kann somit ein oder mehrere Male erneut abgesetzt oder „erneut-gespielt” bzw. „wiederholt” (re-played) werden, bis bestimmt ist, dass die Anweisung einen vollendeten Zustand erreicht, bei welcher Zeit die Anweisung logisch und/oder physikalisch von dem Puffer entfernt werden kann.
-
Wie in 1 gezeigt ist, kann in einigen Umständen, wie etwa während Vorauslaufen-Bedingungen, welche in größerem Detail unten beschrieben sind, Puffer 126 mit einem Kontroll-Punkt versehen werden (checkpointed), um den Zustand von Puffer 126 während eines Vorauslaufens zu erhalten, während eine nicht mit einem Kontroll-Punkt versehene Arbeits-Zustands-Version von Puffer 126 Anweisung zum Absetzen in eine Schlange ansetzt (queues). 1 zeigt auch eine optionale Umgehung (bypass), welche konfiguriert ist, Anweisungen an Ausführungs-Logik 130 gleichzeitig mit Speicherung der Anweisung in Puffer 126 weiterzuleiten.
-
In einigen Ausführungsformen kann Puffer 126 konfiguriert sein, Anweisungen in der Form von Anweisung-Satz-Architektur-(ISA)-Anweisungen zu speichern. Zusätzlich oder alternativ kann in einigen Ausführungsformen Puffer 126 konfiguriert sein, Bündel von Mikro-Operationen zu speichern, wobei jede Mikro-Operation einer oder mehreren ISA-Anweisungen oder Teilen von ISA-Anweisungen entspricht. Es wird geschätzt werden, dass virtuell irgendeine geeignete Anordnung zum Speichern von Anweisungen in Bündeln von Mikro-Operationen eingesetzt werden kann, ohne von dem Geltungsbereich der vorliegenden Offenbarung abzuweichen. Zum Beispiel kann in einigen Ausführungsformen eine einzelne Anweisung in einer Mehrzahl von Bündeln von Mikro-Operationen gespeichert sein, während in einigen Ausführungsformen eine einzelne Anweisung als ein Bündel von Mikro-Operationen gespeichert werden kann. In noch anderen Ausführungsformen kann eine Mehrzahl von Anweisungen als ein Bündel von Mikro-Operationen gespeichert sein. In noch anderen Ausführungsformen kann Puffer 126 individuelle Anweisungen oder Mikro-Operationen speichern, z. B. Anweisungen oder Mikro-Operationen, welche überhaupt keine Bündel aufweisen.
-
Damit der Grenze-Zeiger (boundary pointer) auf eine gültige Stelle auf einen Eintritt in Vorauslaufen hin zeigt, ist der Puffer 126 konfiguriert, zumindest so groß zu sein, wie eine Zahl von Bündeln, welche von einem bestimmten Bündel umfasst sind, welches zu einem Eintritt in Vorauslaufen zu einem letzten Bündel in derselben Anweisung führt, wie dieses bestimmte Bündel, was auch als eine Schwanz-Größe bzw. End-Größe (tail size) für eine Anweisung bezeichnet werden kann. Somit kann in Ausführungsformen, wo Bündel von Mikro-Operationen in Puffer 126 gespeichert sind, Puffer 126 in Größe gemäß einer vorbestimmten End-Größe für Mikrooperationen bemessen sein, welche mit einer Architektur-Anweisung assoziiert sind. Solche ISA-Anweisungen und/oder -Bündel können erneut an Ausführungs-Logik 130 irgendeine geeignete Anzahl von Malen abgesetzt bzw. geschickt werden.
-
Pipeline 102 umfasst auch mem-Logik 132 zum Durchführen von Lade- und/oder Speicher-Operationen und Zurückschreibe-Logik 134 zum Schreiben des Ergebnisses von Operationen auf eine geeignete Stelle, wie etwa Register 109. Es sollte verstanden sein, dass die obigen in Pipeline 102 gezeigten Stufen illustrativ für eine typische RISC-Implementierung sind und nicht als begrenzend gemeint sind. Zum Beispiel können in einigen Ausführungsformen die Holen-Logik- und die Planer-Logik-Funktionalität stromaufwärts einer Pipeline bereitgestellt sein, wie etwa ein Übersetzen bzw. Kompilieren von VLIW-Anweisungen oder Code-Morphing. In einigen anderen Ausführungsformen kann die Planer-Logik in der Holen-Logik und/oder Dekodier-Logik des Mikroprozessors umfasst sein. Allgemeiner kann ein Mikroprozessor Holen-, Dekodier-, und Ausführungs-Logik umfassen, wobei jede von diesen eine oder mehrere Stufen aufweisen kann, wobei mem- und Rückschreib-Funktionalität mittels der Ausführungs-Logik ausgeführt wird. Die vorliegende Offenbarung ist gleich anwendbar auf diese oder andere Mikroprozessor-Implementierungen, einschließlich Hybrid-Implementierungen, welche VLIW-Anweisungen und/oder andere Logik-Anweisungen benutzen können.
-
In den beschriebenen Beispielen können Anweisungen eine zu einer Zeit geholt und ausgeführt werden, was möglicherweise mehrere Takt-Zyklen erfordert. Während dieser Zeit können bedeutende Teile des Daten-Pfades unbenutzt sein. Zusätzlich zu oder anstatt eines Einzel-Anweisungs-Holens, können Zuvor-Holen-Verfahren benutzt werden, um Performance zu verbessern und Latenz-Flaschen-Hälse zu vermeiden, welche mit Lese- und Speicher-Operationen assoziiert sind (d. h. das Lesen von Anweisungen und Laden solcher Anweisungen in Prozessor-Register und/oder Ausführungs-Queues). Demgemäß wird geschätzt werden, dass virtuell irgendeine Weise eines Holens, Planens und Absetzens von Anweisungen benutzt werden kann, ohne von dem Geltungsbereich der vorliegenden Offenbarung abzuweichen.
-
2 zeigt schematisch eine Ausführungsform eines Verfahrens 200 zum Erneut-Absetzen einer Anweisung, welche in einem Puffer gespeichert ist, unter Benutzung einer Mehrzahl von Zeigern, um Adressen von Anweisungen nachzuverfolgen (tracking), welche in dem Puffer gespeichert sind für eine Arbeits-Status-Version (z. B. eine nicht mit einem Kontroll-Punkt versehene (non-checkpointed) Version) des Puffers bei vier sequenziellen Zeit 202, Zeit 204, Zeit 206 und Zeit 208. Das in 2 illustrierte Verfahren ist für illustrative Zwecke bereitgestellt und ist nicht als begrenzend beabsichtigt, da virtuell irgendeine geeignete Variation von dem unten beschriebenen Verfahren in einigen Ausführungsformen umfasst sein kann, ohne von dem Geltungsbereich der vorliegenden Offenbarung abzuweichen.
-
In dem in 2 gezeigten Beispiel sind vier Bündel A1, A2, B1, C1 und C2 in dem Puffer bei Zeit 202 gespeichert. Bündel A1 und A2 entsprechen einer architektonischen Anweisung A, Bündel B1 entspricht einer architektonischen Anweisung B und Bündel C1 und C2 entsprechen einer architektonischen Anweisung C. Alle Bündel, welche mit Anweisung C assoziiert sind, sind nicht vollständig in den Puffer bei Zeit 202 eingefügt, da ein letztes Bündel (C3) noch nicht in den Puffer bei Zeit 202 eingefügt worden ist.
-
Wie in 2 gezeigt ist, referenziert ein Zeiger „A” einen Allokations-Zeiger, welcher anzeigt, wo das nächste Bündel in den Puffer einzufügen ist. Virtuell irgendein geeignetes Schema kann zum Planen von Anweisungen in und aus dem Puffer eingesetzt werden; der in 2 gezeigte Puffer ist als ein logischer First-in-, logischer first-out-zirkulärer Puffer gezeigt. Der Allokations-Zeiger wird aktualisiert, wenn eine Anweisung (oder ein Teil davon) in den Puffer eingefügt bzw. eingesetzt wird. In dem in 2 gezeigten Beispiel wird der Allokations-Zeiger zwischen Zeit 202 und Zeit 204 aktualisiert, wenn ein Bündel C3, welches Anweisung C entspricht, in den Puffer eingefügt wird, und wieder zwischen Zeit 204 und Zeit 206, wenn ein Bündel D1 und D2 bei Zeit 208, welche einer Anweisung D entsprechen, in den Puffer eingefügt werden. Man bemerke, dass irgendeine der architektonischen Anweisung eine ISA-Anweisungen sein kann, ohne von dem Geltungsbereich der vorliegenden Offenbarung abzuweichen.
-
Zeiger „R” referenziert einen Lese-Zeiger, welcher eine Puffer-Adresse oder eine Puffer-Stelle eines Anweisungs-Eintrages indiziert, welcher in Vorbereitung für ein Absetzen an den Ausführungs-Mechanismus ausgewählt ist. Zum Beispiel kann der Lese-Zeiger auf eine Adresse für die ausgewählte Anweisung zeigen, so dass verschiedene Abhängigkeiten der ausgewählten Anweisung gelesen werden können, bevor die Anweisung abgesetzt bzw. geschickt wird. Der Lese-Zeiger wird aktualisiert, wenn die ausgewählte Anweisung (oder ein Teil davon) an den Ausführungs-Mechanismus ausgestellt ist. In dem in 2 gezeigten Beispiel wird der Lese-Zeiger zwischen Zeit 202 und Zeit 204 aktualisiert, wenn Bündel B1, welches der Anweisung B entspricht, zum Absetzen bzw. Schicken gelesen wird, und wieder, wenn Bündel C1, welches der Anweisung C entspricht, zum Absetzen gelesen wird.
-
Zeiger „D” referenziert einen De-Allokations-Zeiger, welcher eine Puffer-Adresse oder eine Puffer-Stelle eines Anweisungs-Eintrages indiziert, welcher vollendet ist und bereit ist, logisch, und in einigen Ausführungsformen physikalisch, von dem Puffer entfernt zu werden. Somit zeigt der De-Allokations-Zeiger auf eine Anweisung, welche die nächste Anweisung ist, welche von dem Puffer zu entfernen ist, dadurch, dass sie z. B. überschrieben und/oder gelöscht wird. Somit wird eine Anweisung, welche in den Puffer mittels des Allokations-Zeigers eingefügt wird und mittels des Lese-Zeigers gelesen wird, in dem Puffer verbleiben, bis zur Entfernung mittels des De-Allokations-Zeigers angezeigt ist. Der De-Allokations-Zeiger wird aktualisiert, wenn die ausgewählte Anweisung (oder ein Teil davon) vollendet. In dem in 2 gezeigten Beispiel wird der De-Allokations-Zeiger zwischen Zeit 202 und Zeit 204 aktualisiert, wenn Bündel A1, welches der Anweisung A entspricht, für De-Allokation bereit gemacht wird (readied), und zwischen Zeit 204 und Zeit 206, wenn Bündel A2 zur De-Allokation bereit gemacht wird.
-
In einigen Ausführungsformen kann der De-Allokations-Zeiger dadurch vorgerückt werden, dass er sich von Bündel zu Bündel bewegt (z. B. von A1 nach A2), wenn die Bündel abgesetzt werden können und von dem Puffer auf einer Bündel-pro-Bündel-Basis deallokiert werden. In einigen Ausführungsformen kann jedoch der De-Allokations-Zeiger dadurch vorgerückt werden, dass er sich von Anweisung zu Anweisung bewegt, selbst wenn der Puffer Bündel speichert. Zum Beispiel kann der De-Allokations-Zeiger von A1 nach B1 unter Auslassung von A2 vorgerückt werden, selbst wenn die Bündel individuell abgesetzt werden (z. B. A1, A2, B1, etc.). Demgemäß kann ein inkrementelles Vorrücken des De-Allokations-Zeigers und eines oder mehrerer der anderen Zeiger, wie etwa der Lese-Zeiger, verschieden sein während eines Arbeits-Zustands des Puffers in einigen Ausführungsformen.
-
Es wird geschätzt werden, dass, obwohl die Sequenz des A-, R-, und D-Zeigers in der Ordnung, welcher mittels einer Anweisung begegnet ist, beschränkt ist (z. B. in der Ordnung A, R und D), kann irgendeine Zahl von Puffer-Positionen die A-, R- und D-Zeiger separieren und ferner können andere geeignete Puffer-Zeiger dazwischen kommen, wie unten beschrieben ist.
-
Zeiger „RY” referenziert einen Erneut-Spielen bzw. Wiederholen(replay)-Zeiger, welcher eine Puffer-Adresse oder eine Puffer-Stelle einer Anweisung anzeigt, welche zur erneuten Ausführung erneut abzusetzen ist. Der Wiederholen-Zeiger wird zusammen bzw. entlang mit dem De-Allokations-Zeiger aktualisiert, da, sobald eine Anweisung (oder ein Teil davon) vollendet ist, ein Wiederholen dieser Anweisung nicht länger eine Aufgabe ist. In der in 2 gezeigten Ausführungsform zieht der Wiederholen-Zeiger den Lese-Zeiger hinter sich her bzw. hängt diesen an (trails), so dass eine zuvor gelesene und abgesetzte Anweisung in dem Fall eines geeigneten Pipeline-Ausführungs-Stillstands wiederholt werden kann. Auf ein Wiederholen hin wird der Wiederholen-Zeiger in den Lese-Zeiger kopiert, so dass der Lese-Zeiger die Anweisung, für welche Wiederholen ausgewählt ist, lesen wird. In dem in 2 gezeigten Beispiel wird der Wiederholen-Zeiger in den Lese-Zeiger bei Zeit 206 kopiert, so dass der Lese-Zeiger und der Wiederholen-Zeiger beide auf Bündel C1 bei Zeit 208 zeigen. Somit wird der Lese-Zeiger auf Bündel C1 in Vorbereitung für erneutes Absetzens dieses Bündels zur erneuten Ausführung zeigen.
-
In dem in 1 bei Zeit 208 gezeigten Beispiel ist der Lese-Zeiger dargestellt, bereit zu sein, Bündel C1 in Vorbereitung für ein erneutes Absetzen und eine erneute Ausführung zu lesen. Wenn Bündel C1 aufgrund irgendeines Pipeline-Ausführungs-Stillstandes bzw. -Unterbrechung nicht vollendet, kann der Wiederholen-Zeiger in den Lese-Zeiger kopiert werden, um dazu zu führen, dass Bündel C1 wieder erneut abgesetzt wird, bis das Bündel erfolgreich vollendet. Sobald das Bündel vollendet, wird der Wiederholen-Zeiger vorgerückt und der De-Allokations-Zeiger wird anzeigen, dass Bündel C1 bereit ist, logisch von dem Puffer entfernt zu werden.
-
In einigen Ausführungsformen kann ein erneutes Absetzen oder Wiederholen einer Anweisung von dem Puffer von einem Austritt des Mikroprozessors aus einem Vorauslaufen-Zustand resultieren. Fortführend mit dem in 1 gezeigten Beispiel kann z. B. ein Zwischenspeicher-Verfehlen bei L3-Zwischenspeicher 110C eine Anfrage nach einer Anweisung von Hauptspeicher 110D auslösen, welcher eine vergleichsweise langsamere Erfüllungs-Zeit relativ zu einem Verfehlen bei L2-Zwischenspeicher 110B und einem Treffer bei L3-Zwischenspeicher 110C haben kann. Sobald das Verfehlen erkannt ist, wird der Mikroprozessor mit einem Kontroll-Punkt versehen (checkpointed), so dass der Mikroprozessor zu dem mit Kontroll-Punkt versehenen Zustand zurückkehren kann, nachdem ein Vorauslaufen endet (z. B. sobald der Lade-Fehler erfüllt ist). Wenn eine bestimmte Anweisung Vorauslaufen startet, wird somit diese Anweisung als eine Vorauslaufen-Anweisung vollenden und dann erneut abgesetzt, wiederum, nachdem Vorauslaufen endet.
-
Da es unbekannt ist, wann in Vorauslaufen eingetreten wird, und der Puffer mit Kontroll-Punkt versehen wird, zeigt 2 auch einen Wiederstart-Anweisungs-Zeiger, welcher konfiguriert ist, eine Adresse oder eine Stelle, welche einer letzten vollendeten Anweisung folgt, nachzuvollziehen bzw. nachzuverfolgen (track), z. B. eine Adresse für eine Anweisung, welche einer Anweisung folgt, welche alle ihre konstituierenden Teile in den Puffer geladen hat. Weil der Puffer auf einen Zustand zurückgesetzt wird, welcher nicht irgendeine unvollendete Anweisung beim Wiederstarten umfasst, wird ein Umlenken oder Umsetzen (directing) des Wiederstart-Anweisungs-Zeigers, auf die Adresse für die unvollendete Anweisung zu zeigen, dazu führen, dass die Bündel für die unvollendete Anweisung aus der geeigneten Stelle in dem Speicher geladen werden, wenn ein Wiederstart in Ordnung ist. Wie oben eingeführt, kann eine Anweisung, welche nach einer letzten vollendeten Anweisung, welche in dem Puffer gehalten ist, ausgeführt wird, von außerhalb des Puffers geholt werden, während Anweisungen, welche in dem Puffer gehalten sind, erneut abgesetzt sind. In einigen Ausführungsformen kann der Wiederstart-Anweisungs-Zeiger einen Anweisungs-Zeiger für die Holen-Logik darauf richten, eine andere Anweisung von außerhalb des Puffers zu holen, während Anweisungen innerhalb des Puffers zur erneuten Ausführung erneut abgesetzt werden. Der Wiederstart-Anweisungs-Zeiger wird jedes Mal aktualisiert, wenn eine vollendete Anweisung in den Puffer eingefügt wird. In 2 zeigt der Wiederstart-Anweisungs-Zeiger auf den Anweisungs-Zeiger von Anweisung C1 bei Zeit 202. Bei Zeit 204 wird der Wiederstart-Anweisungs-Zeiger aktualisiert, um auf eine Anweisung hinter C zu zeigen, da Anweisung C über die Insertion von Bündel C3 vollendet ist. Wie bei Zeit 204 in 2 gezeigt ist, ist, sobald Bündel C3 eingefügt ist, der Wiederstart-Anweisungs-Zeiger dargestellt, auf D1 zu zeigen. Somit wird in Ausführungsformen, in welchen eine Anweisung eine Mehrzahl von Bündeln von Mikro-Operationen aufweist, der Wiederstart-Anweisungs-Zeiger aktualisiert, so dass er auf integrale Anweisungs-Grenzen und nicht auf Positionen innerhalb einer individuellen Anweisung zeigt.
-
In einigen Ausführungsformen, in denen der Puffer ISA-Anweisungen speichert, kann ein Nachverfolgen der Adresse oder der Stelle der letzten vollendeten Anweisung in dem Puffer vergleichsweise leicht sein, da jede ISA-Anweisung einen Anweisungs-Zeiger haben kann, welcher mit ihr assoziiert ist. In einigen anderen Ausführungsformen, wie etwa Ausführungsformen, in welchen Bündel von Mikro-Operationen in dem Puffer gespeichert sind, kann es sein, dass ein Anweisungs-Zeiger, welcher mit einer Anweisung assoziiert ist, in dem letzten Bündel allein eines Satzes von Bündeln, welche eine Anweisung bilden, umfasst ist. In solchen Ausführungsformen kann der Wiederstart-Anweisungs-Zeiger aktualisiert werden, wenn das letzte Bündel für eine Anweisung in den Puffer eingefügt wird. Weil es schwierig sein kann, das Ende einer Anweisung von Bündeln von Mikro-Operationen, welche in dem Puffer gespeichert sind, zu identifizieren, kann in solchen Ausführungsformen ein Grenze-Anweisungs-Zeiger benutzt werden, um eine Grenze zwischen einem Bündel, welches einem Wiederstart-Anweisungs-Zeiger entspricht, und nachfolgenden Bündeln, nachzuverfolgen, z. B. zum Nachverfolgen einer Grenze zwischen einer letzten vollendeten Anweisung, welche in dem Puffer gehalten ist, und einem nachfolgenden Bündel, welches zu einer unvollendeten Anweisung gehört, welche in dem Puffer gehalten ist. In solchen Ausführungsformen kann dann der Wiederstart-Anweisungs-Zeiger eine Adresse oder die Stelle der letzten vollendeten Anweisung, welche in dem Puffer gehalten ist, nachverfolgen, wie mittels des Grenze-Anweisungs-Zeigers nachverfolgt. In solchen Ausführungsformen kann der Grenze-Anweisungs-Zeiger gleichzeitig mit dem Wiederstart-Anweisungs-Zeiger aktualisiert werden. In 2 wird der Grenze-Anweisungs-Zeiger „B” aktualisiert, um auf D1 zu zeigen, zwischen Zeit 202 und Zeit 204, wenn Anweisung C mittels der Insertion von Bündel C3 vollendet ist.
-
In den hierin beschriebenen Ausführungsformen existiert der Puffer in mit Kontroll-Punkt versehenen und nicht mit Kontroll-Punkt versehenen Versionen (checkpointed und non-checkpointed versions). Somit ist, zurückkehrend auf das in 1 gezeigte Beispiel, die Anweisung, welche zu einem Eintritt in ein Vorauslaufen führte, und eine oder mehrere nachfolgende Anweisungen in der mit Kontroll-Punkt versehenen Version des Puffers gespeichert (gezeigt als mit Kontroll-Punkt versehener Puffer 126A), so dass bei einem Austritt aus Vorauslaufen, die Anweisung, welche zu einem Vorauslaufen führte, und diese nachfolgenden Anweisungen aus dem Puffer abgesetzt werden können, ohne von außerhalb des Puffers geholt zu werden. Zum Beispiel kann in einigen Ausführungsformen die Anweisung direkt aus dem mit Kontroll-Punkt versehenen Puffer 126A abgesetzt werden, während in anderen Ausführungsformen die Anweisung anfänglich in eine nicht mit Kontroll-Punkt versehene Version des Puffers kopiert werden kann (gezeigt als nicht mit Kontroll-Punkt versehener Puffer 126B in 1) und dann von da aus abgesetzt werden kann. Ferner kann in einigen Ausführungsformen eine Anweisung, welche nach einer letzten vollendeten Anweisung, welche in dem Puffer gehalten ist, ausgeführt wird, von außerhalb des Puffers geholt werden, während die Anweisungen, welche in dem Puffer gehalten sind, erneut abgesetzt werden. Demgemäß können hierin beschriebene Ausführungsformen den potentiellen Vorteil anbieten, Anweisungs-Verarbeitungs-Zeit nach Vorauslaufen dadurch vermindern, dass Holen-Prozesse für Anweisungen eliminiert sind, welche in dem Puffer gespeichert sind, und dadurch, dass Holen-Prozesse für nachfolgende Anweisungen für Anweisungen, welche außerhalb des Puffers gespeichert sind, gleichzeitig mit Erneut-Absetzen-Operationen für Anweisungen, welche innerhalb des Puffers gespeichert sind, ausgelöst werden.
-
3 zeigt ein Flussdiagramm, welches eine Ausführungsform eines Verfahrens 300 zum Erneut-Absetzen für erneute Ausführung einer ausgewählten Anweisung aus einem Puffer nach Vorauslaufen illustriert. Die unten bereitgestellte Beschreibung von Verfahren 300 ist verwoben mit Referenzen auf ein Beispiel eines Puffers, welcher in 4 bereitgestellt ist. Für Einfachheit zeigt das in 3 gezeigte Beispiel nur einen Level von Zwischenspeicher. Es wird jedoch geschätzt werden, dass irgendeine geeignete Anzahl von Zwischenspeicher-Leveln eingesetzt werden kann, ohne von dem Geltungsbereich der vorliegenden Offenbarung abzuweichen, sowie dass irgendein geeignetes Schema zum Vermindern von Verfehlungs-Strafen (miss penalties) vorgesehen sein kann. Ferner sind die in 3 und 4 dargestellten Verfahren für illustrative Zwecke bereitgestellt und nicht beabsichtigt begrenzend zu sein, da praktisch irgendeine geeignete Variation, einschließlich Auslassungen, Hinzufügungen und Umordnungen von den oben beschriebenen Verfahren in einigen Ausführungsformen umfasst sein können, ohne von dem Geltungsbereich der vorliegenden Offenbarung abzuweichen.
-
Bei 302 umfasst Verfahren 300 ein Anfordern bzw. Abfragen (requesting) von Daten mittels einer Anweisung in Ausführung. In einigen Ausführungsformen kann eine Holen-Anfrage 302 mittels eines Daten-Zeigers in Speicher-Logik, welcher auf eine Adresse oder eine Stelle für die Daten zeigt, ausgestellt werden. Wenn der Anweisungs-Zeiger der Speicher-Logik auf die Adresse für die Daten zeigt, wird z. B. die Speicher-Logik auf diese Adresse gerichtet, um diese bestimmten Daten abzurufen. In dem in 3 gezeigten Beispiel führt die Holen-Anfrage zu einem Verfehlen, so dass bei 304 der Zwischenspeicher die angefragten Daten aus Hauptspeicher anfragt.
-
Während die angefragten Daten aus dem Hauptspeicher abgerufen werden, schreitet Verfahren 300 zu 306 fort, wo die Pipeline in Vorauslaufen eintritt und, bei 308, den Puffer, welcher die Anweisung umfasst, welche zu einem Eintreten in Vorauslaufen führt, mit einem Kontroll-Punkt versieht (checkpoints). Den Puffer mit Kontroll-Punkt-Versehen erhält den Zustand des Puffers (in einer mit Kontroll-Punkt versehenen Form) während des Vorauslaufens, während eine nicht mit Kontroll-Punkt versehene Version des Puffers in einem Arbeits-Zustand operiert. Die mit Kontroll-Punkt versehene Version wird auf ein Eintreten in ein Vorauslaufen hin mittels der Planer-Logik erzeugt.
-
4 zeigt schematisch eine Ausführungsform eines Verfahrens 400 zum Manipulieren eines Puffers bei Eintritt, während und bei Austritt von einem Beispiel-Vorauslaufen-Modus unter Benutzung einer Mehrzahl von Zeigern zum Nachverfolgen von Adressen oder Stellen von Anweisungen, welche in dem Puffer bei vier sequenziellen Zeiten 402, 404, 406 und 408 gespeichert sind.
-
In dem in 4 gezeigten Beispiel sind vier Bündel A1, A2, B1, C1 und C2 in dem Puffer bei Eintritt in Vorauslaufen bei Zeit 402 gespeichert, entsprechend den drei architektonischen Anweisungen A, B und C. Alle mit Anweisung C assoziierten Bündel sind nicht vollständig in den Puffer bei Zeit 402 eingefügt, da ein letztes Bündel (C3) noch nicht in den Puffer bei Zeit 402 eingefügt worden ist. In dem in 4 gezeigten Beispiel zeigt der De-Allokations-Zeiger „D” auf ein Bündel A1, welches zu Eintritt in Vorauslaufen führte, während Lese-Zeiger „R” auf ein Bündel B1 zeigt, welches als nächstes abzusetzen ist.
-
Bei Zeit 402 zeigt Verfahren 400 die Erzeugung einer mit Kontroll-Punkt versehenen Version des Puffers die mit Kontroll-Punkt versehene Version, wobei die mit Kontroll-Punkt versehene Version die mit Kontroll-Punkt versehene Version des De-Allokations-Zeigers umfasst. In der mit Kontroll-Punkt versehenen Version des Puffers bleiben der De-Allokations-Zeiger und der Inhalt des Puffers in dem mit Kontroll-Punkt versehenen Zustand, auf das Ende von Vorauslaufen wartend.
-
Die Ausführungsform der mit Kontroll-Punkt versehenen Version des in 4 gezeigten Puffers umfasst eine Mehrzahl von Leerstellen bzw. Vakanzen. Solche Vakanzen können von einem mit Kontroll-Punkt-Versehen des Puffers unmittelbar (innerhalb einer akzeptierbaren Toleranz) auf ein Eintreten in Vorauslaufen hin herrühren. Alternativ kann in einigen Ausführungsformen der Puffer mit einem Kontroll-Punkt versehen werden, nachdem Vorauslaufen beginnt, aber nicht bis der Puffer eine vorbestimmte Besetzung erreicht. Zum Beispiel kann in einigen solcher Ausführungsformen der Puffer nicht mit Kontroll-Punkt versehen werden, bis der Puffer voll wird. Solange, wie der Kontroll-Punkt vor einem Austreten aus Vorauslaufen erzeugt wird, können solche Herangehensweisen vergleichsweise mehr Anweisungen relativ zu der unmittelbar-mit-Kontroll-Punkt-Versehen-Herangehensweise speichern, was potentiell die Wahrscheinlichkeit eines Pipeline-Stillstands vermindert, bevor die Holen-Logik Anweisungen wieder nach Verlassen von Vorauslaufen absetzt.
-
Wenn von Vorauslaufen wieder gestartet wird, wird die Holen-Logik typischerweise auf einen Anweisungs-Zeiger gerichtet, welcher der letzten vollendeten Anweisung in dem Puffer folgt. Wie oben eingeführt, verfolgt der Wiederstart-Anweisungs-Zeiger eine Adresse oder eine Stelle nach, welche der letzten vollendeten Anweisung in dem Puffer folgt. In Ausführungsformen, in denen der Puffer Bündel von Mikro-Operationen hält, kann ein Grenze-Zeiger benutzt werden, um eine Grenze zwischen einem Bündel, welches einem Wiederstart-Anweisungs-Zeiger entspricht, und nachfolgenden Bündeln nachzuverfolgen, z. B. zum Nachverfolgen einer Grenze zwischen einer letzten vollendeten Anweisung, welche in dem Puffer gehalten ist, und einem nachfolgenden Bündel. Die in 4 gezeigte Ausführungsform zeigt einen Wiederstart-Anweisungs-Zeiger, welcher konfiguriert ist, eine Adresse oder eine Stelle, welche einer letzten vollendeten Anweisung in dem Puffer folgt, nachzuverfolgen, z. B. C1. 4 zeigt auch einen Grenze-Anweisungs-Zeiger „B”, welcher auch auf Bündel C1 zeigt. Wie in 4 gezeigt ist, wird der Grenze-Anweisungs-Zeiger bei Eintritt in Vorauslaufen nicht mit einem Kontroll-Punkt versehen, sondern bleibt eingefroren in der nicht mit Kontroll-Punkt versehenen Version während des Vorauslaufens. Diese Zugangsweise kann möglicherweise Speicherraum in dem mit Kontroll-Punkt versehenen Puffer sparen.
-
Fortführend mit 3 umfasst bei 310 Verfahren 300 ein spekulatives Ausführen in einem Vorauslaufen unter Benutzung der nicht mit Kontroll-Punkt versehenen Version des Puffers. Während Vorauslaufen fährt der Mikroprozessor fort, spekulativ Anweisungen auszuführen, manchmal unpräzise aufgrund nicht-verfügbarer Destinations-Daten, so dass zusätzliche Zwischenspeicher-Verfehlungen, Übersetzung-Lookaside-Puffer-Verfehlungen bzw. Fehler, und/oder Verzweigungs-Fehl-Vorhersage-Ereignisse identifiziert werden können, während der anfängliche Fehler, welcher das Vorauslaufen auslöste, erfüllt wird. Somit kann eine Erfüllung der zusätzlichen Verfehlungen und anderer potentiell unvorhersagbarer und/oder möglicher lang-laufender Stillstands-Bedingungen während einer Erfüllung der anfänglichen Verfehlens-Anfrage gestartet werden, was möglicherweise Zeit spart.
-
In der in 4 gezeigten Ausführungsform bewegen sich, wenn die Zeit von Zeit 402 zu Zeit 404 fortschreitet, der Lese-, Wiederholen-, Allokations- und De-Allokations-Zeiger, welche in der nicht mit Kontroll-Punkt versehenen Version des Puffers umfasst sind, wenn sich der Mikroprozessor durch spekulative Ausführung bewegt. Zum Beispiel ist in der nicht mit Kontroll-Punkt versehenen Version des Puffers Bündel C3 in den Puffer eingefügt und Bündel A1 wird von dem Puffer bei Zeit 404 dealloziert, die Lese- und Wiederholen-Zeiger rücken vor, usw.
-
In der Zwischenzeit werden bei 312 und 304 die fehlenden Daten, welche dafür verantwortlich sind, ein Eintrag-Vorauslaufen herbeizuführen, der Pipeline bereitgestellt, was den Lade-Fehler auflöst und dazu führt, dass Vorauslaufen bei 316 endet. Sobald der anfängliche Lade-Fehler erfüllt ist, ist die Pipeline bei 318 geleert (flushed), was ein Verwerfen von einem oder mehreren ungültigen Resultaten der spekulativen Ausführung umfassen kann, welche während des Vorauslaufens durchgeführt ist, und, in einer Ausführungsform, der nicht mit Kontroll-Punkt versehenen Version des Puffers, so dass der Mikroprozessor in demselben Zustand ist, in welchem er existierte, als Vorauslaufen begann.
-
Bei 320 umfasst Verfahren 300 ein Zurücksetzen des Puffers auf die mit Kontroll-Punkt versehene Version des Puffers, so dass der Puffer in den Zustand gesetzt ist, von dem der Mikroprozessor in Vorauslaufen eintrat. Zurücksetzen des Puffers auf die Kontroll-Punkt-versehene Version bei 320 umfasst ein Wiederherstellen des De-Allokations-Zeigers von der mit Kontroll-Punkt versehenen Version des Puffers.
-
In der in 4 gezeigten Ausführungsform ist Zurücksetzen des Puffers auf den mit Kontroll-Punkt versehenen Zustand bei Zeit 406 illustriert, was ein Kopieren der mit Kontroll-Punkt versehenen Version des De-Allokations-Zeigers von der mit Kontroll-Punkt versehenen Version des Puffers auf den nicht mit Kontroll-Punkt versehenen Puffer umfasst. In dem in 4 gezeigten Beispiel wird bei 406 der De-Allokations-Zeiger auf die nicht mit Kontroll-Punkt versehene Version des De-Allokations-Zeigers und auf den Wiederholen- und Lese-Zeiger kopiert, während der Grenze-Zeiger aufgetaut wird und in die Allokation-Zeiger-Position kopiert wird. Ferner zeigt der Wiederstart-Anweisungs-Zeiger auf die Adresse, welche mit B assoziiert ist, die letzte vollendete Anweisung, welche in dem Puffer vorhanden ist. In der Zwischenzeit zeigen der De-Allokation-, Lese- und Wiederholen-Zeiger auf das Bündel, welches mit Bündel A1 assoziiert ist, so dass A1 an die Ausführungs-Einheit erneut abgesetzt werden kann. Schließlich zeigt der Allokation-Zeiger auf die Stelle nach Anweisung B. Nach Wiederherstellung des Puffers nach Vorauslaufen, werden Bündel C1 und C2 logisch nicht in dem Puffer vorhanden sein. Demgemäß stellt ein Positionieren des Allokations-Zeigers, um die Stelle zu zeigen, welche der letzten vollendeten Anweisung folgt (Anweisung B in dem in 4 gezeigten Beispiel) bereit, dass alle die Bündel, welche mit der unvollendeten Anweisung assoziiert sind (Anweisung C in 4) auf eine Wiederherstellung des Puffers nach Vorauslaufen hin geholt werden können. Folglich können in dem in 4 gezeigten Beispiel bei Wiederstart alle der Zeiger in dem Puffer basierend auf dem De-Allokations-Zeiger und dem Grenze-Zeiger bestimmt werden.
-
Fortführend mit 3 umfasst bei 322 Verfahren 300 ein erneutes Absetzen der Anweisung, welche vorher Vorauslaufen herbeiführte. Erneutes Absetzen der Anweisung umfasst Lesen der Anweisung, welche zur erneuten Ausführung ausgewählt ist, daraufhin, dass der Mikroprozessor erneut in eine bestimmte Ausführungsstelle nach Vorauslaufen eintritt, und nach Lesen der ausgewählten Anweisung, erneutes Absetzen der Anweisung an einen oder mehrere Ausführungs-Mechanismen des Mikroprozessors. Sobald die Anweisung erneut ausgeführt worden ist und vollendet hat, wird die Anweisung logisch von dem Puffer, wie mittels des De-Allokations-Zeiger angezeigt, entfernt.
-
In dem in 4 gezeigten Beispiel ist der Lese-Zeiger dargestellt, bereit zu sein, Bündel A1 in Vorbereitung für ein Wieder-Absetzen und eine Wieder-Ausführung zu lesen. Wenn Bündel A1 aufgrund irgendeines Pipeline-Ausführungs-Stillstandes nicht vollendet, kann der Wiederholen-Zeiger in den Lese-Zeiger kopiert werden, um dazu zu führen, dass Bündel A1 wieder erneut abgesetzt wird, bis das Bündel erfolgreich vollendet. Sobald das Bündel vollendet, wird der Wiederholen-Zeiger vorgerückt und der Absetzen-Zeiger wird anzeigen, dass Bündel A1 bereit ist, logisch von dem Puffer entfernt zu werden.
-
Fortfahrend mit 3 umfasst bei 324 Verfahren 300 ein Holen einer anderen Anweisung von außerhalb des Puffers, während die ausgewählte Anweisung erneut abgesetzt wird. Bei 326 kann eine nachfolgende Anweisung von innerhalb des Puffers zur Ausführung abgesetzt werden (z. B. Anweisung B1, wie in 4 gezeigt), während bei 328 die Anweisung von außerhalb des Puffers von dem Zwischenspeicher zurückgegeben wird.
-
Es wird geschätzt werden, dass die mit Kontroll-Punkt-versehene-Schemata, welche oben beschrieben sind, nur für illustrative Zwecke bereitgestellt sind und dass virtuell irgendeine geeignete Vorgehensweise zum mit Kontroll-Punkt-Versehen des Puffers eingesetzt werden kann, ohne von dem Geltungsbereich der vorliegenden Offenbarung abzuweichen. Zum Beispiel kann in einem Szenario der Puffer zusammen oder entlang mit dem Grenze-, De-Allokations- und Allokations-Zeiger bei Eintritt in Vorauslaufen mit einem Kontroll-Punkt versehen werden. Bei Austritt von Vorauslaufen kann der Puffer dadurch wieder hergestellt werden, dass die mit Kontroll-Punkt versehenen Versionen des Grenze-, De-Allokations- und Allokations-Zeiger von den mit Kontroll-Punkt versehenen Versionen davon kopiert werden, wobei der De-Allokations-Zeiger auch in den Lese- und Wiederholen-Zeiger kopiert wird, so dass der Lese-, Wiederholen- und De-Allokations-Zeiger auf eine gemeinsame Adresse zeigen.
-
Es wird geschätzt werden, dass hierin beschriebene Verfahren nur für illustrative Zwecke bereitgestellt sind und nicht als begrenzend beabsichtigt sind. Demgemäß wird es geschätzt werden, dass einige Ausführungsformen der hierin beschriebenen Verfahren zusätzliche oder alternative Prozesse umfassen können, während in einigen Ausführungsformen die hierin beschriebenen Verfahren einige Prozesse umfassen können, welche umgeordnet oder ausgelassen werden können, ohne von dem Geltungsbereich der vorliegenden Offenbarung abzuweichen. Ferner wird es geschätzt werden, dass die hierin beschriebenen Verfahren unter Benutzung irgendeiner geeigneten Hardware einschließlich der hierin beschriebenen Hardware durchgeführt werden können.
-
5 zeigt schematisch eine Beispiel-Speicher-Zelle 500 für einen Puffer gemäß Ausführungsform der vorliegenden Offenbarung. In der in 5 gezeigten Ausführungsform ist der Puffer in Speicher-Zelle 500 unter Benutzung von 2N Einträgen, welche in Paaren angeordnet sind, gespeichert. Lese-Dekodierer 502 und Schreibe-Dekodierer 504 können, wenn eine Adresse X gegeben ist, auf verschiedene Einträge oder auf denselben Eintrag dekodieren, abhängig davon, ob ein Eintrag der mit Kontroll-Punkt versehene Eintrag ist (und somit während eines Vorauslaufens nicht überschrieben werden mag) und abhängig davon, ob der Eintrag bereits in die nicht mit Kontroll-Punkt versehene Untermenge geschrieben worden ist. In einigen solcher Ausführungsformen kann die Planer-Logik ein Adress-Bit umfassen, welches konfiguriert ist, zu identifizieren, ob eine ausgewählte Adresse für einen ausgewählten Eintrag in Speicher-Zelle 500 einer mit Kontroll-Punkt versehenen Version des Puffers oder einer nicht mit Kontroll-Punkt versehenen Version des Puffers entspricht. Die Adresse kann benutzt werden, um zu identifizieren, ob Information in einer Arbeits-Version oder in einer mit Kontroll-Punkt versehenen Version des Puffers zu speichern oder zuzugreifen ist. Speicher-Zelle 500 kann virtuell irgendeine geeignete Speicher-Zelle sein. Zum Beispiel kann in einigen Ausführungsformen Speicher-Zelle 500 einen SRAM umfassen.
-
Exemplarische Konzepte der vorliegenden Offenbarung umfassen:
Konzept 1. Mikroprozessor, aufweisend: Holen-Logik; einen oder mehrere Ausführungs-Mechanismen zum Ausführen einer abgerufenen Anweisung, welche mittels der Holen-Logik bereitgestellt ist; und Planer-Logik zum Planen der abgerufenen Anweisung zur Ausführung, wobei die Planer-Logik einen Puffer zum Speichern der abgerufenen Anweisung und einer oder mehrerer zusätzlicher Anweisungen umfasst, wobei die Planer-Logik konfiguriert ist, daraufhin, dass der Mikroprozessor bei einer bestimmten Ausführungs-Stelle nach Vorauslaufen erneut eintritt, aus dem Puffer eine Anweisung erneut abzusetzen, welche vorher an einen der Ausführungs-Mechanismen abgesetzt worden ist.
Konzept 2. Mikroprozessor von Konzept 1, wobei der Puffer in einem einzelnen Feld gespeichert ist, welches 2N Einträge, welche in Paaren angeordnet sind, aufweist.
Konzept 3. Mikroprozessor gemäß Konzept 2, wobei die Planer-Logik ein Adress-Bit umfasst, welches konfiguriert ist, zu identifizieren, ob eine ausgewählte Adresse für einen ausgewählten Eintrag in Speicher-Zellen einer mit Kontroll-Punkt versehenen Version des Puffers oder einer nicht mit Kontroll-Punkt versehenen Version des Puffers entspricht.
Konzept 4. Mikroprozessor gemäß Konzept 1, wobei der Puffer aufweist: einen Lese-Zeiger zum Lesen einer ausgewählten Anweisung, welche in dem Puffer gehalten ist, in Vorbereitung zum Absetzen der ausgewählten Anweisung zur Ausführung; und einen De-Allokations-Zeiger zum Dazuführen, dass die ausgewählte Anweisung logisch aus dem Puffer entfernt wird, nachdem die ausgewählte Anweisung vollendet.
Konzept 5. Mikroprozess gemäß Konzept 4, wobei der Puffer ferner aufweist: einen Wiederholen-Zeiger zum Dazuführen, dass eine ausgewählte Anweisung zur erneuten Ausführung während eines Wiederholens erneut abgesetzt wird; und einen Wiederstart-Anweisungs-Zeiger zum Nachverfolgen einer Adresse, welche einer letzten vollendeten Anweisung folgt, welche in dem Puffer gehalten wird, wobei der Wiederstart-Anweisungs-Zeiger einen Anweisungs-Zeiger für die Holen-Logik so lenkt, dass die Holen-Logik eine andere Anweisung von außerhalb des Puffers holt, während die ausgewählte Anweisung zur erneuten Ausführung erneut abgesetzt wird.
Konzept 6. Mikroprozessor gemäß Konzept 5, wobei die Planer-Logik ferner aufweist: eine mit Kontroll-Punkt versehene Version des Puffers, welche eine Anweisung, welche Eintritt in Vorauslaufen herbeiführt, und eine Mehrzahl von nachfolgenden Anweisungen aufweist; und eine nicht mit Kontroll-Punkt versehene Version des Puffers, welche in einem Arbeits-Zustand während Vorauslaufen operiert; wobei, nach Vorauslaufen, die Planer-Logik konfiguriert ist, den Puffer auf die mit Kontroll-Punkt versehene Version zurückzusetzen.
Konzept 7. Mikroprozessor gemäß Konzept 6, wobei der Puffer konfiguriert ist, eine Mehrzahl von Bündeln von Mikro-Operationen zu speichern, wobei jede Mikro-Operation einer oder mehreren Anweisungs-Satz-Architektur-(ISA)-Anweisungen oder Teilen von ISA-Anweisungen entspricht, wobei die Planer-Logik ferner einen Grenze-Anweisungs-Zeiger zum Nachverfolgen einer Grenze zwischen einem letzten Bündel für eine vollendete ISA-Anweisung, welche in dem Puffer gehalten ist, und einem nachfolgenden Bündel aufweist, welches zu einer unvollendeten ISA-Anweisung gehört, welche in dem Puffer gehalten ist, wobei der Wiederstart-Anweisungs-Zeiger konfiguriert ist, eine Adresse nachzuverfolgen, welche einer letzten vollendeten Anweisung, welche in dem Puffer gehalten ist, folgt, wie mittels des Grenze-Anweisungs-Zeigers nachverfolgt.
Konzept 8. Mikroprozessor gemäß Konzept 6, wobei die mit Kontroll-Punkt versehene Version mittels der Planer-Logik auf einen Eintritt in Vorauslaufen hin erzeugt wird.
Konzept 9. Mikroprozessor gemäß Konzept 8, wobei die mit Kontroll-Punkt versehene Version eine oder mehrere Vakanzen umfasst.
Konzept 10. Mikroprozessor gemäß Konzept 1, wobei die Holen-Logik und die Planer-Logik stromaufwärts einer Pipeline sind, welche in dem Mikroprozessor umfasst ist.
Konzept 11. Mikroprozessor gemäß Konzept 1, wobei die Planer-Logik in der Holen-Logik und/oder der Dekodierer-Logik zum Dekodieren einer Anweisung zur Ausführung bei einem der Ausführungs-Mechanismen des Mikroprozessors umfasst ist.
Konzept 12. Ein Verfahren zum Erneut-Absetzen einer Anweisung, welche bei einem Mikroprozessor auszuführen ist, wobei das Verfahren aufweist: Lesen einer Anweisung, welche zur erneuten Ausführung ausgewählt ist, daraufhin, dass der Mikroprozessor erneut in eine bestimmte Ausführungs-Stelle nach Vorauslaufen eintritt, wobei die Anweisung in einem Puffer für erneutes Absetzen an einen oder mehrere Ausführungs-Mechanismen des Mikroprozessors gehalten ist; nach Lesen der ausgewählten Anweisung, erneutes Absetzen der Anweisung; und, von außerhalb des Puffers, Holen einer anderen Anweisung, während die ausgewählte Anweisung erneut ausgeführt wird.
Konzept 13. Verfahren gemäß Konzept 12, ferner aufweisend, in Antwort auf Eintritt in Vorauslaufen, Erzeugen einer mit Kontroll-Punkt versehenen Version des Puffers, wobei die mit Kontroll-Punkt versehene Version eine Anweisung, welche zu einem Eintritt in Vorauslaufen führt, und eine Mehrzahl von nachfolgenden Anweisungen aufweist.
Konzept 14. Verfahren gemäß Konzept 13, ferner aufweisend, nach Vorauslaufen und vor Lesen der Anweisung, welche in dem Puffer gehalten ist, Zurücksetzen einer nicht mit Kontroll-Punkt versehenen Version des Puffers auf die mit Kontroll-Punkt versehene Version.
Konzept 15. Verfahren gemäß Konzept 14, wobei Setzen der nicht mit Kontroll-Punkt versehenen Version des Puffers auf die mit Kontroll-Punkt versehene Version umfasst: Kopieren einer mit Kontroll-Punkt versehenen Version eines De-Allokations-Zeigers auf einen Lese-Zeiger, wobei der De-Allokations-Zeiger konfiguriert ist, dazu zu führen, dass die Anweisung logisch aus dem Puffer entfernt wird, nachdem die ausgewählte Anweisung vollendet, wobei der Lese-Zeiger konfiguriert ist, die Anweisung in Vorbereitung zur Ausführung zu lesen; und Kopieren der mit Kontroll-Punkt versehenen Version des De-Allokations-Zeigers auf einen Wiederholen-Zeiger, wobei der Wiederholen-Zeiger konfiguriert ist, dazu zu führen, dass eine ausgewählte Anweisung zur erneuten Ausführung während einer Wiederholung erneut abgesetzt wird.
Konzept 16. Verfahren gemäß Konzept 15, wobei erneutes Absetzen der Anweisung aufweist: Lesen der Anweisung, wie mittels des Lese-Zeigers angezeigt; Absetzen der Anweisung an den einen oder die mehreren Ausführungs-Mechanismen; und logisches Entfernen der Anweisung von dem Puffer auf eine Vollendung hin, wie mittels des De-Allokations-Zeigers angezeigt ist.
Konzept 17. Verfahren gemäß Konzept 16, wobei erneutes Absetzen der Anweisung ferner aufweist Wiederholen der Anweisung, wie mittels des Wiederholen-Zeigers angezeigt, in Antwort auf einen Ausführungs-Stillstand.
Konzept 18. Verfahren gemäß Konzept 16, wobei Holen einer anderen Anweisung von außerhalb des Puffers aufweist Kopieren eines Wiederstart-Anweisungs-Zeigers auf einen Anweisungs-Zeiger für eine Holen-Logik des Mikroprozessors, so dass die Holen-Logik die andere Anweisung von außerhalb des Puffers holt, während die Anweisung erneut ausgeführt wird, wobei der Wiederstart-Anweisungs-Zeiger konfiguriert ist, eine Adresse nachzuverfolgen, welche einer letzten vollendeten Anweisung folgt, welche in dem Puffer gehalten ist.
Konzept 19. Verfahren gemäß Konzept 18, wobei der Puffer konfiguriert ist, eine Mehrzahl von Bündeln von Mikro-Operationen zu speichern, wobei jede Mikro-Operation einer oder mehreren ISA-Anweisungen oder Teilen von ISA-Anweisungen entspricht, wobei der Wiederstart-Anweisungs-Zeiger konfiguriert ist, eine Adresse, welche einer letzten vollendeten Anweisung folgt, welche in dem Puffer gehalten ist, mit Bezugnahme auf einen Grenze-Anweisungs-Zeiger nachzuverfolgen, welcher konfiguriert ist, eine Grenze zwischen einem letzten Bündel für eine vollendete ISA-Anweisung, welche in dem Puffer gehalten ist, und einem nachfolgenden Bündel nachzuverfolgen, welches zu einer unvollendeten ISA-Anweisung, welche in dem Puffer gehalten ist, gehört, und wobei Holen einer anderen Anweisung von außerhalb des Puffers aufweist Nachverfolgen einer Grenze zwischen einem letzten Bündel für eine vollendete ISA-Anweisung, welche in dem Puffer gehalten ist, und einem nachfolgenden Bündel, welches zu einer unvollendeten ISA-Anweisung gehört, welche in dem Puffer gehalten ist, mit dem Grenze-Anweisungs-Zeiger.
Konzept 20. Mikroprozessor, aufweisend eine Planer-Logik, wobei die Planer-Logik aufweist: einen Puffer zum Speichern einer Mehrzahl von Bündeln von Mikro-Operationen in einem mit Kontroll-Punkt versehenen Zustand während Vorauslaufen, wobei jede Mikro-Operation einer oder mehreren ISA-Anweisungen, welche in dem Puffer gehalten sind, entspricht für Absetzen an einen Ausführungs-Mechanismus des Mikroprozessors zur Ausführung auf ein erneutes Eintreten nach Vorauslaufen, wobei zumindest eine der ISA-Anweisungen vorher an den Ausführungs-Mechanismus abgesetzt worden ist; einen Grenze-Anweisungs-Zeiger zum Nachverfolgen einer Grenze zwischen einem letzten Bündel für eine letzte vollendete ISA-Anweisung, welche in dem Puffer gehalten ist, und einem nachfolgendem Bündel, welches zu einer unvollendeten ISA-Anweisung, welche in dem Puffer gehalten ist, gehört; und einen Wiederstart-Anweisungs-Zeiger zum Nachverfolgen einer Adresse, welche einer letzten vollendeten Anweisung, welche in dem Puffer gehalten ist, folgt, wobei der Wiederstart-Anweisungs-Zeiger einen Anweisungs-Zeiger für Holen-Logik so lenkt, dass die Holen-Logik eine andere Anweisung von außerhalb des Puffers holt, während die eine oder die mehreren ISA-Anweisungen, welche in dem Puffer gehalten sind, zur erneuten Ausführung erneut abgesetzt werden.
-
Diese geschriebene Beschreibung benutzt Beispiele um die Erfindung zu offenbaren, einschließlich des besten Modus, und versetzt einen gewöhnlichen Fachmann in der betreffenden Technik auch in die Lage, die Erfindung zu praktizieren, einschließlich eines Herstellens und eines Benutzens irgendwelcher Geräte oder Systeme und eines Durchführens irgendwelcher inkorporierter Verfahren. Der patentierbare Geltungsbereich der Erfindung ist mittels der Ansprüche definiert und kann andere Beispiele umfassen, wie durch die gewöhnlichen Fachleute in der Technik verstanden wird. Solche anderen Beispiele sind beabsichtigt innerhalb des Geltungsbereichs der Ansprüche zu sein.