-
Mikroprozessoren setzen typischerweise Anweisungs-Zwischenspeicher (instruction caches) ein, um Abruf und Ausführung von Anweisungen zu beschleunigen. Der Anweisungs-Zwischenspeicher agiert typischerweise als ein Pufferspeicher zwischen einem höheren Niveau von Speicher und einem Prozessor. Wenn eine Anweisung von dem Prozessor geholt wird, wird die Anweisung zum direkten Zugriff mittels des Prozessors in den Anweisungs-Zwischenspeicher kopiert. Wenn dieselben Anweisungen häufig in einem Satz von Programm-Anweisungen benutzt werden, ergibt eine Speicherung dieser Anweisungen in dem Anweisungs-Zwischenspeicher eine Erhöhung im Durchsatz, weil langsamere Zugriffe von Höheres-Niveau-Speicher vermindert sind.
-
Zum Beispiel kann ein Satz-assoziativer Anweisungs-Zwischenspeicher ein Daten-Feld und ein Kennzeichen-Feld oder Tag-Feld umfassen. Das Daten-Feld und Kennzeichen-Feld können kombiniert werden, um Zwischenspeicher-Zeilen oder -Wörter zu bilden, welche in verschiedenen Weisen innerhalb des Anweisungs-Zwischenspeichers organisiert sind. Wenn eine Adresse für eine Anweisung-Holen-Operation erzeugt wird, vergleicht der Anweisungs-Zwischenspeicher ein Kennzeichen-Feld (tag field) der Adresse mit Kennzeichen-Werten, welche momentan in einem entsprechenden Zwischenspeicher-Zeile-Satz des Kennzeichen-Feldes gespeichert sind. Wenn eine Kennzeichen-Übereinstimmung existiert, und wenn das Kennzeichen gültig ist (d. h. ein Zwischenspeicher-Treffer), dann werden diese Daten von der Stelle in dem Daten-Feld geholt, welche der gewünschten Adresse entspricht. Da die Daten direkt von dem Anweisungs-Zwischenspeicher abgerufen werden, ist eine Geschwindigkeit verbessert als ein Resultat, dass nicht auf externen Speicher zugegriffen werden muss.
-
In einer beispielhaften Implementierung eines Anweisung-Zwischenspeichers werden, wenn eine Adresse für eine Anweisung-Holen-Operation erzeugt wird, Teile des Kennzeichen-Felds und des Daten-Felds, welche einen Satz von Zwischenspeicher-Zeilen entsprechen, welche potentiell mit der Adresse übereinstimmen, parallel aktiviert. Mit anderen Worten werden alle Wege oder Weisen (all ways) in dem Kennzeichen-Feld, welche dem Satz von Zwischenspeicher-Zeilen entsprechen, aktiviert und alle Adressen in dem Daten-Feld, welche dem Satz von Zwischenspeicher-Zeilen entsprechen, werden aktiviert. Wenn das Kennzeichen-Feld und das Daten-Feld aktiviert sind, wird die Daten-Feld-Stelle, welche die Daten hält, welche der Anweisungs-Adresse entsprechen, geholt und die Daten in den anderen aktivierten Stellen werden verworfen. Indem alle Stellen sowohl des Kennzeichen-Feldes als auch des Daten-Feldes, welche dem Satz von Zwischenspeicher-Zeilen entsprechen, parallel aktiviert werden, kann eine Anweisung-Holen-Operation typischerweise verglichen mit einem seriellen Vorgehen schneller durchgeführt werden, wo alle Kennzeichen-Stellen aktiviert werden, um eine übereinstimmende Daten-Stelle in einem Taktzyklus zu identifizieren, und dann wird eine einzelne Stelle in dem Daten-Feld aktiviert, um die Daten in einem nachfolgenden Taktzyklus zu holen.
-
Es gibt jedoch verschiedene Begrenzungen mit diesen parallelen und seriellen Vorgehensweisen zum Durchführen einer Anweisung-Holen-Operation. In dem parallelen Vorgehen ist z. B., da alle Daten-Stellen in dem Daten-Feld, welche dem Satz von Zwischenspeicher-Zeilen entsprechen, aktiviert werden, um Daten von nur einer Stelle zu holen, ein Energieverbrauch zum Vorteil eines Erhöhens einer Verarbeitungs-Geschwindigkeit erhöht. Mit anderen Worten ist die parallele Zugangsweise schneller, ist jedoch auch energiehungriger. Auf der anderen Seite ist in dem seriellen Zugang ein Energieverbrauch dadurch reduziert, dass nur eine Stelle in dem Daten-Feld aktiviert wird. Die Kennzeichen-Feld- und Daten-Feld-Zugriffe müssen jedoch seriell über mehrere Taktzyklen erfolgen, um zu identifizieren, welche Stelle in dem Daten-Feld aktiviert werden muss, um die gewünschten Daten zu holen. In anderen Worten opfert der serielle Zugang eine Verarbeitungs-Geschwindigkeit zum Vorteil eines Reduzierens von Energieverbrauch.
-
ZUSAMMENFASSUNG
-
Ausführungsformen, welche ein Steuern eines Anweisungs-Zwischenspeichers eines Mikroprozessors in solch einer Weise betreffen, dass ein Energieverbrauch vermindert ist, ohne signifikant eine Performanz des Mikroprozessors zu vermindern, sind bereitgestellt. In einer Ausführungsform umfasst ein Verfahren zum Steuern eines Anweisungs-Zwischenspeichers, welcher ein am-wenigsten-kürzlich-benutzte-Bits-Feld (at least recently-used bit array), ein Kennzeichen-Feld (tag array), und ein Daten-Feld umfasst, Nachschauen (looking up), in dem am-wenigsten-kürzlich-benutzte-Bits-Feld nach am-wenigsten-kürzlich-benutzte-Bits für jeden einer Mehrzahl von Zwischenspeicher-Zeile-Sätzen in dem Anweisungs-Zwischenspeicher, Bestimmen eines kürzlichst-benutzten-Weges in einem designierten Zwischenspeicher-Zeile-Satz der Mehrzahl von Zwischenspeicher-Zeile-Sätzen basierend auf den am-wenigsten-kürzlich-benutzten-Bits für die designierte Zwischenspeicher-Zeile, Nachschauen, in dem Kennzeichen-Feld, nach Kennzeichen für einen oder mehrere Wege in dem designierten Zwischenspeicher-Zeile-Satz, Nachschauen, in dem Daten-Feld, nach Daten, welche in dem kürzlichst-benutzten Weg in dem designierten Zwischenspeicher-Zeile-Satz gespeichert sind, und wenn es einen Zwischenspeicher-Treffer in dem kürzlichst-benutzten Weg gibt, Abrufen der Daten, welche in dem kürzlichst-benutzten Weg gespeichert sind, von dem Daten-Feld.
-
KURZE BESCHREIBUNG DER ZEICHNUNGEN
-
1 zeigt eine Ausführungsform eines Mikroprozessors eines Rechengeräts gemäß der vorliegenden Offenbarung.
-
2 zeigt eine Ausführungsform einer Computer-Verarbeitungs-Pipeline gemäß der vorliegenden Offenbarung.
-
3 zeigt schematisch einen Teil einer Ausführungsform eines Anweisungs-Zwischenspeichers.
-
4 zeigt ein Kodieren (encoding) von am-wenigsten-kürzlich-benutzten-Bits, welches einen am wenigsten-häufig-benutzten Weg in einem Zwischenspeicher-Zeilen-Satz eines Anweisungs-Zwischenspeichers identifiziert.
-
5 zeigt ein Kodieren von am-wenigsten-kürzlich-benutzten-Bits, welches einen kürzlichst-benutzten Weg in einem Zwischenspeicher-Zeilen-Satz eines Anweisungs-Zwischenspeichers identifiziert.
-
6 zeigt eine Ausführungsform eines Verfahrens zum Steuern eines Anweisungs-Zwischenspeichers.
-
7 zeigt eine Zeitlinie einer beispielhaften Anweisungs-Zwischenspeicher-Operation gemäß der vorliegenden Offenbarung.
-
DETAILLIERTE BESCHREIBUNG
-
Die vorliegende Diskussion führt neue Systeme und Verfahren zum Steuern eines Anweisungs-Zwischenspeichers eines Mikroprozessors in solch einer Weise, dass ein Energieverbrauch vermindert ist, ohne signifikant eine Performanz des Mikroprozessors zu vermindern, aus. Insbesondere betrifft die vorliegende Diskussion ein Optimieren einer Steuerung eines Anweisungs-Zwischenspeichers, indem ein kürzlichst-benutzter (MRU) Weg oder Weise (way) (oder Adresse) von einem Satz von Wegen oder Weisen in dem Anweisungs-Zwischenspeicher, welcher in einer Anweisungs-Hol-Operation (instruction fetch) spezifiziert ist, bestimmt wird. Die Information über den MRU-Weg oder -Weise wird benutzt, um effizient auf den Anweisungs-Zwischenspeicher dadurch zuzugreifen, dass nur die MRU-Weise (MRU way) aktiviert ist und nicht die anderen Weisen oder Wege in dem Zwischenspeicher-Zeile-Satz aktiviert werden, um Daten abzurufen, welche bei dem MRU-Weg gespeichert sind. Wenn es einen Zwischenspeicher-Treffer bei dem MRU-Weg bzw. der MRU-Weise gibt, kann auf diese Weise die Menge von Energie, welche verbraucht ist, um die Daten in dem Anweisungs-Zwischenspeicher nachzuschauen, relativ zu Implementierungen vermindert werden, wo alle Wege oder Weisen in einem Satz aktiviert sind, um Daten von einem einzelnen Weg oder von einer einzelnen Weise abzurufen. Außerdem kann die MRU-Weise bzw. der MRU-Weg parallel mit den Kennzeichen oder Tags (tags) eines Zwischenspeicher-Zeilen-Satzes nachgeschaut werden, um schnellere Performanz relativ zu einem seriellen Zugang bereitzustellen.
-
Auf der anderen Seite sind dann, wenn es einen Treffer in einem der Wege in dem Satz anders als der MRU-Weg gibt, die Daten dann nicht verfügbar aufgrund der begrenzten Aktivierung des MRU-Weges und ein anderer Weg bzw. eine andere Weise in dem Satz wird nachfolgend aktiviert, um die Daten abzurufen. Dieses Wiederholungsspiel des Zwischenspeicher-Nachschauens vermindert im Allgemeinen eine Performanz, da es effektiv die Anweisungs-Zwischenspeicher-Treffer-Wartezeit erhöht. Die Häufigkeit dieses Ereignis-Typs ist jedoch selten genug, dass die Gesamt-Energieersparnis die geringere Verminderung in Performanz aufwiegt, verglichen mit dem parallelen Nachschau-Zugang. Wenn dieser Ereignis-Typ passiert, ist die Performanz ähnlich zu dem seriellen Nachschau-Zugang.
-
Wenn es keinen Treffer von irgendeiner Weise oder irgendeinem Weg in dem Satz gibt (d. h. ein Zwischenspeicher-Verfehlen), gibt es ferner keine Änderung des Verhaltens des Anweisungs-Zwischenspeichers relativ zu anderen Implementierungen, da die Daten von einem Höher-Niveau-Zwischenspeicher abgerufen werden müssen. Mit anderen Worten gibt es, wenn ein Zwischenspeicher-Verfehlen auftritt, keine Performanz-Strafe relativ zu dem Anweisung-Zwischenspeicher-Steuer-Zugang, wo alle Wege oder alle Weisen in einem Satz aktiviert werden, um die Daten abzurufen, und der Energieverbrauch ist noch geringer als der parallele Nachschau-Zugang.
-
1 zeigt schematisch einen Mikroprozessor 100, welcher im Zusammenhang mit den Systemen und Verfahren, welche hierin beschrieben sind, eingesetzt werden kann. Der Mikroprozessor 100 umfasst verschiedentlich und/oder kommuniziert mit einer Speicher-Hierarchie 110, welche einen L1-Prozessor-Zwischenspeicher 112, einen L2-Prozessor-Zwischenspeicher 114, einen L3-Prozessor-Zwischenspeicher 116, Hauptspeicher 118 (z. B. einen oder mehrere DRAM-Chips), sekundären Speicher 120 (z. B. magnetische und/oder optische Speicher-Einheiten) und/oder tertiären Speicher 122 (z. B. eine Band-Farm) umfasst. Es wird verstanden werden, dass diese Speicher/Sicherungs-Komponenten in ansteigender Ordnung von Zugriffs-Zeit und Kapazität aufgelistet sind, obwohl es mögliche Ausnahmen gibt. Eine Speicher-Steuerung 124 handhabt das Protokoll und stellt die Signal-Schnittstelle bereit, welche von Hauptspeicher 118 erfordert ist, und typischerweise um Speicher-Zugriffe zu planen (schedule). Die Speicher-Steuerung kann auf einem Prozessor-Die oder auf 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. Die gezeigte Speicher-Hierarchie ist eine beispielhafte Illustration und es wird verstanden, dass andere Hierarchien eingesetzt werden können, ohne von dem Geist der vorliegenden Offenbarung abzuweichen.
-
Der Mikroprozessor 100 umfasst Hol-Logik 126, Dekodier-Logik 128, Ausführungs-Logik 130, mem-Logik 132 und Rückschreib-(write back)-Logik 134. Hol-Logik 126 ruft Anweisungen von der Speicher-Hierarchie 110 ab (typischerweise von dem dedizierten L1-Anweisungs-Zwischenspeicher, welcher durch L2-L3-Zwischenspeicher und Hauptspeicher unterstützt oder abgesichert ist), zur Speicherung in einem Anweisungs-Zwischenspeicher 216 (in 2 gezeigt). Der Anweisungs-Zwischenspeicher 216 kann gemäß Systemen und Verfahren, welche hierin beschrieben sind, gesteuert werden, um Energieverbrauch mittels des Mikroprozessors 100 zu reduzieren, wenn Anweisungs-Hol-Operationen durchgeführt werden.
-
Dekodier-Logik 128 dekodiert geholte Anweisungen, z. B. dadurch, dass Opcodes, Operanden und Adressierungsmoden geparst bzw. analysiert werden. Auf ein Parsen hin werden die Anweisungen dann mittels der Ausführungs-Logik 130 ausgeführt. Für Operationen, welche ein Ergebnis erzeugen (z. B. im Gegensatz zu denjenigen, welche eine Verzweigung zu einer anderen Stelle in dem ausführenden Programm durchführen), schreibt die Rückschreib-Logik 134 das Ergebnis an eine geeignete Stelle, wie etwa in ein Prozessor-Register. In Lade-/Speicher-Architekturen führt mem-Logik 132 Lade- und Speicher-Operationen durch, wie etwa Laden eines Operanden von Haupt-Speicher in ein Prozessor-Register.
-
Es sollte verstanden werden, dass die obigen fünf Stufen etwas spezifisch sind für und in einer typischen reduzierter-Anweisungs-Satz-Rechen-(RISC)-Implementierung umfasst sind. Im Allgemeinen kann ein Mikroprozessor Hol-, Dekodier- und Ausführungs-Logik umfassen, wobei mem- und Rückschreib-Funktionalität mittels der Ausführungs-Logik ausgeführt ist. Die vorliegende Offenbarung ist auf diese und andere Mikroprozessor-Implementierungen gleich anwendbar.
-
In den beschriebenen Beispielen können Anweisungen eine zu einer Zeit geholt und ausgeführt werden, möglicherweise mehrere Taktzyklen erfordernd. Während dieser Zeit können signifikante Teile des Daten-Pfades unbenutzt sein. Zusätzlich zu oder anstatt eines Einzel-Anweisungs-Holens können Zuvor-Holen-Verfahren benutzt werden, um Performanz zu verbessern und Warte-Flaschenhälse zu vermeiden, welche mit Lese- und Speicher-Operationen assoziiert sind (d. h. das Lesen von Anweisungen und das Laden solcher Anweisungen in Prozessor-Register und/oder Ausführungs-Queue). Außerdem können mehrere Anweisungen bei einer gegebenen Zeit geholt werden, um Performanz zu verbessern.
-
Um höhere Performanz zu erreichen, können exemplarische Mikroprozessoren in einer Pipeline betrieben werden (pipelined), um einen Anweisung-Niveau-Parallelismus auszunutzen und effektiver den Daten-Pfad zu nutzen, so dass es mehrere Anweisungen in verschiedenen Stadien oder Stufen von Ausführung bei derselben Zeit gibt. 2 zeigt eine Ausführungsform einer Verarbeitungs-Pipeline 200 gemäß der vorliegenden Beschreibung.
-
Die Verarbeitungs-Pipeline 200 umfasst z. B. fünf Stufen:
- • Anweisung-Holen (IF) 202
- • Anweisung-Dekodieren (ID) 204;
- • Ausführen (EX) 206;
- • Speichern (MEM) 208;
- • Rückschreiben (WB) 210.
-
In der IF-Stufe 202 wird eine Anweisung zur Ausführung in der Verarbeitungs-Pipeline 200 geholt. Ferner wird in der ID-Stufe 204 die vorher geholte Anweisung dekodiert und Register-Quell-Operanden werden von der Dekodier-Logik einschließlich einer Registerdatei gelesen. In der EX-Stufe 206 wird Ausführungs-Logik benutzt, um entweder ein Ergebnis zu berechnen (z. B. für eine „ADD”-Anweisung), die effektive Adresse für eine Speicher-Operation zu berechnen (z. B. ein „Laden” oder „Speichern”), oder eine Verzweigungs-Ziel-Adresse zu berechnen (z. B. für eine „Verzweigungs”-Anweisung), wo die Verarbeitungs-Pipeline 200 ihre nächste Anweisung holen sollte, wenn eine Verzweigung genommen wird. In der MEM-Stufe 208 greifen Lade- und Speicher-Anweisungen auf den Daten-Speicher (oder Zwischenspeicher) zu. Während der WB-Stufe 210 schreiben irgendwelche Anweisungen mit einer Register-Destination-Operation (z. B. „Addiere” oder „Speichere”) ihr Ergebnis auf eine Registerdatei (nicht gezeigt). Somit kann eine Anweisung Ergebnisse zurück auf ein internes Register schreiben, während eine andere Anweisung Daten liest oder schreibt, wobei die unmittelbar folgende Anweisung eine Operation ausführt und wobei die dieser folgende Anweisung Register-Operanden abruft, während noch eine andere Anweisung geholt wird.
-
Mit Hinwendung spezifisch auf die IF-Stufe 202 konzentriert sich die vorliegende Diskussion auf ein Steuern eines Anweisungs-Zwischenspeichers 216 während einer Anweisung-Holen-Operation. Die IF-Stufe 202 umfasst einen Programm-Zähler 212, welcher eine Speicher-Adresse einer Anweisung, welche in einer Anweisungs-Sequenz der Verarbeitungs-Pipeline 200 auszuführen ist, nachverfolgt (keeps track). Der Programm-Zähler 212 sendet eine Adresse einer auszuführenden Anweisung an einen Anweisungs-Speicher 214. Der Anweisungs-Speicher 214 umfasst einen Anweisungs-Zwischenspeicher 216 und eine Schnittstelle zu Höheres-Niveau-Speicher 226 (z. B. Höheres-Niveau-Zwischenspeicher und andere Speicher-Subsysteme). Man bemerke, dass der Anweisungs-Speicher in einer vereinfachten Form präsentiert ist und es wird geschätzt werden, dass der Anweisungs-Speicher zusätzlich oder alternativ verschiedene andere Typen von Speicher umfassen kann.
-
Der Anweisungs-Zwischenspeicher 216 agiert als ein Puffer-Speicher zwischen der Höheres-Niveau-Speicher-Schnittstelle 226 und den Stufen der Verarbeitungs-Pipeline 200. Wenn Anweisungen geholt werden, werden die Daten bei der Stelle durch den Programm-Zähler 212 referenziert, werden Stellen, welche mittels der Anweisungen angefordert sind, in den Anweisungs-Zwischenspeicher 216 kopiert, um durch die Verarbeitungs-Pipeline 200 gesendet zu werden. Wenn dieselben Anweisungs-Daten häufig zu einem Satz von Programm-Anweisungen benutzt werden, ergibt eine Speicherung dieser Anweisungen in dem Anweisungs-Zwischenspeicher 216 eine Erhöhung des Durchsatzes, weil Abruf von Anweisungen von Höheres-Niveau-Speicher über die Schnittstelle 226 vermindert ist. Wenn Daten für eine Anweisung nicht in dem Anweisungs-Zwischenspeicher 216 gespeichert sind, wird auf Höheres-Niveau-Speicher über die Schnittstelle 226 zugegriffen, um die Daten abzurufen.
-
3 zeigt einen Teil des Anweisungs-Zwischenspeichers 216 und es wird hierauf für eine Diskussion des Anweisungs-Zwischenspeichers 216 bezogen. Der Anweisungs-Zwischenspeicher 216 umfasst einen Speicherraum, welcher in eine Mehrzahl von Zwischenspeicher-Zeilen (cache lines) geteilt ist, von welchen ein Beispiel bei 302 angezeigt ist. In einem besonderen Beispiel ist jede Zwischenspeicher-Zeile 64 Bytes. Die Mehrzahl von Zwischenspeicher-Zeilen ist logisch in eine Mehrzahl von Zwischenspeicher-Zeilen-Sätzen geteilt, von welchen ein Beispiel bei 304 angezeigt ist. In einem besonderen Beispiel umfasst der Anweisungs-Zwischenspeicher 512 Zwischenspeicher-Zeilen-Sätze, von denen vier (d. h. Setze N – N + 3) in 3 gezeigt sind. Es wird geschätzt werden, dass der Anweisungs-Zwischenspeicher irgendeine geeignete Anzahl von Zwischenspeicher-Zeilen-Sätzen umfassen kann, wobei jede der Zwischenspeicher-Zeilen eine geeignete Größe haben kann und wobei eine Anzahl von Bytes in jeder Zwischenspeicher-Zeile verschieden sein kann, ohne von dem Geltungsbereich der vorliegenden Offenbarung abzuweichen.
-
Die Anzahl von Zwischenspeicher-Zeilen in einem Zwischenspeicher-Zeilen-Satz kann die Anzahl von Stellen in dem Anweisungs-Zwischenspeicher definieren, auf welche irgendeine bestimmte Stelle in Hauptspeicher abgebildet werden kann. In dem illustrierten Beispiel umfasst der Anweisungs-Zwischenspeicher ein Vierwege-Satz assoziatives Feld, wobei jeder Satz von Zwischenspeicher-Zeile assoziativ ist und vier Wege oder Weisen umfasst, wo Anweisungs-Daten gespeichert werden können. Es wird geschätzt werden, dass der Anweisungs-Zwischenspeicher irgendeine geeignete Anzahl von Wegen oder Daten-Stellen in einem Zwischenspeicher-Zeile-Satz (z. B. zwei Wege, acht Wege, voll-assoziativ, etc.) umfassen kann, ohne von dem Geltungsbereich der vorliegenden Offenbarung abzuweichen.
-
Jede Zwischenspeicher-Zeile des Anweisungs-Zwischenspeichers 216 ist in verschiedene Bit-Felder geteilt, welche verschiedene Information bereitstellen. Insbesondere umfasst jede Zwischenspeicher-Zeile des Anweisungs-Zwischenspeichers 216 am-wenigsten-kürzlich-benutzte-(LRU)-Bits 306, Kennzeichen-Bits 308 und Daten-Bits 310. Die LRU-Bits 306 zeigen einen am-wenigsten-kürzlich-benutzten-(oder zugegriffenen)Weg oder Weise in einem Zwischenspeicher-Zeile-Satz an. Die Kennzeichen-Bits 308 identifizieren einen designierten Weg oder Weise, wo eine der Adresse entsprechende Anweisung gespeichert ist. Die Daten-Bits 310 speichern die Anweisungs-Daten. In dem illustrierten Beispiel sind die Daten-Bits 310 jeder Zwischenspeicher-Zeile in einer niedrige Hälfte und eine obere Hälfte geteilt, weil jedes Anweisungs-Holen-Lesen des Anweisungs-Zwischenspeichers eine Hälfte einer Zwischenspeicher-Zeile von Daten abruft, wenn es einen Treffer gibt. Es wird geschätzt werden, dass irgendeine geeignete Menge von Daten während eines Anweisungs-Holen-Lesen abgerufen werden kann, ohne von dem Geltungsbereich der vorliegenden Offenbarung abzuweisen.
-
Die verschiedenen Bit-Felder von jeder der Zwischenspeicher-Zeilen sind in verschiedene Felder organisiert, welche mittels einer Zwischenspeicher-Steuerung 224 gesteuert werden. Insbesondere umfasst der Anweisungs-Zwischenspeicher 216 ein LRU-Feld 218, ein Kennzeichen-Feld 220 und ein Daten-Feld 222. Das LRU-Feld 218 umfasst die LRU-Bits 306 für jeden Zwischenspeicher-Zeilen-Satz in dem Anweisungs-Zwischenspeicher 216. Das Kennzeichen-Feld 220 umfasst die Kennzeichen-Bits 308 für jede Zwischenspeicher-Zeile in dem Anweisungs-Zwischenspeicher 216. Das Daten-Feld 222 umfasst die Daten-Bits 310 für jede Zwischenspeicher-Zeile in dem Anweisungs-Zwischenspeicher 216.
-
Die Zwischenspeicher-Steuerung 224 ist konfiguriert, irgendeine designierte Stelle in irgendeinem des LRU-Feldes 218, des Kennzeichen-Feldes 220 und/oder des Daten-Feldes 222 nachzuschauen (a. k. a., zuzugreifen, oder zu aktivieren), die entsprechenden Bits abzurufen, durch eine Anweisungs-Holen-Operation hindurch. Es wird geschätzt werden, dass der Anweisungs-Zwischenspeicher in vereinfachter Form bereitgestellt ist und in einigen Implementierungen kann der Anweisungs-Zwischenspeicher alternative oder zusätzliche Feld-Strukturen umfassen, welche zusätzliche Daten halten, ohne von dem Geltungsbereich der vorliegenden Offenbarung abzuweichen.
-
Bei einem hohen Niveau, während einer Anweisungs-Holen-Operation, wenn der Programm-Zähler 212 eine Anweisungs-Holen-Anfrage initiiert, bestimmt die Zwischenspeicher-Steuerung 224 einen Zwischenspeicher-Zeilen-Satz, wo eine Anweisung gespeichert werden kann, basierend auf der Adresse, welche von dem Programm-Zähler 212 empfangen ist. In einem Beispiel aktiviert die Zwischenspeicher-Steuerung 224 alle vier Wege oder Weisen des Kennzeichen-Feldes 220 und alle der Wege oder Weisen des Daten-Feldes 222 für den Zwischenspeicher-Zeilen-Satz, um zu bestimmen, ob es einen Treffer oder ein Verfehlen in dem Zwischenspeicher-Zeilen-Satz gibt. Man bemerke, dass in einigen Implementierungen die Zwischenspeicher-Steuerung 224 das Kennzeichen-Feld 220 und das Daten-Feld 222 parallel aktiviert, um zu bestimmen, ob es einen Treffer gibt und um Anweisungs-Daten abzurufen, wenn es einen Treffer zur selben Zeit gibt. Für Zwischenspeicher-Treffer gibt die Zwischenspeicher-Steuerung 224 die Anweisungs-Daten von dem Anweisungs-Zwischenspeicher 216 an ein Register in der ID-Stufe 204 der Verarbeitungs-Pipeline 200 aus. In nachfolgenden Taktzyklen nach einem Zwischenspeicher-Treffer holt die Zwischenspeicher-Steuerung 224 Anweisungen von sequentiellen Einträgen in dem Anweisungs-Zwischenspeicher, bis ein Pipeline-Anhalten auftritt oder bis es eine Umleitung aufgrund einer Verzweigung oder eines Ereignisses gibt.
-
Für Zwischenspeicher-Verfehlen wird die Anweisung von dem Hauptspeicher 226 abgerufen und in eine Zwischenspeicher-Zeile des Anweisungs-Zwischenspeichers 216 platziert. Die Zwischenspeicher-Steuerung 224 setzt die LRU-Bits 306 des spezifizierten Zwischenspeicher-Zeilen-Satzes ein, um einen Weg oder eine Weise zur Ausschließung (eviction) auszuwählen, so dass die von dem Hauptspeicher 226 abgerufene Anweisungen in dem Anweisungs-Zwischenspeicher 216 gespeichert werden kann. Zum Beispiel kann der am-wenigsten-kürzlich-benutzte-Weg oder Weise, wie mittels der LRU-Bits 306 angezeigt, zur Ausschließung ausgewählt werden, so dass die angefragte Anweisung an seinem Platz gespeichert werden kann.
-
4 zeigt ein Beispiel eines Kodierens 400 von LRU-Bits, welches mittels der Zwischenspeicher-Steuerung 224 benutzt ist, um einen am-wenigsten-kürzlich-benutzten-Weg oder Weise in einem Zwischenspeicher-Zeilen-Satz zu identifizieren. Der Kodierungs- oder Pseudo-LRU-Algorithmus 400 setzt einen 3-Bit-Vektor ein, um nachzuverfolgen, welcher von vier Wegen oder Weisen in einem Zwischenspeicher-Zeilen-Satz am-wenigsten-kürzlich benutzt ist (least recently used). Zum Beispiel aktualisiert die Zwischenspeicher-Steuerung 224 die LRU-Bits in dem Kodieren 400 bei Lesen des Anweisungs-Zwischenspeichers 216, welches eines der Wege in der folgenden Weise traf. Das L[0]-Bit und entweder L[1]- oder L[2]-Bits zeigen weg von dem Weg oder der Weise, welche kürzlichst benutzt wurde. Das andere L[1]- oder L[2]-Bit ist ungeändert belassen. Wenn Weg 0 der am-wenigsten-kürzlich-benutzte Weg des Satzes ist, dann wird demgemäß das L[0]-Bit auf 0 gesetzt, das L[1]-Bit ist auf 0 gesetzt und das L[2]-Bit ist nicht in Erwägung gezogen. Wenn Weg 1 der amwenigsten-kürzlich-benutzte Weg-Satzes ist, dann wird das L[0]-Bit auf 0 gesetzt, das L[1]-Bit wird auf 1 gesetzt und das L[2]-Bit ist irrelevant. Wenn Weg 2 der am-wenigsten-kürzlich-benutzte Weg des Satzes ist, dann wird das L[0]-Bit auf 1 gesetzt, das L[1]-Bit ist irrelevant und das L[2]-Bit ist auf 0 gesetzt. Wenn Weg 3 der am-wenigsten-kürzlich-benutzte Weg des Satzes ist, dann wird das L[0]-Bit auf 1 gesetzt, das L[1]-Bit ist irrelevant und das L[2]-Bit wird auf 1 gesetzt. Die Cache-Steuerung 224 aktualisiert die LRU-Bits mit jedem Zwischenspeicher-Treffer, um den am-wenigsten-kürzlich-benutzten Weg zu aktualisieren. Ferner liest die Zwischenspeicher-Steuerung 224 die LRU-Bits mit jedem Zwischenspeicher-Verfehlen, um zu bestimmen, welcher Weg zur Ausschließung auszuwählen ist.
-
Ferner werden die LRU-Bits in einer Steuer-Strategie zum Vermindern von Energieverbrauch während der Operation des Anweisungs-Zwischenspeichers 216 eingesetzt. Die Steuer-Strategie erkennt, dass die Verarbeitungs-Pipeline 200 Ausführung von einigen Anweisungen häufig durch die Operation hindurch wiederholt. Aufgrund solch einer Wiederholung gibt es eine höhere Wahrscheinlichkeit, dass eine angefragte Anweisung in einem kürzlichst-benutzten Weg relativ zu anderen Weisen oder Wegen in dem Zwischenspeicher-Zeilen-Satz gespeichert ist. Demgemäß ist die Zwischenspeicher-Steuerung 224 konfiguriert, einen am kürzlichst-benutzten (MRU) Weg in einem designierten Zwischenspeicher-Zeilen-Satz basierend auf den LRU-Bits 306 zu bestimmen. Die Zwischenspeicher-Steuerung 224 benutzt den kürzlichst-benutzten Weg, um effizient auf den Anweisungs-Zwischenspeicher 216 zuzugreifen, wenn sequentielle Einträge geholt werden. Wenn sequentiell eine nächste Anweisung geholt wird, ist z. B. die Zwischenspeicher-Steuerung 224 konfiguriert, eine Stelle in dem Daten-Feld 222 zu aktivieren, welche dem kürzlichst-benutzten Weg oder Weise entspricht, im Gegensatz zum Aktivieren aller Wege oder Weisen in dem Satz, um eine Anweisung abzurufen. In dieser Weise ist die Menge von Energie, welche verbraucht ist, um Daten in dem Anweisungs-Zwischenspeicher 216 nachzuschauen, relativ zu anderen Zugängen reduziert, welche alle Wege oder Weisen in einem Satz aktivieren, um Daten von einem einzelnen Weg oder einer einzelnen Weise abzurufen.
-
5 zeigt ein Beispiel-Kodieren 500 von MRU-Bits für einen Zwischenspeicher-Zeilen-Satz, welcher auf den LRU-Bits des Zwischenspeicher-Zeilen-Satzes basiert. Das Kodieren 500 ist mittels der Zwischenspeicher-Steuerung 224 benutzt, um den kürzlichst-benutzten Weg in dem Zwischenspeicher-Zeilen-Satz nachzuverfolgen (track). Insbesondere ist das MRU-Kodieren 500 dadurch bestimmt, dass die Bits in dem LRU-Kodieren 400 geflippt werden. Mit anderen Worten können die LRU-Bits 306 benutzt werden, um sowohl einen am kürzlichst-benutzten Weg und einen am-wenigsten-kürzlich-benutzten-Weg für einen designierten Zwischenspeicher-Zeilen-Satz zu bestimmen. Gemäß dem MRU-Kodieren 500, wenn Weg 0 der am kürzlichst-benutzte Weg des Satzes ist, dann wird das L[0]-Bit auf 1 gesetzt, das L[1]-Bit ist auf 1 gesetzt und das L[2]-Bit ist irrelevant oder wird nicht in Erwägung gezogen. Wenn Weg 1 der am kürzlichst-benutzte Weg des Satzes ist, dann wird das L[0]-Bit auf 1 gesetzt, das L[1]-Bit ist auf 0 gesetzt und das L[2]-Bit ist irrelevant. Wenn Weg 2 der kürzlichst-benutzte Weg des Satzes ist, dann wird das L[0]-Bit auf 0 gesetzt, das L[1]-Bit ist irrelevant und das L[2]-Bit ist auf 1 gesetzt. Wenn Weg 3 der kürzlichst-benutzte-Weg des Satzes ist, dann wird das L[0]-Bit auf 0 gesetzt, das L[1]-Bit ist irrelevant und das L[2]-Bit ist auf 0 gesetzt. Das MRU-Kodieren 500 stellt ein Beispiel bereit, wie die Zwischenspeicher-Steuerung 224 einen kürzlichst-benutzten Weg in einem Zwischenspeicher-Zeilen-Satz bestimmen kann. Es wird geschätzt werden, dass die Zwischenspeicher-Steuerung einen kürzlichst-benutzten Weg in einem Zwischenspeicher-Zeilen-Satz in irgendeiner geeigneten Weise bestimmen kann, ohne von dem Geltungsbereich der vorliegenden Offenbarung abzuweichen.
-
In einer Beispiel-Implementierung ist die Zwischenspeicher-Steuerung 224 konfiguriert, LRU-Bits für vier aufeinander folgende Sätze von Zwischenspeicher-Zeilen in einer einzelnen Lese-Operation des LRU-Feldes 218 in einem Taktzyklus nachzuschauen. Mit anderen Worten beschreiben die LRU-Bits Gruppen von vier Zwischenspeicher-Zeilen-Sätzen. Die Anzahl von Zwischenspeicher-Zeilen-Sätzen, welche der Lese-Operation entspricht, ist auf der Implementierung des Anweisungs-Zwischenspeichers basiert und insbesondere auf der Anzahl von LRU-Bits, welche benutzt sind, um die Weisen bzw. Wege in einem Zwischenspeicher-Zeilen-Satz und die Größe einer Zwischenspeicher-Zeile zu beschreiben. Es wird geschätzt werden, dass LRU-Bits für irgendeine geeignete Anzahl von Zwischenspeicher-Zeilen-Sätzen von einer einzelnen Lese-Operation zurückgegeben werden können, ohne von dem Geltungsbereich der vorliegenden Offenbarung abzuweichen.
-
In einem Beispiel ist die Zwischenspeicher-Steuerung 224 konfiguriert, die LRU-Bits parallel mit einem initialen Kennzeichen-(tag) und einem Daten-Nachschauen (z. B. welche nach einer Zurücklenkung aufgrund einer Verzweigungs-Operation durchgeführt werden) für eine Anweisung-Holen-Operation nachzuschauen. Man bemerke, dass die Anzahl von Taktzyklen für den LRU-Zugriff, welcher zu vollenden ist, basierend auf der Implementierung variiert. Unter der Annahme, dass das initiale Nachschauen nicht für einen finalen Satz in dem assoziierten LRU-Eintrag war und dass es keine nachfolgende Umleitung (redirection) gab, dann sind zwei Taktzyklen nach dem initialen Zugriff die LRU-Bits für die Zwischenspeicher-Steuerung 224 verfügbar. Die Zwischenspeicher-Steuerung 224 ist konfiguriert, den kürzlichst-benutzten Weg des Anweisungs-Nachschauens (oder -Zugriffs) zu bestimmen, was dabei ist zu beginnen, und nachfolgende Zugriffe basierend auf den LRU-Bits. Für diese Zugriffe ist die Zwischenspeicher-Steuerung 224 konfiguriert, Daten nachzuschauen, welche in dem kürzlichst-benutzten Weg in dem Daten-Feld 222 gespeichert sind, um die Anweisung zu holen. Dementsprechend ist die Zwischenspeicher-Steuerung 224 konfiguriert, nicht irgendwelche anderen Wege oder Weisen in dem designierten Zwischenspeicher-Zeilen-Satz des Daten-Feldes 222 zu aktivieren. Mit anderen Worten ist nur der kürzlichst-benutzte Weg oder Weise des Daten-Feldes 222 aktiviert, um die Anweisung zu holen.
-
Ferner ist die Zwischenspeicher-Steuerung 224 konfiguriert, in dem Kennzeichen-Feld 220 Kennzeichen für alle Wege oder Weisen in dem designierten Zwischenspeicher-Zeilen-Satz nachzuschauen, um zu bestimmen, ob es einen Treffer in irgendeinem Weg des designierten Zwischenspeicher-Zeilen-Satzes gab. In einem Beispiel ist die Zwischenspeicher-Steuerung 224 konfiguriert, das Kennzeichen-Nachschauen und das kürzlichst-benutzter-Weg-Daten-Feld-Nachschauen parallel durchzuführen. Wenn es einen Treffer in dem am kürzlichst-benutzten Weg gibt, dann sind die Daten von dem aktivierten Daten-Feld verfügbar und die Zwischenspeicher-Steuerung 224 ist konfiguriert, die Daten auszugeben, welche in dem kürzlichst-benutzten Weg gespeichert sind. Wenn es einen Treffer in einem der Wege verschieden von dem kürzlichst-benutzten Weg gibt, dann sind die Daten nicht verfügbar aufgrund der begrenzten Aktivierung des Daten-Feldes 222 von nur dem kürzlichst-benutzten Weg. Nachfolgend ist die Zwischenspeicher-Steuerung 224 konfiguriert, die entsprechenden Teile des Kennzeichen-Feldes 220 und des Daten-Feldes 222 zu aktivieren, um alle Kennzeichen und Daten von allen Wegen oder Weisen in dem designierten Zwischenspeicher-Zeilen-Satz zu holen, um die Anweisung von der Weise oder dem Weg zu holen, welcher in dem Kennzeichen traf. Dieses Wiederholen des Zwischenspeicher-Nachschauens erniedrigt im Allgemeinen die Performanz, da es die Zwischenspeicher-Treffer-Wartezeit oder Latenz erhöht. Wenn es keinen Treffer in irgendeinem Weg oder in irgendeiner Weise in dem designierten Zwischenspeicher-Zeilen-Satz gibt, wird die Anweisung von dem Hauptspeicher 226 oder einem anderen Höheres-Niveau-Zwischenspeicher abgerufen.
-
In dieser Steuer-Strategie benutzt die Zwischenspeicher-Steuerung Information, welche von den LRU-Bits abgeleitet ist, um eine Stelle vorherzusagen, wo eine Anweisung gespeichert ist, und greift nur auf diese Stelle zu, um die Daten abzurufen, um Energieverbrauch zu vermindern. Insbesondere diktiert die Steuerungs-Strategie, dass der kürzlichst-benutzte-Weg in einem Zwischenspeicher-Zeilen-Satz die wahrscheinlichste Stelle für die zu speichernde Anweisung ist. Als solches aktiviert die Zwischenspeicher-Steuerung nur den kürzlichst-benutzten-Weg des Daten-Feldes, um die Daten abzurufen. Wenn die Vorhersage korrekt ist, ist der Energieverbrauch relativ zum Aktivieren aller Wege in einem Zwischenspeicher-Zeilen-Satz reduziert und es gibt keinen Performanz-Nachteil. Wenn die Vorhersage inkorrekt ist, dann ist ein zusätzlicher Zugriff erfordert, um die Daten abzurufen aufgrund der begrenzten Aktivierung des Daten-Feldes.
-
Man bemerke, dass in einigen Fällen die LRU-Bits vorher nachgeschaut werden, als wann die LRU-Bits anderenfalls für den Zweck eines Aktualisierens der LRU-Bits basierend auf einem Zwischenspeicher-Treffer nachgeschaut würden. In diesem Beispiel wird das LRU-Feld zwei Taktzyklen vor dem ersten sequentiellen Zugriff auf einen neuen LRU-Daten-Eintrag, wo die LRU-Bits benutzt würden, nachgeschaut. Man bemerke ferner, dass in diesem Beispiel Daten zwei Taktzyklen, nachdem ein Nachschauen mittels eines Zugreifens auf eines der Felder durchgeführt ist, verfügbar sind. Es wird geschätzt werden, dass die Verarbeitungs-Geschwindigkeit oder die Anzahl von Taktzyklen, um die Daten abzurufen, differieren kann, ohne von dem Geltungsbereich der vorliegenden Offenbarung abzuweichen.
-
6 zeigt eine Ausführungsform eines Verfahrens 600 zum Steuern eines Anweisungs-Zwischenspeichers. In einem Beispiel ist die Zwischenspeicher-Steuerung 224, welche in 2 gezeigt ist, konfiguriert, das Verfahren 600 durchzuführen, um eine Operation des Anweisungs-Zwischenspeichers 216 zu steuern, einschließlich eines Zugreifens auf das LRU-Feld 218, das Kennzeichen-Feld 220 und das Daten-Feld 222. Bei 602 umfasst das Verfahren 600 Nachschauen, in dem am-wenigsten-kürzlich-benutzten-Bit-Feld, am-wenigsten-kürzlich-benutzte-Bits für jeden einer Mehrzahl von Zwischenspeicher-Zeilen-Sätzen in dem Anweisungs-Zwischenspeicher. Nachschauen der LRU-Bits umfasst ein Aktivieren des Teils des LRU-Feldes, welcher der Mehrzahl von Zwischenspeicher-Zeilen-Sätzen entspricht. In einem Beispiel repräsentiert die Mehrzahl von Zwischenspeicher-Zeilen-Sätzen sequentielle Einträge in dem Anweisungs-Zwischenspeicher. Ein designierter Satz in der Sequenz von Einträgen kann mittels einer Adresse spezifiziert sein, welche von einer Anweisungs-Hol-Operation bereitgestellt ist. In einem besonderen Beispiel umfasst ein Nachschauen der am-wenigsten-kürzlich-benutzten-Bits ein Nachschauen von am wenisten-kürzlich-benutzten-Bits für jeden der vier sequentiellen Zwischenspeicher-Zeilen-Sätze in dem Anweisungs-Zwischenspeicher. Die LRU-Bits für sequentielle Zwischenspeicher-Zeilen-Sätze können nachgeschaut werden, bevor eine Anweisung von einem der Zwischenspeicher-Zeilen-Sätze geholt wird, um den Weg oder die Weise (way) in dem Satz vorherzusagen, wo die Anweisung gespeichert ist.
-
Bei 604 umfasst das Verfahren 600 Bestimmen eines kürzlichst-benutzten-Weges in einem designierten Zwischenspeicher-Zeilen-Satz der Mehrzahl von Zwischenspeicher-Zeilen-Sätzen basierend auf den am-wenigsten-kürzlich-benutzten-Bits für die designierte Zwischenspeicher-Zeile. In einem Beispiel ist der designierte Zwischenspeicher-Zeilen-Satz der Satz, in welchem eine Anweisung, welche momentan geholt wird, gespeichert ist. In einem Beispiel kann der MRU-Weg unter Benutzung eines 3-Bit-Vektors bestimmt werden, um nachzuverfolgen (track), welcher Weg kürzlichst benutzt ist, wie oben mit Bezug auf Kodieren 500 und 5 diskutiert ist.
-
Bei 606 umfasst das Verfahren 600 in einem Beispiel Nachschauen in dem Kennzeichen-Feld, von Kennzeichen (tags) für alle Wege oder Weisen in dem designierten Zwischenspeicher-Zeilen-Satz. Alle Kennzeichen in dem Zwischenspeicher-Zeilen-Satz werden aktiviert, um zu bestimmen, ob es einen Zwischenspeicher-Treffer in irgendeinem der Wege in dem designierten Zwischenspeicher-Zeilen-Satz gibt.
-
Alternativ umfasst in einem anderen Beispiel das Verfahren 600 ein Nachschauen in dem Kennzeichen-Feld, des kürzlichst-benutzten Weges in dem designierten Zwischenspeicher-Zeilen-Satz. Wenn es einen Treffer gibt, gibt es keine Performanz-Nachteile. Wenn es ein Verfehlen gibt, weiß jedoch die Zwischenspeicher-Steuerung nicht, ob die Daten in dem Anweisungs-Zwischenspeicher in einem anderen Weg sind oder überhaupt nicht in dem Anweisungs-Zwischenspeicher. So kann nach einem Verfehlen ein zweites Nachschauen des Kennzeichen-Feldes einschließlich aller Wege durchgeführt werden, um zu bestimmen, ob die Daten in einem anderen Weg sind oder ob sie von einem Höherer-Level-Speicher abgerufen werden müssen.
-
Bei 608 umfasst das Verfahren 600 Nachschauen in dem Daten-Feld, von Daten, welche in der kürzlichst-genutzten-Weise oder in dem kürzlichst-benutzten-Weg in dem designierten Zwischenspeicher-Zeilen-Satz gespeichert sind. Insbesondere umfasst Nachschauen in dem Daten-Feld von Daten, welche in dem kürzlichst-benutzten-Weg in dem designierten Zwischenspeicher-Zeilen-Satz gespeichert sind, Aktivieren des kürzlichst-benutzten-Weges des Daten-Feldes und Nichtaktivieren irgendwelcher anderen Wege des Daten-Feldes in dem designierten Zwischenspeicher-Zeilen-Satz. Dadurch, dass die anderen Wege des Daten-Feldes in dem designierten Zwischenspeicher-Zeilen-Satz nicht aktiviert werden, kann ein Energieverbrauch während einer Anweisung-Holen-Operation relativ zu einem Zugang vermindert werden, wo alle Wege aktiviert werden, um Daten von einem einzelnen Weg abzurufen.
-
In einem Beispiel werden das Kennzeichen-Nachschauen und das Daten-Nachschauen parallel durchgeführt. Indem diese Operationen parallel durchgeführt werden, kann die Anweisungs-Holen-Operation schneller durchgeführt werden, um Verarbeitungs-Performanz relativ zu einem seriellen Zugang zu verbessern.
-
Man bemerke, dass Nachschauen, in dem am-wenigsten-kürzlich-benutzten-Bit-Feld, von am-wenigsten-kürzlich-benutzten-Bits für jeden der Mehrzahl von Zwischenspeicher-Zeilen-Sätzen vor Nachschauen in dem Kennzeichen-Feld von den Kennzeichen für alle Wege in dem Zwischenspeicher-Zeilen-Satz und vor Nachschauen, in dem Daten-Feld, von den Daten, welche in dem kürzlichst-benutzten-Weg gespeichert sind, durchgeführt ist. Indem die LRU-Bits vor dem Kennzeichen- und Daten-Nachschauen nachgeschaut werden, kann eine Vorhersage gemacht werden, wo die Anweisung gespeichert ist (d. h. der MRU-Weg), so dass das Daten-Feld effizient aktiviert werden kann, um den Energieverbrauch zu vermindern.
-
In einem Beispiel ist das Nachschauen in dem am-wenigsten-kürzlich-benutzte-Bits-Feld von am-wenigsten-kürzlich-benutzten-Bits für jeden der Mehrzahl von Zwischenspeicher-Zeilen-Sätzen zwei Taktzyklen vor dem Nachschauen, in dem Kennzeichen-Feld, von dem Kennzeichen für alle Wege in dem designierten Zwischenspeicher-Zeilen-Satz und dem Nachschauen, in dem Daten-Feld, von den Daten, welche in der kürzlichst-benutzten-Weise gespeichert sind. Es wird geschätzt werden, dass die LRU-Bits irgendeine geeignete Anzahl von Taktzyklen vor dem Kennzeichen- und Daten-Nachschauen nachgeschaut werden können, ohne von dem Geltungsbereich der vorliegenden Offenbarung abzuweichen.
-
Bei 610 umfasst das Verfahren 600 Bestimmen, ob es einen Zwischenspeicher-Treffer in dem MRU-Weg gibt. Die Bestimmung kann basierend auf den Kennzeichen (tags) getroffen werden, welche für einen oder mehrere Wege des designierten Zwischenspeicher-Zeilen-Satzes nachgeschaut wurden. Wenn bestimmt ist, dass es einen Zwischenspeicher-Treffer in dem MRU-Weg gibt, bewegt sich das Verfahren 600 zu 612. Anderenfalls bewegt sich das Verfahren 600 zu 614.
-
Bei 612 gibt es einen Zwischenspeicher-Treffer in dem MRU-Weg und das Verfahren 600 umfasst Ausgeben der Daten, welche in dem kürzlichst-benutzten-Weg gespeichert sind, von dem Daten-Feld. Die Daten repräsentieren die Anweisung, welche mittels der Anweisungs-Holen-Operation angefragt ist. In einem Beispiel werden die Daten an eine Anweisung-Dekodier-Stufe einer Verarbeitungs-Pipeline ausgegeben.
-
Bei Schritt 614 umfasst das Verfahren 600 Bestimmen, ob es einen Zwischenspeicher-Treffer in irgendeinem anderen Weg neben dem MRU-Weg in dem designierten Zwischenspeicher-Zeilen-Satz gibt. Wenn bestimmt ist, dass es einen Zwischenspeicher-Treffer in irgendeinem anderen Weg neben dem MRU-Weg in dem designierten Zwischenspeicher-Zeilen-Satz gibt, bewegt sich das Verfahren 600 zu 618 und 620. Anderenfalls bewegt sich das Verfahren 600 zu 616.
-
Bei 616 umfasst das Verfahren Abrufen von Anweisungs-Daten von einem Höheres-Niveau-Zwischenspeicher oder einem anderen Speicher. In einem Beispiel werden die Daten von einem Höheres-Niveau-Zwischenspeicher oder einem anderen Speicher durch die Höheres-Niveau-Speicher-Schnittstelle 226 abgerufen.
-
Bei 618 umfasst das Verfahren Nachschauen in dem Kennzeichen-Feld, von Kennzeichen für alle Wege in dem designierten Zwischenspeicher-Zeilen-Satz. Die Kennzeichen werden nachgeschaut, um zu bestimmen, ob es noch einen Zwischenspeicher-Treffer in dem Zwischenspeicher-Zeilen-Satz gibt.
-
Bei 620 umfasst das Verfahren 600 Nachschauen, in dem Daten-Feld, von Daten, welche in allen Wegen des designierten Zwischenspeicher-Zeilen-Satzes gespeichert sind.
-
In einem Beispiel werden das Kennzeichen-Nachschauen und das Daten-Nachschauen während des Wiederholens parallel durchgeführt. Indem diese Operationen parallel durchgeführt werden, kann die Anweisung-Holen-Operation schneller durchgeführt werden, um eine Verarbeitungs-Performanz zu verbessern.
-
Bei Schritt 622 umfasst das Verfahren 600 Ausgeben der Daten von dem Treffer-Weg in dem designierten Zwischenspeicher-Zeilen-Satz.
-
7 zeigt eine Zeitlinie oder Zeitverlauf (timeline) einer Beispiel-Anweisungs-Zwischenspeicher-Operation gemäß der vorliegenden Offenbarung. Der Zeitverlauf zeigt eine Beispiel-Pipeline von Kennzeichen-, Daten- und LRU-Feld-Zugriffen während Anweisungs-Holen-Operationen. In diesem Beispiel wird aus Zwecken von Einfachheit und Klarheit angenommen, dass jedes Mal, wenn ein kürzlichst-benutzten-Weg aktiviert wird, es einen Zwischenspeicher-Treffer gibt. Ferner ruft jedes Anweisung-Holen-Lesen des Zwischenspeichers eine Hälfte einer Zwischenspeicher-Zeile von Daten ab, wenn es einen Treffer gibt. In dem Zeitverlauf schreitet die Zeit von links nach rechts fort und nachfolgende Anweisungs-Zwischenspeicher-Zugriffe schreiten von oben nach unten fort, obwohl einige Zugriffe parallel durchgeführt werden können.
-
In dem ersten Taktzyklus hat eine Umleitung aufgrund einer Verzweigung stattgefunden, was zu einem Anweisungs-Holen des Anweisungs-Zwischenspeichers führt. In dem zweiten Taktzyklus werden alle Kennzeichen für den designierten Zwischenspeicher-Zeilen-Satz (Satz 2) in dem Kennzeichen-Feld nachgesehen, alle niedrigen Daten-Wege für den Zwischenspeicher-Zeilen-Satz (Satz 2) werden in dem Daten-Feld nachgesehen, und die LRU-Bits für eine Gruppe von vier aufeinander folgenden Zwischenspeicher-Zeilen-Sätzen werden in dem LRU-Feld nachgeschaut einschließlich des momentanen Zwischenspeicher-Zeile-Satzes. Man bemerke, dass, obwohl LRU-Bits für eine Gruppe von vier aufeinander folgenden Zwischenspeicher-Zeilen-Sätzen nachgeschaut werden, der designierte Zwischenspeicher-Zeilen-Satz, von dem die momentane Anweisung geholt wird, nicht notwendiger Weise der erste Zwischenspeicher-Zeilen-Satz in der Gruppe sein muss. In dem illustrierten Beispiel ist der designierte Zwischenspeicher-Zeilen-Satz der dritte Zwischenspeicher-Zeilen-Satz in der Gruppe (d. h. Satz 2 aus Sätzen 0–3). Die Kennzeichen-, Daten- und LRU-Nachschauen (look ups) werden parallel in dem zweiten Taktzyklus durchgeführt. Wenn eine Umleitung aufgrund einer Verzweigung zu einem Holen von dem Anweisungs-Zwischenspeicher führt, werden alle Wege der Daten- und Kennzeichen-Felder aktiviert, um zu bestimmen, ob es einen Treffer in irgendeinem der Wege in dem Zwischenspeicher-Zeilen-Satz gab, und um die korrekten Daten zurück zu geben, wenn es einen Zwischenspeicher-Treffer gab. Das LRU-Feld wird aktiviert, um die MRU-Wege in den nächsten vier sequentiellen Zwischenspeicher-Zeilen-Sätzen zu bestimmen.
-
In diesem Beispiel sind Daten zwei Taktzyklen, nachdem ein Nachschauen durchgeführt ist, verfügbar. Während die Daten-Zugriffe von dem zweiten Taktzyklus verarbeitet werden, wird das nächste Anweisungs-Holen durchgeführt. Insbesondere werden in dem dritten Taktzyklus alle Kennzeichen und die Hoch-Daten-Wege (high data ways) für Satz 2 nachgeschaut. Alle Kennzeichen- und Hoch-Daten-Feld-Stellen werden nachgeschaut, weil die MRU-Daten noch nicht von dem initialen Nachschauen des LRU-Feldes verfügbar sind, um ein zielgerichtetes Nachschauen des MRU-Weges durchzuführen.
-
In dem vierten Taktzyklus sind die Anweisungs-Daten und die LRU-Daten von den Zugriffen, welche in dem zweiten Taktzyklus durchgeführt sind, verfügbar. Da die LRU-Bits verfügbar sind, kann der MRU-Weg des Anweisungs-Holens, welche dabei ist zu beginnen, bestimmt werden, sowie die MRU-Wege für nachfolgende Zugriffe, welche dieselben LRU-Daten benutzen (d. h. die äußeren Sätze in der Gruppe von vier sequentiellen Zwischenspeicher-Zeilen-Sätzen). Insbesondere wird nur der MRU-Niedrig-Daten-Weg (MRU low data way) des Daten-Feldes für den designierten Zwischenspeicher-Zeilen-Satz (Satz 3) aktiviert und die anderen Wege werden nicht aktiviert. Ferner sind alle Wege des Kennzeichen-Feldes noch aktiviert, um zu bestimmen, ob es einen Zwischenspeicher-Treffer in irgendeinem Weg von Satz 3 gab. Indem nur der MRU-Niedrig-Daten-Weg für Satz 3 zugegriffen wird, kann ein Energieverbrauch des Daten-Feld-Zugriffs bei keinem Performanz-Nachteil vermindert werden, wenn es einen Zwischenspeicher-Treffer gibt. Ferner werden die LRU-Bits für die nächsten vier Zwischenspeicher-Zeilen-Sätze (d. h. Sätze 4–7) in dem vierten Taktzyklus in Vorbereitung für gezielte Nachschauungen von MRU-Wegen von sequentiellen Anweisungs-Holen-Operationen nachgeschaut.
-
In dem fünften Taktzyklus wird die nächste Anweisung-Holen-Operation dadurch durchgeführt, dass alle Kennzeichen für Satz 3 in dem Kennzeichen-Feld nachgeschaut werden und indem nur der MRU-Hoch-Daten-Weg für Satz 3 in dem Daten-Feld nachgeschaut wird. Da der MRU-Hoch-Daten-Weg (MRU high data way) für Satz 3 von den LRU-Bits, welche in dem vierten Taktzyklus verfügbar gemacht wurden, bekannt ist, wird ein gezieltes Nachschauen des MRU-Hoch-Daten-Weg durchgeführt, um einen Energieverbrauch während des Anweisung-Holens zu vermindern. Ferner sind die Anweisungs-Daten von dem Anweisungs-Holen, welches in dem dritten Taktzyklus durchgeführt ist, für Propagation durch die Stufen weiter abwärts der Pipeline verfügbar.
-
In dem sechsten Taktzyklus wird das nächste sequentielle Anweisungs-Holen dadurch durchgeführt, dass alle Kennzeichen für Satz 4 in dem Kennzeichen-Feld nachgeschaut werden und dass nur der MRU-Niedrig-Daten-Weg für Satz 4 in dem Daten-Feld nachgeschaut wird. Da der MRU-Niedrig-Daten-Weg für Satz 4 von den LRU-Bits, welche in dem vierten Taktzyklus verfügbar gemacht wurden, bekannt ist, wird ein gezieltes Nachschauen des MRU-Niedrig-Daten-Weges durchgeführt, um Energieverbrauch während des Anweisung-Holens zu vermindern. Ferner sind die Anweisungs-Daten von dem Anweisungs-Holen, welches in dem vierten Taktzyklus durchgeführt wurde, für Propagation durch Stufen weiter abwärts der Pipeline verfügbar. Ferner erfolgt eine Umleitung in dem sechsten Taktzyklus auf eine andere Adresse.
-
In dem siebten Taktzyklus werden alle Kennzeichen für den designierten Zwischenspeicher-Zeilen-Satz (Satz 8) in dem Kennzeichen-Feld nachgeschaut, alle Niedrig-Daten-Wege für den Zwischenspeicher-Zeilen-Satz (Satz 8) werden in dem Daten-Feld nachgeschaut und die LRU-Bits für eine Gruppe von vier aufeinander folgenden Zwischenspeicher-Zeilen-Sätzen (Sätze 8–11) werden in dem LRU-Feld einschließlich des momentanen Zwischenspeicher-Zeilen-Satzes nachgeschaut. Die Daten, welche in dem siebten Taktzyklus nachgeschaut wurden, sind in dem neunten Taktzyklus verfügbar. Anweisungs-Holungen können sequentiell andauern, bis eine Umleitung (redirection) aufgrund einer Verzweigung auftritt.
-
Die in den vierten, fünften und sechsten Taktzyklen durchgeführten Nachschauungen, welche in 7 hervorgehoben sind, sind zielgerichtete Zugriffe der MRU-Daten-Wege. Die Energie, welche aufgrund dieser Zugriffe verbraucht ist, ist relativ zu Anweisungs-Zwischenspeicher-Steuer-Strategien vermindert, wo auf alle Daten-Wege zugegriffen wird, um eine Anweisung von einem einzelnen Daten-Weg zu holen. Aufgrund der Hoch-Wiederholungs-Natur von Anweisungs-Hol-Operationen während des Betriebes des Anweisungs-Zwischenspeichers dominiert der Energieverbrauch der Daten-Feld-Zugriffe während Anweisungs-Hol-Operationen den Gesamt-Anweisungs-Zwischenspeicher-Energieverbrauch. Indem der Anweisungs-Zwischenspeicher gemäß der hierin beschriebenen Energieverminderungs-Strategie gesteuert wird, kann der Energieverbrauch eines vollen CPU-Kernes relativ zu einer Implementierung vermindert werden, welche immer alle Wege des Daten-Feldes eines Anweisungs-Zwischenspeichers während Anweisungs-Hol-Operationen aktiviert.
-
Exemplarische Konzepte der vorliegenden Erfindung umfassen:
Konzept 1. Verfahren zum Steuern eines Anweisungs-Zwischenspeichers einschließlich eines am-wenigsten-kürzlich-benutzten-Bits-Feldes, eines Kennzeichen-Feldes, und eines Daten-Feldes, aufweisend: Nachschauen, in dem am-wenigsten-kürzlich-benutzte-Bits-Feld, von am-wenigsten-kürzlich-benutzte-Bits für jeden einer Mehrzahl von Zwischenspeicher-Zeilen-Sätzen in dem Anweisungs-Zwischenspeicher, wobei am-wenigsten-kürzlich-benutzte-Bits für einen Zwischenspeicher-Zeilen-Satz einen am-wenigsten-kürzlich-benutzten-Weg in diesem Zwischenspeicher-Zeilen-Satz anzeigen; Bestimmen eines kürzlichst-benutzten-Weges in einem designierten Zwischenspeicher-Zeilen-Satz der Mehrzahl von Zwischenspeicher-Zeilen-Sätzen basierend auf den am-wenigsten-kürzlich-benutzten-Bits für die designierte Zwischenspeicher-Zeile; Nachschauen, in dem Kennzeichen-Feld, von Kennzeichen für einen oder mehr Wege in dem designierten Zwischenspeicher-Zeilen-Satz; Nachschauen, in dem Daten-Feld, von Daten, welche in dem kürzlichst-benutzten-Weg in dem designierten Zwischenspeicher-Zeilen-Satz gespeichert sind; und, wenn es einen Zwischenspeicher-Treffer in dem kürzlichst-benutzten-Weg gibt, Ausgeben der Daten, welche in dem kürzlichst-benutzten-Weg gespeichert sind, aus dem Daten-Feld.
Konzept 2. Verfahren von Konzept 1, wobei Nachschauen, in dem Kennzeichen-Feld, von dem Kennzeichen für einen oder mehrere Wege in dem designierten Zwischenspeicher-Zeilen-Satz und Nachschauen, in dem Daten-Feld, von den Daten, welche in dem kürzlichst-benutzten-Weg gespeichert sind, parallel durchgeführt werden.
Konzept 3. Verfahren von Konzept 1, wobei Nachschauen, in dem am-wenigsten-kürzlich-benutzten-Bit-Feld, von am-wenigsten-kürzlich-benutzten-Bits für jeden der Mehrzahl von Zwischenspeicher-Zeilen-Sätzen durchgeführt ist vor (1) Nachschauen, in dem Kennzeichen-Feld, von den Kennzeichen für einen oder mehrere Wege in dem designierten Zwischenspeicher-Zeilen-Satz und (2) Nachschauen, in dem Daten-Feld, von den Daten, welche in dem kürzlichst-benutzten-Weg gespeichert sind.
Konzept 4. Verfahren von Konzept 1, wobei Nachschauen, in dem Daten-Feld, von Daten, welche in dem kürzlichst-benutzten-Weg in dem designierten Zwischenspeicher-Zeilen-Satz gespeichert sind, umfasst (1) Aktivieren des kürzlichst-benutzten-Weges des Daten-Feldes und (2) Nichtaktivieren irgendwelcher anderer Wege des Daten-Feldes in dem designierten Zwischenspeicher-Zeilen-Satz.
Konzept 5. Verfahren von Konzept 1, wobei Nachschauen, in dem Kennzeichen-Feld, von den Kennzeichen für einen oder mehrere Wege in dem designierten Zwischenspeicher-Zeilen-Satz Nachschauen von Kennzeichen für alle Wege in dem designierten Zwischenspeicher-Zeilen-Satz umfasst.
Konzept 6. Verfahren von Konzept 5, ferner aufweisend: Wenn es ein Zwischenspeicher-Verfehlen in allen der Wege des designierten Zwischenspeicher-Zeilen-Satzes gibt, Abrufen von Anweisungs-Daten von einem Höheres-Niveau-Speicher.
Konzept 7. Verfahren von Konzept 1, wobei Nachschauen in dem Kennzeichen-Feld, von den Kennzeichen für einen oder mehrere Wege in dem designierten Zwischenspeicher-Zeilen-Satz Nachschauen von dem Kennzeichen für den kürzlichst-benutzten-Weg in dem designierten Zwischenspeicher-Zeilen-Satz und nicht Nachschauen von Kennzeichen für andere Wege neben dem kürzlichst-benutzten-Weg in dem designierten Zwischenspeicher-Zeilen-Satz umfasst.
Konzept 8. Verfahren von Konzept 1, ferner aufweisend: Wenn es ein Zwischenspeicher-Verfehlen in dem kürzlichst-benutzten-Weg gibt, Nachschauen, in dem Kennzeichen-Feld, von Kennzeichen für alle Wege in dem designierten Zwischenspeicher-Zeilen-Satz; Nachschauen, in dem Daten-Feld, von Daten, welche in allen Wegen in dem designierten Zwischenspeicher-Zeilen-Satz gespeichert sind; und, wenn es einen Zwischenspeicher-Treffer in irgendeinem der Wege in dem designierten Zwischenspeicher-Zeilen-Satz gibt, Ausgeben der Daten in dem Treffer-Weg aus dem Daten-Feld.
Konzept 9. Verfahren von Konzept 8, ferner aufweisend: Wenn es ein Zwischenspeicher-Verfehlen in allen der Wege des designierten Zwischenspeicher-Zeilen-Satzes gibt, Abrufen von Anweisungs-Daten von einem Höheres-Niveau-Speicher.
Konzept 10. Verfahren von Konzept 8, wobei (1) Nachschauen der Kennzeichen für alle Wege in dem designierten Zwischenspeicher-Zeilen-Satz und (2) Nachschauen der Daten, welche in allen Wegen in dem designierten Zwischenspeicher-Zeilen-Satz gespeichert sind, parallel durchgeführt werden.
-
Es ist zu verstehen, dass die Konfigurationen und/oder Zugänge, welche hierin beschrieben sind, exemplarisch in Natur sind und dass diese spezifischen Ausführungsformen oder Beispiele nicht in einem begrenzenden Sinne aufzufassen sind, weil viele Variationen möglich sind. Die spezifischen Routinen oder Verfahren, welche hierin beschrieben sind, können eine oder mehr von irgendeiner Anzahl von Verarbeitungs-Strategien repräsentieren. Als solches können verschiedene Akte, welche illustriert sind, in der illustrierten Sequenz durchgeführt werden, in anderen Sequenzen, parallel, oder in einigen Fällen ausgelassen werden. Ähnlich kann die Ordnung der oben beschriebenen Prozesse geändert werden.
-
Der Gegenstand der vorliegenden Offenbarung umfasst alle neuen und nicht offensichtlichen Kombinationen und Unterkombinationen von verschiedenen Prozessen, Systemen und Konfigurationen und andere Merkmale, Funktionen, Akte, und/oder Eigenschafte, welche hierin offenbart sind, sowie irgendwelche und alle Äquivalente davon.