DE602004007913T2 - Verfahren und vorrichtungen zur stride-profilierung einer softwareanwendung - Google Patents

Verfahren und vorrichtungen zur stride-profilierung einer softwareanwendung Download PDF

Info

Publication number
DE602004007913T2
DE602004007913T2 DE602004007913T DE602004007913T DE602004007913T2 DE 602004007913 T2 DE602004007913 T2 DE 602004007913T2 DE 602004007913 T DE602004007913 T DE 602004007913T DE 602004007913 T DE602004007913 T DE 602004007913T DE 602004007913 T2 DE602004007913 T2 DE 602004007913T2
Authority
DE
Germany
Prior art keywords
data
address
instruction
step size
product
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
DE602004007913T
Other languages
English (en)
Other versions
DE602004007913D1 (de
Inventor
Geoff Concord LOWNEY
Chi-Keung Shrewsbury LUK
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of DE602004007913D1 publication Critical patent/DE602004007913D1/de
Application granted granted Critical
Publication of DE602004007913T2 publication Critical patent/DE602004007913T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • G06F8/4442Reducing the number of cache misses; Data prefetching

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Debugging And Monitoring (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)
  • Advance Control (AREA)

Description

  • 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.

Claims (16)

  1. Verfahren zur Feststellung der Schrittweite einer Software-Anwendung, umfassend das Aufnehmen von Daten, die eine erste Befehlsadresse und eine erste Datenadresse angeben, von einem Hardware-Ausführungszähler (208); das Aufnehmen von Daten, die eine zweite Befehlsadresse und eine zweite Datenadresse angeben, vom Hardware-Ausführungszähler (208); das Bestimmen eines ersten Schrittweitenprodukts durch Subtrahieren der ersten Datenadresse von der zweiten Datenadresse, wenn die erste Befehlsadresse gleich der zweiten Befehlsadresse ist; das Aufnehmen von Daten, die eine dritte Befehlsadresse und eine dritte Datenadresse angeben, vom Hardware-Ausführungszähler (208); das Bestimmen eines zweiten Schrittweitenprodukts durch Subtrahieren der zweiten Datenadresse von der dritten Datenadresse, wenn die zweite Befehlsadresse gleich der dritten Befehlsadresse ist; und das Bestimmen der Schrittweite als größten gemeinsamen Teiler des ersten Schrittweitenprodukts und des zweiten Schrittweitenprodukts.
  2. Verfahren nach Anspruch 1, wobei das Aufnehmen von Daten, die eine erste Befehlsadresse und eine erste Datenadresse angeben, vom Hardware-Ausführungszähler (208) das Aufnehmen der ersten Befehlsadresse und der ersten Datenadresse als Teil eines Datensatzes beinhaltet, der eine erste Anzahl aufeinanderfolgender Datencache-Fehlgriffe angibt.
  3. Verfahren nach Anspruch 2, weiterhin umfassend das Aufnehmen des ersten Datensatzes, der eine erste Anzahl aufeinanderfolgender Datencache-Fehlgriffe angibt; und das Aufnehmen eines zweiten Datensatzes, der eine zweite Anzahl aufeinanderfolgender Datencache-Fehlgriffe angibt, wobei das Aufnehmen des ersten Datensatzes und das Aufnehmen des zweiten Datensatzes von einer vorgegebenen Zeitspanne getrennt sind, während der keine Daten aufgenommen werden, die aufeinanderfolgende Datencache-Fehlgriffe angeben.
  4. Verfahren nach Anspruch 1, weiterhin umfassend das Aufnehmen von Daten, die eine vierte Befehlsadresse und eine vierte Datenadresse angeben, vom Hardware-Ausführungszähler (208); und das Bestimmen des zweiten Schrittweitenprodukts durch Subtrahieren der dritten Datenadresse von der vierten Datenadresse, wenn die erste Befehlsadresse gleich der dritten und der vierten Befehlsadresse ist.
  5. Verfahren nach Anspruch 4, wobei das Bestimmen der Schrittweite auf der Basis des ersten Schrittweitenprodukts das Bestimmen des größten gemeinsamen Teilers des ersten Schrittweitenprodukts und des zweiten Schrittweitenprodukts beinhaltet.
  6. Verfahren nach Anspruch 1, wobei das Aufnehmen von Daten, die eine erste Befehlsadresse und eine erste Datenadresse angeben, vom Hardware-Ausführungszähler (208) das Aufnehmen der ersten Befehlsadresse und der ersten Datenadresse als Teil eines Datensatzes beinhaltet, der eine Anzahl aufeinanderfolgender Datencache-Fehlgriffe angibt.
  7. Verfahren nach Anspruch 1, mit einem Abfragen des Hardware-Ausführungszählers (208) in einer Reihe periodischer Bursts.
  8. Vorrichtung zum Profilieren einer Software-Anwendung, umfassend einen Hardware-Ausführungszähler (208); ein Schrittweitenprodukt-Bestimmungsmodul (210), das mit dem Hardware-Ausführungszähler (208) verbunden ist und das auf die Aufnahme von Daten, die eine erste Befehlsadresse und eine erste Datenadresse sowie eine zweite Befehlsadresse und eine zweite Datenadresse angeben, vom Hardware-Ausführungszähler (208) reagiert, um durch Subtrahieren der ersten Datenadresse von der zweiten Datenadresse, wenn die erste Befehlsadresse gleich der zweiten Befehlsadresse ist, ein erstes Schrittweitenprodukt zu bestimmen; und das auf die Aufnahme von Daten, die eine dritte Befehlsadresse und eine dritte Datenadresse angeben, vom Hardware-Ausführungszähler (208) reagiert, um durch Subtrahieren der zweiten Datenadresse von der dritten Datenadresse, wenn die zweite Befehladresse gleich der dritten Befehlsadresse ist, ein zweites Schrittweitenprodukt zu bestimmen; und ein Modul (212) für den größten gemeinsamen Teiler, um die Schrittweite als größten gemeinsamen Teiler des ersten Schrittweitenprodukts und des zweiten Schrittweitenprodukts zu bestimmen.
  9. Vorrichtung nach Anspruch 8, wobei der Hardware-Ausführungszähler (208) in einer Reihe periodischer Bursts abgefragt wird.
  10. Vorrichtung nach Anspruch 8, wobei der Hardware-Ausführungszähler (208) Daten aufnimmt, die eine einem Datencache-Fehlgriff zugeordnete Befehlsadresse und eine einem Datencache-Fehlgriff zugeordnete Datenadresse angeben.
  11. Vorrichtung nach Anspruch 8, mit einem Phasenmanager (214), der mit dem Schrittweitenprodukt-Bestimmungsmodul (210) verbunden ist.
  12. Vorrichtung nach Anspruch 11, wobei der Phasenmanager (214) einen ersten Übergang von einer ersten Übersprungphase zu einer Untersuchungsphase bewirkt.
  13. Vorrichtung nach Anspruch 12, wobei der Phasenmanager (214) einen zweiten Übergang von der Untersuchungsphase zu einer zweiten Übersprungphase bewirkt.
  14. Maschinenlesbares Medium, das eine Maschine veranlaßt, von einem Hardware-Ausführungszähler (208) Daten aufzunehmen, die eine erste Befehlsadresse und eine erste Datenadresse angeben; vom Hardware-Ausführungszähler (208) Daten aufzunehmen, die eine zweite Befehlsadresse und eine zweite Datenadresse angeben; durch Subtrahieren der ersten Datenadresse von der zweiten Datenadresse, wenn die erste Befehlsadresse gleich der zweiten Befehlsadresse ist, ein erstes Schrittweitenprodukt zu bestimmen; vom Hardware-Ausführungszähler (208) zweite Daten aufzunehmen, die eine dritte Befehlsadresse und eine dieser zugeordneten dritte Datenadresse angeben; durch Subtrahieren der zweiten Datenadresse von der dritten Datenadresse, wenn die zweite Befehlsadresse gleich der dritten Befehlsadresse ist, ein zweites Schrittweitenprodukt zu gewinnen; und durch Bestimmen des größten gemeinsamen Teilers des ersten Schrittweitenprodukts und des zweiten Schrittweitenprodukts eine Schrittweite zu bestimmen.
  15. Maschinenlesbares Medium nach Anspruch 14, das außerdem die Maschine veranlaßt, aufgrund der Schrittweiteprofildaten ein Programm zu kompilieren.
  16. Maschinenlesbares Medium nach Anspruch 14, das außerdem die Maschine veranlaßt, den Hardware-Ausführungszähler (208) in einer Reihe periodischer Bursts abzufragen.
DE602004007913T 2003-05-27 2004-05-12 Verfahren und vorrichtungen zur stride-profilierung einer softwareanwendung Expired - Lifetime DE602004007913T2 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US446004 1982-12-01
US10/446,004 US7181723B2 (en) 2003-05-27 2003-05-27 Methods and apparatus for stride profiling a software application
PCT/US2004/014845 WO2004107177A2 (en) 2003-05-27 2004-05-12 Methods and apparatus for stride profiling a software application

Publications (2)

Publication Number Publication Date
DE602004007913D1 DE602004007913D1 (de) 2007-09-13
DE602004007913T2 true DE602004007913T2 (de) 2008-04-30

Family

ID=33450967

Family Applications (1)

Application Number Title Priority Date Filing Date
DE602004007913T Expired - Lifetime DE602004007913T2 (de) 2003-05-27 2004-05-12 Verfahren und vorrichtungen zur stride-profilierung einer softwareanwendung

Country Status (7)

Country Link
US (1) US7181723B2 (de)
EP (1) EP1627311B1 (de)
JP (1) JP4361084B2 (de)
CN (2) CN1795438B (de)
AT (1) ATE368891T1 (de)
DE (1) DE602004007913T2 (de)
WO (1) WO2004107177A2 (de)

Families Citing this family (39)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7373637B2 (en) 2003-09-30 2008-05-13 International Business Machines Corporation Method and apparatus for counting instruction and memory location ranges
US7937691B2 (en) 2003-09-30 2011-05-03 International Business Machines Corporation Method and apparatus for counting execution of specific instructions and accesses to specific data locations
US20050071821A1 (en) * 2003-09-30 2005-03-31 International Business Machines Corporation Method and apparatus to autonomically select instructions for selective counting
US7395527B2 (en) * 2003-09-30 2008-07-01 International Business Machines Corporation Method and apparatus for counting instruction execution and data accesses
US7421681B2 (en) * 2003-10-09 2008-09-02 International Business Machines Corporation Method and system for autonomic monitoring of semaphore operation in an application
US8381037B2 (en) * 2003-10-09 2013-02-19 International Business Machines Corporation Method and system for autonomic execution path selection in an application
US7257657B2 (en) * 2003-11-06 2007-08-14 International Business Machines Corporation Method and apparatus for counting instruction execution and data accesses for specific types of instructions
US7290255B2 (en) * 2004-01-14 2007-10-30 International Business Machines Corporation Autonomic method and apparatus for local program code reorganization using branch count per instruction hardware
US7415705B2 (en) * 2004-01-14 2008-08-19 International Business Machines Corporation Autonomic method and apparatus for hardware assist for patching code
US7392370B2 (en) * 2004-01-14 2008-06-24 International Business Machines Corporation Method and apparatus for autonomically initiating measurement of secondary metrics based on hardware counter values for primary metrics
US7293164B2 (en) * 2004-01-14 2007-11-06 International Business Machines Corporation Autonomic method and apparatus for counting branch instructions to generate branch statistics meant to improve branch predictions
US7496908B2 (en) * 2004-01-14 2009-02-24 International Business Machines Corporation Method and apparatus for optimizing code execution using annotated trace information having performance indicator and counter information
US7895382B2 (en) 2004-01-14 2011-02-22 International Business Machines Corporation Method and apparatus for qualifying collection of performance monitoring events by types of interrupt when interrupt occurs
US7526757B2 (en) * 2004-01-14 2009-04-28 International Business Machines Corporation Method and apparatus for maintaining performance monitoring structures in a page table for use in monitoring performance of a computer program
US7296130B2 (en) * 2004-03-22 2007-11-13 International Business Machines Corporation Method and apparatus for providing hardware assistance for data access coverage on dynamically allocated data
US7526616B2 (en) * 2004-03-22 2009-04-28 International Business Machines Corporation Method and apparatus for prefetching data from a data structure
US8135915B2 (en) 2004-03-22 2012-03-13 International Business Machines Corporation Method and apparatus for hardware assistance for prefetching a pointer to a data structure identified by a prefetch indicator
US7299319B2 (en) * 2004-03-22 2007-11-20 International Business Machines Corporation Method and apparatus for providing hardware assistance for code coverage
US7480899B2 (en) 2004-03-22 2009-01-20 International Business Machines Corporation Method and apparatus for autonomic test case feedback using hardware assistance for code coverage
US7421684B2 (en) 2004-03-22 2008-09-02 International Business Machines Corporation Method and apparatus for autonomic test case feedback using hardware assistance for data coverage
US7421540B2 (en) * 2005-05-03 2008-09-02 International Business Machines Corporation Method, apparatus, and program to efficiently calculate cache prefetching patterns for loops
US20070006167A1 (en) * 2005-05-31 2007-01-04 Chi-Keung Luk Optimizing binary-level instrumentation via instruction scheduling
US20070130114A1 (en) * 2005-06-20 2007-06-07 Xiao-Feng Li Methods and apparatus to optimize processing throughput of data structures in programs
US8037465B2 (en) * 2005-09-30 2011-10-11 Intel Corporation Thread-data affinity optimization using compiler
US8176475B2 (en) 2006-10-31 2012-05-08 Oracle America, Inc. Method and apparatus for identifying instructions associated with execution events in a data space profiler
WO2008093399A1 (ja) * 2007-01-30 2008-08-07 Fujitsu Limited 情報処理システムおよび情報処理方法
US8621468B2 (en) * 2007-04-26 2013-12-31 Microsoft Corporation Multi core optimizations on a binary using static and run time analysis
US8051332B2 (en) 2008-07-15 2011-11-01 Avicode Inc. Exposing application performance counters for .NET applications through code instrumentation
US9104794B2 (en) * 2008-07-15 2015-08-11 Microsoft Technology Licensing, Llc Automatic incremental application dependency discovery through code instrumentation
JP5326708B2 (ja) 2009-03-18 2013-10-30 富士通株式会社 演算処理装置および演算処理装置の制御方法
CN102567206B (zh) * 2012-01-06 2014-10-29 华中科技大学 一种剖析cuda程序行为的方法
US10019341B2 (en) * 2014-09-25 2018-07-10 Intel Corporation Using hardware performance counters to detect stale memory objects
JP6341045B2 (ja) 2014-10-03 2018-06-13 富士通株式会社 演算処理装置および演算処理装置の制御方法
US20180173631A1 (en) * 2016-12-21 2018-06-21 Qualcomm Incorporated Prefetch mechanisms with non-equal magnitude stride
CN107329908A (zh) * 2017-07-07 2017-11-07 联想(北京)有限公司 一种数据处理方法和电子设备
CN107601411A (zh) * 2017-10-11 2018-01-19 荆门市双创专利技术服务有限公司 一种带有理瓶机玻璃胶生产装置
US10649688B1 (en) * 2018-11-01 2020-05-12 Intel Corporation Precise longitudinal monitoring of memory operations
US11288046B2 (en) * 2019-10-30 2022-03-29 International Business Machines Corporation Methods and systems for program optimization utilizing intelligent space exploration
US11115494B1 (en) * 2020-02-26 2021-09-07 International Business Machines Corporation Profile clustering for homogenous instance analysis

Family Cites Families (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US126591A (en) * 1872-05-07 Improvement in hair-restoratives
GB2247546B (en) 1990-08-31 1995-03-01 Sun Microsystems Inc Method and apparatus for predictive caching
US5396604A (en) * 1991-07-12 1995-03-07 Hewlett-Packard Company System and method for reducing the penalty associated with data cache misses
US5444850A (en) 1993-08-04 1995-08-22 Trend Micro Devices Incorporated Method and apparatus for controlling network and workstation access prior to workstation boot
US5778436A (en) * 1995-03-06 1998-07-07 Duke University Predictive caching system and method based on memory access which previously followed a cache miss
US5694568A (en) 1995-07-27 1997-12-02 Board Of Trustees Of The University Of Illinois Prefetch system applicable to complex memory access schemes
US5857097A (en) * 1997-03-10 1999-01-05 Digital Equipment Corporation Method for identifying reasons for dynamic stall cycles during the execution of a program
US6098154A (en) * 1997-06-25 2000-08-01 Sun Microsystems, Inc. Apparatus and method for generating a stride used to derive a prefetch address
US6076151A (en) * 1997-10-10 2000-06-13 Advanced Micro Devices, Inc. Dynamic memory allocation suitable for stride-based prefetching
US6047363A (en) * 1997-10-14 2000-04-04 Advanced Micro Devices, Inc. Prefetching data using profile of cache misses from earlier code executions
US6047359A (en) 1997-11-04 2000-04-04 The United States Of America As Represented By The Secretary Of The Navy Predictive read cache memories for reducing primary cache miss latency in embedded microprocessor systems
US6134643A (en) 1997-11-26 2000-10-17 Intel Corporation Method and apparatus for cache line prediction and prefetching using a prefetch controller and buffer and access history
US6560706B1 (en) 1998-01-26 2003-05-06 Intel Corporation Interface for ensuring system boot image integrity and authenticity
US6430680B1 (en) * 1998-03-31 2002-08-06 International Business Machines Corporation Processor and method of prefetching data based upon a detected stride
US6134710A (en) 1998-06-26 2000-10-17 International Business Machines Corp. Adaptive method and system to minimize the effect of long cache misses
US6463535B1 (en) 1998-10-05 2002-10-08 Intel Corporation System and method for verifying the integrity and authorization of software before execution in a local platform
US7430668B1 (en) 1999-02-15 2008-09-30 Hewlett-Packard Development Company, L.P. Protection of the configuration of modules in computing apparatus
US6571318B1 (en) * 2001-03-02 2003-05-27 Advanced Micro Devices, Inc. Stride based prefetcher with confidence counter and dynamic prefetch-ahead mechanism
US7103529B2 (en) 2001-09-27 2006-09-05 Intel Corporation Method for providing system integrity and legacy environment emulation
US7093124B2 (en) 2001-10-30 2006-08-15 Intel Corporation Mechanism to improve authentication for remote management of a computer system
US20030126591A1 (en) * 2001-12-21 2003-07-03 Youfeng Wu Stride-profile guided prefetching for irregular code
US20030145314A1 (en) * 2002-01-31 2003-07-31 Khoa Nguyen Method of efficient dynamic data cache prefetch insertion
US20030204840A1 (en) * 2002-04-30 2003-10-30 Youfeng Wu Apparatus and method for one-pass profiling to concurrently generate a frequency profile and a stride profile to enable data prefetching in irregular programs
US7155575B2 (en) * 2002-12-18 2006-12-26 Intel Corporation Adaptive prefetch for irregular access patterns

Also Published As

Publication number Publication date
WO2004107177A2 (en) 2004-12-09
ATE368891T1 (de) 2007-08-15
WO2004107177A3 (en) 2005-07-28
CN1795438B (zh) 2012-03-21
JP4361084B2 (ja) 2009-11-11
JP2006524375A (ja) 2006-10-26
US7181723B2 (en) 2007-02-20
EP1627311A2 (de) 2006-02-22
CN102681947A (zh) 2012-09-19
CN102681947B (zh) 2015-12-16
US20040243981A1 (en) 2004-12-02
DE602004007913D1 (de) 2007-09-13
EP1627311B1 (de) 2007-08-01
CN1795438A (zh) 2006-06-28

Similar Documents

Publication Publication Date Title
DE602004007913T2 (de) Verfahren und vorrichtungen zur stride-profilierung einer softwareanwendung
DE4225228C2 (de) Vorabrufpuffer und einen derartigen Vorabrufpuffer verwendendes Informationsverarbeitungssystem
EP0010198B1 (de) Vorrichtung zur Steuerung des Seitenaustausches in einem Datenverarbeitungssystem mit virtuellem Speicher
DE10050684B4 (de) Verfahren und System zur periodischen Ablaufverfolgung für Aufrufsequenzen zwischen Routinen
DE3151745C2 (de)
EP0645704A2 (de) Tracer-System zur Fehleranalyse in laufenden Realzeitsystemen
DE3801361A1 (de) Verfahren und einrichtung zum detektieren und fuer die spezialbehandlung von memory-mapped eingabe/ausgabereferenzen in einem pipelinemikroprozessor
DE112012000365T5 (de) Inkrementelles Entladen von Klassen in einem auf Bereichen beruhenden Speicherbereiniger
CH654943A5 (de) Pruefeinrichtung fuer mikroprogramme.
DE102006041444B4 (de) Schaltungsanordnung und Verfahren zum Erfassen einer Ausführungszeit eines Befehls in einem Rechnersystem
DE19824289C2 (de) Pipelineverarbeitungsmaschine
DE2842548A1 (de) Programmierbare speicherschutzlogik fuer mikroprozessorsysteme
DE112014000336T5 (de) Vorablesezugriff für einen übergeordneten Kern in einem Mehrkern-Chip
DE69931685T2 (de) Verfahren und Gerät zum Implementieren von schnellen Subclass- und Subtyp-Überprüfungen
DE112014000340T5 (de) Vorablesezugriff auf Daten für einen Chip mit einem übergeordneten Kern und einem Scout-Kern
DE2149200C3 (de) Einrichtung zur Auswahl von im Verlauf einer Programmbearbeitung am häufigsten benötigten Daten
DE112011100168B4 (de) Erfassen von Diagnosedaten in einer Datenverarbeitungsumgebung
DE2835498C2 (de) Anordnung zur dynamischen Fehlerermittlung in Datenverarbeitungsanlagen
DE2906685C2 (de)
DE112018007428T5 (de) Vorrichtung zur informationsverarbeitung, tuningverfahren undtuningprogramm
DE60217729T2 (de) Verfahren zum erkennen eines elektronischen geräts in einem mehrfachsteuersystem
DE2723706A1 (de) Einrichtung zum adressenvergleich
DE102012221253A1 (de) Gleitkomma-Ereigniszähler mit automatischer Vorteilung
DE2622140C3 (de) Einrichtung zur Steuerung manueller Operationen
DE10332245B4 (de) Betriebsverfahren für eine bildgebende medizintechnische Anlage mit online-Ermittlung von Nutzsignalen bei gleichzeitiger permanenter Speicherung von den Nutzsignalen zu Grunde liegenden Mess- bzw. Rohsignalen

Legal Events

Date Code Title Description
8364 No opposition during term of opposition