-
TECHNISCHES GEBIET
-
Die
vorliegende Beschreibung betrifft Software-Compiler und insbesondere
Verfahren und Vorrichtungen zur Feststellung der Schrittweite einer Software-Anwendung.
-
HINTERGRUND
-
Der
Abstand zwischen Prozessorgeschwindigkeit und Speichergeschwindigkeit
wird immer größer. Als
Folge davon wird die Computerleistung zunehmend von der Effektivität der Cache-Hierarchie bestimmt.
Die Prozessoren werden jedoch in der Regel oft durch Cache-Fehlgriffe
belastet.
-
Das
sogenannte Prefetchen ist eine bekannte und wirkungsvolle Technik
zum Verbessern der Effektivität
der Cache-Hierarchie. Eine Art davon, die Compiler nutzen, um die
Genauigkeit des Prefetchen zu verbessern, ist, Speicherzugriffsbefehle
(z.B. Laden. Speichern usw.) mit einer konstanten "Schrittweite" statistisch zu erfassen.
Zum Beispiel kann eine Ladeanweisung, die jedes sechzehnte Byte
lädt, leicht
mit einem Prefetch ausgeführt
werden, da der Compiler bereits vorab weiß, welche Bytes benötigt werden.
Viele Speicherzugriffbefehle mit einer konstanten Schrittweite können jedoch
wegen Zeiger-Fehlverweisen
und wegen indirekter Array-Bezugnahmen, die nicht vor der tatsächlichen
Laufzeit aufgelöst
werden, statistisch nicht erfaßt
werden.
-
Zur
Lösung
dieses Problems können
zu einer Software-Anwendung "Instrumentationscodes" (d.h. Testcodes)
hinzugefügt
werden, um direkt die tatsächlichen
Datenadressen zu überwachen,
auf die von einem oder von mehreren Speicherzugriffsbefehlen zugegriffen
wird. Ein Instrumentationscode belastet jedoch eine Software-Anwendung
sehr stark und bremst sie herunter (z.B. um einen Faktor zehn).
-
Das
US-Patent 6 134 643 beschreibt
ein Verfahren und eine Vorrichtung zur Voraussage von Datencache-Fehlgriffen
und zum Prefetchen bestimmter Daten. In der
US 6 134 643 bewirkt ein Datencache-Fehlgriff
ein Update in der Prediction Cache Table (PTC). Wenn eine neue Speicherleseanforderung ankommt,
die im Cache-Speicher einen Fehlgriff gelandet hat, wird die PTC
geprüft,
ob es für
die angeforderte Speicherseite einen PTC-Eintrag gibt. Das System
stellt dann den Status der PTC fest und reagiert auf eine von vier
Situationen. Wenn es für
eine Seite keinen PTC-Eintrag gibt, wird keine Schrittweite oder
kein Prefetch-Kandidat erzeugt. Wenn es für die Seite einen PTC-Eintrag
gibt, die angeforderte Zeile der Speicherseite jedoch nur der am
wenigsten weit zurückliegende
Slot (d.h. die zuletzt angeforderte Speicherzeile) ist, wird ebenfalls
keine Schrittweite oder kein Prefetch-Kandidat erzeugt. Wenn eine
Zeile einer Seite angefordert wird, für die es einen PTC-Eintrag
gibt, dann wird auf der Basis der Differenz zwischen den nächsten beiden
angeforderten Zeilen ein Prefetch-Kandidat erzeugt, vorausgesetzt, daß die angeforderte
Zeile nicht die zuletzt angeforderte Zeile dieser Seite ist, sondern
kürzlich
genug angefordert wurde, um im PTC-Eintrag zu erscheinen. An dieser
Stelle wird jedoch keine Schritt weite berechnet, sondern nur eine
einfache Differenz. Bei dem System wird daher nicht berücksichtigt,
daß nicht
bei jeder Ausführung
eines Befehls Datencache-Fehlgriffe auftreten. Wenn die angeforderte
Zeile nicht im PTC-Eintrag der Seite erscheint, wird die Differenz
zwischen der angeforderten Zeile und der vorher zuletzt angeforderten
Zeile und die Differenz zwischen den beiden vorherigen letzten Anforderungen verglichen.
Nur wenn die Differenzen übereinstimmen,
wird diese Differenz als Schrittweite betrachtet. Das System berücksichtigt
daher nicht die Tatsache, daß nicht
bei jeder Ausführung
eines Befehls Datencache-Fehlgriffe auftreten.
-
Das
US-Patent 6 134 710 beschreibt
ein Verfahren und ein System zur Minimierung von langen Cache-Fehlgriffen,
es beschreibt ein System, bei dem keine Schrittweite bestimmt wird,
sondern ein Objektcode an verschiedenen Punkten in ein Anwendungsprogramm
eingefügt
wird, um lange Cache-Fehlgriffe zu minimieren.
-
Ein
Aspekt der vorliegenden Erfindung umfaßt ein Verfahren zur Festlegung
der Schrittweite einer Software-Anwendung nach Patentanspruch 1.
-
Ein
anderer Aspekt der vorliegenden Erfindung umfaßt eine Vorrichtung zum Profilieren
einer Software-Anwendung nach Patentanspruch 8.
-
Ein
weiterer Aspekt der vorliegenden Erfindung umfaßt ein maschinenlesbares Medium
nach Patentanspruch 14.
-
KURZBESCHREIBUNG DER ZEICHNUNGEN
-
1 ist
eine Blockdarstellung eines beispielhaften Computersystems, das
die Umgebung des beschriebenen Systems zeigt.
-
2 ist
eine Blockdarstellung eines anderen beispielhaften Computersystems,
das die Umgebung des beschriebenen Systems zeigt.
-
3 zeigt
ein Beispiel eines Codeabschnitts in einem Ladebefehl.
-
4 zeigt
ein beispielhaftes Phasendiagramm.
-
5 ist
ein Flußdiagramm
für beispielhafte maschinenlesbare
Befehle, die von einer Vorrichtung ausgeführt werden können, um
ein beispielhaftes Verfahren zur Festlegung der Schrittweite einer
Software-Anwendung durchzuführen.
-
GENAUE BESCHREIBUNG
-
Im
allgemeinen wird bei dem beschriebenen System ein Hardware-Ausführungszähler verwendet, um
Befehladressen und Datenadressen zu erfassen, die zu den Speicherzugriffsbefehlen
gehören,
und der durch ein Ereignis wie einen Datencache-Fehlgriff ausgelöst wird.
Wenn die gleiche Befehlsadresse bei mehr als einer Datenadresse
auftaucht, wird die Differenz zwischen den beiden Datenadressen erfaßt. Wenn
für den
gleichen Befehl zwei oder mehr solcher Datenadressendifferenzen
erfaßt
werden, bestimmt das System in Verbindung mit dem Befehl eine Schrittweite,
die der größte gemeinsame
Teiler der beiden oder mehreren Differenzen ist. Diese Schrittweite
kann von einem Compiler dazu verwendet werden, den Datencache-Prefetch
zu optimieren. Die Belastung durch das Überwachen der Adressen von
Datencache-Fehlgriffen kann durch das Hin- und Herwech seln zwischen
einer Untersuchungsphase und einer Übersprungphase verringert werden.
Während
der Untersuchungsphase werden mehr Datencache-Fehlgriffe überwacht
als während
der Übersprungphase.
-
Die 1 zeigt
eine Blockdarstellung eines beispielhaften Computersystems 100.
Das Computersystem 100 kann ein PC oder eine andere Rechenvorrichtung
sein. In einem Beispiel umfaßt
das Computersystem 100 eine Hauptverarbeitungseinheit 102,
die von einer Stromversorgung 103 mit Strom versorgt wird.
Die Hauptverarbeitungseinheit 102 kann einen Prozessor 104 enthalten,
der durch einen Systemverbinder 106 elektrisch mit einer Hauptspeichervorrichtung 108 und
mit einer oder mehreren Interfaceschaltungen 110 verbunden
ist. In einem Beispiel ist der Systemverbinder 106 ein Adressen/Datenbus.
Der Fachmann sieht natürlich sofort,
daß auch
andere Verbinder als Busse verwendet werden können, um den Prozessor 104 mit
der Hauptspeichervorrichtung 108 zu verbinden. Zum Beispiel
können
eine oder mehrere eigens dafür
vorgesehene Leitungen und/oder eine Kreuzschiene dazu verwendet
werden, den Prozessor 104 mit der Hauptspeichervorrichtung 108 zu
verbinden.
-
Der
Prozessor 104 kann einer der bekannten Prozessoren sein,
etwa ein Prozessor aus der Intel Pentium®-Familie
von Mikroprozessoren, der Intel Itanium®-Familie
von Mikroprozessoren, der Intel Centrino®-Familie
von Mikroprozessoren und/oder der Intel XScale®-Familie
von Mikroprozessoren. Der Prozessor 104 kann irgendeine
Art der bekannten Cache-Speicher enthalten, etwa einen statischen
Direktzugriffsspeicher (SRAM). Die Hauptspeichervorrichtung 108 kann
einen dynamischen Direktzugriffsspeicher (DRAM) und/oder andere
Formen von Direktzugriffsspeichern enthalten. Zum Beispiel kann die
Hauptspeichervorrichtung 108 einen Direktzugriffsspeicher
mit doppelter Datenrate (DDRAM) enthalten. Die Hauptspeichervorrichtung 108 kann
auch nichtflüchtige
Speicher enthalten. In einem Beispiel speichert die Hauptspeichervorrichtung 108 ein
Softwareprogramm, das auf die bekannte Art vom Prozessor 104 ausgeführt wird.
-
Die
Interfaceschaltung(en) 110 kann/können mit jeder Art von bekanntem
Interfacestandard ausgeführt
werden, etwa als Ethernet-Interface und/oder USB-Interface. Für die Eingabe
von Daten und Befehlen in die Hauptverarbeitungseinheit 102 können mit
den Interfaceschaltungen 110 eine oder mehrere Eingabevorrichtungen 112 verbunden
sein. Die Eingabevorrichtungen 112 können eine Tastatur, eine Maus,
einen Touchscreen, ein Trackpad, einen Trackball, einen Isopoint
und/oder ein Spracherkennungssystem umfassen.
-
Über eine
oder mehrere der Interfaceschaltungen 110 können mit
der Hauptverarbeitungseinheit 102 auch ein oder mehrere
Displays, Drucker, Lautsprecher und/oder andere Ausgabevorrichtungen 114 verbunden
sein. Das Display 114 kann eine Bildröhre (CRT), eine Flüssigkristallanzeige
(LCD) oder eine andere Art von Display sein. Das Display 114 kann
eine visuelle Anzeige der Daten erzeugen, die beim Betrieb der Hauptverarbeitungseinheit 102 erzeugt
werden. Die visuelle Anzeige kann Aufforderungen für eine Eingabe
von einem menschlichen Operator, berechnete Werte, erfaßte Daten
usw. darstellen.
-
Das
Computersystem 100 kann auch ein oder mehrere Speichervorrichtungen 116 umfassen. Zum
Beispiel kann das Computersystem 100 eine oder mehrere
Festplatten, ein CD-Laufwerk, ein DVD-Laufwerk und/oder andere Computermedien-Ein/Ausgabevorrichtungen
(I/O-Vorrichtungen) umfassen.
-
Das
Computersystem 100 kann über eine Verbindung mit einem
Netzwerk 118 auch Daten mit anderen Einrichtungen austauschen.
Die Netzwerkverbindung kann jede beliebige Art von Netzwerkverbindung
sein, etwas eine Ethernet-Verbindung, eine DSL-Leitung, eine Telefonleitung, ein Koaxialkabel usw.
Das Netzwerk 118 kann irgendein Netzwerk sein, etwa das
Internet, ein Telefonnetzwerk, ein Kabelnetzwerk und/oder ein drahtloses
Netzwerk.
-
Die 2 zeigt
ein anderes beispielhaftes Computersystem 200. In diesem
Beispiel umfaßt
das Computersystem 200 einen Prozessor 202, ein
Cache 204, einen Hauptspeicher 206 mit einem Hardware-Ausführungszähler 208,
ein Schrittweiten-Bestimmungsmodul 210, ein Modul 212 für den größten gemeinsamen
Teiler und einen Phasenmanager 214, die wie gezeigt verbunden
sind.
-
Wieder
kann der Prozessor 202 irgendeiner der bekannten Prozessoren
sein, etwa ein Prozessor aus der Intel Pentium®-Familie
von Mikroprozessoren, der Intel Itanium®-Familie von Mikroprozessoren, der
Intel Centrino®-Familie
von Mikroprozessoren und/oder der Intel XScale®-Familie
von Mikroprozessoren. Der Prozessor 202 kann jede Art von
bekanntem Cache-Speicher 204 enthalten, etwa einen statischen
Direktzugriffsspeicher (SRAM). Die Hauptspeichervorrichtung 206 kann
einen dynamischen Direktzugriffsspeicher (DRAM) und/oder andere
Formen von Direktzugriffsspeichern enthalten. Zum Beispiel kann
die Hauptspeichervorrichtung 206 einen Direktzugriffsspeicher
mit doppelter Datenrate (DDRAM) enthalten. Die Hauptspeichervorrihtung 206 kann
auch nichtflüchtige
Speicher enthalten. In einem Beispiel speichert die Hauptspeichervorrichtung 206 ein
Softwareprogramm, das auf die bekannte Art vom Prozessor 202 ausgeführt wird.
-
Wenn
der Prozessor 202 auf eine Anweisung trifft, die einen
Datenwert aus dem Hauptspeicher 206 benötigt (z.B. ein Lade- oder Speicherbefehl), prüft das Computersystem 200 in
der Regel zuerst, ob der benötigte
Wert im Cache 204 gespeichert ist. Wenn der benötigte Wert
im Cache 204 gespeichert ist (d.h. ein Cache-Treffer vorliegt),
braucht der benötigte
Datenwert nicht aus dem Hauptspeicher 206 ausgelesen zu
werden. Wenn der Datenwert jedoch nicht im Cache 204 gespeichert
ist (d.h. ein Cache-Fehlgriff auftritt), muß der Datenwert aus dem Hauptspeicher 206 ausgelesen
werden.
-
Beim
vorliegenden Beispiel stellt der Hardware-Ausführungszähler 208 bei jedem
Auftreten eines Datencache-Fehlgriffs die Adresse des Befehls, der
den Datencache-Fehlgriff
bewirkt hat (z.B. eines Lade- oder Speicherbefehls), und die Adresse
des benötigten
Datenwerts fest. In der 3 ist ein Beispiel für einen
Codeabschnitt 300 mit einem Ladebefehl 302 gezeigt.
Bei dem gezeigten Beispiel ist der Ladebefehl 302 mit der
Befehlsadresse 304 "1005" verbunden. Gleichermaßen ist
der Ladebefehl 302 mit der Datenadresse 306 "2000 + X" verbunden. Der Speicherort
für den
Datenwert, der vom Prozessor 202 bei der Ausführung des
Ladebefehls 302 ausgelesen wird, hängt vom Wert der Indexvariablen "X" (308) ab. Wenn zum Beispiel
X = 0 ist, wird durch den Ladebefehl der Datenwert am Speicherort
2000 ausgelesen. Wenn X = 48 ist, wird durch den Ladebefehl der.
Datenwert am Speicherort 2048 ausgelesen, usw.
-
Der
Speicherort, der den Ladebefehl 302 enthält, ist
somit "1005", und jedesmal, wenn
dieser Befehl vom Prozessor 202 ausgeführt wird, ist mit der Operation
die Adresse "1005" verbunden. Die Adresse
für den
Datenwert, der bei der Ausführung
dieses Befehls ausgelesen wird, kann jedoch in Abhängigkeit
vom Wert für
X bei jeder Ausführung
des Ladebefehls 302 eine andere sein. Wenn X zum Beispiel zwischen
den einzelnen Ausführungen
des Ladebefehls 302 jeweils um 48 erhöht wird, wird durch den Ladebefehl 302 der
Speicherort 2000, 2048, 2096 usw. geladen. In diesem Beispiel hat
der Ladebefehl 302 eine Schrittweite von 48.
-
Das
Schrittweiten-Bestimmungsmodul 210 verwendet die Befehlsadressen
und Datenadressen vom Hardware-Ausführungszähler 208, um die Schrittweite
(falls vorhanden) von bestimmten Befehlen festzustellen. Zum Beispiel
hat der Ladebefehl 302 in der 3 eine Schrittweite
von 48, da X jedesmal durch eine Schleife 310, die den
Ladebefehl 302 enthält,
um 48 erhöht
wird. Wenn der Hardware-Ausführungszähler 208 jede
Befehlsadresse und die zugehörige
Datenadresse erfaßt,
kann das Schrittweiten-Bestimmungsmodul 210 auf zwei aufeinander folgende
Vorkommen der Befehlsadresse 1005 warten und dann die Datenadresse
beim zweiten Auftreten von der Datenadresse beim ersten Auftreten
subtrahieren, um die Schrittweite zu bestimmten (d.h. 2048 – 2000 =
48).
-
Wenn
der Hardware-Ausführungszähler 208 jedoch
nur dann Befehls- und Datenadressen erfaßt, wenn ein Cache-Fehlgriff
auftritt, kann die Differenz zwischen zwei aufeinanderfolgenden
Datenadressen für
die gleiche Befehlsadresse ein Mehrfaches der tatsächlichen
Schrittweite sein. Der Ladebefehl 302 der 3 hat
zum Beispiel eine Schrittweite von 48. Wenn jedoch nur beim ersten
Auftreten des Ladebefehls 302 (d.h. bei der Datenadresse
2000) und beim sechsten Auftreten des Ladebefehls 302 (d.h.
bei der Datenadresse 2240) ein Cache-Fehlgriff auftritt, ist die
Differenz zwischen den Datenadressen (d.h. 2240 – 2000) gleich 240 (d.h. 48 × 5) und
nicht 48. In diesem Beispiel ist der Wert 240 ein "Schrittweitenprodukt".
-
Ein
Schrittweitenprodukt ist ein Schrittweitenwert (z.B. 48), der aufgrund
nicht erfaßter
Vorkommen des Befehls (z.B. wegen Datencache-Treffer, die nicht
vom Hardware-Ausführungszähler 208 erfaßt werden)
mit einem Schrittweitenfaktor (z.B. 5) multipliziert wurde. Ein
Schrittweitenprodukt wird durch Subtrahieren des Wertes einer Datenadresse vom
Wert einer früheren
Datenadresse für
die gleiche Befehlsadresse (z.B. 2240 – 2000 = 240) bestimmt.
-
Um
aus einem Schrittweitenprodukt den tatsächlichen Wert für die Schrittweite
abzuleiten, umfaßt
das Computersystem 200 das Modul 212 für den größten gemeinsamen
Teiler. Das Modul 212 für
den größten gemeinsamen
Teiler nimmt zwei oder mehr Eingangsgrößen auf und stellt auf bekannte
Weise den größten gemeinsamen
Teiler aller Eingangsgrößen fest.
Das heißt,
daß das
Modul 212 für
den größten gemeinsamen
Teiler zwei oder mehr Schrittweitenprodukte aufnimmt und einen Wert
für die
Schrittweite bestimmt. Es wird zum Beispiel angenommen, daß der Hardware-Ausführungszähler 208 den
gleichen Ladebefehl 302 erfaßt, wie er drei Mal einen Datencache-Fehlgriff
erleidet. Es wird in diesem Beispiel weiter angenommen, daß die Datenadresse beim
ersten Erfassen des Ladebefehls 302 gleich 2000 ist, beim
zweiten Erfassen des Ladebefehls 302 gleich 2240 und beim
dritten Erfassen des Ladebefehls 302 gleich 2576. Das erste
Schrittweitenprodukt ist in diesem Beispiel dann gleich 240 (d.h.
2240 – 2220).
Das zweite Schrittweitenprodukt ist in diesem Beispiel gleich 336
(d.h. 2576 – 2240).
Der größte gemeinsame
Teiler von 240 und 336 ist 48, und im vorliegenden Beispiel ist
48 die tatsächliche
Schrittweite des Ladebefehls 302.
-
Bei
den meisten Computersystemen 200 erhöht die Bestimmung der Schrittweitenwerte
mittels Cache-Fehlgriffdaten vom Hardware-Ausführungszähler 208 die Arbeitsbelastung
des Computersystems 200. Um diese Belastung zu verringern,
umfaßt das
Computersystem 200 einen Phasenmanager 214. Der
Phasenmanager 214 läßt das Schrittweiten-Bestimmungsmodul 210 in
zwei oder mehr verschiedenen Phasen arbeiten. In der 4 ist
ein beispielhaftes Phasendiagramm dargestellt. Im vorliegenden Beispiel
läßt der Phasenmanager 214 das Schrittweiten-Bestimmungsmodul 210 zwischen
einer Übersprungphase 402 und
einer Untersuchungsphase 404 hin- und hergehen. In den Übersprungphasen 402 verarbeitet
das Schrittweiten-Bestimmungsmodul 210 weniger Berichte über Cache-Fehlgriffe vom Hardware-Ausführungszähler 208 als
in den Untersuchungsphasen 404. Zum Beispiel kann das Schrittweiten-Bestimmungsmodul 210 in
der Übersprungphase 402 den
Hardware-Ausführungszähler 208 nur
einmal alle 1000 Datencache-Fehlgriffe abfragen. Im Gegensatz dazu
kann das Schrittweiten-Bestimmungsmodul 210 in der Untersuchungsphase 404 den
Hardware-Ausführungszähler 208 bei jedem
Datencache-Fehlgriff abfragen.
-
Die 5 zeigt
einen beispielhaften Prozeß 500 zur
Feststellung der Schrittweite einer Software-Anwendung. Vorzugsweise
ist der Prozeß 500 in ein
oder mehr Softwareprogrammen enthalten, die in einem oder mehreren
Speichern gespeichert sind und die auf bekannte Weise von einem
oder mehreren Prozessoren (z.B. dem Prozessor 104 und/oder dem
Prozessor 202) ausgeführt
werden. Einige oder alle der Blöcke
des Prozesses 500 können
jedoch auch manuell und/oder durch eine andere Vorrichtung ausgeführt werden.
Der Prozeß 500 wird
zwar mit Bezug zu dem Flußdiagramm
der 5 beschrieben, der Fachmann erkennt jedoch sofort,
daß zur Ausführung des
Prozesses 500 auch viele andere Verfahren verwendet werden
können.
Zum Beispiel kann die Reihenfolge vieler der Blöcke geändert werden, die Arbeitsweise
in einem oder in mehreren Blöcken
kann verän dert
werden, Blöcke
können
kombiniert werden, und/oder Blöcke
können
weggelassen werden.
-
Bei
dem beispielhaften Prozeß 500 wird
im allgemeinen ein Hardware-Ausführungszähler verwendet,
um die Befehlsadressen und Datenadressen zu erfassen, die mit den
Speicherzugriffbefehlen verbunden sind, der durch ein Ereignis wie
einen Datencache-Fehlgriff ausgelöst wird. Wenn die gleiche Befehlsadresse
in Verbindung mit mehr als einer Datenadresse auftaucht, wird die
Differenz zwischen den beiden Datenadressen erfaßt. Wenn für den gleichen Befehl zwei
oder mehr solcher Datenadressendifferenzen erfaßt werden, bestimmt das System
zu dem Befehl eine Schrittweite, die der größte gemeinsame Teiler der beiden
oder mehreren Differenzen ist. Diese Schrittweite kann von einem
Compiler dazu verwendet werden, das Datencache-Prefetchen zu optimieren.
Durch das zyklische Umschalten zwischen einer Untersuchungsphase
und einer Übersprungphase
kann die Belastung verringert werden, die mit dem Überwachen
der Adressen von Datencache-Fehlgriffen verbunden sind. Während der
Untersuchungsphase werden mehr Datencache-Fehlgriffe erfaßt als während der Übersprungphase.
-
Der
beispielhafte Prozeß 500 beginnt
mit der Initialisierung einiger Variablen (Block 502).
Das heißt,
daß bei
dem beispielhaften Prozeß 500 ein Übersprungzähler, eine Übersprungschwelle,
ein Untersuchungszähler,
eine Untersuchungsschwelle und ein Erfassungsarray initialisiert
werden. Jede dieser Variablen kann in einem Speicher wie dem Hauptspeicher 108, 206 gespeichert
werden. Der Übersprungzähler zählt die
Anzahl von Datencache-Fehlgriffen (D-Cache-Fehlgriffen), die während einer Übersprungphase
auftreten. Die Übersprungschwelle
löst einen Übergang
von einer Übersprungphase 402 zu
einer Untersuchungsphase 404 aus. In der Übersprungphase 402 ist
die Rate verringert, mit der der Hardware-Ausführungszähler 208 abgetastet wird,
um die Belastung zu verringern, die mit der Feststellung der Schrittweite
verbunden ist. In jeder Übersprungphase 402 können zum
Beispiel eintausend D-Cache-Fehlgriffe übersprungen werden.
-
Gleichermaßen zählt der
Untersuchungszähler
die Anzahl von D-Cache-Fehlgriffen, die während der Untersuchungsphase 404 auftreten,
und die Untersuchungsschwelle löst
einen Übergang
von einer Untersuchungsphase 404 zur nächsten Übersprungphase 402 aus.
In der Untersuchungsphase 404 ist die Rate erhöht, mit
der der Hardware-Ausführungszähler 208 abgetastet
wird, um Daten zur Feststellung der Schrittweite zu erhalten. Zum
Beispiel können
während
jeder Untersuchungsphase 404 die Befehls- und Datenadressen
für eintausend
aufeinanderfolgende D-Cache-Fehlgriffe aufgenommen werden. Das Erfassungsarray
wird dazu verwendet, die Adressen aufzuzeichnen, die während der
einzelnen Untersuchungsphasen 404 erfaßt werden.
-
Nach
der Initialisierung der Variablen beginnt der Prozeß 500 durch
Warten auf einen D-Cache-Fehlgriff mit einer Übersprungphase 402 (Block 504).
In einem Beispiel ist der Hardware-Ausführungszähler 208 so eingestellt,
daß er
jedesmal auslöst,
wenn ein D-Cache-Fehlgriff
auftritt. Da dies die Übersprungphase 402 ist,
wird im Prozeß 500 beim Auftreten
eines D-Cache-Fehlgriffs nur der Übersprungzähler hochgesetzt (Block 506).
-
Wenn
die Anzahl der D-Cache-Fehlgriffe die Übersprungschwelle übersteigt,
geht der Prozeß 500 in
eine Untersuchungsphase 404 über (Block 508).
-
In
der Untersuchungsphase 404 werden bei jedem D-Cache-Fehlgriff
vom Hardware-Ausführungszähler 208 die
Befehlsadresse und die dazugehörende
Datenadresse aufgenommen (Block 510). Die Befehlsadresse
ist die Adresse für
den Befehl, der auf eine bestimmte Speicherstelle zugreift. Die Datenadresse
ist die Adresse für
die bestimmte Speicherstelle, auf die vom Befehl zugegriffen wird.
Wenn während
der Untersuchungsphase 404 ein D-Cache-Fehlgriff auftritt,
stellt der Prozeß 500 fest,
ob im Erfassungsarray bereits die gleiche Befehlsadresse gespeichert
ist (Block 512). Mit anderen Worten prüft der Prozeß 500,
ob dieser Befehl in dieser Untersuchungsphase 404 bereits
früher
einem D-Cache-Fehlgriff unterlegen ist.
-
Wenn
die betreffende Befehlsadresse noch nicht im Erfassungsarray gespeichert
ist (d.h. wenn es das erste Mal ist, daß der betreffende Befehl in
der Untersuchungsphase 404 einen D-Cache-Fehlgriff erleidet),
inkrementiert der Prozeß 500 den
Untersuchungszähler
(Block 514) und prüft,
ob der Untersuchungszähler
die Untersuchungsschwelle übersteigt (Block 516).
Wenn die Untersuchungsschwelle nicht überschritten wird (d.h. die
Untersuchungsphase 404 weiter andauert), wartet der Prozeß 500 auf
einen weiteren D-Cache-Fehlgriff
(Block 518). Beim Auftreten des nächsten D-Cache-Fehlgriffs nimmt
der Prozeß wieder
die Befehlsadresse und die dazugehörende Datenadresse vom Hardware-Ausführungszähler 208 auf
(Block 510). Wenn der D-Cache-Fehlgriff mit einer anderen
Befehlsadresse verbunden ist (Block 512), inkrementiert
der Prozeß 500 den
Untersuchungszähler
erneut (Block 514) und prüft, ob der Untersuchungszähler nun
die Untersuchungsschwelle übersteigt
(Block 516).
-
Wenn
der D-Cache-Fehlgriff jedoch mit einer Befehlsadresse verbunden
ist, die bereits im Erfassungsarray gespeichert ist (Block 512),
berechnet der Prozeß 500 für diese
Befehlsadresse ein "Schrittweitenprodukt" (Block 520).
Ein Schrittweitenprodukt ist ein Schrittweitenwert, der mit einem
Schrittweitenfaktor multipliziert wurde. Wenn der Schrittweitenwert zum
Beispiel 48 Byte beträgt
und der Schrittweitenfaktor 5 ist, ist das Schrittweitenprodukt
gleich 240. Der Schrittweitenfaktor ist das Ergebnis von D-Cache-Treffern. Wenn zum
Beispiel ein bestimmter Speicherzugriffbefehl einen D-Cache-Fehlgriff erleidet
und dann vier D-Cache-Treffer erhält, gefolgt von einem weiteren
D-Cache-Fehlgriff,
ist der Schrittweitenfaktor gleich 5. Das Schrittweitenprodukt wird durch
Subtrahieren der früher
in Verbindung mit der betreffenden Befehlsadresse aufgezeichneten
Datenadresse von der gegenwärtigen
Datenadresse erhalten.
-
Der
Prozeß 500 stellt
dann fest, ob das berechnete Schrittweitenprodukt das erste Schrittweitenprodukt
ist, das für
diese Befehlsadresse bestimmt wurde (Block 522). Wenn zum
Beispiel in Verbindung mit der betreffenden Befehlsadresse nur zwei
Cache-Fehlgriffe
aufgetreten sind, wurde nur ein Schrittweitenprodukt bestimmt (d.h.
es ist dies das erste Schrittweitenprodukt). Wenn jedoch in Verbindung
mit der betreffenden Befehlsadresse drei (oder mehr) Cache-Fehlgriffe
aufgetreten sind, wurde mehr als ein Schrittwei tenprodukt bestimmt.
Zum Beispiel hat die Differenz zwischen der Datenadresse für den ersten
Cache-Fehlgriff und den zweiten Cache-Fehlgriff ein erstes Schrittweitenprodukt
ergeben und die Differenz zwischen der Datenadresse für den zweiten
Cache-Fehlgriff und den dritten Cache-Fehlgriff ein zweites Schrittweitenprodukt.
-
Wenn
das berechnete Schrittweitenprodukt das erste für diese Befehlsadresse bestimmte Schrittweitenprodukt
ist (Block 522), inkrementiert der Prozeß 500 den
Untersuchungszähler
(Block 514) und prüft,
ob der Untersuchungszähler
die Untersuchungsschwelle übersteigt
(Block 516). Wenn die Untersuchungsschwelle nicht überschritten
wird (d.h. die Untersuchungsphase 404 weiter andauert), wartet
der Prozeß 500 auf
einen weiteren D-Cache-Fehlgriff (Block 518).
-
Wenn
das berechnete Schrittweitenprodukt jedoch nicht das erste für diese
Befehlsadresse bestimmte Schrittweitenprodukt ist (Block 522),
stellt der Prozeß 500 für diesen
Befehl einen Schrittweitenwert fest (Block 524). Der Schrittweitenwert
wird durch Bestimmen des größten gemeinsamen
Teilers des gegenwärtigen
Schrittweitenprodukts für
die Befehlsadresse und des vorherigen Schrittweitenprodukts für die gleiche
Befehlsadresse berechnet. Alternativ kann auch eine beliebige Anzahl
von Schrittweitenprodukten dazu verwendet werden, den Schrittweitenwert
zu bestimmen. Zum Beispiel kann der größte gemeinsame Teiler von drei
Schrittweitenprodukten als Wert für die Schrittweite verwendet werden.
-
Daraufhin
inkrementiert der Prozeß 500 den Untersuchungszähler (Block 514)
und prüft,
ob der Untersuchungszähler
die Untersuchungsschwelle übersteigt
(Block 516). Wenn die Untersuchungsschwelle nicht überschritten
wird (d.h. die Untersuchungsphase 404 weiter andauert),
wartet der Prozeß 500 auf
einen weiteren D-Cache-Fehlgriff (Block 518). Wenn dagegen
die Untersuchungsschwelle überschritten
wird, reinitialisiert der Prozeß 500 bestimmte
Variable (Block 502) und kehrt zu einer Übersprungphase 402 zurück.
-
Das
oben beschriebene Beispiel umfaßt
neben anderen Komponenten auf Hardware ausgeführte Software. Es ist anzumerken,
daß solche
Systeme nur beispielhaft sind und nicht als einschränkend betrachtet
werden sollen. Zum Beispiel ist es möglich, einige oder alle der
beschriebenen Hardware- und Softwarekomponenten ausschließlich in
dafür vorgesehener
Hardware, ausschließlich
in Software, ausschließlich
in Firmware oder in einer Kombination von Hardware, Firmware und/oder
Software auszuführen.
-
Es
wurden zwar bestimmte Verfahren, Vorrichtungen und Herstellungsgegenstände beschrieben,
der Umfang des vorliegenden Patents ist darauf jedoch nicht beschränkt. Im
Gegensatz, dieses Patent deckt alle Vorrichtungen, Verfahren und
Herstellungsgegenstände
ab, die innerhalb des Umfangs der folgenden Patentansprüche liegen.