DE10103070B4 - Verfahren und Prüfschaltung zum Ermitteln eines Gültigkeitsstatus für einen zeitlich zurückliegenden Loadbefehl - Google Patents

Verfahren und Prüfschaltung zum Ermitteln eines Gültigkeitsstatus für einen zeitlich zurückliegenden Loadbefehl Download PDF

Info

Publication number
DE10103070B4
DE10103070B4 DE10103070A DE10103070A DE10103070B4 DE 10103070 B4 DE10103070 B4 DE 10103070B4 DE 10103070 A DE10103070 A DE 10103070A DE 10103070 A DE10103070 A DE 10103070A DE 10103070 B4 DE10103070 B4 DE 10103070B4
Authority
DE
Germany
Prior art keywords
command
register
load
address
register number
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
DE10103070A
Other languages
English (en)
Other versions
DE10103070A1 (de
Inventor
David P. Fort Collins Hannum
Rohit Fort Collins Bhatia
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hewlett Packard Development Co LP
Original Assignee
Hewlett Packard Development Co LP
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hewlett Packard Development Co LP filed Critical Hewlett Packard Development Co LP
Publication of DE10103070A1 publication Critical patent/DE10103070A1/de
Application granted granted Critical
Publication of DE10103070B4 publication Critical patent/DE10103070B4/de
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)

Abstract

Verfahren zum Ermitteln eines Gültigkeitsstatus für einen zeitlich zurückliegenden Loadbefehl (ld.a), der sich auf ein durch eine Registernummer (REG-ID) bezeichnetes Register bezieht und eine Adresse (ADRESSE) als Parameter aufweist, mittels einer Prüfschaltung bei Ausführung eines dem Loadbefehl (ld.a) zugeordneten Prüfbefehls (chk.a), durch den eine Gültigkeit eines Ergebnisses des zeitlich zurückliegenden Loadbefehls (ld.a) überprüft wird, und der sich auf ein durch eine Registernummer bezeichnetes vorgegebenes Register bezieht, bei der Ausführung eines Programms in einem Prozessor, wobei die Prüfschaltung folgende Schritte durchführt:
(a) Vergleichen der Registernummer des Prüfbefehls (chk.a) mit einer Registernummer zumindest eines in einem Verarbeitungszustand des Prozessors befindlichen Loadbefehls (ld.a), um eine Bestimmung eines zeitlich am kürzesten zurückliegenden vorgezogenen Loadbefehls (ld.a), der das gleiche Register wie der Prüfbefehl (chk.a) verwendet, zu ermöglichen;
(b) Vergleichen der Registernummer des Prüfbefehls (chk.a) mit Registernummereinträgen, die zu früheren Loadbefehlen (ld.a) gehörige Registernummern beschreiben und die in einer assoziativen Registernummertabelle gesammelt sind, um...

