DE10015675A1 - Spekulative Auswahl von heißen Spuren in einem dynamischen CACHE-Übersetzer mit geringem Aufwand - Google Patents

Spekulative Auswahl von heißen Spuren in einem dynamischen CACHE-Übersetzer mit geringem Aufwand

Info

Publication number
DE10015675A1
DE10015675A1 DE10015675A DE10015675A DE10015675A1 DE 10015675 A1 DE10015675 A1 DE 10015675A1 DE 10015675 A DE10015675 A DE 10015675A DE 10015675 A DE10015675 A DE 10015675A DE 10015675 A1 DE10015675 A1 DE 10015675A1
Authority
DE
Germany
Prior art keywords
track
counter
hot
interpreter
threshold
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.)
Granted
Application number
DE10015675A
Other languages
English (en)
Other versions
DE10015675B4 (de
Inventor
Vasanth Bala
Evelyn Duesterwald
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.)
HP Inc
Original Assignee
Hewlett Packard Co
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 Hewlett Packard Co filed Critical Hewlett Packard Co
Publication of DE10015675A1 publication Critical patent/DE10015675A1/de
Application granted granted Critical
Publication of DE10015675B4 publication Critical patent/DE10015675B4/de
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3612Software analysis for verifying properties of programs by runtime analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3409Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/88Monitoring involving counting

Abstract

Ein Verfahren und eine Vorrichtung zum Auswählen von heißen Spuren für eine Übersetzung und/oder Optimierung wird bezüglich eines dynamischen Cache-Übersetzers beschrieben. Der Code-Cache-Speicher speichert die heißen Spuren. Die Profilbildung wird an Positionen durchgeführt, die eine Spuranfangbedingung erfüllen, z. B. an den Zielen von rückwärts genommenen Verzweigungen. Ein heißes Ziel einer rückwärts genommenen Verzweigung wird ohne die Notwendigkeit, ein Profil der Blöcke zu bilden, aus denen sich die Spur zusammensetzt, spekulativ als der Beginn einer heißen Spur identifiziert. Die Erstreckung der spekulativ ausgewählten heißen Spur ist durch eine Spurendebedingung, z. B. eine rückwärts genommene Verzweigung oder eine Anzahl von interpretierten oder nativen Befehlen, bestimmt. Der Interpretierer wird durch einen Modus ergänzt, bei dem derselbe native Befehle ausgibt, die Cache-mäßig gespeichert werden. Eine Spur wird Cache-mäßig gespeichert, indem ein heißer Start einer Spur identifiziert wird, und daraufhin die Interpretation fortgeführt wird, während der ausgegebene native Befehlsstrom gespeichert wird, bis eine Spurendebedingung erfüllt ist.

Description

Die vorliegende Erfindung bezieht sich auf Techniken zum Identifizieren von Computerprogrammabschnitten, die beson­ ders häufig ausgeführt werden. Die vorliegende Erfindung ist insbesondere bei dynamischen Übersetzern nützlich, die Kan­ didatenabschnitte eines Codes für eine Cache-Speicherung und/oder Optimierung identifizieren müssen.
Dynamischer Übersetzer übersetzen eine Sequenz von Befehlen in eine weitere Sequenz von Befehlen, die ausgeführt wird. Die zweite Sequenz von Befehlen sind "native" Befehle - sie können von der Maschine, auf der der Übersetzer läuft, di­ rekt ausgeführt werden (diese "Maschine" kann eine Hardware sein oder diese Maschine kann durch Software definiert sein, die auf einer weiteren Maschine mit ihrer eigenen Architek­ tur läuft). Ein dynamischer Übersetzer kann entworfen sein, um Befehle für eine Maschinenarchitektur (d. h. einen Be­ fehlssatz) auf einer Maschine einer unterschiedlichen Ar­ chitektur (d. h. mit einem unterschiedlichen Befehlssatz) auszuführen. Alternativ kann ein dynamischer Übersetzer Be­ fehle nehmen, die für die Maschine, auf der der dynamische Übersetzer läuft, nativ sind, und an diesem Befehlsstrom wirken, um einen optimierten Befehlsstrom zu erzeugen. Ein dynamischer Übersetzer kann ferner beide dieser Funktionen aufweisen (eine Übersetzung von einer Architektur in eine andere und eine Optimierung).
Dynamische Cache-Übersetzer versuchen, Programm-Hot-Spots (häufig ausgeführte Abschnitte des Programms, wie z. B. be­ stimmte Schleifen) in Laufzeit zu identifizieren, und ver­ wenden einen Code-Cache-Speicher, um Übersetzungen dieser häufig ausgeführten Abschnitte zu speichern. Eine an­ schließende Ausführung dieser Abschnitte kann die Cache­ mäßig gespeicherten Übersetzungen verwenden, wodurch der Aufwand zum Ausführen dieser Abschnitte des Programms re­ duziert wird.
Ein dynamischer Übersetzer kann Befehle in einem Befehlssatz nehmen und Befehle in einem unterschiedlichen Befehlssatz erzeugen. Oder ein dynamischer Übersetzer kann eine Optimie­ rung durchführen: Erzeugen von Befehlen in demselben Be­ fehlssatz wie demjenigen des ursprünglichen Befehlsstromes; folglich ist die dynamische Optimierung ein spezieller Na­ tiv-zu-Nativ-Fall einer dynamischen Übersetzung. Oder ein dynamischer Übersetzer kann beides durchführen - Umwandeln zwischen Befehlssätzen sowie Durchführen einer Optimierung.
Im allgemeinen gilt, daß, je komplizierter das Ausführungs­ profilbildungsschema ist, desto präziser die Hot-Spot-Iden­ tifizierung sein kann, und folglich (i) desto kleiner der übersetzte Code-Cache-Speicher-Platz sein kann, der erfor­ derlich ist, um den kompakteren Satz von identifizierten Hot-Spots des Arbeitssatzes des laufenden Programms zu hal­ ten, und (ii) desto weniger Zeit aufgewendet wird, um Hot- Spots in einen nativen Code (oder in einen optimierten nati­ ven Code) zu übersetzen. Falls keine spezielle Hardware­ unterstützung für die Profilbildung vorgesehen ist, liegt allgemein der Fall vor, daß ein komplexeres Profilbildungs­ schema einen größeren Aufwand nach sich zieht. Folglich müssen dynamische Übersetzer typischerweise einen Ausgleich zwischen dem Minimieren der Verwaltung auf der einen Seite und dem sehr sorgfältigen Auswählen von Hot-Spots auf der anderen Seite finden.
Abhängig von der verwendeten Profilbildungstechnik kann die Granularität der ausgewählten Hot-Spots variieren. Eine Feinkörnungstechnik kann beispielsweise einzelne Blöcke identifizieren (eine schleifenfreie Codesequenz ohne jeg­ liche dazwischen angeordnete Verzweigungen), wohingegen ein gröberer Lösungsansatz für eine Profilbildung vollständige Prozeduren identifizieren kann. Da es typischerweise ver­ glichen zu Prozeduren viel mehr Blöcke gibt, die ausgeführt werden, erfordern die Prozeduren viel mehr Profilbildungs­ aufwand (sowohl Speicherplatz für die Ausführungshäufig­ keitszähler als auch Zeit, die zum Aktualisieren dieser Zähler aufgewendet wird) als die Blöcke. Bei Systemen, die eine Programmoptimierung vornehmen, besteht ein weiterer, zu berücksichtigender Faktor in der Wahrscheinlichkeit einer nützlichen Optimierung und/oder dem Grad der Optimierungs­ möglichkeit, die bei dem ausgewählten Hot-Spot verfügbar ist. Ein Block bietet einen viel geringeren Optimierungswir­ kungsbereich als eine Prozedur (und folglich können weniger Typen von Optimierungstechniken angewendet werden), obwohl ein Block einfacher zu optimieren ist, da demselben jeg­ licher Steuerungsfluß fehlt (Verzweigungen und Verbindun­ gen).
Spuren bieten noch einen unterschiedlichen Satz von Abwä­ gungen. Spuren (ferner bekannt als Pfade) sind dynamische Einzel-Eingang-Mehr-Ausgang-Sequenzen von Blöcken. Obwohl Spuren häufig einen Optimierungswirkungsbereich aufweisen, der zwischen demjenigen für Blöcke und demjenigen für Pro­ zeduren liegt, können Spuren mehrere Prozedurkörper durch­ laufen, und können sogar vollständige Prozedurkörper ent­ halten. Spuren bieten einen ziemlich großen Optimierungs­ wirkungsbereich, während dieselben immer noch einen ein­ fachen Steuerungsfluß aufweisen, was das Optimieren dersel­ ben viel einfacher macht als das Optimieren einer Prozedur. Der einfache Steuerungsfluß ermöglicht ferner eine schnelle­ re Optimiererimplementierung. Eine dynamische Spur kann sich sogar über mehrere Prozeduraufrufe und -Rücksprünge ein­ schließlich dynamisch verbundener Bibliotheken (DLLs) er­ strecken. Dies ermöglicht einem Optimierer, ein "Inlining" durchzuführen, was eine Optimierung ist, die redundante Auf­ ruf- und Rücksprung-Verzweigungen entfernt, was die Lei­ stungsfähigkeit wesentlich verbessern kann.
Ungünstigerweise ist der erforderliche Aufwand, um ein Pro­ fil von heißen Spuren unter Verwendung existierender Verfah­ ren (wie z. B. demjenigen, das in "Efficient Path Pro­ filing", Proceedings of the 29th Symposium on Micro Architecture (MICRO-29), Dezember 1996, von T. Ball und J. Larus beschrieben wird) zu bilden, ohne eine Hardwareunter­ stützung unakzeptabel hoch. Solche Verfahren erfordern das Instrumentieren der Programm-Binär-Struktur (das Einfügen von Befehlen, um die Profilbildung zu unterstützen), was die Profilbildung undurchsichtig macht, und eine Aufblähung des Binärcodes ergeben kann. Die Ausführung der eingefügten Instrumentierungsbefehle verlangsamt außerdem die gesamte Programmausführung, und sobald die Instrumentierung einge­ fügt worden ist, ist es schwierig, dieselbe in Laufzeit zu entfernen. Zusätzlich erfordert ein solches Verfahren eine ausreichend komplexe Analyse der Zählerwerte, um die heißen Pfade in dem Programm aufzudecken, so daß ein solches Ver­ fahren, während das Programm ausgeführt wird, schwierig während der Ausführung wirksam zu verwenden ist. All dies macht herkömmliche Schemata für eine Verwendung bei einem dynamischen Cache-Übersetzer uneffizient.
Heiße Spuren können ferner indirekt unter Verwendung einer Verzweigungs- oder Grundblock-Profilbildung aufgebaut werden (im Gegensatz zu einer Spurprofilbildung, bei der das Profil Spurinformationen direkt liefert). Bei diesem Schema wird einem Zähler das genommene Ziel jeder Verzweigung zugeordnet (es gibt andere Variationen hierfür, aber der Aufwand ist ähnlich). Wenn der dynamische Cache-Übersetzer den Programm­ code interpretiert, imkrementiert derselbe einen solchen Zähler jedesmal, wenn eine angenommene Verzweigung interpre­ tiert wird. Wenn ein Zähler einen voreingestellten Schwel­ lenwert überschreitet, wird sein entsprechender Block als heiß markiert. Diese heißen Blöcke können aneinandergereiht werden, um eine heiße Spur zu erzeugen. Eine solche Profil­ bildungstechnik weist die folgenden Nachteile auf:
  • 1. Es ist eine große Zählertabelle erforderlich, da die Anzahl von getrennten Blöcken, die von einem Programm ausgeführt werden, sehr groß sein kann.
  • 2. Der Aufwand für eine Spurauswahl ist hoch. Der Grund kann intuitiv erklärt werden: falls eine Spur aus N Blöcken besteht, wird das Schema so lange warten müssen, bis alle N Zähler ihre Schwellenwerte überschritten ha­ ben, bevor dieselben in eine Spur eingereiht werden kön­ nen. Dasselbe schlägt keinen Vorteil aus der Tatsache, daß, nachdem der erste Zähler heiß geworden ist, die nächsten N-1 Zähler sehr wahrscheinlich in einer schnel­ len Aufeinanderfolge heiß werden, wodurch es unnötig wird, mit dem Inkrementieren derselben und der Buchfüh­ rung bezüglich der durchlaufenen Blöcke, die gerade aus­ geführt worden sind, fortzufahren.
