-
Computersysteme
verwenden häufig
Cache-Speicher bzw. Caches und einen anderen Speicher, der örtlich auf
die Caches begrenzt ist, um während
eines Betriebs Daten zu speichern. Weil Caches finite Größen aufweisen,
sind jedem Cache einer oder mehrere Ersetzungsalgorithmen zugeordnet.
In dem Fall, dass ein Cache voll ist und einige Cache-Daten gelöscht werden
müssen,
um Platz für neue
Daten zu machen, bestimmen diese Ersetzungsalgorithmen, welche Cache-Daten
gelöscht werden
sollten und welche Cache-Daten in dem Cache-Speicher bleiben sollten.
Ersetzungsalgorithmen weisen somit eine erhebliche Auswirkung auf
die Effizienz eines Cache-Systems auf. Folglich sind Verbesserungen
bei Cache-Ersetzungsalgorithmen erwünscht.
-
Es
ist die Aufgabe der vorliegenden Erfindung, ein System und ein Verfahren
mit verbesserten Charakteristika zu schaffen.
-
Diese
Aufgabe wird durch ein System gemäß Anspruch 1 und ein Verfahren
gemäß Anspruch
6 gelöst.
-
Für eine detaillierte
Beschreibung exemplarischer Ausführungsbeispiele
der Erfindung wird nun Bezug auf die zugehörigen Zeichnungen genommen.
-
Bevorzugte
Ausführungsbeispiele
der vorliegenden Erfindung werden nachfolgend Bezug nehmend auf
die beiliegenden Zeichnungen näher
erläutert.
Es zeigen:
-
1 ein
Blockdiagramm eines veranschaulichenden Cache-Systems gemäß verschiedenen Ausführungsbeispielen;
-
2 einen
veranschaulichenden Zeilenrahmen, der in dem Cache-System von 1 gespeichert
ist, gemäß verschiedenen
Ausführungsbeispielen;
-
3 eine
veranschaulichende Cache-Architektur, die dem Cache-System von 1 zugeordnet
ist, gemäß verschiedenen
Ausführungsbeispielen;
und
-
4–6 Flussdiagramme
veranschaulichender Verfahren, die gemäß verschiedenen Ausführungsbeispielen
implementiert sind.
-
Bestimmte
Begriffe werden die folgende Beschreibung und die Ansprüche hindurch
verwendet, um sich auf spezielle Systemkomponenten zu beziehen.
Wie es einem Fachmann auf dem Gebiet ersichtlich sein wird, bezeichnen
Firmen eine Komponente mit unterschiedlichen Namen. Dieses Dokument
beabsichtigt nicht, zwischen Komponenten zu unterscheiden, die sich
namentlich, aber nicht von der Funktion her unterscheiden. In der
folgenden Erörterung
und in den Ansprüchen
werden die Begriffe „umfassend" und „aufweisend" in einer offenen
Weise verwendet und sollten somit als „umfassend, aber nicht begrenzt
auf..." bedeutend
interpretiert werden. In der folgenden Erörterung und in den Ansprüchen soll
ferner der Begriff „koppeln" oder „koppelt" entweder eine indirekte,
direkte, optische oder drahtlose elektrische Verbindung bedeuten.
Falls somit eine erste Vorrichtung mit einer zweiten Vorrichtung
koppelt, kann diese Verbindung durch eine direkte elektrische Verbindung
oder durch eine indirekte elektrische Verbindung über andere
Vorrichtungen und Verbindungen erfolgen. In den Ansprüchen und
in der Beschreibung ist ferner, wenn ein Cache als eine Handlung
durchführend
beschrieben ist, gemeint, dass entweder der Cache die Handlung allein,
in Kombination mit einer Cache-Steuerung
durchführt oder
dass die Cache-Steuerung die Handlung allein durchführt. Der
Begriff „Verarbeitungslogik" bezieht sich auf
irgendeine Vorrichtung oder Schal tungslogik etc., die auf einen
Speicher und/oder einen Cache zugreifen kann.
-
Die
folgende Erörterung
ist auf verschiedene Ausführungsbeispiele
der Erfindung gerichtet. Obwohl eines oder mehrere dieser Ausführungsbeispiele
bevorzugt sein können,
sollten die offenbarten Ausführungsbeispiele
nicht als den Schutzbereich der Offenbarung, einschließlich der
Ansprüche,
begrenzend interpretiert oder anderweitig verwendet werden. Zusätzlich wird
einem Fachmann auf dem Gebiet klar sein, dass die folgende Beschreibung eine
breite Anwendung aufweist, und die Erörterung irgendeines Ausführungsbeispiels
ist lediglich exemplarisch für
dieses Ausführungsbeispiel
gemeint und soll nicht nahe legen, dass der Schutzbereich der Offenbarung,
einschließlich
der Ansprüche,
auf dieses Ausführungsbeispiel
begrenzt ist.
-
Hierin
ist eine Technik offenbart, durch die ein Cache-Speicher bzw. Cache, der unter mehreren Prozessorkernen
gemeinschaftlich verwendet wird, dynamisch Abschnitte des Caches
jedem der Kerne dediziert. Auf diese Weise beeinflussen Kerne, die ein
ineffizientes Verhalten (z. B. einen Überlastungszustand (Thrashing))
zeigen, die Leistungsfähigkeit der
verbleibenden Kerne nicht negativ. Die Technik ermöglicht auch,
dass der Cache „Hinweistransaktions"-Signale von Caches höherer Ebene empfangen kann.
Diese „Hinweistransaktions"-Signale ermöglichen,
dass der Cache identifizieren kann, welche Cache-Einträge in den
Caches höherer
Ebene dupliziert sind und welche Einträge in den Caches höherer Ebene
nicht dupliziert sind. Auf diese Weise wird der Cache auf dem neuesten
Stand gehalten und es ist weniger wahrscheinlich als sonst, dass
derselbe unter den Folgen veralteter Informationen leidet.
-
1 zeigt
ein Blockdiagramm eines veranschaulichenden Cache-basierten Systems 100.
Das Cache-System 100 kann in irgendeiner geeigneten elektronischen
Vorrichtung implementiert sein, wie beispielsweise einem Computer
(z. B. Perso nalcomputer, Server, Spielkonsole, Digitalkamera, digitale Musikvorrichtung
etc.). Das System 100 weist mehrere Prozessorkerne 102, 104, 106 und 108 auf
(auch als „Verarbeitungslogik" bezeichnet). Obwohl
vier Prozessorkerne explizit gezeigt sind, ist klar, dass irgendeine
geeignete Anzahl von Kernen verwendet werden kann. Der Kern 102 koppelt
mit einem Cache erster Ebene („L1-Cache"; L1 = level 1 =
Ebene 1) 110. Der L1-Cache 110 ist dem Kern 102 dediziert, was
bedeutet, dass der Kern 102 der einzige Kern ist, dem gestattet
ist, den L1-Cache 110 zu verwenden. Der L1-Cache 112 koppelt
mit dem Kern 104 und ist demselben dediziert. Der L1-Cache 114 koppelt
mit dem Kern 106 und ist demselben dediziert. Der L1-Cache 116 koppelt
mit dem Kern 108 und ist demselben dediziert. Jeder der
L1-Caches 110, 112, 114 und 116 koppelt
mit einem gemeinschaftlich verwendeten Cache zweiter Ebene („L2-Cache") 118. Mit „gemeinschaftlich
verwendet" ist gemeint,
dass der L2-Cache 118 keinem speziellen Prozessorkern dediziert
ist, sondern anstelle dessen durch einen oder mehrere der Prozessorkerne
verwendbar ist. Der L2-Cache 106 koppelt mit einer Speicherung 120 (z. B.
einem Direktzugriffsspeicher (RAM; RAM = Random Access Memory)).
Die Caches 110, 112, 114, 116 und 118 sowie
die Speicherung 120 können durch
eine Cache-Steuerung 101 gesteuert
sein.
-
Die
Caches 110, 112, 114, 116 und 118 speichern
Informationen, auf die die Kerne häufig aus der Speicherung 120 zugreifen.
Auf diese Weise werden die Geschwindigkeiten der Kerne verbessert.
Bei einigen Ausführungsbeispielen
wird auf Informationen, die in den Caches 110, 112, 114 und 116 gespeichert sind,
schneller zugegriffen als auf Informationen, die in dem Cache 118 gespeichert
sind. Bei einigen Ausführungsbeispielen
wird auf Informationen, die in dem Cache 118 gespeichert
sind, schneller zugegriffen als auf Informationen, die in der Speicherung 120 gespeichert
sind. Die Kerne können
beispielsweise Prozessorgeschwindigkeiten von 800 MHz aufweisen,
die L1-Caches 110, 112, 114 und 116 können Zugriffsgeschwindigkeiten
von 800 MHz aufweisen, der L2-Cache 118 kann eine Zugriffsgeschwindigkeit von
400 MHz aufweisen und die Speicherung 120 kann eine Zugriffsgeschwindigkeit
von etwa 200 MHz aufweisen.
-
Wenn
einer der Kerne Daten anfordert, die bei einer speziellen Adresse
in der Speicherung gespeichert sind (z. B. in Folge einer Ausführung einer Softwareanwendung),
bestimmt der Kern zuerst, ob der dedizierte L1-Cache desselben Daten
umfasst, die dieser Adresse zugeordnet sind. Falls die Adresse in
diesem L1-Cache gefunden wird (ein Cache-„Treffer"), erlangt der Kern die Daten aus diesem L1-Cache bei dieser
speziellen Adresse wieder. Falls dieser L1-Cache die Adresse nicht
umfasst (ein Cache-„Fehltreffer"), bestimmt der Kern
dann, ob der nächst
schnellste Cache, auf den derselbe zugreifen kann, der L2-Cache 118,
die Adresse umfasst. Falls ein Cache-Treffer in dem L2-Cache 118 auftritt,
erlangt der Kern die Daten aus dem L2-Cache 118 bei dieser
Adresse wieder. Falls jedoch ein Cache-Fehltreffer in dem L2-Cache 118 auftritt,
erhält
der Kern die Daten aus der Speicherung 120.
-
Die
Caches weisen mehrere „Zeilenrahmen" bzw. Zeilen-Frames
(line frames) auf, die verwendbar sind, um Daten und/oder Anweisungen
(kollektiv als „Daten” bezeichnet)
zu speichern. Wie es in 2 gezeigt ist, ist ein Zeilenrahmen 200 eine
Datenstruktur, die eine vorbestimmte Menge an Daten 206 zusätzlich zu
Statusbits 202 und einer Kennungsadresse 204 speichert,
die den Daten 206 zugeordnet sind. Bei einigen Ausführungsbeispielen
kann ein Zeilenrahmen 32 Datenbytes 206 speichern,
die als eine „Zeile" bekannt sind. Bei
einigen Ausführungsbeispielen
unterscheidet sich eine Datenmenge 206, die pro Zeilenrahmen 200 in
einem Cache gespeichert sein kann, von einer Datenmenge, die pro
Zeilenrahmen in einem anderen Cache gespeichert sein kann.
-
Die
Statusbits 202 geben Statusinformationen an, die zu der
Zeile 206 gehören.
Beispielsweise können
die Statusbits 202 angeben, ob die Zeile 206 in
einem Zeilenrahmen 200 gültig ist (z. B. unter Verwendung
eines Gültig-Bits 208),
und falls dieselbe gültig
ist, ob die Zeile 206 „verunreinigt" ist (verunreinigtes
Bit nicht explizit gezeigt). Eine Zeile ist „verunreinigt", wenn die Zeile
mit einem Datenwert aktualisiert wurde, der nicht verwendet wurde,
um eine entsprechende Zeile in einem Speicher niedrigerer Ebene
zu aktualisieren. Falls beispielsweise eine Zeile in einem L1-Cache aktualisiert
ist, aber eine entsprechende Zeile in dem L2-Cache nicht mit dem
gleichen Wert aktualisiert ist, wird die L1-Cache-Zeile als verunreinigt
betrachtet.
-
Die
Statusbits 202 können
auch Bits umfassen, die durch den Cache-Ersetzungsalgorithmus des
entsprechenden Cache-Speichers
verwendet werden. Beispielsweise können die Statusbits 202 eines
oder mehrere am weistesten zurückliegend
verwendete Bits 210 (LRU-Bits; LRU = Least Recently Used)
und/oder nicht jüngst
verwendete Bits 212 (NRU-Bits; NRU = Not Recently Used)
umfassen. Ein LRU-Bit mit einem Status „0" gibt an, dass die entsprechende Zeile „am weitesten
zurückliegend
verwendet" ist oder
dass die Zeile nicht innerhalb eines vorbestimmten Zeitintervalls
verwendet wurde. Ein LRU-Bit mit einem Status „1" gibt an, dass die entsprechende Zeile „nicht
am weitesten zurückliegend verwendet" ist oder dass die
Zeile innerhalb eines vorbestimmten Zeitintervalls verwendet wurde.
Bei einigen Ausführungsbeispielen
gibt ein LRU-Bit von „0" eine jüngere Verwendung
an und gibt ein LRU-Bit von "1" keine jüngere Verwendung
an. Gleichermaßen
gibt ein NRU-Bit mit einem Status „0" an, dass auf die entsprechende Zeile
nicht kürzlich
(d. h. innerhalb eines vorbestimmten Zeitintervalls) zugegriffen wurde.
Ein NRU-Bit mit einem Status "1" gibt an, dass auf
die entsprechende Zeile kürzlich
zugegriffen wurde. Bei einigen Ausführungsbeispielen gibt ein NRU-Bit
von „0" einen kürzlichen
Zugriff an und gibt ein NRU-Bit von „1" keinen kürzlichen Zugriff an. Die Informationen,
die in einem Zeilenrahmen enthalten sind, können die gleichen wie, ähnlich wie,
weniger oder mehr als diese sein, die hierin spezifisch offenbart
sind. Andere Cache- Ersetzungsalgorithmen
sind in dem Schutzbereich dieser Offenbarung eingeschlossen.
-
Jeder
Zeilenrahmen 200 in einem Cache-Speicher ist einer unterschiedlichen
Adresse oder einem unterschiedlichen Bereich von Adressen zugeordnet.
Eine veranschaulichende 32-Bit-Adresse weist eine Kennungsadresse
(z. B. Bits 31:14), wie beispielsweise eine Kennungsadresse 204,
eine Satz-Adresse (z. B. Bits 13:5) und einen Versatz- oder NULL-Wert
(z. B. Bits 4:0) auf. Zeilen (und zugeordnete Zeilenrahmen) mit
einer gemeinsamen Satz-Adresse werden in eine Gruppe abgebildet,
die als ein „Satz" bekannt ist. Weil
Zeilen innerhalb eines Satzes eine gemeinsame Satz-Adresse gemeinschaftlich
verwenden, werden die Zeilen innerhalb des Satzes voneinander unter
Verwendung der Kennungsadresse jeder Zeile unterschieden. Falls
somit ein Kern auf Cache-Daten zugreift, die bei einer speziellen
32-Bit-Adresse gespeichert
sind, verwendet der Kern die Satz-Adresse in den Bits 13:5, um einen übereinstimmenden
Satz in dem Cache zu lokalisieren, und verwendet dann die Kennungsadressen
in den Bits 31:14, um eine übereinstimmende
Zeile innerhalb des Satzes zu lokalisieren.
-
Gemäß verschiedenen
Ausführungsbeispielen
weist jeder Cache-Speicher auch eine spezifische Anzahl von „Wegen" auf. Eine Sammlung
von entsprechenden Zeilenrahmen über
alle Sätze
in einem Cache-Speicher hinweg wird ein „Weg" in dem Cache genannt. Die Anzahl von
Wegen in einem Cache entspricht auch der Anzahl von Zeilenrahmen, die
in jedem Satz des Cache vorliegen. Beispielsweise weist ein Zweiwegecache
zwei Wege auf und weist jeder Satz in dem Cache zwei Zeilenrahmen auf,
die diesem Satz zugeordnet sind, wobei jeder der zwei Zeilenrahmen
einem der zwei Wege zugeordnet ist. Folglich weisen Daten, die einem
speziellen Satz zugeteilt werden sollen, zwei mögliche Zeilenrahmenbestimmungsorte
auf.
-
Bei
einigen Ausführungsbeispielen
speichert jeder Cache verschiedene Informationen, die zu den Zeilenrahmen
in diesem Cache gehören.
Die Zeilenrahmen in einem Satz können
beispielsweise basierend darauf, wie kürzlich auf jeden Zeilenrahmen
zugegriffen wurde, in eine Rangliste oder Reihenfolge gestellt sein.
Bei einem veranschaulichenden Satz, der fünf Zeilenrahmen aufweist, kann
der jüngst
zugegriffene Zeilenrahmen (z. B. für einen Datenlesevorgang oder
-schreibvorgang zugegriffen) an erster Stelle stehen und kann der
am weitesten zurückliegend
zugegriffene Zeilenrahmen an letzter Stelle stehen. Alternativ kann
der am weitesten zurückliegend zugegriffene
Zeilenrahmen an erster Stelle stehen und kann der jüngst zugegriffene
Zeilenrahmen an letzter Stelle stehen. Derartige Rangfolgen können „am weitesten
zurückliegend
verwendet"-Rangfolgen (LRU-Rangfolgen) genannt
werden, wie es oben erwähnt
ist. In Betrieb, wenn neue Daten in einem Satz gespeichert werden
sollen, können
die LRU-Rangfolgen verwendet werden, um zu bestimmen, auf welchen
Zeilenrahmen am weitesten zurückliegend
zugegriffen wurde. Die Daten in dem Zeilenrahmen, auf den am weitesten
zurückliegend
zugegriffen wurde, können
entfernt oder „geräumt" werden, um Platz
für die
neuen Daten zu machen, die in diesem Zeilenrahmen gespeichert werden
sollen.
-
Eine
Verwendung der LRU-Rangfolgen, um Daten zu räumen, wird im Allgemeinen in
dem Kontext von satzassoziativen Caches durchgeführt. Genauer gesagt umfasst
ein satzassoziativer Cache mehrere Zeilenrahmen pro Satz, innerhalb
derer Daten aus jeder Speicherposition niedrigerer Ebene enthalten
sein können.
Bei einem satzassoziativen Zweiwegecache beispielsweise sind Daten
aus einer einzigen Speicherposition in dem L2-Cache 118 in zwei
Positionen in dem L1-Cache 110 gespeichert. Bei einem Bestimmen,
welche der zwei Positionen in dem L1-Cache 110 einen Datenwert
aus dem L2-Cache 118 speichern
soll, werden die LRU-Bits (oder Rangfolgen) der zwei Positionen
verglichen. Daten bei der Position, auf die am weitesten zurückliegend zugegriffen wurde,
werden geräumt,
um Platz für
den Datenwert aus dem L2-Cache 118 zu machen. Andere Arten
von Caches können
ebenfalls verwendet werden, wie beispielsweise vollständig assoziative Caches
und direkt abgebildete Caches. Ein direkt abgebildeter Cache weist
einen einzigen Zeilenrahmen pro Satz auf, innerhalb dessen Daten
aus einer Speicherposition niedrigerer Ebene enthalten sein können. Ein
vollständig
assoziativer Cache ermöglicht die
Speicherung einer Speicherposition niedrigerer Ebene in irgendeinen
Zeilenrahmen des vollständig assoziativen
Caches.
-
3 zeigt
eine detaillierte Ansicht eines satzassoziativen Caches 298.
Der Cache 298 ist veranschaulichend für einen Cache erster Ebene
(z. B. L1-Caches 110, 112, 114, 116)
und/oder den L2-Cache 118. Der Cache 298 weist
Wege 300 und 316 auf. Der Weg 300 weist
Zeilenrahmen 302 auf und der Weg 316 weist Zeilenrahmen 318 auf.
Obwohl die Wege 300 und 316 als Zeilenrahmen aufweisend gezeigt
sind, können
andere Darstellungen Sätze zeigen,
die Zeilenrahmen aufweisen. Jeder Zeilenrahmen 302 des
Wegs 300 weist ein Hinweisbitfeld 314, ein NRU-Bitfeld 312 und/oder
ein LRU-Bitfeld 310, ein Gültig-Bitfeld 308,
ein Kennungsadressfeld 304 und ein Datenfeld (d. h. eine „Zeile") 306 auf. Gleichermaßen weist
jeder der Zeilenrahmen 318 des Wegs 316 ein Hinweisbitfeld 330,
ein NRU-Feld 328, LRU-Feld 326, ein Gültig-Bitfeld 324,
ein Kennungsadressfeld 320 und ein Datenfeld (d. h. eine „Zeile") 322 auf.
In Betrieb durchsucht eine Cache-Steuerung (z. B. Cache-Steuerung 101),
die dem Cache 298 entspricht, den Cache 298, um
eine Zeile mit einer Zieladresse zu lokalisieren. Die Steuerung
lokalisiert zuerst einen Satz in dem Cache, der mit Bits 13:5 (d.
h. der Satzadresse) der Zieladresse übereinstimmt. Wenn ein übereinstimmender
Satz in dem Cache 298 gefunden ist, lokalisiert die Steuerung
ferner einen Zeilenrahmen in dem übereinstimmenden Satz mit einem
Kennungsadressfeld, das mit Bits 31:14 (d. h. der Kennungsadresse)
der Zieladresse übereinstimmt.
Falls ein übereinstimmender Zeilenrahmen
gefunden wird, bestimmt die Steuerung dann, ob die Zeile (d. h.
die Daten) in dem Zeilenrahmen gültig
ist, durch Prüfen
des Gültig-Bitfelds des übereinstimmenden
Zeilenrahmens. Falls das Gültig-Bitfeld
angibt, dass die Zeile in diesem Zeilenrahmen gültig ist, greift der Kern auf
die Daten zu und verwendet dieselben, wie nötig.
-
Falls
kein übereinstimmender
Zeilenrahmen in dem Cache 298 gefunden wird, teilt der
Cache 298 einen Platz in dem Cache 298 zu, um
die angeforderte Zeile aus einem Cache niedrigerer Ebene oder dem
Speicher in den Cache zu bringen. Um einen Platz in dem Cache 298 zuzuteilen,
bestimmt die Cache-Steuerung 101 zuerst, ob es irgendwelche
ungültigen
Zeilen in dem Cache 298 gibt (d. h. unter Verwendung der
Gültig-Bits 308).
Falls eine ungültige Zeile
gefunden wird, wird diese Zeile geräumt und werden die neuen Daten,
die von dem Cache niedrigerer Ebene oder von dem Speicher hereingebracht werden,
in diesem Zeilenrahmen gespeichert. Falls jedoch keine ungültige Zeile
gefunden wird, erhält
die Cache-Steuerung 101 Identifikationsinformationen (z.
B. einen vorbestimmten, vorab zugewiesenen numerischen oder alphanumerischen
Code) von dem Kern, der die Daten anfordert, und verwendet die Kernidentifikationsinformationen,
um eine Zeile innerhalb eines oder mehrerer Wege zu räumen, die diesem
speziellen Kern dediziert sind. Insbesondere verwendet die Cache-Steuerung
LRU- und/oder NRU-Rangfolgen (oder irgendeinen anderen geeigneten
Ersetzungsalgorithmus), um zu bestimmen, welche Cache-Zeile aus
dem (den) dedizierten Weg(en) geräumt werden sollte. Die Cache-Steuerung räumt nachfolgend
eine geeignete Zeile und ersetzt die geräumte Zeile mit neuen Daten,
die von einem Cache niedrigerer Ebene oder von einem Speicher hereingebracht
werden.
-
Cache-Wege
können
unterschiedlichen Kernen auf irgendeine geeignete Weise dediziert
sein. Falls beispielsweise ein satzassoziativer 32-Wege-Cache unter
vier Kernen gemeinschaftlich verwendet wird, kann jeder der Kerne
exklusive Rechte auf 8 der 32 Wege aufweisen. Somit können beispiels weise
Wege 0–7
dem Kern 102 dediziert sein; Wege 8–15 können dem Kern 104 dediziert
sein; Wege 16–23
können
dem Kern 106 dediziert sein und Wege 24–31 können dem Kern 108 dediziert sein.
Falls somit ein Cache-Fehltreffer in dem gemeinschaftlich verwendeten
Cache auftritt und es keine ungültigen
Zeilen in dem gemeinschaftlich verwendeten Cache gibt, die geräumt werden
können, um
Platz für
neue Daten zu machen, wird eine Zeile (unter Verwendung irgendeines
geeigneten Ersetzungsalgorithmus) aus der Gruppe von Wegen geräumt, die
dem Kern dediziert ist, der die Daten anfordert. Falls auf diese
Weise ein Kern wiederholt Daten anfordert, die nicht in den Cache-Speichern
zu finden sind (d. h. eine Überlastung
beginnt), werden die negativen Folgen der Überlastung die verbleibenden
drei Kerne nicht wesentlich beeinflussen.
-
4 zeigt
ein Flussdiagramm eines veranschaulichenden Verfahrens 400,
das gemäß verschiedenen
Ausführungsbeispielen
implementiert ist. Das Verfahren 400 beginnt damit, dass
ein Kern eine Anforderung nach Daten erzeugt (Block 402).
Falls ein Cache-Treffer in dem Cache des Kerns auftritt (Block 404),
weist das Verfahren 400 ein Erhalten der Daten aus dem
Cache und Zurückgeben
derselben an den Kern auf (Block 406). Falls jedoch ein
Cache-Fehltreffer in dem Cache auftritt, weist das Verfahren 400 ein
Erhalten von Identifizierungsinformationen von dem anfordernden
Kern („Kern-ID") (Block 408)
und ein Bestimmen auf, ob eine vorbestimmte Anzahl von Zeilen (z.
B. 1 Zeile) in dem gemeinschaftlich verwendeten Cache ungültig sind
(Block 410). Falls eine ungültige Zeile gefunden wird,
weist das Verfahren 400 ein Zuteilen einer neuen Zeile
in dem Cache-Weg
der ungültigen
Zeile auf (Block 412). Falls jedoch keine ungültigen Zeilen
in dem gemeinschaftlich verwendeten Cache gefunden werden (Block 410),
weist das Verfahren 400 ein Verwenden der Kern-ID, um (einen)
Weg(e) zu identifizieren, der (die) dem Kern zugeordnet ist (sind),
und ein Verwenden eines geeigneten Ersetzungsalgorithmus (z. B. LRU,
NRU) auf, um eine Zeile in einem der Wege zuzuteilen, die diesem
Kern zugeordnet sind (Block 414). Einige der Handlungen
des Verfahrens 400 können
durch eine Cache-Steuerung
(z. B. die Cache-Steuerung 101) durchgeführt werden.
-
Unter
erneuter Bezugnahme auf 3 umfasst jeder der Zeilenrahmen
ein Hinweisbit 314, wie es vorhergehend erwähnt ist.
Das Hinweisbit 314 gibt an, ob eine Kopie der Daten, die
in diesem Zeilenrahmen gespeichert sind (d. h. Daten 306),
auch in einem Cache höherer
Ebene gespeichert ist. Unter Bezugnahme auf 1 beispielsweise
gibt ein Hinweisbit in dem L2-Cache 118 an, ob Daten, die
dem Hinweisbit entsprechen, auch in einem oder mehreren der L1-Caches 110, 112, 114 und 116 gespeichert sind.
Bei zumindest einigen Ausführungsbeispielen werden
Hinweisbits eines Caches unter Verwendung von „Hinweistransaktions"-Signalen aktualisiert,
die von Caches einer oberen Ebene gesendet werden. Wenn beispielsweise
eine Zeile aus einem der L1-Caches
oberer Ebene geräumt
wird, sendet dieser L1-Cache ein Hinweistransaktionssignal an den L2-Cache 118,
wobei die Adresse oder andere Informationen angegeben werden, die
zu der geräumten Zeile
gehören.
Der L2-Cache 118 wiederum verwendet die Adresse oder anderen
Informationen in dem Signal, um die entsprechende Zeile in dem L2-Cache 118 zu
lokalisieren, und aktualisiert das Hinweisbit 314, das
dieser Zeile zugeordnet ist, um widerzuspiegeln, dass die Daten
nicht mehr in dem L1-Cache gespeichert sind. Ähnliche Techniken können verwendet
werden, um Hinweisbits zu aktualisieren, um widerzuspiegeln, dass
ein Cache oberer Ebene die Daten speichert, die in dem L2-Cache
gefunden werden.
-
In
einigen Fällen
räumt ein
Cache oberer Ebene Daten und sendet ein Hinweistransaktionssignal
an den Cache niedrigerer Ebene. Eine Kopie der Daten jedoch, die
aus dem Cache oberer Ebene geräumt
werden, kann immer noch in einem unterschiedlichen Cache oberer
Ebene gespeichert sein. Für
derartige Fälle
kann der Cache niedrigerer Ebene konfiguriert sein, um entweder
die Hinweisbits desselben auf einen Empfang eines Hinweistransaktionssignals
von irgendeinem der Caches oberer Ebene hin einzustellen oder um
die Hinweisbits desselben auf einen Empfang von Hinweistransaktionssignalen
von einer vorbestimmten Anzahl (z. B. allen) Caches oberer Ebene
hin einzustellen. Andere geeignete Hinweistransaktionsalgorithmen
können ebenfalls
wie gewünscht
implementiert werden.
-
5 zeigt
ein Flussdiagramm eines veranschaulichenden Verfahrens 500,
das gemäß verschiedenen
Ausführungsbeispielen
implementiert ist. Das Verfahren 500 beginnt damit, dass
ein Kern eine Datenanforderung erzeugt (Block 502). Das
Verfahren 500 weist dann ein Bestimmen auf, ob ein Cache-Fehltreffer
aufgetreten ist (Block 504). Falls nicht, weist das Verfahren 500 ein
Erhalten der Daten und Zurückgeben
derselben an den Kern auf (Block 506). Falls ein Cache-Fehltreffer
aufgetreten ist, weist das Verfahren 500 ein Bestimmen
auf, ob der Cache eine vorbestimmte Menge von ungültigen Zeilen
(z. B. 1 ungültige
Zeile) aufweist (Block 508). Falls dem so ist, weist das
Verfahren 500 ein Zuteilen einer neuen Zeile in dem Weg
der ungültigen
Zeile auf (Block 510). Andernfalls weist das Verfahren 500 ein Durchsuchen
aller Wege nach einer Zeile auf, deren gespeichertes Hinweisbit
angibt, dass eine Kopie der Zeile nicht in einem Cache höherer Ebene
gespeichert ist (Block 512). Das Verfahren 500 weist
dann ein Bestimmen auf, ob eine derartige Zeile gefunden wird (Block 514).
Falls dem so ist, weist das Verfahren 500 ein Zuteilen
einer Zeile in dem Weg auf, der die Zeile aufweist, die gefunden
wird (z. B. unter Verwendung einer Cache-Steuerung) (Block 516).
Andernfalls weist das Verfahren 500 ein Erhalten einer Identifikation
von dem Kern, der die Daten anfordert („Kern-ID"), ein Verwenden der Kern-ID, um einen Weg
(Wege) zu identifizieren, der (die) dem Kern zugeordnet ist (sind),
und ein Verwenden eines geeigneten Ersetzungsalgorithmus (z. B.
LRU/NRU), um eine Zeile in einem der identifizierten Wege zuzuteilen,
auf (Block 518).
-
6 zeigt
ein Flussdiagramm eines veranschaulichenden Verfahrens 600,
das gemäß verschiedenen
Ausführungsbeispielen
implementiert ist. Insbesondere ist das Verfahren 600 nutzbar,
um die oben beschriebenen Hinweisbits zu aktualisieren. Das Verfahren 600 weist
ein Bestimmen auf, ob eine gültige
Zeile aus einem Cache oberer Ebene geräumt wurde (Block 602).
Falls dem so ist, weist das Verfahren 600 ein Erzeugen
und Senden eines Hinweistransaktionssignals (z. B. eines Ausstoßhinweistransaktionssignals)
von dem Cache höherer
Ebene an den Cache niedrigerer Ebene auf (Block 604). Bei einigen
Ausführungsbeispielen
können,
falls die geräumte
Cachezeile verunreinigt war, die Daten, die dieser Zeile zugeordnet
sind, auch zu dem Cache niedrigerer Ebene kopiert werden. Das Verfahren 600 weist
ferner ein Aktualisieren des Hinweisbits des Caches niedrigerer
Ebene auf, um anzugeben, dass eine Kopie der Zeile nicht in dem
Cache oberer Ebene gespeichert ist (Block 606). Zumindest
einige der Handlungen des Verfahrens 600 können durch eine
Cache-Steuerung
(z. B. die Cache-Steuerung 101) durchgeführt werden.
-
Die
obige Erörterung
soll veranschaulichend sein für
die Grundlagen und verschiedenen Ausführungsbeispiele der vorliegenden
Erfindung. Zahlreiche Variationen und Modifikationen werden Fachleuten
auf dem Gebiet ersichtlich, sobald die obige Offenbarung vollständig klar
ist. Es ist beabsichtigt, dass die folgenden Patentansprüche so interpretiert werden,
um alle derartigen Variationen und Modifikationen zu umschließen.