-
HINTERGRUND
-
Die vorliegende Erfindung betrifft
Cache-Speicher, und im einzelnen Strategien zum Auswählen von Daten,
die in einem Cache-Speicher ausgewechselt werden müssen.
-
Die Verarbeitung innerhalb eines
Computersystems kann mittels einer Hardwarekomponente, die als Zentraleinheit
bzw. Prozessor (CPU) bezeichnet wird, erfolgen. Befehle und Daten
für die
CPU können
in einem großen
Hauptspeicher bzw. auf einer Festplatte gespeichert sein. Die Arbeitsgeschwindigkeit
einer CPU (d. h., die benötigte
Zeit, um eine Befehl durchzuführen)
ist typischerweise wesentlich schneller als die Zugriffsgeschwindigkeit
auf den Hauptspeicher bzw. auf die Festplatte. Demzufolge mag die
CPU gezwungen werden, auf einen angeforderte Befehl oder Datenelement
untätig
zu warten, während
der Hauptspeicher durch eine Speicherzugriffsoperation läuft. Diese
untätige
Wartezeit verschlechtert ernsthaft die effektive Verarbeitungsgeschwindigkeit
der CPU.
-
Um dieses Problem anzusprechen, ist
häufig
eine Cache-Speichereinheit
in dem Computersystem ausgeführt.
Cache-Speicher sind
auf dem Computerfachgebiet als Hilfsspeicher wohlbekannt, die eine
Puffermöglichkeit
zwischen einer CPU und einem Hauptspeicher bereitstellen. Der Cache-Speicher
ist typischerweise derart ausgelegt, wesentlich schneller als der
Hauptspeicher zu laufen und außerhalb
des Hauptspeichers geladen zu werden.
-
Speichereinrichtungen, die mit der
Geschwindigkeit der CPU laufen, sind wesentlich teurer und physikalisch
größer als
die langsameren Einrichtungen, die den Hauptspeicher ausmachen.
Daraus resultiert, dass die Größe eines
Cache-Speichers (gemessen durch die Anzahl der separat adressierbaren
Speicherzellen, die innerhalb des Speichers enthalten sind) wesentlich
geringer als die Größe des Hauptspeichers
ist. Weil der Cache-Speicher nicht sämtliche Befehle und Daten,
die in dem Hauptspeicher gespeichert sind, enthalten kann, fordert
die; CPU gelegentlich einen bestimmten Befehl oder eine bestimmtes
Datenelement an, welches gegenwärtig
nicht in dem Cache-Speicher gespeichert ist. Solch ein Auftreten
wird ein „Cache-Fehltreffer"
genannt und macht es erforderlich, dass der angeforderte Befehl
oder das angeforderte Datenelement von dem Hauptspeicher abgefragt,
in dem Cache-Speicher gespeichert und dann der CPU zugeführt werden
muss. Es kann dann gesehen werden, dass jeder Cache-Fehltreffer
das Potential aufweist, die CPU so lange wartend zu machen (wenn
nicht länger),
als wenn der Cache-Speicher nicht vorhanden sein würde.
-
Ein Nachteil der Technik zur Reduzierung
der Verarbeitungsgeschwindigkeit liegt darin, dass, wann auch immer
ein Datenlese Cache-Fehltreffer auftritt, die Ausführung eines
Außer-Betrieb-Befehls
gesetzt wird. Das bedeutet, dass Befehle im Anschluss eines Befehls,
welcher den Cache-Fehltreffer
verursacht hat, mit der Ausführung
fortfahren werden, während
die CPU auf die fehlenden Daten wartet. Für den Betrieb dieser Strategie
ist es notwendig, dass die Ausführung
dieser nachfolgenden Befehle unabhängig von den fehlenden Daten
ist. Die Ausführung
von Befehlen, die von den fehlenden Daten abhängig sind, müssen in
einem Schwebezustand (z. B. in Schleifen) gehalten werden bis die
fehlenden Daten zur. Verfügung
stehen. Wenn die Daten zur Verfügung
stehen, werden dann sämtliche
Befehle, die abhängig
von diesen Daten waren, ausgeführt.
Außer-Betrieb-Befehlsausführungstechniken werden
in William Johnson, „Superscaler
Microprocessor Design", 1991 (ISBN 0-13-875634-1) beschrieben.
-
Selbst wenn die Außer-Betrieb-Ausführungsstrategie
angenommen wird, werden wahrscheinlich in dem Programm Sprungbefehle
auftreten, deren Zielspeicherstelle in einigen Arten bedingt durch
die fehlenden Daten ist. Eine Straiegie zur Vermeidung einer langen
Verzögerung
bei der Befehlsabrufoperation der CPU liegt darin., zu vermuten,
welcher Sprungbefehl genommen werden wird, und versuchsweise das
Abrufen und das Ausführen
von Befehlen von dem vermuteten Sprungbefehl fortzuführen. Falls
aufgefunden wird, dass, wenn die fehlenden Daten zur Verfügung stehen,
die Vermutung richtig war, dann können die Ergebnisse der versuchsweisen
Ausführung
fortlaufend gemacht werden (z. B. durch Speicherung der Ergebnisse
in Zielspeicherplätzen).
Wenn jedoch eine falsche Vermutung gemacht wurde, dann müssen sämtliche
Ergebnisse der Befehle, die nach der bedingten Sprungbefehlanweisung
ausgeführt
wurden, geräumt
werden, und die Programmausführung
beginnt erneut von dem richtigen Sprungbefehlpfad. Von daher verursacht
eine falsche Vermutung eine sehr große Verschlechterung des Leistungsverhaltens.
-
Ein anderer Faktor, der die effektive
Ausführungsgeschwindigkeit
der CPU beeinflusst, ist die Tatsache, dass, wenn ein Cache-Fehltreffer
auftritt, Daten (oder ein oder mehrere Befehle für den Fall, wo sich Daten und
Befehle den gleichen Cache-Speicher teilen) von dem Cache-Speicher entfernt
werden müssen,
um Platz für
das fehlende Datenelement zu schaffen. Die Strategie zum Auswählen der
Daten, die von dem Cache entfernt werden müssen (eine „Cache-Auswechslungsstrategie" genannt), kann
ebenso die effektive Ausführungsgeschwindigkeit
der CPU beeinflussen, da die „ausgesetzten"
Daten zu einer späteren
Zeit benötigt
werden könnten,
und von daher einen anderen Cache-Fehltreffer verursachen.
-
Bestehende Cache-Auswechslungsstrategien
wurden auf die Maximierung der Wahrscheinlichkeit basiert, dass
ein angeforderter Befehl oder ein angefordertes Datenelement erfolgreich
in dem Cache gefunden wird (ein „Cache-Treffer" genannt).
Eine solche Strategie wählt
zum Entfernen das Datenelement aus, welches durch das Ausführungsprogramm
am wenigsten häufig
verwendet wurde (LRU). Die Basis für diesen Ansatz ist das Konzept
der temporären
Gebundenheit: Die Absicht, dass die Wahrscheinlichkeit, dass die
nächste Adresse,
auf die zugegriffen werden muss, dieselbe Adresse ist, wie die Adresse,
auf die gegenwärtig
zugegriffen wird, um so größer ist,
je früher
der zweite Zugriff in Bezug auf den ersten auftritt.
-
Andere Cache-Auswechslungsstrategien
sind die Zufallsauswechslung und First-In-First-Out (FIFO).
-
Sämtliche
obigen Cache-Auswechslungsstrategien weisen ein hohes Cache-Treffer-Verhältnis als
Ziel auf, welches gewöhnlich
als die Häufigkeiten
eines versuchten Cache-Lesens beim erfolgreichen Beziehen der Daten
von dem Cache dividiert durch die Gesamtzahl der versuchten Cache-Zugriffe
definiert ist. (Ein ähnliches
Maß ist
das Cache-Fehltreffer-Verhältnis,
welches gewöhnlich
als 1-Cache-Treffer-Verhältnis
definiert ist). Jedoch sind diese Cache-Auswechslungsstrategien
unzureichend, da sie bei der Berücksichtigung
der Effekte der Cache-Fehltreffer scheitern, die unvermidlich auftreten
werden.
-
Der technische IBM-Veröffentlichungsbericht,
Vol. 15, Nr. 12, Mai 1973, New York, US, Seiten 3803–3805, offenbart
eine zuvor betrachtete Cache-Speicher-Technik.
-
ZUSAMMENFASSUNG
-
Von daher liegt der vorliegenden
Erfindung die Aufgabe zugrunde, die effektive Ausführungsgeschwindigkeit
einer CPU zu steigern, mittels verbesserter Verfahren und mittels
einer Apparatur zum Ermitteln, welche Einträge in einem Cache-Spfsicher entfernt
werden sollten, um Platz für
ein Cache-Auswechslungs-Datenelement
zu schaffen.
-
Die zuvor genannte und andere Aufgaben
werden gelöst
durch Verwendung einer Cache-Daten-Auswechslungstechnik in einem
Computersystem, welches eine Zentraleinheit bzw. einen Prozessor
(CPU), einen Cache-Speicher und einen Hauptspeicher bzw. eine Festplatte
aufweist, wobei der Cache-Speicher eine Vielzahl darin gespeicherter
Datenelemerte aufweist. In Übereinstimmung
mit einem Aspekt der Erfindung weist das Cahe-Daten Auswechslungsverfahren
ein Zuordnen eines Prioritätswerts
zu jedem der gespeicherten Datenelemente auf, wobei für jedes
Datenelement der Prioritätswert
eine Abschätzung
ist, wie viel CPU Verzögerungszeit
auftreten wird, wenn ein Versuch unternommen wird, das Datenelement
von dem Cache-Speicher abzufragen, wenn das Datenelement nicht in
dem Cache-Speicher gespeichert ist.
-
Gemäß einem anderen Aspekt der
Erfindung wird der Prioritätswert
für jedes
der Datenelemente festgestellt durch Ermittlung, wie viele andere
Befehle abgerufen und in einem Pufferspeicher gespeichert werden müssen zwischen
einem Zeiitintervall, welches durch die Initiierung und Vollendung
der Abfrage des Datenelements von dem Hauptspeicher bzw. von der
Festplatte definiert ist, wobei die Ausführung der anderen Befehle abhängig von
der Vollendung der Abfrage des Datenelements ist.
-
Gemäß einem noch anderem Aspekt
der Erfindung weist der Verfahrensschritt der Ermittlung für jedes der
Datenelemente, wie viele andere Befehle zwischen dem Zeitintervall
abgerufen und in einem Pufferspeicher gespeichert werden müssen, ferner
eine Anpassung des Prioritätswerts
mittels eines Betrages auf, der darauf basiert, ob irgendeiner der
anderen Befehle ein bedingter Sprungbefehl ist.
-
Gemäß noch einem weiteren Aspekt
der Erfindung weist der Verfahrensschritt der Ermittlung für jedes der
Datenelemente, wie viele andere Befehle zwischen dem Zeitintervall
abgerufen und in einem Pufferspeicher gespeichert werden müssen, ferner
eine Anpassung des Prioritätswerts
mittels eines Betrages auf, der darauf basiert, ob irgendeiner der
anderen Befehle ein Nicht-Sprungbefehl ist.
-
Gemäß einem anderen Aspekt der
Erfindung wird, wenn ein Auswechslungs-Datenelement in dem Cache
gespeichert werden muss, der zu entfernende Cache-Eintrag durch
eine Analyse der Prioritätswerte
ermittelt, um einen geringsten Prioritätswert zu ermitteln. Dann wird
eines der Datenelemente, welches den niedrigsten Prioritätswert aufweist,
ausgewählt
und durch das Auswechslungs-Datenelement ausgewechselt.
-
Gemäß noch einem weiteren Aspekt
der Erfindung wird das Treffer-Verhältnis des Daten-Cache verbessert,
in dem nicht gefordert wird, dass die Prioritätswerte der zugeordneten bzw. zugehörigen Datenelemente
feststehend verharren. Stattdessen wird jeder der Prioritätswerte
periodisch mittels eines bestimmten Betrages angepasst, was in einem
niedrigerem Prioritätswert
resultiert. Auf diese Weise können
auch solche Cache-Einträge
unter Umständen
Kandidaten für
eine Auswechslung werden, die anfänglich hohe Prioritätswerte
ausweisen.
-
Gemäß noch einem anderen Aspekt
der Erfindung können
wertvolle bzw. nützliche
Dateneinträge
daran gehindert werden, auf unbestimmte Zeit in dem Daten-Cache
zu verbleiben durch Anpassung des Prioritätswerts mittels eines bestimmten
Betrages in Erwiderung auf einen Lesezugriff des zugehörigen Datenelementes,
wobei die Anpassung in einem höheren
Prioritätswert
resultiert. Alternativ hierzu kann der Prioritätswert in Erwiderung auf ein
Lesezugriff des zugehörigen
Datenelements auf einen Anfangswert gesetzt werden. Kombiniert mit
der Technik der periodischen Verminderung des Prioritätswerts
der Dateneinträge,
gestattet es diese Technik, dass wertvolle bzw. nützliche
Dateneinträge
in dem Daten-Cache so lange verbleiben, wie sie andauern, von dem
ablaufenden Programm zugegriffen zu werden, und gestattet es ferner,
dass diese entfernt werden, wenn sie nicht länger benutzt werden.
-
Gemäß einem Aspekt der vorliegenden
Erfindung wird ein Verfahren in Übereinstimmung
mit Patentanspruch 1 der beigefügten
Ansprüche
bereitgestellt.
-
Gemäß einem zweiten Aspekt der
vorliegenden Erfindung wird ein Verfahren in Übereinstimmung mit Patentanspruch
6 der beigefügten
Ansprüche
bereitgestellt.
-
Gemäß einem dritten Aspekt der
vorliegenden Erfindung wird eine Apparatur in Übereinstimmung mit Patentanspruch
15 der beigefügten
Ansprüche
bereitgestellt.
-
Gemäß einem vierten Aspekt der
vorliegenden Erfindung wird eine Apparatur in Übereinstimmung mit Patentanspruch
20 der beigefügten
Ansprüche
bereitgestellt.
-
KURZE BESCHREIBUNG
DER ZEICHNUNGEN
-
Die obig beschriebenen und andere
Aufgaben und Vorteile der Erfindung werden durch Lesen der folgenden
ausführlichen
Bechreibung in Verbindung mit den Zeichnungen verstanden, in welchen:
-
1 ein
Blockdiagramm eines exemplarischen Computersystems ist, welches
die Erfindung verkörpert;
-
2 ein
Ablaufdiagramm ist, das eine Technik zum Abfragen eines Datenelements
vom Hauptspeicher und zum Speichern es in ein Daten-Cache in Übereinstimmung
mit einem Aspekt der Erfindung darstellt;
-
3 ein
Diagramm einer exemplarischen Ausführung eines Daten-Cache zur
Verwendung mit dem erfindungsgemäßen Cache-Speicher
und den Auswechslungstechniken ist;
-
4 Ein
Ablaufdiagramm ist, welches eine Strategie zur Auswechslung von
Daten in einem Cache-Speicher in Übereinstimmung mit einem anderen
Aspekt der Erfindung darstellt;
-
5 ein
Diagramm einer alternativen exemplarischen Ausführungsform für ein Daten-Cache
zur Verwendung mit dem erfindungsgemäßen Cache-Speicher und den
Auswechslungstechniken ist; und
-
6 ein
Ablaufdiagramm ist, welches eine Strategie zum Erhalten von Prioritätswerten
in Übereinstimmung
mit anderen Aspekten der Erfindung darstellt.
-
DETAILLIERTE
BESCHREIBUNG
-
Die verschiedenen Merkmale der Erfindung
werden nun mit Berücksichtigung
der Figuren beschrieben, in welchen gleiche Komponente mit gleichen
Bezugszeichen bezeichnet sind.
-
Ein exemplarisches Computersystem,
welches die Erfindung verkörpert,
ist in 1 gezeigt. Eine CPU 101 führt Befehle aus, welche in
einem Hauptspeicher 107 gespeichert sind. Die CPU 101 erhält Daten für die Befehle
von einem in dem Hauptspeicher 107 enthaltenen Adressenraum.
Ergebnisse von Ausführungen
der Befehle werden ebenso in diesen gleichen Adressenraum rückgespeichert.
-
Die Umlauf- bzw. Zykluszeit des Hauptspesichers 107 ist
wesentlich langsamer als die Ausführungsgeschwindigkeit der CFU 101.
Um der CPU 101 schneller Befehle zuzuführen, ist ein Befehls-Cache 103 zwischen
der CPU 101 und dem Hauptspeicher 107 zwischengeschaltet.
Der Befehls-Cache 103 operiert in Übereinstimmung mit herkömmlichen
Techniken und wird von daher hier nicht näher beschrieben.
-
Um es der CPU 101 zu gestatten,
schneller Daten abzufragen und zu speichern, ist ebenso ein Daten-Cache 105 zwischen
der CPU 101 und dem Hauptspeicher zwischengeschaltet. Der
Datenfluß in
den und aus dem Daten-Cache 105 wird mittels einer Daten-Cache-Steuerung gesteuert.
Vieles der Betriebsweise des Daten-Cache 105 steht in Übereinstimmung
mit bekannten Techniken. Ähnlich
wie ein herkömmlicher
Cache-Speicher, ist das Daten-Cache 105 ein
Speicher, dessen Umlauf- bzw. Zykluszeit nahe der Ausführungsgeschwindigkeit
der CPU ist. Ebenso wie ein herkömmlicher
Cache-Speicher, hält
das Daten-Cache 105 lediglich eine Teilmenge der Information,
die in dem Hauptspeicher 107 enthalten ist. Demzufolge
ist das Ergebnis von Cache-Fehltreffern, wie in dem HINTERGRUND-Abschnitt
diskutiert, für
das Daten-Cache 105 zutreffend.
-
Um den Effekt der Cache-Fehltreffer
zu mildern, ist die Architektur der CPU 101 in der Lage,
Aufier-Betrieb-Ausführungen
auszuführen,
wie es in dem HINTERGRUND-Abschnitt beschrieben wird. Techniken
zum Gestalten einer CPU, die diese Fähigkeit aufweist, sind aus
dem Fachgekiet bekannt und brauchen hier nicht ausführlich beschrieben
werden. Um das Verständnis
der Erfindung zu erleichtern, folgt eine kurze Beschreibung einer
exemplarischen Ausführungsform
der CPU 101. Es sollte verstanden sein, dass die hier beschriebenen
erfindungsgemäßen Prinzipien
es nicht erforderlich machen, dass die CPU 101 die spezielle,
unten beschriebene Gestaltung annimmt, sondern kann stattdessen
bei jeder Psozessorarchitektur angewandt werden, die Gebrauch von
Außer-Betrieb-Ausführungen
macht.
-
Die exemplarische CPU 101 weist
eine Abruflogik 101 zum Ermitteln der Adresse einer nächsten Befehls
und zum Abrufen dieses Befehls auf. Der Befehlssatz der exemplarischen
CPU 101 ist ausgelegt, um Operanden zu verwenden, die in
irgendeinem der Anzahl von adressierbaren Arbeitsregister 113 gespeichert sind.
Von daher muß,
bevor eine Befehlsverwendung einen Quelloperand ausführen kann,
dieser Operand zunächst
in das Arkeitsregister von dem Daten-Cache über die Operanden-Abruflogik 115,
eine arithmetische Logikeinheit (ALU) 117 und einen Rück-Ordnungspuffer 119 geladen
werden. Selbstverständlich
ist die Erfindung nicht durch die Verwendung lediglich in reduzierten
Befehlssatz-Computern (RISC) eingeschränkt, wie etwa solch einer,
der hier beschrieben wird. Ganz im Gegensatz kann sie auf einfache
Weise bei komplexen Befehlssatz-Computern (CISC) angewandt werden,
in welchen, neben anderen Unterschieden, Befehle bereit gestellt
werden, welche es der ALU gestatten, an Daten zu operieren, die
direkt von einem adressierten Speicherort empfangen wurden, ohne
dass zunächst
ein Laden der Daten in ein Arbeitsregister durchgeführt wird.
-
Die Operanden-Abruflogik 115 und
der Rück-Ordnungspuffer 119 stellen
zusammen die Außer-Betrieb-Ausführung bereit.
Die Operanden-Abruflogik 115 ist verantwortlich für das Assemblieren
von Quelloperanden, welche zu den jeweiligen Eingaben der ALU 117 angewandt
werden müssen.
Um diese Aufgabe auszuführen,
weist die Operanden-Abruflogik 115 eine Anzahl van Reservierungsstationen
auf zum Speihern von entweder den Quelldaten selbst oder einer Sequenznummer
(zugeordnet zu dem bis jetzt nicht ausgeführten Befehl), welche anzeigt,
dass die Quelldaten noch nicht in das Arbeitsregister 113 geladen
worden sind.
-
Der Rück-Ordnungspuffer 119 ist
verantwortlich für
das Assemblieren von Zieldaten und für das Verfolgen, ob oder ob
nicht ein gegebener Befehl ausgeführt worden ist, sowie Abhängigkeiten
zwischen Befehlen zu verfolgen. Wenn von daher ein Befehl empfangen
wird, wird ihm eine Kennzeichnungsnummer zugewiesen und in den Rück-Ordnungspuffer 119 gesetzt.
Sämtliche
zuvor in dem Rück-Ordnungspuffer 119 gespeicherten
Befehle werden dann überprüft, um zu
ermitteln, ob irgendeine der Quellen des neuen Befehls mit den Zielorten
von irgendeinem anderen der vorherigen Befehle übereinstimmt. Wenn es dort
eine Übereinstimmung
gibt, dann liegt dort eine Abhängigkeit
vor, welche den neuen Befehl daran hindert, sofort ausgeführt zu werden
(d. h., der neue Befehl erfordert einen Quelloperanden, der noch
nicht mittels eines früheren
Befehls erzeugt worden ist). Daraus resultiert, dass die Sequenznummer
des neuen Befehls in die Operanden-Abruflogik 115 gesetzt
wird anstelle der Quelldaten selbst.
-
In dieser Ausführungsform weist der Rüch-Ordnungspuffer 119 einen
Speicherplatz für
die Zieldaten selbst auf. Wenn demzufolge die Zieldaten zur Verfügung stehen,
werden sie in den Rück-Ordnungspuffer 119 geladen
und ein zugehörige
Statuskennzeichen (Flag) wird gesetzt, um anzuzeigen, dass die Daten
gültig sind.
Um die Befehlsausführung
zu beschleunigen, wenn die Zieldaten ebenso die Quelldaten einer
nachfolgenden Befehl sind, können
die Zieldaten direkt von dem Rück-Ordnungspuffer 119 zu
der geeigneten Reservierungsstation in derOperanden-Abruflogik 115 weitergeleitet
werden, eher dass erforderlich ist, dass die Daten zunächst in
das Arbeitsregister geschrieben und die Daten dann von dem Arbeitsregister 113 zu
der Operanden-Abruflogik 115 bewegt werden müssen. Um
die Befehlsausführung
ferner zu beschleunigen, weist die exemplarische CPU des weiteren
einen
-
Pfad von der Ausgabe der ALU 117 zu
der Eingabe der Operanden-Abruflogik 115 auf,
um es neu erzeugten Quelldaten zu gestatten, früher geladen zu werden.
-
Die Tatsache, dass erzeugte Daten
in den Rück-Ordnungspuffer 119 gespeichert
wurden, ist transparent für
das Ausführungsprogramm,
welches lediglich mit der Speicherung von Ergebnissen in eines der
Arbeitsregister 1132 oder in das Daten-Cache 105 (oder
Hauptspeicher 107) in Beziehung steht. Demzufolge müssen die
Daten eventuell von dem Rück-Ordnungspuffer 119 zu
dem mittels des zugehörigen
Befehls angezeigten Ziel bewegt werden. Der Vorgang der Bewegung
von erzeugten Daten von dem Rück-Ordnungspuffer 119 zu
dem geeigneten Ziel wird „Einspeicherung", „Erneuerung"
oder „Rückschreiben"
der Daten genannt. Die Architektur der exemplarischen CPU 101 macht
sich die Strategie der Einspeicherung erzeugter Daten nur zu eigen,
nachdem sämtliche,
zu früheren
Befehlen zugehörige
Daten eingespeichert wurden.
-
Ungeachtet der Implikation der Fähigkeit
der Außer-Betrieb-Ausführung, bürgt das
Auftreten eines Daten-Cache-Fehltreffers noch einen allgemeinen
Nachteil auf, welcher die effektive Ausführungsgeschwindigkeit der CPU 101 herabsetzt.
Um von daher ferner die effektive Ausführungsgeschwindigkeit der CPU 101 zu steigern,
verwendet die Daten-Cache-Steuerung 109 zusätzlich die
nachfolgend beschriebenen erfindungsgemäßen Daten-Auswechslungstechniken,
wenn auch immer ein Cache-Fehltreffer
auftritt. Eher als auf die Fokussierung auf das Erzielen eines hohen
Trefferverhältnis,
basiert die erfindungsgemäße Cache-Auswechslungspolitik
vielmehr auf eine Herabsetzung des Nachteils der Ausführungsgeschwindigkeit,
welcher resultiert, wenn Daten-Fehltreffer auftreten.
-
In einem Aspekt der Erfindung wird
diese Aufgabe durch das Erkennen gelöst, dass Daten als eine der drei
Kategorien klassifiziert werden können:
-
Typ-1 Daten können reine Information sein,
die einfach zu einer Adresse zurückgeschrieben
werden, ohne dass sie als eine Eingabevariable zur Berechnung von
irgendeinem anderen Datenelement verwendet werden. Ein Beispiel
eines Typ-1 Datenelements sind Daten, die vom Speicher als Teil
einer Herausgeberkopie und einer Paste- bzw. Einfügungsoperation
erhalten werden. Ein weiteres Beispiel eines Typ-1 Datenelements ist
ein Parameter, der zu einer in C geschriebenen Prozedur zugehört, wobei
keine Pointer bzw. Datenzeiger zu den Variablen verwendet werden.
In solch einem Fall wird das Aufrufen der Prozedur bewirken, dass
die Variable zunächst
zu dem Datenstapel bzw. Stack und dann zu einer lokalen Variablen
mit den gleichen Inhalten kopiert wird.
-
Typ-2 Daten können Informationsdaten sein.
Diese Daten werden als eine Eingabevariable zur Berechnung in einer
bestimmten Anzahl von Befehlen verwendet, bevor sie zurück zu einer
Adresse geschrieben werden.
-
Typ-3 Daten können Steuerungsdaten sein.
Steuerungsdaten ermitteln entweder direkt oder indirekt die Operation
eines bedingten Sprungbefehls. (Steuerungsdaten operieren indirekt,
weenn sie als eine Eingabevariable in irgendeiner Anzahl von Berechnungsbefehlen
zur Ermittlung eines Ergebnisdatenelements verwendet werden, welches
dann als Prädikat
zur Ermittlung der Operation eines bedingten Sprungbefehls verwendet
wird.)
-
In dem Ereignis eines Cache-Fehltreffers
resultieren die Typ-1 Daten in nahezu keiner Verschlechterung der
Ausführungsgeschwindigkeit
so lange die CPU 101 mit Hardware versehen ist, die eine
Außer-Betrieb-Ausführung gestattet.
Zu diesem Zweck sollten die Warteschleife bzw. Warteschlange zum
Halten bevorstehender Befehle lang genug sein, um die Ausführungseinheiten
in der CPU 101 zu halten, die beschäftigt ist, während fehlende
Daten abgefragt werden.
-
Es besteht eine gewaltige Verschlechterung
der Ausführungsgeschwindigkeit,
die von einem Cache-Fehltreffer im Zusammenhang mit Typ-2 Daten
resultiert, und die Ausdehnung dieser Verschlechterung ist eine
Funktion davon, wie viele Befehle entweder direkt oder indirekt
von den fehlenden Daten abhängen.
(Indirekte Abhängigkeit
tritt auf, wenn ein Befehl als eine Eingabe nicht die fehlenden
Daten selbst sondern vielmehr das Ergebnis einer Berechnung, die
eine Funktion der fehlenden Daten ist, erfordert.)
-
Theoretisch ist es möglich eine
Außer-Betrieb-Ausführungsstrategie
zu verwenden, wenn ein Cache-Fehltreffer Typ-2 Daten einschließt. In der
Praxis ist jedoch die Auslegung einer Warteschlange, die lang genug
ist, um bevorstehende Befehle und Daten zu halten, problematisch,
da die Anzahl der abhängigen
Befehle, die bevorstehend verbleiben müssen, sehr groß sein kann.
-
Das größte Problem bei der Ausführung entsteht
in Bezug auf Cache-Fehltreffer, die Typ-3 Daten einschließen. Wenn
ein bedingter Sprungbefehl nicht berechnet werden kann, dann weiß die CPU 101 nicht,
welche Befehle abzufragen sind. Im schlimmsten Fall steht der Befehl,
der gegenwärtig
benötigt
wird, nicht in dem Befehls-Cache 103 zur Verfügung. Daraus
resultiert,
dass die CPU 101 während
der Abfrage des Befehls zum Stillstand kommt, wodurch die effektive
Ausführungsgeschwindigkeit
ernstlich verletzt wird.
-
In Übereinstimmung mit einem Aspekt
der Erfindung ist die Cache-Auswechslungspolitik so ausgelegt, um
zunächst
die Anwesendheit der Typ-3 Datenelemente in dem Daten-Cache 105 zu
maximieren. In einem anderen Aspekt der Erfindung gibt die Cahe-Auswechslungspolitik
Typ-2 Datenelementen in dem Daten-Cache 105 Priorität über Typ-1
Datenelementen.
-
Eine Cache-Auswechslungspriorität von einem
Datenelement wird bereitgesellt durch das Zuordnen dieses Datenelements
einem Prioritätswert.
Beispielsweise können
Prioritätswerte
derart definiert sein, dass je höher
der Wert ist, desto größer der
Nachteil des Cache-Fehltreffers ist. Selbstverständlich kann man mit alternativen
Definitionen herkommen, die dennoch mit den hier gelehrten erfindungsgemäßen Prinzipien
in Zusammenhang stehen, wie etwa, indem man niedrigere Prioritätswerte
einen größeren Nachteil
des Cache-Fehltreffers anzeigen lässt.
-
Eine exemplarische Ausführungsform
dieser Aspekte der Erfindung werden nun unter Bezugnahme auf das
in 2 gezeigte Ablaufdiagramm
beschrieben. Wann auch immer ein Cache-Fehltreffer auftritt, wird das
fehlende Datenelement von dem Hauptspeicher 107 abgefragt
und in dem Daten-Cache 105 gespeichert (Schritt 201).
Als nächstes
wird eine anfänglicher
Prioritätswert
ermittelt als eine Funktion des Nachteils, der resultieren würde, wenn
dieses Datenelement nicht in dem Daten-Cache 105 zu der
Zeit vorhanden wäre, wann
ein Versuch gemacht wird, auf dieses zuzugreifen (Schritt 203).
Der Prioritätswert
ist in bevorzugter Weise eine Funktion des gegenwärtigen Status
der Warteschlangen und anderer Hardwareressourcen in dem Computer.
Der angepasste Wert wird dann dem Datenelement zugeordnet (Schritt 205).
-
Die Bestimmung eines anfänglichen
Prioritätswerts
(Schritt
203) wird nun detaillierter beschrieben. Der Prioritätswert eines
Datenelements wird in bevorzugter Weise ermittelt, wenn ein Zugriffsversuch
auf dieses Datenelement in einem Cache-Fehltreffer resultiert. Wenn ein Cache-Fehltreffer
auftritt, beginnt die Außer-Betrieb-Ausführung der
nachfolgenden Befehle. Wenn Befehle darauf stoßen, dass die Anwesendheit
eines fehlenden Datenelements erforderlich ist, dann werden solche
Befehle in einer Warteschlange gespeichert bis sie ausgeführt werden
können.
Beispielsweise sei das folgende Programmsegment
betrachtet:
Lade
r1, #1; | (r1:
= „Adresse
1") |
Hinzufügen r2,
r1, r3; | (r2:
= rl + r3) |
Hinzufügen r4,
r2, r5; | (r4:
= r2 + r5) |
-
In dem obigen Beispiel ist nicht
nur dies anfängliche
Lade-Befehl abhängig von
der Anwesendheit des Datenelements bei der Adresse 1 in
dem Daten-Cache 105 sondern auch die beiden anschließenden Hinzufüg-Befehle.
Dieses liegt daran, weil die erste Hinzufüg-Befehl erfordert, dass r1
den entsprechenden Wert in sich hat, was lediglich dann passiert,
nachdem die anfängliche
Lade-Befehl ausgeführt
worden ist. Auf ähnliche
Weise kann die zweite Hinzufüg-Befehl
nicht ausgeführt
werden bis die Inhalte von r2 ermittelt wurden. Demzufolge werden
in dem Fall eines Cache-Fehltreffers im Zusammenhang mit der „Adresse
1" in dem Daten-Cache 105 alle drei der obigen Befehle
in einer Warteschlange gespeichert bis die fehlenden Daten zur Verfügung stehen.
-
Die Warteschlange, in welcher Befehle
gespeichert sind, wird verwendet, um den Prioritätswert der fehlenden Daten
zu ermitteln. Wenn abhängige
Sprungbefehle bestehen, dann ist der Prioritätswert sehr hoch. Wenn dort
Datenabhängigkeiten
wie in dem obigen Beispiel bestehen, dann kann der Prioritätswert auf
einen mittleren Level gesetzt werden. Wenn keine Abhängigkeiten
bestehen, dann ist der Prioritätswert
der fehlenden Daten gering. Die Prioritätswerte können von daher jeweils auf
3, 2 und 1 gesetzt werden.
-
Ein einfacher Ansatz zur Ermittlung
eines Prioritätswerts
liegt darin, anzunehmen, dass alle Ausführungsbefehle direkt oder indirekt
abhängig
von den fehlenden Daten sind. Der Wert in diesem Fall ist V = N1 × V1 + N2 × V2, wobei
N1 die Anzahl der Nicht-Sprungbefehlsanweisungen ist, die noch nicht
ausgeführt
worden sind, N2 die Anzahl der bedingten Sprungbefehle ist, die
noch nicht ausgeführt
worden sind, und V2 der Nachteilswert ist, der zu bedingien Sprungbefehlsanweisungen
zugeordnet ist.
-
Es wird vermerkt, dass der obig beschriebene
einfache Ansatz in einer Überlagerung
von hohen Prioritätswerten
resultieren kann, wenn einige oder alle der nichtausgeführten Befehle
lediglich von einem Datenelement abhängig sind, das anders ist als
das eine, für
welches der Nachteilswert berechnet wird. Wenn auch zwei Datenabfragen
in einem Code-Segment vorliegen, wobei jedes in einem Cache-Fehltreffer
resultiert, wird der einfache Ansatz der Prioritätswertberechnung in hohen Prioritätswerten
resultieren, die zu jedem zugeteilt werden, selbst wenn das erste
Datenelement in Wirklichkeit einen niedrigen Prioritätswert und
das zweite Datenelement einen hohen Prioritätswert haben sollten.
-
Im Hinblick auf die Möglichkeit
der Überbestimmung
der Prioritätswerte
unter einigen Umständen,
mag man eine anspruchsvollere Analyse der Inhalte der Befehlspuffer
in dem Rück-Ordnungspuffer
durchführen, um
lediglich diese nichtausgeführten
Befehle zu zählen,
die gegenwärtig
eine Abhängigkeit
auf das betreffende Datenelement aufweisen. Jedoch macht es die
allgemeine Zugehörigkeit
mit dieser Analyse weniger attraktiv als der obig beschrieben einfache
Ansatz.
-
Das Augenmerk sei nun auf ein vollständigeres
Beispiel einer Prioritätswertberechnung
gerichtet, wobei angenommen wird, dass das folgende Code-Segment
durch die CPU
101 ausgeführt werden muß:
Befehl | Kommentar |
Lade
r0, #5; | (r0
:= „Adresse
5") |
Sprung_auf_gleich
r0, r1; | (Sprung
wennr0 = r1) |
Hinzufügen r6,
r3, r0; | (r6
:= r3 + r0) |
Hinzufügen r7,
r3, r2; | (r7
:= r3 +r2) |
Hinzufügen r8,
r7, 9r; | (r8
:=r7 + r9) |
Hinzufügen r9,
r10, r11; | (r9
:= r10 + r11) |
wobei r
x das Arbeitsregister
x darstellt.
-
Nachdem diese Befehle abgefragt worden
sind, mögen
die Inhalte des Rück-Ordnungspuffers
119 wie in
Tabelle 1 ausschauen: Tabelle
1
-
Es sei angenommen, dass das „Lade r0,
#5" in einem Cache-Fehltreffer
resultierte, wodurch der Bedarf besteht, dass die gewünschten
Daten von dem Hauptspeicher 107 abgefragt werden. Dann,
wenn die Daten von der Speicheradresse 5 ankommen, treten
ein bedingter Sprung (bei der Position 1) und eine Hinzufügung (bei
der Position 2) auf, welche abhängig von den neu ankommenden
Daten sind. Das an den Positionen 3, 4 und 5 angeordnete „Daten
gültig
= 1" zeigt an, dass diese Hinzufüg-Befehle ausgeführt worden
sind und nicht von irgendwelchen anderen Befehlen abhängig sind.
Wenn der Nachteil für
bedingte Sprünge 5 (d.
h. V2 = 5) und für
andere Befehle 1 ist (d. h. V1 = 1), dann wird der gesamte
Prioritätswert,
der den Daten der Adresse 5 zugeteilt wird, 1 × 5 + 1 × 1 = 6
sein.
-
Es sei darauf hingewiesen, dass in
diesem Fall sämtliche
Befehle nach dem bedingten Sprungbefehl spekulativ abgefragt und
ausgeführt
werden, basierend auf dem erwarteten Sprungergebnis, wobei der Sprung noch
nicht durchgeführt
worden ist. Wenn das Sprungergebnis unerwartet ist, dann müssen sämtliche
Befehle nach dem bedingten Sprung ausgelöscht und der richtige Pfad
abgefragt und ausgsführt
werden.
-
Es wurden Techniken zur Ermittlung
eines Prioritätswerts
für jeden
Cache-Dateneintrag beschrieben. Wie in 2 angezeigt, ist es notwendig, den Prioritätswert dem
Cacheeintrag zuzuordnen. Dies kann auf irgendeine von verschiedenen
Weisen geschehen. Eine dieser wird nun unter Bezugnahme auf 3 beschrieben, die eine
exemplarische Ausführungsform
eines Daten-Cache 105 für
die Verwendung mit der obig beschriebenen erfindungsgemäßen Technik
darstellt. Das Daten-Cache 105 ist in der Lage, N Datenelemente bei
Adressen, die von 0 bis N-1 bezeichnet sind, zu speichern. Bei einer
exemplarischen Adresse, m, ist ein Datenelement 301 gespeichert.
Das Daten-Cache 105 ist derart ausgebildet, dass es in
jedem Speicherplatz ein Datenelement speichert, wobei ein entsprechender
Speicherplatz zur Speicherung eines zugehörigen Prioritätswerts
besteht. Von daher wird für
den exemplarischen Speicherplatz m das gespeicherte Datenelement 301 einem
gespeicherten Prioritätswert 303 zugeordnet.
Techniken zur Auslegung eines Cache-Speichers, welcher diese Fähigkeit
aufweist, sind aus dem Fachgebiet wohlbekannt und werden hier nicht
detaillierter beschrieben. Siehe hierzu beispielsweise John L. Hennes,
Computer Architecture, A Quantitative Approach, (1990), was hiermit
als Referenz hierin aufgenommen ist.
-
In einem anderen Aspekt der Erfindung
wird nun eine Strategie zur Auswechslung von Daten in einem Cache-Speicher
unter Bezugnahme auf das Ablaufdiagramm von 4 beschrieben. In dieser exemplarischen
Ausführungsform
sei angenommen, dass jeder Eintrag in einem Daten-Cache 105 einen
zugeordneten Prioritätswert,
wie obig beschrieben, aufweist.
-
-
Wenn ein Versuch unternommen wird,
einen Eintrag von dem Daien-Cache 105 zu lesen, wird eine Ermittlung
in Bezug darauf gemacht, ob das angeforderte Datenelement gegenwärtig in
dem Daten-Cache 105 gespeichert ist (Entscheidungsblock 401).
Wenn das Element gefunden wird („Nein" Pfad aus dem Entscheidungsblock 401 heraus),
dann wird das Element einfach von dem Daten-Cache 105 abgefragt
(Schritt 403), und die Verarbeitung fährt fort.
-
Wenn ein Cache-Fehltreffer auftritt
(„Ja"
Pfad aus dem Entscheidungsblock 401 heraus), dann ist es notwendig,
einen Eintrag aus dem Daten-Cache 105 zu entfernen, um
Platz für
das angeforderte Datenelement zu schaffen. Dies wird durch das Auffinden
eines Eintrages bewerkstelligt, welcher einen Prioritätswert aufweist,
der der niedrigste unter sämtlichen
in dem Daten-Cache 105 gespeicherten Prioritätswerten 303 ist (Schritt 405).
In dem Fall, dass mehr als ein Eintrag einen niedrigsten Prioritätswert aufweist,
kann irgendeine Technik zum Entscheiden verwendet werden, welcher
von dem Daten-Cache 105 zu entfernen ist: Zufalls-Auswahl,
die Verwendung eines Zeigers bzw. Pointers oder irgendeine andere
Technik. Dann wird das angeforderte (d. h. „fehlende") Datenelement von
dem Hauptspeicher 107 abgefragt (Schritt 407),
und das abgefragte Datenelement wird in dem Daten-Cache 105 bei
der Adresse gespeichert, die in Schritt 405 identifiziert wurde. Durch
das Entfernen eines Eintrages mit einem niedrigsten Prioritätswert vermindert
die erfindungsgemäße Cache-Auswechslungsstrategie
die Wahrscheinlichkeit, dass ein nachfolgender, mit dem entfernten
Eintrag in Zusammenhang stehender Cache-Fehltreffer auftreten wird
(d. h., der Prioritätswert
war niedrig, weil auf das entfernte Datenelement seit geraumer Zeit
kein Zugriff esfolgte), oder alternativ macht sie es gering wahrscheinlich, dass
ein nachfolgender, mit dem entfernten Eintrag in Zusammenhang stehender
Cache-Fehltreffer in irgendeiner nachfolgenden Verschlechterung
des Ausführungsgeschwindigkeit
resultieren wird (d. h., weil eine Außer-Betrieb-Ausführung von
nachfolgenden Befehlen während
des Wartens auf die Abfrage des angeforderten Datenelements von
dem Hauptspeicher 107 fortgesetzt werden kann).
-
Die obig beschriebene Cache-Daten-Auswechslungsstrategie,
einschließlich
der Ermittlung der Prioritätswerte
für jeden
Cacheeintrag, steigert die Wahrscheinlichkeit, dass die Daten in
dem Cache von der Art sein werden, die eine nachfolgende Verschlechterung
der Ausführungsgeschwirdigkeit
verursachen würden, wenn
sie von dem Hauptspeicher 107 abgefragt werden müssten. Das
bedeutet, wenn relative Prioritätswert 1, 2 und 3 für jeweils
Typ-1, -2 und -3 Daten sind, dann ist es wahrscheinlicher , dass
Typ-3 Daten in dem Cache sein werden, da die Typ-1 und Typ-2 Daten
mit einer höheren
Wahrscheinlichkeit entfernt werden. Jedoch schafft die obig beschriebene
Strategie die Möglichkeit,
dass ein Datenelement auf unbestimmte Zeit in dem Daten-Cache bestehen
bleibt, selbst wenn dieses Datenelement niemals wieder von der CPU 101 verwendet wird.
Dies liegt daran, weil, so lange ein Cacheeintrag mit niedriger
Priorität
besteht, solch ein Datenelement niemals in dem Daten-Cache 105 entfernt
wird. Die Anwesendheit von solch einem Cache-Eintrag (d. h., eines, das
niemals entfernt wird, selbst obwohl es niemals mehr als ein Quelloperand
benötigt
wird) ist unerwünscht, da
es das Cache-Treffer/Fehltreffer-Verhältnis herabsetzt.
-
Dieses Problem wird in einem noch
anderen Aspekt der Erfindung behandelt, indem gestattet wird, dass
der Prioritätswert
ferner eine Funktion davon ist, wie viel Zeit verstrichen ist, seit
auf das Datenelement zuletzt zugegriffen wurde. Auf diese Weise
kann ebenso das Prinzip der temporären Lokalität verwendet werden, um das
Treffer-Verhältnis
des Caches zu steigern, während
noch immer eine Präferenz
auf Datentypen gegeben wird, welche höhere Verschlechterung der Ausführungsgeschwindigkeit
aufweisen. In einer exemplarischen Ausführungsform wird der Prioritätswert 303 eines
jeden Cacheeintrages alle T Sekunden um einen bestimmten Betrag
vermindert. Daraus resultiert, dass selbst solche Cacheeinträge, die
anfänglich
hohe Prioritätswerte
aufweisen, eventuell Prioritätswerte
haben werden, die niedrig genug sind, um sie zu einem Bewerber für die Entfernung
zu machen, wenn ein neuer Cacheeintrag gespeichert werden muß.
-
In noch einem anderen Aspekt der
Erfindung wird die Strategie, bei welcher Prioritätswerte
periodisch herabgesetzt werden, ergänzt durch eine Re-Initialisierung
oder alternativ durch ein Anwachsen des Prioritätswerts 303, wann
auch immer auf den Cacheeintrag zugegriffen wird. In einer Ausführungsform
kann der Prioritätswert 303 mittels
des zugehörigen
Verschlechterungswert gesteigert werden, wann auch immer auf den Cacheeintrag
zugegriffen wird. Auf diese Weise berücksichtigt der Prioritätswert nicht
nur die Folgen bzw. Kosten eines Cache-Fehltreffers sondern auch
die Frequenz bzw. Häufigkeit,
mit welcher auf den Cacheeintrag zugegriffen wird. Es sei beispielsweise
angenommen, dass ein erstes Datenelement lediglich einen Taktgeberzyklus
der CPU-Verzögerungs-
bzw. Stillstandszeit in dem Fall eines Cache-Fehltreffers kostet,
und dass auf dieses Datenelement zehnmal häufiger zugegriffen wird, als
auf ein zweites Datenelement, welches zehn Tektgeberzyklen der CPU-Verzögerungs-
bzw. Stillstandszeit in dem Fall eines Cache-Fehltreffers kostet.
In diesem Fall ist der Wert des ersten Datenelements gleich dem
des zweiten Dalenelements. Durch das Re-Initialisieren oder das
Anwachsen des Prioritätswerts
zu jeder Zeit, wenn auf ein Datenelement zugegriffen wird, berücksichtigt
die Auswechslungsstrategie den Effekt des häufigen Zugriffs.
-
Wenn die Strategie verwendet wird,
in welcher der Prioritätswert 303 mit
jedem Zugriff auf den Cacheeintrag reinitialisiert wird, ist es
notwendig, für
jeden Cacheeintrag nicht nur den gegenwärtigen Prioritätswert 303 sondern
auch den anfänglichen
Prioritätswert
zu verfolgen. Dies kann durch eine wie in 5 gezeigte Organisation des Daten-Caches 105' bewerkstelligt
werden. Das Daten-Cache 105' ist im wesentlichen identische
mit dem in 3 gezeigten
Daten-Cache 105 mit
Ausnahme der Hinzufügung
eines Anfangs-Prioritätswert-Feldes 501,
das zu jedem Cacheeintrag zugeordnet ist.
-
Die Diskussion wird nun auf die Ermittlung
von relativen Nachteilswerten (d. h., V1 und V2) für verschiedene
Arten von Befehle gerichtet. Es sei angenommen, dass ein Cache-Fehltreffer, der
sich von einem Versuch, ein erstes Datenelement abzufragen, ergibt,
in zehn Taktgeberzyklen der CPU-Verzögerungs- bzw. Stillstandszeit
resultiert, und dass ein Cache-Fehltreffer, der sich von einem Versuch,
ein zweites Datenelement abzufragen, ergibt, aufgrund der Möglichkeit
der Außer-Betrieb-Ausführung, in
lediglich einem Taktgeberzyklus der CPU-Verzögerungs- bzw. Stillstandszeit
resultiert. Es folgt, dass, wenn eine Wahl zwischen den beiden gegeben
wird, eher das erste Datenelement als das zweite Datenelement in
dem Daten-Cache beibehalten werden sollte, um einen umfangreichen
bzw. teuren Cache-Fehltreffer zu verhindern. In diesem Sinne ist
das erste Datenelement „wertvoller"
als das zweite Datenelement.
-
Es sei ein drittes Datenelement betrachtet,
welches, aufgrund einer sehr effektiven Außer-Betrieb-Ausführung, gar
keine CPU-Verzögerungs-
bzw. Stillstandszeit hervorruft, wenn ein Cache-Fehltreffer auftritt. Solch ein Datenelement
braucht überhaupt
nicht in dem Daten-Cache gespeichert zu werden; das bedeutet, das
dritte Datenelement weist, falls überhaupt, einen geringen Wert
auf.
-
Im Hinblick auf das Obige, kann gesagt
werden, dass, je wertvoller ein Datenelement ist, desto länger sollte
es in dem Daten-Cache 105 beibehalten werden. Eine gute
Daumenregel liegt darin, ein Datenelement in Proportion zu seinem
Wert beizubehalten. Beispielsweise sollte das erste Datenelement,
welches zehn Taktgeberzyklen der CPU-Verzögerungs- bzw. Stillstandszeit
in dem Fall eines Cache-Fehltreffers kostet, in dem Daten-Cache
zehnmal länger
beibehalten werden als das zweite Datenelement, welches lediglich
einen Taktgeberzyklus der CPU-Verzögerungs- bzw. Stillstandszeit
kostet (angenommen, dass auf kein Datenelement während dieser Zeitperiode zugegriffen
wird). Dies kann auf einfache Weise bewerkstelligt werden durch
das Setzen des Nachteilswerts des ersten Datenelements gleich 10
(d. h., V1 = 10), durch das Setzen des Nachteilswerts des zweiten
Datenelements gleich 1 (d. h., V2 = 1), durch das Ermitteln eines
Prioritätswerts
für jedes,
wie obig beschrieben, und dann durch Anpassan (z. B. Verminderung)
des Betrages von jedem Prioritätswert
bei einer bestimmten Frequenz, während
ebenso durch Neuladens des Wertes zu jeder Zeit, wenn auf das Datenelement
zugegriffen wird.
-
Bei der obigen Diskussion der Ermittlung
der Nachteilswerte (z. B. V1, V2) wird eine Verfügbarkeit der Messungen oder
Abschätzungen
der CPU-Verzögerungs-
bzw. Stillstandszeiten für verschiedene
Arten von Befehle vorausgesetzt. In der veranschaulichen Ausführungsform
sind die Nachteilswerte, die zu verschiedenen Datentypen zugeordnet
sind, für
jede Ermittlung eines Anfangs-Prioritätswerts 501 festgesetzt.
Wenn Typ-1 oder Typ-2 Datenelemente betrachtet werden, ist es eine
relativ einfache Sache, mit einem Wert aufzukommen, der eine durchschnittliche
CPU-Verzögerungs-
bzw. Stillstandszeit darstellt, weil die Ausführungsgeschwindigkeit dieser
Arten von Befehle (z. B. Laden, Hinzufügen, logisches UND) leicht
zu ennitteln sind.
-
Jedoch in Bezug auf Typ-3 Datenelemente
wird die Aufgabe schwieriger, da die Ausführungsgeschwindigkeit eine
Funktion davon ist, ob oder ob nicht der Sprungbefehl genommen wurde,
und ob oder ob nicht zuvor abgefragte Befehle (basierend auf eine
Vorhersage, ob oder ob nicht der Sprungbefehl genommen werden würde) von
dem Befehls-Cache 103 entfernt und neue Befehle abgefragt
und ausgeführt
werden müssen.
Ein Fachmann wird verstehen, dass ein durchschnittlicher Nachteilswert
für Typ-3
Daten basierend auf der Kenntnis der Prozessorgeschwindigkeit, der
Zugriffszeit auf den Befehlsspeicher, des Cache-Treffer-Verhältnisses
und der relativen Genauigkeit des Sprungbefehl-Vorhersage-Algorithmus
(z. B. 90% richtige Vorhersagen) ermittelt werden kann.
-
In einer alternativen Ausführungsform
können
die Nachteilswerte, die zu verschiedenen Datentypen zugeordnet sind,
für jedes
individuelle Datenelement dynamisch ermittelt werden. Bezüglich Typ-1
und Typ-2 Datenelemente werden die dynamisch ermittelten Werte höchstwahrscheinlich
konstant (oder nahezu konstant) sein, da sich die jeweiligen Ausführungsgeschwindigkeiten
dieser Arten von Befehle (z. B. Laden, hinzufügen, logisches UND) im allgemeinen
nicht von Zeit zu Zeit ändern.
(In manchen Architekturen kann die Ausführungsgeschwindigkeit von Befehlen,
wie etwa Multiplikation und Division, etwas abhängig von Daten sein.)
-
In dieser alternativen Ausführungsform
können
die zu Typ-3 Daten zugeordneten Nachteilswerte dynamisch ermittelt
werden, indem es jeder bevorstehenden bedingten Sprungbefehlsanweisung
gestattet ist, auszuführen
nachdem die fehlenden Daten eintreffen, und dann durch aktuelles
Messen, um zu sehen, welche Verzögerungszeit
herausfällt
(z. B. sehen, ob vorabgefragte Befehle aufgrund einer falschen Sprungbefehlvorhersage
herausgelöscht
werden müssen,
und wenn dies so ist, wie viele Befehle herausgelöscht werden). Selbstverständlich ist
der allgemeine Zusammenhang dieser dynamischen Ermittlung von jedem
Nachteilswert wesentlich größer als
der zu der Verwendung einer festen Abschätzung des Nachteilswertes zugehörige. Auch verzögert die
Ermittlung des Nachteilswerts dynamisch eine entgültige Ermittlung
eines Anfangs-Prioritätswerts 501.
Diese Faktoren sollten bei der Entscheidung betrachtet werden, welcher
Ansatz (d. h., statische gegenüber
dynamische Ermittlung des Nachteilswerts) für ein bestimmtes System verwendet
werden sollte.
-
Eine Strategie zur Aufrechterhaltung
von Prioritätswerten
in Übereinstimmung
mit den obig beschriebenen Prinzipien wird nun unter Bezugnahme
auf das Ablaufdiagramm von 6 beschrieben.
Es sei angenommen, dass ein Datenelement (wie etwa das Datenelement 301)
und sein entsprechender, gegenwärtiger Prioritätswert 303 und
Anfangs-Prioritätswert 501 in
einem Daten-Cache 105' gespeichert sind. In diesem Beispiel
sei ferner angenommen, dass höhere
Prioritätswerte
eine höhere
Priorität
zur Beibehaltung des Datenelements in dem Daten-Cache 105' anzeigen.
-
Die exemplarische Strategie zur Aufrechterhaltung
von Prioritätswerten
verwendet das Prinzip der temporären
Lokalität,
um ein hohes Trefferverhältnis
in dem Daten-Cache 105' zu erhalten. Wenn demgemäss ermittelt
wird, dass mehr als T Sekunden seit dem letzten Zugriff auf ein
Datenelement vergangen sind („Ja" Pfad
aus dem Entscheidungsblock 601 heraus), dann wird der Prioritätswert,
der dem Datenelement zugeordnet ist, um einen bestimmten Betrag
vermindert (Schritt 603). In einer bevorzugten Ausführungsform
ist der bestimmte Betrag ein kleinst möglicher Betrag, wie etwa ein
Betrag gleich eins.
-
Wenn ermittelt wird, dass auf das
Datenelement vor kurzem zugegriffen wurde („Ja" Pfad aus dem Entscheidungsblock 605 heraus),
dann wird sein zugeordneter Prioritätswert erhöht oder alternativ hierzu auf
den berechneten anfänglichen
Prioritätswert
gesetzt (Schritt 607). Der Grund hierfür ist, weil der jüngste Zugriff eine
höhere
Wahrscheinlichkeit anzeigt, dass auf dieses Datenelement in kürze wieder
zugegriffen wird. Demgemäss
wird die Erlhöhung
(oder die Re-Initialisierung)
des Prioritätswerts
helfen sicherzustellen, dass das Datenelement nicht entfernt sondern
stattdessen in dem Daten-Cache 105' kurzfristig beibehalten
wird. In einer bevorzugten Ausführungsform
wiest der Schritt 607 die Differenzierung zwischen Lesezugriffen
und Schreibzugriffen auf, so dass jeder Lesezugriff verursacht,
dass der Prioritätswert
um den anfänglich
berechneten Prioritätswert
(z. B. ein Betrag, der zwischen eins und etwa acht liegt) erhöht wird,
während
jeder Schreibzugriff verursacht, dass der Prioritätswert um
den kleinst möglichen
Wert (z. B. ein Betrag gleich eins) erhöht wird.
-
Die Beschreibung hat so weit vorausgesetzt,
dass das Daten-Cache 105 derart
gesteuert wird, dass jeder Cache-Fehltreffer lediglich bei einem
Datenelement verursazht wird, welches von dem Hauptspeicher 107 abgefragt
und in dem Daten-Cache 105 gespeichert wird. Es ist jedoch
typischer, dass Daten-Caches derart aufgebaut sind, dass jeder Cache-Fehltreffer
verursacht, dass eine Anzahl (z. B. 8, 16) von Datenelementen (welche
hierin als „Cacheeintrag"
bezeichnet werden) von dem Hauptspeicher 107 abgefragt
und in dem Daten-Cache 105 gespeichert werden. Der Cacheeintrag
weist gewöhnlich
nicht nur das „fehlende"
Datenelement (d. h. die Inhalte der Speicherortadresse des Hauptspeichers,
dessen Abwesendheit in dem Daten-Cache 105 den Cache-Fehltreffer
verursacht) sondern auch diese Datenelemente, deren Adressen. in
der Nähe des „fehlenden"
Datenelements liegen. Die vernunftmäßige Erklärung für diese Strategie liegt darin,
das Trefferverhältnis
des Daten-Caches im Vertrauen auf ein Prinzip, welches als „Ortsgebundenheit"
(oder „Gebundenheit
der Referenz") bekannt ist, zu verbessern. Dieses Prinzip, welches
auf Beobachtungen basiert, wie viele Programme ausgelegt bzw. gestaltet
sind, macht den Anspruch geltend, dass, wenn ein Speicherzugriff gegenwärtig Daten
von , sagen wir, der Speicherstelle x liest, dann eine erhöhte Wahrscheinlichkeit
besteht, dass ein nachfolgender Speicherzugriff versuchen wird,
Daten von einer Speicheradresse lesen wird, die in der Nähe der Speicherstelle
x liegt. Von daher ist es durch das Abfragen eines Cacheeintrages,
der nicht nur das Datenelement von der Speicherstelle x sondern
auch solche Datenelemente enthält,
die bei Speicherstellen in der Nähe
von x liegen, wahrscheinlicher, dass ein nachfolgender Versuch,
auf das Daten-Cache 105 zuzugreifen, in einem Caache-Treffer
resultieren wird.
-
In einer anderen Ausführungsform
werden die obig beschriebenen Prinzipien bei einem Daten-Cache angewandt,
dessen Daten-Cache-Steuerung 109 Cacheeinträge abfragt
(im Gegensatz zu einzelnen Datenelementen), wann auch immer ein
Cache-Fehltreffer
auftritt. Ein exemplarisches Daten-Cache 105'', welches für diesen
Zweck ausgelegt ist, ist in 7 gezeigt.
Der gegenwärtige
Prioritätswert 303 und
der anfängliche Prioritätswert 501 werden
ermittelt und auf die gleiche Weise, wie obig beschrieben, verwendet.
Der Unterschied zwischen dem Daten-Cache 105'' und den
zuvor beschriebenen Ausführungsformen
liegt in der Tatsache, dass jedes Paar von gegenwärtigen Prioritätswerten 303 und
anfänglichen
Prioritätswerten 501 eher
zu einem gesamten Cacheeintrag 701 zugeordnet ist, als
einzeln zu gerade einem Datenelement 301 zugeordnet zu
sein. Die Ermittlung des anfänglichen
Prioritätswerts 501 basiert
darauf, welches der Datenelemente 301 in dem Cacheeintrag 701 verursacht
hat, dass der Cache-Fehltreffer auftritt, wodurch veranlasst wird,
dass der Cacheeintrag 701 von dem Hauptspeicher 107 abgefragt
wird. Eine Annahme wird gemacht, dass andere Datenelemente 301 in
dem Cacheeintrag 701 von ähnlichem Datentyp sind, und
somit ähnliche
Prioritätswerte aufweisen
würden.
In einem anderen Aspekt dieser Ausführungsform kann, wann auch
immer ein Zugriff auf irgendeines der Datenelemente 301 in
dem Cacheeintrag 701 erfolgt, der Wert des zugeordneten
gegenwärtigen
Prioritätswert 303 angepasst
werden (z. B. reinitialisiert oder erhöht), wie es obig unter Bezugnahme
auf 6 beschrieben wurde.
In noch einer anderen Ausführungsform
der Erfindung kann der gegenwärtige
Prioritätswert 303 auf
einen Wert angepasst werden, der eine niedrigere Priorität anzeigt,
wenn auf keines der Datenelemente 301 in dem Cacheeintrag 701 ein
Zugriff während
irgendeiner bestimmten Zeitperiode erfolgte. In all anderer Hinsicht
sind die in dieser Ausführungsform
involvierten Prinzipien die gleichen wie die obig beschriebenen
und brauchen von daher nicht erneut beschrieben werden.
-
Die Erfindung wurde unter Bezugnahme
auf eine bestimmte Ausführungsform
beschrieben. Jedoch wird es einem Fachmann leicht verständlich,
dass es möglich
ist, die Erfindung in spezifischen Formen anders als die der obig
beschriebenen bevorzugten Ausführungsform
auszuführen.
Die bevorzugte Ausführungsform ist
bloß zur
Anschauung gedacht und sollte auf keinem Fall als einschränkend gesehen
werden. Der Umfang der Erfindung ist vielmehr in den beigefügten Patentansprüchen gegeben,
eher als in der vorausgehenden Beschreibung, und sämtliche
Abänderungen
und Äquivalente,
die in den Umfang der Patentansprüche fallen, sind beabsichtigt,
hierin einbezogen zu sein.