Die Aufgabe der vorliegenden Erfindung besteht darin, ein Verfahren zum Auswählen von heißen Spuren bei einem dyna­ mischen Übersetzer und einen dynamischen Übersetzer selbst zu schaffen, so daß eine Profilbildung mit weniger Aufwand durchgeführt werden kann.
Diese Aufgabe wird durch ein Verfahren gemäß Anspruch 1, 9 oder 10 und einen dynamischen Übersetzer gemäß Anspruch 5 gelöst.
Gemäß der vorliegenden Erfindung werden Spuren auf einer spekulativen Basis als heiß identifiziert und nicht basie­ rend auf vollständigen Spurprofildaten. Die Reihe von Blöcken, die an einer heißen Spuranfangbedingung beginnt und sich bis zu einer Spurendebedingung erstreckt, wird als eine heiße Spur identifiziert. Eine solche Spur wird ohne die Notwendigkeit, den Aufwand des tatsächlichen Messens, ob aufeinanderfolgende Blöcke eine ausreichende Anzahl von Malen ausgeführt worden sind, zu erfordern, um als heiß betrachtet zu werden, als heiß identifiziert.
Die Identifizierung dessen, aus was sich die Spur zusammen­ setzt, wird durchgeführt, während die Spur ausgeführt wird. Eine Übersetzung der Spur wird ausgegeben, wenn die Spur ausgeführt wird, ist für eine Optimierung bei einem System, das eine Optimierung durchführt, verfügbar und wird in dem Code-Cache-Speicher erfaßt.
Eine besonders nützliche Spuranfangbedingung liegt vor, wenn die letzte interpretierte Verzweigung rückwärts genommen wurde. Eine nützliche Spurendebedingung liegt vor, wenn eine der folgenden drei Bedingungen erfüllt ist: (1) die letzte interpretierte Verzweigung wurde rückwärts genommen, (2) die Anzahl von interpretierten Verzweigungen überschritt einen Schwellenwert, oder (3) die Anzahl von nativen Befehlen, die für die Spur ausgegeben wurden, überschritt einen weiteren Schwellenwert.
Folglich muß gemäß der vorliegenden Erfindung eine Profil­ bildung lediglich an bestimmten wohldefinierten Programm­ adressen, wie z. B. den Zielen von rückwärts genommenen Verzweigungen, durchgeführt werden, und es müssen nicht komplizierte Profilbildungstechniken mit einem höheren Auf­ wand zum Identifizieren von Programm-Hot-Spots in Laufzeit verwendet werden. Wenn eine solche Adresse heiß wird (d. h. ihr zugeordneter Zähler einen Schwellenwert überschreitet), wird die anschließende Sequenz von ausgeführten Blöcken (oder die Spur) spekulativ als ein heißer Pfad ausgewählt.
Dieses Schema wählt spekulativ die anschließende Sequenz von interpretierten Blöcken, die bestimmten heißen Verzweigungs­ zielen - insbesondere bestimmten Verzweigungszielen, die wahrscheinlich Schleifenanfangsblöcke sind - folgen, als eine heiße Spur aus. Sogar obwohl dieses Schema keine müh­ same Profilbildung umfaßt, kann die Qualität der Spuren, die durch diese Technik ausgewählt werden, exzellent sein. Wieso dieses Schema effektiv ist, kann man folgendermaßen verste­ hen: Sequenzen von heißen Blöcken sind häufig korreliert; bei einem laufenden Programm tendieren vollständige Pfade und nicht ein unverbundener Satz von Blöcken dazu, heiß zu werden.
Die vorliegende Erfindung liefert eine Vorrichtung für eine Spurauswahl mit einem reduzierten Profilbildungsaufwand.
Ein weiterer Vorteil der vorliegenden Erfindung besteht darin, daß eine Spur sogar dann aufgebaut werden kann, wenn dieselbe ungerichtete Verzweigungen enthält (Verzweigungen, deren Ergebnisse lediglich dann bekannt sind, wenn die Ver­ zweigung ausgeführt wird, und die nicht durch einfaches Decodieren des Verzweigungsbefehls bestimmt werden können). Im Gegensatz dazu ist es für Spuraufbauschemata, die auf Verzweigungsvorhersageinformationen beruhen, ungünstig, un­ gerichtete Verzweigungen zu handhaben, da es keinen ein­ fachen Weg gibt, um das Ergebnis solcher Verzweigungen vor­ herzusagen.
Ein weiterer Vorteil der Erfindung besteht darin, daß der Speicher, der für die Speicherung von Zählern erforderlich ist, verglichen zu herkömmlichen Profilbildungsschemata, die auf einer Verzweigungs- oder Grundblockzählung basieren, kleiner, da es bei der vorliegenden Erfindung nicht erfor­ derlich ist, den Zählwert für jeden Block oder für jede Ver­ zweigung zu überwachen.
Bevorzugte Ausführungsbeispiele der vorliegenden Erfindung werden nachfolgend bezugnehmend auf die beiliegenden Zeich­ nungen näher erläutert. Es zeigen:
Fig. 1 die Komponenten eines dynamischen Übersetzers, wie z. B. eines Übersetzers, bei dem die vorliegende Erfindung verwendet werden kann;
Fig. 2 einen Fluß von Operationen bei einer Implementie­ rung eines dynamischen Übersetzers, der die vorlie­ gende Erfindung verwendet; und
Fig. 3 einen Programmfluß über vier Blöcke eines Program­ mes hinweg, der veranschaulicht, daß es mehrere unterschiedliche Spuren geben kann, die mit einem gemeinsamen Block beginnen.
Unter Bezugnahme auf Fig. 1 weist ein dynamischer Übersetzer einen Interpretierer 110 auf, der einen Eingangsbefehlsstrom 160 empfängt. Dieser "Interpretierer" stellt die Befehlsaus­ wertungsmaschine dar; er kann auf mehrere Weisen implemen­ tiert sein (z. B. als eine Software-Hol-Decodier-Auswerte- Schleife, ein Just-In-Time-Compiler (Zur-rechten-Zeit-Compi­ ler) oder sogar eine Hardware-CPU).
Bei einer Implementierung liegen die Befehle des Eingangsbe­ fehlsstroms 60 in demselben Befehlssatz wie demjenigen der Maschine vor, auf der der Übersetzer läuft (Nativ-zu-Nativ- Übersetzung). In dem Nativ-zu-Nativ-Fall ergibt sich der Hauptvorteil, der durch den Übersetzer erhalten wird, aus der dynamischen Optimierung 150, die der Übersetzer durch­ führen kann. Bei einer anderen Implementierung liegen die Eingangsbefehle in einem anderen Befehlssatz als demjenigen der nativen Befehle vor.
Der Spurauswähler 120 identifiziert Befehlsspuren, die in dem Code-Cache-Speicher 130 gespeichert werden sollen. Der Spurauswähler ist die Komponente, die für das Zuordnen von Zählern zu interpretierten Programmadressen, zum Bestimmen, wann der Interpretiererzustand hin- und hergeschaltet wer­ den soll (zwischen einem normalen Modus und einem Spurauf­ baumodus), und zum Bestimmen, wann eine "heiße Spur" erfaßt worden ist, verantwortlich ist.
Ein Großteil der Arbeit des dynamischen Übersetzers findet in einer Interpretierer-Spurauswähler-Schleife statt. Nach­ dem der Interpretierer 110 einen Block von Befehlen inter­ pretiert hat (d. h. bis zu einer Verzweigung), wird die Steuerung an den Spurauswähler 120 weitergegeben, um die Beobachtungen des Programmverhaltens durchzuführen, so daß derselbe Spuren für eine spezielle Verarbeitung und eine Plazierung in dem Cache-Speicher auswählen kann. Die Inter­ pretierer-Spurauswähler-Schleife wird so lange ausgeführt, bis eine der folgenden Bedingungen erfüllt ist: (a) ein Cache-Treffer tritt auf, wobei in diesem Fall die Steuerung in den Code-Cache-Speicher springt, oder (b) ein heißes Start-Einer-Spur bzw. ein heißer Spuranfang wird erreicht.
Wenn ein heißes Start-Einer-Spur vorgefunden wird, schaltet der Spurauswähler 120 den Zustand des Interpretierers 110 um, so daß der Interpretierer die Spurbefehle ausgibt, bis die entsprechende Spurendebedingung (Bedingung (b)) erfüllt ist. An diesem Punkt ruft der Spurauswähler den Spuropti­ mierer 150 auf. Der Spuroptimierer ist verantwortlich für das Optimieren der Spurbefehle für eine bessere Leistungs­ fähigkeit auf dem zugrundeliegenden Prozessor. Nachdem die Optimierung durchgeführt ist, gibt der Codegenerator 140 den Spurcode tatsächlich in den Code-Cache-Speicher 130 aus und springt zu dem Spurauswähler 120 zurück, um die Interpretie­ rer-Spurauswähler-Schleife fortzusetzen.
Fig. 2 stellt den Betrieb einer Implementierung eines dy­ namischen Übersetzers dar, der die vorliegende Erfindung verwendet. Die durchgezogenen Pfeile stellen einen Steue­ rungsfluß dar, während der gestrichelte Pfeil die Erzeugung von Daten darstellt. In diesem Fall sind die erzeugten "Da­ ten" tatsächlich ausführbare Sequenzen von Befehlen (Spu­ ren), die in dem Cache-Speicher 130 von übersetztem Code gespeichert werden.
Das Wirken des Interpretierers 110, 210, 245 in dem dyna­ mischen Übersetzer gemäß dem dargestellten Ausführungsbei­ spiel ist erweitert worden, so daß derselbe einen neuen Betriebszustand aufweist (im folgenden als "Spuraufbaumodus" bezeichnet): wenn sich derselbe in diesem neuen Zustand befindet, wird als ein Nebeneffekt der Interpretierung ein nativer Code für eine Spur ausgegeben. Für eine Nativ-zu- Nativ-Übersetzung beläuft sich dieser Prozeß des Ausgebens von Befehlen lediglich auf das Weiterleiten der relevanten Befehle von dem Eingangsbefehlsstrom 160. Für andere Über­ setzungen werden die Eingangsbefehle in native Befehle über­ setzt, wobei diese nativen Befehle in einem Puffer aufge­ zeichnet werden. Die übersetzten nativen Befehle werden daraufhin ausgeführt und dann ausgegeben - der Puffer von übersetzten Befehlen wird für eine weitere Verarbeitung (d. h. eine Optimierung 255 und Plazierung in den Cache-Speicher 260) verfügbar gemacht. Obwohl ein Block eine nützliche Ein­ heit zum Übersetzen, Ausführen und Ausgeben ist, kann der Interpretierer übersetzte Befehle in anderen Einheiten aus­ geben, und der Interpretierer kann die Übersetzungs-Aus­ führ-Schleife bezüglich einer Größe, wie z. B. einem Befehl oder einem Block) durchführen und übersetzte Befehle für eine weitere Verarbeitung in unterschiedlichen Einheiten (wie z. B. einem Block oder einer Spur) weiterleiten. Es sind ferner verschiedene alternative Implementierungen eines Interpretierers möglich, der übersetzte Befehle ausgibt.
Der native Code, der von dem Interpretierer 245 ausgegeben wird, ist bei dem nächsten Mal, wenn dieser Abschnitt des Programms ausgeführt wird, für eine Ausführung ohne die Notwendigkeit für eine Interpretation in dem Cache-Speicher 130 von übersetztem Code gespeichert (falls nicht Störfakto­ ren ergeben haben, daß dieser Code aus dem Cache-Speicher abgeräumt worden ist). In Fig. 2 ist der "Normal-Modus"- Betrieb des Interpretierers 110 bei 210 gezeigt, wobei der "Spuraufbaumodus"-Betrieb des Interpretierers bei 245 ge­ zeigt ist.
Der Spuraufbaumodus 245 des Interpretierers 110 wird bei der vorliegenden Erfindung als ein Mechanismus zum Identifizie­ ren der Erstreckung einer Spur ausgenutzt; der Spuraufbaumo­ dus erzeugt nicht nur Daten (Befehle), die in dem Cache- Speicher gespeichert werden sollen, sondern derselbe spielt ferner bei dem Spurauswahlprozeß selbst eine Rolle. Wie es im vorhergehenden beschrieben wurde, leitet die vorliegende Erfindung eine Spurauswahl basierend auf einer begrenzten Profilbildung ein: bestimmte Adressen, die Spuranfangbedin­ gungen erfüllen, werden überwacht, ohne daß die Notwendig­ keit besteht, Profildaten für vollständige Spuren beizube­ halten. Eine Spur wird basierend auf einer heißen Spuran­ fangbedingung ausgewählt. Diese Auswahl ist spekulativ, da die tatsächliche Spur, die ausgewählt wird, (und die be­ stimmt werden wird, während der Interpretierer in dem Spur­ aufbaumodus seinen Weg durch die Spur abarbeitet) nicht eine häufig ausgeführte sein muß, sogar obwohl dieselbe an einer häufig ausgeführten Startadresse beginnt. Zu dem Zeitpunkt, da eine Spur als heiß identifiziert wird (basierend darauf, daß der Ausführungszähler einen Schwellenwert überschrei­ tet), ist die Erstreckung der Befehle, die die Spur bilden, nicht bekannt. Der Prozeß, daß der Interpretierer Befehle ausgibt, ist es, was die Erstreckung der Spur festlegt; der Spuraufbaumodus wird verwendet, um die Spur während der Aus­ führung zu entwirren.
Bezugnehmend auf Fig. 3 sind beispielsweise vier Blöcke ei­ nes Programmes gezeigt, um zu veranschaulichen, wie eine Identifizierung eines Spuranfangspunktes nicht an sich eine Spur vollständig identifiziert. Ein Block A erfüllt die Spuranfangbedingung (derselbe ist das Ziel einer Rückwärts­ verzweigung von D). Bei vier Blöcken mit der Verzweigungsbe­ ziehung, die in Fig. 3 gezeigt ist, verwenden die folgenden Spuren gemeinschaftlich denselben Anfangspunkt (A): ABDC, ABD, ACD. Die Spur, der das Programm zu dem Zeitpunkt folgt, zu dem der Zähler für A heiß wird, ist die Spur, die für eine Speicherung in dem Cache-Speicher ansprechend darauf, daß der Zähler heiß wird, ausgewählt wird - es könnte jede dieser drei Spuren sein (in Wirklichkeit kann es mehr als drei mögliche Spuren geben, falls sich die Spuren über D hi­ naus erstrecken).
Bezugnehmend auf Fig. 2 beginnt der dynamische Übersetzer mit dem Interpretieren von Befehlen, bis eine genommene Ver­ zweigung interpretiert wird 210. An diesem Punkt wird eine Überprüfung durchgeführt, um zu erkennen, ob eine Spur, die an dem Ziel der genommenen Verzweigung beginnt, in dem Code-Cache-Speicher 215 existiert. Falls es eine solche Spur gibt (d. h. einen Cache-"Treffer"), wird die Steuerung an das vordere Ende dieser Version der Spur, die in dem Cache- Speicher 130 gespeichert ist, übergeben.
Wenn die Steuerung nach dem Ausführen der Befehle, die in dem Cache-Speicher 130 gespeichert sind, den Cache-Speicher über eine Ausgangverzweigung verläßt, wird ein Zähler, der dem Ausgangverzweigungsziel zugeordnet ist, als Teil der "Trampolin"-Befehlssequenz, die ausgeführt wird, um die Steuerung an den dynamischen Übersetzer zurückzugeben, in­ krementiert 235. Wenn die Spur für eine Speicherung in dem Cache-Speicher 130 gebildet wird, wird in der Spur für jede Ausgangverzweigung in der Spur ein Satz von Trampolinbe­ fehlen einbezogen. Diese Befehle (ferner bekannt als ein Übersetzungs-"Epilog") übergeben die Steuerung von den Befehlen in dem Cache-Speicher zurück an die Interpretie­ rer-Spurauswähler-Schleife. Dem Trampolin, das jeder Aus­ gangverzweigung entspricht, ist ein Ausgangverzweigungs­ zähler zugeordnet. Entsprechend der Speicherung für die Trampulinbefehle für eine Cache-mäßig gespeicherte Spur wird die Speicherung für die Spurausgangzähler ebenfalls automa­ tisch zugewiesen, wenn der native Code für die Spur in den Cache-Speicher von übersetztem Code ausgegeben wird. Bei dem dargestellten Ausführungsbeispiel werden aus Übersichtlich­ keitsgründen die Ausgangzähler mit den Trampolinbefehlen gespeichert; der Zähler könnte jedoch auch anderswo ge­ speichert werden, wie z. B. in einem Array von Zählern.
Wiederum bezugnehmend auf 215 in Fig. 2 wird, falls, wenn der Cache-Speicher auf eine Spur hin, die an dem Ziel der genommenen Verzweigung beginnt, untersucht wird, keine sol­ che Spur in dem Cache-Speicher existiert, eine Bestimmung durchgeführt, ob eine "Spuranfang"-Bedingung existiert 230. Bei dem dargestellten Ausführungsbeispiel liegt Spuran­ fangbedingung dann vor, wenn die soeben interpretierte Ver­ zweigung eine rückwärts genommene Verzweigung war. Alterna­ tiv könnte ein System unterschiedliche Spuranfangbedingungen verwenden, die mit rückwärts genommenen Verzweigungen kombi­ niert sind oder dieselben nicht umfassen: Prozeduraufruf- Befehle, Ausgänge aus dem Code-Cache-Speicher, Systemauf­ ruf-Befehle oder Maschinenbefehl-Cache-Fehlgriffe (falls die Hardware eine solche Einrichtung zum Nachverfolgen solcher Dinge aufweist).
Eine rückwärts genommene Verzweigung ist eine nützliche Spuranfangbedingung, da dieselbe die Beobachtung ausnutzt, daß das Ziel einer rückwärts genommenen Verzweigung sehr wahrscheinlich (obwohl nicht notwendigerweise) der Start einer Schleife ist. Da die meisten Programme eine erhebliche Zeitdauer in Schleifen verbringen, sind Schleifenanfangs­ blöcke gute Kandidaten für mögliche Hot-Spot-Eintritte. Da es ferner üblicherweise weitaus weniger Schleifenanfangs­ blöcke in einem Programm als Ziele von genommenen Verzwei­ gungen gibt, wird die Anzahl von Zählern und die Zeitdauer, die zum Aktualisieren der Zähler verwendet wird, erheblich reduziert, wenn man sich auf die Ziele von rückwärts genom­ menen Verzweigungen (die wahrscheinlich Schleifenanfangs­ blöcke sind) und nicht auf alle Verzweigungsziele konzen­ triert.
Falls die Spuranfangbedingung nicht erfüllt ist, tritt die Steuerung neu in den Grundinterpretiererzustand ein, wobei die Interpretation fortschreitet. In diesem Fall besteht keine Notwendigkeit dafür, einen Zähler beizubehalten; eine Zählerinkrementierung findet lediglich dann statt, falls eine Spuranfangbedingung erfüllt ist. Dies steht im Gegen­ satz zu herkömmlichen dynamischen Übersetzerimplementie­ rungen, die Zähler für jedes Verzweigungsziel beibehalten. Bei dem dargestellten Ausführungsbeispiel werden lediglich den Adressen der Ziele der rückwärts genommenen Verzweigun­ gen und der Ziele von Verzweigungen, die den Cache-Speicher von übersetztem Code verlassen, Zähler zugeordnet; folglich ermöglicht die vorliegende Erfindung einem System, weniger Zählerspeicherung zu verwenden, und weniger Zählerinkremen­ tierungsaufwand zu erfordern.
Falls die Bestimmung, ob eine "Spuranfang"-Bedingung vor­ liegt 230, ergibt, daß die Spuranfangbedingung erfüllt ist, wird, falls kein Zähler für das Ziel existiert, ein Zähler erzeugt, oder, falls ein Zähler für das Ziel existiert, die­ ser Zähler inkrementiert.
Falls der Zählerwert für das Verzweigungsziel den Heiß- Schwellenwert 240 nicht überschreitet, tritt die Steuerung in den Grundinterpretiererzustand neu ein, wobei die Inter­ pretation fortschreitet 210.
Falls der Zählerwert einen Heiß-Schwellenwert 240 über­ schreitet, ist dieses Verzweigungsziel der Beginn dessen, was als eine heiße Spur erachtet wird. An diesem Punkt wird der Zählerwert nicht länger benötigt, wobei dieser Zähler wieder verwendet werden kann (alternativ könnte der Zähler­ speicher für eine Verwendung für andere Zwecke neu bean­ sprucht werden). Dies stellt einen Vorteil über Profilbil­ dungsschemata dar, die das Instrumentieren der Binär-Struk­ tur umfassen.
Da die Profildaten, die durch die Spuranfangzähler gesammelt werden, während der Ausführung verwendet werden (während das Programm ausgeführt wird), können diese Zähler neu verwendet werden, wenn ihre Informationen nicht mehr erforderlich sind; insbesondere kann, sobald ein Spuranfangzähler heiß geworden ist, und verwendet worden ist, um eine Spur für eine Speicherung in dem Cache-Speicher auszuwählen, dieser Zähler neu verwendet werden. Das dargestellte Ausführungs­ beispiel weist eine Tabelle von Spuranfangzählern mit einer festen Größe auf. Die Tabelle ist assoziativ - auf jeden Zähler kann mittels der Spuranfangadresse zugegriffen wer­ den, für die der Zähler zählt. Wenn ein Zähler für eine spe­ zielles Start-Einer-Spur neu verwendet werden soll, wird dieser Eintrag in der Tabelle einer Frei-Liste hinzugefügt, oder auf andere Weise als frei markiert.
Je niedriger der Schwellenwert ist, desto weniger Zeit wird bei dem Interpretierer aufgewendet, und desto größer ist die Anzahl von Start-von-Spuren, die möglicherweise heiß werden. Dies ergibt eine größere Anzahl von Spuren, die in den Code-Cache-Speicher erzeugt werden (und desto spekulativer ist die Auswahl von heißen Spuren), und die wiederum den Druck auf die Code-Cache-Ressourcen und folglich den Aufwand zum Verwalten des Code-Cache-Speichers erhöhen können. Ande­ rerseits gilt, je höher der Schwellenwert ist, desto größer der Interpretationsaufwand (z. B. das Zuweisen und das In­ krementieren von Zählern, die den Start-von-Spuren zugeord­ net sind). Folglich muß die Auswahl des Schwellenwertes diese zwei Kräfte ausgleichen. Sie hängt ferner von dem tat­ sächlichen Interpretations- und Code-Cache-Verwaltungs-Auf­ wand bei der speziellen Implementierung ab. Bei unserer spezifischen Implementierung, bei der der Interpretierer als eine Software-Hol-Decodier-Evaluier-Schleife in C geschrie­ ben worden ist, wurde ein Schwellenwert von 50 als der beste Kompromiß ausgewählt.
Falls der Zählerwert einen Heiß-Schwellenwert 240 über­ schreitet, wird, wie es im vorhergehenden angezeigt wurde, die Adresse, die diesem Zähler entspricht, als der Start einer heißen Spur erachtet. Zu dem Zeitpunkt, da die Spur als heiß identifiziert ist, bleibt immer noch die Er­ streckung der Spur zu bestimmen (durch die Spurendebedin­ gung, die im folgenden beschrieben wird). Es wird ferner darauf hingewiesen, daß die Auswahl der Spur als "heiß" ebenfalls spekulativ ist, nämlich darin, daß lediglich der Anfangsblock der Spur tatsächlich bemessen worden ist, heiß zu sein.
An dieser Stelle wechselt der Interpretierer von dem Nor­ mal-Modus 210 zu dem Spuraufbaumodus 245 über. In diesem Modus fährt die Interpretation, wie es im vorhergehenden beschrieben wurde, fort, ausgenommen darin, daß, während die Befehle interpretiert werden, die native Übersetzung der Befehle ebenfalls ausgegeben wird, so daß dieselben in dem Code-Cache-Speicher 130 gespeichert werden können. Der In­ terpretierer speichert die nativen Befehle in einen Puffer.
Wenn eine Spurendebedingung erreicht ist 250, wird der Puf­ fer mit der vollständigen Spur einem Optimierer 255 ausge­ händigt. Nach einer Optimierung werden die optimierten na­ tiven Befehle in den Cache-Speicher plaziert, wobei der Zählerspeicher, der der Anfangsadresse der Spur zugeordnet ist, wiederverwendet wird 260. (Alternativ könnte der Zäh­ lerspeicher sogleich benutzt werden, wenn bestimmt worden ist, daß der Zähler den Heiß-Schwellenwert überschreitet). Ferner wechselt der Interpretierer 110, ausgelöst durch die Spurendebedingung, zu dem normalen Interpretiererzustand zurück.
Eine Spurendebedingung ist einfach eine heuristische Aus­ sage, die aussagt, wann das Aufbauen der gegenwärtigen Spur gestoppt werden soll. Folgende Bedingungen sind Beispiele für einige mögliche Spurendebedingungen: das Beenden einer Spur, wenn eine rückwärts genommene Verzweigung erreicht wird, vermeidet ein unnötiges Entfalten von Zyklen und erfaßt ferner Schleifen; eine "Rückkehr"-Verzweigung kann eine nützliche Spurendebedingung sein, da dieselbe das Ende eines Prozedurkörpers anzeigen kann; im allgemeinen ist es wünschenswert ein Ende-Einer-Spur auszulösen, falls ein neues Start-Einer-Spur aufgetritt.
Bei dem dargestellten Ausführungsbeispiel ist die Spuren­ debedingung erfüllt, wenn (a) eine rückwärts genommene Verzweigung interpretiert wird, oder (b) wenn seit dem Eintreten in den Spuraufbaumodus eine bestimmte Anzahl von Verzweigungsbefehlen interpretiert worden ist (bei dem dargestellten Ausführungsbeispiel beträgt diese Anzahl 20) (das Beschränken der Anzahl von Verzweigungen an der Spur nach oben hin begrenzt die Anzahl von Stellen, an denen die Steuerung die Spur verlassen kann - je größer die Anzahl von Verzweigungen ist, die die Spur verlassen können, desto geringer ist die Wahrscheinlichkeit, daß die gesamte Spur verwendet werden wird, und desto größer ist die Wahrschein­ lichkeit eines frühzeitigen Verlassens der Spur) oder (c) eine bestimmte Anzahl von nativen übersetzten Befehlen für die gegenwärtige Spur in den Code-Cache-Speicher ausgegeben worden ist. Die Grenze für die Anzahl von Befehlen in einer Spur ist ausgewählt, um übermäßig lange Spuren zu vermeiden. Bei dem dargestellten Ausführungsbeispiel sind dies 1024 Befehle, was es einer bedingten Verzweigung an der Spur ermöglicht, ihre Enden zu erreichen (dies folgt aus der An­ zahl von Versetzungsbits in dem Befehl der bedingten Ver­ zweigung auf dem PA-RISC-Prozessor, auf dem das dargestellte Ausführungsbeispiel implementiert ist).
Obwohl der Cache-Speicher groß genug proportioniert werden kann, so daß eine Ersetzung von Einträgen nicht erforderlich ist, wird typischerweise ein Ersetzungsschema verwendet. Ein Lösungsansatz besteht darin, den Cache-Speicher zu räumen, wenn derselbe voll ist und Platz für einen neuen Eintrag erforderlich ist. Ein weiterer Lösungsansatz, der Vorteile bietet, besteht jedoch darin, den Cache-Speicher basierend auf einem gewissen Anzeichen, daß sich der Arbeitssatz des Programms ändert, preemtiv zu räumen. Ein solcher preemtiver Lösungsansatz wird in der von der gleichen Anmelderin und am selben Tag eingereichten Patentanmeldung mit dem Titel "Eine preemtive Ersetzungsstrategie für einen dynamischen Cache- Speicher" beschrieben.
Wenn eine Spur aus dem Code-Cache-Speicher entfernt wird, wird der Speicher, der für die Zählerspeicherung für jede der Austrittsverzweigungen der Spur verwendet wird, automa­ tisch wiederverwendet. Folglich ist die Speicherung für die­ se Austrittsverzweigungzielzähler in diesem Sinne "frei", da dieselben nicht unabhängig zugewiesen werden müssen, und nicht wie die anderen Zähler, die den Zielen interpretierter Verzweigungen zugeordnet sind, verwaltet werden müssen (die­ jenigen Ziele, die Spuranfangbedingungen erfüllt haben, aber für die der zugeordnete Zähler den "Heiß"-Schwellenwert noch nicht überschritten hat); wie es im vorhergehenden erörtert wurde, werden die Austrittsverzweigungzielzähler als ein Teil des Erzeugens des Trampolins für die Austrittsverzwei­ gung zugewiesen.
Bei dem dargestellten Ausführungsbeispiel sind Fig. 1 und 2 wie folgt miteinander verwandt; einem Fachmann auf diesem Gebiet wird klar sein, daß diese Funktionen bei anderen Implementierungen auf andere Weisen organisiert werden kön­ nen. Der Interpretierer 210 implementiert 210 und 245. Der Codegeneratoreinrichtung 140 implementiert 260. Der Spurop­ timierer 150 implementiert 255. Der Spurauswähler 120 imple­ mentiert 215, 220, 230, 235, 240 und 250.
Das dargestellte Ausführungsbeispiel der vorliegenden Erfin­ dung ist als eine Software implementiert, die auf einem Allzweckcomputer läuft, und die vorliegende Erfindung ist insbesondere für eine Softwareimplementierung geeignet. Be­ züglich der Erfindung kann ferner eine Spezialzweckhardware nützlich sein (beispielsweise ein Hardware-"Interpretierer", eine Hardware, die das Sammeln von Profilbildungsdaten ver­ einfacht, oder eine Cache-Hardware).
Im vorhergehenden ist ein spezifisches Ausführungsbeispiel der Erfindung beschrieben worden. Zusätzliche Variationen werden Fachleuten auf diesem Gebiet offensichtlich sein. Obwohl beispielsweise die Erfindung in dem Kontext eines dynamischen Übersetzers beschrieben worden ist, kann die­ selbe ferner bei anderen Systemen verwendet werden, die Interpretierer oder Just-In-Time-Compilierer (JITs) verwen­ den. Die Erfindung könnte ferner bei anderen Systemen ver­ wendet werden, die jedes Nicht-native-System emulieren, wie z. B. bei einem Simulator. Folglich ist die Erfindung nicht auf die spezifischen Details und das dargestellte Ausfüh­ rungsbeispiel, das in dieser Beschreibung gezeigt und be­ schrieben wurde, beschränkt. Vielmehr ist es die Aufgabe der anhängigen Ansprüche, alle solche Variationen und Modifi­ kationen abzudecken, die in den Schutzbereich der Erfindung fallen.

