Die
Aufgabe der vorliegenden Erfindung besteht darin, ein Verfahren
und ein System zum Einrichten eines Erfolgsstatus eines neulichsten
vorgezogenen Ladebefehls, der mit einem Prüfbefehl übereinstimmt, und eine Vorrichtung
zum effizienten Identifizieren und Prüfen der Gültigkeit eines neulichsten vorgezogenen
Ladebefehls bei der Ausführung
eines Prüfbefehls
zu schaffen, so dass die Befehlsoptimierung effektiver wird.
Diese
Aufgabe wird durch ein Verfahren gemäß Anspruch 1 sowie durch eine
Prüfschaltung
gemäß Anspruch
11 gelöst.
Diese
und weitere Aufgaben, Merkmale und technischen Vorteile werden durch
ein System und ein Verfahren erzielt, das die ursprünglichen
Ladebefehle in vorgezogene Ladebefehle und Prüfbefehle aufteilt. Die vorgezogenen
Ladebefehle werden vorzugsweise an einer vorgezogeneren Position
in einer Codesequenz als die entsprechenden ursprünglichen
Ladebefehle positioniert und wirken, um Daten zu laden. Jeder Prüfbefehl
wirkt vorzugsweise, um die Gültigkeit
von vorgezogenen Ladebefehlen zu überprüfen, die ein spezielles Register
verwenden, identifiziert den neulichsten vorgezogenen Ladebefehl,
der dieses Register verwendet, und prüft die Gültigkeit des identifizierten
neulichsten vorgezogenen Ladebefehls, indem derselbe denselben mit Speicherbefehl adreßinformationen
vergleicht, die in einer Befehlswarteschlange oder -Pipeline anhängig sind.
Wenn keine Übereinstimmung
mit den Speicherbefehladreßinformationen
vorgefunden wird, wird die spekulative Durchführung vorzugsweise als erfolgreich
betrachtet, wodurch angezeigt wird, daß die Plazierung des vorgezogenen
Ladebefehls nicht in Konflikt mit einem Speicherbefehl trat, und daß die spekulative
Durchführung
dieses vorgezogenen Ladebefehls hin folglich erfolgreich war. Allgemein
wird auf das Aufteilen eines ursprünglichen Ladebefehls, wie es
im vorhergehenden erwähnt
wurde, ein vorgezogener Ladebefehl, der dem ursprünglichen
Ladebefehl entspricht, in einer optimierten Codesequenz vor einen
ausgewählten
Speicherbefehl plaziert, wobei ein Prüfbefehl, der dem ursprünglichen
Ladebefehl entspricht, an der Position des ursprünglichen Ladebefehls gehalten
wird.
Die
Identifizierung des neulichsten vorgezogenen Ladebefehls und die
Prüfung
der Gültigkeit dieses
vorgezogenen Ladebefehls gegenüber
Speicheradreßinformationen
werden vorzugsweise unabhängig
voneinander und parallel durchgeführt, wodurch vorzugsweise die
Gesamtzykluszeitdauer verbessert und die Übertragung von Konfliktinformationen
(dem „Treffer"- oder „Fehlschlag"-Status eines Vergleichs
mit Speicheradreßinformationen)
an eine Ausnahmehandhabungseinheit früh genug bewirkt wird, um eine
Wiederherstellung einzuleiten.
Vorzugsweise
werden eine oder mehrere Tabellen zum Speichern von Informationen
verwendet, die den vorgezogenen Ladebefehlen zugeordnet sind. Die
Tabellen, die für
diesen Zweck verwendet werden, sind vorzugsweise vollständig assoziativ bzw.
inhaltsadressierbar, wodurch Vergleiche einer Dateneinheit, wie
z. B. einer Speicherbefehlsspeicheradres se mit jeglichem Dateneintrag,
der in der Tabelle gespeichert ist, ermöglicht werden. Die vollständig assoziativen
Tabellen ermöglichen
ferner vorzugsweise, daß Registernummern
und Speicheradressen irgendwo in der Tabelle gespeichert werden
können,
wodurch eine Notwendigkeit, die Tabelle gemäß der Registernummer zu indexieren,
vermieden wird. Bei einem bevorzugten Ausführungsbeispiel können Daten,
die in Zuordnung zu einem vorgezogenen Ladebefehl bewahrt werden,
die Registernummer, zu der ein Befehl Daten geladen hat, die Speicheradresse,
von der aus die Daten geladen wurden, und eine Aufzeichnung des
Gültigkeitsstatus des
vorgezogenen Ladebefehls umfassen. Solche Informationen können in
einer einzigen Tabelle gehalten oder in entsprechenden Positionen
in einer Mehrzahl von getrennten Tabellen gespeichert sein.
Im
allgemeinen sind zwei Ergebnisse möglich, wenn ein vorgezogener
Ladebefehl auf einen Konflikt mit Speicherbefehlsspeicheradressen
hin überprüft wird.
Insbesondere kann die Überprüfung ein „Treffer" oder ein „Fehlschlag" sein. Hierin bezieht sich „Treffer" auf einen Fall,
bei dem der vorgezogene Ladebefehl mit den bekannten Speicherbefehlsadressen
nicht in Konflikt steht, und der vorgezogene oder neu angeordnete
Ladebefehl an seiner modifizierten Position verbleiben kann, ohne
jegliche nachteilige Nebeneffekte für die gesamte Programmausführung zu
verursachen. Hierin bezieht sich ein „Fehlschlag" auf einen Fall,
bei dem die Speicheradresse, die einem vorgezogenen Ladebefehl zugeordnet
ist, mit einer Speicherbefehlsspeicheradresse in Konflikt steht.
Ein „Fehlschlag" löst allgemein
eine von zwei möglichen
Antworten aus. Eine erste Antwort umfaßt vorzugsweise das Aktivieren
eines Neuladevorgangs der Daten als Teil der Prüfoperation. Eine zweite Antwort
bewirkt vor zugsweise ein Umlenken zu dem Wiederherstellungscode,
der ein Neuladen der Daten und eine Neuausführung von Befehlen implementiert,
die die geladenen Daten verwendet haben. Der Ausdruck spekulativ
durchgeführter
Ladebefehl bezieht sich hierin allgemein auf einen vorgezogenen Ladebefehl.
Folglich
besteht ein Vorteil eines bevorzugten Ausführungsbeispiels der vorliegenden
Erfindung darin, daß der
Tabellenspeicher vollständig
assoziativ ist, wodurch in der Tabelle eine flexible Plazierung von
Einträgen
ermöglicht
wird.
Ein
weiterer Vorteil eines bevorzugten Ausführungsbeispiels der vorliegenden
Erfindung besteht darin, daß die
Softwaresteuerung des Optimierungsprozesses den Einsatz eines Befehlsfensters mit
unbegrenzter Größe ermöglicht.
Ein
wiederum weiterer Vorteil eines bevorzugten Ausführungsbeispiels der vorliegenden
Erfindung besteht darin, daß die
Softwaresteuerung des Wiederherstellungsprozesses Ausführungszeitdauer
einspart.
Ein
weiterer Vorteil eines bevorzugten Ausführungsbeispiels der vorliegenden
Erfindung besteht darin, daß die
Parallelisierung der Vergleichsprozesse für Adressen und Registernummern
(oder Registeridentifikationen) eine Übertragung bzw. Kommunikation
eines Treffer/Fehlschlag-Status für eine Prüfoperation bezüglich eines
vorgezogenen Ladebefehls zu einer Ausnahmehandhabungseinheit früh genug
ermöglicht,
damit ein Prozessor jegliche Fehler enthält, die sich aus einer Verwendung
von ungültigen
geladenen Daten ergeben.
Die
vorhergehende Beschreibung hat die Merkmale und technischen Vorteile
der vorliegenden Erfindung eher allgemein beschrieben, damit die
detaillierte Beschreibung der Erfindung, die folgt, besser verstanden
werden kann. Zusätzliche
Merkmale und Vorteile der Erfindung, die den Gegenstand der Ansprüche der
Erfindung bilden, werden hiernach beschrieben. Es wird darauf hingewiesen,
daß die Konzeption
und das offenbarte spezifische Ausführungsbeispiel ohne weiteres
als Basis für
eine Modifizierung oder zum Entwerfen anderer Strukturen zum Ausführen der
selben Zwecke der vorliegenden Erfindung verwendet werden können. Es
wird ferner darauf hingewiesen, daß solche äquivalenten Aufbauten den Schutzbereich
der Erfindung, wie er in den beiliegenden Ansprüchen beschrieben wird, nicht
verlassen.
Bevorzugte
Ausführungsbeispiele
der vorliegenden Erfindung werden nachfolgend bezugnehmend auf die
beiliegenden Zeichnungen näher
erläutert.
Es zeigen:
1 eine
Stichprobensequenz eines ursprünglichen
Codes und eine zugeordnete Sequenz eines optimierten Codes;
2 einen
Ablaufmechanismus zum Identifizieren von Konflikten zwischen einem
vorgezogenen Ladebefehl und einem Speicherbefehl, der eine satzassoziative
bzw. eine satzadressierbare Zweiwegeimplementierung verwendet;
3 ein
Logikblockdiagramm eines Systems für gleichzeitige Registeridentifikations-
und Speicheradreßvergleichsoperationen,
das eine vollständig
assoziative Tabellenimplementierung verwen det, gemäß einem
bevorzugten Ausführungsbeispiel
der vorliegenden Erfindung;
4 die
Vorablade/Speicher-Vergleichsmatrix von 3 detaillierter;
und
5 eine
Computervorrichtung, die für
eine Verwendung bei einem bevorzugten Ausführungsbeispiel der vorliegenden
Erfindung anpaßbar
ist.
1 stellt
einen Codeoptimierungsprozeß 100 mit
einer Stichprobensequenz eines ursprünglichen Codes 110 und
einer zugeordneten Sequenz eines optimierten Codes 120 dar.
Ein Befehl 111 wirkt, um den Inhalt von R1 (Register 1)
in einer Speicherposition zu speichern, die durch die Variable „x" dargestellt wird.
Ein Befehl 112 lädt
Daten von einer Speicherposition „y" in das Register R10. Ein Befehl 113 ist
ein Beispiel für
eine „Verwendung" der in das R10 geladenen
Daten. In diesem Fall wirkt der Befehl 113, um den Inhalt
von R10 (der soeben von der Speicherposition y aus geladen wurde)
zu dem Inhalt von R11 zu addieren und das Ergebnis in R12 zu speichern.
Weiter entlang in dem Ausführungsstrom der
Stichprobencodesequenz 110 befindet sich ein Befehl 114,
der wirkt, um Daten von einer Speicherposition „z" in R15 zu laden. Allgemein kann ein
Compiler bzw. Kompilierer, dem die Codesequenz 110 vorgelegt
wird, an dieser Kompilierungsstufe nicht wissen, ob die Speicherpositionswerte
x, y oder z die selben sind oder nicht. Hierin kann ein vorgezogener Ladebefehl
unter Verwendung der Abkürzungen „load.a" oder „ld.a" bezeichnet werden,
während
ein Prüfbefehl
unter Verwendung der Abkürzungen „check.a" oder „chk.a" bezeichnet werden
kann.
Die
optimierte Codesequenz 120 stellt einen möglichen
Lösungsansatz
dar, um die ursprüngliche Codesequenz 110 zu
optimieren. Allgemein wird jeder Ladebefehl in dem ursprünglichen
Code 110, den der Kompilierer spekulativ durchführen möchte, verwendet,
um zwei Einträge
in dem optimierten Code 120 zu erzeugen: einen Vorablade-
oder „load.a"-Befehl und ein „check.a"- oder Prüfbefehl.
Allgemein fügt
der Kompilierer anstatt eines ursprünglichen Ladebefehls an der
Programmposition, an der der ursprüngliche Ladebefehl positioniert
war, einen Prüfbefehl
für ein
gegebenes Zielregister ein. Der Kompilierer fügt allgemein ferner dem optimierten
Code 120 einen load.a-Befehl hinzu und plaziert diesen
Befehl in der Programmausführungssequenz
so weit wie möglich
vor einem Speicherbefehl zu zwei grundlegenden Zwecken. Der erste
Zweck besteht allgemein darin, jegliche Speicherlatenz, die durch
den vorgezogenen Ladebefehl erfahren wird, zu verbergen bzw. zu
verstecken. Der zweite Zweck besteht allgemein darin, jeden Befehl,
der die Daten verwendet, die durch den zugehörigen vorgezogenen Ladebefehl
gewonnen werden, vorzuziehen (in dem Programmausführungsfluß nach oben
hin neu einzuordnen). Ein Beispiel eines Befehls, der derart gewonnene
Daten verwendet, ist der Addierbefehl 113 in der ursprünglichen
Codesequenz 110.
Fortfahrend
mit dem Beispiel ist es ersichtlich, daß der Befehl 121 ld.a
[y], der dem Befehl 112 ld [y] in dem ursprünglichen
Code entspricht, in dem optimierten Code 120 vor den Speicherbefehl 124 plaziert
worden ist. Der Befehl 121 ld.a [y] arbeitet sehr ähnlich dem
ursprünglichen
Befehl 112 ld [y], wobei aber ld.a [y] 121 ein
spekulativer Ladebefehl ist. Der „Addier"- bzw. „add"-Befehl 113 von dem ursprünglichen
Code wird in dem optimierten Code hinter dem Befehl ld.a [y] plaziert
und ist durch das Bezugszeichen 122 angezeigt. Der spekulative
Befehl ld.a [z] wird in der optimierten Codesequenz 120 ebenfalls
vor dem Befehl 124 st [x] plaziert. Allgemein wird der
Speicherbefehl 124 an der selben Position wie derjenigen,
die dem Speicherbefehl 111 in der ursprünglichen Codesequenz 110 entspricht,
belassen.
Allgemein
erzeugt der Kompilierer, wenn derselbe die optimierte Codesequenz 120 erzeugt, bei
dem Ereignis eines Konflikts zwischen einer Speicherbefehlsspeicheradresse
und einer Speicheradresse, die einem spekulativen Ladebefehl zugeordnet
ist, eine Wiederherstellungscodesequenz. Eine Bezugnahme auf eine
solche Wiederherstellungscodesequenz bzw. Referenzierung eines solchen
ist durch das Bezugszeichen 127 angezeigt. Allgemein wird
eine Wiederherstellungscodesequenz das erneute Ausführen des
vorgezogenen Ladebefehls mit einer konfliktauslösenden Adresse sowie von Befehlen,
die Daten verwenden, die bei dem zugehörigen vorgezogenen Ladebefehl
gewonnen wurden, und eine Rückverzweigung
zu einem Punkt in der Ausführung
des optimierten Codes nach einem check.a-Befehl umfassen, an dem
der Konflikt erfaßt wurde.
Allgemein wird ein Adreßkonflikt
durch Schritte erfaßt,
die das Verwenden eines check.a-Befehls umfassen, der einem vorgezogenen
Ladebefehl zugeordnet ist. Das Bezugszeichen 128 zeigt
auf einen Codeabschnitt, der einen „Rücksprung zu chk.a + 1" aufweist, was eine
Verzweigung zu einem Befehl in der optimierten Codesequenz 120 anzeigt,
der auf den Prüfbefehl,
der das R15 einbezieht (Bezugszeichen 126), folgt. Allgemein
besteht der Zweck des Wiederherstellungscodes darin, das Programmverhalten
zu bewahren.
2 stellt
eine Einrichtung 200 zum Identifizieren von Konflikten
zwischen einem vorgezogenen Ladebefehl und einem Speicherbefehl
dar, die eine satzassoziative Zweiwegeimple mentierung verwendet.
Eine ALAT (advanced load address table; advanced load address table
= Vorabladeadreßtabelle) 201 wird
allgemein zum Speichern von Adressen verwendet, die vorgezogenen
Ladebefehlen zugeordnet sind, wobei die Adressen allgemein gemäß einer
Registernummer indexiert werden. Die ALAT 201 umfaßt allgemein
zwei „Wege" oder Pfade 205 und 206 für Adressen,
die in der ALAT 201 gespeichert sind. Allgemein wird eine
Vier-Bit-Darstellung verwendet, um die Indexnummer einer Speicheradresse zu
identifizieren, die in der ALAT 201 gespeichert ist.
Allgemein
wird ein Eintrag dadurch erzeugt, daß eine Speicheradresse, die
einem vorgezogenen Ladebefehl zugeordnet ist, an einer Tabellenposition positioniert
wird, die einer Indexposition entspricht, die der Registernummer
entspricht, die bei dem zugehörigen
vorgezogenen Ladebefehl verwendet wird. Die Anzahl von Bits, die
verwendet wird, um eine Eintragposition anzugeben, ist allgemein
durch die Menge an Platz bestimmt, die in der Tabelle verfügbar ist.
Wenn beispielsweise die Tabelle 16 Einträge enthält, wird allgemein eine Vier-Bit-Darstellung verwendet
werden.
Allgemein
weisen die Informationen, die in jedem Eintrag in der ALAT 201 gespeichert
sind, eine Speicheradresse, ein Etikett und eine Auswahl von Bits
von der Register-ID auf. Ein „Etikett" ist eine Dateneinheit,
die entweder aus einer Speicheradresse oder der Register-ID hergeleitet
wird, und die eine solche Speicheradresse oder Register-ID. im wesentlichen
eindeutig definiert. Wenn beispielsweise 40-Bit-Speicheradressen betroffen sind, können 20 Bits
der vollständigen
40 Bits in einem Etikett gespeichert sein, das einer speziellen
Speicheradresse zugeordnet ist. Es besteht allgemein ein Konfliktausgleich
zwischen dem Platz, der er forderlich ist, um die Etiketten zu speichern,
und der Möglichkeit
eines Konflikts zwischen Etiketten, die unterschiedliche Speicheradressen
darstellen. Die Informationen, die in jedem Eintrag gespeichert
sind, können
ferner Typ- und
Rahmenbits umfassen, die jedem Eintrag zugeordnet sind.
Ein
exemplarischer Fall kann vorgezogene Ladebefehle umfassen, die Registernummern
R8, R24 und R56 zugeordnet sind. Die Verfügbarkeit von zwei getrennten
Wegen, d. h. einem Weg0 205 und Weg1 206, ermöglicht,
daß in
die Tabelle zwei Einträge
eingetragen werden, wobei die zwei Einträge dem selben Vier-Bit-Wert
zugeordnet sind. Die drei aufgelisteten Register weisen jedoch die
selben unteren vier Bits auf, und folglich wird die Tabelle nicht
in der Lage sein, die Speicheradressen, die allen drei Registern
8, 24 und 56 zugeordnet sind, gleichzeitig zu speichern. Allgemein
wird, wenn ein Versuch unternommen wird, einen dritten Eintrag mit
einer Register-ID mit der selben Vier-Bit-Sequenz einzuführen, einer
der früheren
Einträge
ersetzt werden müssen, um
Platz für
den neulichsten bzw. jüngsten
Eintrag zu machen.
Allgemein
wird, wenn in der Programmausführung
ein Prüfbefehl
angetroffen wird, die Registernummer, die dem Prüfbefehl zugeordnet ist, zu
der ALAT 201 kommuniziert bzw. überträgt, was bewirkt, daß die Speicheradressen,
die in beiden Wegen 205 und 206 der ALAT 201 gespeichert
sind, zu einem WEG-MUX bzw. WEG-MULTIPLEXER 202 geleitet werden.
Allgemein wird bei dem WEG-MUX 202 gemäß der Registernummer ein korrekter
WEG ausgewählt 207,
wobei eine resultierende Adresse allgemein zu einem LADE-MUX 203 geleitet
wird. Der LADE-MUX 203 wirkt allgemein, um zwischen Speicheradressen,
die einem vorgezogenen Tabelleneintrag-Ladebefehl, der im vorhergehenden
erörtert wurde,
zugeordnet sind, und Adressen, die vorgezogenen Unterwegszustand-Ladebefehlen
zugeordnet sind, auszuwählen,
um eine Endadresse 208 zu einer Adreßvergleichsmatrix 209 zu
liefern. Die Adreßvergleichsmatrix 209 wirkt
allgemein, um Endadressen 208 mit Speicheradressen zu vergleichen,
auf die durch Unterwegszustand-Speicherbefehle zugegriffen wird,
um eine Treffer/Fehlschlag-Bestimmung für einen speziellen check.a-
oder Lade-Prüf-Befehl
zu erzeugen. Es wird darauf hingewiesen, daß sich die Adreßvergleichsmatrix 209,
die in 2 dargestellt ist, von der Vergleichsmatrix 305,
die in 3 und 4 dargestellt ist, unterscheidet.
Ein
Problem, das sich bei dem System von 2 ergeben
kann, besteht in der Speicherkapazität der assoziativen Zweiwege-ALAT 201.
Speicherbeschränkungen,
wie z. B. diejenige, die im vorhergehenden in Verbindung mit unterschiedlichen
Registern mit gemeinsamen Bitsequenzen erörtert wurde, können bewirken,
daß gültige Adressen
aus der ALAT 201 entfernt werden. Ein weiteres Problem
besteht darin, daß die
Prioritätsauswahloperation 204 in Verbindung
mit dem MUX 203 seriell durchgeführt wird, was dazu führt, daß die Adressen
aufgehalten werden, bevor dieselben zu der Adreßvergleichsmatrix gesendet
werden. Ein wiederum weiteres Problem besteht darin, daß die Adreßvergleichsmatrix 209 ebenfalls
seriell arbeitet. Die Struktur von 2 erfordert
allgemein zwei Maschinenzyklen, um für einen speziellen Prüfbefehl
eine Treffer/Fehlschlag-Bestimmung vorzunehmen.
3 ist
ein Logikblockdiagramm eines Systems 300 für gleichzeitige
Registeridentifikations- und Speicheradreßvergleichsoperationen, das
eine vollständig
assoziative Ta bellenimplementierung verwendet, gemäß einem
bevorzugte Ausführungsbeispiel
der vorliegenden Erfindung. Hierin wird der Ausdruck „Unterwegszustand" allgemein verwendet,
um Befehle, Registernummern, die Befehlen zugeordnet sind, oder
Befehlsadreßpositionen
näher zu
bestimmen, und bezieht sich auf Befehle oder zugeordnete Daten,
die verarbeitet werden, sobald dieselben an einer Systemposition
ankommen, im Gegensatz zu Befehlen oder zugeordneten Daten (Registernummern
oder Speicherpositionen), die in einer oder mehreren Tabellen gespeichert
worden sind. Die Ausdrücke
LQ1R, LQ2R und LQ3R zeigen eine Übertragung
von Registernummern von vorgezogenen Ladebefehlen zu einem Vergleichsarray 308 an. Auf ähnliche
Art und Weise zeigen die Ausdrücke LQ1M,
LQ2M und LQ3M eine Übertragung
von Speicheradressen vorgezogener Ladebefehle zu einem Vergleichsarray 323 an.
Für jede
der Nummern 1, 2 und 3 betreffen die entsprechenden Ausdrücke LQ#R und
LQ#M (wobei „#" eines von 1, 2 oder
3 darstellt) unterschiedliche Datenkomponenten des selben vorgezogenen
Ladebefehls.
Hierin
bezieht sich der Ausdruck „Erfolgsstatus" allgemein auf den
Status einer Speicheradresse eines vorgezogenen Ladebefehls bezüglich eines Satzes
von Speicherbefehlsspeicheradressen. Der Ausdruck „erfolgreich" zeigt, wenn er auf
einen vorgezogenen Ladebefehl angewendet wird, vorzugsweise an,
daß eine
Adreßspeicheradresse
des vorgezogenen Ladebefehls mit keiner Speicherbefehlsspeicheradresse
in Konflikt steht, während
der Ausdruck „erfolglos", wenn derselbe auf
einen vorgezogenen Ladebefehl angewendet wird, allgemein anzeigt,
daß eine
Speicheradresse eines vorgezogenen Ladebefehls einen Konflikt mit
einer Speicherbefehlsspeicheradresse erfährt.
Bei
einem bevorzugten Ausführungsbeispiel wirkt
das System 300, um zu bestimmen, ob ansprechend auf das
Verarbeiten eines Prüfbefehls
ein Treffer oder ein Fehlschlag wahrgenommen wird. Ein Treffer ergibt
sich allgemein dann, wenn zwischen einer Speicheradresse eines vorgezogenen
Ladebefehls, die einem Prüfbefehl
zugeordnet ist, und einer Speicheradresse eines nachfolgenden Speicherbefehls
kein Konflikt existiert. Ein Fehlschlag ergibt sich allgemein dann,
wenn zwischen einer Speicheradresse eines vorgezogenen Ladebefehls,
die einem Prüfbefehl
zugeordnet ist, und einer Speicheradresse eines nachfolgenden Speicherbefehls
ein Konflikt existiert. Vorzugsweise wird ein Prüfbefehl verwendet, um zu bestimmen,
ob zwischen einem vorgezogenen Ladebefehl und einem Speicherbefehl
ein Speicheradreßkonflikt
aufgetreten ist. Prüfbefehle werden
vorzugsweise verwendet, um zum Zweck des Vergleichens einer Speicheradresse
eines vorgezogenen Ladebefehls und von möglicherweise in Konflikt stehenden
Speicherbefehlsspeicheradressen eine Registernummer und eine entsprechende Speicheradresse
zu identifizieren. Um sicherzustellen, daß durch das erfindungsgemäße System
keine möglichen
Speicherkonflikte versäumt
werden, werden die Vergleiche vorzugsweise sowohl mit tabellierten
als auch Unterwegszustand-Daten, die verschiedenen Befehlen zugeordnet
sind, durchgeführt.
Bei
einem bevorzugten Ausführungsbeispiel kommen
Prüfbefehlsregister-IDs
(oder Registernummern) 310 bei dem System 300 an
und werden durch das Register-ID-Vergleichsarray 308 verteilt.
Jede Registeradresse 310 wird vorzugsweise sofort an alle
drei Vergleichspositionen in dem Vergleichsarray 308 sowie
an die Vergleichsoperation 324 mit der Tabelle 302 verteilt.
Es werden vorzugsweise zwei Sätze
von Vergleichen mit vorgezogenen Ladebefehlen für ankommende Prüf befehlregister-IDs 310 durchgeführt. Ein
erster Satz von Vergleichen wird vorzugsweise mit der Register-ID-Pipeline 307 durchgeführt, wobei
ein zweiter Satz von Vergleichen vorzugsweise mit Einträgen in der
Tabelle 302 durchgeführt
wird. Die zwei Sätze
von Vergleichen werden vorzugsweise gleichzeitig durchgeführt.
Bei
einem bevorzugten Ausführungsbeispiel werden
die ankommenden Prüfbefehlregisternummern 310 mit
ankommenden oder Unterwegszustand-Ladebefehlregisternummern 309 verglichen, die
entlang der Pipeline 307 für Registernummern vorgezogener
Ladebefehle übertragen
werden. Übereinstimmungen,
die sich aus den „Vergleich"-Operationen ergeben,
die in dem Prüfbefehlvergleichsarray 308 dargestellt
sind, werden in einer Position bewahrt, die durch einen Funktionsblock 301 „Prioritätseinstellung" dargestellt ist.
Während die
Registernummern der vorgezogenen Ladebefehle entlang der Pipeline 307 für Registernummern
vorgezogener Ladebefehle fortschreiten, werden dieselben vorzugsweise
in die Register-ID-Tabelle 302 geschrieben
und dort für
einen Vergleich mit Prüfbefehlregisternummern
gespeichert. Es wird darauf hingewiesen, daß die Pipeline 307 und
das Vergleichsarray 308 konfiguriert sein können, um
weniger oder mehr als drei Vergleichsoperationen gleichzeitig durchzuführen, wobei
alle solchen Variationen in dem Schutzbereich der vorliegenden Erfindung
umfaßt sind.
Die
Prioritätseinstellungsfunktion 301 wirkt vorzugsweise,
um die Identität
eines neulichsten vorgezogenen Ladebefehls zu bewahren, der mit
einer speziellen Prüfbefehlregisternummer übereinstimmt. Die
Prioritätseinstellungsfunktion 301 wirkt
vorzugsweise, um unter Verwendung von Informationen, die einer übereinstimmenden
bzw. zutreffenden Regis ternummer zugeordnet sind, ein Eingangssignal
zu dem MUX 306 auszuwählen.
Die Prioritätseinstellungsfunktion 301 identifiziert
vorzugsweise die neulichste Übereinstimmung
unter den Übereinstimmungen,
die in dem Vergleichsarray 308 auftreten, und codiert die
neulichste Übereinstimmung
für eine Übertragung
zu dem MUX 306.
Bei
einem bevorzugten Ausführungsbeispiel werden
vollständig
assoziative Datentabellen verwendet, um die Daten zu speichern,
die sich aus einer Reihe von vergangenen vorgezogenen Ladebefehlen
ansammeln. Bei dem Ausführungsbeispiel
von 3 werden drei verwandte Datentabellen 302, 303 und 304 verwendet,
um solche angesammelten Daten zu speichern. Für jeden vorgezogenen Ladebefehl,
der bei dem System 300 empfangen wird, wird vorzugsweise
in jeder Tabelle 302, 303 und 304 ein Datenfeld
gespeichert. Vorzugsweise wird die Registernummer des vorgezogenen
Ladebefehls an einer eigens vorgesehenen Tabellenposition in der
Register-ID-Tabelle 302 gespeichert, ein Gültigkeitsstatus des
vorgezogenen Ladebefehls in einer entsprechenden Position in der „Gültig"-Tabelle 303 und die Speicheradresse,
auf die durch den vorgezogenen Ladebefehl zugegriffen wird, an einer
entsprechenden Position in der Adreßtabelle 304 gespeichert.
Die Tabellenpositionen können
durch eine Vielzahl von Einrichtungen indexiert werden und müssen nicht
in Registernummerreihenfolge zugewiesen werden. Die vollständig assoziativen
Tabellen liefern vorzugsweise ferner den erfindungsgemäßen Ablaufmechanismus
mit der Fähigkeit,
Informationen irgendwo in den Tabellen zu lokalisieren. Es wird
darauf hingewiesen, daß,
obwohl die Informationen, die den vorgezogenen Ladebefehlen zugeordnet
sind, bei dem Ausführungsbeispiel
von 3 als unter drei Tabellen verteilt dargestellt
sind, eine einzige Tabelle, die mehrere Felder für jede In dexposition innerhalb
der Tabelle verwendet, verwendet werden kann, um alle Informationen,
die die vorgezogenen Ladebefehle betreffen, in einer solchen einzigen
Tabelle zu speichern. Alternativ können zwei Tabellen oder vier
oder mehr Tabellen verwendet werden, wobei alle solche Variationen
in dem Schutzbereich der vorliegenden Erfindung umfaßt sind.
Es wird ferner darauf hingewiesen, daß die Tabellen 302, 303 und 304 jegliche Anzahl
von Einträgen
umfassen können.
Bei
einem bevorzugten Ausführungsbeispiel umfassen
die Informationen, die in jedem Eintrag in der Tabelle 304 gespeichert
sind, eine Speicheradresse oder ein Etikett. Ein „Etikett" ist vorzugsweise eine
Dateneinheit, die entweder aus einer Speicheradresse oder einer
Register-ID hergeleitet wird, und die eine solche Speicheradresse
oder Register-ID im wesentlichen eindeutig definiert. Wenn beispielsweise
40-Bit-Speicheradressen betroffen sind, können 20 Bits der vollständigen 40
Bits in einem Etikett gespeichert werden, das der speziellen Speicheradresse
zugeordnet ist. Allgemein wird ein Kompromiß zwischen dem Platz, der erforderlich
ist, um die Etiketten zu speichern, und der Möglichkeit eines Konflikts zwischen
Etiketten, die unterschiedliche Speicheradressen darstellen, geschlossen.
Bei
einem bevorzugten Ausführungsbeispiel wird,
um einzurichten, daß eine
Speicheradresse eines vorgezogenen Ladebefehls ein „Treffer" ist, der mit keiner
Speicherbefehlsspeicheradresse in Konflikt steht, ein Prüfbefehl
ein Satz von Vergleichen durchführen,
um sicherzustellen, daß der
vorgezogene Ladebefehl nicht mit einer zuvor eingetragenen Speicherbefehlsspeicheradresse
oder mit einer Unterwegszustand-Speicherbefehlsspeicheradresse in Konflikt
steht.
Vorzugsweise
wird jeder vorgezogene Ladebefehl durch drei Datenfelder beschrieben,
wobei in jeder der drei Tabellen 302, 303 und 304 eines
der drei Datenfelder gespeichert wird. Jeder Prüfbefehl kann einen oder mehrere
dieser drei Datenfelder verwenden, um den Treffer- oder Fehlschlagstatus
eines Prüfbefehls
einzurichten.
Bei
einem bevorzugten Ausführungsbeispiel wird
die Prüfbefehl-ID 310 mit
Register-IDs verglichen, die in der Register-ID-Tabelle 302 vorhanden sind.
Die Tabelle 302 kann eine Mehrzahl von Register-ID-Eintragungen
aufweisen, die eine Mehrzahl von spekulativ durchgeführten vorgezogenen
Ladebefehlen darstellen. Die Register-Ids müssen nicht gemäß ihren
tatsächlichen
Registernummern indexiert sein. Auf die Übereinstimmung eines Eintrags
in der Register-ID-Tabelle 302 hin schreitet der erfindungsgemäße Ablaufmechanismus
fort, um die Gültigkeit
der in der Tabelle 302 vorgefundenen Register-ID zu bestimmen,
indem ein Status eines Gültigkeitsbits
in der „Gültig"-Tabelle 303 untersucht
wird. Das Gültigkeitsbit,
das der Register-ID entspricht, die in der Tabelle 302 Übereinstimmung
hervorrief, ist vorzugsweise an einer Position in der Tabelle 303 positioniert,
die der Position des übereinstimmenden Register-ID-Eintrags
in der Tabelle 302 entspricht. Allgemein zeigt ein „gesetzter" bzw. „eingestellter" Zustand für das Gültigkeitsbit
eine Gültigkeit
und ein „rückgesetzter" bzw. „neueingestellter" Zustand eine Ungültigkeit
des vorgezogenen Ladebefehls an, der den jeweiligen Tabelleneinträgen zugeordnet
ist. Falls der betreffende Tabelleneintrag ungültig ist, steht der betreffende
vorgezogene Ladebefehl in Konflikt mit einem Speicherbefehl, und
es ergibt sich ein „Fehlschlag"-Zustand. Ein „Gültig"-Zustand des Gültigkeitsbits ist jedoch im
allgemeinen nicht für
sich allein ausreichend da für,
einen „Treffer"-Zustand zu erzielen,
da eine Speicheradresse, die dem spekulativ durchgeführten vorgezogenen
Ladebefehl zugeordnet ist, der gerade geprüft wird, vorzugsweise ferner
mit Unterwegszustand-Speicherbefehlsspeicheradressen
verglichen wird, die unabhängig
einen „Fehlschlag"-Zustand erzeugen
können,
sogar falls das Gültigkeitsbit
in der Gültig-Tabelle 303 für den betreffenden
vorgezogenen Ladebefehl eingestellt war.
Bei
einem bevorzugten Ausführungsbeispiel zeigt
der Gültig-Zustand für einen
vorgezogenen Ladebefehl allgemein an, daß keine zuvor empfangene Speicherbefehlsadresse
mit der Speicheradresse für den
vorgezogenen Ladebefehl, der gerade geprüft wird, in Konflikt steht.
Es bleibt jedoch die Speicheradresse des betreffenden vorgezogenen
Ladebefehls gegen Speicheradressen von anhängigen Speicherbefehlen oder
von Unterwegszustand-Speicherbefehlen zu prüfen. Auf das Einrichten hin,
daß das
Gültigkeitsbit
für einen
vorgezogenen Ladebefehl in der „Gültig"-Tabelle 303 „gesetzt" ist, bewirkt folglich
der erfindungsgemäße Ablaufmechanismus,
daß eine Speicheradresse,
die dem vorgezogenen Ladebefehl zugeordnet ist, der gerade geprüft wird,
von der Adreßtabelle 304 „entfernt" oder ausgegeben 314 wird,
um mit Unterwegszustand-Speicherbefehlsspeicheradressen in der Speicherbefehlsadreßpipeline 312 verglichen
zu werden. Allgemein befindet sich eine Speicheradresse eines vorgezogenen
Ladebefehls an einer Position in der Tabelle 304, die den
Tabellenpositionen in den Tabellen 302 und 303 der
Register-ID bzw. des Gültigkeitsbits
entspricht, die dem selben vorgezogenen Ladebefehl zugeordnet sind.
Bei
einem bevorzugten Ausführungsbeispiel geht
eine geeignete Speicheradresse 314 eines vorgezogenen Ladebefehls
aus der Tabelle 304 hervor und wird für einen Vergleich mit Adressen
in der Pipeline 312 für
Unterwegszustand-Speicherbefehlsadressen
gleichzeitig an drei Vergleichspositionen in einem Vergleichsarray 311 verteilt.
Allgemein sollte, damit ein „Treffer"-Zustand existiert,
der vorgezogene Ladebefehl ein „gesetztes" Bit in dem geeigneten Eintrag der Gültig-Tabelle 303 aufweisen
und sollte einen Speicheradreßeintrag
in der Tabelle 304 aufweisen, der mit keiner der Adressen
in der Pipeline 312 für
Unterwegszustand-Speicherbefehlsadressen übereinstimmt. Diese Kombination
von Bedingungen zeigt effektiv an, daß die Speicheradresse des vorgezogenen
Ladebefehls nicht mit einer Speicherbefehlsspeicheradresse, die
zuvor in die Tabelle 304 geschrieben 322 wurde,
oder mit einer Unterwegszustand-Speicherbefehlsadresse,
die in dem System 300 gerade anhängig ist, in Konflikt steht.
Bei
einem bevorzugten Ausführungsbeispiel ist
die Logik der Verbindungen zwischen der Gültig-Tabelle 303,
dem ODER-Gatter 310 und
dem ODER-Gatter 320 wie folgt. Allgemein weist ein Gültig-Zustand
in der Gültig-Tabelle 303 einen
logischen Wert 1 auf, während
eine Übereinstimmung
des Adreßtabellenausgangssignals 304 und
einer Unterwegszustand-Speicherbefehlsadresse eine logische „1" erzeugt, und ein
resultierender „Fehlschlag"-Zustand einen logischen
Wert von 1 aufweist. Bei dem Ausführungsbeispiel von 3 wird,
wenn das Gültig-Bit „1" ist, das Ausgangssignal
von einem Invertierer 318 eine logische „0" sein. Wenn keine Übereinstimmung
zwischen dem Tabellenausgangssignal 304 und den Unterwegszustand-Speicherbefehlsadressen
auftritt, werden alle Eingangssignale zu dem ODER-Gatter 319 einen
Wert einer logischen „0" aufweisen. In diesem
Fall werden beide Eingangssignale zu dem ODER-Gatter 320 eine
logische „0" sein, wobei das
Ausgangssignal zu dem MUX 306 eine logische „0" sein wird, was einen
TREFFER-Zustand anzeigt. Falls sich entweder das Gültig-Bit
in einem neu eingestellten bzw. rückgesetzten Zustand befindet,
oder bei irgend einem der Adreßausgangssignal/Unterwegszustand-Speicheradreßvergleiche eine Übereinstimmung
vorliegt, wird das Ausgangssignal des ODER-Gatters 320 eine
logische 1 sein, was einen FEHLSCHLAG-Zustand anzeigt. Es wird darauf
hingewiesen, daß die
Sequenz von logischen Verbindungen und Gattern, die in 3 dargestellt ist,
und die Konventionen bezüglich
der logischen Pegel, die den speziellen Systemzuständen zugeordnet
sind, nur ein exemplarisches Ausführungsbeispiel der vorliegenden
Erfindung darstellen. Es wird ferner darauf hingewiesen, daß der erfindungsgemäße Ablaufmechanismus
mit einer Vielzahl von logischen Bauelementen, Anordnungen und Konventionen
zum Zuordnen von logischen Werten zu bestimmten Systemzuständen implementiert
werden kann, und daß alle
solchen Variationen in dem Schutzbereich der vorliegenden Erfindung
umfaßt sind.
Bei
einem bevorzugten Ausführungsbeispiel werden
zusätzlich
zu den im vorhergehenden erörterten
Vergleichen Adressen in der Pipeline 315 für Speicheradressen
von vorgezogenen Unterwegszustand-Ladebefehlen mit einer Unterwegszustand-Speicherbefehlsspeicheradresse 313 verglichen.
Die Unterwegszustand-Speicherbefehlsspeicheradresse 313 wird
vorzugsweise für
einen gleichzeitigen Vergleich mit drei aufeinanderfolgenden Adressen
in der Pipeline 315 von vorgezogenen Unterwegszustand-Ladebefehlen
gleichzeitig an alle drei Vergleichspositionen des Vergleichsarray 323 verteilt.
Die Vergleichsoperationen in dem Vergleichsarray 323 erzeugen
vorzugsweise eine load.a/store- (speicher-) Speichervergleichsmatrix 305,
deren Ergebnisse für
eine TREFFER/FEHLSCHLAG-Bestimmung einem MUX 306 zugeführt werden.
Bei
einem bevorzugten Ausführungsbeispiel werden
vorgezogene Unterwegszustand-Ladebefehlsadressen zusätzlich dazu,
daß dieselben
mit Unterwegszustand-Speicherbefehlsadressen 312 verglichen
werden, in die Adreßtabelle 304 geschrieben 322.
Die Tabelle 304 speichert vorzugsweise die vorgezogenen
Ladebefehlsadressen, die sich über eine
Mehrzahl von Schreiboperationen 322 von Speicheradressen
von vorgezogenen Ladebefehlen ansammeln. Wenn Unterwegszustand-Speicherbefehlsadressen
einen Vergleich mit Adressen abschließen, die von der Adreßtabelle 304 ausgegeben 314 werden,
werden die Speicherbefehlsadressen mit den Einträgen in der Adreßtabelle 304 verglichen 321.
Vorzugsweise wird jeder Eintrag in der Tabelle 304, der
mit einer ankommenden Speicherbefehlsadresse übereinstimmt, danach als ungültig betrachtet.
Der Ungültig-Status
der übereinstimmenden Speicheradresse
wird vorzugsweise aufgezeichnet, indem ein Gültig-Bit in der Tabelle 303 eingestellt wird,
das dem nun ungültigen
Speicheradreßeintrag in
der Tabelle 304 entspricht. Ein bevorzugter Ablaufmechanismus
zum Modifizieren des Gültig-Bits
wird durch einen Ungültigmachungsbefehl 316 angezeigt, der
als von der Tabelle 304 zu der Tabelle 303 verlaufend
gezeigt ist.
Eine
exemplarische Anwendung des Systems 300 auf den optimierten
Stichprobencode der in 1 dargestellt ist, wird im folgenden
erörtert.
Der Befehl load.a [y] → R10 121 (1)
wird vorzugsweise verarbeitet, indem die Register-ID für diesen
vorgezogenen Ladebefehl der Pipeline 307 entlang und die
Speicheradresse „y" der Pipeline 315 entlang
gesendet wird. Die Register-ID, in diesem Fall R10, wird vorzugsweise
durch die Pipeline 307 voranschreiten und eventuell in
die Register-ID-Tabelle 302 geschrieben werden, wobei die
Tabelle vorzugsweise vollständig
assoziativ ist. Die Speicheradresse „y" des vorgezogenen Ladebefehls wird vorzugsweise gleichzeitig
entlang der Pipeline 315 übertragen und eventuell in
die Adreßtabelle 304 geschrieben.
Die Adreßtabelle 304 ist
vorzugsweise ebenfalls vollständig
assoziativ. Während
sich die Speicheradresse Y im Voranschreiten durch die Pipeline 315 befindet, wird
dieselbe vorzugsweise mit Unterwegszustand-Speicheradressen verglichen,
um zu bestimmen, ob ein Konflikt existiert. Bei diesem exemplarischen
Fall gibt es keine in Konflikt stehenden Unterwegszustand-Speicheradressen.
Sobald
das Register-ID- und Speicheradreßfeld des vorgezogenen Ladebefehls 121 (1)
die Tabellen 302 bzw. 304 erreichen, wird vorzugsweise für diesen
Befehl in der Gültig-Tabelle 303 ein
Gültig-Bit
eingestellt. Die Register-ID,
das Gültig-Bit
und die Speicheradresse, die dem im vorhergehenden erwähnten vorgezogenen
Ladebefehl zugeordnet sind, werden vorzugsweise in entsprechenden
Tabelleneintragspositionen in den Tabellen 302, 303 bzw. 304 gespeichert,
wodurch drei getrennte Datenfelder für den vorgezogenen Ladebefehl 121 in
dem System 300 eingerichtet werden. Allgemein wird das
Gültig-Bit
vorgabemäßig auf
das erste Empfangen der verschiedenen Felder für einen vorgezogenen Ladebefehl
bei dem System 300 hin auf einen „Gültig"-Status eingestellt (der abhängig von
einer Entwurfspräferenz
eine logische 1 oder 0 sein kann). Der Status des Gültig-Bits
in der Gültig-Tabelle 303 kann anschließend in
dem Fall geändert
werden, daß bei der
Adreßtabelle 304 ein
konfliktauslösender Speicherbefehl
empfangen wird.
Der
zweite vorgezogene Ladebefehl 123 in dem optimierten Code
von 1 mit einer Register-ID von 15 und einer Speicheradresse
von „z" wird vorzugsweise
durch das System 300 auf die selbe Art und Weise, die im
vorhergehenden in Verbindung mit dem vorgezogenen Ladebefehl 121 (1)
beschrieben wurde, verarbeitet. Wie bei dem ersten vorgezogenen
Ladebefehl wird es vorzugsweise keine konfliktauslösenden Unterwegszustand-Speicherbefehlsadressen
geben, wobei die Register-ID und die Speicheradresse für diesen
vorgezogenen Ladebefehl geeignet in die Tabelle 302 bzw. 304 geschrieben
werden. Ein Gültig-Bit
für diesen
zweiten vorgezogenen Ladebefehl wird vorzugsweise in der Gültig-Tabelle 303 auf „gültig" eingestellt werden.
Fortfahrend
mit dem Beispiel wird durch das System 300 der Speicherbefehl 124 (1)
empfangen, mit vorgezogenen Unterwegszustand-Ladeadressen 315 verglichen
und daraufhin mit Einträgen in
der Adreßtabelle 304 verglichen.
Der Speicherbefehl 124 greift auf die Speicherposition „z" zu. Der Einfachheit
halber wird angenommen, daß sich
die Einträge
der vorher vorgezogenen Ladebefehle nicht in Verarbeitung bzw. in
einem Unterwegszustand befinden, wenn der Speicherbefehl eintrifft,
sondern daß dieselben
vielmehr bereits in deren jeweiligen Tabellen gespeichert sind.
Bei dem Beispiel von 1 sind die Werte von „x" und „z" gleich. Dementsprechend
sollte, wenn der Speicherbefehl mit den Einträgen in der Adreßtabelle 304 verglichen 321 wird,
die Adresse für
den Speicherbefehl 124 mit dem Adreßeintrag für den vorgezogenen Ladebefehl 123 übereinstimmen,
der in der Adreßtabelle 304 gespeichert
ist. Sobald diese Übereinstimmung
oder dieser Konflikt entdeckt wird, wird der Adreßeintrag,
von dem herausgefunden wird, daß derselbe
mit der Speicherbefehlsadresse in Konflikt steht, ungültig gemacht.
Diese
Ungültigmachung
umfaßt
vorzugsweise das Übertragen
einer Ungültigmachungsanforderung
oder eines Ungültigmachungsbefehls 316 zu der
Gültig-Tabelle 303,
um das Gültigkeitsbit
für den geeigneten
Eintrag in der Gültig-Tabelle 303 rückzusetzen,
um den Ungültig-Status
der Konflikt auslösenden
Speicheradresse „z" in der Tabelle 304 anzuzeigen.
Fortfahrend
mit dem Beispiel wird ein Prüfbefehl 125 ( 1),
der dem Register 10 zugeordnet ist, durchgeführt werden
und vorzugsweise keinen Konflikt finden. Der Prüfbefehl 125 wird vorzugsweise
mit dem Eintrag des Registers 10 in der Tabelle 302 übereinstimmen.
Als nächstes
wird der Gültigkeitsstatus
des Bits an einer Position in der Tabelle 303 untersucht
werden, die der Tabellenposition für den Eintrag des Registers 10 in
der Tabelle 302 entspricht. Das Gültigkeitsbit wird vorzugsweise
einen „Gültig"-Status anzeigen,
was allgemein anzeigt, daß keine
Speicherbefehlsspeicheradresse, die zuvor bei der Tabelle 304 empfangen
worden ist, mit der Speicheradresse, die dem Eintrag des Registers 10 zugeordnet
ist, in Konflikt steht. Es bleibt nach einem Konflikt der tabellierten
Speicheradresse, die dem Eintrag des Registers 10 entspricht,
mit Adressen in der Pipeline 312 von Unterwegszustand-Speicherbefehlsadressen
zu prüfen.
Dementsprechend bewirkt der Prüfbefehl,
daß eine
Speicheradresse in der Tabelle 304, die dem Eintrag des
Registers 10 in der Tabelle 302 entspricht, für einen
Vergleich mit Unterwegszustand-Speicherbefehlen aus der Tabelle 304 entfernt
oder ausgesendet wird. In diesem Fall wird es vorzugsweise keinen
Konflikt mit Unterwegszustand-Speicherbefehlen
geben, und für
diesen Satz von Einträgen
wird ein „Treffer"-Zustand angezeigt werden.
Dieser „Treffer"-Zustand zeigt vorzugsweise an,
daß die
Speicheradresse des spekulativ durchgeführten vorgezogenen Ladebefehls,
der durch die drei Datenfelder (Register-ID, Gültigkeitsstatusbit und Speicheradresse)
in den drei Tabellen (die vorzugsweise vollständig assoziativ sind) dargestellt wird,
weder mit früher
empfangenen Speicherbefehlsspeicheradressen noch mit Unterwegszustand-Speicherbefehlsspeicheradressen
in Konflikt stand, und daß die
spekulative Durchführung
des vorgezogenen Ladebefehls folglich erfolgreich war.
Fortfahrend
mit dem Beispiel wird durch das System 300 ein Prüfbefehl 126 (1)
verarbeitet werden, der dem Register 15 zugeordnet ist.
Wie es im vorhergehenden erörtert
worden ist, stand die Speicheradresse „z" in Konflikt mit der Speicheradresse „x", die dem Speicherbefehl 124 (1)
zugeordnet ist, wodurch ein Ungültig-Status
für einen Tabelleneintrag
in der Tabelle 303 eingerichtet wurde, der dem Tabelleneintrag
für das
Register 15 in der Tabelle 302 entspricht. Dementsprechend
wird der Prüfbefehl 126 vorzugsweise
mit den Einträgen
in der Tabelle 302 verglichen, einen Eintrag für das Register 15 finden
und eine Tabellenposition für
diesen Eintrag identifizieren. Der Prüfbefehl wird daraufhin vorzugsweise
das Statusbit für
eine entsprechende Tabellenposition in der Tabelle 303 prüfen und
vorfinden, daß dieses
Statusbit ungültig
ist. Da der Eintrag ungültig
ist, wird vorzugsweise für
den Eintrag des Registers 15 ein „Fehlschlag"-Zustand erzeugt
werden, wodurch angezeigt wird, daß der vorgezogene Ladebefehl,
der diesem Registereintrag zugeordnet ist, mit einer Speicherbefehlsspeicheradresse
in Konflikt trat, und daß dieser
spekulative Ladebefehl folglich erfolglos war. Vorzugsweise wird
daraufhin ein geeigneter Wiederherstellungscode ausgeführt, um
den vorgezogenen Ladebefehl und jeglichen „Verwendungs"-Befehl, der von dem spekulativ durchgeführten vorgezogenen
Ladebefehl abhängt, erneut
auszuführen.
Bei
einem bevorzugten Ausführungsbeispiel liefert
das System von 3 bestimmte Vorteile gegenüber dem
System von 2. Die vorzugsweise vollständig assoziativen
Tabellen 302, 303 und 304 der 3 ermöglichen
einen Vergleich von ankommenden Daten, sei es einer Register-ID
oder einer Adresse, mit jedem Eintrag in der Tabelle. Im Gegensatz
dazu ist die assoziative Zwei-Wege-Implementierung, die in 2 dargestellt
ist, allgemein darauf begrenzt, einen Eintrag mit einem anderen
Eintrag in einer Tabelle zu vergleichen. Die parallelen Vergleichsoperationen,
die bei dem System von 3 implementiert sind, arbeiten
allgemein, um verglichen zu dem System von 2 Verarbeitungszeitdauer
einzusparen. Ferner wird bei dem System von 3 der „Weg"-MUX beseitigt, der
bei dem System von 2 vorhanden ist, wodurch vorzugsweise
eine Hardwarereduzierung und eine schnellere Antwortzeit geliefert
wird. Ferner werden bei dem System von 3 die Tabellen
vorzugsweise nicht durch eine Registernummer indexiert, wodurch
die Einschränkung
vermieden wird, die in Verbindung mit 2 erörtert worden
ist, wo ein Grenzwert bezüglich
der Anzahl von Registernummern, die einen speziellen Satz von Bits
gemeinsam haben und gleichzeitig in der selben Tabelle gespeichert
werden könnten,
vorhanden war. Darüber
hinaus ist das System von 3 vorzugsweise
in der Lage, den Lade/Speicher-Vergleich
und die Treffer/Fehlschlag-Bestimmung für einen Prüfbefehl in einem Maschinenzyklus abzuschließen.
4 stellt
die load.a/store-Vergleichsmatrix 305 von 3 detaillierter
dar. Die Funktionsweise der load.a/store-Vergleichsmatrix, die durch
das Bezugszeichen 305 in 3 angezeigt
ist, wird detaillierter in 4 veranschaulicht.
Sowohl Vorablade- als auch Speicheradres sen sind bei verschiedenen Stufen
der Pipeline gezeigt, die in die load.a/store-Vergleichsmatrix 305 in 3 zuführt. SQ1 404 bis
SQ3 406 beziehen sich auf Speicherbefehlsadressen, wobei
die Suffix-Nummer mit zunehmendem Alter der Adresse in dem System
zunimmt. Insbesondere ist SQ3 406 älter als SQ2 405,
die wiederum älter
als SQ1 404 ist. Eine ähnliche
Logik trifft auf die Adressen von vorgezogenen Ladebefehlen zu,
die durch LQ1M 401 bis LQ3M 403 angezeigt sind.
Insbesondere ist LQ3M 403 älter als LQ2M 402, die
wiederum älter
als LQ1M 401 ist.
Bei
einem bevorzugten Ausführungsbeispiel wird
ein Anfangsvergleich durchgeführt,
der SQ1 404 und LQ1M 401 umfaßt, wobei das Ergebnis in dem geeigneten
Block der Matrix 305 gespeichert wird. Während die
Befehle fortschreiten, wird SQ1 zu SQ2 und LQ1M zu LQ2M. Das Ergebnis
des SQ1/LQ1M-Vergleichs
wird vorzugsweise zwischengespeichert und zu einer geeigneten neuen
Position in der Matrix 305 bewegt, wodurch eine Notwendigkeit,
einen zusätzlichen
Vergleich zwischen der aktuellen SQ2 und der aktuellen LQ2M durchzuführen, vermieden
wird. Wenn die jeweiligen Pipelines um einen weiteren Schritt voranschreiten,
wird dieser Prozeß vorzugsweise
wiederholt, wobei das SQ2/LQ2M-Ergebnis das Ergebnis für den neuen SQ3/LQ3M-Block
in der Matrix 305 wird. Die drei Pfeile, die auf die pipelinemäßig angeordneten
Ergebnisse zeigen, beziehen sich vorzugsweise auf analoge Zwischenspeicherungsoperationen.
In 4 zeigen die leeren Felder allgemein an, daß die Vergleiche,
die durch den Vorablade- und Speicherbefehl angezeigt werden, die
sich bei dem leeren Feld kreuzen, in der Reihenfolge der Programmausführung früher auftraten,
und daß bei
der augenblicklichen Stufe kein weiterer Vergleich durchgeführt werden
muß.
Bei
einem bevorzugten Ausführungsbeispiel stellt
das Ausgangssignal für
jede Reihe von vorgezogenen Ladebefehlen oder jede „LQ"-Reihe eine „oder verknüpfte" Kombination von
Ergebnissen von augenblicklichen und vergangenen Adreßvergleichen
dar. Die „Oder"-Gatter für LQ1M,
LQ2M und LQ3M sind mit 407, 408 bzw. 409 etikettiert.
In dem Fall von LQ3M 403 gibt es ein augenblickliches Vergleichsergebnis
in dem LQ3M/SQ1-Feld und zwei pipelinemäßig angeordnete Vergleichsergebnisse. Die
logischen Werte, die die Ergebnisse dieser Vergleichsoperationen
darstellen, werden vorzugsweise einem „Oder"-Gatter zugeführt, wodurch gewirkt wird,
um ein „Übereinstimmungs"-Vergleichsergebnis
zu erzeugen, was zu einem „Fehlschlag"-Zustand führt, falls
eine der früheren
oder augenblicklichen Vergleichsoperationen einen Konflikt zwischen
der Adresse LQ3M 403 und einer der Speicheradressen eines
früheren
oder augenblicklichen Speicherbefehls hervorgerufen hat.
Bei
einem bevorzugten Ausführungsbeispiel ermöglicht die
Struktur der load.a/store-Vergleichsmatrix 305, daß eine Bestimmung
der Prioritätseinstellung
parallel zu einer Bestimmung eines Treffer/Fehlschlag-Zustands durchgeführt werden
kann. Die Prioritätseinstellung
funktioniert, indem die neulichste vorgezogene Lade/Prüf-Vergleichsoperation identifiziert
wird. Falls beispielsweise sowohl die LQ1M- als auch die LQ3M-Registernummern mit
der ankommenden Prüfbefehlsregisternummer übereinstimmen,
würde vorzugsweise
LQ1M die Prioritätseinstellung
gewinnen, da LQ1M die neulichste der übereinstimmenden vorgezogenen
Ladebefehlsoperationen ist. Der Prioritätseinstellungsprozeß ermöglicht vorzugsweise
eine Auswahl eines Eingangssignals aus einer Mehrzahl von Eingangssignalen
zu dem MUX 306 für
eine Be stimmung eines Treffer/Fehlschlag-Zustands. Die Prioritätseinstellungsfunktion
ist als ein „Prioritätseinstellungs"-Block 301 dargestellt, wobei
eine Auswahlverbindung in der Form einer Linie zwischen dem Prioritätseinstellungsblock 301 und
dem MUX 306 gezeigt ist.
Wieder
Bezugnehmend auf 3 gibt es bei einem bevorzugten
Ausführungsbeispiel
vier Eingangssignale in den MUX 306, aus denen ausgewählt werden
kann, um eine Treffer/Fehlschlag-Bestimmung zu verarbeiten. Es wird
darauf hingewiesen, daß eine
Anzahl von Eingangssignalen von weniger oder mehr als drei verwendet
werden kann, und daß alle
solche Variationen in dem Schutzbereich der vorliegenden Erfindung
liegen. Das Ausgangssignal von der Prioritätseinstellungsfunktion 301 zu
dem MUX 306 wirkt vorzugsweise, um das Eingangssignal zu
dem MUX 306 auszuwählen,
das die neulichste Treffer/Fehlschlag-Bestimmung darstellt, die
unter den Eingangssignalen des MUX 306 verfügbar ist. Allgemein
sind Unterwegszustand-Bestimmungen neulicher als Bestimmungen, die
sich aus Vergleichen mit den Tabellen 302, 303 und 304 ergeben. Folglich
wird ein Eingangssignal zu dem MUX, das sich aus einem Adreßtabellenvergleich
ergibt, im allgemeinen lediglich dann ausgewählt werden, wenn es keine Treffer/Fehlschlag-Bestimmungen
gibt, die sich aus den Unterwegszustand-Vorablade/Speicher-Vergleichen
ergeben.
5 stellt
ein Computersystem 500 dar, das für eine Verwendung bei einem
bevorzugten Ausführungsbeispiel
der vorliegenden Erfindung anpaßbar
ist. Eine zentrale Verarbeitungseinheit (CPU) 501 ist mit
einem Systembus 502 gekoppelt. Die CPU 501 kann
jegliche Allzweck-CPU, wie z. B. ein HP PA-8200, sein. Die vorliegende
Erfindung ist jedoch nicht auf die Architektur der CPU 501 eingeschränkt, solan ge
die CPU 501 die erfindungsgemäßen Operationen, wie sie hierin
beschrieben sind, unterstützt. Der
Bus 502 ist mit einem Direktzugriffsspeicher (RAM; RAM
= random access memory) 503 gekoppelt, der ein SRAM, DRAM
oder ein SDRAM sein kann. Mit dem Bus 502 ist ferner ein
ROM 504 gekoppelt, der ein PROM, ein EPROM oder ein EEPROM sein
kann. Der RAM 503 und der ROM 504 enthalten Benutzer-
und Systemdaten und Programme, wie es in der Technik wohlbekannt
ist.
Der
Bus 502 ist ferner mit einem Eingabe/Ausgabe- (I/O-) Adapter 505,
einer Kommunikationsadapterkarte 511, einem Benutzerschnittstellenadapter 508 und
einem Anzeigeadapter 509 gekoppelt. Der I/O-Adapter 505 verbindet
Speichergeräte 506,
wie z. B. eines oder mehrere von einer Festplatte, einem CD-Laufwerk,
einem Diskettenlaufwerk und einem Bandlaufwerk mit dem Computersystem. Der
Kommunikationsadapter 511 ist angepaßt, um das Computersystem 500 mit
einem Netzwerk 512 zu koppeln, das eines oder mehrere von
einem lokalen (LAN; LAN = local area network), reichweitigen (WAN;
WAN = wide area network), Ethernet- oder Internet-Netzwerk sein
kann. Der Benutzerschnittstellenadapter 508 koppelt Benutzereingabegeräte, wie z.
B. eine Tastatur 513 und ein Zeigegerät 507, mit dem Computersystem 500.
Der Anzeigeadapter 509 wird durch die CPU 501 angewiesen,
um die Anzeige auf dem Anzeigegerät 510 zu steuern.
Obwohl
die vorliegende Erfindung und ihre Vorteile detailliert beschrieben
worden sind, wird darauf hingewiesen, daß verschiedene Änderungen,
Ersetzungen und Veränderungen
hierin vorgenommen werden können,
ohne den Schutzbereich der Erfindung zu verlassen, wie er durch
die beiliegenden Ansprüche
definiert ist. Darüber
hinaus soll der Schutzbereich der vorliegenden Erfindung nicht durch
die speziellen Ausführungsbeispiele
des Prozesses, der Maschine, der Herstellung, der Stoffzusammensetzung,
der Einrichtungen, der Verfahren und Schritte, die in der Beschreibung
beschrieben sind, begrenzt sein. Wie es ein Fachmann ohne weiteres
aus der Offenbarung der vorliegenden Erfindung erkennen wird, können gemäß der vorliegenden
Erfindung Prozesse, Maschinen, eine Herstellung, Stoffzusammensetzungen,
Einrichtungen, Verfahren oder Schritte, die derzeit existieren oder
später
entwickelt werden sollen, und die im wesentlichen die selbe Funktion
durchführen
oder im wesentlichen das selbe Ergebnis wie die entsprechenden Ausführungsbeispiele,
die hierin beschrieben sind, erzielen, verwendet werden. Dementsprechend
sollen die beiliegenden Ansprüche
in ihrem Schutzbereich solche Prozesse, Maschinen, eine solche Herstellung,
solche Stoffzusammensetzungen, Einrichtungen, Verfahren oder Schritte
umfassen.