DE69735342T2 - Binärprogrammkonvertiergerät und -verfahren - Google Patents

Binärprogrammkonvertiergerät und -verfahren Download PDF

Info

Publication number
DE69735342T2
DE69735342T2 DE69735342T DE69735342T DE69735342T2 DE 69735342 T2 DE69735342 T2 DE 69735342T2 DE 69735342 T DE69735342 T DE 69735342T DE 69735342 T DE69735342 T DE 69735342T DE 69735342 T2 DE69735342 T2 DE 69735342T2
Authority
DE
Germany
Prior art keywords
instruction
executed
instruction blocks
blocks
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 - Lifetime
Application number
DE69735342T
Other languages
English (en)
Other versions
DE69735342D1 (de
Inventor
Yoshinobu Nakahara-ku Kawasaki-shi Hibi
Hidefumi Nakahara-ku Kawasaki-shi Nishi
Toshiki Nakahara-ku Kawasaki-shi Izuchi
Masaharu Nakahara-ku Kawasaki-shi Kitaoka
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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Publication of DE69735342D1 publication Critical patent/DE69735342D1/de
Application granted granted Critical
Publication of DE69735342T2 publication Critical patent/DE69735342T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • G06F8/4442Reducing the number of cache misses; Data prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/52Binary to binary

Landscapes

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

Description

  • Die vorliegende Erfindung betrifft eine binäre Programm-Konversions-Vorrichtung und ein Verfahren zum Konvertieren eines ursprünglichen binären Programms in ein neues binäres Programm, welches schneller in einem Computer läuft. Ferner betrifft die vorliegende Erfindung ein Programm-Aufzeichnungsmedium mit einem Programm, um zu erreichen, dass ein Computer wie eine solche binäre Programm-Konversions-Vorrichtung funktioniert.
  • Um die Leistung von Computersystemen zu verbessern, werden seit Jahren viele Bemühungen unternommen, um den Hauptspeicher zu beschleunigen. Jedoch hat die Entwicklung eines Cache-Speichers eine verbesserte Leistung des Computersystems ermöglicht, ohne den Hauptspeicher zu beschleunigen
  • Der Cache-Speicher ist ein kleiner, schneller Speicher, der zwischen dem Hauptspeicher und der CPU positioniert ist. In einem Computersystem mit dem Cache-Speicher wird, wenn ein Wort (eine Instruktion oder Daten) durch die CPU angefordert wird, überprüft, ob das angeforderte Wort in dem Cache-Speicher existiert. Falls das angeforderte Wort in dem Cache-Speicher existiert, wird das Wort in dem Cache-Speicher an die CPU weitergeleitet. Falls andererseits das angeforderte Wort nicht in dem Cache-Speicher existiert, wird ein Datenblock mit fester Größe, der ein Block oder eine Zeile genannt wird und das angeforderte Wort enthält, von dem Hauptspeicher abgerufen und in den Cache-Speicher platziert. Dann wird das angeforderte Wort, das in den Daten (Zeile) des Cache-Speichers enthalten ist, an die CPU weitergeleitet.
  • Das heißt, Programme neigen dazu, Instruktionen und Daten nochmals zu verwenden, welche sie kürzlich verwendet haben, und sie neigen auch dazu, Wörter zu verwenden, deren Adressen in einer kurzen Zeit nahe beieinander sind (es sei angemerkt, dass die vorhergehende Eigenschaft und die letzte Eigenschaft temporäre Referenzlokalität bzw. örtliche Referenzlokalität genannt werden). Das heißt, die Worte in dem Hauptspeicher, welche die CPU in naher Zukunft bei der Ausführung eines Programms anfordert, können bis zu einem gewissen Grade vorhergesagt werden.
  • Da der Cache-Speicher solche Wörter speichert, kann die CPU in dem Computer mit dem Cache-Speicher einen Großteil der Wörter erhalten, welche zur Ausführung eines Programms mit der Geschwindigkeit notwendig sind, welche nicht der Zugriffsgeschwindigkeit des Hauptspeichers, jedoch der Zugriffsgeschwindigkeit des Cache-Speichers entspricht. Als Folge arbeitet ein Computer mit einem Cache-Speicher mit der gleichen Geschwindigkeit wie ein System mit einem Hochgeschwindigkeits-Hauptspeicher und ohne einen Cache-Speicher.
  • Da ein Computer mit einem Cache-Speicher ferner einen Hochgeschwindigkeitsspeicher mit kleiner Kapazität benötigt, vermindert die Verwendung des Cache-Speichers die Kosten der Herstellung eines Computers mit einer bestimmten Leistung. Folglich sind neuere Computer mit Cache-Speichern ausgestattet.
  • Zusätzlich hat die immer weitere Verbreitung von Personalcomputern den Preis von Speichervorrichtungen gesenkt. Folglich ist die Modifikation eines Programms (Software), so dass die Trefferquote des Hauptspeichers zur Verbesserung der Leistung des Computers erhöht werden kann, kaum mehr signifikant. Da in einem Computer, in dem viele Speichervorrichtungen, die billig geworden sind, zur Aktualisierung eines Hauptspeichers einer großen Kapazität installiert sind, ist die Trefferquote des Hauptspeichers so hoch, dass sie nicht die Betriebsgeschwindigkeit beeinflusst.
  • Deshalb ist es zur Verbesserung der Leistung eines Computers mittels der Modifikation eines Programms effektiver, das Programm derart zu modifizieren, dass die Trefferquote des Cache-Speichers erhöht wird. Das heißt, es ist wichtiger, die Referenzlokalität von Programmen zu verbessern, um die Leistung des Cache-Speichers bis zu seinem Maximum auszudehnen.
  • Bis heute wird zur Verbesserung der Trefferquote des Cache-Speichers in einem bestimmten Computer ein Quellenprogramm durch einen Compiler, der für den Computer entwickelt ist, compiliert. Das heißt, um diese Recompilier-Technologie zu verwenden, muss jeder Programmverwender nicht nur die binären Programme behalten, welche in der Praxis verwendete Programme sind, sondern er muss auch ihre Quellenprogramme behalten.
  • Da die Verbesserung von Computer-Hardware sehr schnell ist und es Zeit in Anspruch nimmt, einen neuen Compiler entsprechend einer neuen Computer-Architektur zu entwickeln, kann ferner verbesserte Hardware entwickelt werden, bevor die Entwicklung des Compilers beendet ist. Das heißt, es gibt ein Problem, dass Korrespondenz mittels der konventionellen Recompilier-Technologie nicht mit der Weiterentwicklung der Hardware Schritt hält.
  • Aus diesen Gründen ist eine Programm-Konversions-Technologie erwünscht, welche ein Programm in ein neues Programm konvertieren kann, welches für einen Zielcomputer geeignet ist, ohne sein Quellenprogramm zu verwenden.
  • S. McFARLING.: "PROGRAM OPTIMIZATION FOR INSTRUCTION CACHES", COMPUTER ARCHITECTURE NEWS, US, ASSOCIATION FOR COMPUTING MACHINERY, NEW YORK, Band 17, Nr.2, 1. April 1989 (1989-04-01), Seiten 183–191, XP000065600 ISSN: 0163-5964, offenbart einen Algorithmus, der Profilinformation verwendet, um Programme im Speicher neu zu positionieren, so dass ein direkt abgebildeter Cache sich sehr ähnlich wie ein Operations-Cache verhält. Die Profilinformation (enthaltend grundlegende Block-Ausführungs-Zähler) ist mit einer Objektdatei kombiniert, um Struktur-Extraktion der Objektdatei auszuführen, was zu einem gerichteten azyklischen Graphen aus Schleifen-, Prozedur- und Elementar-Block-Knoten führt. Struktur-Kennzeichnungs- und Restrukturierungs-Schritte werden dann durchgeführt, um eine neue Objektdatei zu erzeugen.
  • Ausführungsformen der vorliegenden Erfindung können eine binäre Programm-Konversions-Vorrichtung und ein binäres Programm-Konversions-Verfahren bereitstellen, welche ein ursprüngliches binäres Programm in ein anderes binäres Programm konvertieren, welches mit hoher Geschwindigkeit in einem Computer läuft, ohne ein Quellenprogramm des ursprünglichen binären Programms zu verwenden.
  • Andere Ausführungsformen der vorliegenden Erfindung können ein Programm-Aufzeichnungsmedium bereitstellen mit einem Programm, welches erreicht, dass der Computer wie eine solche binäre Programm-Konversions-Vorrichtung funktioniert.
  • Gemäß einem ersten Aspekt der Erfindung wird eine binäre Programm-Konversions-Vorrichtung geschaffen, welche verwendet wird zum Konvertieren eines ersten binären Programms, welches aus einer Vielzahl von ersten Instruktionsblöcken besteht, in ein zweites binäres Programm, welches in einem Computer mit Cache-Speicher ausgeführt wird, umfassend:
    ein Erstellungsmittel zum Hinzufügen eines zusätzlichen Bereichs zu dem ersten binären Programm, wobei der zusätzliche Bereich eine Größe aufweist, welche einer Größe des Cache-Speichers entspricht; ein Ausführungsmittel zum Ausführen des ersten binären Programms;
    ein Generierungsmittel zum Generieren einer Information zu den ausgeführten Blöcken, welche erste Instruktionsblöcke angibt, die durch das Ausführungsmittel ausgeführt werden; und
    ein Erzeugungsmittel zum Erzeugen, basierend auf der Information zu den ausgeführten Blöcken, welche durch das Generierungsmittel generiert wird, des zweiten binären Programms, welches zweite Instruktionsblöcke enthält, welche der Vielzahl von ersten Instruktionsblöcken entsprechen, und welches bei seiner Ausführung in dem Computer verursacht, dass der Computer die zweiten Instruktionsblöcke, welche den ersten Instruktionsblöcken entsprechen, die durch das Ausführungsmittel ausgeführt werden, in dem Cache-Speicher speichert, und zwar nachdem die zweiten Instruktionsblöcke, welche den ausgeführten ersten Instruktionsblöcken entsprechen, in einen aufeinander folgenden Zeilenbereich in den zusätzlichen Bereich kopiert worden sind.
  • Somit konvertiert die binäre Programm-Konversions-Vorrichtung des ersten Aspektes ein binäres Programm (erstes binäres Programm) in ein neues binäres Programm (zweites binäres Programm), welches schnell in dem Computer mit dem Cache-Speicher läuft, und zwar durch Ausführen von Prozessen, welche die Neuanordnung von binären Codes beinhalten (ausgeführten Blöcken). Deshalb können gemäß dieser binären Programm-Konversions-Vorrichtung binäre Programme erhalten werden, welche für einen Computer mit einem Cache-Speicher geeignet sind, und zwar ohne die Verwendung (Verwaltung) ihrer Quellenprogramme.
  • Die binäre Programm-Konversions-Vorrichtung gemäß dem ersten Aspekt der Erfindung kann ferner umfassen einen Erstellungsteil und einen Steuerteil, Der Erstellungsteil erstellt Zeilendaten, welche Zeilen des Cache-Speichers angeben, welche zu verwenden sind, wenn das zweite binäre Programm, welches durch das Erzeugungsteil erzeugt wird, in dem Computer ausgeführt wird.
  • Der Steuerteil steuert den Ausführungsteil, so dass ein drittes binäres Programm ausgeführt wird, welches zunächst aus einer Vielzahl von dritten Instruktionsblöcken besteht. Dann steuert der Steuerteil den Generierungsteil, um eine zweite Information zu den ausgeführten Blöcken zu generieren, welche dritte Instruktionsblöcke angibt, welche durch den Ausführungsteil ausgeführt werden. Ferner steuert der Steuerteil den Erzeugungsteil, um ein viertes binäres Programm zu erzeugen, welches bei seiner Ausführung in dem Computer verursacht, dass der Computer vierte Instruktionsblöcke, welche den dritten Instruktionsblöcken entsprechen, die durch den Ausführungsteil ausgeführt werden, an unterschiedlicher. Orten in (oder auf Zeilen des) Cache-Speichers ausführt, und zwar ausschließlich der Zeilen, welche durch die Zeilendaten angegeben werden.
  • Gemäß der derart konstruierten binären Konversions-Vorrichtung können zwei binäre Programme (ein erstes und drittes binäres Programm), welche gleichzeitig ausgeführt werden, in neue zwei binäre Programme (ein zweites und ein viertes binäres Programm) konvertiert werden, welche mit hoher Geschwindigkeit in dem Computer laufen.
  • Die binäre Programm-Konversions-Vorrichtung kann ferner umfassen einen Erkennungsteil, der die Frequenz der Verwendung des Datenzugriffs jeder Zeile des Cache-Speichers durch Überwachen der laufenden Zustände des ersten binären Programms, welches durch den Ausführungsteil ausgeführt wird, erkennt, einen Auswahlteil, der basierend auf einem Erkennungsergebnis des Erkennungsteils Zeilen aus allen Zeilen des Cache-Speichers auswählt zur Verwendung zum Speichern der zweiten Instruktionsblöcke, welche den ersten Instruktionsblöcken entsprechen, welche durch den Ausführungsteil ausgeführt werden. In diesem Fall ist ein Erzeugungsteil vorgesehen, welcher das zweite binäre Programm erzeugt, welches bei seiner Ausführung in dem Computer verursacht, dass der Computer die zweiten Instruktionsblöcke speichert, welche den ersten Instruktionsblöcken entsprechen, welche durch den Ausführungsteil ausgeführt werden, und zwar an unterschiedlichen Positionen auf den Zeilen, welche durch den Auswahlteil ausgewählt werden.
  • Gemäß der derart konstruierten binären Konversions-Vorrichtung kann ein neues binäres Programm (zweites binäres Programm) erhalten werden, welches keinen oder wenig Konfliktfehler zwischen einem Instruktionszugriff und einem Datenzugriff erzeugt.
  • Wenn der Erzeugungsteil verwendet wird, der das zweite binäre Programm erzeugt, welches einen Teil umfasst, in dem die zweiten Instruktionsblöcke, welche den ersten Instruktionsblöcken entsprechen, die durch den Ausführungsteil ausgeführt werden, aufeinanderfolgend angeordnet werden, kann die binäre Programm-Konversions-Vorrichtung ferner derart konstruiert sein, dass ein Suchteil und ein Veränderungsteil hinzugefügt werden.
  • Der Suchteil ruft aus dem binären Programm, das durch den Erzeugungsteil erzeugt wird, einen zweiten Instruktionsblock ab, der an seinem Ende eine bedingte Verzweigungsinstruktion enthält, deren Verzweigungsziel für einen nächsten zweiten Instruktionsblock eingestellt ist. Der Veränderungsteil verändert eine Verzweigungsbedingung und das Verzweigungsziel der bedingten Verzweigungsinstruktion, so dass ein Übergang von dem zweiten Instruktionsblock, der durch den Suchteil aufgefunden wird, zu dem nächsten zweiten Instruktionsblock ohne Verzweigung stattfindet.
  • Gemäß der derart konstruierten binären Konversions-Vorrichtung kann ein neues binäres Programm (zweites binäres Programm) erhalten werden, welches mit einer höheren Geschwindigkeit läuft.
  • Es sei angemerkt, dass die binäre Konversions-Vorrichtung der vorliegenden Erfindung dadurch realisiert werden kann, dass ein entsprechendes Programm abläuft, welches in einem Programm-Medium in einem konventionellen Computer aufgezeichnet ist.
  • Gemäß einem zweiten Aspekt der Erfindung wird ein binäres Programm-Konversions-Verfahren geschaffen, welches verwendet wird zum Konvertieren eines ersten binären Programms, welches aus einer Vielzahl von ersten Instruktionsblöcken besteht, in ein zweites binäres Programm, welches in einem Computer mit einem Cache-Speicher ausgeführt wird, umfassend:
    einen Erstellungsschritt zum Hinzufügen eines zusätzlichen Bereichs zu dem ersten binären Programm, wobei der zusätzliche Bereich eine Größe aufweist, welche einer Größe des Cache-Speichers entspricht;
    einen Ausführungsschritt zum Ausführen des ersten binären Programms;
    einen Generierungsschritt zum Generieren einer Information zu ausgeführten Blöcken, welche erste Instruktionsblöcke angibt, welche in dem Ausführungsschritt ausgeführt werden; und
    einen Erzeugungsschritt zum Erzeugen, basierend auf der Information zu den ausgeführten Blöcken, welche in dem Generierungsschritt generiert wird, des zweiten binären Programms, welches zweite Instruktionsblöcke enthält, welche der Vielzahl von ersten Instruktionsblöcken des ersten binären Programms entsprechen, und welches bei seiner Ausführung in dem Computer verursacht, dass der Computer die zweiten Instruktionsblöcke, welche den ersten Instruktionsblöcken entsprechen, die in dem Ausfüh rungsschritt ausgeführt werden, in dem Cache-Speicher speichert, und zwar nachdem die Instruktionsblöcke, welche den ausgeführten ersten Instruktionsblöcken entsprechen, in einen aufeinanderfolgenden Zeilenbereich in den zusätzlichen Bereich kopiert worden sind.
  • Es ist möglich, ferner zu dem Programm-Konversions-Verfahren einen Erstellungsschritt und einen Steuerschritt hinzuzufügen. Der Erstellungsschritt beinhaltet einen Prozess zum Erstellen von Zeilendaten, welche Zeilen des Cache-Speichers angeben, welche zu verwenden sind, wenn das zweite binäre Programm, welches in dem Erzeugungsschritt erzeugt wird, in dem Computer ausgeführt wird. Der Steuerschritt beinhaltet Prozesse zum Steuern des Ausführungsschritts, um ein drittes binäres Programm auszuführen, welches aus einer Vielzahl von dritten Instruktionsblöcken besteht, und zum Steuern des Generierungsschritts, um eine zweite Information zu den ausgeführten Blöcken zu generieren, welche dritte Instruktionsblöcke angibt, welche in dem Ausführungsschritt ausgeführt werden, und zum Steuern des Erzeugungsschritts, um basierend auf der zweiten Information zu den ausgeführten Blöcken und den Zeilendaten ein viertes binäres Programm zu erzeugen, welches vierte Instruktionsblöcke enthält, welche der Vielzahl von dritten Instruktionsblöcken entsprechen, und welches bei seiner Ausführung in dem Computer verursacht, dass der Computer die vierten Instruktionsblöcke speichert, welche den dritten Instruktionsblöcken entsprechen, welche durch das Ausführungsmittel ausgeführt werden, und zwar an unterschiedlichen Positionen des Cache-Speichers aus schließlich der Zeilen, die durch die Zeilendaten angegeben werden.
  • Es ist möglich, ferner dem binären Programm-Konversions-Verfahren gemäß dem ersten Aspekt der Erfindung einen Erkennungsschritt und einen Auswahlschritt hinzuzufügen.
  • Der Erkennungsschritt beinhaltet einen Prozess zum Erkennen der Frequenz zur Verwendung für den Datenzugriff jeder Zeile des Cache-Speichers durch Überwachen der laufenden Zustände des ersten binären Programms, welches in dem Ausführungsschritt ausgeführt wird. Der Auswahlschritt beinhaltet einen Prozess zum Auswählen von Zeilen aus allen Zeilen des Cache-Speichers zur Verwendung für das Speichern von zweiten Instruktionsblöcken basierend auf einem Erkennungsergebnis des Erkennungsschritts.
  • Im übrigen wird in diesem Fall ein Erzeugungsschritt verwendet, der das Erzeugen des zweiten binären Programms beinhaltet, welches bei seiner Ausführung in dem Computer verursacht, dass der Computer zweite Instruktionsblöcke speichert, welche den ersten Instruktionsblöcken entsprechen, welche in dem Ausführungsschritt ausgeführt werden, und zwar an unterschiedlichen Positionen aus den Zeilen, welche in dem Auswahlschritt ausgewählt werden.
  • Es ist wünschenswert, einen Suchschritt und einen Veränderungsschritt dem binären Programm-Konversions-Verfahren hinzuzufügen, welches einen Erzeugungsschritt verwendet, der einen Prozess zum Erzeugen des zweiten binären Programms beinhaltet, welches einen Teil umfasst, in dem die zweiten Instruktionsblöcke, welche den ersten Instruktionsblöcken entsprechen, welche in dem Ausführungsschritt ausgeführt werden, der Reihe nach (aufeinanderfolgend) angeordnet sind.
  • Der Suchschritt umfasst einen Prozess zum Suchen eines zweiten Instruktionsblocks, der in einer bedingten Verzweigungsinstruktion endet, deren Verzweigungsziel für einen nächsten zweiten Instruktionsblock eingestellt ist. Der Veränderungsschritt umfasst einen Prozess zum Verändern einer Verzweigungsbedingung und des Verzweigungsziels der bedingten Verzweigungsinstruktion, so dass ein Übergang von dem zweiten Instruktionsblock, der in dem Suchschritt aufgefunden wird, zu dem nächsten zweiten Instruktionsblock ohne Verzweigung stattfindet.
  • Es wird beispielhaft auf die beigefügten Zeichnungen Bezug genommen, in denen:
  • 1 ein erklärendes Diagramm ist, welches eine Konstruktion der binären Programm-Konversions-Vorrichtung in einer Ausführungsform der vorliegenden Erfindung zeigt;
  • 2 ein erklärendes Diagramm einer Text-Tabelle ist, welche durch einen Ablauf-Analysierer in der binären Programm-Konversions-Vorrichtung der Ausführungsform erzeugt wird;
  • 3 ein erklärendes Diagramm einer Daten-Verwendungs-Zeilen-Tabelle ist, welche durch den Ablauf-Analysierer erzeugt wird;
  • 4 ein erklärendes Diagramm einer Zeilentabelle ist, welche durch einen Cache-Zuordner in der binären Programm-Konversions-Vorrichtung erzeugt wird;
  • 5 ein erklärendes Diagramm eines binären Programms ist, welches durch die binäre Programm-Konversions-Vorrichtung zu konvertieren ist;
  • 6 ein erklärendes Diagramm ist, welches das Prinzip des Betriebsverfahrens der binären Programm-Konversions-Vorrichtung zeigt;
  • 7 ein erklärendes Diagramm ist, welches die erste Hälfte des Betriebsverfahrens der binären Programm-Konversixxons-Vorrichtung bei der Konvertierung von zwei binären Programmen zeigt, welche gleichzeitig ausgeführt werden;
  • 8 ein erklärendes Diagramm ist, welches die letzte Hälfte des Betriebsverfahrens der binären Programm-Konversions-Vorrichtung beim Konvertieren von zwei binären Programmen zeigt, welche gleichzeitig ausgeführt werden;
  • 9 ein Flussdiagramm ist, welches das Betriebsverfahren des Cache-Zuordners zeigt;
  • 10 ein Flussdiagramm ist, welches das gesamte Betriebsverfahren eines Objektcode-Konverters in der binären Programm-Konversions-Vorrichtung zeigt;
  • 11 ein Flussdiagramm eines Block-Kopierprozesses zeigt, der durch den Objektcode-Konverter ausgeführt wird;
  • 12 ein Flussdiagramm eines Kopierprozesses ist, der durch den Objektcode-Konverter ausgeführt wird;
  • 13 ein Flussdiagramm eines Verzweigungs-Bedingungs-Umkehrprozesses ist, der durch den Objektcode-Konverter ausgeführt wird;
  • 14 ein Flussdiagramm eines CTI-Repositionierungs-Prozesses ist, der durch den Objektcode-Konverter ausgeführt wird;
  • 15 ein Flussdiagramm eines Verzweigungs-Vorhersage-Prozesses ist, der durch den Objektcode-Konverter ausgeführt wird;
  • 16 ein Flussdiagramm eines Repositionierungs-Prozesses ist, der durch den Objektcode-Konverter ausgeführt wird;
  • 17 ein erklärendes Diagramm ist, welches das Prinzip des Betriebsverfahrens der binären Programm-Konversions-Vorrichtung bei der Konvertierung von zwei binären Programmen zeigt, welche gleichzeitig ausgeführt werden;
  • 18 ein erklärendes Diagramm ist, welches zeigt, wie der Cache-Speicher verwendet wird, wenn zwei ausführbare Objektprogramme durch die binäre Programm-Konversions-Vorrichtung generiert werden;
  • 1926 Teilprogrammlisten sind, um das Betriebsverfahren der binären Programm-Konversions-Vorrichtung zu erklären;
  • 27A, 27B erklärende Diagramme sind, welche zeigen, wie der Cache-Speicher verwendet wird, wenn binäre Programme vor der Konversion und nach der Konversion ausgeführt werden.
  • Die vorliegende Erfindung wird nun mit Bezug auf die beigefügten Zeichnungen beschrieben.
  • Die binäre Programm-Konversions-Vorrichtung in einer Ausführungsform konvertiert ein binäres Programm in ein anderes binäres Programm, welches mit einer hohen Geschwindigkeit in einem Zielcomputer mit einem Cache-Speicher läuft. Die binäre Programm-Konversions-Vorrichtung wird funktionell durch die Installation eines Programms realisiert, welches in einem Aufzeichnungsmedium, wie z.B. eine CD-ROM, auf dem Zielcomputer gespeichert ist.
  • Bevor das Betriebsverfahren der binären Programm-Konversions-Vorrichtung diskutiert wird, wird deshalb die Konstruktion und die Architektur des in der Ausführungsform verwendeten Computers beschrieben.
  • Der Computer weist einen Cache-Speicher von 1 Mbyte auf, der in Zeilen aufgeteilt ist, welche jeweils aus aufeinander folgenden 64 Bytes bestehen. Somit besteht der Cache-Speicher aus 16384 (= 1 Mbyte/64 Bytes) Zeilen. Die 16384 Zeilen werden jeweils durch die Verwendung von Zeilennummern von 0 bis 16383 adressiert.
  • Ferner unterstützt der in der Ausführungsform verwendete Computer virtuellen Speicher. Das heißt, virtuelle Adressen von der CPU werden in physikalische Adressen übersetzt, welche zum Zugriff auf den Hauptspeicher oder den Cache-Speicher verwendet werden.
  • Wenn eine Instruktion/Daten von 1 Byte durch die CPU angefordert werden, wird in dem Computer geprüft, ob die Instruktion/Daten in dem Cache-Speicher existieren. Falls die Instruktion/Daten nicht in dem Cache-Speicher existieren, werden Daten von 64 Bytes in dem Hauptspeicher, der die Instruktion/Daten enthält, von dem Hauptspeicher abgerufen und in dem Cache-Speicher platziert. Die Instruktion/Daten, die in den abgerufenen Daten in dem Cache-Speicher enthalten sind, werden dann zu der CPU weitergeleitet.
  • Die Zeile, in der die abgerufenen Daten, welche die angeforderte Instruktion/Daten enthalten, ge speichert sind, wird eindeutig durch die virtuelle Adresse der angeforderten Instruktion/Daten bestimmt. Insbesondere wird der Rest, in den die virtuelle Adresse durch die Cache-Speichergröße aufgeteilt ist, als der Index der Zeile zum Speichern der abgerufenen Daten verwendet.
  • Im Folgenden wird unter der Annahme, dass der Computer die oben beschriebene Konstruktion und Architektur aufweist, die Operation der binären Programm-Konversions-Vorrichtung in der Ausführungsform erklärt. Es sei angemerkt, dass in den folgenden Diskussionen ein compiliertes Quellenprogramm (oder Sourcecode) als ein Objektprogramm bezeichnet wird und eine Datei, welche ein Objektprogramm speichert, als eine Objektdatei bezeichnet wird. Ein Programm, welches auf dem Computer ausführbar ist und welches durch das Verbinden von einem oder mehreren Objektprogrammen erhalten wird, wird als ein ausführbares Objektprogramm bezeichnet. Ferner wird der Ausdruck "binäres Programm" verwendet, um sowohl ein Objektprogramm als auch ein ausführbares Objektprogramm zu bezeichnen.
  • Zunächst wird ein Überblick über das Betriebsverfahren der binären Programm-Konversions-Vorrichtung erklärt, und zwar anhand eines Beispiels, bei dem ein ausführbares Objektprogramm konvertiert wird.
  • Wie oben erklärt wurde, wird die binäre Programm-Konversions-Vorrichtung funktionell realisiert durch das Installieren des binären Programm-Konversions-Programms, welches für diese Vorrichtung entwickelt wurde, in dem Computer. Beim Ablauf des installierten binären Programm-Konversions-Programms beginnt der Computer, als eine binäre Programm-Konversions-Vorrichtung zu funktionieren, welche aus einem Verbindungseditor 11, einem Profilierer 12, einem Ablauf-Analysierer 13, einem Cache-Zuordner 14 und einem Objektcode-Konverter 15 besteht, wie schematisch in 1 gezeigt ist.
  • Der Verbindungs-Editor 11 fügt einem ausführbaren, zu konvertierenden Objektprogramm einen Cache-Blockbereich (nachfolgend als CaB-Bereich bezeichnet) von der gleichen Größe wie der Cache-Speicher (1 MB in der Ausführungsform) hinzu. Insbesondere verbindet der Verbindungs-Editor 11 eine Pseudofunktion, um den CaB-Bereich (Details werden nachfolgend beschrieben) mit dem ausführbaren, zu konvertierenden Objektprogramm zu sichern, wodurch ein anderes ausführbares Objektprogramm erstellt wird. Der Verbindungs-Editor speichert auch Repositionierungs-Information (Adresskonstanten) in dem ausführbaren Objektprogramm, um die komplette Repositionierung durch den Objektcode-Konverter 15 zu ermöglichen. Es sei angemerkt, dass in den nachfolgenden Erklärungen ein Bereich, außer dem CaB-Bereich, in dem ausführbaren Objektprogramm, welches durch den Verbindungs-Editor 11 generiert wird, als MTXT-Bereich bezeichnet wird.
  • Der Profilierer 12 verfolgt (führt aus) das ausführbare Objektprogramm, in dem der CaB-Bereich gesichert ist, und erstellt ein Ausführungsprofil, welches Information zu den Instruktions-Codes, die ausgeführt werden, enthält.
  • Der Ablauf-Analysierer 13 analysiert das Ausführungsprofil, welches durch den Profilierer 12 erstellt wird, und erzeugt eine Text-Tabelle und eine Daten-Verwendungs-Zeilen-Tabelle. Die Text-Tabelle ist eine Tabelle, welche die Information beinhaltet, die zum Konvertieren des ausführbaren Objektprogramms notwendig ist. Insbesondere enthält sie Aufzeichnungen, welche jeweils aus 10 Punkten bestehen, wie in 2 gezeigt ist. Die Daten-Verwendungs-Zeilen-Tabelle enthält Aufzeichnungen, welche jeweils bestehen aus einer Cache-Zeilennummer ("Line") sowie aus einer Anzahl, welche wiedergibt, wie oft die Zeile, die durch die Cache-Zeilennummer identifiziert wird, für das Speichern von Daten ("USE") verwendet wird, wie in 3 gezeigt ist.
  • Der Cache-Zuordner 14 erkennt ein Volumen (Größe), das notwendig ist, alle Instruktionsblöcke in dem MTXT-Bereich zu speichern, der durch den Profilierer 11 basierend auf der Information in der Text-Tabelle ausgeführt wird, welche durch den Ablauf-Analysierer 13 erstellt wird. Dann bestimmt der Cache-Zuordner 14 L, welches die Minimalanzahl der Cache-Zeilen ist, die notwendig sind, um die ausgeführten Instruktionsblöcke zu halten, und er wählt die ersten L Zeilen mit den niedrigsten Frequenzen der Verwendung durch Datenzugriff basierend auf der Information in der Daten-Verwendungs-Zeilen-Tabelle aus. Als nächstes klassifiziert der Cache-Zuordner 14 die ausgewählten Zeilen in einige Gruppen, welche jeweils aus aufeinander folgenden Zeilen bestehen, und er erzeugt eine Zeilen-Tabelle, welche die Information enthält, welche die klassifizierten Gruppen angibt. Insbesondere erstellt der Cache-Zuordner 14 eine Zeilen-Tabelle, welche Aufzeichnungen enthält, die jeweils eine Start-Zeilennummer ("FROM"), eine End-Zeilennumer ("TO"), eine Anzahl der Zeilen ("NUM") eines Bereichs (Blocks) von aufeinander folgenden Zeilen umfassen, wie in 4 gezeigt ist.
  • Es sei angemerkt, dass, wenn die Größe, die zum Speichern von allen ausgeführten Instruktionsblöcken notwendig ist, größer als die Größe des Cache-Speichers ist, der Cache-Zuordner 14 eine Verarbeitung unterschiedlich zu der oben beschriebenen Verarbeitung durchführt. Details der Verarbeitung werden weiter unten beschrieben.
  • Nachdem die Zeilen-Tabelle erstellt ist, startet der Objektcode-Konverter 15 einen Prozess des Konvertierens des ausführbaren Objektprogramms.
  • Beim Konvertieren des ausführbaren Objektprogramms kopiert der Objektcode-Konverter 15 Instruktionsblöcke, welche durch den Profilierer 12 ausgeführt werden, in Bereiche innerhalb des CaB-Bereiches, welche den Cache-Zeilen entsprechen, die durch den Cache-Zuordner 14 basierend auf der Information in der Text-Tabelle und der Zeilen-Tabelle ausgewählt werden. Dann schreibt der Objektcode-Konverter 15 auf der Start-Position von jedem Instruktionsblock, dessen Kopie in dem CaB-Bereich gemacht wurde, eine Verzweigungsinstruktion ohne Bedingung, welche eine Verzweigung zu dem Ursprung der Kopie in dem CaB-Bereich verursacht. Ferner verändert der Objektcode-Konverter Ziel-Offset/Adressen von CTIs (Control Transfer Instruction; branch, call, jmpl, etc.). Das heißt, der Objektcode-Konverter 15 modifiziert das Objektprogramm, so dass die Kopien in dem CaB-Bereich ausgeführt werden.
  • Das generierte ausführbare Objektprogramm läuft somit schneller als das ausführbare Objektprogramm vor der Konversion. Der Grund wird weiter unten beschrieben.
  • Beispielsweise wird angenommen, dass ein ausführbares Objektprogramm, welches drei Instruktionsblöcke a, b und c enthält, welche unter einer Betriebsbedingung ausgeführt werden, der binären Programm-Konversions-Vorrichtung zur Konversion übergeben wird. Es wird auch angenommen, dass die Instruktionsblöcke a und b in Positionen existieren, welche der gleichen Zeile in dem Cache-Speicher entsprechen, wie in 5 gezeigt ist.
  • In diesem Fall kopiert die binäre Programm-Konversions-Vorrichtung, wie schematisch in 6 gezeigt ist, die Instruktionsblöcke a, b und c in den CaB-Bereich, wodurch ein neues ausführbares Objektprogramm generiert wird, dessen Instruktionsblöcke in dem CaB-Bereich ausgeführt werden. Das heißt, die binäre Programm-Konversions-Vorrichtung generiert ein ausführbares Objektprogramm, dessen Instruktionsblock a, b und c in unterschiedlichen Zeilen des Cache-Speichers gespeichert wird.
  • Wenn das ausführbare Objektprogramm, das durch die binäre Programm-Konversions-Vorrichtung generiert wird, abläuft, tritt somit kein verpasster Treffer in dem Cache-Speicher aufgrund des Konflikts zwischen den Instruktions-Zugriffen auf. Folglich läuft das konvertierte ausführbare Objektprogramm schneller als das ursprüngliche ausführbare Objektprogramm.
  • Als nächstes wird das Betriebsverfahren der binären Programm-Konversions-Vorrichtung detaillierter erklärt, und zwar anhand eines Beispielfalls, bei dem zwei ausführbare Objektprogramme A und B, welche gleichzeitig ausgeführt werden, konvertiert werden.
  • In diesem Fall verbindet, wie schematisch in 7 gezeigt ist, der Verbindungs-Editor Pseudofunktionen, um die CaB-Bereiche mit den ausführbaren Objektprogrammen A und B zu sichern, wodurch ausführbare Objektprogramme A' und B' generiert werden, welche jeweils einen CaB-Bereich aufweisen. Um gleichzeitig die komplette Repositionierung durch den Objekt-Konverter zu ermöglichen, speichert der Verbindungs-Editor Repositionierungs-Informationen (Adresskonstanten) in jedem ausführbaren Objektprogramm.
  • Dann verfolgt der Profilierer das ausführbare Objektprogramm A' und B' individuell oder simultan, um ein Ausführungsprofil zu erstellen, welches die Information der ausgeführten Instruktions-Codes enthält.
  • Nach der Erstellung des Ausführungsprofils, wie in 8 gezeigt ist, erstellt der Ablauf-Analysierer Text-Tabellen A und B und Daten-Verwendungs-Zeilen-Tabellen A und B basierend auf der Information in dem Ausführungsprofil.
  • Anschließend bestimmt der Cache-Zuordner basierend auf der Information in den Text-Tabellen A und B die Gesamtgröße der ausgeführten Instruktionsblöcke in dem ausführbaren Objektprogramm A' und B'. Falls die Gesamtgröße kleiner als die Größe des Cache-Speichers (CaB-Bereich; 1MB in der Ausführungsform) ist, wählt der Cache-Zuordner dann die Cache-Zeilen aus, um sie zum Halten aller ausgeführten Instruktionsblöcke zu verwenden, basierend auf der Information in der Daten-Verwendungs-Zeilen-Tabelle A und B. Als nächstes klassifiziert er einen Bereich, der aus den ausgewählten Cache-Zeilen besteht, in aufeinander folgende Zeilen-Bereiche und erstellt eine Zeilen-Tabelle, welche eine oder mehrere Aufzeichnungen enthält, welche jeweils einen aufeinander folgenden Zeilenbereich angeben.
  • Falls andererseits die Gesamtgröße der ausgeführten Instruktionsblöcke größer ist als die Größe des Cache-Speichers, erstellt der Cache-Zuordner eine Zeilen-Tabelle mit einer Aufzeichnung, welche aus der Start-Zeilennummer, der End-Zeilennummer und der Anzahl der Zeilen des Cache-Speichers besteht, ohne die Cache-Zeilen auszuwählen. Ferner wählt der Cache-Zuordner die in den CaB zu kopierenden Instruktionsblöcke aus allen ausgeführten Instruktionsblöcken aus und verändert den Inhalt der Text-Tabellen A und B, um den Objektcode-Konverter über das Auswahlergebnis zu informieren.
  • Insbesondere bestimmt der Cache-Zuordner, wie in 9 gezeigt ist, zunächst SUMtot, welches die Summe der Größen der Instruktionsblöcke ist, welche durch den Profilierer ausgeführt werden, basierend auf der Information in allen Text-Tabellen (Schritt 100). Dann beurteilt der Cache-Zuordner, ob SUMtot > CZ erfüllt ist (Schritt 101). Hierbei ist CZ die Größe des Cache-Speichers.
  • Wenn SUMtot > CZ erfüllt ist (Schritt 101: T), bestimmt der Cache-Zuordner ein Maximum X, mit dem SUM(X) > CZ erfüllt ist, und er speichert X als MAXRUN (Schritt 102). Hierbei ist SUM(X) die Summe der Größe der Instruktionsblöcke, welche wenigstens X-mal ausgeführt wurden. Es sei angemerkt, dass der Cache-Zuordner MAXRUN wie folgt bestimmt. Der Cache- Zuordner ruft zunächst die Aufzeichnungen betreffend die Instruktionsblöcke von allen Text-Tabellen ab. Als nächstes sortiert er die abgerufenen Aufzeichnungen in absteigender Reihenfolge unter der Verwendung von RUN als Schlüssel, so dass SUM(X) durch die Summation der Werte von SZ von einigen ersten Aufzeichnungen der sortierten Aufzeichnungen berechnet werden kann. Dann berechnet der Cache-Zuordner SUM(X), wobei der Wert von X herabgesetzt wird, und er speichert den Wert von X, der die Ungleichung SUM(X) > CZ das erste Mal erfüllt, als MAXRUN.
  • Nach der Bestimmung von MAXRUN verändert der Cache-Zuordner Werte von RUN, welche gleich oder kleiner als MAXRUN sind, und zwar in Aufzeichnungen betreffend den Instruktionsblock bis "0" (Schritt 103). Dann erstellt der Cache-Zuordner eine Zeilen-Tabelle, welche eine Aufzeichnung enthält, welche aus der Start-Zeilennummer, der End-Zeilennummer und der Anzahl der Zeilen des Cache-Speichers besteht (Schritt 104). Somit erstellt der Cache-Zuordner eine Zeilen-Tabelle, welche eine Aufzeichnung enthält, in der Werte von FROM, TO bzw. LINE eingestellt sind auf 0, 16383 bzw. 16384. Nach der Erstellung der Zeilen-Tabelle beendet der Cache-Zuordner die in der Figur gezeigte Verarbeitung.
  • Wenn andererseits SUMtot > CZ nicht erfüllt ist (Schritt 101: F), bestimmt der Cache-Zuordner die Anzahl von Zeilen L, die zum Halten aller Instruktionsblöcke notwendig sind, die durch den Profilierer ausgeführt werden, basierend auf der Cache-Zusammensetzungs-Information (Zeilengröße) und SUMtot (Schritt 105). Dann sortiert der Cache-Zuordner die Aufzeichnungen in allen Daten-Verwendungs- Zeilen-Tabellen in aufsteigender Reihenfolge unter der Verwendung von USE als Schlüssel, um die ersten L Aufzeichnungen mit dem niedrigsten USE auszuwählen (Schritt 106).
  • Nach der Auswahl von L Aufzeichnungen, sortiert der Cache-Zuordner die Aufzeichnungen in aufsteigender Reihenfolge unter Verwendung der Zeilennummer (LINE) als Schlüssel und klassifiziert die sortierten Aufzeichnungen in einige Gruppen, die jeweils aus einer oder mehreren Aufzeichnungen mit aufeinander folgenden Zeilennummern bestehen. Dann bestimmt er die Start-Zeilennummer, die End-Zeilennummer und die Anzahl der Zeilen des aufeinander folgenden Zeilenbereichs, der durch die Aufzeichnungen in jeder Gruppe wiedergegeben wird (Schritt 107).
  • Anschließend erstellt der Cache-Zuordner eine Zeilen-Tabelle (siehe 4), in welcher Aufzeichnungen, die jeweils bestehen aus der Start-Zeilennummer, der End-Zeilennummer und der Anzahl an Zeilen eines aufeinander folgenden Zeilenbereichs, in absteigender Reihenfolge der Nummer der Zeilen platziert sind (Schritt 108) und er beendet die Verarbeitung.
  • Nachdem die Zeilen-Tabelle erstellt ist, startet der Objektcode-Konverter einen Prozess zum Konvertieren des ausführbaren Objektprogramms A' und B'.
  • Wie in 8 gezeigt ist, verwendet der Objektcode-Konverter beim Konvertieren des ausführbaren Objektprogramms A', welches das erste zu konvertierende Programm ist, die Text-Tabelle A' und die Zeilen-Tabelle. Wenn andererseits das ausführbare Objektprogramm B' konvertiert wird, welches das zweite zu konvertierende Programm ist, verwendet der Ob jektcode-Konverter die Text-Tabelle B', die Zeilen-Tabelle und ein Zeilen-Protokoll A, das erstellt worden ist in dem Konversions-Prozess für das ausführbare Objektprogramm A'.
  • Nachfolgend werden die Details des Konversions-Prozesses, der durch den Objektcode-Konverter ausgeführt wird, mit Bezug auf 10 bis 16 beschrieben.
  • Wenn der Konversions-Prozess startet, beurteilt der Objekt-Konverter zunächst, wie in 10 gezeigt ist, ob das ausführbare zu verarbeitende Objektprogramm das erste zu konvertierende Programm ist (Schritt 110). Wenn das Objektprogramm das erste Programm ist (Schritt 110: T), führt der Objektcode-Konverter nacheinander einen Block-Kopierprozess (Schritt 112), einen CTI-Repositionierungs-Prozess (Schritt 113) und einen Adresskonstanten-Repositionierungs-Prozess (Schritt 114) aus.
  • 11 zeigt das Betriebsverfahren des Objektcode-Konverters in dem Block-Kopierprozess. Wenn der Block-Kopierprozess startet, wählt der Objektcode-Konverter eine Aufzeichnung für einen Instruktionsblock in der Text-Tabelle aus und beurteilt, ob RUN(Si) ≥ 1 erfüllt ist (Schritt 120). Hierbei repräsentiert Si einen Instruktionsblock, auf den sich die ausgewählte Aufzeichnung bezieht, und RUN(Si) repräsentiert einen Wert von RUN (die Zahl, die angibt, wie oft der Instruktionsblock ausgeführt wird) in der ausgewählten Aufzeichnung.
  • Wenn RUN(Si) ≥ 1 nicht erfüllt ist (Schritt 120: F), beurteilt der Objektcode-Konverter, ob oder ob nicht die Verarbeitung für alle Instruktionsblöcke beendet ist (Schritt 127). Wenn die Verarbeitung für alle Instruktionsblöcke nicht beendet ist (Schritt 127: F), geht der Objektcode-Konverter zu Schritt 120 zurück und startet die Verarbeitung für den nächsten Instruktionsblock.
  • Wenn RUN(Si) ≥ 1 erfüllt ist (Schritt 120: T), führt der Objektcode-Konverter einen Kopierprozess (Schritt 121) aus, um den Instruktionsblock Si in dem MTXT-Bereich in den CaB-Bereich zu kopieren.
  • 12 zeigt das Betriebsverfahren des Objektcode-Konverters in dem Kopierprozess. Wenn der Kopierprozess startet, bestimmt der Objektcode-Konverter zunächst eine Kopier-Zieladresse, aus der der Instruktionsblock Si zu kopieren ist, basierend auf der Information in der Zeilen-Tabelle und der Cache-Zusammensetzungs-Information (Schritt 130). Dann beurteilt der Objektcode-Konverter, ob der Instruktionsblock Si angeordnet werden kann auf einen aufeinander folgenden Bereich innerhalb des CaB-Bereichs, der die Kopierzieladresse umfasst und dem aufeinander folgenden Zeilenbereich entspricht, der durch eine Aufzeichnung in der Zeilen-Tabelle angegeben wird (Schritt 131). Wenn der Instruktionsblock Si in dem aufeinander folgenden Bereich angeordnet werden kann (Schritt 131: T), kopiert der Objektcode-Konverter den Instruktionsblock Si in den aufeinander folgenden Bereich (Schritt 132) und beendet den Kopierprozess.
  • Wenn der Instruktionsblock Si nicht in dem aufeinander folgenden Bereich angeordnet werden kann (Schritt 131: F), teilt der Objektcode-Konverter die Instruktionsblöcke Si in einige Blöcke auf und kopiert die aufgeteilten Blöcke in einige aufeinander folgende Bereiche (Schritt 133). Beim Kopieren von jedem aufgeteilten Block, außer dem letzten aufgeteilten Block, schreibt der Objektcode-Konverter in diesem Schritt eine Verzweigung ohne Bedingung, welche verursacht eine Verzweigung zu dem nächsten aufeinander folgenden zu verwendenden Bereich zum Halten des nächsten aufgeteilten Blocks, auf eine Endposition des aufeinander folgenden Bereichs, in dem der aufgeteilte Block kopiert ist. Dann endet der Kopierprozess.
  • Nach Beenden des Kopierprozesses schreibt der Objektcode-Konverter, wie in 11 gezeigt ist, eine Verzweigungsinstruktion ohne Bedingung, welche eine Verzweigung zu dem Instruktionsblock Si in dem CaB-Bereich verursacht, auf die Startposition des Instruktionsblocks Si in dem MTXT-Bereich (Schritt 122).
  • Als nächstes bestimmt der Objektcode-Konverter den Instruktionsblock Sj, der als nächstes in den CaB-Bereich kopiert wird, und berechnet MADDR(Sj), welches die Startadresse des Instruktionsblocks Sj ist (Schritt 123). Dann beurteilt der Objektcode-Konverter, ob eine Verzweigungsinstruktion Ci in dem Block Si enthalten ist (Schritt 124).
  • Wenn keine Verzweigungsinstruktion in dem Instruktionsblock Si enthalten ist (Schritt 124: F), beurteilt der Objektcode-Konverter, ob MADDR(Sj)! = MADDR(Si) + SZ(Si) erfüllt ist (Schritt 128). Hierbei ist SZ(Si) die Größe des Instruktionsblocks Si. Wenn MADDR(Sj)! = MADDR(Si) + SZ(Si) erfüllt ist (Schritt 128: T), schreibt der Objektcode-Konverter eine Verzweigungsinstruktion ohne Bedingung, welche eine Verzweigung zu der Adresse "MADDR(Si) + SZ(Si)" verursacht, auf die Position neben dem kopierten In struktionsblock Si in dem CaB-Bereich (Schritt 129) und fährt bei Schritt 127 fort. Wenn andererseits MADDR(Sj)! = MADDR(Si) + SZ(Si) nicht erfüllt ist, das heißt wenn MRDDR(Sj) = MADDR(Si) + SZ(Si) erfüllt ist (Schritt 128: F), fährt der Objektcode-Konverter mit Schritt 127 fort, ohne die Verzweigungsinstruktion ohne Bedingung zu schreiben.
  • Wenn eine Verzweigungsinstruktion Ci in dem Instruktionsblock Si enthalten ist (Schritt 124: T), beurteilt der Objektcode-Konverter, ob MADDR(Sj) = TADDR(Ci) erfüllt ist (Schritt 125). Hierbei ist TADDR(Ci) die Zieladresse (Verzweigungsadresse) der Verzweigungsinstruktion Ci. Wenn MADDR(Sj) = TADDR(Ci) erfüllt ist (Schritt 125: T), führt der Objektcode-Konverter einen Verzweigungsbedingungs-Umkehrprozess aus (Schritt 126).
  • Nachfolgend wird das Betriebsverfahren des Objektcode-Konverters in dem Verzweigungsbedingungs-Umkehrprozess mit Bezug auf 13 erklärt. Es sei angemerkt, dass der Grund, warum dieser Prozess ausgeführt wird, später erklärt wird.
  • Wenn der Verzweigungsbedingungs-Umkehrprozess startet, beurteilt der Objektcode-Konverter zunächst, ob die Verzweigungsinstruktion Ci eine annullierte Verzweigungsinstruktion ist (Schritt 140). Die annullierte Verzweigungsinstruktion (Verzögerungs-Annullierungs-Verzweigungsinstruktion) ist eine Verzweigungsinstruktion, welche die CPU anweist, ihre nachfolgende Instruktion (Verzögerungsinstruktion) auszuführen, wenn die Verzweigung genommen wird und die nachfolgende Instruktion nicht auszuführen, wenn die Verzweigung nicht genommen wird.
  • Wenn die Verzweigungsinstruktion Ci keine annullierte Verzweigungsinstruktion ist (Schritt 140: F), kehrt der Objektcode-Konverter die Verzweigungsbedingung der Instruktion Ci um (Schritt 143). Wenn andererseits die Verzweigungsinstruktion Ci eine annullierte Verzweigungsinstruktion ist (Schritt 140: T), kehrt der Objektcode-Konverter die Verzweigungsbedingung der Verzweigung Ci um und entfernt die annullierte Beschränkung (Schritt 141). Dann fügt der Objektcode-Konverter eine Instruktion "nop" (eine Instruktion, welche die CPU anweist, keine effektive Operation durchzuführen) zwischen der Verzweigungsinstruktion und der Verzögerungsinstruktion aus (Schritt 142).
  • Das heißt, die annullierte Verzweigungsinstruktion in dem ursprünglichen Programm ist eine Instruktion, welche verursacht, dass die CPU eine Verzögerungsinstruktion nur ausführt, wenn eine bestimmte Bedingung erfüllt ist. Falls jedoch nur eine Verzweigungsbedingung der annullierten Verzweigungsinstruktion umgekehrt wird, veranlasst die umgekehrte Instruktion die CPU, die Verzögerungsinstruktion nur dann durchzuführen, wenn die bestimmte Bedingung nicht erfüllt ist, Deshalb entfernt der Objektcode-Konverter die annullierte Beschränkung und fügt die "nop"-Instruktion hinzu, wodurch eine Kombination der Instruktions-Codes generiert wird, welche die CPU veranlassen, die "Verzögerungsinstruktion" nur dann durchzuführen, wenn die bestimmte Bedingung erfüllt ist.
  • Nach dem Ausführungsschritt 142 oder Schritt 143 beurteilt der Objektcode-Konverter, ob die Verzweigungsinstruktion, deren Verzweigungsbedingung umge kehrt wird, ein "bn" ist (Schritt 144). Hierbei ist ein "bn" (branch never) eine Verzweigungsinstruktion, welche niemals eine Verzweigung verursacht, und das Löschen von "bn" verursacht keine Probleme. Wenn die Verzweigungsinstruktion ein "bn" ist (Schritt 144: T), löscht der Objektcode-Konverter deshalb die Instruktion (Schritt 145). Dann beurteilt der Objektcode-Konverter, ob die auf die Verzweigungsinstruktion folgende Instruktion ein "nop" ist (Schritt 146). Wenn die darauf folgende Instruktion ein "nop" ist (Schritt 146: T), löscht der Objektcode-Konverter die Instruktion (Schritt 147) und beendet den Verzweigungsbedingungs-Umkehrprozess.
  • Wenn die geänderte Verzweigungsinstruktion kein "bn" ist (Schritt 144: F) oder die nachfolgende Instruktion kein "nop" ist (Schritt 146: F), beendet der Objektcode-Konverter den Verzweigungsbedingungs-Umkehrprozess, ohne irgendwelche Instruktionen zu löschen.
  • Nachdem der Verzweigungsbedingungs-Umkehrprozess beendet ist, fährt der Objektcode-Konverter, wie in 11 gezeigt ist, mit Schritt 127 fort und beurteilt, dass die Verarbeitung für alle Instruktionsblöcke beendet ist. Wenn die Verarbeitung für alle Instruktionsblöcke beendet ist (Schritt 127: T), beendet der Objektcode-Konverter den Block-Kopierprozess und startet den CTI-Repositionierungs-Prozess.
  • 14 zeigt das Betriebsverfahren des Objektcode-Konverters in dem CTI-Repositionierungs-Prozess.
  • In dem CTI-Repositionierungs-Prozess wählt der Objektcode-Konverter zunächst eine Aufzeichnung betreffend CTI in der Text-Tabelle aus und beurteilt, ob ein Code an der Adresse TADDR(Ci) in den CaB-Bereich kopiert worden ist (Schritt 150). Hierbei ist TADDR(Ci) eine Zieladresse der Instruktion Ci, auf die sich die ausgewählte Aufzeichnung bezieht.
  • Wenn der Code an TADDR(Ci) in den CaB-Bereich kopiert worden wird (Schritt 150: T), repositioniert der Objektcode-Konverter TADDR(Ci) (Schritt 151) und führt einen Verzweigungs-Vorhersage-Prozess (Details werden weiter unten erklärt) für die Instruktion Ci in dem MTXT-Bereich durch (Schritt 152). Dann beurteilt der Objektcode-Konverter, ob der Instruktionsblock Si umfassend die Instruktion Ci in den CaB-Bereich kopiert worden ist (Schritt 153). Wenn der Instruktionsblock Si in den CaB-Bereich kopiert worden ist (Schritt 153: T), repositioniert der Objektcode-Konverter die Zieladresse der Kopie der Instruktion Ci in dem CaB-Bereich (Schritt 154) und führt den Verzweigungs-Vorhersage-Prozess für die Instruktion Ci in dem CaB-Bereich aus (Schritt 155).
  • Wenn die Verarbeitung für alle CTIs nicht beendet ist (Schritt 156: F), geht der Objektcode-Konverter dann zu Schritt 150 zurück und startet die Verarbeitung für das nächste CTI. Wenn andererseits die Verarbeitung für alle CTIs beendet ist (Schritt 156: T), erstellt der Objektcode-Konverter ein Zeilen-Protokoll, das die Information hält, welche die Cache-Zeilen anzeigt, in denen die Instruktionsblöcke gespeichert sind, wenn das konvertierte ausführbare Objektprogramm ausgeführt wird (Schritt 157), und er beendet den CTI-Repositionierungs-Prozess.
  • Nach der Beendigung des CTI-Repositionierungs-Prozesses führt der Objektcode-Konverter, wie zuvor erwähnt (siehe 10) den Adresskonstanten-Repositionierungs-Prozess aus.
  • Vor der Erklärung des Adresskonstanten-Repositionierungs-Prozesses wird der Verzweigungs-Vorhersage-Prozess (Schritte 152, 155) mit Bezug auf 15 erklärt.
  • Wenn der Verzweigungs-Vorhersage-Prozess gestartet wird, beurteilt der Objektcode-Konverter zunächst, ob die CPU in dem Zielcomputer eine Vorhersage-Verzweigungsinstruktion unterstützt (Schritt 160). Es sei angemerkt, dass die Vorhersage-Verzweigungsinstruktion eine Verzweigungsinstruktion ist, welche ein Vorhersage-Bit aufweist, das anzeigt, ob die Wahrscheinlichkeit, dass die Verzweigung genommen wird, höher als 0,5 ist oder nicht. Wenn die Vorhersage-Verzweigungsinstruktion ein Vorhersage-Bit aufweist, welches anzeigt, dass eine Wahrscheinlichkeit von höher als 0,5, "BPcc, pt", gegeben ist, nimmt die CPU, welche die Vorhersage-Verzweigungsinstruktion unterstützt, Instruktionen vorweg, welche auszuführen sind, wenn die Verzweigung genommen wird. Wenn die Vorhersage-Verzweigungsinstruktion ein Vorhersage-Bit aufweist, welches anzeigt, dass eine Wahrscheinlichkeit von nicht höher als 0,5, "BPcc, pn", gegeben ist, führt die CPU die Verzweigungsinstruktion aus, ohne die Instruktion vorwegzunehmen.
  • Wenn die CPU die Vorhersage-Verzweigungsinstruktion (Schritt 160: T) unterstützt, beurteilt der Objektcode-Konverter, ob BT(Ci)/RUN(Ci) > 0,5 ("Nummer, die angibt, wie oft die Verzweigungsinstruktion genommen wird"/"Nummer, die angibt, wie oft die Verzweigungsinstruktion ausgeführt wird" > 0,5) erfüllt ist (Schritt 161). Wenn BT(Ci)/RUN(Ci) > 0,5 erfüllt ist (Schritt 161: T), überschreibt der Objektcode-Konverter die Instruktion Ci mit "BPcc, pt" (Schritt 162) und beendet den Verzweigungs-Vorhersage-Prozess. Wenn andererseits BT(Ci)/RUN(Ci) > 0,5 nicht erfüllt ist (Schritt 161: F), überschreibt der Objektcode-Konverter Ci mit der Vorhersage-Verzweigungsinstruktion "BPcc, pn" (Schritt 163) und beendet den Verzweigungs-Vorhersage-Prozess.
  • Nachfolgend wird das Betriebsverfahren des Objektcode-Konverters in dem Adresskonstanten-Repositionierungs-Prozess mit Bezug auf 16 erklärt. Es sei angemerkt, dass der Adresskonstanten-Repositionierungs-Prozess ausgeführt wird, um zu vermeiden, dass die Steuerung zu einer Instruktion in dem MTXT-Bereich durch eine Verzweigungsinstruktion bedingt durch ein Register übertragen wird.
  • Wenn der Adresskonstanten-Repositionierungs-Prozess startet, wählt der Objektcode-Konverter eine Adresskonstante unter den Adresskonstanten aus, welche in dem ausführbaren Objektprogramm durch den Verbindungs-Editor gespeichert werden, und er beurteilt, ob die ausgewählte Adresskonstante auf irgendwelche Positionen auf den Instruktionsblöcken zeigt, deren Kopien auf dem CaB gemacht wurden (Schritt 170). Wenn die Adresskonstante auf irgendeine von solchen Positionen zeigt (Schritt 170:T), überschreibt der Objektcode-Konverter die Adresskonstante mit einer entsprechenden Adresse in dem CaB-Bereich (Schritt 171) und fährt mit Schritt 172 fort. Wenn andererseits die Adresskonstante nicht auf irgendeine von solchen Positionen zeigt (Schritt 170: F), fährt der Objektcode-Konverter mit Schritt 172 fort, ohne die Adresskonstante zu überschreiben.
  • In Schritt 172 beurteilt der Objektcode-Konverter, ob oder ob nicht die Verarbeitung für alle Adresskonstanten beendet ist (Schritt 172). Wenn die Verarbeitung für alle Adresskonstanten nicht beendet ist (Schritt 172: F), geht der Objektcode-Konverter zu Schritt 170 zurück und startet die Verarbeitung für die nächste Adresskonstante.
  • Wenn erkannt wird, dass die Verarbeitung für alle Adresskonstanten beendet ist (Schritt 172: T), beendet der Objektcode-Konverter den Adresskonstanten-Repositionierungs-Prozess.
  • Wenn der Adresskonstanten-Repositionierungs-Prozess beendet ist, ist der Konversions-Prozess für das Objektprogramm A' beendet, Insbesondere wird das Objektprogramm A'' generiert, welches schneller als das Objektprogramm A läuft. Dann wird der Konversions-Prozess für das nächste ausführbare Objektprogramm B' gestartet, wie schematisch in 8, 10 gezeigt ist.
  • Da in diesem Fall das Objektprogramm B' nicht das erste Programm ist, fährt der Objektcode-Konverter mit Schritt 111 fort und löscht die Aufzeichnungen betreffend Cache-Zeilen, welche zum Halten der Instruktionsblöcke in dem Objektprogramm A'' verwendet werden, aus der Zeilen-Tabelle basierend auf der Information in dem Zeilenprotokoll A, das in dem CTI-Repositionierungs-Prozess für das Objektprogramm A' erstellt wurde. Nach dem Aktualisieren der Inhalte der Zeilen-Tabelle, führt der Objektcode-Konverter den Block-Kopierprozess (Schritt 112), den CTI-Repositionierungs-Prozess (Schritt 113) und den Adresskonstanten-Repositionierungs-Prozess (Schritt 114) für das ausführbare Objektprogramm B' der Reihe nach aus.
  • Wie schematisch in 17 gezeigt ist, werden folglich die ausgeführten Instruktionsblöcke in dem Objektprogramm B in den CaB-Bereich derart kopiert, dass die kopierten Instruktionsblöcke in dem CaB-Bereich bei der Ausführung in den Cache-Zeilen gespeichert werden, welche nicht zur Speicherung der kopierten Instruktionsblöcke in dem Objektprogramm A' verwendet werden.
  • Nachfolgend wird das Betriebsverfahren der oben diskutierten binären Programm-Konversions-Vorrichtung detaillierter unter der Verwendung von Programmlisten beschrieben, welche in 1926 gezeigt sind. Es sei angemerkt, dass in den nachfolgenden Diskussionen der Einfachheit halber angenommen wird, dass die binäre Programm-Konversions-Vorrichtung (Objektcode-Konverter) alle ausgeführten Instruktionsblöcke in den CaB-Bereich kopiert, bevor eine weitere Verarbeitung durchgeführt wird, und Notationen in jeder Programmliste basieren auf einer Assembler-Sprache für eine bestimmte Computer-Architektur.
  • Zunächst wird das grundlegende Betriebsverfahren der binären Konversions-Vorrichtung anhand eines Beispielfalls beschrieben, bei dem ein ausführbares Objektprogramm, dessen Liste in 19 gezeigt ist, konvertiert wird. Es sei angemerkt, dass die Instruktion "seticc" in der Liste eine Instruktion zum Setzen eines Bedingungs-Codes repräsentiert, auf den sich eine bedingte Verzweigungsinstruktion bezieht.
  • Die Instruktion "be" (branch equal) ist eine Instruktion, welche eine Verzweigung verursacht, wenn eine Gleichheitsbedingung erfüllt ist. Das "c-.", welches dem "be" folgt, zeigt an, dass der Offset-Wert des Verzweigungsziels ein Wert ist, der durch das Substrahieren der vorliegenden Adresse (".") von der Startadresse des Blocks c erhalten wird. Die Instruktion "delay" ist eine Verzögerungsinstruktion, welche gleichzeitig mit der Verzweigungsinstruktion ausgeführt wird. Das "delay" wird selbst dann ausgeführt, wenn die Verzweigung genommen wird. Das heißt, nachdem eine Verzweigungsinstruktion und ein entsprechendes "delay" ausgeführt sind, wird eine Instruktion des Verzweigungsziels ausgeführt.
  • Wie zuvor erklärt wurde, werden, wenn ein Programm konvertiert wird, nur die Instruktionsblöcke, die durch den Profilierer ausgeführt werden, in den CaB-Bereich kopiert. Falls die Blöcke a und b in dem in 19 gezeigten Programm durch den Profilierer ausgeführt werden, wird das Programm deshalb zu dem in 20 gezeigten Programm modifiziert. Das heißt, das Programm mit den Instruktionsblöcken a' und b', welches die Kopien der Instruktionsblöcke a und b sind, wird in dem CaB-Bereich generiert.
  • Dann werden Repositionierungen ausgeführt, so dass Instruktionsblock a' und b' ausgeführt werden. Als ein Ergebnis wird das in 20 gezeigte Programm in das in 21 gezeigte Programm modifiziert.
  • Das heißt, die Verzweigungsinstruktion ohne Bedingung "ba, a a'-.'', welche eine Verzweigung zu dem Block a' in dem CaB-Bereich verursacht, wird auf die Startadresse des Blocks a in dem MTXT-Bereich ge setzt (*1). Auf ähnliche Weise wird die Verzweigungsinstruktion ohne Bedingung "ba, a b'-.", welches eine Verzweigung zu dem Block b' verursacht, auf die Startadresse des Blocks b gesetzt (*2). Es sei angemerkt, dass ", a" in der Instruktion "ba, a a'-." oder "ba, a b'-." angibt, dass die Instruktion eine annullierte Verzweigungsinstruktion ist, welche verursacht, dass die CPU nicht ihre nachfolgende Instruktion ausführt.
  • Ferner wird ein Ziel-Offset-Wert der Verzweigungsinstruktion in dem Block a' überschrieben, so dass die Steuerung zu den Block c in den MTXT-Bereich übertragen wird (*3). In Bezug auf den Block b' in dem CaB-Bereich wird, da der Block c, der dem Block b folgt, nicht in den CaB-Bereich kopiert wird, die Verzweigungsinstruktion "ba, a c-." an sein Ende hinzugefügt (*4).
  • Als nächstes wird das Betriebsverfahren des Verzweigungsbedingungs-Umkehrprozesses anhand eines Beispielfalls erklärt, bei dem die Blöcke a und c in dem in 19 gezeigten Programm durch den Profilierer ausgeführt werden.
  • In diesem Fall wird das in 19 gezeigte Programm in das in 22 gezeigte Programm konvertiert. Das heißt, die Verzweigungsinstruktionen ohne Bedingung zu den Blöcken a' und c' werden auf die Startadressen in den Blöcken a und c in dem MTXT-Bereich gesetzt (*5, *7). Da das Verzweigungsziel der Verzweigungsinstruktion "be" in dem Block a der Instruktionsblock c ist, dessen Kopie auf dem CaB-Bereich gemacht ist, wird der Ziel-Offset-Wert der Verzweigungsinstruktion ferner überschrieben, so dass die Verzweigungsinstruktion eine Verzweigung zu dem Instruktionsblock c' verursacht (*6).
  • Da das Ziel der Verzweigungsinstruktion "be" in dem Block b' der Block c ist, dessen Kopie auf dem CaB-Bereich und an einer Position des CaB-Bereichs benachbart zum Block b' gemacht ist, stellt die Instruktion den Ersatz für die Verzweigungsinstruktion "bne" (branch not equal) dar und ihr Ziel-Offset-Wert wird überschrieben, so dass eine Verzweigung zu dem Block b in dem MTXT-Bereich (*8) in dem Verzweigungsbedingungs-Umkehrprozess genommen wird.
  • Als nächstes wird das Betriebsverfahren in dem Verzweigungsbedingungs-Umkehrprozess für eine annullierte Verzweigungsinstruktion anhand eines Beispielfalls erklärt, bei dem das in 23 gezeigte Programm der binären Programm-Konversions-Vorrichtung übergeben wird und die Blöcke a und c durch den Profilierer ausgeführt werden.
  • In diesem Fall wird das in 24 gezeigte Programm durch die binäre Programm-Konversions-Vorrichtung generiert. Das heißt, in Bezug auf die Instruktionsblöcke a und c in dem MTXT-Bereich werden das Hinzufügen der Verzweigungsinstruktionen ohne Bedingung und das Repositionieren des Ziel-Offset-Werts ähnlich zu dem Fall durchgeführt, bei dem das Programm keine annullierte Verzweigungsinstruktion umfasst (siehe 22).
  • In Bezug auf die annullierte Verzweigungsinstruktion "be, a c-." in dem Block a' (nicht in der Figur gezeigt) wird dann, da ihr Verzweigungsziel (das heißt Block c) in der Position neben Block b' kopiert ist, ihre Verzweigungsbedingung umgekehrt und die annullierte Beschränkung wird entfernt. Das heißt, die annullierte Verzweigungsinstruktion "be, a" wird der Ersatz für die nicht annullierte Verzweigungsinstruktion "bne". Ferner wird der Ziel-Offset-Wert von "bne" überschrieben, so dass eine Verzweigung zu dem Block b in dem MTXT-Bereich genommen wird (*9). Zusätzlich wird die Instruktion "nop" zwischen der modifizierten Verzweigungsinstruktion und der Instruktion "delay" eingefügt (*10).
  • Wenn das derart konvertierte Programm in der Situation ausgeführt wird, dass die Verzweigungsinstruktion "bne b-" in dem Block a' eine Verzweigung verursacht, wird ihre nachfolgende Instruktion "nop" ausgeführt, jedoch wird die Instruktion "delay" nicht ausgeführt. Wenn andererseits das Programm in der Situation verwendet wird, dass die Verzweigungsinstruktion "bne b-" keine Verzweigung verursacht, wird die Instruktion "delay" ausgeführt. Somit steuert das Programm, das durch die binäre Programm-Konversions-Vorrichtung generiert wird, die CPU auf die gleiche Weise wie das ursprüngliche Programm.
  • Nachfolgend wird das Betriebsverfahren in dem Verzweigungs-Vorhersage-Prozess anhand eines Beispielfalls erklärt, bei dem das in 25 gezeigte Programm der binären Programm-Konversions-Vorrichtung übergeben wird und die Instruktionsblöcke a und c in dem Programm durch den Profilierer ausgeführt werden. Es sei angemerkt, dass in den folgenden Erklärungen angenommen wird, dass der Wert von BT/RUN für die Verzweigungsinstruktionen (*11, *12) in den ausgeführten Instruktionsblöcken größer als 0,5 ist.
  • In diesem Fall wird das in 25 gezeigte Programm in das in 26 gezeigte Programm konvertiert. Insbesondere wird zu Beginn in dem Programm das Kopieren der ausgeführten Instruktionsblöcke in den CaB-Bereich, Repositionierungen, das Umkehren der Verzweigungsbedingung der Verzweigungsinstruktionen ausgeführt. Anschließend werden die Verzweigungsinstruktionen "be" und "bg" mit hoher Wahrscheinlichkeit der Verzweigung in dem MTXT-Bereich in dem verarbeiteten Programm als Ersatz genommen für die entsprechenden Vorhersage-Verzweigungsinstruktionen "be, pt" bzw. "bg,pt" (*13, *14). Die kopierte Verzweigungsinstruktion "bg" in dem Block c' wird auch als Ersatz genommen für die entsprechenden Vorhersage-Verzweigungsinstruktionen "bg,pt" (*16). Andererseits wird in Bezug auf die kopierte Verzweigungsinstruktion in dem Block a' die Ersetzung der Vorhersage-Verzweigungsinstruktion "bne, pn" durchgeführt (*15), da die Verarbeitung zur Umkehr der Verzweigungsbedingung durchgeführt worden ist.
  • Wie oben im Detail diskutiert wurde, fügt beim Vorliegen von einem oder mehreren Objektprogrammen zur Konversion die binäre Programm-Konversions-Vorrichtung einen CaB-Bereich für Wörter hinzu, welche in unterschiedlichen Positionen in dem Cache-Speicher gespeichert sind, und zwar zu jedem der Objektprogramme, und sie überprüft Instruktionsblöcke, welche zukünftig ausgeführt werden. Falls dann die Gesamtgröße der Instruktionsblöcke, welche zukünftig ausgeführt werden, nicht größer als die Cache-Speichergröße ist, kopiert sie einen Teil der Instruktionsblöcke, welche zukünftig ausgeführt werden, in den CaB-Bereich und modifiziert einige In struktions-Codes, so dass die Kopien der Instruktionsblöcke auf dem CaB-Bereich verwendet werden. Falls die Gesamtgröße der Instruktionsblöcke, welche zukünftig ausgeführt werden, kleiner als die Cache-Speichergröße ist, kopiert sie alle Instruktionsblöcke, welche zukünftig ausgeführt werden, in den CaB-Bereich, so dass die Kopien in den Cache-Zeilen gespeichert sind, welche nicht häufig zur Speicherung von Daten verwendet werden, und sie modifiziert einige Instruktions-Codes, so dass die Kopien der Instruktionsblöcke auf dem CaB-Bereich zukünftig verwendet werden.
  • Gemäß dieser binären Programm-Konversions-Vorrichtung können deshalb ein oder mehrere neue Objektprogramme erhalten werden, welche geringere Fehlerraten aufgrund von Konflikten zwischen Instruktionszugriffen als ihre ursprünglichen Objektprogramme aufweisen, und zwar in Fällen, in denen die Gesamtgröße der Instruktionsblöcke, welche zukünftig ausgeführt werden, größer ist als die Cache-Speichergröße in den ursprünglichen Objektprogrammen. Ferner können neue Objektprogramme erhalten werden, welche keinen Verlust aufgrund von Konflikten zwischen Instruktionszugriffen erzeugen und welche auch geringere Verluste aufgrund von Konflikten zwischen einem Instruktionszugriff und einem Datenzugriff erzeugen, und zwar in Fällen, in denen die Gesamtgröße der Instruktionsblöcke, welche zukünftig ausgeführt werden, kleiner ist als die Cache-Speichergröße in ihren ursprünglichen Objektprogrammen.
  • Da die Konversion durch das Packen der Instruktionsblöcke in den CaB-Bereich durchgeführt wird, erfordert das Objektprogramm, dass durch die binäre Programm-Konversions-Vorrichtung generiert wird, ferner eine geringere Menge an Cache-Speicher zum Speichern von unnötigen Instruktionsblöcken als dies beim ursprünglichen Programm der Fall ist. Das heißt, die binäre Programm-Konversions-Vorrichtung generiert ein Objektprogramm, welches die Zeilen des Cache-Speichers effizient verwendet.
  • Beispielsweise wird durch diese binäre Programm-Konversions-Vorrichtung ein Objektprogramm, durch das der Cache-Speicher in einem in 27A gezeigten Zustand verwendet wird, in ein neues Objektprogramm konvertiert, durch das der Cache-Speicher in einem in 27B gezeigten Zustand verwendet wird.
  • Es sei angemerkt, dass in 27A und 27B ein Wert in der Spalte "line" eine Zeilennummer des Cache-Speichers repräsentiert und dass ein Wert in der Spalte "wi" (i = 0–15) eine Zahl repräsentiert, welche angibt, wie oft ein Zugriff auf das i-te Wort (4 Bytes) in der entsprechenden Cache-Zeile gemacht wurde. Ein Wert in der Spalte "access" repräsentiert eine Summe, die wiedergibt, wie viele Male ein Zugriff auf die 0-ten bis 15-ten Wörter in der entsprechenden Cache-Zeile gemacht wurde. Ein Wert in der Spalte "wc" repräsentiert eine Anzahl von Wörtern, auf welche in der entsprechenden Cache-Zeile zugegriffen wurde (welche verwendet wurden). Ein Wert in der Spalte "n" repräsentiert eine Anzahl von Programmzeilen, welche in der entsprechenden Cache-Zeile gespeichert sind. Insbesondere ist eine Cache-Zeile, deren Wert von "n" größer als 1 ist, eine Zeile, welche mehrere Male (wenigstens einmal) mit einer anderen Programmzeile ersetzt wurde.
  • Wie klar in 27A gezeigt ist, gibt es beim Ablauf des Objektprogramms vor der Konversion Fälle, wo eine Cache-Zeile zum Halten einer Programmzeile verwendet wird, welche viele unnötige Wörter (siehe Werte von "wc") enthält.
  • Da andererseits die binäre Programm-Konversions-Vorrichtung Instruktionsblöcke packt, welche zukünftig in dem CaB-Bereich ausgeführt werden, wodurch ein neues Objektprogramm erzeugt wird, wird jede Cache-Zeile beim Ablauf des generierten neuen Objektprogramms verwendet, um eine Programmzeile zu halten, welche kein oder wenige unnötige Wörter aufweist, wie in 27B gezeigt ist. In der Tat beträgt der Durchschnittswert für die Wortverwendungsanteile die Cache-Zeilen, die in 27B gezeigt sind, bei 94,4% (15,1 Wörter/Zeile), wohingegen der Anteil für das ursprüngliche Objektprogramm 59,4% (9,5 Wörter/Zeile) beträgt. Somit kann ein Objektprogramm mit hohem Wortverwendungsanteil durch die binäre Programm-Konversions-Vorrichtung erhalten werden.
  • Es sei angemerkt, dass das neue Objektprogramm durch die binäre Programm-Konversions-Vorrichtung so generiert ist, dass Instruktions-Codes, welche in der Programmzeile des ursprünglichen Objektprogramms enthalten sind, welche sich auf die Zeile mit "line" 3698 und "wc" 15 (zweite Zeile) in 27A bezieht, in den 10-ten bis 15-ten der Cache-Zeile, deren Zeilennummer 9742 ist, und in den 0-ten bis 9-ten Wörtern der Cache-Zeile, deren Zeilennummer 9743 ist, gespeichert werden, und dass Instruktions-Codes, welche in der Programmzeile enthalten sind, welche sich auf die dritte, fünfte, sechste, achte, zehnte, zwölfte und fünfzehnte Zeile bezieht und auf welche zugegriffen wird, in den Cache-Zeilen gespeichert werden, deren Zeilennummer 9743–9748 ist, und die verbleibenden Instruktions-Codes in den restlichen Wörtern (Wörter, denen keine Instruktions-Codes zugeordnet sind) in den Cache-Zeilen mit den Zeilennumern 9742, 9728 und 9749 gespeichert werden.
  • Zusätzlich modifiziert die binäre Programm-Konversions-Vorrichtung das Objektprogramm, so dass die Frequenz, mit der die Steuerung aufgrund der Ausführung von Verzweigungen übertragen wird, vermindert wird, und sie ersetzt einige Instruktions-Codes mit neuen, besser geeigneten Instruktions-Codes. Diese Modifikationen erhöhen auch die Geschwindigkeit des Objektprogramms.
  • Das heißt, da im Allgemeinen eine Übertragung der Steuerung auf eine entfernte Adresse aufgrund der Ausführung einer Verzweigung längere Zeit zur Durchführung benötigt als eine Übertragung der Steuerung auf die nächste Adresse, erhöht die Modifikation der Verzweigungsinstruktionen die Geschwindigkeit des Objektprogramms. Ferner gibt es oft den Fall, bei dem ein Instruktions-Code (oder eine Kombination von Instruktions-Codes) nicht schnell durch eine Ziel-CPU durchgeführt werden kann, wohingegen der Code (oder die Kombination) schnell durch eine andere CPU durchgeführt werden kann. Es ist auch eine Tatsache, dass in einem solchen Fall die Ziel-CPU allgemein einen alternativen Instruktions-Code mit dem Code aufweist. Folglich erhöht das Ersetzen der Instruktions-Codes auch die Geschwindigkeit des Objektprogramms.
  • Weil verschiedene Optimierungen an dem ursprünglichen binären Programm/den ursprünglichen binären Programmen gemacht werden, werden somit gemäß der binären Programm-Konversions-Vorrichtung in der Ausführungsform ein neues binäres Programm bzw. neue binäre Programme einfach erhalten, welche mit einer sehr hohen Geschwindigkeit in dem Ziel-Computer laufen.
  • Es sei ferner angemerkt, dass die binäre Konversions-Technik, die bis jetzt diskutiert wurde, auf verschiedene Computer neben dem Computer in der Ausführungsform angewendet werden kann.
  • Beispielsweise wird der Computer in der Ausführungsform mit dem Cache-Speicher mit 16384 Zeilen von 64 Bytes ausgestattet. Die vorliegende Technik kann natürlich auf einen Computer angewendet werden, der mit einem Cache-Speicher mit Zeilen mit beliebiger Anzahl und Größen versehen ist. Ferner gibt es Computer, welche multiple Cache-Speicher (normalerweise zwei) zwischen der CPU und dem Hauptspeicher aufweisen. Diese Technik kann auf einen solchen Computer angewendet werden.
  • Obwohl der Cache-Speicher in der Ausführungsform ein Cache-Speicher vom integrierten Typ ist, der Daten und Instruktionen speichert, kann die vorliegende Technik auf einen Computer angewendet werden, der mit einem Cache-Speicher vom so genannten separierten Typ versehen ist, der besteht aus einem Daten-Cache zum Halten von Daten und einem Instruktions-Cache zum Halten von Instruktionen. Wenn die vorliegende Technik auf einen solchen Computer angewendet wird, kann die Verarbeitung betreffend die Daten-Verwendungs-Zeilen-Tabelle weggelassen werden, da kein Verlust aufgrund von Konflikten zwischen einem Instruktionszugriff und einem Datenzugriff in dem Cache-Speicher vom separierten Typ auftritt.
  • Diese Technik kann auf einen Computer mit satzassoziativem Cache oder voll-assoziativem Cache angewendet werden, wobei der Computer in der Ausführungsform einen direkt abgebildeten Cache aufweist (der äquivalent zu einem satz-assoziativen Cache in einer Richtung ist). In solchen Caches kann die Cache-Zeile, wo eine Zeile mit einem angeforderten Wort platziert ist, nicht aus einer Adresse des angeforderten Wortes bestimmt werden. Es kann jedoch ein Satz (Gruppe von Cache-Zeilen), wo die das angeforderte Wort enthaltene Zeile platziert ist, aus der Adresse bestimmt werden, und die Zeile wird auf eine Cache-Zeile platziert, welche sich in dem Satz befindet und nicht für die Speicherung einer Zeile verwendet wird.
  • Folglich kann in Bezug auf diese Caches eine Cache-Zeile, welche zum Halten der Zeile zukünftig verwendet wird, basierend auf der Adresse des angeforderten Wortes spezifiziert werden. Deshalb kann diese Technik auf Computer angewendet werden, welche satz-assoziative oder voll-assoziative Caches aufweisen.
  • Natürlich kann diese Technik auch auf einen Computer angewendet werden, der mit keinem virtuellen Cache versehen ist, jedoch einen physikalischen Cache aufweist, in dem das Indizieren durch die Verwendung von physikalischen Adressen durchgeführt wird.
  • Zusammenfassend kann diese binäre Konversions-Technik auf jeden Computer angewendet werden, in dem eine Speicherposition eines angeforderten Wortes in dem Cache-Speicher aus seiner Adresse bestimmt werden kann.
  • Es sei angemerkt, dass ein Teil dieser Technik auf einen Computer ohne einen Cache-Speicher angewendet werden kann. Beispielsweise ist die Ersetzungstechnik, die in dem Verzweigungs-Vorhersage-Prozess beschrieben wird, in einem Computer ohne Cache-Speicher effektiv. Dies liegt daran, dass durch die Verwendung dieser Technik ein ursprüngliches Objektprogramm, welches Instruktions-Codes enthält, welche nicht für einen Zielcomputer geeignet sind, in ein neues Objektprogramm konvertiert werden kann, welches Instruktions-Codes enthält, die für den Computer geeignet sind.

Claims (9)

  1. Binäre Programm-Konversions-Vorrichtung, verwendet zum Konvertieren eines ersten binären Programms, welches aus einer Vielzahl von ersten Instruktionsblöcken besteht, in ein zweites binäres Programm, welches in einem Computer mit Cache-Speicher ausgeführt wird, umfassend: ein Erstellungsmittel (11) zum Hinzufügen eines zusätzlichen Bereichs (CaB) zu dem ersten binären Programm, wobei der zusätzliche Bereich eine Größe aufweist, welche einer Größe des Cache-Speichers entspricht; ein Ausführungsmittel (12) zum Ausführen des ersten binären Programms; ein Generierungsmittel (13) zum Generieren einer Information zu den ausgeführten Blöcken, welche erste Instruktionsblöcke angibt, die durch das Ausführungsmittel (12) ausgeführt werden; und ein Erzeugungsmittel (15) zum Erzeugen, basierend auf der Information zu den ausgeführten Blöcken, welche durch das Generierungsmittel (13) generiert wird, des zweiten binären Programms, welches zweite Instruktionsblöcke enthält, welche der Vielzahl von ersten Instruktionsblöcken entsprechen, und welches bei seiner Ausführung in dem Computer verursacht, dass der Computer die zweiten Instruktionsblöcke, welche den ersten Instruktionsblöcken entsprechen, die durch das Ausführungsmittel (12) ausgeführt werden, in dem Cache-Speicher speichert, und zwar nachdem die zweiten Instruktionsblöcke, welche den ausgeführten ersten Instruktionsblöcken entsprechen, in einen aufeinander folgenden Zeilenbereich in dem zusätzlichen Bereich (CaB) kopiert worden sind.
  2. Binäre Programm-Konversions-Vorrichtung nach Anspruch 1, ferner umfassend: ein Erstellungsmittel (14) zum Erstellen von Zeilendaten, welche Zeilen des Cache-Speichers angeben, welche zu verwenden sind, wenn das zweite binäre Programm, welches durch das Erzeugungsmittel erzeugt wird, in dem Computer ausgeführt wird; und ein Steuermittel zum Steuern des Ausführungsmittels (12), um ein drittes binäres Programm auszuführen, welches aus einer Vielzahl von dritten Instruktionsblöcken besteht, und zum Steuern des Generierungsmittels (13), um eine zweite Information zu den ausgeführten Blöcken zu generieren, welche dritte Instruktionsblöcke angibt, welche durch das Ausführungsmittel (12) ausgeführt werden, und zum Steuern des Erzeugungsmittels (15), um basierend auf der zweiten Information zu den ausgeführten Blöcken und den Zeilendaten ein viertes binäres Programm zu erzeugen, welches vierte Instruktionsblöcke enthält, welche der Vielzahl von dritten Instruktionsblöcken entsprechen, und welches bei seiner Ausführung in dem Computer verursacht, dass der Computer die vierten Instruktionsblöcke speichert, welche den dritten Instruktionsblöcken entsprechen, welche in dem Ausführungsmittel (12) ausgeführt werden, und zwar an unterschiedlichen Positionen auf den Zeilen des Cache-Speichers ausschließlich der Zeilen, welche durch die Zeilendaten angegeben werden.
  3. Binäre Programm-Konversions-Vorrichtung nach Anspruch 1 oder 2, ferner umfassend: ein Erkennungsmittel (14) zum Erkennen der Frequenz zur Verwendung für den Datenzugriff jeder Zeile des Cache-Speichers durch Überwachen der laufenden Zustände des ersten binären Programms, welches durch das Ausführungsmittel ausgeführt wird; und ein Auswahlmittel (14) zum Auswählen, basierend auf einem Erkennungsergebnis des Erkennungsmittels, von Zeilen aus allen Zeilen des Cache-Speichers zur Verwendung für das Speichern der zweiten Instruktionsblöcke, welche den ersten Instruktionsblöcken entsprechen, die durch das Ausführungsmittel ausgeführt werden, und wobei das Erzeugungsmittel (15) das zweite binäre Programm erzeugt, welches bei seiner Ausführung in dem Computer verursacht, dass der Computer die zweiten Instruktionsblöcke speichert, welche den ersten Instruktionsblöcken entsprechen, welche durch das Ausführungsmittel ausgeführt werden, und zwar an unterschiedlichen Positionen auf den Zeilen, welche durch das Auswahlmittel (14) ausgewählt werden.
  4. Binäre Programm-Konversions-Vorrichtung nach Anspruch 1, 2 oder 3, ferner umfassend: ein Suchmittel (15) zum Auffinden aus einem binären Programm, das durch das Erzeugungsmittel (15) erzeugt wird, von einem zweiten Instruktionsblock, der in einer bedingten Verzweigungsinstruktion endet, deren Verzweigungsziel für einen nächsten zweiten Instruktionsblock eingestellt ist; und ein Veränderungsmittel (15) zum Verändern einer Verzweigungsbedingung und des Verzweigungsziels der bedingten Verzweigungsinstruktion, so dass ein Übergang von dem zweiten Instruktionsblock, der durch das Suchmittel aufgefunden wird, zu dem nächsten zweiten Instruktionsblock ohne Verzweigung stattfindet.
  5. Binäres Programm-Konversions-Verfahren, verwendet zum Konvertieren eines ersten binären Programms, welches aus einer Vielzahl von ersten Instruktionsblöcken besteht, in ein zweites binäres Programm, welches in einem Computer mit einem Cache-Speicher ausgeführt wird, umfassend: einen Erstellungsschritt zum Hinzufügen eines zusätzlichen Bereichs (CaB) zu dem ersten binären Programm, wobei der zusätzliche Bereich eine Größe aufweist, welche einer Größe des Cache-Speichers entspricht; einen Ausführungsschritt zum Ausführen des ersten binären Programms; einen Generierungsschritt zum Generieren einer Information zu ausgeführten Blöcken, welche erste Instruktionsblöcke angibt, welche in dem Ausführungsschritt ausgeführt werden; und einen Erzeugungsschritt zum Erzeugen, basierend auf der Information zu den ausgeführten Blöcken, welche in dem Generierungsschritt generiert wird, des zweiten binären Programms, welches zweite Instruktionsblöcke enthält, welche der Vielzahl von ersten Instruktionsblöcken des ersten binären Programms entsprechen, und welches bei seiner Ausführung in dem Computer verursacht, dass der Computer die zweiten Instruktionsblöcke, welche den ersten Instruktionsblöcken entsprechen, die in dem Ausfüh rungsschritt ausgeführt werden, in dem Cache-Speicher speichert, und zwar nachdem die zweiten Instruktionsblöcke, welche den ausgeführten ersten Instruktionsblöcken entsprechen, in einen aufeinander folgenden Zeilenbereich in dem zusätzlichen Bereich (CaB) kopiert worden sind.
  6. Binäres Programm-Konversions-Verfahren nach Anspruch 5, ferner umfassend: einen Erstellungsschritt zum Erstellen von Zeilendaten, welche Zeilen des Cache-Speichers angeben, welche zu verwenden sind, wenn das zweite binäre Programm, welches in dem Erzeugungsschritt erzeugt wird, in dem Computer ausgeführt wird; und einen Steuerschritt zum Steuern des Ausführungsschritts, um ein drittes binäres Programm auszuführen, welches aus einer Vielzahl von dritten Instruktionsblöcken besteht, und zum Steuern des Generierungsschritts, um eine zweite Information zu den ausgeführten Blöcken zu generieren, welche dritte Instruktionsblöcke angibt, welche in dem Ausführungsschritt ausgeführt werden, und zum Steuern des Erzeugungsschritts, um basierend auf der zweiten Information zu den ausgeführten Blöcken und den Zeilendaten ein viertes binäres Programm zu erzeugen, welches vierte Instruktionsblöcke enthält, welche der Vielzahl von dritten Instruktionsblöcken entsprechen, und welches bei seiner Ausführung in dem Computer verursacht, dass der Computer die vierten Instruktionsblöcke speichert, welche den dritten Instruktionsblöcken entsprechen, welche durch das Ausführungsmittel ausgeführt werden, und zwar an unterschiedlichen Positionen auf Zeilen des Cache- Speichers ausschließlich der Zeilen, die durch die Zeilendaten angegeben werden.
  7. Binäres Programm-Konversions-Verfahren nach Anspruch 5 oder 6, ferner umfassend: einen Erkennungsschritt zum Erkennen der Frequenz zur Verwendung für den Datenzugriff jeder Zeile des Cache-Speichers durch Überwachen der laufenden Zustände des ersten binären Programms, welches in dem Ausführungsschritt ausgeführt wird; und einen Auswahlschritt zum Auswählen von Zeilen aus allen Zeilen des Cache-Speichers zur Verwendung für das Speichern von zweiten Instruktionsblöcken basierend auf einem Erkennungsergebnis des Erkennungsschritts, und wobei der Erzeugungsschritt das Erzeugen des zweiten binären Programms beinhaltet, welches bei seiner Ausführung in dem Computer verursacht, dass der Computer zweite Instruktionsblöcke speichert, welche den ersten Instruktionsblöcken entsprechen, welche in dem Ausführungsschritt ausgeführt werden, und zwar an unterschiedlichen Positionen auf den Zeilen, welche dem Auswahlschritt ausgewählt werden.
  8. Binäres Programm-Konversions-Verfahren nach Anspruch 5, 6 oder 7, ferner umfassend: einen Suchschritt zum Auffinden eines zweiten Instruktionsblocks, der in einer bedingten Verzweigungsinstruktion endet, deren Verzweigungsziel für einen nächsten zweiten Instruktionsblock eingestellt ist; und einen Veränderungsschritt zum Verändern einer Verzweigungsbedingung und des Verzweigungsziels der bedingten Verzweigungsinstruktion, so dass ein Übergang von dem zweiten Instruktionsblock, der in dem Suchschritt aufgefunden wird, zu dem nächsten zweiten Instruktionsblock ohne Verzweigung stattfindet.
  9. Aufzeichnungsmedium, welches wenigstens ein Computerprogramm speichert, das beim Laden in einen Computer mit einem Cache-Speicher folgende Funktionen bereitstellt: ein Erstellungsmittel (11) zum Hinzufügen eines zusätzlichen Bereichs (CaB) zu einem ersten binären Programm, wobei der zusätzliche Bereich eine Größe aufweist, welche einer Größe des Cache-Speichers entspricht; ein Ausführungsmittel (12) zum Ausführen des ersten binären Programms, welches aus einer Vielzahl von ersten Instruktionsblöcken besteht; ein Generierungsmittel (13) zum Generieren einer Information zu ausgeführten Blöcken, welche erste Instruktionsblöcke angibt, welche durch das Ausführungsmittel (12) ausgeführt werden; und ein Erzeugungsmittel (15) zum Erzeugen, basierend auf der Information zu den ausgeführten Blöcken, welche durch das Generierungsmittel generiert wird, von einem zweiten binären Programm, welches zweite Instruktionsblöcke enthält, welche der Vielzahl von ersten Instruktionsblöcken des ersten binären Programms entsprechen, und welches bei seiner Ausführung in dem Computer verursacht, dass der Computer die zweiten Instruktionsblöcke, welche den ersten Instruktionsblöcken entsprechen, die durch das Ausführungsmittel ausgeführt werden, in einem Cache-Speicher speichert, und zwar nachdem die zweiten In struktionsblöcke, welche den ausgeführten ersten Instruktionsblöcken entsprechen, in einen aufeinander folgenden Zeilenbereich in dem zusätzlichen Bereich (CaB) kopiert worden sind.
DE69735342T 1996-10-28 1997-10-15 Binärprogrammkonvertiergerät und -verfahren Expired - Lifetime DE69735342T2 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP28567096 1996-10-28
JP28567096 1996-10-28

Publications (2)

Publication Number Publication Date
DE69735342D1 DE69735342D1 (de) 2006-04-27
DE69735342T2 true DE69735342T2 (de) 2006-08-03

Family

ID=17694540

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69735342T Expired - Lifetime DE69735342T2 (de) 1996-10-28 1997-10-15 Binärprogrammkonvertiergerät und -verfahren

Country Status (5)

Country Link
US (1) US6591414B2 (de)
EP (1) EP0838755B1 (de)
KR (1) KR100297172B1 (de)
CN (1) CN1152287C (de)
DE (1) DE69735342T2 (de)

Families Citing this family (39)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2344907A (en) * 1998-12-19 2000-06-21 Int Computers Ltd Instruction translation and execution mechanism
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
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
US7111290B1 (en) 1999-01-28 2006-09-19 Ati International Srl Profiling program execution to identify frequently-executed portions and to assist binary translation
US6954923B1 (en) 1999-01-28 2005-10-11 Ati International Srl Recording classification of instructions executed by a computer
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
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
US7275246B1 (en) * 1999-01-28 2007-09-25 Ati International Srl Executing programs for a first computer architecture on a computer of a second architecture
US6826748B1 (en) 1999-01-28 2004-11-30 Ati International Srl Profiling program execution into registers of a computer
US6779107B1 (en) 1999-05-28 2004-08-17 Ati International Srl Computer execution by opportunistic adaptation
US6675377B1 (en) * 1999-09-13 2004-01-06 Matsushita Electric Industrial Co., Ltd. Program conversion apparatus
US6415379B1 (en) * 1999-10-13 2002-07-02 Transmeta Corporation Method and apparatus for maintaining context while executing translated instructions
KR100345401B1 (ko) * 1999-10-19 2002-07-26 한국전자통신연구원 바이너리 프로그램 변환 장치 및 그 방법
JP2001273138A (ja) * 2000-03-24 2001-10-05 Fujitsu Ltd プログラム変換装置および方法
JP2001344120A (ja) * 2000-05-30 2001-12-14 Hitachi Ltd プログラム制御システム及びプログラム制御方法
GB2364852A (en) * 2000-07-14 2002-02-06 Nokia Mobile Phones Ltd Alert signal generation
US6834383B2 (en) * 2001-11-26 2004-12-21 Microsoft Corporation Method for binary-level branch reversal on computer architectures supporting predicated execution
CA2724141A1 (en) * 2003-03-10 2004-09-23 Mudalla Technology, Inc. Dynamic configuration of a gaming system
US6925928B2 (en) * 2003-09-18 2005-08-09 Anthony Fox Trash compactor for fast food restaurant waste
US20070216696A1 (en) * 2006-03-16 2007-09-20 Toshiba (Australia) Pty. Limited System and method for document rendering employing bit-band instructions
US8719807B2 (en) * 2006-12-28 2014-05-06 Intel Corporation Handling precompiled binaries in a hardware accelerated software transactional memory system
US8286152B2 (en) * 2007-08-22 2012-10-09 International Business Machines Corporation Systems, methods, and computer products for just-in-time compilation for virtual machine environments for fast application startup and maximal run-time performance
JP5082716B2 (ja) * 2007-09-20 2012-11-28 富士通セミコンダクター株式会社 プログラム変換装置、プログラム変換方法およびプログラム変換プログラム
US8700860B2 (en) * 2009-10-16 2014-04-15 Canon Kabushiki Kaisha Information processing apparatus, method and computer program
JP5778983B2 (ja) * 2011-05-17 2015-09-16 キヤノン株式会社 データ処理装置、データ処理装置の制御方法、およびプログラム
US8661222B2 (en) * 2011-09-13 2014-02-25 International Business Machines Corporation Data object profiling during program execution
JP2013079860A (ja) 2011-10-04 2013-05-02 Advantest Corp ソケット及び電子部品試験装置
US20130138888A1 (en) * 2011-11-30 2013-05-30 Jama I. Barreh Storing a target address of a control transfer instruction in an instruction field
WO2013130548A2 (en) * 2012-02-27 2013-09-06 University Of Virginia Patent Foundation Method of instruction location randomization (ilr) and related system
US8954546B2 (en) 2013-01-25 2015-02-10 Concurix Corporation Tracing with a workload distributor
US20130283281A1 (en) 2013-02-12 2013-10-24 Concurix Corporation Deploying Trace Objectives using Cost Analyses
US8997063B2 (en) 2013-02-12 2015-03-31 Concurix Corporation Periodicity optimization in an automated tracing system
US8924941B2 (en) 2013-02-12 2014-12-30 Concurix Corporation Optimization analysis using similar frequencies
US9665474B2 (en) 2013-03-15 2017-05-30 Microsoft Technology Licensing, Llc Relationships derived from trace data
CN104063234B (zh) * 2013-03-19 2017-06-27 华为技术有限公司 一种兼容方法及装置
US9575874B2 (en) 2013-04-20 2017-02-21 Microsoft Technology Licensing, Llc Error list and bug report analysis for configuring an application tracer
US9292415B2 (en) 2013-09-04 2016-03-22 Microsoft Technology Licensing, Llc Module specific tracing in a shared module environment
US9772927B2 (en) 2013-11-13 2017-09-26 Microsoft Technology Licensing, Llc User interface for selecting tracing origins for aggregating classes of trace data
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 (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5212794A (en) * 1990-06-01 1993-05-18 Hewlett-Packard Company Method for optimizing computer code to provide more efficient execution on computers having cache memories
US5317738A (en) * 1992-02-18 1994-05-31 Ncr Corporation Process affinity scheduling method and apparatus
JP3206100B2 (ja) 1992-05-19 2001-09-04 東レ株式会社 自動車ラジエタータンクトップおよびベース
US5752038A (en) * 1994-03-16 1998-05-12 Microsoft Corporation Method and system for determining an optimal placement order for code portions within a module
US6129458A (en) * 1994-03-23 2000-10-10 At&T Global Information Solutions Company Cache optimization method
US5664191A (en) * 1994-06-30 1997-09-02 Microsoft Corporation Method and system for improving the locality of memory references during execution of a computer program
US5842017A (en) * 1996-01-29 1998-11-24 Digital Equipment Corporation Method and apparatus for forming a translation unit
US5815720A (en) * 1996-03-15 1998-09-29 Institute For The Development Of Emerging Architectures, L.L.C. Use of dynamic translation to collect and exploit run-time information in an optimizing compilation system
US5768593A (en) * 1996-03-22 1998-06-16 Connectix Corporation Dynamic cross-compilation system and method
US5765204A (en) * 1996-06-05 1998-06-09 International Business Machines Corporation Method and apparatus for adaptive localization of frequently accessed, randomly addressed data

Also Published As

Publication number Publication date
EP0838755A3 (de) 2000-05-24
US20010003822A1 (en) 2001-06-14
EP0838755A2 (de) 1998-04-29
EP0838755B1 (de) 2006-03-01
KR19980033137A (ko) 1998-07-25
DE69735342D1 (de) 2006-04-27
KR100297172B1 (ko) 2001-08-07
CN1181528A (zh) 1998-05-13
US6591414B2 (en) 2003-07-08
CN1152287C (zh) 2004-06-02

Similar Documents

Publication Publication Date Title
DE69735342T2 (de) Binärprogrammkonvertiergerät und -verfahren
DE2459006C2 (de) Einrichtung zum Bilden einer absoluten Adresse in einer Datenverarbeitunsanlage
DE2630323C3 (de) Datenspeichereinrichtung mit einem Hauptspeicher, einem HilfsSpeicher und einer Vorausschaulogik
DE19945992B4 (de) Dynamisch optimierender Objektcode-Übersetzer zur Architekturemulation und dynamisches optimierendes Objektcode-Übersetzungsverfahren
DE69924857T2 (de) Programm-kode-umwandlung
DE2226382C3 (de) Datenverarbeitungsanlage mit mehreren Prozessoren und diesen zugeordneten Pufferspeichern
DE2415900C3 (de) Rechenautomat mit mehreren mit je einem Vorratsspeicher versehenen Rechenanlagen
DE2054835C2 (de) Steuereinrichtung in einem Prozessor einer Mehrprozessor-Datenverarbeitungsanlage
DE3102150A1 (de) "schaltungsanordnung mit einem cachespeicher fuer eine zentraleinheit einer datenverarbeitungsanlage
DE1299146B (de) Befehlssteuereinheit
DE3390323T1 (de) Ermittlung eines sequentiellen Datenstroms
DE69905776T2 (de) Sprachenverarbeitungsverfahren mit geringem Aufwand und Speicherbedarf bei der Profildatensammlung
DE10219623A1 (de) System und Verfahren zur Speicherentscheidung unter Verwendung von mehreren Warteschlangen
DE4345028A1 (de) Vorrichtung zur Reduzierung von Verzögerungen aufgrund von Verzweigungen
DE60211452T2 (de) DMA-Übertragung von Daten und Prüfinformation zu und von einem Datenspeicherungsgerät
DE2054830A1 (de) Informationsverarbeitungssystem mit wortstrukturiertem Speicher und Verfahren fur einen Zugriff zu einem derar tigen Speicher
DE69726795T2 (de) Kodierungsverfahren des Verzeichnisstatus in einem gemeinsamen, verteilten Speichersystem mit koherenten Pufferspeichern
DE2458286A1 (de) Datenverarbeitungssystem zum verschieben von datenfeldern mit verschiedenen strukturen
EP1079307B1 (de) Verfahren zum Betrieb eines Speichersystems sowie Speichersystem
WO2000014631A2 (de) Verfahren zum linken von in einen arbeitsspeicher eines prozessors nachgeladenen programmodulen auf einer chipkarte
DE10393835T5 (de) Ausführung einer modifizierten Cheney-Abtastung in einer Multithreaded-Verarbeitungsumgebung
DE2710477A1 (de) Anordnung zur kohaerenten leitung des informationsaustauschs zwischen zwei aneinanderstossenden niveaus einer speicherhierarchie
DE1774053A1 (de) Digitaldaten-UEbertragungssystem
DE4323929A1 (de) Software-geführtes Mehrebenen-Cache-Speichersystem
DE4021784A1 (de) Vektorprozessor

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
8328 Change in the person/name/address of the agent

Representative=s name: SEEGER SEEGER LINDNER PARTNERSCHAFT PATENTANWAELTE