Claims (11)

1. Verfahren zum Auswählen von heißen Spuren in einem Pro­ gramm, das übersetzt wird, bei einem dynamischen Über­ setzer, mit folgenden Schritten:
  • A) Dynamisches Zuordnen von Zählern zu Adressen in dem Programm, das übersetzt wird, bezüglich derer während der Programm-Übersetzung und -ausführung bestimmt wird, daß dieselben eine Spuranfangbe­ dingung (235) erfüllen;
  • B) wenn ein Befehl mit einem entsprechenden Zähler ausgeführt wird, Inkrementieren dieses Zählers (235); und
  • C) wenn ein Zähler einen Schwellenwert überschreitet, Bestimmen der speziellen Spur, die an der Adresse beginnt, die diesem Zähler entspricht, und die durch den Ausführungspfad definiert ist, der von dem Programm nach dieser speziellen Ausführung dieses Befehls eingeschlagen wird und sich fort­ setzt, bis eine Spurendebedingung erfüllt ist, und Identifizieren dieser Spur als eine heiße Spur (240, 245, 250).
2. Verfahren gemäß Anspruch 1, bei dem der dynamische Übersetzer einen Interpretierer aufweist, der zwischen einem Normalmodus und einem Spuraufbaumodus, bei dem der Interpretierer als ein Nebeneffekt der Interpreta­ tion native Befehle ausgibt, hin- und hergeschaltet werden kann, wobei das Verfahren ferner folgende Schritte aufweist:
  • A) wenn ein Zähler einen Schwellenwert überschreitet, Umschalten des Interpretierers in den Spuraufbau­ modus (245);
  • B) wenn sich der Interpretierer in dem Spuraufbaumo­ dus befindet, und eine Spurendebedingung erfüllt ist, Umschalten des Interpretierers in den Normal­ modus (250);
  • C) Verwenden der Befehle, die von dem Interpretierer ausgegeben werden, um die Spur zu bestimmen, die als eine heiße Spur (255) identifiziert werden soll.