Description

  • Diese Erfindung bezieht sich allgemein auf das Neuanordnen bzw. Umordnen oder Vorziehen von Ladeoperationen bei einem Computerprogramm und insbesondere auf einen Ablaufmechanismus zum Bestimmen, ob ein Vorabladevorgang durch eine darauffolgende Speicheroperation ungültig gemacht worden ist.
  • Es ist allgemein wünschenswert, ausgewählte Befehle in einem Computerprogramm neu anzuordnen bzw. umzuordnen, um die Programmausführungseffizienz zu verbessern. Eine Form einer solchen Neuanordnung besteht darin, Befehle, die Daten von bestimmten Speicherpositionen laden, sowie Befehle, die die Daten verwenden können, die bei den Ladebefehlen empfangen werden, relativ zu Speicherbefehlen zu bewegen oder spekulativ durchzuführen. Eine Gefahr, die einer solchen Neuanordnung zugeordnet ist, kann dort existieren, wo ein Speicherbefehl, der auf die spekulativ durchgeführten Ladebefehle und Befehle, die die geladenen Daten verwenden („Verwendungs"-Befehle), folgt, auf die selbe Speicherposition wie einer oder mehrere spekulativ durchgeführte Ladebefehle zugreift. In diesem Fall wird die spekulative Durchführung allgemein die Wirkung gehabt haben, daß in die Register, auf die durch die spekulativ durchgeführten Befehle zugegriffen wird, unkorrekte Daten plaziert wurden. Wenn ein solcher Konflikt auftritt, wird die Ausführung des Ladebefehls und jeglicher „Verwendungs"-Befehle (Befehle, die die geladenen Daten verwenden) ungültig gemacht und rückgängig gemacht. Im allgemeinen wird eine Wiederherstellung ausgeführt, die das Abbrechen, das erneute Holen und die erneute Ausführung der Befehle, die durch den Konflikt mit der Speicheroperation ungültig gemacht wurden, umfassen kann.
  • Ein herkömmlicher Lösungsansatz, um einem solchen Konflikt zu begegnen, der sich aus einer spekulativen Durchführung ergibt, besteht darin, zu ermöglichen, daß ein Speicherbefehl, der mit dem spekulativ durchgeführten Ladebefehl in Konflikt steht, der älteste Befehl in einer Pipeline bzw. Fließbandschlange wird, und zu ruhen, während Befehle nach der Speicherung gelöscht, neu geholt und neu ausgeführt werden, sobald der Speicherbefehl an eine Cache- oder Speicherhierarchie angewiesen worden ist.
  • Ein Problem bei der herkömmlichen Technik besteht darin, daß es im allgemeinen keine Softwaresteuerung über das Speichern, Laden und Neuanordnen von Operationen zur Laufzeit gibt. Ein weiteres Problem besteht darin, daß die Verwendung von Hardware Begrenzungen bezüglich der Befehlsfenstergröße auferlegt, wodurch die verfügbaren Codeoptimierungen begrenzt werden. Darüber hinaus besteht in der herkömmlichen Technik allgemein ein großer Wiederherstellungsmehraufwand, wobei das Ausmaß eines solchen Mehraufwands allgemein von der Art und Weise abhängt, auf die die Hardware den Optimierungsprozeß implementiert.
  • Folglich besteht ein Problem in der Technik darin, daß Hardwareoptimierungsimplementierungen im allgemeinen Optimierungen innerhalb einer begrenzten Befehlsfenstergröße durchführen müssen.
  • Ein weiteres Problem in der Technik besteht darin, daß ein großer Wiederherstellungsmehraufwand einen hardwaregesteuerten Optimierungsprozeß ergibt.
  • Ein weiteres Problem in der Technik besteht darin, daß zur Laufzeit im allgemeinen keine Softwaresteuerung über das Speichern, Laden und Neuanordnen von Operationen existiert.
  • Der Artikel „IA-64 Architecture Disclosures White Paper" von Robert Geva et al., veröffentlicht auf dem Intel Developers' Forum, February 1999, beschreibt auf den Seiten 1 bis 19 verschiedene Merkmale der IA-64-Architektur. Beschrieben wird hierbei insbesondere in Kapitel 3 die Datenschätzung. Hierbei werden in einem Computerprogramm auftretende Ladebefehle vorgezogen, um eine möglichst schnelle Ausführung des Programms zu ermöglichen. Die hierdurch auftretenden Konflikte, die entstehen können, wenn Ladebefehle über Speicherbefehle hinweg im Programmablauf verschoben werden, werden durch Überprüfung von Einträgen in einer Vorab-Lade-Adresstabelle (ALAT) erkannt. Die Vorab-Lade-Adresstabelle enthält maximal einen Eintrag für jedes beliebige Register. Dieser Eintrag wird zur Erkennung von Kollisionen zwischen Speicher- und Ladebefehlen erkannt. Die von einem vorgezogenen Ladebefehl gelieferten Daten sind gültig, wenn in der ALAT-Tabelle ein entsprechender Eintrag existiert. Bei der Ausführung eines Speicherbefehls wird ein zu einem Ladebefehl gehöriger Eintrag, der in Konflikt mit dem Speicherbefehl steht, entfernt.
  • Der Artikel „Intel Discloses New IA-64 Features" von Linley Gwennap, veröffentlicht im Microprocessor Report vom 8.März 1999 auf den Seiten 1 bis 4, beschreibt weitere Merkmale der IA-64-Architektur. Wiederum wird darauf eingegangen, wie die Gültigkeit der von Ladebefehlen gelieferten Daten überprüft werden kann. Es wird beschrieben, dass eine Vorab-Lade-Adresstabelle (ALAT) verwendet wird, um die Gültigkeit zu überprüfen. Ladebefehle fügen Einträge zu der ALAT-Tabelle hinzu, während Schreibbefehle im Fall von Adresskonflikten Einträge aus der Tabelle entfernen. Weiterhin existiert ein zugehöriger Prüfbefehl, der überprüft, ob das Ergebnis eines Ladevorgangs noch gültig ist.
  • Das US-Patent 5,903,749 beschreibt ein Verfahren zur Implementierung von Prüfbefehlen, die die Wiederverwendung von Speicherkonflikt-Informationen ermöglichen, wenn kein Speicherkonflikt auftritt. Die Druckschrift beschreibt im übri gen die Verwendung einer Vorab-Lade-Adresstabelle (ALAT) zur Erkennung, ob ein Adresskonflikt zwischen Lade- und Speicherbefehlen aufgetreten ist. Es wird hierbei davon ausgegangen, dass bei der Ausführung eines Lade- oder Speicherbefehls die Einträge der Vorab-Lade-Adresstabelle umgehend erneuert werden. Somit weist die ALAT bei der Ausführung eines Prüfbefehls den richtigen Zustand auf, der Prüfbefehl muss also nur noch die Einträge der Vorablade-Adresstabelle auswerten. Das beschriebene Verfahren bringt allerdings den Nachteil mit sich, dass das Anpassen der Einträge der Vorab-Lade-Adresstabelle eine gewisse Bearbeitungszeit erfordert, während der die jeweiligen Einträge nicht gültig sind. Somit muss eine gewisse Wartezeit zwischen dem vorhergehenden Lade- oder Schreibbefehl und einem darauf folgenden Prüfbefehl eingehalten werden. Dies verlangsamt die Ausführung eines Programms bzw. verringert die Flexibilität bei der Programmgestaltung.
  • 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.

Claims (17)

  1. Verfahren zum Ermitteln eines Gültigkeitsstatus für einen zeitlich zurückliegenden Loadbefehl (ld.a), der sich auf ein durch eine Registernummer (REG-ID) bezeichnetes Register bezieht und eine Adresse (ADRESSE) als Parameter aufweist, mittels einer Prüfschaltung bei Ausführung eines dem Loadbefehl (ld.a) zugeordneten Prüfbefehls (chk.a), durch den eine Gültigkeit eines Ergebnisses des zeitlich zurückliegenden Loadbefehls (ld.a) überprüft wird, und der sich auf ein durch eine Registernummer bezeichnetes vorgegebenes Register bezieht, bei der Ausführung eines Programms in einem Prozessor, wobei die Prüfschaltung folgende Schritte durchführt: (a) Vergleichen der Registernummer des Prüfbefehls (chk.a) mit einer Registernummer zumindest eines in einem Verarbeitungszustand des Prozessors befindlichen Loadbefehls (ld.a), um eine Bestimmung eines zeitlich am kürzesten zurückliegenden vorgezogenen Loadbefehls (ld.a), der das gleiche Register wie der Prüfbefehl (chk.a) verwendet, zu ermöglichen; (b) Vergleichen der Registernummer des Prüfbefehls (chk.a) mit Registernummereinträgen, die zu früheren Loadbefehlen (ld.a) gehörige Registernummern beschreiben und die in einer assoziativen Registernummertabelle gesammelt sind, um als Ergebnis einen Eintrag der assoziativen Registernummertabelle zu ermitteln, bei dem das Vergleichen eine Übereinstimmung liefert; und (c) Vergleichen einer dem Ergebnis von (b) zugeordneten Speicheradresse eines Loadbefehls (ld.a) mit zumindest einer Adresse, die einem in einem Ver arbeitungszustand befindlichen Storebefehl (st.a) als Parameter zugeordnet ist; wobei (a) und (b) gleichzeitig ausgeführt werden.
  2. Verfahren gemäß Anspruch 1, mit dem Schritt des Vergleichens einer Adresse, die ein Parameter eines zeitlich zurückliegenden Loadbefehls (ld.a) ist, mit zumindest einer Adresse, die ein Parameter eines in einem Verarbeitungszustand befindlichen Storebefehls (st.a) ist.
  3. Verfahren gemäß Anspruch 1 oder 2, mit dem Schritt (d) des Verwendens einer zeitlichen Lage des zeitlich am kürzesten zurückliegenden Loadbefehls (ld.a), der sich auf das vorgegebene Register bezieht, um festzulegen, welche der Vergleichsergebnisse von (b) und (c) für eine Bestimmung des Gültigkeitsstatus verwendet werden, und Bestimmen des Gültigkeitsstatus, nach Schritt (c).
  4. Verfahren gemäß Anspruch 3, bei dem der Schritt (d) folgende Schritte aufweist: Angeben eines erfolgreichen Gültigkeitsstatus für den zeitlich zurückliegenden Loadbefehl (ld.a), wenn der Gültigkeit des Ergebnisses des Loadbefehls (ld.a) nicht zumindest ein Storebefehl (st.a) entgegensteht; und Angeben eines nicht-erfolgreichen Gültigkeitsstatus für den zeitlich zurückliegenden Loadbefehl (ld.a), wenn der Gültigkeit des Ergebnisses des Loadbefehls (ld.a) zumindest ein Storebefehl (st.a) entgegensteht.
  5. Verfahren gemäß Anspruch 4, bei dem der Gültigkeitsstatus nicht erfolgreich ist, wobei das Verfahren ferner folgenden Schritt aufweist: Wiederholen des Ladebefehls.
  6. Verfahren gemäß einem der Ansprüche 1 bis 5, bei dem der Gültigkeitsstatus nicht erfolgreich ist, wobei das Verfahren ferner folgenden Schritt aufweist: Ausführen eines Wiederherstellungscodes, der ein erneutes Laden der dem zeitlich zurückliegenden Loadbefehl (ld.a) zugeordneten Daten und eine erneute Ausführung zumindest eines Befehls, der die Daten verwendete, implementiert.
  7. Verfahren gemäß einem der Ansprüche 1 bis 6, bei dem der zeitlich zurückliegende Loadbefehl (ld.a) ein vorgezogener Loadbefehl ist, wobei das Verfahren ferner folgende Schritte aufweist: Optimieren des Programms, indem ein ursprünglicher Loadbefehl in dem Programm zu einer früheren Position in dem Programm bewegt wird, wodurch der vorgezogene Loadbefehl (ld.a) gebildet wird; und Platzieren des Prüfbefehls (chk.a) in dem Programm an der Position des ursprünglichen Loadbefehls (ld.a).
  8. Verfahren gemäß einem der Ansprüche 1 bis 7, das ferner folgenden Schritt aufweist: Schreiben eines Eintrags für einen zeitlich zurückliegenden Loadbefehl (ld.a) in die assoziative Registernummertabelle oder eine dazu assoziierte Tabelle, basierend auf einer Registernummer, die ein Register bezeichnet, auf das sich der zeitlich zurückliegende Loadbefehl (ld.a) bezieht, und der dem zeitlich zurück liegenden Loadbefehl (ld.a) als Parameter zugeordneten Adresse.
  9. Verfahren gemäß einem der Ansprüche 1 bis 8, das ferner folgenden Schritt aufweist: Verändern eines Eintrags der assoziativen Registernummertabelle oder einer dazu assoziierten Tabelle basierend auf einem in Verarbeitung befindlichen Storebefehl (st.a) und der dem Storebefehl (st.a) als Parameter zugeordneten Adresse.
  10. Verfahren gemäß einem der Ansprüche 1 bis 9, das ferner folgenden Schritt aufweist: Beginnen von Schritt (a), als Antwort auf das Auftreten eines Prüfbefehls (chk.a) bei der Ausführung des Programms in dem Prozessor.
  11. Prüfschaltung (300) zum Ermitteln eines Gültigkeitsstatus (HIT/MISS) für einen zeitlich zurückliegenden Loadbefehl (ld.a), der sich auf ein durch eine Registernummer (REG ID) bezeichnetes Register bezieht und eine Adresse (ADRESSE) als Parameter aufweist, bei Ausführung eines dem Loadbefehl (ld.a) zugeordneten Prüfbefehls (chk.a), durch den eine Gültigkeit eines Ergebnisses des zeitlich zurückliegenden Loadbefehls (ld.a) überprüft wird, und der sich auf ein durch eine Registernummer (310) bezeichnetes vorgegebenes Register bezieht, bei der Ausführung eines Programms in einem Prozessor, mit folgenden Merkmalen: einer ersten Einrichtung (308, 324) zum gleichzeitigen Vergleichen einer Registernummer (310) des Prüfbefehls (chk.a) mit einer Registernummer (REG ID) zumindest eines in einem Verarbeitungszustand des Prozessors befindlichen Loadbefehls (ld.a), um eine Bestimmung eines zeitlich am kürzesten zurückliegenden vorgezogenen Ladebefehls (ld.a), der das gleiche Register wie der Prüfbefehl verwendet, zu ermöglichen, und mit Registernummereinträgen, die zu früheren Loadbefehlen gehörige Registernummern beschreiben und die in einer assoziativen Registernummertabelle (302) gesammelt sind, um als Ergebnis einen Eintrag der assoziativen Registernummerntabelle zu ermitteln, bei dem das Vergleichen eine Übereinstimmung liefert, wobei die erste Einrichtung (308, 324) ferner ausgelegt ist, um eine dem als Ergebnis des letztgenannten Vergleichs ermittelten Eintrag der assoziativen Registernummerntabelle zugeordnete Speicheradresse eines Loadbefehls bereitzustellen; und einer zweiten Einrichtung (311, 323) zum Vergleichen einer Adresse, die ein Parameter eines in einem Verarbeitungszustand befindlichen Storebefehls ist, mit der von der ersten Einrichtung ermittelten Speicheradresse eines Loadbefehls.
  12. Prüfschaltung gemäß Anspruch 11, die ferner eine dritte Einrichtung umfasst, die ausgelegt ist, um eine Adresse, die ein Parameter eines zeitlich zurückliegenden Loadbefehls (ld.a) ist, mit zumindest einer Adresse, die ein Parameter eines in einem Verarbeitungszustand befindlichen Storebefehls ist, zu vergleichen.
  13. Prüfschaltung gemäß Anspruch 12, die ferner eine vierte Einrichtung (301, 306, 318, 319, 320) zum Bestimmen des Gültigkeitsstatus (HIT/MISS) auf der Basis von von der ersten Einrichtung, der zweiten Einrichtung und der dritten Einrichtung gelieferten Vergleichsergebnissen umfasst.
  14. Prüfschaltung gemäß Anspruch 13, wobei die vierte Einrichtung ausgelegt ist, um eine zeitliche Lage des zeitlich am kürzesten zurückliegenden vorgezogenen Lo adbefehls, der sich auf das vorgegebene Register bezieht, zu verwenden, um festzulegen, welche der Vergleichsergebnisse der ersten Einrichtung, der zweiten Einrichtung und der dritten Einrichtung zum Bestimmen des Gültigkeitsstatus verwendet werden.
  15. Prüfschaltung (300) gemäß einem der Ansprüche 11 bis 14, bei der die erste Einrichtung folgende Merkmale aufweist: eine erste Pipeline (307) zum Speichern einer Mehrzahl von Registernummern (REG ID), die zu einem in einem Verarbeitungszustand befindlichen Loadbefehlen (ld.a) gehören; eine erste Mehrzahl (308) von Komparatoren, wobei jeder Komparator einer Stufe der ersten Pipeline (307) zugeordnet ist, wobei jeder Komparator eine Registernummer (310) des Prüfbefehls (chk.a) mit einer Registernummer (REG ID) eines in einem Verarbeitungszustand befindlichen Ladebefehls (ld.a), die in der dem Komparator zugeordneten Stufe der ersten Pipeline (307) gespeichert ist, vergleicht; und eine assoziative Registernummertabelle (302), die ausgelegt ist, um eine Mehrzahl von Einträgen von Informationen, die auf eine Mehrzahl von zeitlich zurückliegenden Ladebefehlen (ld.a) bezogen sind, zu speichern, wobei die assoziative Registernummertabelle (302) eine Vergleichseinrichtung (324) umfasst, die ausgelegt ist, um die Registernummer (310) des Prüfbefehls (chk.a) mit Registernummereinträgen der Tabelle zu vergleichen.
  16. Prüfschaltung (300) gemäß einem der Ansprüche 11 bis 15, bei der die zweite Einrichtung (311, 323) folgende Merkmale aufweist: eine zweite Pipeline (312) zum Speichern einer Mehrzahl von in einem Verarbeitungszustand befindlichen Speicherbefehlen (st.a); und eine zweite Mehrzahl (311) von Komparatoren, wobei jeder Komparator einer Stufe der zweiten Pipeline (312) zugeordnet ist, wobei jeder Komparator eine Adresse eines zeitlich zurückliegenden Ladebefehls (ld.a), die dem von der ersten Einrichtung ermittelten Eintrag der Registernummerntabelle (302) zugeordnet ist, mit einer Adresse eines in einem Verarbeitungszustand befindlichen Speicherbefehls, der in der dem Komparator zugeordneten Stufe der zweiten Pipeline gespeichert ist, vergleicht.
  17. Prüfschaltung (300) gemäß einem der Ansprüche 11 bis 16, bei der die dritte Einrichtung (301, 306, 318, 319, 320) folgende Merkmale aufweist: eine Auswahllogik (306, 319, 320), die ausgelegt ist, um den Gültigkeitsstatus aufgrund von Vergleichsergebnissen der ersten Mehrzahl (308) von Komparatoren und der zweiten Mehrzahl (311) von Komparatoren auszuwählen.
DE10103070A 2000-02-21 2001-01-24 Verfahren und Prüfschaltung zum Ermitteln eines Gültigkeitsstatus für einen zeitlich zurückliegenden Loadbefehl Expired - Fee Related DE10103070B4 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/510,282 US6618803B1 (en) 2000-02-21 2000-02-21 System and method for finding and validating the most recent advance load for a given checkload
US09/510,282 2000-02-21

Publications (2)

Publication Number Publication Date
DE10103070A1 DE10103070A1 (de) 2001-08-30
DE10103070B4 true DE10103070B4 (de) 2006-02-23

Family

ID=24030111

Family Applications (1)

Application Number Title Priority Date Filing Date
DE10103070A Expired - Fee Related DE10103070B4 (de) 2000-02-21 2001-01-24 Verfahren und Prüfschaltung zum Ermitteln eines Gültigkeitsstatus für einen zeitlich zurückliegenden Loadbefehl

Country Status (2)

Country Link
US (1) US6618803B1 (de)
DE (1) DE10103070B4 (de)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6775752B1 (en) * 2000-02-21 2004-08-10 Hewlett-Packard Development Company, L.P. System and method for efficiently updating a fully associative array
US6823434B1 (en) * 2000-02-21 2004-11-23 Hewlett-Packard Development Company, L.P. System and method for resetting and initializing a fully associative array to a known state at power on or through machine specific state
US6918030B2 (en) * 2002-01-10 2005-07-12 International Business Machines Corporation Microprocessor for executing speculative load instructions with retry of speculative load instruction without calling any recovery procedures
US6928534B2 (en) * 2002-02-22 2005-08-09 Sun Microsystems, Inc. Forwarding load data to younger instructions in annex
US7062636B2 (en) * 2002-09-19 2006-06-13 Intel Corporation Ordering scheme with architectural operation decomposed into result producing speculative micro-operation and exception producing architectural micro-operation
US7325228B1 (en) * 2003-04-30 2008-01-29 Hewlett-Packard Development Company, L.P. Data speculation across a procedure call using an advanced load address table
US7555634B1 (en) * 2004-04-22 2009-06-30 Sun Microsystems, Inc. Multiple data hazards detection and resolution unit
US20060242390A1 (en) * 2005-04-26 2006-10-26 Intel Corporation Advanced load address table buffer
JP5233078B2 (ja) * 2006-03-23 2013-07-10 富士通セミコンダクター株式会社 プロセッサ及びその処理方法
KR20120036208A (ko) * 2010-10-07 2012-04-17 삼성전자주식회사 재구성 기반 컴퓨팅 장치 및 이의 메모리 의존성 보정방법
US9292294B2 (en) * 2012-09-27 2016-03-22 Intel Corporation Detection of memory address aliasing and violations of data dependency relationships
US10725783B2 (en) * 2018-11-02 2020-07-28 International Business Machines Corporation Splitting load hit store table for out-of-order processor

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5625835A (en) * 1995-05-10 1997-04-29 International Business Machines Corporation Method and apparatus for reordering memory operations in a superscalar or very long instruction word processor
US5903749A (en) * 1996-07-02 1999-05-11 Institute For The Development Of Emerging Architecture, L.L.C. Method and apparatus for implementing check instructions that allow for the reuse of memory conflict information if no memory conflict occurs

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5826094A (en) * 1993-09-30 1998-10-20 Intel Corporation Register alias table update to indicate architecturally visible state
US5694553A (en) * 1994-01-04 1997-12-02 Intel Corporation Method and apparatus for determining the dispatch readiness of buffered load operations in a processor

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5625835A (en) * 1995-05-10 1997-04-29 International Business Machines Corporation Method and apparatus for reordering memory operations in a superscalar or very long instruction word processor
US5903749A (en) * 1996-07-02 1999-05-11 Institute For The Development Of Emerging Architecture, L.L.C. Method and apparatus for implementing check instructions that allow for the reuse of memory conflict information if no memory conflict occurs

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
GEVA, R. et al.: IA-64 Architecture Disclosure White Paper, Intel Developers' Forum February 1999, S. 1-19 *
GWENNAP, L.: Intel Discloses New IA-64 Features, Microprocessor Report, 08.03.1999, S. 1-4 *

Also Published As

Publication number Publication date
DE10103070A1 (de) 2001-08-30
US6618803B1 (en) 2003-09-09

Similar Documents

Publication Publication Date Title
EP0689694B1 (de) Verfahren zur maschinellen erzeugung von nebenläufig bearbeitbaren befehlsgruppen aus einem programm für superskalare mikroprozessoren
DE60308201T2 (de) Datenverarbeitungssystem mit externen und internen anweisungssätzen
DE69738188T2 (de) Verfahren und apparat für eine erhöhte genauigkeit bei der verzweigungsvorhersage in einem superskalaren mirkroprozessor
DE4237417C2 (de) Datenverarbeitungssystem
DE3151745C2 (de)
DE19855806A1 (de) Vorrichtung und Verfahren zum Durchführen von Unterprogrammaufruf- und Rücksprungoperationen
DE19527031C2 (de) Verzweigungsprozessor für ein Datenverarbeitungssystem und Verfahren zum Betreiben eines Datenverarbeitungssystems
DE69738101T2 (de) Verwaltung des Zugangs zu Objekten mit Hilfe von Referenzen mit drei Zuständen
DE60009151T2 (de) Vorhersage von datenbeförderung von speicher- zum ladebefehl mit untrainierung
DE60036960T2 (de) Unterscheidung von feinkorntranslation
DE69634315T2 (de) Verfahren und Gerät zur Verwendung eines Ladebefehls der keinen Fehler verursacht
DE10103070B4 (de) Verfahren und Prüfschaltung zum Ermitteln eines Gültigkeitsstatus für einen zeitlich zurückliegenden Loadbefehl
DE60028069T2 (de) Verfahren und vorrichtung zur kontexterhaltung unter ausführung von übersetzten befehlen
DE19983098B4 (de) Mehrfach-Bitanzeige zur Behandlung von Schreib-nach-Schreib-Fehlern und zur Eliminierung von Bypass-Komparatoren
DE19824289C2 (de) Pipelineverarbeitungsmaschine
DE4103093C2 (de) Verfahren zum Steuern eines Datenübertragungs-Pufferspeichers und Computersystem zum Durchführen dieses Verfahrens
DE19526008A1 (de) Vertikal partitionierter, primärer Befehls-Cache-Speicher
DE102005001679B4 (de) Mikroprozessor-Einrichtung, und Verfahren zur Branch-Prediktion für conditional Branch-Befehle in einer Mikroprozessor-Einrichtung
DE69831282T2 (de) Verwaltung von umbenannten Register in einem superskalaren Rechnersystem
DE69626263T2 (de) System zur Zuteilung mehrerer Befehle ohne Verzweigungsunterbrechung in einem Pipelineprozessor
DE4108309C2 (de) Verfahren zur maschinellen Optimierung des Bindens von Programmodulen zu einem Programm
DE69626282T2 (de) Programmierbare vorrichtung und verfahren zum befehlsauffang
DE60031136T2 (de) Prozessorarchitectur
DE102006041002B4 (de) Verfahren, um ein Programm an einen Zwischenspeicher anzupassen, und Schaltungsanordnung
DE102009038177B4 (de) Ablaufverfolgung in einem laufenden Computersystem

Legal Events

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

Owner name: HEWLETT-PACKARD DEVELOPMENT CO., L.P., HOUSTON, TE

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