-
Stand der Technik
-
Technisches Gebiet
-
Die
vorliegende Erfindung betrifft Systeme und Verfahren zum Caching
bzw. Cache-Speichern von
Daten, und im Besonderen betrifft sie Systeme und Verfahren zum
Verwalten temporaler und nicht-temporaler Daten in einem einzigen
Cache.
-
Beschreibung des Stands der
Technik
-
Die
Prozessorgeschwindigkeiten nehmen schneller zu als die Geschwindigkeiten
der Speichersysteme, die sie mit Daten versorgen. Eine weit verbreitete
Strategie für
die Adressierung der Diskrepanz zwischen den Prozessor- und Speichergeschwindigkeiten
ist die Organisation des Speichersystems als eine Hierarchie von
Speicherstrukturen. Diese Hierarchie weist für gewöhnlich einen Hauptspeicher
und einen oder mehrere Caches auf. Ein kleiner Cache, z.B. ein Cache
L0, befindet sich nahe an der Kern-Pipeline des Prozessors, um für den Prozessor
einen schnellen Zugriff auf ausgewählte Daten aus einem Arbeitsdatensatz
bzw. aktuellen Datensatz bereitzustellen. Größere Caches (L1, L2, ...) bieten
Platz für
zunehmend größere Abschnitte
des Arbeitsdatensatzes, wobei sie jedoch längere Zeiten für den Zugriff
auf die Daten erfordern. Datenanfragen bzw. Datenanforderungen werden
von der untersten bzw. niedrigsten Ebene der Speicherhierarchie
erfüllt,
welche die angeforderten Informationen speichert.
-
Die
Caches werden klein gehalten, um deren Zugriffsgeschwindigkeiten
zu erhöhen,
und die Größen von „auf dem
Chip vorgesehenen" Caches,
wie z.B. L0 und L1 sind darüber
hinaus beschränkt,
um deren Auswirkung auf die Fläche
des Prozessorchips zu reduzieren. Folglich ist der Speicherplatz
in Cache-Speichern sehr wertvoll, und die in einem Cache gespeicherten
Daten müssen
intelligent ausgewählt werden,
um die Vorteile des Caching bzw. der Cache-Speicherung vollständig zu nutzen. Die Strategien
richten sich für
gewöhnlich
auf die Erhöhung
der Wahrscheinlichkeit, dass Daten, die häufig angefordert werden, von
einem der Low Level-Caches zur Verfügung stehen.
-
Cache-Speicher
nutzen den Gedanken der räumlichen
und temporalen Lokalität
zum Speichern von Daten, die wahrscheinlich von einem Programm angefordert
werden, das sich näher
an der Prozessor-Pipeline befindet. Die räumliche Lokalität betrifft die
Tendenz eines Programms, auf Daten innerhalb eines bestimmten Bereichs
des Speichers zuzugreifen, vor dem Wechsel zu einem anderen Speicherbereich.
Wenn auf Daten an einer bestimmten Speicheradresse zugegriffen wird,
ist es auch wahrscheinlich, dass auch auf eine benachbarte Speicheradresse
zugegriffen wird. Cache-Speicher nutzen die räumliche Lokalität, indem
Datenblöcke
aus benachbarten Speicherplätzen
in dem gleichen Cache-Eintrag oder einer Cache-Zeile gespeichert
werden.
-
Die
temporale Lokalität
betrifft die Wahrscheinlichkeit, dass auf ein Datenelement, auf
das durch ein Programm zugegriffen wird, bald wieder zugegriffen
wird. Die Zeitskala, in Bezug auf welche „bald" bestimmt wird, ist die Zeit, die Daten
in einem Cache verbringen („Lebensdauer"), bevor sie aus diesem
ausgeworfen werden, um Platz für
neue Daten zu schaffen. Daten, für
die es wahrscheinlich ist, dass auf sie während der Lebensdauer wiederholt zugegriffen
wird, sind als nicht-temporale Daten gekennzeichnet.
-
Die
temporale und räumliche
Beschaffenheit von Daten kann durch eine Matrixmultiplikation veranschaulicht
werden: A·B
= C, wobei A, B und C gegeben sind durch:
-
Dabei
ist a
ij das Element in der j-ten Spalte der
i-ten Zeile der Matrix A, wobei b
j das j-te
Element in dem Spaltenvektor B ist, und wobei c
i das
i-te Element in dem resultierenden Spaltenvektor C ist. Jedes Element
von C steht wie folgt im Verhältnis
zu den Elementen von A und B:
wobei n die Anzahl der Spalten
in A darstellt.
-
Zur
Evaluierung eines Elements ci greift der Prozessor
sequentiell auf die Elemente der Zeile i von A (aji...
ain) zu und multipliziert den Wert jeweils mit
dem entsprechenden Element von B(b1...bn). Die Zeilenelemente von A sind somit räumlich lokal,
und somit es der Platz zulässt,
werden sie in der gleichen Cache-Zeile gespeichert. Die Zeilenelemente
von A sind jedoch nicht temporal lokal, da auf sie nur einmal zur
Evaluierung von Gleichung (I) zugegriffen wird.
-
Die
Elemente von B sind ebenfalls räumlich lokal,
da auf sie sequentiell zugegriffen wird, während der Prozessor durch entsprechende
Zeilenelemente von A verläuft,
gemäß Gleichung
(II). Folglich werden sie in der gleichen Cache-Zeile gespeichert,
sofern dies der Platz zulässt.
Die temporale Eigenschaft der Elemente von B ist teilweise abhängig von
der Cache-Größe. Wenn
der Cache groß genug
ist, um die Elemente von A und B aufzunehmen, so sind die Elemente
von B auch temporal lokal, da auf sie für jede Zeile der Matrix A zugegriffen
werden kann. In Bezug auf größere Matrizen
und Vektoren in kleineren Cache-Speichern müssen unter Umständen bestimmte Vektorelemente
verworfen werden, um Platz für
die Matrixelemente bereitzustellen. Dies kann häufig jedoch durch verschiedene
Blockierungs- bzw.
Sperrtechniken verhindert werden.
-
Es
ist eindeutig wünschenswert,
Cache-Speicherplatz temporalen Daten zuzuweisen, wie z.B. dem Vektor
B, da auf diese wiederholt zugegriffen wird. Andererseits sollte
eine bestimmte Kapazität
des Cache-Speicherplatzes nicht-temporalen Daten zugewiesen werden,
wie zum Beispiel Matrix A, um Speicherzugriffe mit langen Latenzzeiten
zu vermeiden, wenn die Daten benötigt
werden. Diese Daten können
in dem Cache gespeichert werden in Antizipation deren Nutzung mittels
Prefetching und vorgezogenen Ladeoperationen. Wenn diese Operationen
aber temporale Daten ausstoßen
bzw. verwerfen, um Platz für
nicht-temporale Daten zu schaffen, können sie auch die Leistung
bzw. Performance des Cache verringern.
-
Der
Einsatz einer separaten Speicherstruktur für temporale und nicht-temporale
Daten verhindert es, dass nicht-temporale Daten temporale Daten in
einem Cache verschieben. Der Einsatz einer separaten Speicherstruktur
weist jedoch verschiedene signifikante Nachteile auf. Die Speicherstruktur
benötigt
zusätzlichen
Platz auf einem Halbleiterchip, wobei dieser Platz in modernen Prozessoren
eine begrenzte Ressource ist, und wobei die Beschränkung der
Größe der Cache-Struktur
die Lebensdauer der von ihr gespeicherten Daten reduziert. Diese
Reduzierung ist für
nicht-temporale Daten besonders signifikant, auf die ohnehin selten
zugegriffen wird. Darüber
hinaus muss die Kohärenz
zwischen der zweiten Speicherstruktur und den anderen Speicherstrukturen
des Speichersystems aufrechterhalten werden. Die erforderliche Schaltkreisanordnung
nimmt zusätzlichen
Platz eines Halbleiterchips bzw. Chips in Anspruch, gestaltet die
Bauweise des Cache-Systems komplizierter und verschlechtert wahrscheinlich die
Cache-Zugriffszeit.
-
EP-A-0509231
offenbart ein Least Recently Used (LRU) Cache-Ersetzungssystem,
bei dem der Daten-Cache logisch partitioniert ist in zwei separate Abschnitte
Demand (Anforderung) und Prefetch (Voraberfassung). Eine Cache-Verzeichnistabelle
und eine Least Recently Used-Tabelle
werden zur Verwaltung des Cache eingesetzt. Wenn eine neue Demand-Datenseite
dem Cache hinzugefügt
wird, wird ein Most Recently Used (MRU) Zeiger aktualisiert und
zeigt. auf diese neue Seite. Wenn eine Prefetch-Seite dem Cache
hinzugefügt
wird, wird der Least Recently Used-Zeiger des Demand- bzw. Anforderungsabschnitts
aktualisiert, wobei dessen Rückwärtszeiger
auf diese neue Seite zeigt. Ein Cache-Treffer bei einer Anforderung
der Prefetch-Seite bewegt bzw. verschiebt die Seite an das obere
Ende der Least Recently Used-Tabelle. Wenn in dem Cache eine freie
Seite benötigt
wird, so wird diese aus den Demand- oder Prefetch-Abschnitten des
Speichers auf der Basis eines Vergleichs zwischen der Anforderungstrefferdichte
und der Prefetch-Trefferdichte ausgewählt, um ein Gleichgewicht zwischen den
beiden Trefferdichten zu erhalten. Dieses Referenzdokument offenbart
somit ein System, bei dem Entscheidungen darüber, wo der Least Recently Used-Zeiger platziert
werden soll, darauf basiert, ob es sich bei der Seite in dem Cache
um eine Anforderungsseite oder eine Prefetch-Seite handelt.
-
Das
U.S. Patent US-A-4.980.823 offenbart ein Verfahren zur Verwaltung
von Computerspeicher für
Cache-Speicher unter Verwendung einer Dekonfirmationstechnik zur
Bereitstellung eines einfachen sequentiellen Prefetching-Algorithmus.
Der sequentielle Zugriff wird auf der Basis einfacher Historien
bzw. Verläufe
prädiziert.
Jeder Speicherzeile in dem Cache-Speicher ist ein Bit in einem S-Vektor
zugeordnet, das als das S-Bit für
die Zeile bezeichnet wird. Wenn das S-Bit aktiv bzw. eingeschaltet
ist, erfolgt eine sequentielle Prädiktion, was bedeutet, dass
die sequentiell nächste
Zeile als guter Kandidat für
ein Prefetching betrachtet wird, wenn diese Zeile nicht bereits
in dem Cache-Speicher vorhanden ist. Der Schlüssel für die Funktionsweise des Speicherverwaltungsverfahrens
ist die Manipulation (ein- und ausschalten) der S-Bits.
-
„A New
Cache Architecture Concept: The Split Temporal/Spatial Cache" von V. Milutinovic
et al., Proc. IEEE/MEMECON-96, B. Mediterranean Electrochemical
Conference, Industrial Applications in Power Systems, Bari, Italien,
13. bis 16. Mai 1996, Seiten 1108–111, offenbart eine Cache-Architektur, wobei
ein Cache in zwei Teilsysteme unterteilt wird, welche entsprechend überwiegend
temporale Lokalitätsdaten
und überwiegend
räumliche
Lokalitätsdaten
aufweisen. Damit, dass die Daten in erster Linie eine temporale
Lokalität
aufweisen, sind Daten gemeint, für
die die Wahrscheinlichkeit der wiederholten Bezugnahme auf eine
bestimmte Adresse in der nahen Zukunft hoch ist, während mit
Daten, die in erster Linie eine räumliche Lokalität aufweisen,
Daten gemeint sind, für
die nach dem Zugriff auf eine bestimmte Adresse die Wahrscheinlichkeit
verhältnismäßig hoch
ist, dass auch auf eine benachbarte Adresse zugegriffen wird.
-
„A Data
Cache with Multiple Caching Strategies Tuned to Different Types
of Locality" von
A. González
et al., Proc. International Conference on Supercomputing, ICS'95, Barcelona, Spanien,
3. bis 7. Juli 1995, New York, ACM, Seien 338–347, offenbart einen dualen
Daten-Cache mit
unabhängigen
Abschnitten zur Verwaltung der räumlichen
und der temporalen Lokalität.
Der duale Daten-Cache verwendet eine Lokalitäts-Prädiktionstabelle, die eine Verlaufstabelle
mit Informationen über
die zuletzt ausgeführten
Lade-/Speicherbefehle darstellt. Ein erster von zwei unabhängigen Caches,
ein räumlicher
Cache, ist so gestaltet, dass er die räumliche Lokalität zusätzlich zu
der temporalen Lokalität
nutzt. Ein temporaler Cache dient zur Nutzung ausschließlich der temporalen
Lokalität.
Die beiden Sub-Caches arbeiten unabhängig voneinander und parallel
zueinander. Wenn ein Prozessor einen Speicherverweis ausgibt, werden
beide Caches gleichzeitig geprüft
und unterschiedliche Maßnahmen
ergriffen, abhängig
davon, ob in einem der Caches, in beiden Caches oder in keinem der
Sub-Caches ein Treffer vorliegt, wobei die Aktion bzw. Maßnahme für den Fall
eines Cache-Treffers von der Lokalitäts-Prädiktionstabelle abhängig ist.
-
Dieses
Dokument offenbart, dass die beiden Sub-Caches in einem Cache kombiniert
werden können,
um temporale und räumliche
Daten zu speichern, wobei nicht zwischen den temporalen und den räumlichen
Caches unterschieden wird. Nur Daten mit räumlicher Lokalität oder Daten
mit temporaler Lokalität
werden in dem Cache gespeichert, für die es sicher ist, dass sie
sich nicht selbst beeinträchtigen.
-
Zusammenfassung der Erfindung
-
Vorgesehen
ist gemäß einem
ersten Aspekt der vorliegenden Erfindung ein Verfahren gemäß dem gegenständlichen
Anspruch 1.
-
Vorgesehen
ist gemäß einem
zweiten Aspekt der vorliegenden Erfindung ein Cache gemäß dem gegenständlichen
Anspruch 9.
-
Vorgesehen
ist gemäß einem
dritten Aspekt der vorliegenden Erfindung ein Prozessor gemäß dem gegenständlichen
Anspruch 12.
-
Bevorzugte
Merkmale der Erfindung sind durch die Unteransprüche definiert.
-
Kurze Beschreibung der Zeichnungen
-
Die
wird in Bezug auf die folgenden Zeichnungen verständlich,
in denen die gleichen Elemente mit den gleichen Bezugsziffern bezeichnet
sind. Die Zeichnungen dienen der Veranschaulichung ausgewählter Ausführungsbeispiele
der vorliegenden Erfindung und schränken den Umfang der vorliegenden Erfindung
nicht ein. Es zeigen:
-
1 ein
Flussdiagramm herkömmlicher Verfahren
zur Verwaltung von Daten in einem Cache;
-
2 Flussdiagramme;
die einen Überblick über ein
Verfahren gemäß der vorliegenden
Erfindung zur Verwaltung temporaler und nicht-temporaler Daten in
dem gleichen Cache zeigen;
-
3 ein
Flussdiagramm, das ein Verfahren gemäß der vorliegenden Erfindung
zur Verwaltung von Cache-Misses darstellt;
-
4 ein
Flussdiagramm eines Verfahrens gemäß der vorliegenden Erfindung
zur Verwaltung von Cache-Treffern;
-
5 ein
Blockdiagramm eines Cache-Systems, das ein Ersetzungsmodul zur Implementierung der
Verfahren der Abbildungen der 3 und 4 aufweist;
und
-
die 6A und 6B Ausführungsbeispiele
von Zustandsmaschinen, die durch das Ersetzungsmodul aus 5 implementiert
werden können.
-
Genaue Beschreibung der Erfindung
-
In
der folgenden Beschreibung sind zahlreiche spezifische Einzelheiten
ausgeführt,
um ein umfassendes Verständnis
der Erfindung zu vermitteln. Der Durchschnittsfachmann auf dem Gebiet,
der von der vorliegenden Offenbarung profitiert, erkennt aber auch,
dass die vorliegende Erfindung auch ohne die spezifischen Einzelheiten
ausgeführt
werden kann. Darüber
hinaus wurden verschiedene allgemein bekannte Verfahren, Abläufe, Komponenten
und Schaltungen nicht näher
beschrieben, um die Aufmerksamkeit auf die Merkmale der vorliegenden
Erfindung zu richten.
-
Die
Vorteile der vorliegenden Erfindung können in Bezug auf herkömmliche
Gache-Verwaltungssysteme
besser verstanden bzw. gewürdigt
werden. Diese Systeme werden zum Beispiel beschrieben in „Cache
Memories" von A.J.
Smith, ACM Computing Surv. 14, Nr. 3, S. 473–530 (September 1982). Cache-Verwaltungsysteme
bzw. -Managementsysteme versuchen Daten zur Speicherung in der Cache-Hierarchie
durch verschiedene Prioritätsbasierte
Ersetzungsstrategien zu identifizieren. Zu diesen Strategien zählen die
Strategien Least Recently Used (LRU), Pseudo-LRU, Least Frequenty
Used (LFU), Not Recently Used (NRU) und andere Ersetzungsstrategien.
In ihren herkömmlichen
Ausführungen
identifizieren diese Strategien alte/neue Daten in einem Cache,
indem die Zugriffe auf die Cache-Einträge verfolgt und zugeordnete
Ersetzungsprioritäts-Indikatoren
(RPIs) aktualisiert werden, um die Zeitsteuerung dieser Zugriffe
wiederzugeben, wie z.B. wie kürzlich oder
wie häufig
auf Daten in dem zugeordneten Eintrag zugegriffen worden ist. Wenn
für neue
Daten Platz zugewiesen werden muss, identifiziert der RPI einen
zu ersetzenden Cache-Eintrag.
-
Die
Abbildung aus 1 zeigt ein Flussdiagramm eines
herkömmlichen
Verfahrens 100 zur Zuordnung bzw. Zuweisung von Platz in
einem Cache unter Verwendung einer LRU-Ersetzungsstrategie. Das Verfahren 100 wird
eingeleitet, wenn ein Cache-Zugriff detektiert wird 110.
Bei einem Cache-Miss wird eine Zeile der Cache-Daten von einer anderen
Stelle in dem Speichersystem abgerufen 120 und in einen
einer Reihe von möglichen
Cache-Einträgen
geschrieben 130, und zwar gemäß eines RPI, der den potenziellen
Einträgen
zugeordnet ist. In einem n-Wege satzassoziativen Cache handelt es
sich bei den möglichen
bzw. potenziellen Einträgen
um die n-Einträge
eines Satzes, die durch die Adresse der Zieldaten angezeigt werden.
Wenn der Cache-Miss durch eine Ladeoperation ausgelöst wird,
sind die Zieldaten in der Cache-Zeile enthalten, die durch die Speicherhierarchie
bereitgestellt wird. Wenn der Cache-Miss durch eine Ladeoperation ausgelöst wird,
werden die in dem Speicherbefehl spezifizierten Zieldaten mit der
Cache-Zeile kombiniert, die durch die Speicherhierarchie bereitgestellt wird.
In jedem Fall wird der Cache-Eintrag, der als LRU bezeichnet ist,
für die
neuen Daten zugewiesen. Der RPI wird danach aktualisiert 140,
um den Status der potenziellen Cache-Einträge nach der Schreiboperation
zu reflektieren. Im Besonderen wird der RPI so modifiziert, dass
der Eintrag, der die Zieldaten empfangen hat (vorher als LRU bezeichnet),
jetzt als Most Recently Used (MRU) bezeichnet ist. Die mit LRU-1,
LRU-2, etc. bezeichneten Einträge
werden entsprechend zu LRU, LRU-1, etc. aktualisiert.
-
Wenn
ein Cache-Treffer detektiert wird 110, wird der Cache-Zugriff 150 implementiert,
und der dem Treffereintrag zugeordnete RPI wird aktualisiert, um
den Status der potenziellen Einträge nach dem Zugriff zu reflektieren.
Der Treffereintrag ist zum Beispiel mit MRU bezeichnet, und die
mit LRU-1, LRU-2 ... bezeichneten Einträge werden entsprechend aktualisiert
zu LRU, LRU-1.... In jedem Fall (Cache-Treffer, Cache-Miss) reflektiert
der aktualisierte Indikator die Tatsache, dass der durch den Zugriff
berühre
Cache-Eintrag jetzt durch den Zugriff MRU lautet.
-
Das
herkömmliche
Ersetzungsverfahren 100 unterscheidet nicht zwischen temporalen
und nicht-temporalen Daten. Wenn ein Cache-Zugriff zum Beispiel
nicht-temporale Daten zum Ziel hat und fehlschlägt, und der als LRU designierte
Cache-Eintrag temporale Daten aufweist, so stößt das Verfahren 100 die
temporalen Daten zugunsten der nicht-temporalen Daten aus. Dies
erfolgt, obgleich die temporalen Daten eine höhere Wahrscheinlichkeit der
erneuten Verwendung aufweisen als die sie verschiebenden nicht-temporalen
Daten. Die Bereitstellung einer separaten Cache-Struktur für nicht-temporale
Daten eliminiert dieses Phänomen, wobei
es jedoch die vorstehend im Text beschriebenen Nachteile aufweist.
-
Die
vorliegende Erfindung ermöglicht
temporale und nicht-temporale Daten in der gleichen Cache-Struktur,
ohne die Leistung des Cache zu beeinträchtigen. Erreicht wird dies
durch die Zuweisung von Cache-Einträgen an nicht-temporale Daten
auf eine Art und Weise, welche das Speichern bzw. Halten temporaler
Daten in dem Cache bevorzugt. Somit werden nicht-temporale Daten berücksichtigt, indem vorzugsweise
andere nicht-temporale Daten oder die „am wenigsten temporalen" temporalen Daten
verworfen werden. Dies macht eine separate Speicherstruktur für nicht-temporale
Daten überflüssig und beseitigt
damit auch die Nachteile bei diesem Ansatz. Ferner wird sichergestellt,
dass erzielte Leistungsvorteile, wie z.B. durch Prefetching und
vorgezogene Ladeoperationen (weniger Zugriffe mit langen Latenzzeiten),
nicht durch eine geringere bzw. reduzierte Cache-Leistung (niedrigere
Cache-Bitrate) aufgehoben werden.
-
Die
Abbildung aus 2 zeigt ein Flussdiagramm mit
einem Überblick über ein
Verfahren 200 gemäß der vorliegenden
Erfindung zur Verwaltung von Daten in einem Cache, wobei eine Prioritäts-basierte
Ersetzungsstrategie implementiert wird. Jedem Cache-Eintrag ist
ein RPI zugeordnet, der die relative Eignung der dem Eintrag zugeordneten
Daten für eine
Ersetzung reflektiert. Das Verfahren 200 wird eingeleitet,
wenn ein Cache-Zugriff, z.B. Lade-, Speicheroperation, detektiert
wird 210. Die Zieldaten des Cache-Zugriffs werden durch
eine Adresse spezifiziert, die einem Cache-Eintrag unter Verwendung
allgemein bekannter Techniken zugeordnet werden kann. Das Verfahren 200 bestimmt 220 den
temporalen oder nicht-temporalen Charakter der Zieldaten unter Verwendung
verschiedener Verfahren, die nachstehend im Text näher beschrieben
werden. Der RPI, der dem Cache-Eintrag zugeordnet ist, auf den zugegriffen
wird, wird danach gemäß dem temporalen/nicht-temporalen
Charakter der Zieldaten aktualisiert 230. In Bezug auf
ein Ausführungsbeispiel
wird der RPI angepasst, um den Cache-Zugriff wiederzugeben, wenn
temporale Daten spezifiziert sind, und der RPI bleibt in seinem
aktuellen Zustand erhalten, wenn nicht-temporale Daten spezifiziert
sind. In Bezug auf ein weiteres Ausführungsbeispiel wird ein erster
RPI-Aktualisierungsalgorithmus eingesetzt, wenn temporale Daten
spezifiziert sind, und ein zweiter RPI-Aktualisierungsalgorithmus wird angewandt, wenn
nicht-temporale Daten spezifiziert sind.
-
In
Bezug auf ein Ausführungsbeispiel
setzt der Cache eine LRU-Ersetzungsstrategie ein, wobei der RPI
die Reihenfolge darstellt, in der auf einen assoziierten Satz der
Cache-Einträge
zugegriffen wird. In einem n-Wege satzassoziativen Cache ist zum Beispiel
eine RPI jedem Satz zugeordnet und spiegelt die Reihenfolge wider,
in der auf die n-Cache-Einträge
des Satzes (oder eines Teilsatzes dieser Einträge) zugegriffen worden ist.
Ein codierter RPI kann die Zugriffsreihenfolge von LRU zu MRU darstellen.
In dem vorliegenden Ausführungsbeispiel wird
der RPI für
Cache-Zugriffe aktualisiert, die temporale Daten zum Ziel haben,
und wobei die Aktualisierung für
Cache-Zugriffe, die nicht-temporale Daten zum Ziel haben, umgangen
oder modifiziert wird. Dies erhöht
die Wahrscheinlichkeit dafür,
dass ein Eintrag, der nicht-temporale Daten speichert, durch den
RPI als alt (LRU) bezeichnet wird. Diese Einträge werden vorzugsweise bei
Cache-Misses verworfen, um Platz für neue Daten zu schaffen.
-
In
der folgenden Beschreibung wird die vorliegende Erfindung in Bezug
auf ein Ausführungsbeispiel
veranschaulicht, wobei eine RPI-Aktualisierung für nicht-temporale Daten umgangen
wird. Der Fachmann auf dem Gebiet, der von der vorliegenden Offenbarung
profitiert, wird erforderliche Modifikationen erkennen, um unterschiedliche
RPI-Aktualisierungsvorgänge für temporale
und nicht-temporale Daten zu implementieren.
-
Die
Abbildung aus 3a zeigt ein Flussdiagramm
eines Verfahrens 300 zur Verwaltung von Einträgen bei
einem Cache-Miss gemäß der vorliegenden
Erfindung. In dem offenbarten Ausführungsbeispiel wird das Verfahren 300 eingeleitet,
wenn ein Cache-Zugriff fehlschlägt 310,
wobei ein Befüllen
einer Cache-Zeile ausgelöst
wird. Die Zieldaten des Zugriffs werden abgerufen 320 und
in einen einer Mehrzahl von potenziellen Cache-Einträgen geschrieben 330,
und zwar gemäß einem
Ersetzungsprioritäts-Indikator
(RPI), der den Einträgen
zugeordnet ist. Für
Cache-Misses, die durch Speicherbefehle ausgelöst werden, werden die beim
Speichern spezifizierten Zieldaten mit der abgerufenen Cache-Zeile kombiniert,
bevor sie in den Cache geschrieben werden. Wenn bestimmt wird 340,
dass die Zieldaten temporal (T) sind, wird der RPI aktualisiert 360,
um den Cache-Zugriff zu reflektieren. Wenn bestimmt wird 340,
dass die Zieldaten nicht-temporal (NT) sind, wird der aktuelle RPI
weiter geführt 350.
-
In
der Abbildung aus 3 soll die abgebildete Reihenfolge
der Schritte 320, 330 und 340 aus 3 nicht
deren Chronologie anzeigen. Der temporale oder nicht-temporale Charakter der
Daten kann zu jedem Zeitpunkt nach dem Detektieren des Cache-Zugriffs
bestimmt werden (Schritt 340) und bevor der RPI aktualisiert
wird. Das gleiche gilt für
die Schritte 420 und 430 aus 4 (unten).
-
Die
Abbildung aus 4 zeigt ein Flussdiagramm eines
Verfahrens gemäß der vorliegenden
Erfindung, das sich zum Einsatz eignet, wenn ein Cache-Zugriff den
Cache trifft („Cache-Treffer"). Wenn ein Cache-Treffer
detektiert wird 410, wird auf den den Zieldaten zugeordneten
Cache-Eintrag zugegriffen 420. Während dem Zugriff 420 werden
die Zieldaten in den getroffenen Eintrag geschrieben oder aus diesem
gelesen, abhängig
davon, ob der Zugriff entsprechend durch eine Lade- oder Speicheroperation ausgelöst wird.
Wenn bestimmt wird 430, dass die Zieldaten temporal sind,
wird der RPI aktualisiert 450, um den Zugriff darzustellen.
Wenn bestimmt wird 430, dass die Zieldaten nicht-temporal
sind, bleibt der RPI in dessen aktuellen Zustand erhalten.
-
Der
temporale oder nicht-temporale Charakter der Daten kann auf unterschiedliche
Art und Weise bestimmt werden. In Bezug auf ein Ausführungsbeispiel
der vorliegenden Erfindung weisen die Lade- und Speicherbefehle
(und deren Äquivalente)
ein zugeordnetes Feld auf, in dem der temporale/nicht-temporale
Charakter der Zieldaten angezeigt werden kann. Der angezeigte temporale/nicht-temporale Charakter
kann durch den Programmierer mittels Datendeklaration, Pragmas oder
Befehlsauswahl bestimmt werden oder durch den Kompilierer durch Pfadprofilierung
und verschiedene andere allgemein bekannte Verfahren. Der temporale/nicht-temporale Charakter
kann auch durch die Speicherbereiche angezeigt werden, in denen
die Daten gespeichert werden. Dies kann zum Beispiel unter Verwendung
von Seitentabellenattributen, Adressgruppen und dergleichen erreicht
werden. In Bezug auf ein anderes Ausführungsbeispiel kann der Prozessor
den temporalen oder nicht-temporalen Charakter der Daten bestimmen,
indem der Datenfluss durch dessen Hardware überwacht wird. In diesem Fall
wird der temporale oder nicht-temporale Charakter der Daten, die
das Ziel eines Cache-Zugriffs sind, durch die Nutzungshistorie bzw.
den Nutzungsverlauf der Daten in dem Prozessor bereitgestellt.
-
Die
Abbildung aus 5 zeigt ein Blockdiagramm eines
Ausführungsbeispiels
eines Cache-Systems 500,
das sich zur Implementierung der vorliegenden Erfindung eignet.
Der Cache 500 weist eine Cache-Steuereinheit 510,
einen Tag-RAM 530, Prioritätsregister 534, einen
Daten-RAM 540, einen ersten Bus 560 und einen
zweiten Bus 570 auf. Die Cache- Steuereinheit 510 weist ein
Ersetzungsmodul 520 auf, das eine Cache-Zeilen-Ersetzungsstrategie gemäß der vorliegenden
Erfindung implementiert.
-
Indem
offenbarten Ausführungsbeispiel
handelt es sich bei dem Cache 500 um einen satzassoziativen
Cache, der j-Sätze
mit jeweils n-Wegen umfasst. Im Besonderen weist der Tag-RAM 530 Tag-Daten
auf, die in n-Wegen 532(1)–532(n) von j-Sätzen 550(1)–550(j) angeordnet
sind, und der Daten-RAM 540 weist Kopien der im Cache gespeicherten
Daten auf, die in n-Wegen 542(1)–542()n) von j-Sätzen 550(1)–550(j) angeordnet
sind, mit Adressen, die denen des Tag-RAM 540 entsprechen.
Jeder Satz 550 des Cache 500 weist ein Prioritätsregister 534 auf,
in dem ein RPI für
den zugeordneten Satz 550 gespeichert ist. Beispiele für Ersetzungsprioritäts-Indikatoren
sind die vorstehend im Text genannten Bezeichnungen LRU, Pseudo-LRU
und LFU. Die Prioritätsregister 534 sind
als separate Elemente dargestellt, wobei sie aber auch in dem Tag-RAM 530, dem
Daten-RAM 540 oder der Cache-Steuereinheit 510 enthalten
sein können.
-
Ein
Dateneintrag oder eine Cache-Zeile in dem Cache 500 kann
identifiziert werden durch den Satz und den Weg, wie er bzw. sie
gespeichert wird. Zum Beispiel entsprechen die Daten in dem Satz 550(j-1) des
Wegs 542(1) einer Zeile von Cache-Daten, auf die zum Beispiel
unabhängig
von der Zeile der Cache-Daten in dem Satz 550(3) des Wegs 542(n) zugegriffen
und manipuliert wird. Ein Cache-Zugriff wird eingeleitet, indem
die Tag- und Indexabschnitte einer spezifizierten Adresse an die
Tag- und Daten-RAMs 530, 540 bereitgestellt werden.
Der Index spezifiziert einen Satz 550 des Cache 500,
der n unterschiedliche Cache-Zeilen aufweist, welche n-Wegen 542(1)–542(n) entsprechen.
Die in diesen n-Wegen des Tag-RAM 530 gespeicherten Tag-Werte
werden mit dem Tag-Wert verglichen, der auf dem ersten Bus 560 bereitgestellt
wird, um zu bestimmen, ob eine der Cache-Zeilen dem spezifizierten
Eintrag entspricht. Die Funktionsweise von satzassoziativen Cache-Speichern
ist im Fach allgemein bekannt und wird hierin nicht näher beschrieben.
-
Die
in den Abbildungen der 3 und 4 dargestellte
Ersetzungsstrategie ermöglicht
es, dass sich temporale und nicht-temporale Daten in dem Cache 500 befinden,
während
die Wahrscheinlichkeit minimiert wird, dass die temporalen Daten
durch nicht-temporale Daten aus dem Cache entfernt werden. Diese
Ersetzungsstrategie wird durch das Ersetzungsmodul 520 in
Verbindung mit den Prioritätsregistern 534 implementiert.
Wenn im Besonderen eine Zeile von Cache-Daten nach einem Cache-Miss
in den Cache 500 geschrieben wird, werden ein Satz 550 und
ein zugeordnetes Prioritätsregister 534 anhand
der Index-Bits der Adresse der Daten identifiziert. Ein RPI in dem
Prioritätsregister 534 zeigt
an, welcher Weg 532 des Satzes ersetzt werden soll. Das
Ersetzungsmodul 520 aktualisiert den RPI, wenn temporale
Daten geschrieben werden, und es erhält den aktuellen Zustand des
RPI, wenn nicht-temporale
Daten geschrieben werden. Wenn in ähnlicher Weise ein Cache-Zugriff
einen der Cache-Einträge trifft,
wie z.B. 536(3,1), aktualisiert oder erhält das Ersetzungsmodul 520 den
RPI in einem entsprechenden Prioritätsregister (534(34)),
abhängig
davon, ob es sich bei den Zieldaten entsprechend um temporale oder
nicht-temporale Daten handelt.
-
Die
Abbildung aus 6A zeigt ein Ausführungsbeispiel
einer durch das Ersetzungsmodul 520 gemäß der vorliegenden Erfindung
implementierten Zustandsmaschine 600. Die Zustandsmaschine 600 verbleibt
in einem Zustand IDLE (Ruhezustand) 610, bis ein Zugriff
auf den Cache 500 detektiert wird. Wenn ein Cache-Zugriff
fehlschlägt,
wechselt die Zustandsmaschine 600 in einen Zustand ALLOCATE (Zuordnung) 620.
In dem Zustand ALLOCATE 620 bestimmt die Zustandsmaschine 600,
welcher der Mehrzahl potenzieller Cache-Einträge die Cache-Zeile empfangen
soll, die die Zieldaten aufweist, und wobei die Cache-Zeile in den
entsprechenden Eintrag geschrieben wird. In dem vorstehend beschriebenen
Ausführungsbeispiel
wird der zugeordnete Cache-Eintrag bestimmt durch Verweis auf ein Prioritätsregister 534,
das den potenziellen Einträgen zugeordnet
ist, und zwar gemäß der implementierten Ersetzungsstrategie.
Zum Beispiel würde
eine LRU-Ersetzungsstrategie
den mit LRU bezeichneten Eintrag für die Ersetzung auswählen und
diesen Eintrag der neuen Datenzeile zuordnen bzw. zuweisen.
-
Wie
dies bereits vorstehend im Text beschrieben worden ist, löst ein Cache-Miss
ein Füllen des
Cache aus, wodurch eine Cache-Zeile abgerufen wird, die der fehlgeschlagenen
Adresse der Speicherhierarchie entspricht. Wenn der Cache-Miss durch
einen Speicherbefehl ausgelöst
wird, wird die Zeile der Cache-Daten aktualisiert mit Zieldaten,
die durch den Speicherbefehl angezeigt werden, bevor dieser in den
Cache-Speicher geschrieben wird. Wenn ein Cache-Miss durch einen
Ladebefehl ausgelöst
wird, weist die abgerufene Zeile von Cache-Daten die Zieldaten auf.
-
Die
Zustandsmaschine 600 wechselt aus dem Zustand ALLOCATE 620,
wenn sie eine Anzeige des T/NT-Charakters der Zieldaten empfängt. Wenn
T-Daten angezeigt werden, wechselt die Zustandsmaschine 600 aus
dem Zustand ALLOCATE 620 in den Zustand ADJUST (Anpassen) 630.
In dem Zustand ADJUST 630 wird der RPI in dem Prioritätsregister,
der den potenziellen Einträgen
zugeordnet ist, so angepasst, dass der kürzliche Zugriff dargestellt
wird, wobei zum Beispiel der Weg, auf den zugegriffen wird, von
LRU in MRU geändert
wird, und wobei die verbleibenden Wege entsprechend angepasst werden.
Wenn diese Operation abgeschlossen (DONE) ist, wechselt die Zustandsmaschine 600 zurück in den
Zustand IDLE 610. Hiermit wird festgestellt, dass die „betroffene" Ersetzung, die Zuordnung einer
neuen Zeile und die RPI-Aktualisierung in verschiedenen Sequenzen
synchronisiert werden können,
abhängig
von den Details der Implementierung des Cache.
-
Wenn
in einem Zustand ALLOCATE 620 die Zieldaten als NT identifiziert
sind, wechselt die Zustandsmaschine 600 aus dem Zustand
ALLOCATE 620 zurück
in den Zustand IDLE 610. Der Zustand ADJUST 630 wird
umgangen, wobei der aktuelle RPI in dem Prioritätsregister 534 erhalten
bleibt.
-
Wenn
in dem Zustand IDLE 610 ein Cache-Treffer detektiert wird,
wechselt die Zustandsmaschine 600 in einen Zustand ACCESS
(Zugriff) 640. In dem Zustand ACCESS 640 wird
der Cache-Eintrag, auf den zugegriffen werden soll, über die
Adresse der Zieldaten identifiziert, und die Zieldaten werden entweder
aus dem Eintrag gelesen oder in den Eintrag geschrieben, und zwar
abhängig
davon, ob der zugriff entsprechend durch einen Lade- oder Speichervorgang
ausgelöst
worden ist. Die Zustandsmaschine 600 wechselt gemäß dem T/NT-Charakter
der Zieldaten in den Zustand IDLE 610 oder den Zustand
ADJUST 630. Wenn T-Daten angezeigt werden, wechselt die
Zustandsmaschine 600 in den Zustand ADJUST 630,
und der RPI in dem Prioritätsregister 534,
der dem Treffereintrag zugeordnet ist, wird aktualisiert, um den
Zugriff darzustellen, wobei zum Beispiel der Weg, auf den zugegriffen wird,
von LRU in MRU geändert
wird, und wobei die verbleibenden Wege entsprechend angepasst werden.
-
Wenn
in dem Zustand ACCESS 640 die Zieldaten als NT identifiziert
sind, wechselt die Zustandsmaschine 600 aus dem Zustand
ACCESS 640 zurück
in den Zustand IDLE 610. Der Zustand ADJUST 630 wird
umgangen, wobei der aktuelle RPI in dem Prioritätsregister 534 erhalten
bleibt.
-
Die
Abbildung aus 6B zeigt ein weiteres Ausführungsbeispiel
der Zustandsmaschine 600, das durch das Ersetzungsmodul 520 implementiert
werden kann. Die Zustandsmaschine 600' eignet sich, wenn unterschiedliche
RPI-Aktualisierungsalgorithmen für
temporale und nicht-temporale Daten implementiert werden. In dem
offenbarten Ausführungsbeispiel
wird ein zusätzlicher
Zustand ADJUST 650 bereitgestellt, um den RPI-Aktualisierungsalgorithmus
für nicht-temporale
Daten zu implementieren. Der Zustand ADJUST 650 kann zum
Beispiel den RPI anpassen, um die Daten zu bezeichnen, auf die zugegriffen
wird, wie zum Beispiel LRU-P an Stelle der Beibehaltung der Bezeichnung
LRU. Hierbei gilt 1 ≤ P < n für einen
n-Wege satzassoziativen
Cache. Dieser Algorithmus belastet ebenso nicht-temporale Daten
für die
Ersetzung vor, wobei die Vorbelastung nicht so stark ist, wie sie
durch die Zustandsmaschine aus 6A bereitgestellt
wird.
-
Die
vorliegende Erfindung wird unter Verwendung einer modifizierten
(LRU) Ersetzungsstrategie veranschaulicht, wobei die Erfindung aber
auch auf andere Prioritätsbasierte
Ersetzungsstrategien angewandt werden kann, darunter die Strategien Pseudo-LRU,
Least Frequenty Used (LFU), Not Recently Used (NRU) und äquivalente
Ersetzungsstrategien. Jede Strategie weist einen zugeordneten RPI auf,
Aktualisierungen dessen auf die vorstehend beschriebene Art und
Weise vorbelastet werden können,
um nicht-temporale
Daten in dem Cache zu berücksichtigen,
während
vorzugsweise temporale Daten erhalten bleiben.
-
Die
vorliegende Erfindung wurde vorstehend für die Situation beschrieben,
in der die dem Cache zuzuweisenden Daten Operanden für Befehle
darstellen, die durch den Prozessor ausgeführt werden. Die Erfindung ist
somit auch dann anwendbar, wenn es sich bei den Daten um Befehle
handelt. Befehle können
a1 eine temporale oder nicht-temporale Lokalität aufweisend gekennzeichnet
sein, und wobei diese Informationen eingesetzt werden können, um das
Befehls-Caching gemäß der vorliegenden
Erfindung zu verwalten. In Abwesenheit von Verzweigungen werden
Befehle zum Beispiel sequentiell ausgeführt und weisen folglich eine
nicht-temporale (und räumliche)
Lokalität
auf. Verzweigungsbefehle in einer Codefolge können es bewirken, dass Teile
der Codefolge übersprungen
werden, wodurch deren räumliche
Lokalität
eliminiert wird. Zudem können Verzweigungsbefehle,
wie etwa Schleifen, bewirken, dass auf Befehlsfolgen wiederholt
zugegriffen wird, wodurch diesen eine temporale Lokalität verliehen wird.
Die vorliegende Erfindung kann in der Lage sein, den temporalen
nicht-temporalen Charakter der Befehle einzusetzen, um Raum bzw.
Platz in einem Befehls-Cache (oder einem vereinheitlichten bzw. Unified-Cache)
auf die vorstehend beschriebene Art und Weise zuzuweisen.
-
Ein
Verfahren zur Bestimmung des temporalen/nicht-temporalen Charakters
von Daten umfasst die Überwachung
der Nutzungsmuster der Daten. Der temporale/nicht-temporale Charakter
von Befehlen kann auf ähnliche
Weise bestimmt werden. Zum Beispiel weisen Prozessoren für gewöhnlich eine Verzweigungs-Prädiktionslogik
auf, die verfolgen kann, ob eine Verzweigung bei vorherigen Ereignissen
aufgetreten ist oder nicht. Diese Informationen in Bezug auf die „Verzweigungshistorie" für eine häufig benutzte
Schleifenverzweigung können
eingesetzt werden, um anzuzeigen, dass die Befehlsfolge, die in der
Schleife wiederholt wird, eine temporale Lokalität aufweist. In ähnlicher
Weise können
bestimmte Prozessorarchitekturen Verzweigungshinweise unterstützen, um
durch den Kompilierer erzeugte Verzweigungsinformationen (statische
Verzweigungsinformationen) zu der Prozessor-Hardware zu übertragen.
Verzweigungshinweisbefehle zeigen der Prozessor-Hardware auf der Basis von Kompilierungs-Zeitinformationen,
ob es wahrscheinlich ist, dass die Verzweigung wahrgenommen wird,
sowie die Zieladresse der Verzweigung, wenn diese vorgenommen wird.
Verzweigungshinweise stellen somit geeignete Informationen für die Kennzeichnung
von Befehlen als temporal oder nicht-temporal bereit.
-
Wenn
der temporale/nicht-temporale Charakter von Befehlen verfügbar ist,
kann die vorliegende Erfindung eingesetzt werden, um Befehlen auf
die vorstehend in Bezug auf Operandendaten beschriebene Art und
Weise Cache-Platz zuzuweisen.
-
Beschrieben
wurde somit ein System zur Verwaltung temporaler und nicht-temporaler
Daten in dem gleichen Cache durch Vorbelastung des Cache-Verwaltungsmoduls
zur Bevorzugung der Ersetzung von nicht-temporalen Daten (Befehlen).
Daten (einschließlich
Befehle) werden gemäß ihrem
temporalen nicht-temporalen Charakter gekennzeichnet. Wenn auf temporale
Daten zugegriffen wird, wird ein dem Eintrag, auf den zugegriffen
wird, zugeordneter Ersetzungsprioritäts-Indikator aktualisiert,
um diesen Zugriff darzustellen. Wenn auf nicht-temporale Daten zugegriffen wird, bleibt
ein Ersetzungsprioritäts-Indikator
weiter erhalten, der dem Eintrag zugeordnet ist, auf den zugegriffen
wird.