3. Verfahren gemäß Anspruch 1 oder 2, bei dem ansprechend auf das Identifizieren einer Spur als eine heiße Spur der entsprechende Zähler wiederverwendet wird.
4. Verfahren gemäß einem der vorhergehenden Ansprüche, bei dem die Spuranfangbedingung erfüllt ist, wenn die zu­ letzt interpretierte Verzweigung rückwärts genommen wurde.
5. Ein dynamischer Übersetzer mit folgenden Merkmalen:
  • A) Zählern zum Speichern von Zählwerten der Anzahl, wie oft Befehle an Adressen ausgeführt werden, die den Zählern (235) zugeordnet sind;
  • B) einer Einrichtung zum Identifizieren der Adressen, die eine Spuranfangbedingung erfüllen, und zum Zu­ ordnen solcher Adressen zu Zählern (230);
  • C) eine Einrichtung zum Bestimmen, wenn ein Zähler einen Schwellenwert (240) überschreitet; und
  • D) einer Spuridentifizierungseinrichtung zum Identi­ fizieren einer Reihe von Befehlen, die nach dem Befehl an der Adresse, die dem Zähler zugeordnet ist, ausgeführt werden, als eine heiße Spur (245).
6. Dynamischer Übersetzer gemäß Anspruch 5, der ferner einen Interpretierer (210, 245) aufweist, der zwischen einem Normalmodus und einem Spuraufbaumodus, bei dem der Interpretierer als ein Nebeneffekt der Interpreta­ tion native Befehle ausgibt, hin- und hergeschaltet werden kann, wobei der Interpretierer ansprechend da­ rauf, daß ein Zähler einen Schwellenwert überschreitet, in den Spuraufbaumodus umgeschaltet wird, und wobei die Spuridentifizierungseinrichtung die ausgegebenen Befeh­ le bei ihrer Identifizierung einer heißen Spur verwen­ det.
7. Dynamischer Übersetzer gemäß Anspruch 5 oder 6, bei dem ansprechend auf das Identifizieren einer Spur als eine heiße Spur der entsprechende Zähler wiederverwendet wird.
8. Dynamischer Übersetzer gemäß einem der Ansprüche 5 bis 7, bei dem die Spuranfangbedingung erfüllt ist, wenn die zuletzt interpretierte Verzweigung rückwärts genom­ men wurde.
9. Verfahren zum Auswählen von heißen Spuren bei einem dy­ namischen Übersetzer, mit folgenden Schritten:
  • A) Beibehalten von Zählwerten für Adressen, die eine Spuranfangbedingung (235) erfüllen;
  • B) Erfassen, wenn einer dieser Zähler einen Schwel­ lenwert (240) überschreitet;
  • C) ansprechend darauf, daß ein Zähler einen Schwel­ lenwert überschreitet, Identifizieren der Befehle, die an der Adresse beginnen, der der Zähler zuge­ ordnet wurde, und sich fortsetzen, bis eine Spur­ endebedingung (245, 250) erreicht wird, als eine heiße Spur.
