DE10015675B4 - 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 Download PDF

Info

Publication number
DE10015675B4
DE10015675B4 DE10015675A DE10015675A DE10015675B4 DE 10015675 B4 DE10015675 B4 DE 10015675B4 DE 10015675 A DE10015675 A DE 10015675A DE 10015675 A DE10015675 A DE 10015675A DE 10015675 B4 DE10015675 B4 DE 10015675B4
Authority
DE
Germany
Prior art keywords
track
hot
interpreter
counter
program
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 - Fee Related
Application number
DE10015675A
Other languages
English (en)
Other versions
DE10015675A1 (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

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Devices For Executing Special Programs (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

Verfahren zum spekulativen Auswählen von Sequenzen von Programmblöcken eines Programms als eine heiße Spur für eine dynamische Übersetzung, mit folgenden Schritten:
Interpretieren eines Eingangsbefehlsstroms (160);
Bestimmen, ob ein spezieller Befehl in dem Eingangsbefehlsstrom (160) einer Spuranfangsbedingung (230) genügt;
wenn dies so ist, Inkrementieren (235) eines Zählers, der dem Befehl zugeordnet ist;
Bestimmen (240), ob der Wert des Zählers einen Schwellenwert übersteigt;
wenn dies der Fall ist, Interpretieren (245) einer Sequenz von Programmblöcken des Eingangsbefehlsstroms, die dem speziellen Befehl folgt, zum Ausgeben nativer Befehle basierend darauf und Speichern der nativen Befehle in einem Puffer, zum Identifizieren der Sequenz als eine heiße Spur, ungeachtet dessen, ob die Sequenz von Programmblöcken tatsächlich eine häufig ausgeführte Spur ist; und
bei Erreichen einer Spurendebedingung, Aushändigen der Sequenz an einen Optimierer (255).

Description

  • Die vorliegende Erfindung bezieht sich auf Techniken zum Identifizieren von Computerprogrammabschnitten, die besonders häufig ausgeführt werden. Die vorliegende Erfindung ist insbesondere bei dynamischen Übersetzern nützlich, die Kandidatenabschnitte eines Codes für eine Cache-Speicherung und/oder Optimierung identifizieren müssen.
  • Dynamische Ü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, direkt 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 Architektur läuft). Ein dynamischer Übersetzer kann entworfen sein, um Befehle für eine Maschinenarchitektur (d. h. einen Befehlssatz) auf einer Maschine einer unterschiedlichen Architektur (d. h. mit einem unterschiedlichen Befehlssatz) auszuführen. Alternativ kann ein dynamischer Übersetzer Befehle 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. bestimmte Schleifen) in Laufzeit zu identifizieren, und verwenden einen Code-Cache-Speicher, um Übersetzungen dieser häufig ausgeführten Abschnitte zu speichern. Eine anschließende Ausführung dieser Abschnitte kann die Cache- mäßig gespeicherten Übersetzungen verwenden, wodurch der Aufwand zum Ausführen dieser Abschnitte des Programms reduziert wird.
  • Ein dynamischer Übersetzer kann Befehle in einem Befehlssatz nehmen und Befehle in einem unterschiedlichen Befehlssatz erzeugen. Oder ein dynamischer Übersetzer kann eine Optimierung durchführen: Erzeugen von Befehlen in demselben Befehlssatz wie demjenigen des ursprünglichen Befehlsstromes; folglich ist die dynamische Optimierung ein spezieller Nativ-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ührungsprofilbildungsschema ist, desto präziser die Hot-Spot-Identifizierung sein kann, und folglich (i) desto kleiner der übersetzte Code-Cache-Speicher-Platz sein kann, der erforderlich ist, um den kompakteren Satz von identifizierten Hot-Spots des Arbeitssatzes des laufenden Programms zu halten, und (ii) desto weniger Zeit auf gewendet wird, um Hot-Spots in einen nativen Code (oder in einen optimierten nativen Code) zu übersetzen. Falls keine spezielle Hardwareunterstützung für die Profilbildung vorgesehen ist, liegt allgemein der Fall vor, daß ein komplexeres Profilbildungsschema 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 jegliche 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 Profilbildungsaufwand (sowohl Speicherplatz für die Ausführungshäufigkeitszä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 Optimierungsmöglichkeit, die bei dem ausgewählten Hot-Spot verfügbar ist. Ein Block bietet einen viel geringeren Optimierungswirkungsbereich als eine Prozedur (und folglich können weniger Typen von Optimierungstechniken angewendet werden), obwohl ein Block einfacher zu optimieren ist, da demselben jeglicher Steuerungsfluß fehlt (Verzweigungen und Verbindungen).
  • 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 Prozeduren liegt, können Spuren mehrere Prozedurkörper durchlaufen, und können sogar vollständige Prozedurkörper enthalten. Spuren bieten einen ziemlich großen Optimierungswirkungsbereich, während dieselben immer noch einen einfachen Steuerungsfluß aufweisen, was das Optimieren derselben viel einfacher macht als das Optimieren einer Prozedur. Der einfache Steuerungsfluß ermöglicht ferner eine schnellere Optimiererimplementierung. Eine dynamische Spur kann sich sogar über mehrere Prozeduraufrufe und -Rücksprünge einschließlich dynamisch verbundener Bibliotheken (DLLs) erstrecken. Dies ermöglicht einem Optimierer, ein "Inlining" durchzuführen, was eine Optimierung ist, die redundante Aufruf- und Rücksprung-Verzweigungen entfernt, was die Leistungsfähigkeit wesentlich verbessern kann.
  • Ungünstigerweise ist der erforderliche Aufwand, um ein Profil von heißen Spuren unter Verwendung existierender Verfah ren (wie z. B. demjenigen, das in "Efficient Path Profiling", Proceedings of the 29th Symposium on Micro Architecture (MICRO-29), Dezember 1996, von T. Ball und J. Larus beschrieben wird) zu bilden, ohne eine Hardwareunterstü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 eingefü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 Verfahren, 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 Programmcode interpretiert, inkrementiert derselbe einen solchen Zähler jedesmal, wenn eine angenommene Verzweigung interpretiert wird. Wenn ein Zähler einen voreingestellten Schwellenwert ü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 Profilbildungstechnik 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 haben, bevor dieselben in eine Spur eingereiht werden können. 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 schnellen Aufeinanderfolge heiß werden, wodurch es unnötig wird, mit dem Inkrementieren derselben und der Buchführung bezüglich der durchlaufenen Blöcke, die gerade ausgeführt worden sind, fortzufahren.
  • Aus der US 5,751,982 A ist ein Verfahren bekannt, bei dem jedem Codeblock eines Programms ein Zähler zugeordnet wird, der bei jeder Ausführung des Codeblocks inkrementiert wird. Abhängig von dem Zähler für jeden einzelnen Block wird bestimmt, ob der Block häufig ausgeführt wird, d.h. ein heißer Block ist, um zu beurteilen, ob eine dynamische Übersetzung des Blocks gerechtfertigt ist.
  • Die Aufgabe der vorliegenden Erfindung besteht darin, ein Verfahren zum Auswählen von heißen Spuren für eine dynamische Übersetzung zu schaffen, so daß eine Profilbildung mit weniger Aufwand durchgeführt werden kann.
  • Diese Aufgabe wird durch ein Verfahren gemäß Anspruch 1 gelöst.
  • Gemäß der vorliegenden Erfindung werden Spuren auf einer spekulativen Basis als heiß identifiziert und nicht basierend 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 zusammensetzt, 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 Profilbildung lediglich an bestimmten wohldefinierten Programmadressen, 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 Aufwand 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 Verzweigungszielen – insbesondere bestimmten Verzweigungszielen, die wahrscheinlich Schleifenanfangsblöcke sind – folgen, als eine heiße Spur aus. Sogar obwohl dieses Schema keine mühsame 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 verstehen: 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 Verzweigung 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, ungerichtete Verzweigungen zu handhaben, da es keinen einfachen Weg gibt, um das Ergebnis solcher Verzweigungen vorherzusagen.
  • 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 ist, da es bei der vorliegenden Erfindung nicht erforderlich ist, den Zählwert für jeden Block oder für jede Verzweigung zu überwachen.
  • Bevorzugte Ausführungsbeispiele der vorliegenden Erfindung werden nachfolgend bezugnehmend auf die beiliegenden Zeichnungen näher erläutert. Es zeigen:
  • 1 die Komponenten eines dynamischen Übersetzers, wie z. B. eines Übersetzers, bei dem die vorliegende Erfindung verwendet werden kann;
  • 2 einen Fluß von Operationen bei einer Implementierung eines dynamischen Übersetzers, der die vorliegende Erfindung verwendet; und
  • 3 einen Programmfluß über vier Blöcke eines Programmes hinweg, der veranschaulicht, daß es mehrere unterschiedliche Spuren geben kann, die mit einem, gemeinsamen Block beginnen.
  • Unter Bezugnahme auf 1 weist ein dynamischer Übersetzer einen Interpretierer 110 auf, der einen Eingangsbefehlsstrom 160 empfängt. Dieser "Interpretierer" stellt die Befehlsauswertungsmaschine dar; er kann auf mehrere Weisen implementiert sein (z. B. als eine Software-Hol-Decodier-Auswerte-Schleife, ein Just-In-Time-Compiler (Zur-rechten-Zeit-Compiler) oder sogar eine Hardware-CPU).
  • Bei einer Implementierung liegen die Befehle des Eingangsbefehlsstroms 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 durchfü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 her-geschaltet werden soll (zwischen einem normalen Modus und einem Spuraufbaumodus), 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. Nachdem der Interpretierer 110 einen Block von Befehlen interpretiert 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 Interpretierer-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 Spuroptimierer 150 auf. Der Spuroptimierer ist verantwortlich für das Optimieren der Spurbefehle für eine bessere Leistungsfä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 Interpretierer-Spurauswähler-Schleife fortzusetzen.
  • 2 stellt den Betrieb einer Implementierung eines dynamischen Übersetzers dar, der die vorliegende Erfindung verwendet. Die durchgezogenen Pfeile stellen einen Steuerungsfluß dar, während der gestrichelte Pfeil die Erzeugung von Daten darstellt. In diesem Fall sind die erzeugten "Daten" tatsächlich ausführbare Sequenzen von Befehlen (Spuren), die in dem Cache-Speicher 130 von übersetztem Code gespeichert werden.
  • Das Wirken des Interpretierers 110, 210, 245 in dem dynamischen Übersetzer gemäß dem dargestellten Ausführungsbeispiel 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 Übersetzungen werden die Eingangsbefehle in native Befehle über setzt, wobei diese nativen Befehle in einem Puffer aufgezeichnet 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 Einheit zum Übersetzen, Ausführen und Ausgeben ist, kann der Interpretierer übersetzte Befehle in anderen Einheiten ausgeben, und der Interpretierer kann die Übersetzungs-Ausfü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örfaktoren ergeben haben, daß dieser Code aus dem Cache-Speicher abgeräumt worden ist). In 2 ist der "Normal-Modus"-Betrieb des Interpretierers 110 bei 210 gezeigt, wobei der "Spuraufbaumodus"-Betrieb des Interpretierers bei 245 gezeigt ist.
  • Der Spuraufbaumodus 245 des Interpretierers 110 wird bei der vorliegenden Erfindung als ein Mechanismus zum Identifizieren der Erstreckung einer Spur ausgenutzt; der Spuraufbaumodus 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 Spuranfangbedingungen erfüllen, werden überwacht, ohne daß die Notwendigkeit besteht, Profildaten für vollständige Spuren beizube halten. Eine Spur wird basierend auf einer heißen Spuranfangbedingung ausgewählt. Diese Auswahl ist spekulativ, da die tatsächliche Spur, die ausgewählt wird, (und die bestimmt werden wird, während der Interpretierer in dem Spuraufbaumodus 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 überschreitet), 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 Ausführung zu entwirren.
  • Bezugnehmend auf 3 sind beispielsweise vier Blöcke eines 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ärtsverzweigung von D). Bei vier Blöcken mit der Verzweigungsbeziehung, die in 3 gezeigt ist, verwenden die folgenden Spuren gemeinschaftlich denselben Anfangspunkt (A): ABCD, 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 hinaus erstrecken).
  • Bezugnehmend auf 2 beginnt der dynamische Übersetzer mit dem Interpretieren von Befehlen, bis eine genommene Verzweigung 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, inkrementiert 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 Trampolinbefehlen einbezogen. Diese Befehle (ferner bekannt als ein Übersetzungs-"Epilog") übergeben die Steuerung von den Befehlen in dem Cache-Speicher zurück an die Interpretierer-Spurauswähler-Schleife. Dem Trampolin, das jeder Ausgangverzweigung entspricht, ist ein Ausgangverzweigungszähler zugeordnet. Entsprechend der Speicherung für die Trampolinbefehle für eine Cache-mäßig gespeicherte Spur wird die Speicherung für die Spurausgangzähler ebenfalls automatisch 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 Übersichtlichkeitsgründen die Ausgangzähler mit den Trampolinbefehlen gespeichert; der Zähler könnte jedoch auch anderswo gespeichert werden, wie z. B. in einem Array von Zählern.
  • Wiederum bezugnehmend auf 215 in 2 wird, falls, wenn der Cache-Speicher auf eine Spur hin, die an dem Ziel der genommenen Verzweigung beginnt, untersucht wird, keine solche Spur in dem Cache-Speicher existiert, eine Bestimmung durchgeführt, ob eine "Spuranfang"-Bedingung existiert 230. Bei dem dargestellten Ausführungsbeispiel liegt eine Spuranfangbedingung dann vor, wenn die soeben interpretierte Verzweigung eine rückwärts genommene Verzweigung war. Alternativ könnte ein System unterschiedliche Spuranfangbedingungen verwenden, die mit rückwärts genommenen Verzweigungen kombiniert sind oder dieselben nicht umfassen: Prozeduraufruf- Befehle, Ausgänge aus dem Code-Cache-Speicher, Systemaufruf-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 Schleifenanfangsblöcke gute Kandidaten für mögliche Hot-Spot-Eintritte. Da es ferner üblicherweise weitaus weniger Schleifenanfangsblöcke in einem Programm als Ziele von genommenen Verzweigungen 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 genommenen Verzweigungen (die wahrscheinlich Schleifenanfangsblöcke sind) und nicht auf alle Verzweigungsziele konzentriert.
  • 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 Gegensatz zu herkömmlichen dynamischen Übersetzerimplementierungen, die Zähler für jedes Verzweigungsziel beibehalten. Bei dem dargestellten Ausführungsbeispiel werden lediglich den Adressen der Ziele der rückwärts genommenen Verzweigungen 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ählerinkrementierungsaufwand 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, dieser 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 Interpretation fortschreitet 210.
  • Falls der Zählerwert einen Heiß-Schwellenwert 240 überschreitet, 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ählerspeicher für eine Verwendung für andere Zwecke neu beansprucht werden). Dies stellt einen Vorteil über Profilbildungsschemata dar, die das Instrumentieren der Binär-Struktur 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ührungsbeispiel 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 werden, für die der Zähler zählt. Wenn ein Zähler für eine spezielles 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. Andererseits gilt, je höher der Schwellenwert ist, desto größer der Interpretationsaufwand (z. B. das Zuweisen und das Inkrementieren von Zählern, die den Start-von-Spuren zugeordnet sind). Folglich muß die Auswahl des Schwellenwertes diese zwei Kräfte ausgleichen. Sie hängt ferner von dem tatsächlichen Interpretations- und Code-Cache-Verwaltungs-Aufwand bei der speziellen Implementierung ab. Bei unserer spezifischen Implementierung, bei der der Interpretierer als eine Software-Hol-Decodier-Evaluier-Schleife in C geschrieben worden ist, wurde ein Schwellenwert von 50 als der beste Kompromiß ausgewählt.
  • Falls der Zählerwert einen Heiß-Schwellenwert 240 überschreitet, 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 Erstreckung der Spur zu bestimmen (durch die Spurendebedingung, 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 Normal-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 Interpretierer speichert die nativen Befehle in einen Puffer.
  • Wenn eine Spurendebedingung erreicht ist 250, wird der Puffer mit der vollständigen Spur einem Optimierer 255 ausgehändigt. Nach einer Optimierung werden die optimierten nativen 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ählerspeicher 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 Aussage, 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 Spurendebedingung 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 Wahrscheinlichkeit 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 Anzahl von Versetzungsbits in dem Befehl der bedingten Verzweigung 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, automatisch wiederverwendet. Folglich ist die Speicherung für diese 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 (diejenigen 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 Austrittsverzweigung zugewiesen.
  • Bei dem dargestellten Ausführungsbeispiel sind 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önnen. Der Interpretierer 210 implementiert 210 und 245. Der Codegeneratoreinrichtung 140 implementiert 260. Der Spuroptimierer 150 implementiert 255. Der Spurauswähler 120 implementiert 215, 220, 230, 235, 240 und 250.
  • Das dargestellte Ausführungsbeispiel der vorliegenden Erfindung ist als eine Software implementiert, die auf einem Allzweckcomputer läuft, und die vorliegende Erfindung ist insbesondere für eine Softwareimplementierung geeignet. Bezüglich der Erfindung kann ferner eine Spezialzweckhardware nützlich sein (beispielsweise ein Hardware-"Interpretierer", eine Hardware, die das Sammeln von Profilbildungsdaten vereinfacht, 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 dieselbe ferner bei anderen Systemen verwendet werden, die Interpretierer oder Just-In-Time-Compilierer (JITs) verwenden. Die Erfindung könnte ferner bei anderen Systemen verwendet 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ührungsbeispiel, das in dieser Beschreibung gezeigt und beschrieben wurde, beschränkt. Vielmehr ist es die Aufgabe der anhängigen Ansprüche, alle solche Variationen und Modifikationen abzudecken, die in den Schutzbereich der Erfindung fallen.

Claims (7)

  1. Verfahren zum spekulativen Auswählen von Sequenzen von Programmblöcken eines Programms als eine heiße Spur für eine dynamische Übersetzung, mit folgenden Schritten: Interpretieren eines Eingangsbefehlsstroms (160); Bestimmen, ob ein spezieller Befehl in dem Eingangsbefehlsstrom (160) einer Spuranfangsbedingung (230) genügt; wenn dies so ist, Inkrementieren (235) eines Zählers, der dem Befehl zugeordnet ist; Bestimmen (240), ob der Wert des Zählers einen Schwellenwert übersteigt; wenn dies der Fall ist, Interpretieren (245) einer Sequenz von Programmblöcken des Eingangsbefehlsstroms, die dem speziellen Befehl folgt, zum Ausgeben nativer Befehle basierend darauf und Speichern der nativen Befehle in einem Puffer, zum Identifizieren der Sequenz als eine heiße Spur, ungeachtet dessen, ob die Sequenz von Programmblöcken tatsächlich eine häufig ausgeführte Spur ist; und bei Erreichen einer Spurendebedingung, Aushändigen der Sequenz an einen Optimierer (255).
  2. Verfahren gemäß Anspruch 1, bei dem der Interpretierer zwischen einem Normalmodus und einem Spuraufbaumodus, bei dem der Interpretierer als ein Nebeneffekt der Interpretation die nativen Befehle ausgibt, hin- und hergeschaltet werden kann, wobei, wenn der Zähler den Schwellenwert überschreitet, der Interpretierer in den Spuraufbaumodus (245) umgeschaltet wird, und, wenn sich der Interpretierer in dem Spuraufbaumodus befindet, und die Spurendebedingung erfüllt ist (250), der Interpretierer in den Normalmodus umgeschaltet wird.
  3. Verfahren gemäß Anspruch 1 oder 2, bei dem ansprechend auf das Identifizieren einer Spur als eine heiße Spur der entsprechende Zähler zur Verwendung für eine andere Adresse, die eine Spuranfangsbedingung erfüllt, wiederverwendet wird.
  4. Verfahren gemäß einem der vorhergehenden Ansprüche, bei dem die Spuranfangbedingung erfüllt ist, wenn die zuletzt interpretierte Verzweigung rückwärts genommen wurde.
  5. Verfahren gemäß einem der Ansprüche 1 bis 4, bei dem die Spuranfangsbedingung eine Rückwärts-Verzweigung ist, und bei dem eine Übersetzung der heißen Spur in einem Cache-Speicher abgelegt wird.
  6. Verfahren gemäß Anspruch 5, bei dem, wenn eine Übersetzung in dem Cache-Speicher gespeichert wird, der entsprechende Zähler zur Verwendung für eine andere Adresse, die eine Spuranfangsbedingung erfüllt, wiederverwendet wird.
  7. Programm, das auf einem Computer läuft und dabei ein Verfahren nach einem der Ansprüche 1 bis 6 ausführt.
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 DE10015675A1 (de) 2000-11-23
DE10015675B4 true 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
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
US7013456B1 (en) * 1999-01-28 2006-03-14 Ati International Srl Profiling execution of computer programs
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
US8065504B2 (en) 1999-01-28 2011-11-22 Ati International Srl Using on-chip and off-chip look-up tables indexed by instruction address to control instruction execution in a processor
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
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
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
WO2001096893A1 (en) 2000-06-16 2001-12-20 Transmeta Corporation Apparatus for controlling semiconductor chip characteristics
US6571316B1 (en) * 2000-06-16 2003-05-27 Transmeta Corporation Cache memory array for multiple address spaces
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
US8108843B2 (en) * 2002-09-17 2012-01-31 International Business Machines Corporation Hybrid mechanism for more efficient emulation and method therefor
US7146607B2 (en) * 2002-09-17 2006-12-05 International Business Machines Corporation Method and system for transparent dynamic optimization in a multiprocessing environment
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
US7496494B2 (en) * 2002-09-17 2009-02-24 International Business Machines Corporation Method and system for multiprocessor emulation on a multiprocessor host system
US9043194B2 (en) * 2002-09-17 2015-05-26 International Business Machines Corporation Method and system for efficient emulation of multiprocessor memory consistency
US7594111B2 (en) * 2002-12-19 2009-09-22 Massachusetts Institute Of Technology Secure execution of a computer program
US7603704B2 (en) * 2002-12-19 2009-10-13 Massachusetts Institute Of Technology Secure execution of a computer program using a code cache
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
CN101278260B (zh) * 2005-06-07 2012-07-18 威睿公司 使软件程序免于弱点和攻击的约束注入方法
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
US20140222410A1 (en) * 2012-03-22 2014-08-07 Xiao Dong Lin Hybrid emulation and kernel function processing systems and methods
CN109032609A (zh) * 2012-03-30 2018-12-18 英特尔公司 用于实现页级自动二进制转换的硬件剖析机制
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

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5751982A (en) * 1995-03-31 1998-05-12 Apple Computer, Inc. Software emulation system with dynamic translation of emulated instructions for increased processing speed
EP0999498A2 (de) * 1998-11-05 2000-05-10 Hewlett-Packard Company Verfahren zur Auswahl von aktiven Codefolgen zur dynamischen Befehlsübersetzung

Family Cites Families (6)

* 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
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
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
US6148437A (en) * 1998-05-04 2000-11-14 Hewlett-Packard Company System and method for jump-evaluated trace designation
US6237065B1 (en) * 1999-05-14 2001-05-22 Hewlett-Packard Company Preemptive replacement strategy for a caching dynamic translator

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5751982A (en) * 1995-03-31 1998-05-12 Apple Computer, Inc. Software emulation system with dynamic translation of emulated instructions for increased processing speed
EP0999498A2 (de) * 1998-11-05 2000-05-10 Hewlett-Packard Company Verfahren zur Auswahl von aktiven Codefolgen zur dynamischen Befehlsübersetzung

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Young, R.C., Path-based Compilation, PhD Thesis, Division of Engineering and Applied Sciences, Har- vard University, Cambridge, USA, Januany 1998, S.1-37 (http://www.eecs.harvard.edu/hube/publica- tions/cyoung-thesis.ps)(recherchiert am 01.03.04)
Young, R.C., Path-based Compilation, PhD Thesis, Division of Engineering and Applied Sciences, Har-vard University, Cambridge, USA, Januany 1998, S.1-37 (http://www.eecs.harvard.edu/hube/publica- tions/cyoung-thesis.ps)(recherchiert am 01.03.04) *

Also Published As

Publication number Publication date
US6470492B2 (en) 2002-10-22
US20020104075A1 (en) 2002-08-01
GB2353377A (en) 2001-02-21
GB2353377B (en) 2003-09-10
GB0011562D0 (en) 2000-06-28
DE10015675A1 (de) 2000-11-23

Similar Documents

Publication Publication Date Title
DE10015675B4 (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
DE10015676B4 (de) Verfahren zum Ersetzen von Einträgen in einem Befehls-Cache-Speicher
DE3586635T2 (de) Vorausholungsanordnung fuer einen schnellpufferspeicher.
DE60014005T2 (de) Verfahren und Vorrichtung zur Befehlsvorabholung
DE69836902T2 (de) Auf variable instruktionen eingestellter computer
DE60032694T2 (de) Speicherrückforderungsverfahren
DE69322683T2 (de) Verfahren und Vorrichtung zur Durchführung eines pseudo-LRU Cachespeicherersetzungsschemas mit einer Verriegelungsfunktion
DE112012000303B4 (de) Dynamische binäre Optimierung
DE69906006T2 (de) Datenverarbeitungs-schaltung mit pufferspeicher
DE10121792C2 (de) Universelle Ladeadresse/Wertevorhersageschema
DE69909945T2 (de) Verfahren und Anordnung zur Korrelation von Profildaten dynamisch erzeugt durch ein optimiertes ausführbares Programm mit Quellcodeanweisungen
DE69738188T2 (de) Verfahren und apparat für eine erhöhte genauigkeit bei der verzweigungsvorhersage in einem superskalaren mirkroprozessor
DE19943938B4 (de) Dynamischer Daten-Vorabruf auf Basis eines Programmzähler- und Adressierungsmodus
DE3911465C2 (de) Verfahren zur automatischen Konfiguration technischer Systeme aus Komponenten
DE19526007A1 (de) Horizontal partitionierter Befehls-Cache-Speicher
DE2054835C2 (de) Steuereinrichtung in einem Prozessor einer Mehrprozessor-Datenverarbeitungsanlage
DE69327927T2 (de) Schnelles Vorausholen und Zuteilung von Befehlen mittels vorausschauender Anmerkungen von früher vorausgeholten
DE19945992A1 (de) Dynamisch optimierender Objektcode-Übersetzer zur Architekturemulation und dynamisches optimierendes Objektcode-Übersetzungsverfahren
DE69634315T2 (de) Verfahren und Gerät zur Verwendung eines Ladebefehls der keinen Fehler verursacht
DE10127198A1 (de) Vorrichtung und Verfahren zum Ermitteln einer physikalischen Adresse aus einer virtuellen Adresse unter Verwendung einer hierarchischen Abbildungsvorschrift mit komprimierten Knoten
DE1934365B2 (de) Umschaltanordnung fuer eine multiprogramm-datenverarbeitungsanlage
DE60034702T2 (de) Verfahren und vorrichtung zur verbesserung der wirksamkeit von kopierender speicherbereinigung
DE10002120A1 (de) Logikstruktur eines Adressumsetzpuffers
DE19524402C2 (de) Programmausführungssteuereinrichtung mit einer Adressierbarkeit entsprechend einer M-reihigen Pseudo-Zufallszahlenfolge

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