-
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;
-
19–26 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 19–26 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.