10. Verfahren zum Auswählen von heißen Spuren bei einem dy­ namischen Übersetzer mit einem Cache-Speicher, mit fol­ genden Schritten:
  • A) wenn eine Rückwärts-Verzweigung genommen wird, Er­ zeugen eines Zählers, falls kein solcher Zähler für das Verzweigungsziel existiert, und Inkremen­ tieren des Zählers (235), falls ein solcher Zähler existiert;
  • B) falls ein Zähler einen Schwellenwert überschrei­ tet, Speichern einer Übersetzung von derjenigen Befehlen, die beginnend an dem Verzweigungsziel, das dem Zähler zugeordnet ist, der den Schwel­ lenwert überschritten hat, ausgeführt werden und sich fortsetzen, bis eine Spurendebedingung er­ reicht wird (240, 245, 250), in dem Speicher.
11. Verfahren gemäß Anspruch 10, bei dem, wenn eine Über­ setzung in dem Cache-Speicher gespeichert wird, der entsprechende Zähler wiederverwendet wird.
DE10015675A 1999-05-14 2000-03-29 Spekulative Auswahl von heißen Spuren in einem dynamischen CACHE-Übersetzer mit geringem Aufwand Expired - Fee Related DE10015675B4 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/312,296 1999-05-14
US09/312,296 US6470492B2 (en) 1999-05-14 1999-05-14 Low overhead speculative selection of hot traces in a caching dynamic translator

Publications (2)

Publication Number Publication Date
DE10015675A1 true DE10015675A1 (de) 2000-11-23
DE10015675B4 DE10015675B4 (de) 2005-07-14

Family

ID=23210804

Family Applications (1)

Application Number Title Priority Date Filing Date
DE10015675A Expired - Fee Related DE10015675B4 (de) 1999-05-14 2000-03-29 Spekulative Auswahl von heißen Spuren in einem dynamischen CACHE-Übersetzer mit geringem Aufwand

Country Status (3)

Country Link
US (1) US6470492B2 (de)
DE (1) DE10015675B4 (de)
GB (1) GB2353377B (de)

Families Citing this family (59)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6954923B1 (en) 1999-01-28 2005-10-11 Ati International Srl Recording classification of instructions executed by a computer
US6826748B1 (en) 1999-01-28 2004-11-30 Ati International Srl Profiling program execution into registers of a computer
US7111290B1 (en) 1999-01-28 2006-09-19 Ati International Srl Profiling program execution to identify frequently-executed portions and to assist binary translation
US7013456B1 (en) * 1999-01-28 2006-03-14 Ati International Srl Profiling execution of computer programs
US7941647B2 (en) 1999-01-28 2011-05-10 Ati Technologies Ulc Computer for executing two instruction sets and adds a macroinstruction end marker for performing iterations after loop termination
US8127121B2 (en) 1999-01-28 2012-02-28 Ati Technologies Ulc Apparatus for executing programs for a first computer architechture on a computer of a second architechture
US8074055B1 (en) 1999-01-28 2011-12-06 Ati Technologies Ulc Altering data storage conventions of a processor when execution flows from first architecture code to second architecture code
US8121828B2 (en) 1999-01-28 2012-02-21 Ati Technologies Ulc Detecting conditions for transfer of execution from one computer instruction stream to another and executing transfer on satisfaction of the conditions
US6779107B1 (en) 1999-05-28 2004-08-17 Ati International Srl Computer execution by opportunistic adaptation
US6880152B1 (en) * 1999-10-13 2005-04-12 Transmeta Corporation Method of determining a mode of code generation
JP3356742B2 (ja) * 1999-11-17 2002-12-16 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラム実行方法
US20020066081A1 (en) * 2000-02-09 2002-05-30 Evelyn Duesterwald Speculative caching scheme for fast emulation through statically predicted execution traces in a caching dynamic translator
US6947884B2 (en) * 2000-03-02 2005-09-20 Texas Instruments Incorporated Scan interface with TDM feature for permitting signal overlay
US6571316B1 (en) * 2000-06-16 2003-05-27 Transmeta Corporation Cache memory array for multiple address spaces
WO2001096893A1 (en) 2000-06-16 2001-12-20 Transmeta Corporation Apparatus for controlling semiconductor chip characteristics
SE0002440D0 (sv) 2000-06-28 2000-06-28 Virtutech Ab Interpreter
US6725363B1 (en) * 2000-07-31 2004-04-20 Sun Microsystems, Inc. Method for filtering instructions to get more precise event counts
GB2366879B (en) * 2000-09-16 2005-02-16 Ibm Tracing the execution path of a computer program
US7757065B1 (en) * 2000-11-09 2010-07-13 Intel Corporation Instruction segment recording scheme
US7350200B2 (en) * 2001-03-29 2008-03-25 Intel Corporation Method and system of controlling dynamically compiled native code size
US6851040B2 (en) 2001-08-15 2005-02-01 Transmeta Corporation Method and apparatus for improving segmented memory addressing
US7496494B2 (en) * 2002-09-17 2009-02-24 International Business Machines Corporation Method and system for multiprocessor emulation on a multiprocessor host system
US7146607B2 (en) * 2002-09-17 2006-12-05 International Business Machines Corporation Method and system for transparent dynamic optimization in a multiprocessing environment
US8108843B2 (en) * 2002-09-17 2012-01-31 International Business Machines Corporation Hybrid mechanism for more efficient emulation and method therefor
US7953588B2 (en) * 2002-09-17 2011-05-31 International Business Machines Corporation Method and system for efficient emulation of multiprocessor address translation on a multiprocessor host
US9043194B2 (en) * 2002-09-17 2015-05-26 International Business Machines Corporation Method and system for efficient emulation of multiprocessor memory consistency
US7603704B2 (en) * 2002-12-19 2009-10-13 Massachusetts Institute Of Technology Secure execution of a computer program using a code cache
US7594111B2 (en) * 2002-12-19 2009-09-22 Massachusetts Institute Of Technology Secure execution of a computer program
US7114150B2 (en) * 2003-02-13 2006-09-26 International Business Machines Corporation Apparatus and method for dynamic instrumenting of code to minimize system perturbation
JP3992102B2 (ja) * 2003-06-04 2007-10-17 インターナショナル・ビジネス・マシーンズ・コーポレーション コンパイラ装置、コンパイル方法、コンパイラプログラム、及び記録媒体
US8239833B2 (en) * 2003-06-26 2012-08-07 Stmicroelectronics S.A. Statistical control of the integrity of a program
US20050149912A1 (en) * 2003-12-29 2005-07-07 Intel Corporation Dynamic online optimizer
US7236107B2 (en) * 2004-09-20 2007-06-26 Fujitsu Limited System and method for identifying optimal encoding for a given trace
GB2424092A (en) * 2005-03-11 2006-09-13 Transitive Ltd Switching between code translation and execution using a trampoline
US7735136B2 (en) * 2005-04-18 2010-06-08 Vmware, Inc. 0-touch and 1-touch techniques for improving the availability of computer programs under protection without compromising security
WO2006133222A2 (en) * 2005-06-07 2006-12-14 Vmware, Inc. Constraint injection system for immunizing software programs against vulnerabilities and attacks
EP1752874A1 (de) * 2005-07-19 2007-02-14 Alcatel Adaptives evolutionäres Computerprogramm
US7694281B2 (en) * 2005-09-30 2010-04-06 Intel Corporation Two-pass MRET trace selection for dynamic optimization
US7475231B2 (en) * 2005-11-14 2009-01-06 Texas Instruments Incorporated Loop detection and capture in the instruction queue
US9830174B2 (en) * 2005-12-22 2017-11-28 Synopsys, Inc. Dynamic host code generation from architecture description for fast simulation
WO2007095642A2 (en) * 2006-02-16 2007-08-23 The Regents Of The University Of California Dynamic incremental compiler and method
US8141051B2 (en) * 2006-12-29 2012-03-20 Intel Corporation Methods and apparatus to collect runtime trace data associated with application performance
US8490073B2 (en) * 2007-03-30 2013-07-16 International Business Machines Corporation Controlling tracing within compiled code
US8190652B2 (en) * 2007-12-06 2012-05-29 Intel Corporation Achieving coherence between dynamically optimized code and original code
US8332558B2 (en) * 2008-09-30 2012-12-11 Intel Corporation Compact trace trees for dynamic binary parallelization
US8549487B2 (en) * 2008-10-29 2013-10-01 International Business Machines Corporation Automated identification of redundant method calls
US8364461B2 (en) * 2009-11-09 2013-01-29 International Business Machines Corporation Reusing invalidated traces in a system emulator
US20110154289A1 (en) * 2009-12-18 2011-06-23 Sandya Srivilliputtur Mannarswamy Optimization of an application program
US8756581B2 (en) 2011-02-03 2014-06-17 International Business Machines Corporation Adaptive next-executing-cycle trace selection for trace-driven code optimizers
JP5614348B2 (ja) * 2011-03-18 2014-10-29 富士通株式会社 命令処理方法、命令処理装置、及び命令処理プログラム
US20130031537A1 (en) * 2011-07-28 2013-01-31 International Business Machines Corporation Specialized Function Implementation Using Code Frequency Profiling
US8549498B2 (en) * 2011-08-23 2013-10-01 International Business Machines Corporation Integration of trace selection and trace profiling in dynamic optimizers
JP5886450B2 (ja) * 2012-03-22 2016-03-16 インテル コーポレイション ハイブリッドのエミュレーション及びカーネル関数処理のシステム及び方法
CN104205088B (zh) * 2012-03-30 2018-07-24 英特尔公司 用于实现页级自动二进制转换的方法、装置、系统、和设备
US9703667B2 (en) * 2015-02-22 2017-07-11 International Business Machines Corporation Hardware-based edge profiling
CN105843664A (zh) * 2016-04-20 2016-08-10 中国工程物理研究院计算机应用研究所 一种动态二进制翻译中基于代码热度的翻译缓存管理方法
US10209764B2 (en) * 2016-12-20 2019-02-19 Intel Corporation Apparatus and method for improving power-performance using a software analysis routine
JP6358323B2 (ja) * 2016-12-28 2018-07-18 日本電気株式会社 情報処理装置、情報処理方法、およびプログラム
US10209962B2 (en) * 2017-02-06 2019-02-19 International Business Machines Corporation Reconstructing a high level compilable program from an instruction trace

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3707725A (en) * 1970-06-19 1972-12-26 Ibm Program execution tracing system improvements
US5751982A (en) 1995-03-31 1998-05-12 Apple Computer, Inc. Software emulation system with dynamic translation of emulated instructions for increased processing speed
US6219827B1 (en) * 1998-03-12 2001-04-17 Hewlett-Packard Company Trace ranking in a dynamic translation system
US6205545B1 (en) * 1998-04-30 2001-03-20 Hewlett-Packard Company Method and apparatus for using static branch predictions hints with dynamically translated code traces to improve performance
US6148437A (en) * 1998-05-04 2000-11-14 Hewlett-Packard Company System and method for jump-evaluated trace designation
US6189141B1 (en) * 1998-05-04 2001-02-13 Hewlett-Packard Company Control path evaluating trace designator with dynamically adjustable thresholds for activation of tracing for high (hot) activity and low (cold) activity of flow control
US6351844B1 (en) * 1998-11-05 2002-02-26 Hewlett-Packard Company Method for selecting active code traces for translation in a caching dynamic translator
US6237065B1 (en) * 1999-05-14 2001-05-22 Hewlett-Packard Company Preemptive replacement strategy for a caching dynamic translator

Also Published As

Publication number Publication date
DE10015675B4 (de) 2005-07-14
GB0011562D0 (en) 2000-06-28
US20020104075A1 (en) 2002-08-01
GB2353377B (en) 2003-09-10
GB2353377A (en) 2001-02-21
US6470492B2 (en) 2002-10-22

Similar Documents

Publication Publication Date Title
DE10015675A1 (de) Spekulative Auswahl von heißen Spuren in einem dynamischen CACHE-Übersetzer mit geringem Aufwand
DE10084556B4 (de) Optimierte Ausführung von statisch sehr wahrscheinlich vorhergesagten Verzweigungsbefehlen
DE19945992B4 (de) Dynamisch optimierender Objektcode-Übersetzer zur Architekturemulation und dynamisches optimierendes Objektcode-Übersetzungsverfahren
DE69820027T2 (de) Vorrichtung zur ausführung virtueller maschinenbefehle
DE112012000303B4 (de) Dynamische binäre Optimierung
DE69929936T2 (de) Verfahren und Vorrichtung zum Abrufen von nicht-angrenzenden Befehlen in einem Datenverarbeitungssystem
DE19781850B4 (de) Mikroprozessor zum spekulativen Ausführen von Befehlen aus mehreren von einem Verzweigungsbefehl angezeigten Befehlsströmen, Verfahren und Computersystem mit Mikroprozessor
DE10015676B4 (de) Verfahren zum Ersetzen von Einträgen in einem Befehls-Cache-Speicher
DE19527031C2 (de) Verzweigungsprozessor für ein Datenverarbeitungssystem und Verfahren zum Betreiben eines Datenverarbeitungssystems
EP0689694B1 (de) Verfahren zur maschinellen erzeugung von nebenläufig bearbeitbaren befehlsgruppen aus einem programm für superskalare mikroprozessoren
DE10121792C2 (de) Universelle Ladeadresse/Wertevorhersageschema
DE60014005T2 (de) Verfahren und Vorrichtung zur Befehlsvorabholung
DE69836902T2 (de) Auf variable instruktionen eingestellter computer
DE60313652T2 (de) Verfahren und gerät zur kontrolle der umwandlung von programm-kodes
DE69738188T2 (de) Verfahren und apparat für eine erhöhte genauigkeit bei der verzweigungsvorhersage in einem superskalaren mirkroprozessor
DE60131864T2 (de) Speichern von stapeloperanden in registern
DE19526007A1 (de) Horizontal partitionierter Befehls-Cache-Speicher
DE1934365B2 (de) Umschaltanordnung fuer eine multiprogramm-datenverarbeitungsanlage
DE69634315T2 (de) Verfahren und Gerät zur Verwendung eines Ladebefehls der keinen Fehler verursacht
DE4345028A1 (de) Vorrichtung zur Reduzierung von Verzögerungen aufgrund von Verzweigungen
DE19524402C2 (de) Programmausführungssteuereinrichtung mit einer Adressierbarkeit entsprechend einer M-reihigen Pseudo-Zufallszahlenfolge
DE19526008A1 (de) Vertikal partitionierter, primärer Befehls-Cache-Speicher
EP0721620B1 (de) Tracer-system zur fehleranalyse in laufenden realzeitsystemen
DE69626263T2 (de) System zur Zuteilung mehrerer Befehle ohne Verzweigungsunterbrechung in einem Pipelineprozessor
DE10103070A1 (de) System und Verfahren zum Finden und Prüfen der Gültigkeit des neulichsten Vorabladevorgangs für einen gegebenen Prüfladevorgang

Legal Events

Date Code Title Description
OP8 Request for examination as to paragraph 44 patent law
8127 New person/name/address of the applicant

Owner name: HEWLETT-PACKARD CO. (N.D.GES.D.STAATES DELAWARE),

8364 No opposition during term of opposition
8339 Ceased/non-payment of the annual fee