DE69231197T2 - Verfahren und Vorrichtung für eine verbesserte Speicherarchitektur - Google Patents
Verfahren und Vorrichtung für eine verbesserte SpeicherarchitekturInfo
- Publication number
- DE69231197T2 DE69231197T2 DE69231197T DE69231197T DE69231197T2 DE 69231197 T2 DE69231197 T2 DE 69231197T2 DE 69231197 T DE69231197 T DE 69231197T DE 69231197 T DE69231197 T DE 69231197T DE 69231197 T2 DE69231197 T2 DE 69231197T2
- Authority
- DE
- Germany
- Prior art keywords
- store
- processor
- memory
- load
- operations
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/30087—Synchronisation or serialisation instructions
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0815—Cache consistency protocols
- G06F12/0831—Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
- G06F12/0833—Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means in combination with broadcast means (e.g. for invalidation or updating)
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/30079—Pipeline control instructions, e.g. multicycle NOP
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/3834—Maintaining memory consistency
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Multi Processors (AREA)
- Memory System (AREA)
Description
- Die vorliegende Erfindung bezieht sich auf Speichersysteme für Computer und insbesondere auf verbesserte Speichermodelle zur Verwendung in einem Mehr-Prozessor-Datenverarbeitungssystem.
- Ein Mehr-Prozessor-System enthält eine Reihe von Prozessoren, die mit einem Speichersystem verbunden sind. Prozessoren treten üblicherweise mit einem Speichersystem in Wechselwirkung, indem sie Lade-, Speichere- und andere Synchronisationsoperationen, wie beispielsweise eine unteilbare Lade-Speichere-Operation verwenden. Wenn ein Programm abgearbeitet wird, können Prozessoren weitere Operationen ausführen, wie beispielsweise das Addieren des Inhalts eines Registers zu einem anderen Register oder das Ausführen eines Subroutinenaufrufs; jedoch beeinflussen diese Operationen nicht das Verhalten des Speichersystems aus der Sicht der Prozessoren. Dieses aus der Sicht der Prozessoren betrachtete Verhalten des Speichersystems wird als das "Speichermodell" bezeichnet.
- Eine "Spezifikation" des Speichermodells ist eine Beschreibung dessen, wie sich das Speichersystem verhalten soll. Der Hauptzweck einer derartigen Spezifikation besteht darin, es Hardwareentwicklern und Programmierern zu ermöglichen, unabhängig zu arbeiten, während noch gesichert wird, daß ein beliebiges Programm in der beabsichtigten Weise auf einer beliebigen Implementierung eines Computersystems arbeitet, das mit der Spezifikation übereinstimmt. Im Idealfall sollte eine Spezifikation insoweit "formal" sein, daß die Übereinstimmung mit der Spezifikation auf irgendeiner Ebene überprüft werden kann. In der Praxis jedoch sind die Spezifikationen an vielen Stellen "informell" oder sogar überhaupt nicht vorhanden, wobei in diesem Fall eine spezi elle Hardwareimplementierung standardmäßig zur Spezifikation des Speichermodells wird.
- Der Speicher wird als eine N-Port-Einrichtung modelliert, wobei N die Anzahl der Prozessoren ist. Das Speichermodell gilt sowohl für Einzel- als auch für Mehr-Prozessor- Systeme. (Siehe Fig. 1). Ein Prozessor kommuniziert mit dem Speichersystem, indem er Speicheroperationen ausgibt. Ein Prozessor gibt die Operationen über seinen jeweiligen Port aus. Wie es in Fig. 1 veranschaulicht ist, kommuniziert der Prozessor P&sub1; mit dem Speichersystem 10 über seinen zugehörigen Port 11. In ähnlicher Weise kommuniziert der Prozessor PN mit dem Speicher 10 über den Port N.
- Ein Speichermodell kann von einer starken (oder sequentiellen) Konsistenz bis hin zu verschiedenen Arten der schwachen Konsistenz reichen. Eine starke Konsistenz ist dasjenige Speichermodell, mit dem die meisten Programmierer vertraut sind. Bei dem Modell der starken Konsistenz scheint es, daß die Speicheroperationen sämtlicher Prozessoren in einer einzigen globalen Reihenfolge ausgeführt werden, die mit der Ausgabereihenfolge der einzelnen Prozessoren kompatibel ist. Während dieses Modell intuitiv Anklang findet und allgemein verstanden wird, ist es auch dasjenige, das die schlechteste Leistung zur Verfügung stellt, insbesondere wenn das Computersystem zahlreiche Prozessoren enthält. Für weiterführende Informationen über das Modell starker Konsistenz siehe L. Lamport, "How to Make a Multiprocessor Computer That Correctly Executes Multiprocess Programs", IEEE Transactions an Computers, September 1979.
- Schwächere Speichermodelle wurden entwickelt, um effektivere Implementierungen skalierbarer Multiprozessoren zu ermöglichen. Unglücklicherweise sind schwächere Speichermodelle schwieriger zu verstehen als Modelle starker Konsistenz, und sie engen die Art und Weise ein, in der parallele Softwareprogramme geschrieben werden können. Die Implementierung schwächerer Speichermodelle erfordert darüber hinaus beträchtlich mehr Sorgfalt auf der Seite der Hardwareentwickler, und die Verwendung schwächerer Speichermodelle erfordert bewußte Bemühungen auf der Seite der Programmierer, um die Einbringung des von der starken Konsistenz zur Verfügung gestellten Modells zu vermeiden.
- Somit umfaßt die Auswahl eines Speichermodells einen Kompromiß zwischen dem, was für die Programmierung bequem ist, gegenüber dem, was das Potential für eine hohe Leistung bei Hardware zur Verfügung stellt. Für nähere Informationen über diesen Kompromiß siehe J. Hennessy et al., "Hardware/Software Tradeoffs for Increased Performance", Proc. Svmp. Architectural Support for Programming Languages and Operating Systems, (1982), Seiten 2-11.
- Wie beschrieben werden wird, beschreibt die vorliegende Erfindung eine formale Spezifikation für zwei verbesserte Speichermodelle, dem Totalen-Speichere-Ordnen (TSO - Total Store Ordering) und dem Partiellen-Speichere-Ordnen (PSO - Partial Store Ordering), von denen beide "stark" genug sind, um bequem programmiert zu werden, und außerdem "schwach" genug, um eine hohe Leistung zur Verfügung zu stellen.
- Es wird eine verbesserte Speicherarchitektur offenbart, die zwei spezielle Modelle aufweist, die Totale-Speicher- Ordnung (TSO) und die Partielle-Speicher-Ordnung (PSO). Beide Speichermodelle definieren die Semantik von Speicheroperationen, wie beispielsweise Lade- und Speichere-Operationen, und geben im einzelnen an, wie sich die Reihenfolge, in welcher diese Operationen von einem Prozessor ausgegeben werden, auf die Reihenfolge, in welcher sie von dem Speicher ausgeführt werden, bezieht. Die Modelle sind sowohl für Einzelprozessoren als auch Multiprozessoren mit geteiltem Speicher anwendbar. Maschinen, welche ein Speichermodell starker Konsistenz implementieren, unterstützen auch sowohl TSO als auch PSO, da die Anforderungen der starken Konsistenz strin genter sind. PSO ist eine Version von TSO mit höherer Leistung.
- Das Totale-Speicher-Ordnungs(TSO)-Speichermodell garantiert, daß die Speichere-, Flush- und unteilbaren Lade-Speichere-Operationen sämtlicher Prozessoren vom Speicher seriell in einer einzigen Reihenfolge ausgeführt werden, die die "Speicherreihenfolge" genannt wird. Darüber hinaus ist die Sequenz der Speichere-, Flush- und unteilbaren Lade-Speichere-Operationen in der Speicherreihenfolge für einen gegebenen Prozessor identisch mit der Sequenz, in welcher sie von dem Prozessor ausgegeben wurden. Von einem Prozessor ausgegebene Speichere-, Flush- und unteilbare Lade-Speichere-Operationen werden in einen speziellen FIFO-Speicherpuffer des Prozessors gebracht.
- Im Falle einer Lade-Operation bestimmt der Prozessor zunächst, ab der Speicherpuffer des Prozessors eine Speichere- Operation zu demselben Speicherplatz enthält. Sofern der Speicherpuffer des Prozessors eine solche Speichere-Operation enthält, so gibt die Lade-Operation den Wert der jüngsten derartigen Speichere-Operation zurück; andernfalls geht die Lade-Operation direkt in den Speicher und der Prozessor wird blockiert, d. h. am Ausgeben weiterer Speicheroperationen gehindert, bis die Lade-Operation einen Wert zurückgibt. Eine unteilbare Lade-Speichere-Operation verhält sich wie eine Lade- und eine Speichere-Operation zusammen. Die unteilbare Lade-Speichere-Operation wird in den Speicherpuffer (ähnlich einer Speichere-Operation) gebracht, und die unteilbare Lade-Speichere-Operation blockiert den Prozessor wie im Falle einer Lade-Operation. Mit anderen Worten, die unteilbare Lade-Speichere-Operation blockiert den Prozessor, bis der Speicherpuffer des Prozessors leer ist und fährt dann mit dem Speichern fort.
- Das Partielle-Speicher-Ordnungs(PSO)-Speichermodell garantiert, daß die Speichere-, Flush- und unteilbaren Lade- Speichere-Operationen sämtlicher Prozessoren vom Speicher seriell in der Speicherreihenfolge ausgeführt werden. Jedoch ist die Speicherreihenfolge der Speichere-, Flush- und unteilbaren Lade-Speichere-Operationen für einen gegebenen Prozessor im allgemeinen nicht gleich der Reihenfolge, in welcher diese von dem Prozessor ausgegeben wurden. Die Übereinstimmung zwischen der Ausgabereihenfolge und der Speicherreihenfolge wird durch Verwendung eines neuen Befehls, der STBAR genannt wird, zur Verfügung gestellt. Wenn zwei Operationen durch einen STBAR in der Ausgabereihenfolge eines Prozessors getrennt sind oder wenn die zwei Operationen auf denselben Speicherplatz Bezug nehmen, dann ist die Speicherreihenfolge der zwei zugehörigen Operationen dieselbe wie die Ausgabereihenfolge.
- Von einem Prozessor ausgegebene Speichere-, Flush- und unteilbare Lade-Speichere-Operationen werden in einen speziellen Speicherpuffer des Prozessors gebracht. Obwohl der Speicherpuffer bei dem Partiellen-Speicher-Ordnungs-Speichermodell kein FIFO ist, hält der Speicherpuffer des Prozessors die Reihenfolge der Speichere- und unteilbaren Lade- Speichere-Operationen zu demselben Speicherplatz aufrecht; ansonsten wird der Speicherpuffer nur durch STBAR-Befehle aufgeteilt.
- Fig. 1 ist eine Blockdarstellung mehrerer bekannter Prozessoren, die mit einem Speichersystem gekoppelt sind, das die Lehren der vorliegenden Erfindung enthält.
- Fig. 2 ist eine abstrakte Darstellung eines bekannten Speichermodells starker Konsistenz.
- Fig. 3 ist eine abstrakte Veranschaulichung eines die Lehren gemäß der vorliegenden Erfindung benutzenden Speichermodells.
- Fig. 4 ist eine abstrakte Veranschaulichung eines Prozessors.
- Fig. 5 ist eine Prinzipdarstellung eines Totale-Speicher-Ordnungs(PSO)-Speichermodells, das die Lehren gemäß der vorliegenden Erfindung benutzt.
- Fig. 6 ist eine Prinzipdarstellung eines Partielle- Speicher-Ordnungs(PSO)-Speichermodells, das die Lehren der vorliegenden Erfindung benutzt.
- Fig. 7 ist eine Veranschaulichung einer Flush-Befehlsoperation eines Prozessors.
- Fig. 8 ist eine abstrakte Veranschaulichung eines Multiprozessorsystems, die ein bevorzugtes Ausführungsbeispiel veranschaulicht, das die Lehren der vorliegenden Erfindung benutzt.
- Fig. 9 ist eine detailliertere Konzeptveranschaulichung eines Prozessors.
- Fig. 10 ist eine abstrakte Darstellung eines externen Cache-Speichers.
- Es wird eine verbesserte Speicherarchitektur offenbart, die insbesondere Anwendung zur Verwendung bei Lade/Speichere-Architektur-Computersystemen findet. In der folgenden Beschreibung werden aus Gründen der Erläuterung spezielle Speichereinrichtungen, Architekturen und Komponenten angegeben, um ein besseres Verständnis der vorliegenden Erfindung zu erreichen. Für einen Fachmann ist es jedoch klar, daß die vorliegende Erfindung ohne diese speziellen Details ausgeführt werden kann. An anderen Stellen werden gut bekannte Schaltungen in schematischer Form gezeigt, um die vorliegende Erfindung nicht unnötig zu verdunkeln.
- Die Spezifikation für die Speicherarchitektur der vorliegenden Erfindung ist ein Modell, welches das Verhalten angibt, das von auf Computersystemen ablaufenden Softwareprogrammen beobachtet wird. Die Hardware kann auf eine be liebige Weise implementiert werden, solange die Implementierung mit dem Speichermodell übereinstimmt. Eine Spezifikation des Speichermodells gestattet es Softwareprogrammen und Hardwareimplementierungen, unabhängig voneinander entwickelt zu werden, während es noch einem beliebigen Softwareprogramm ermöglicht wird, auf einer beliebigen Implementierung zu laufen.
- In Fig. 2 ist eine Prinzipdarstellung eines bekannten Speichersystems mit starker Konsistenz in schematischer Form gezeigt. Abstrakt gesehen, empfängt der Einzel-Port-Speicher 20 Speicheroperationen aus den Prozessoren über einen "Umschalter" 21. Jeder Prozessor gibt Speicheroperationen über den privaten Port dieses Prozessors aus. Wie es in Fig. 2 gezeigt ist, sind die Ports der jeweiligen Prozessoren durch die Bezugszeichen 22, 23, 24 und 25 identifiziert. Die Reihenfolge oder Ordnung, in welcher der Speicher die Operationen ausführt, entspricht der Reihenfolge, in welcher der Schalter die Ports der Prozessoren auswählt. Der tatsächliche Auswahlprozeß wird durch den Umschalter 21 veranschaulicht, der sich zwischen dem Port 22, Port 23, Port 24 und Port 25 bewegt.
- In Fig. 3 ist eine Prinzipdarstellung des die Lehren der vorliegenden Erfindung aufnehmenden Speichermodells gezeigt. Wie zuvor beschrieben, gibt jeder Prozessor Speicheroperationen über seinen Port an einen Einzel-Port-Speicher 30 aus. Jeder Port eines Prozessors enthält einen speziellen Speicher-Puffer, beispielsweise die Speicher-Puffer 32, 33, 34 oder 35, welcher Speichere-, Flush- und unteilbare Lade- Speichere-Operationen hält. Ein Umschalter 31 verbindet den Einzel-Port-Speicher 30 mit jeweils einem der Ports des Prozessors für die Dauer der jeweiligen Speicheroperation. Die Reihenfolge, in welcher sich der Umschalter 31 von einem Port zum nächsten bewegt ist aus der Sicht eines Programms nicht-deterministisch und definiert die Speicherreihenfolge der Speicheroperationen. Zusätzliche Details bezüglich der Struktur und der Betriebsweise des Speichermodells gemäß der vorliegenden Erfindung werden unten beschrieben.
- Ein unteilbarer (atomischer) Lade-Speichere-Befehl ist als unteilbare Sequenz eines "Ladens gefolgt von einem Speichern eines Werts, welcher eine beliebige Funktion des von dem Laden zurückgegebenen Werts ist", definiert. Beispielsweise sind Auslagerungs-, Vergleiche-und-Lagere-aus- und Rufe-ab-und-Addiere-Operationen sämtlich unteilbare Lade-Speichere-Operationen.
- In Fig. 4 ist eine Prinzipdarstellung eines Prozessors gezeigt. Ein Prozessor 40 enthält einen idealisierten Prozessor (IP - Idealized Processor) 41 und einen Befehlspuffer (IBuf - Instruction Buffer) 43. Der idealisierte Prozessor 41 führt jeweils einen Befehl ohne Überlappung aus. Für jeden Befehl ruft der idealisierte Prozessor 41 den Befehl aus dem Befehlspuffer 43 ab, führt den Befehl aus und gibt irgendwelche Daten-Lade-und-Speichere-Operationen direkt an den Speicherport des Prozessors aus. Wenn sich der Befehl nicht bereits in dem Befehlspuffer 43 befindet, gibt der Befehlspuffer 43 eine Befehls-Lade-Operation über den Speicherport des Prozessors für jeden von dem idealisierten Prozessor 41 abgerufenen Befehl aus. Der Befehlspuffer 43 kann Befehle über den Speicherport vorab abrufen, statt auf einen von dem idealisierten Prozessor 41 abgerufenen Befehl zu warten.
- Die erfindungsgemäße Speicherarchitektur wird mit zwei Modellen offenbart, die als Totale-Speicher-Ordnung (TSO) und Partielle-Speicher-Ordnung (PSO) bezeichnet werden.
- Unter Bezugnahme auf Fig. 5 wird das Totale-Speicher- Ordnungs(TSO)-Speichermodell gemäß der vorliegenden Erfindung in schematischer Form offenbart. Jeder Port eines Prozessor enthält einen speziellen FIFO-Speicher-Puffer (der durch die Bezugszeichen 51, 52, 53 oder 54 identifiziert ist). Ein Prozessor gibt Speicheroperationen an einen Einzel-Port-Speicher 50 über den jeweiligen Port des Prozessors aus. Ein Umschalter 55 verbindet den Einzel-Port-Speicher 50 mit jeweils einem der Ports für die Dauer der jeweiligen Speicheroperation. Die von dem Prozessor ausgegebenen Speichere-, Flush- und unteilbaren Lade-Speichere-Operationen werden in den FIFO-Speicher-Puffer des Prozessors gebracht. Das TSO-Speichermodell garantiert, daß die Speichere-, Flush- und unteilbaren Lade-Speichere-Befehle sämtlicher Prozessoren von dem Einzel-Port-Speicher 50 seriell in einer Weise ausgeführt werden, die die "Speicherreihenfolge" genannt wird. Die Speicherreihenfolge dieser Operationen entspricht der Reihenfolge, in welcher die Ports der Prozessoren ausgewählt werden. Der Auswahlprozeß ist abstrakt durch dem Umschalter 55 veranschaulicht, der sich zwischen den Ports bewegt, die die Speicher-Puffer 51, 52, 53 und 54 enthalten. Somit ist die Reihenfolge, in welcher der Einzel- Port-Speicher 50 diese Operationen für einen gegebenen Prozessor ausführt, die gleiche, wie die Reihenfolge, in welcher der Prozessor diese ausgibt.
- Wenn der Prozessor eine Lade-Operation ausgibt, überprüft der Prozessor zunächst den speziellen FIFO-Speicher- Puffer des Prozessors, um zu ermitteln, ob der Speicher-Puffer eine Speichere-Operation zu demselben Speicherplatz wie die ausgegebene Lade-Operation enthält. Sofern der FIFO- Speicher-Puffer des Prozessors eine Speichere-Operation zu demselben Speicherplatz enthält, so gibt die Lade-Operation den Wert der jüngsten Speichere-Operation zurück, anderenfalls geht die Lade-Operation direkt in den Einzel-Port- Speicher 50. Der Prozessor wird daran gehindert, irgendwelche Speicheroperationen nach der Lade-Operation auszugeben, bis die Lade-Operation einen Wert zurückgibt.
- Eine unteilbare Lade-Speichere-Operation verhält sich wie eine Lade- und eine Speichere-Operation. Ähnlich einer Speichere-Operation wird die unteilbare Lade-Speichere-Ope ration in den FIFO-Speicher-Puffer des Prozessors gebracht; die unteilbare Lade-Speichere-Operation blockiert darüber hinaus den Prozessor (ähnlich einer Lade-Operation). Mit anderen Worten, die unteilbare Lade-Speichere-Operation hindert den Prozessor am Ausgeben irgendwelcher weiteren Operationen, bis der FIFO-Speicher-Puffer des Prozessors leer ist, und fährt dann zu dem Einzel-Port-Speicher 50 fort. Wenn die Lade-Speichere-Operation den Prozessor blockiert, können keine von dem Prozessor ausgegebenen Operationen in den speziellen FIFO-Speicher-Puffer des Prozessors gebracht werden. Der Einzel-Port-Speicher 50 führt die unteilbare Lade-Speichere-Operation in unteilbarer Weise aus, d. h., es können keine anderen Operationen zwischen die Lade-Operation und die Speichere-Operation der Lade-Speichere-Operation dazwischentreten.
- Das TSO-Speichermodell gemäß der vorliegenden Erfindung liefert eine höhere Leistung als das Speichermodell der starken Konsistenz. Für das TSO-Modell geschriebene Programme laufen auch auf Computersystemen, die das Speichermodell der starken Konsistenz implementieren.
- Zusätzlich zu dem in Fig. 5 gezeigten intuitiven Modell kann das TSO-Modell auch formell unter Verwendung von sechs Axiomen, Reihenfolge (Order), Unteilbarkeit (Atomicity), Beendigung (Termination), Wert (Value), LadeOp (LoadOp) und SpeichereSpeichere (StoreStore), beschrieben werden. Diese formelle Beschreibung erscheint im Anhang A.
- In Fig. 6 ist das Partielle-Speicher-Ordnungs(PSO)- Speichermodell gemäß der vorliegenden Erfindung abstrakt veranschaulicht. Das PSO-Modell schafft eine höhere Leistung als sowohl das TSO-Modell als auch das Modell starker Konsistenz. Darüber hinaus laufen für das PSO-Modell geschriebene Programme auch auf Computersystemen, die das TSO-Modell implementieren oder auf Computersystemen, die das Modell der starken Konsistenz implementieren. Ähnlich dem TSO-Modell enthält jeder Port eines Prozessors einen speziellen Speicher-Puffer, in welchen von dem Prozessor ausgegebene Speichere-, Flush- und unteilbare Lade-Speichere-Operationen gebracht werden. Jedoch sind die Speicher-Puffer beim PSO-Modell keine FIFO, sondern werden durch STBAR-Operationen und Adreßübereinstimmungen so geordnet, daß zwei Operationen in dem Speicher-Puffer nur dann geordnet werden, wenn sie von dem STBAR in der Ausgabereihenfolge des Prozessors separiert waren, oder wenn sie an die gleiche Adresse ausgegeben wurden. Die von dem Prozessor ausgegebenen Speichere-, Flush- und unteilbaren Lade-Speichere-Operationen werden in den Speicher-Puffer des Prozessors gebracht. Die Reihenfolge der Speicheroperationen entspricht der Reihenfolge, in welcher die Ports der Prozessoren ausgewählt werden. Es wird wieder auf Fig. 6 Bezug genommen, in der der Auswahlprozeß abstrakt durch einen Umschalter 89 veranschaulicht ist, der einen Einzel-Port-Speicher 80 mit jeweils einem der Ports der Prozessoren für die Dauer der jeweiligen Speicheroperation verbindet. Die Reihenfolge, in welcher sich der Umschalter 89 von einem Port zu einem anderen bewegt, ist vom Standpunkt eines Programms aus nicht-deterministisch und definiert die Speicherreihenfolge der Operationen.
- Wenn ein Prozessor eine Lade-Operation ausgibt, überprüft der Prozessor zunächst den Speicher-Puffer des Prozessors, um zu bestimmen, ob dieser eine Speichere-Operation zu demselben Speicherplatz enthält. Wenn der Speicher-Puffer des Prozessors eine Speichere-Operation zu demselben Speicherplatz enthält, gibt die Lade-Operation den Wert der jüngsten Speichere-Operation zurück; anderenfalls geht die Lade-Operation direkt an den Einzel-Port-Speicher 80 (Fig. 6), und die Lade-Operation hindert darüber hinaus den Prozessor am Ausgeben irgendwelcher weiteren Speicheroperationen, bis die Lade-Operation einen Wert zurückgibt.
- Eine unteilbare Lade-Speichere-Operation verhält sich wie eine Lade- und eine Speichere-Operation. Die unteilbare Lade-Speichere-Operation wird (ähnlich einer Speichere-Operation) in den Speicher-Puffer gebracht, und die unteilbare Lade-Speichere-Operation blockiert darüber hinaus (ähnlich einer Lade-Operation) den Prozessor. Der Einzel-Port-Speicher 80 führt die unteilbare Lade-Speichere-Operation in unteilbarer Weise aus, d. h., es können keine weiteren Operationen zwischen dem Laden und dem Speichern einer unteilbaren Lade-Speichere-Operation dazwischentreten.
- Das PSO-Modell kann ebenfalls formell mit sieben Axiomen beschrieben werden, Reihenfolge (Order), Unteilbarkeit (Atomicity), Beendigung (Termination), Wert (Value), Lade-Op (LoadOp), Speicher-Speichern (StoreStore) und StoreStoreEq. Diese formelle Beschreibung erscheint im Anhang A.
- Der Flush-Befehl sichert, daß nachfolgende Befehlsabrufe zu dem Ziel der Flush-Operation (d. h. zu dem von der Flush- Operation adressierten Speicherplatz) durch den die Flush- Operation ausführenden Prozessor so erscheinen, als ob sie nach irgendwelchen Lade-Speichere- und unteilbaren Lade- Speichere-Operationen, die vor der Flush-Operation durch diesen Prozessor ausgegeben wurden, ausgeführt werden. Bei einem Multiprozessor sichert die Flush-Operation darüber hinaus, daß Speichere- und unteilbare Lade-Speichere-Operationen zu dem Ziel der Flush-Operation, die von dem die Flush-Operation ausführenden Prozessor vor der Flush-Operation ausgegeben wurden, für die Befehlsabrufe sämtlicher anderen Prozessoren irgendwann nach dem Ausführen der Flush- Operation sichtbar werden. Wenn ein Prozessor eine Sequenz von Speichere- oder unteilbaren Lade-Speichere-Operationen, die von geeigneten Flush- und STBAR-Befehlen (wobei die letztgenannten Befehle nur bei PSO benötigt werden) durchsetzt wird, ausführt, scheinen die Änderungen für die Be fehlsabrufe sämtlicher Prozessoren in der Reihenfolge aufzutreten, in welcher sie gemacht worden sind.
- Fig. 7 veranschaulicht abstrakt in schematischer Form einen Prozessor 97, der einen Flush-Befehl ausführt. Der Befehlspuffer (IBuf) 96 des Prozessors 97 enthält eine lokale Flush(lflush)-Verzögerung 95, IBuf-Daten 94 und einen Remote-Flush(rflush)-FIFO 92. Die lflush-Verzögerung 95 verzögert die Ausführung einer lokal erzeugten Flush-Operation um irgendeine fest vorgegebene Anzahl (K) von Befehlen. Die IBuf-Daten 94 enthalten die Daten des IBuf 96. Der rflush- FIFO 92 enthält Flush-Operationen, die von fernen Prozessoren (z. B. 99, 990 und 995) erzeugt worden sind.
- Der Prozessor 97 führt eine Flush-"A"-Operation aus, indem er eine lokale Flush(lflush)-Operation an den Befehlspuffer 96 ausgibt und eine Fern-Flush-Operation (rflush) in den Speicher-Puffer 98 bringt. Der Befehlspuffer 96 führt die lflush-Operation nach einer Verzögerung von irgendeiner fest vorgegebenen Anzahl von Befehlen (K) aus, indem er den Inhalt der Adresse "A" im Befehlspuffer 96 ungültig macht. Die in den Speicher-Puffer 98 gebrachte rflush-Operation wird für die Zwecke der Ordnung bzw. der Reihenfolge wie eine Speichere-Operation behandelt, d. h. die rflush-Operation erscheint in der globalen Speicherreihenfolge, indem sie abstrakt in den Einzel-Port-Speicher 90 über den Umschalter 91 geht und in den rflush-FIFO der anderen Prozessoren gebracht wird. Die rflush-FIFO der anderen Prozessoren sind durch die Bezugszeichen 93, 991 und 996 identifiziert. Die rflush-Operation hat keinerlei Einfluß auf die Inhalte des Speichers. Ein Befehlspuffer (IBuf) eines fernen Prozessors macht den Inhalt der Speicheradresse "A" ungültig, wenn die rflush am Kopf des rflush-FIFO dieses Prozessors eintrifft. Beispielsweise macht der IBuf 2 des fernen Prozessors 99 den Inhalt der Adresse "A" ungültig, wenn die rflush-Operation am Kopf des rflush-FIFO 93 eintrifft.
- Die lflush-Operation garantiert, daß ein Befehlsabruf zu einer Adresse, der K Befehle oder mehr nach einer Flush-Operation von dem Prozessor ausgegeben wurde, nicht in den IBuf des Prozessors gebracht wird und in der Ausgabereihenfolge als ein Befehl Laden am Port des Prozessors erscheint. Beispielsweise garantiert die lflush-Operation in Erwiderung einer von dem Prozessor 97 ausgegebenen Flush-"A"-Operation, daß irgendwelche wenigstens KBefehle nach der Flush-"A"-Operation ausgegebenen Befehlsabrufe nicht in den Befehlspuffer 96 gebracht werden und in der Ausgabereihenfolge als ein Befehl Laden am Port des Prozessors 97 erscheinen.
- Zusätzlich zu dem in Fig. 7 gezeigten intuitiven Modell kann der FLUSH-Befehl formell unter Verwendung von drei Axiomen beschrieben werden; IFetchValue, FlushTermination und IFetchlFetch. Diese formelle Beschreibung erscheint im Anhang A.
- Die folgende Beschreibung des bevorzugten Ausführungsbeispiels beschreibt ein mit einem Hauptspeicher gekoppeltes Mehr-Prozessor-System, das die Lehren der vorliegenden Erfindung enthält. In Fig. 8 ist ein mit einem Hauptspeicher 109 gekoppeltes Multiprozessorsystem abstrakt schematisch veranschaulicht. Wie gezeigt ist, ist ein Prozessor 104 mit einem Prozessorbus 110 und einem externen Cache--Speicher 103 gekoppelt. Der externe Cache 103 ist mit sowohl einem Speicherbus 101 als auch einem Speicherbus 102 gekoppelt. In ähnlicher Weise ist ein Prozessor 106 mit dem Prozessorbus 111 und einem externen Cache 105 gekoppelt. Der externe Cache 105 ist mit sowohl dem Speicherbus 101 als auch dem Speicherbus 102 gekoppelt. Wie veranschaulicht, ist ein Prozessor 108 mit einem Prozessorbus 112 und einem externen Cache 107 gekoppelt. Der externe Cache 107 ist mit sowohl dem Speicherbus 101 als auch dem Speicherbus 102 gekoppelt. Der Hauptspeicher 109 ist mit sowohl dem Speicherbus 101 als auch dem Speicherbus 102 gekoppelt. Bei diesem Ausführungs beispiel sind anstelle eines Speicherbusses zwei Speicherbusse implementiert, um eine höhere Bandbreite bereitzustellen, welche es dem System gestattet, mit mehr Prozessoren konfiguriert zu werden. Jeder Speicherbus weist seinen eigenen unabhängigen Arbiter auf. Beispielsweise ist der Speicherbus 101 mit einem Arbiter 116 und der Speicherbus 102 mit einem Arbiter 117 gekoppelt. Für nähere Informationen über den Bus-Arbiter siehe die parallel anhängige US-Patentanmeldung mit dem Titel "Arbitration of Packet Switched Buses, Including Buses for Shared Memory Multiprocessor", Seriennummer 07/621,123, angemeldet am 30. November 1990.
- Der externe Cache jedes Prozessors (z. B. 103, 105 und 107) sendet Transaktionen an den Hauptspeicher 109 über die Speicherbusse. Bei dem gegenwärtig bevorzugten Ausführungsbeispiel sind der Speicherbus 101 und der Speicherbus 102 auf der Basis der Transaktionsadressen miteinander verschachtelt.
- Jeder der Speicherbusse unterstützt wenigstens vier Transaktionen, eine LiesBlock-Transaktion, eine SchreibeGeteilt-Transaktion, eine Unteilbare-Op-Geteilt-Transaktion und eine FlushBlock-Transaktion. Die LiesBlock-Transaktion wird von einem externen Cache (z. B. 103) ausgegeben, um einen Datenblock aus dem Hauptspeicher (z. B. 109) oder aus einem anderen externen Cache (z. B. 105) zu lesen, wenn sich die angeforderten Daten nicht in dem externen Cache (z. B. 103) finden lassen. Ein SchreibeGeteilt (WriteShared) wird von einem externen Cache, beispielsweise 103, ausgegeben, um ein Schreiben an sämtliche anderen externen Caches, beispielsweise 105 und 107, auszusenden, wenn ein Prozessor (z. B. 104) eine Speichere-Operation an einen geteilten Speicherplatz ausgibt. Ein "geteilter" Speicherplatz ist ein Block des Speichers, welcher in mehr als einem externen Cache vorhanden ist. Eine Unteilbare-Op-Geteilt (Atomic Op- Shared) wird von einem externen Cache, beispielsweise 103, ausgegeben, um eine unteilbare Lade-Speichere-Operation an einen geteilten Speicherplatz auszusenden. Eine FlushBlock wird von einem externen Cache (z. B. 103) ausgegeben, um einen Datenblock zurück in den Hauptspeicher (z. B. 109) zu schreiben.
- Zusätzlich zu der Unterstützung der o. g. Transaktionen gestattet es jeder Speicherbus einem externen Cache (z. B. 103), an die anderen externen Cache-Speicher (z. B. 105, 107) anzuzeigen, ob dieser externe Cache (z. B. 103) einen Speicherblock aufweist, welcher eine Adresse hat, die in einer bestimmten Speicheroperation erschien, und ob dieser Speicherblock von dem Prozessor (z. B. 104) dieses externen Caches zuletzt geschrieben wurde (dies wird auch als "Snooping" bezeichnet). Sofern ein Speicherblock von einem Prozessor eines externen Caches eingeschrieben worden ist, so wird dieser Speicherblock als diesem Prozessor "eigener" ("owned") Speicherblock bezeichnet. Für nähere Informationen über Speicherbusse siehe die Europäische Patentanmeldung mit dem Titel "Consistent packet Switched Memory Bus for Shared Memory Multiprocessors", EP-A-0 488 770.
- Jeder Prozessor weist ein Modusbit auf, welches anzeigt, ob das benutzte Speichermodell ein TSO- oder PSO-Modell ist. Sofern das Modusbit auf das PSO-Modell gesetzt ist, so gibt der Prozessor die Speicheroperationen in Übereinstimmung mit den Spezifikationen des PSO-Speichermodells aus. Sofern das Modusbit auf das TSO-Modell gesetzt ist, so gibt der Prozessor die Speicheroperationen in Übereinstimmung mit den Spezifikationen des TSO-Speichermodells aus.
- Zusätzlich zu der Befehlsabruf- und Befehlsausführungseinheit enthält der Prozessor (z. B. 104) außerdem einen Speicher-Puffer und einen internen Cache. In Fig. 9 ist eine detailliertere abstrakte Veranschaulichung des Prozessors 104 schematisch gezeigt. Der Prozessor 104 enthält einen Speicher-Puffer 1102, einen internen Cache 1104 und eine Befehlsabruf- und Ausführungseinheit 1100. Der interne Cache 1104 hält die Befehle und Daten des Prozessors 104. Der In halt des internen Cache 1104 ist darüber hinaus eine Untermenge des Inhalts des jeweiligen externen Caches des Prozessors 104 (z. B. 103). Wenn der Prozessor 104 eine Speichere- Operation ausgibt, und wenn der Inhalt des internen Cache 1104 außerdem den gleichen Speicherplatz enthält, auf den von der Speichere-Operation Bezug genommen wird, dann aktualisiert der Prozessor 104 den Inhalt des internen Cache 1104, anderenfalls umgeht der Prozessor 104 den internen Cache 1104. Unabhängig vom Inhalt des internen Cache 1104 gibt der Prozessor 104 die Speichere-Operation an den externen Cache 103 des Prozessors 104 über den Prozessorbus 110 (Fig. 8) aus. Der Speicher-Puffer 1102 ist eine FIFO-Warteschlange, welche Speichere- und unteilbare Lade-Speichere- Operationen puffert, die von dem Prozessor 104 ausgegeben wurden, bevor diese Operationen zu dem Prozessorbus 110 gelangen.
- In Fig. 10 ist eine detailliertere abstrakte Darstellung des externen Cache 103 in schematischer Form gezeigt. Der externe Cache 103 enthält einen Cachespeicher 1200, eine Steuerlogik 1202, eine Warteschlange 1204 und eine Warteschlange 1206. Die Steuerlogik 1202 empfängt Operationen aus einem Prozessor und bestimmt, ob die Operationen innerhalb des externen Cache 103 ausgeführt werden können. Wenn die Operationen vollständig innerhalb des externen Cache 103 ausgeführt werden können, dann antwortet die Steuerlogik 1202 entsprechend an den Prozessor, welcher die Operationen ausgegeben hat. Beispielsweise kann ein Prozessor eine Lade- Operation an den externen Cache 103 ausgeben, und wenn der externe Cache 103 die von der Lade-Operation angeforderten Daten enthält, so bestimmt dann die Steuerlogik 1202 die Daten aus dem Cachespeicher 1200 und gibt die Daten an den Prozessor zurück, welcher die Lade-Operation ausgegeben hat. Sofern der externe Cache 103 nicht die von der Lade-Operation angeforderten Daten enthält, so bringt dann die Steuerlogik 1202 eine LiesBlock-Transaktion entweder in die Warte schlange 1204 oder in die Warteschlange 1206, was von der Verschachtelung der Adresse abhängig ist. Diese LiesBlock- Transaktion geht auf den geeigneten Bus (101 oder 102), und einige Zeit später erwidert der Hauptspeicher 109 oder ein anderer Cache (z. B. 105, 107) auf die LiesBlock (Fig. 8). Wenn die Erwiderung auf dem richtigen Speicherbus empfangen wird, sendet die Steuerlogik 1202 die Erwiderung an den Prozessor, der die Lade-Operation ausgegeben hat, und schreibt die Daten aus der LiesBlock-Erwiderung in den Cachespeicher 1200.
- Wenn ein Prozessor eine Speichere-Operation an einen geteilten Speicherplatz ausgibt, empfängt die Steuerlogik 1202 die Speichere-Operation und bringt die Speichere-Operation entweder in die Warteschlange 1204 oder die Warteschlange 1206, was von der Adresse abhängt. Das zu beachtende Schlüsselmerkmal besteht darin, daß deshalb, weil diese Warteschlangen zu Bussen mit unabhängig entschiedenem Zugriff (d. h. zu den Speicherbussen 101 oder 102) gehen, es keine Garantie gibt, daß die Reihenfolge, in welcher die Speichere-Operationen schließlich durchgeführt werden, die gleiche ist, wie die Reihenfolge, in welcher sie von dem Prozessor ausgegeben wurden. Wie diese Reihenfolge von der Implementierung garantiert wird, wird unten in dem Abschnitt der Speichere-Operation beschrieben.
- Das folgende Beispiel beschreibt eine Implementierung von durch die Prozessoren an den Hauptspeicher bei dem bevorzugten Ausführungsbeispiel unter Verwendung der Lehren gemäß der vorliegenden Erfindung ausgegebenen Speicheroperationen.
- Gemäß Fig. 9 prüft die Ausführungseinheit 1110 des Prozessors dann, wenn der Prozessor 104 einen Lade-Befehl aus führt, den internen Cache 1100 bezüglich der angeforderten Daten. In Erwiderung des Lade-Befehls liest die Ausführungseinheit 1100 dann, wenn die angeforderten Daten in dem internen Cache 1104 gefunden werden (dies ist auch als "Treffer" bekannt), die Daten aus dem internen Cache 1104. Sofern die angeforderten Daten nicht in dem internen Cache 1104 gefunden werden (dies ist auch als "Fehlversuch" bekannt), so überprüft dann der Prozessor 104 den Speicher- Puffer 1102, um zu bestimmen, ob es dort eine Speichere-Operation zu demselben Speicherplatz gibt. Sofern es eine Speichere-Operation zu demselben Speicherplatz gibt, so gibt dann die Lade-Operation den durch die letzte derartige Speichere-Operation geschriebenen Wert zurück, andernfalls gibt der Prozessor 104 die Lade-Operation an den externen Cache 103 über den Prozessorbus 110 aus. Gemäß Fig. 8 gibt in Erwiderung der Lade-Operation dann, wenn die angeforderten Daten in dem externen Cache 103 gefunden werden, der externe Cache 103 die angeforderten Daten an den Prozessor 104 über den Prozessorbus 110 zurück. Sofern die angeforderten Daten nicht in dem externen Cache 103 gefunden werden, so gibt dann der externe Cache 103 eine LiesBlock-Transaktion auf dem geeigneten Speicherbus (entweder dem Speicherbus 101 oder 102, was von der Verschachtelung der Adressen abhängt) aus und wartet auf eine Erwiderung. Der externe Cache 103 gibt darüber hinaus eine FlushBlock-Transaktion aus, um die Daten in den Hauptspeicher 109 zu schreiben, sofern der Cache-Speicherplatz, der von der Adresse der Lade-Operation belegt wird, gegenwärtig von einer anderen Adresse belegt wird und diese Adresse als dem externen Cache 103 "eigen" ("owned") markiert ist. Gemäß Fig. 10 gibt dann, wenn die Erwiderung auf die LiesBlock-Transaktion empfangen wird, der externe Cache 103 die Daten in den Cachespeicher 1200 und gibt die Daten in Erwiderung der Lade-Operation an den Prozessorbus zurück.
- Es wird wieder auf Fig. 9 Bezug genommen; wenn der Prozessor 104 die Daten über den Prozessorbus 110 empfängt, bringt der Prozessor 104 die Daten in den internen Cache 1104 und gibt sie darüber hinaus an die Ausführungseinheit 1100 zurück.
- Ein von der Ausführungseinheit 1100 des Prozessors 104 ausgeführter Speichere-Befehl wird direkt in den Speicher- Puffer 1102 dieses Prozessors gebracht (Fig. 9). In Erwiderung des Speichere-Befehls wird, sofern der interne Cache 1104 den adressierten Speicherplatz enthält, den Inhalt des internen Cache 1104 ebenfalls aktualisiert. So werden sämtliche von einem Prozessor ausgegebenen Speichere-Befehle zu dem externen Cache dieses Prozessors gesendet.
- Sofern der externe Cache 103 des Prozessors 104 nicht den von dieser Speichere-Operation adressierten Speicherplatz enthält, so gibt dann der externe Cache 103 dieses Prozessors eine LiesBlock-Transaktion auf dem richtigen Speicherbus aus und wartet auf eine Erwiderung auf dem Speicherbus (Fig. 8). Der externe Cache 103 gibt darüber hinaus eine FlushBlock-Transaktion aus, um die Daten an den Hauptspeicher 109 zurückzuschreiben, sofern der Cache-Speicherplatz, der von der Adresse der Speichere-Operation belegt wird, gegenwärtig von einer anderen Adresse belegt ist, und sofern diese Adresse als diesem externen Cache 103 "eigen" ("owned") markiert ist. Wenn der externe Cache 103 die Erwiderungsdaten aus dem geeigneten Speicherbus in Erwiderung der LiesBlock-Transaktion empfängt, gibt der externe Cache 103 die Daten in den Cachespeicher des externen Cache 103 und beantwortet die Speichere-Operation so, als ob der externe Cache 103 von Anfang an den von der Speichere-Operation adressierten Speicherplatz enthalten hätte.
- Sofern der externe Cache 103 den von der Speichere-Operation adressierten Speicherplatz enthält, so bestimmt dann die Steuerlogik 1202, ob der Cache-Speicherplatz geteilt ist oder nicht (Fig. 10). Sofern der Cache-Speicherplatz in dem externen Cache 103 nicht geteilt ist, so aktualisiert dann die Steuerlogik 1202 den Cachespeicher 1200 mit dem Wert der Speichere-Operation. Sofern der Cache-Speicherplatz in dem externen Cache 103 geteilt (shared) ist, so sendet dann die Steuerlogik 1202 eine SchreibeGeteilt-Transaktion (WriteShared-Transaktion) auf den geeigneten Speicherbus an den Hauptspeicher 109. Der Hauptspeicher 109 erzeugt eine Erwiderung auf die SchreibeGeteilt-Transaktion, welche die Adresse und den Datenwert, der an der Adresse vorhanden war, enthält. Wenn der externe Cache 103 die Erwiderung aus dem Hauptspeicher 109 empfängt, aktualisiert der externe Cache 103 den Cachespeicher 1200 mit dem Wert der SchreibeGeteilt- Transaktion.
- Der von einer Ausführungseinheit 1100 ausgeführte unteilbare Lade-Speichere-Befehl wird direkt in den Speicher- Puffer 1102 (Fig. 9) gebracht. Die Ausführungseinheit 1100 hält an, bis die unteilbare Lade-Speichere-Operation einen Wert zurückgibt, d. h. sie gibt keinen weiteren Befehl aus, bis die unteilbare Lade-Speichere-Operation einen Wert zurückgibt. Wenn der interne Cache 1104 des Prozessors 104 den von der unteilbaren Lade-Speichere-Operation adressierten Speicherplatz enthält, so wird dann der Inhalt des internen Cache 1104 ebenfalls mit dem Wert, der von der unteilbaren Lade-Speichere-Operation geschrieben wird, aktualisiert. So werden sämtliche unteilbaren Lade-Speichere-Operationen ebenfalls zu dem externen Cache (z. B. 103) gesendet (ähnlich den Speichere-Operationen).
- Sofern der externe Cache 103 in Erwiderung der unteilbaren Lade-Speichere-Operation die angeforderten Daten nicht enthält, so gibt dann der externe Cache 103 eine LiesBlock- Transaktion auf dem richtigen Speicherbus aus und wartet auf eine Erwiderung (Fig. 8). Der externe Cache 103 gibt darüber hinaus eine FlushBlock-Transaktion aus, um die aktuellen Daten in den Hauptspeicher 109 zurückzuschreiben, sofern der Cache-Speicherplatz, der von der Adresse des unteilbaren Lade-Speichere-Befehls belegt wird, gegenwärtig von einer anderen Adresse belegt wird und diese Adresse als diesem externen Cache 103 "eigen" markiert ist (Fig. 8). Wenn der externe Cache 103 die Erwiderungsdaten aus dem richtigen Speicherbus in Erwiderung der LiesBlock-Transaktion empfängt, bringt der externe Cache 103 die Daten in den Cachespeicher 1200 (Fig. 10) und beantwortet die unteilbare Lade-Speichere-Operation so, als ob der externe Cache 103 von Anfang an den angeforderten Platz enthalten hätte.
- Wenn der externe Cache 103 den von dem unteilbaren Laden-Speichern adressierten Speicherplatz enthält, dann bestimmt die Steuerlogik 1202, ob der Cache-Speicherplatz geteilt ist oder nicht (Fig. 10). Wenn der Cache-Speicherplatz in dem externen Cache 103 nicht geteilt ist, dann liest die Steuerlogik 1202 unteilbar den Speicherplatz und schreibt den neuen Wert, so daß keine Speichere-Operation zwischen das Lesen und das Schreiben eintreten kann. Sofern der Speicherplatz in dem externen Cache 103 geteilt ist, sendet die Steuerlogik 1202 eine Unteilbar-Op-Geteilt-Transaktion auf dem richtigen Speicherbus an den Hauptspeicher 109 (Fig. 8). Der Hauptspeicher 109 erzeugt eine Erwiderung auf die Unteilbare-Op-Geteilt-Transaktion, welche die Adresse und den Wert als Anforderungsteil der Transaktion enthält. Wenn der externe Cache 103 die Erwiderung aus dem Hauptspeicher 109 empfängt, liest der externe Cache 103 den Cache-Speicherplatz und schreibt den neuen Datenwert derart ein, daß keine Speichere-Operation zwischen das Lesen und das Schreiben dazwischentreten kann. Schließlich gibt der externe Cache 103 den aus dem Cache-Speicherplatz gelesenen Datenwert über den Prozessorbus an den Prozessor zurück, welcher die unteilbare Lade-Speichere-Operation ausgegeben hat. Beispielsweise an den Prozessor 104. Wenn der Prozessor 104 den von der unteilbaren Lade-Speichere-Operation zurückgegebenen Datenwert empfängt, sendet der Prozessor 104 den Datenwert an die Ausführungseinheit 110, woraufhin die Ausführungseinheit 110 fortfährt, den nächsten Befehl auszuführen (Fig. 9).
- Eine von der Ausführungseinheit 110 ausgegebene STBAR- Operation wird in den Speicher-Puffer des Prozessors 104 (Fig. 9) gebracht (ähnlich einer Speichere-Operation). Wenn die STBAR-Operation den Kopf des Speicher-Puffers 1102 erreicht, entfernt der Prozessor 104 die STBAR aus dem Speicher-Puffer 1102, und der Prozessor 104 wartet, bis sämtliche Speichere-Operationen, die an den externen Cache dieses Prozessors vor der STBAR-Operation ausgegeben wurden, die Ausführung abgeschlossen haben, bevor es nachfolgenden Speichere-Operationen gestattet wird, auf dem Prozessorbus zu erscheinen. Der Vorgang des Wartens des Prozessors gestattet es dem Prozessor, die Schlüssel-Reihenfolge-Anforderung des PSO-Speichermodells derart zu erfüllen, daß sämtliche vor einem STBAR-Befehl ausgegebenen Speichere-Befehle die Ausführung vor irgendeinem der nach einem STBAR-Befehl ausgegebenen Speichere-Befehle abschließen müssen. Man beachte, daß der STBAR-Befehl die Ausführungseinheit des Prozessors (z. B. 1100) nicht blockiert.
- Ein Flush-Befehl veranlaßt die Befehlsabruf- und Ausführungseinheit 1100 des Prozessors 104, irgendwelche internen Befehlspuffer zu entleeren und irgendwelche internen Pipelinestufen zu spülen (flush), die Befehle ausführen könnten, welche vor der Flush-Operation ausgegeben wurden (Fig. 9).
- Wenn der externe Cache 103 eine LiesBlock-Transaktion aus dem Speicherbus (101 oder 102) empfängt, bestimmt der externe Cache 103, ob die Adresse der LiesBlock-Transaktion in dem Cache-Speicher des externen Cache vorhanden ist und ob die Adresse diesem externen Cache "eigen" ist (Fig. 8). Es wird wieder auf Fig. 10 Bezug genommen; wenn die Adresse der LiesBlock-Transaktion in dem Cachespeicher vorhanden ist und die Adresse diesem externen Cache 103 "eigen" ("owned") ist, dann hindert dieser externe Cache 103 den Hauptspeicher 109 am Erwidern auf die LiesBlock-Anforderung und erzeugt eine Erwiderung, die die aus dem Cachespeicher dieses externen Cache 103 abgerufenen Daten enthält.
- Beschreibung der SchreibeGeteilt-Transaktion Wenn der externe Cache 103 eine SchreibeGeteilt-Transaktion an den Hauptspeicher 109 ausgibt und eine Erwiderung empfängt, schreibt dann dieser externe Cache 103 die Daten der Erwiderung in den Cachespeicher 1200 (Fig. 10). Anschließend markiert dieser externe Cache 103 den Cache-Speicherplatz als eigenen (owned) und benachrichtigt den Prozessor 104, daß die Speichere-Operation abgeschlossen ist (Fig. 8).
- Es wird wieder auf Fig. 8 Bezug genommen; wenn der externe Cache 103 aus dem Hauptspeicher 109 eine Erwiderung auf eine SchreibeGeteilt-Transaktion empfängt, die von einem anderen externen Cache 105 ausgegeben wurde, macht der externe Cache 103 nichts, sofern der von der SchreibeGeteilt- Transaktion adressierte Speicherplatz nicht in dem externen Cache 103 vorhanden ist. Wenn der Speicherplatz in dem externen Cache 103 vorhanden ist, schreibt der externe Cache 103 die Daten in den Cachespeicher des externen Cache 103, markiert den Speicherplatz als nicht eigenen (not owned) und sendet eine Anforderung an den internen Cache des Prozessors 104, damit dieser den Cache-Speicherplatz ungültig macht, sofern er in dem internen Cache vorhanden ist. Das Ungültig- Machen des Speicherplatzes des internen Cache hält die Konsistenz der Daten zwischen dem externen Cache und dem internen Cache des Prozessors aufrecht, da der Inhalt des internen Cache eine Untermenge des Inhalts des externen Cache darstellt. Für nähere Informationen über die Cache-Kohärenz siehe das veröffentlichte US-Patent mit dem Titel "Consistency Protocols for Shared Memory Multiprocessors", US-A-5,265,235.
- Wenn der externe Cache 103 eine Ungeteilte-Op-Geteilt- Transaktion an den Hauptspeicher 109 ausgibt und eine Erwiderung empfängt, markiert dieser externe Cache 103 den Cache-Speicherplatz als eigenen (owned), liest unteilbar den alten Wert und schreibt den neuen Wert in den Cache-Speicherplatz und gibt den aus dem Cache-Speicherplatz gelesenen Wert an den Prozessor zurück (Fig. 8). Wenn der externe Cache 103 aus dem Hauptspeicher 109 eine Erwiderung auf eine Ungeteilte-Op-Geteilt-Transaktion empfängt, die von einem anderen externen Cache 105 ausgegeben wurde, macht der externe Cache 103 nichts, sofern der von der Ungeteilten-Op- Geteilt-Transaktion adressierte Speicherplatz nicht in dem externen Cache 103 vorhanden ist. Wenn der von der Ungeteilten-Op-Geteilt-Transaktion adressierte Speicherplatz in dem externen Cache 103 vorhanden ist, liest dann der externe Cache 103 unteilbar den alten Wert und schreibt den neuen Wert in den Cachespeicher des externen Cache 103, markiert den Speicherplatz als nicht eigenen und sendet eine Anforderung an den internen Cache des Prozessors 104, damit dieser den Cache-Speicherplatz ungültig macht, sofern dieser in dem internen Cache vorhanden ist. Das Ungültig-Machen des Cache- Speicherplatzes hält die Konsistenz der Daten zwischen dem externen Cache und dem internen Cache des Prozessors aufrecht.
- Der externe Cache ignoriert die FlushBlock-Transaktion auf dem Speicherbus.
- Die Beschreibung der Lade-Operation im TSO-Modus ist gleich der im PSO-Modus (siehe Seite 17).
- Die Beschreibung der Speichere-Operation im TSO-Modus ist gleich der im PSO-Modus (siehe Seite 18) mit der Ausnahme, daß der Prozessor 104 keine Speichere-Operation auf den Prozessorbus 110 ausgibt, sofern eine zuvor von dem gleichen Prozessor 104 ausgegebene Speichere-Operation nicht abgeschlossen worden ist.
- Die Beschreibung der unteilbaren Lade-Speichere-Operation im TSO-Modus ist die gleiche wie die des PSO-Modus (siehe Seite 19).
- Wenn der Prozessor im TSO-Modus ausführt, ignoriert er eine STBAR-Operation. Mit anderen Worten, die STBAR-Operation wird als Null-Operation ausgeführt ("Nop").
- Die Beschreibung des Flush-Befehls im TSO-Modus ist gleich der im PSO-Modus (siehe Seite 21).
- Die Beschreibung der LiesBlock-Transaktion im TSO-Modus ist gleich der im PSO-Modus (siehe Seite 21).
- Die Beschreibung der SchreibeGeteilt-Transaktion im TSO- Modus ist gleich der im PSO-Modus (siehe Seite 21).
- Die Beschreibung der Ungeteilt-Op-Geteilt-Transaktion im TSO-Modus ist gleich der im PSO-Modus (siehe Seite 22).
- Die Beschreibung der Flush-Block-Transaktion im TSO-Modus ist gleich der im PSO-Modus (siehe Seite 23).
- Die unten angegebenen detaillierten Beschreibungen werden weitgehend in Form einer Architektur und in Form von symbolischen Darstellungen von Speicheroperationen in einem Computersystem angegeben. Diese Architekturen und symbolischen Beschreibungen und Darstellungen sind ein von Fachleuten auf dem Gebiet der Datenverarbeitung verwendetes Mittel, um am effektivsten das Wesen ihrer Arbeit anderen Fachleuten zu übermitteln. Die folgende axiomatische Beschreibung wird zur Verfügung gestellt, um das zuvor beschriebene Speichermodell gemäß der vorliegenden Erfindung für sowohl die TSO- als auch die PSO-Implementierung näher zu definieren.
- Es sei daran erinnert, daß die vorliegende Erfindung ein Speichermodell beschreibt. Diese formale Beschreibung spezifiziert eine Schnittstelle zwischen Softwareprogrammen und Hardwareimplementierungen, die auf einem beliebigen Computersystem implementiert werden kann.
- Das folgende beschreibt die Bezeichnungen, die in den Axiomen verwendet werden.
- Eine Daten-Lade-Operation wird durch ein L bezeichnet. Eine Speichere-Operation wird durch S bezeichnet. Eine unteilbare Lade-Speichere-Operation wird durch [L; S] bezeichnet, wobei die rechteckigen Klammern die Unteilbarkeit darstellen. Die STBAR wird durch ein 6 dargestellt. Ein Befehl Flush wird durch ein F bezeichnet. Ein Befehlsabruf wird durch IF bezeichnet und ein Befehlsladen wird durch ein IL bezeichnet. Der durch eine Lade-, Befehlsabruf- oder Befehlslade- oder Speichere-Operation zurückgegebene Wert wird durch [Val] bezeichnet. Die hochgestellten Zeichen an L, 5, F, IF und IL beziehen sich auf eine Prozessornummer. Die Fußnoten an diesen Operationen (d. h. L, S. 6, F, IF und IL) beziehen sich auf Speicherplätze. Die Zahl nach einem # zeigt den von der Speichere-Operation geschriebenen Wert an.
- Sia#0 ein Speichern einer "0" in einen Speicherplatz "a", das vom Prozessor i ausgegeben wurde;
- Lia ein Laden aus Speicherplatz "a", ausgegeben vom Prozessor i;
- [Lia; Sia] ein unteilbares Laden-Speichern zum Speicherplatz "a", ausgegeben vom Prozessor i;
- Si ein STBAR, ausgegeben vom Prozessor i;
- ILia ein Befehlsladen aus dem Speicherplatz "a", ausgegeben vom Prozessor i;
- Fia einen Befehl Flush zum Speicherplatz "a", ausgegeben vom Prozessor i;
- IFia einen Befehlsabruf vom Speicherplatz "a", ausgegeben vom Prozessor i;
- Val [Lia] den von einem Lia-Befehl zurückgegebenen Wert;
- Val[Sia] den im Speicherplatz "a" vorhandenen Wert, unmittelbar nachdem er durch Sia gespeichert worden ist;
- SOp eine Kurzbezeichnung für S oder F;
- Op eine Kurzbezeichnung L, S oder F;
- (Op;)∞ eine unendliche Sequenz von Op.
- TSO-Axiome
- Die Semantik des TSO-Speichermodells wird durch sechs Axiome beschrieben, Reihenfolge, Unteilbarkeit, Beendigung, Wert, LoadOp und StoreStore.
- Das Reihenfolge-Axiom besagt, daß es eine partielle Reihenfolge (≤) für sämtliche Speichere- und Flush-Operationen gibt. Das Reihenfolge-Axiom ist definiert als:
- (SOPia SOpjb) V (SOpjb ≤ SOPia)
- Das Unteilbarkeit-Axiom besagt, daß eine unteilbare Lade-Speichere-Operation das Laden vor dem Speichern ausgibt, d. h., daß der Lade-Teil einer Lade-Speichere-Operation vor dem Speichern in der partiellen Reihenfolge () erscheint, und daß zwischen dem Laden und dem Speichern es keine weiteren Speichere-Operationen in der Speicherreihenfolge geben kann. Das Unteilbarkeit-Axiom ist definiert als:
- Das Beendigung-Axiom besagt, daß sämtliche Speichere- und unteilbaren Lade-Speichere-Operationen schließlich enden. Dies wird formalisiert, indem angezeigt wird, daß dann, wenn ein Prozessor eine Speichere-Operation ausgibt und ein anderer Prozessor wiederholt eine Lade-Operation an den gleichen Speicherplatz wie die Speichere-Operation ausgibt, es eine Lade-Operation gibt, die in der partiellen Reihenfolge (≤) nach der Speichere-Operation ist. Das Beendigungs- Axiom wird durch folgende Formel definiert:
- Das Wert-Axiom besagt, daß ein Wert eines Daten-Ladens derjenige Wert ist, der durch die jüngste Speichere-Operation zu diesem Speicherplatz geschrieben worden ist. Das Wert-Axiom wird durch folgendes definiert:
- Das LoadOp-Axiom besagt, daß die nach einer Lade-Operation ausgegebene Operation in der partiellen Speicherreihenfolge (≤) später erscheint. Dieses Axiom zeigt an, daß ein Prozessor darauf wartet, daß eine Lade-Operation abgeschlossen wird, bevor er irgendeine nachfolgende Operation ausgibt. Das LoadOp-Axiom wird durch folgendes definiert:
- Lja·Opjb => Lja ≤ QPjb
- Das StoreStore-Axiom besagt, daß Speichere- und Flush- Operationen, die von einem Prozessor ausgegeben werden, in der gleichen Reihenfolge in der partiellen Speicherreihenfolge (≤) erscheinen. Dieses Axiom reflektiert die Tatsache, daß der Speicher die Speichere- und Flush-Operation in der Reihenfolge ausführt, in welcher der Prozessor sie ausgegeben hat. Das StoreStore-Axiom wird durch folgendes definiert:
- SOpia; SOpib => SOpia ≤ SOpib
- Das PSO-Speichermodell wird durch sieben Axiome beschrieben, Reihenfolge, Unteilbarkeit, Beendigung, Wert, LoadOp, StoreStore und StoreStoreEq. Die Axiome werden auf folgende Weise definiert.
- Das Reihenfolge-Axiom besagt, daß es eine partielle Reihenfolge () für sämtliche Speichere- und Flush-Operationen gibt. Das Reihenfolge-Axiom ist definiert als:
- (SOpia ≤ SOpjb) V (SOpjb ≤ Sopia)
- Das Unteilbarkeit-Axiom besagt, daß eine unteilbare Lade-Speichere-Operation das Laden vor dem Speichern ausgibt, d. h., daß der Lade-Teil einer Lade-Speichere-Operation in der partiellen Reihenfolge () vor dem Speichern erscheint und daß zwischen dem Laden und dem Speichern keine anderen Speichere-Operationen in der Speicherreihenfolge vorhanden sein können. Das Axiom ist definiert als:
- Das Beendigung-Axiom besagt, daß sämtliche Speichere- und unteilbaren Lade-Speichere-Operationen schließlich enden. Dieses Axiom wird formalisiert, indem angezeigt wird, daß dann, wenn ein Prozessor eine Speichere-Operation ausführt und ein anderer Prozessor wiederholt eine Lade-Operation zu dem gleichen Speicherplatz wie die Speichere-Opera tion ausführt, es dann eine Lade-Operation gibt, die nach der Speichere-Operation liegt. Das Beendigung-Axiom wird durch folgendes definiert:
- Das Wert-Axiom besagt, daß der Wert eines Daten-Ladens derjenige Wert ist, der durch die jüngste Speichere-Operation zu diesem Speicherplatz geschrieben worden ist. Das Wert-Axiom wird durch folgendes definiert:
- Das LoadOp-Axiom besagt, daß die nach einer Lade-Operation ausgegebene Operation in der partiellen Speicherreihenfolge (≤) später erscheint. Dieses Axiom zeigt an, daß ein Prozessor darauf wartet, daß eine Lade-Operation abgeschlossen wird, bevor er irgendeine nachfolgende Operation ausgibt. Das LoadOp-Axiom wird durch folgendes definiert:
- Lia; Opib = > Lia Opib
- Das StoreStore-Axiom besagt, daß sämtliche Operationen, die durch eine STBAR in der Ausführungsreihenfolge des Prozessors getrennt sind, in der gleichen Reihenfolge in der partiellen Speicherreihenfolge () erscheinen. Dieses Axiom zeigt an, daß der Speicher nur dann Speichere- und Flush- Operationen in der gleichen Reihenfolge, wie der Prozessor sie ausgegeben hat, ausführt, sofern der Prozessor sie durch eine STBAR trennt. Das StoreStore-Axiom wird durch folgendes definiert:
- Das StoreStoreEq-Axiom besagt, daß die zu einem gegebenen Speicherplatz von einem Prozessor ausgegebenen Speichere- und Flush-Operationen in der gleichen Reihenfolge in der partiellen Speicherreihenfolge () erscheinen. Dieses Axiom zeigt an, daß der Speicher die Speichere-Operationen zu dem gleichen Speicherplatz selbst dann in der Reihenfolge, in welcher sie durch den Prozessor ausgegeben wurden, ausführt, wenn der Prozessor sie nicht durch eine STBAR getrennt hat.
- Das StoreStoreEq-Axiom wird durch folgendes definiert:
- SOpia; SOpia = > SOpia ≤ SOPia
- Der Flush-Befehl synchronisiert die Befehlsabrufe des die Flush-Operation ausgebenden Prozessors mit den Lade-, Speichere- und unteilbaren Lade-Speichere-Operationen dieses Prozessors und zwingt die Befehlsabrufe sämtlicher anderen Prozessoren, irgendwelche von dem Flush-Ziel vor dem Flush ausgeführten Speichere-Operationen zu beobachten.
- Die Semantik der Flush-Operationen wird durch drei Axiome beschrieben, IFetchValue, FlushTermination und IFetchlFetch. Bei dem IFetchValue-Axiom wird das Symbol "< K> " verwendet, um eine beliebige Sequenz von K oder mehr Befehlen zu bezeichnen.
- Das IFetchValue-Axiom besagt, daß der Wert eines Befehlsabrufs derjenige Wert ist, der durch die jüngste (S; F)- Sequenz zu diesem Speicherplatz geschrieben wurde. Zwei Terme werden kombiniert, um die jüngste derartige Sequenz zu definieren. Der erste Term entspricht den Sequenzen von anderen Prozessoren, während der zweite Term den Sequenzen durch den Prozessor entspricht, der das Laden ausgegeben hat. Man beachte, daß bei dem ersten Satz von Sequenzen das Speichern und das Flush von verschiedenen Prozessoren ausgegeben werden können. Man beachte außerdem, daß bei dem zweiten Satz von Sequenzen dem Flush einige beliebige Befehle vor dem Befehlsabruf zu dem Ziel des Flushs folgen müssen.
- Das IFetchValue-Axiom wird durch folgendes definiert:
- Das FlushTermination-Axiom besagt, daß eine von einem Prozessor ausgeführte S; F-Sequenz schließlich von den Befehlsabrufen sämtlicher Prozessoren beobachtet wird.
- Das FlushTermination-Axiom wird definiert durch folgendes:
- Das IFetchIFetch-Axiom besagt, daß zwei Befehlsabrufe, die von einem Prozessor ausgegeben werden, in der gleichen Reihenfolge in der partiellen Reihenfolge (≤) erscheinen. Das IFetchlFetch-Axiom wird durch folgendes definiert:
- IFia; IFib => IFia ≤ IFib
- Während die vorliegende Erfindung in Verbindung mit bevorzugten Ausführungsbeispielen und Axiomen beschrieben worden ist, ist es klar, daß zahlreiche Alternativen, Modifikationen, Variationen und Verwendungen Fachleuten angesichts der vorstehenden Beschreibung klar werden.
Claims (17)
1. In einem Computersystem mit wenigstens einem
Prozessor (104, 106, 108) und Speichermitteln (109), bei dem jeder
Prozessor (104, 106, 108) einen Speicherpuffer aufweist,
wobei das Computersystem Speicheroperationen für die
Speichermittel (109) erzeugt, die Lade- und
Speichere-Operationen mit einer Speicheradresse umfassen, wobei die
Speichere-Operationen ferner Daten enthalten, ein Verfahren zum
Durchführen von durch einen Prozessor (104, 106, 108)
ausgegebenen Speicheroperationen, umfassend die Schritte:
Speichern jeder durch einen Prozessor (104, 106, 108)
ausgegebenen Speichere-Operation in einem zu dem ausgebenden
Prozessor (104, 106, 108) gehörenden Speicherpuffermittel
(1102);
Durchsuchen des zu einem eine Lade-Operation ausgebenden
Prozessor (104, 106, 108) gehörenden Speicherpuffermittels,
um festzustellen, ob das Speicherpuffermittel (1102) eine
Speichere-Operation enthält, die die gleiche Speicheradresse
wie die ausgegebene Lade-Operation aufweist;
Zurückgeben der jüngst von einer Speichere-Operation in
dem Speicherpuffermittel (1102) gespeicherten Daten, wenn
die Speichere-Operation die gleiche Speicheradresse aufweist
wie die ausgegebene Lade-Operation;
Übertragen der Lade-Operation an das Speichermittel
(109) zur Ausführung, wenn keine gespeicherte Speichere-
Operation die gleiche Speicheradresse aufweist wie die
ausgegebene Lade-Operation;
Verhindern, daß der die Lade-Operation ausgebende
Prozessor (104, 106, 108) weitere Speicheroperationen ausgibt,
bis die Speichermittel (109) Daten für die ausgegebene Lade-
Operation zurückgeben;
Ausgeben von STBAR-Operationen, indem eine
STBAR-Operation in das zugehörige Speicherpuffermittel (1102) versetzt
wird, um Speichere-Operationen von in dem
Speicherpuffermittel (1102) enthaltenen Speichere-Operationen derart zu
trennen, daß sämtliche Speichere-Operationen, die vor einer
STBAR-Operationen ausgegeben wurden, die Ausführung in dem
Speichermittel (109) vor sämtlichen nach der STBAR-Operation
ausgegebenen Speichere-Operationen abschließen müssen;
Ausführen der in den Speicherpuffermitteln (1102)
gespeicherten Speichere-Operationen in der Reihenfolge, in
der sie von dem Prozessor ausgegeben wurden, nur dann, wenn
diese Speichere-Operationen an den gleichen Speicherplatz
gerichtet sind; und
Übertragen der Speichere-Operationen aus dem
Speicherpuffermittel (1102) an das Speichermittel zur Ausführung
derselben derart, daß dann, wenn die STBAR-Operation in dem
Speicherpuffermittel angetroffen wird, eine nächste
nachfolgende Speichere-Operation in dem Speicherpuffermittel nicht
zu dem Speichermittel (109) übertragen wird, bis die
Speicheroperationen vor der STBAR-Operation abgeschlossen sind.
2. Das Verfahren zum Ausführen von Speicheroperationen
aus wenigstens einem Prozessor (104, 106, 108) nach Anspruch
1, wobei die Speicheroperationen ferner eine Einzel(atomic)-
Lade-Speichere-Operation umfassen, wobei die Einzel-Lade-
Speichere-Operation eine Lade-Operation umfaßt, die von
einer Speichere-Operation gefolgt wird, wobei die Speichere-
Operation von einem durch die Lade-Operation
wiedergewonnenen Wert abhängig ist, wobei das Verfahren die Schritte
umfaßt:
Speichern der Einzel-Lade-Speichere-Operation in den
Speicherpuffermitteln (1102) des die Einzel-Lade-Speichere-
Operation ausgebenden Prozessors;
Übertragen der Einzel-Lade-Speichere-Operation an die
Speichermittel (109) zur Ausführung; und
Verhindern, daß der die Einzel-Lade-Speichere-Operation
ausgebende Prozessor (104, 106, 108) weitere
Speicheroperationen ausgibt, bis die Speichermittel (109) Daten für die
ausgegebene Einzel-Lade-Speichere-Operation zurückgeben.
3. Das Verfahren zum Ausführen von Speicheroperationen
aus wenigstens einem Prozessor (104, 106, 108) nach Anspruch
1, wobei jeder Prozessor (104, 106, 108) einen internen
Cache (1104) zum Speichern von Befehlen und Daten des
jeweils zugehörigen Prozessors aufweist, wobei das Verfahren
ferner die Schritte umfaßt:
Durchsuchen eines internen Cache (1104) für einen
zugehörigen, eine Speichere-Operation ausgebenden Prozessor
(104, 106, 108), um festzustellen, ob die angeforderte
Speicheradresse in der Speichere-Operation sich in dem internen
Cache (1104) aufhält, wenn der Prozessor (104, 106, 108)
eine Speichere-Operation ausgibt;
Aktualisieren der in dem internen Cache (1104)
enthaltenen Daten, die der gleichen Speicheradresse wie die
Speichere-Operation entsprechen, wenn eine Speicheradresse einer
ausgegebenen Speicher-Operation sich in dem internen Cache
(1104) aufhält;
Durchsuchen eines internen Cache (1104) eines eine Lade-
Operation ausgebenden zugehörigen Prozessors (104, 106,
108), um festzustellen, ob sich eine äquivalente
Speicheradresse in dem internen Cache (1104) aufhält, wenn der
Prozessor (104, 106, 108) eine Lade-Operation ausgibt; und
Lesen der Daten des zugehörigen Speicherplatzes in dem
internen Cache (1104), wenn sich eine Speicheradresse einer
ausgegebenen Lade-Operation in dem internen Cache (1104)
aufhält.
4. Das Verfahren zum Ausführen von Speicheroperationen
aus wenigstens einem Prozessor (104, 106, 108) nach Anspruch
1, wobei die Speichermittel (109) einen Hauptspeicher (109)
und, für jeden Prozessor (104, 106, 108), einen externen
Cache (103, 105, 107) zum Speichern von Befehlen und Daten
für den jeweils zugehörigen Prozessor (104, 106, 108)
umfassen, wobei das Ausführen der Lade-Operation in den
Speichermitteln (109) die Schritte umfaßt:
Empfangen einer Lade-Operation in dem externen Cache
(103, 105, 107) aus einem Prozessor (104, 106, 108) und
Feststellen, ob die Lade-Operation innerhalb des externen
Cache (103, 105, 107) ausführbar ist, wenn der externe Cache
(103, 105, 107) eine in der Lade-Operation enthaltene
Speicheradresse aufweist;
Übermitteln von an der Speicheradresse vorhandenen Daten
aus dem externen Cache an den Prozessor (104, 106, 108),
wenn der externe Cache (103, 105, 107) eine Speicheradresse
aufweist, die in der Lade-Operation enthalten ist;
Ausführen einer Lies-Block-Transaktion zu dem
Hauptspeicher (108), wenn eine aus dem Prozessor (104, 106, 108)
empfangene Lade-Operation nicht innerhalb des externen Cache
(103, 105, 107) ausführbar ist, wobei die
Lies-Block-Transaktion Daten aus dem Hauptspeicher (109) zu dem externen
Cache (103, 105, 107) übermittelt;
Ausführen einer Spüle-Block-Transaktion (FlushBlock
transaction) zu dem Hauptspeicher (109), sofern dies
erforderlich ist;
Aktualisieren des externen Cache (103, 105, 107) mit den
aus dem Hauptspeicher (109) nach der Lies-Block-Transaktion
übermittelten Daten; und
Übermitteln der aus dem Hauptspeicher (109)
übermittelten Daten an dem Prozessor (104, 106, 108).
5. Das Verfahren zum Ausführen von Speicheroperationen
aus wenigstens einem Prozessor (104, 106, 108) nach Anspruch
1, wobei die Speichermittel (109) einen Hauptspeicher (109)
und, für jeden Prozessor (104, 106, 108), einen externen
Cache (103, 105, 107) zum Speichern von Befehlen und Daten
für den jeweils zugehörigen Prozessor (104, 106, 108)
umfassen, wobei das Ausführen der Speichere-Operation im
Hauptspeicher (109) die Schritte umfaßt:
Empfangen einer Speichere-Operation in dem externen
Cache (103, 105, 107) aus einem Prozessor (104, 106, 108)
und Feststellen, ob die Speichere-Operation innerhalb des
externen Cache (103, 105, 107) ausführbar ist, wenn der
externe Cache (103, 105, 107) eine in der
Speichere-Operation enthaltene Speicheradresse aufweist;
Speichern von der Speichere-Operation entsprechenden
Daten an der Speicheradresse in dem externen Cache (103,
105, 107), wenn der externe Cache (103, 105, 107) eine in
der Speichere-Operation enthaltene Speicheradresse aufweist;
Bestimmen, ob die Speicheradresse in dem externen Cache
(103, 105, 107) von einem anderen Prozessor (104, 106, 108)
geteilt wird, wenn der externe Cache (103, 105, 107) eine in
der Speichere-Operation enthaltene Speicheradresse aufweist;
Ausführen einer Schreibe-Geteilt-Transaktion
(WriteShared transaction) an den Hauptspeicher (109), wenn
die Speicheradresse von einem anderen Prozessor (104, 106,
108) geteilt ist;
Ausführen einer Lies-Block-Transaktion an den
Hauptspeicher (109), wenn die aus dem Prozessor (104, 106, 108)
empfangene Speichere-Operation nicht innerhalb des externen
Cache (103, 105, 107) ausführbar ist, wobei die Lies-Block-
Transaktion das Übermitteln von in dem Hauptspeicher (109)
an der in der Speichere-Operation enthaltenen
Speicheradresse angeordneten Daten aus dem Hauptspeicher (109) zu dem
externen Cache (103, 105, 107), das Speichern der in dem
externen Cache (103, 105, 107) übermittelten Daten und das
Aktualisieren der Daten aus der Speichere-Operation in dem
externen Cache (103, 105, 107) an der in der Speichere-
Operation enthaltenen Speicheradresse umfaßt; und
Ausführen einer Spüle-Block-Transaktion an den
Hauptspeicher (109), wobei die Spüle-Block-Transaktion das
Schreiben von Daten aus dem externen Cache (103, 105, 107)
an den Hauptspeicher (109) umfaßt, wenn die in dem externen
Cache gespeicherten Daten in Erwiderung der
Speichere-Operätion an einen Speicherplatz in dem externen Cache (103, 105,
107) geschrieben werden, der von Daten belegt ist, die der
externe Cache (103, 105, 107) besitzt.
6. In einem Computersystem mit wenigstens einem
Prozessor (104, 106, 108) und Speichermitteln (109), bei dem jeder
Processor (104, 106, 108) einem Speicherpuffer (1102)
aufweist, wobei das Computersystem Speicheroperationen für die
Speichermittel (109) erzeugt, die eine Speicheradresse
enthaltende Lade- und Speichere-Operationen umfassen, wobei die
Speichere-Befehle ferner Daten enthalten, ein Verfahren zum
Ausführen von durch einen Prozessor (104, 106, 108)
ausgegebenen Speicheroperationen, umfassend die Schritte:
Speichern jeder durch einen Prozessor (104, 106, 108)
ausgegebenen Speichere-Operation in einem zugehörigen
Speicherpuffermittel (1102) des ausgebenden Prozessors (104,
106, 108), wobei die Speichere-Operationen in der
Reihenfolge gespeichert werden, in der sie von dem Prozessor (104,
106, 108) ausgegeben wurden;
Durchsuchen eines Speicherpuffermittels (1102), das dem
die Lade-Operation ausgebenden Prozessor (104, 106, 108)
entspricht, um festzustellen, ob die Speicherpuffermittel
(1102) eine Speichere-Operation enthalten, die die gleiche
Speicheradresse wie die ausgegebene Lade-Operation aüfweist;
Zurückgeben der von einer Speichere-Operation jüngst in
dem Speicherpuffermittel (1102) gespeicherten Daten, wenn
die Speichere-Operation die gleiche Speicheradresse
aufweist, wie die ausgegebene Lade-Operation;
Übertragen der Lade-Operation an das Speichermittel
(109) zur Ausführung, wenn keine gespeicherte Speichere-
Operation die gleiche Speicheradresse wie die ausgegebene
Lade-Operation aufweist;
Hindern des die Lade-Operation ausgebenden Prozessors
(104, 106, 108) am Ausgeben zusätzlicher
Speicheroperationen, bis das Speichermittel (109) Daten für die ausgegebene
Lade-Operation zurückgibt; und
Übertragen der Speichere-Befehle aus den
Speicherpuffermitteln (1102) an das Speichermittel (109) zur Ausführung
derselben in der Reihenfolge, in der sie in dem
Speicherpuffermittel (1102) gespeichert sind.
7. Das Verfahren zum Ausführen von Speicheroperationen
aus wenigstens einem Prozessor (104, 106, 108) nach Anspruch
6, wobei die Speicheroperationen ferner eine Einzel-Lade-
Speichere-Operation umfassen, wobei die Einzel-Lade-
Speichere-Operation eine von einer Speichere-Operation
gefolgte Lade-Operation aufweist, wobei die
Speichere-Operation von einem durch die Lade-Operation wiedergewonnenen
Wert abhängig ist, wobei das Verfahren die Schritte umfaßt:
Speichern der Einzel-Lade-Speichere-Operation in dem
Speicherpuffermittel (1102) des die Einzel-Lade-Speichere-
Operation ausgebenden Prozessors;
Sortieren der Einzel-Lade-Speichere-Operationen in dem
Speicherpuffermittel (1102) in der Reihenfolge, in der die
Lade- und Lade-Speichere-Operationen durch den Prozessor
(104, 106, 108) ausgegeben wurden;
Übertragen der Einzel-Lade-Speichere-Operation zu dem
Speichermittel zur Ausführung; und
Hindern des die Einzel-Lade-Speichere-Operation
ausgebenden Prozessors am Ausgeben weiterer Speicheroperationen,
bis die Speichermittel (109) die Daten für die ausgegebene
Einzel-Lade-Speichere-Operation zurückgeben.
8. Das Verfahren zum Ausführen von Speicheroperationen
aus wenigstens einem Prozessor nach Anspruch 6, wobei jeder
Prozessor einen internen Cache (1104) zum Speichern von
Befehlen und Daten des jeweils zugehörigen Prozessors (104,
106, 108) aufweist, wobei das Verfahren ferner die Schritte
umfaßt:
Durchsuchen eines internen Cache (1104) für einen eine
Speichere-Operation ausgebenden zugehörigen Prozessor.(104,
106, 108), um festzustellen, ob die angeforderte
Speicheradresse in der Speichere-Operation sich in dem internen
Cache (1104) aufhält, wenn der Prozessor (104, 106, 108)
eine Speichere-Operation ausgibt;
Aktualisieren von Daten in dem internen Cache (1104),
die der äquivalenten Speicheradresse der Speichere-Operation
entsprechen, wenn eine Speicheradresse einer ausgegebenen
Speichere-Operation sich in dem internen Cache aufhält;
Durchsuchen eines internen Cache (1104) eines eine Lade-
Operation ausgebenden zugehörigen Prozessors (104, 106,
108), um festzustellen, ob sich eine äquivalente
Speicheradresse in dem internen Cache (1104) aufhält, wenn der
Prozessor (104, 106, 108) eine Lade-Operation ausgibt; und
Lesen von Daten des zugehörigen Speicherplatzes in dem
internen Cache (1104), wenn sich eine Speicheradresse einer
ausgegebenen Lade-Operation in dem internen Cache (1104)
aufhält.
9. Das Verfahren zum Ausführen von
Speichere-Operationen aus wenigstens einem Prozessor (104, 106, 108) nach
Anspruch 6, wobei die Speichermittel (109) einen
Hauptspeicher (109) und, für jeden Prozessor (104, 106, 108), einen
externen Cache (103, 105, 107) zum Speichern von Befehlen
und Daten für den jeweils zugehörigen Prozessor (104, 106,
108) umfassen, wobei das Ausführen der Lade-Operation in den
Speichermitteln (109) die Schritte umfaßt:
Empfangen einer Lade-Operation in dem externen Cache
(103, 105, 107) aus einem Prozessor (104, 106, 108) und
Feststellen, ob die Lade-Operation innerhalb des externen
Cache (103, 105, 107) ausführbar ist, wenn der externe Cache
eine Speicheradresse enthält, die in der Lade-Operation
enthalten ist;
Übermitteln von Daten an der Speicheradresse aus dem
externen Cache (103, 105, 107) an den Prozessor (104, 106,
108), wenn der externe Cache (103, 105, 107) eine in der
Lade-Operation enthaltene Speicheradresse aufweist;
Ausführen einer Lies-Block-Transaktion an den
Hauptspeicher (109), wenn eine aus dem Prozessor (104, 106, 108)
empfangene Lade-Operation nicht innerhalb des externen Cache
(103, 105, 107) ausführbar ist, wobei die
Lies-Block-Transaktion Daten aus dem Hauptspeicher (109) an den externen
Cache (103, 105, 107) übermittelt;
Ausführen einer Spüle-Block-Transaktion zum
Hauptspeicher (109), wenn dies erforderlich ist;
Aktualisieren des externen Cache (103, 105, 107) mit den
aus dem Hauptspeicher nach der Lies-Block-Transaktion
übermittelten Daten; und
Übermitteln der aus dem Hauptspeicher (109)
übermittelten Daten an den Prozessor (104, 106, 108).
10. Das Verfahren zum Ausführen von
Speichere-Operationen aus wenigstens einem Prozessor (104, 106, 108) nach
Anspruch 6, wobei die Speichermittel (109) einen
Hauptspeicher (109) und, für jeden Prozessor (104, 106, 108), einen
externen Cache (103, 105, 107) zum Speichern von Befehlen
und Daten für den jeweils zugehörigen Prozessor (104, 106,
108) umfassen, wobei die Ausführung der Speichere-Operation
in dem Speichermittel (109) die Schritte umfaßt:
Empfangen einer Speichere-Operation in dem externen
Cache (103, 105, 107) aus einem Prozessor (104, 106, 108)
und Feststellen, ob die Speichere-Operation innerhalb des
externen Cache (103, 105, 107) ausführbar ist, wenn der
externe Cache (103, 105, 107) eine in der
Speichere-Operation enthaltene Speicheradresse aufweist;
Speichern von der Speichere-Operation entsprechenden
Daten an der Speicheradresse in dem externen Cache (103,
105, 107), wenn der externe Cache (103, 105, 107) eine in
der Speichere-Operation enthaltene Speicheradresse aufweist;
Bestimmen, ob die Speicheradresse in dem externen Cache
(103, 105, 107) von einem weiteren Prozessor (104, 106, 108)
geteilt wird, wenn der externe Cache eine in der Speichere-
Operation enthaltene Speicheradresse aufweist;
Ausführen einer Schreibe-Geteilt-Transaktion zu dem
Hauptspeicher (109), wenn die Speicheradresse von einem
weiteren Prozessor (104, 106, 108) geteilt wird;
Ausführen einer Lies-Block-Transaktion zu dem
Hauptspeicher (109), wenn die aus dem Prozessor (104, 106, 108)
empfangene Speichere-Operation nicht innerhalb des externen
Cache (103, 105, 107) ausführbar ist, wobei die Lies-Block-
Transaktion das Übermitteln von in dem Hauptspeicher (109)
an der in der Speichere-Operation enthaltenen
Speicheradres
se angeordneten Daten aus dem Hauptspeicher (109) zu dem
externen Cache (103, 105, 107), das Speichern der
übermittelten Daten in dem externen Cache (103, 105, 107) und das
Aktualisieren der Daten aus der Speichere-Operation in dem
externen Cache an der in der Speichere-Operation enthaltenen
Speicheradresse umfaßt; und
Ausführen einer Spüle-Block-Transaktion zu dem
Hauptspeicher (109), wobei die Spüle-Block-Transaktion das
Schreiben von Daten aus dem externen Cache (103, 105, 107)
zu dem Hauptspeicher (109) umfaßt, wenn die in dem externen
Cache (103, 105, 107) in Erwiderung der Speichere-Operation
gespeicherten Daten zu einem Speicherplatz in dem externen
Cache (103, 105, 107) geschrieben werden, der von Daten
belegt ist, die der externe Cache (103, 105, 107) besitzt.
11. In einem Computersystem, das wenigstens einen
Prozessor (104, 106, 108) und Speichermittel (109) aufweist,
wobei jeder Prozessor (104, 106, 108) Speichere-Operationen
für die Speichermittel (109) erzeugt, die Lade- und
Speichere-Operationen, die eine Speicheradresse enthalten,
umfassen, wobei die Speichere-Operationen ferner Daten
enthalten, eine Einrichtung zum Ausführen von durch einen
Prozessor (104, 106, 108) ausgegebenen Speichere-Operationen,
aufweisend:
mit jedem Prozessor (104, 106, 108) gekoppelte
Speicherpuffermittel (1102) zum Speichern jeder durch einen
Prozessor (104, 106, 108) ausgegebenen Speichere-Operation;
mit den Speicherpuffermitteln (1102) gekoppelte
Vergleichsmittel (1100), die einem eine Lade-Operation
ausgebenden Prozessor (104, 106, 108) entsprechende
Speicherpuffermittel (1102) durchsuchen, um festzustellen, ob die
Speicherpuffermittel (1102) eine Speichere-Operation enthalten,
die die gleiche Speicheradresse wie die ausgegebene Lade-
Operation aufweist, wobei die Vergleichsmittel (1100) die
jüngst in dem Speicherpuffermittel (1102) von einer
Speichere-Operation gespeicherten Daten zurückgeben, wenn die
Speichere-Operation die gleiche Speicheradresse wie die
ausgegebene Lade-Operation aufweist;
Wartemittel (103) zum Hindern des die Lade-Operation
ausgebenden Prozessors (104, 106, 108) am Ausgeben
zusätzlicher Speichere-Operationen, bis die Speichermittel (109)
Daten für die ausgegebene Lade-Operation zurückgeben;
mit den Speicherpuffermitteln (1102) gekoppelte
Teilordnungsmittel (1100) zum Ordnen von Speichere-Operationen in
den Speicherpuffermitteln (1102), wobei die Ordnungsmittel
(1100) STBAR-Operationen ausgeben, indem eine
STBAR-Operation in dem zugehörigen Speicherpuffermittel (1102) so
angeordnet wird, daß sie die in dem Speicherpuffermittel
enthaltenen Speichere-Operationen so trennt, daß sämtliche vor
einer STBAR-Operation ausgegebenen Speichere-Operationen die
Ausführung in dem Speichermittel (109) vor sämtlichen nach
der STBAR-Operation ausgegebenen Speichere-Uperartionen
abgeschlossen haben müssen, wobei die Teilordnungsmittel
(1100) die Ausführung von dem in den Speicherpuffermittel
(1102) gespeicherten Speichere-Operationen nur dann in der
Reihenfolge gestatten, in der sie von dem Prozessor (104,
106, 108) ausgegeben wurden, wenn diese
Speichere-Operationen an den gleichen Speicherplatz gerichtet sind; und
mit den Vergleichsmitteln (1100) und den
Teilordnungsmitteln (1100) gekoppelte Übertragungsmittel (1100) zum
Übertragen der Lade- und Speichere-Operationen an die
Speichermittel (109), wobei die Übertragungsmittel (1100) die
Lade-Operation zu den Speichermitteln (109) zur Ausführung
übertragen, wenn keine gespeicherte Speichere-Operation die
gleiche Speicheradresse wie die ausgegebene Lade-Operation
aufweist, und zum Übertragen der Speichere-Operationen aus
den Speicherpuffermitteln (1102) zu den Speichermitteln
(109) zu ihrer Ausführung derart, daß dann, wenn die STBAR-
Operation in den Speicherpuffermitteln (1102) angetroffen
wird, eine nächste nachfolgende Speichere-Operation in den
Speicherpuffermitteln (1102) nicht zu den Speichermitteln
(109) übertragen wird, bis Speichere-Operationen vor der
STBAR-Operation abgeschlossen sind.
12. Die Einrichtung zum Ausführen von
Speichere-Operationen aus wenigstens einem Prozessor (104, 106, 108) nach
Anspruch 11, wobei:
die Speichere-Operationen ferner eine Einzel-Lade-
Speichere-Operation umfassen, wobei die Einzel-Lade-
Speichere-Operation eine von einer Speichere-Operation
gefolgte Lade-Operation aufweist, wobei die
Speicher-Operation von einem durch die Lade-Operation wiedergewonnenen
Wert abhängig ist;
wobei das Speicherpuffermittel (1102) die Einzel-Lade-
Speichere-Operation in dem Speicherpuffermittel (1102) des
die Einzel-Lade-Speichere-Operation ausgebenden Prozessors
(104, 106, 108) speichert;
wobei die Teilordnungsmittel (1100) nur dann die Einzel-
Lade-Speichere-Operationen, die in den Speicherpuffermitteln
(1102) gespeichert sind, in der Ausgabereihenfolge ordnen,
wenn Einzel-Lade-Speichere-Operationen die gleichen Adressen
aufweisen;
wobei die Übertragungsmittel (110) die Einzel-Lade-
Speichere-Operation an die Speichermittel (109) zur
Ausführung übertragen; und
wobei die Wartemittel (103) dem die Einzel-Lade-
Speichere-Operation ausgebenden Prozessor daran hindern,
zusätzliche Speichere-Operationen auszugeben, bis die
Speichermittel (109) Daten für die ausgegebene Einzel-Lade-
Speichere-Operation zurückgeben.
13. Die Einrichtung zum Ausführen von
Speichere-Operationen aus wenigstens einem Prozessor (104, 106, 108) nach
Anspruch 11, ferner aufweisend:
mit jedem Prozessor (104, 106, 108) gekoppelte interne
Cachemittel, die Befehle und Daten für den jeweils
zugehörigen Prozessor (104, 106, 108) enthalten;
mit den internen Cachmitteln gekoppelte
Cachevergleichsmittel zum Durchsuchen eines internen Cache (1104) für einen
eine Speichere-Operation ausgebenden zugehörigen Prozessor
(104, 106, 108), um festzustellen, ob die angeforderte
Speicheradresse in der Speichere-Operation sich in dem internen
Cache (1104) aufhält, wenn der Prozessor eine Speichere-
Operation ausgibt, und zum Durchsuchen eines internen Cache
(1104) für einen eine Lade-Operation ausgebenden zugehörigen
Prozessor (104, 106, 108), um festzustellen, ob sich die
gleiche Speicheradresse in dem internen Cache (1104)
aufhält, wenn der Prozessor (104, 106, 108) eine Lade-Operation
ausgibt; und
mit den internen Cachemitteln gekoppelte
Cachezugriffsmittel zum Aktualisieren von der gleichen Speicheradresse
der Speichere-Operation entsprechenden Daten in dem internen
Cache (1104), wenn sich eine Speicheradresse einer
ausgegebenen Speichere-Operation in dem internen Cache (1104)
aufhält, und zum Lesen von Daten des zugehörigen
Speicherplatzes in dem internen Cache (1104), wenn sich eine
Speicheradresse einer ausgegebenen Lade-Operation in dem internen
Cache (1104) aufhält.
14. In einem Computersystem mit wenigstens einem
Prozessor (104, 106, 108) und Speichermitteln (109), wobei
jeder Prozessor (104, 106, 108) Speichere-Operationen für
die Speichermittel (109) erzeugt, die eine Speicheradresse
enthaltende Lade- und Speichere-Operation umfassen, wobei
die Speichere-Operationen ferner Daten enthalten, eine
Einrichtung zum Ausführen von durch einen Prozessor (104, 106,
108) ausgegebenen Speichere-Operationen, aufweisend:
mit jedem Prozessor (104, 106, 108) gekoppelte
Speicherpuffermittel (1102) zum Speichern jeder durch einen
Prozessor (104, 106, 108) ausgegebenen Speichere-Operation;
mit den Speicherpuffermitteln (1102) gekoppelte
Vergleichsmittel (1100) zum Durchsuchen derjenigen
Speicherpuffermittel (1102), die dem die Lade-Operation ausgebenden
Prozessor (104, 106, 108) entsprechen, um festzustellen, ob
die Speicherpuffermittel (1102) eine Speichere-Operation
enthalten, die die gleiche Speicheradresse wie die
ausgegebene Lade-Operation aufweist, wobei die Vergleichsmittel
(1100) jüngst in den Speicherpuffermitteln (1102) aus einer
Speichere-Operation gespeicherte Daten zurückgeben, wenn die
Speichere-Operation die gleiche Speicheradresse aufweist wie
die ausgegebene Lade-Operation;
Wartemittel (103) zum Hindern des die Lade-Operation
ausgebenden Prozessors (104, 106, 108) am Ausgeben weiterer
Speichere-Operationen, bis die Speichermittel (109) Daten
für die ausgegebene Lade-Operation zurückgeben;
mit den Speicherpuffermitteln (1102) gekoppelte
Gesamtordnungsmittel (1100) zum Ordnen von Speichere-Operationen
darin in derjenigen Reihenfolge, in der sie von dem
Prozessor (104, 106, 108) ausgegeben wurden; und
mit den Vergleichsmitteln (1100) und den
Gesamtordnungsmitteln (1100) gekoppelte Übertragungsmittel (110) zum
Übertragen der Lade- und Speichere-Operationen an die
Speichermittel (109), wobei die Übertragungsmittel (1100) die Lade-
Operation an die Speichermittel (109) zur Ausführung
übertragen, wenn keine gespeicherten Speichere-Operationen die
gleiche Speicheradresse wie die ausgegebene Lade-Operation
aufweist, und die Speicher-Befehle aus den
Speicherpuffermitteln (1102) zu den Speichermitteln (109) zu ihrer
Ausführung in der Reihenfolge, in der sie in den
Speicherpuffermitteln (1102) gespeichert sind, übertragen.
15. Die Einrichtung zum Ausführen von Speichere-
Operationen aus wenigstens einem Prozessor (104, 106, 108)
nach Anspruch 14, wobei:
die Speichere-Operationen ferner eine Einzel-Lade-
Speichere-Operation umfassen, wobei die Einzel-Lade-
Speichere-Operation eine von einer Speichere-Operation
gefolgte Lade-Operation umfaßt, wobei die
Speichere-Operation von einem von der Lade-Operation wiedergewonnenen Wert
abhängig ist;
die Speicherpuffermittel (1102) die Einzel-Lade-
Speichere-Operation in den Speicherpuffermitteln (1102) des
die Einzel-Lade-Speichere-Operation ausgebenden Prozessors
(104, 106, 108) speichern;
die Gesamtordnungsmittel (1100) Einzel-Lade-Speichere-
Operationen in den Speichpuffermitteln (1102) in derjenigen
Reihenfolge anordnen, in der die Lade- und Lade-Speichere-
Operationen von dem Prozessor (104, 106, 108) ausgegeben
wurden;
die Übertragungsmittel (110) die Einzel-Lade-Speichere-
Operationen zu den Speichermitteln (109) zur Ausführung
übertragen; und
die Wartemittel (103) den die Einzel-Lade-Speichere-
Operationen ausgebenden Prozessor (104, 106, 108) am
Ausgeben weiterer Speicher-Operationen hindern, bis die
Speichermittel (109) Daten für die ausgegebene Einzel-Lade-
Speichere-Operation zurückgeben.
16. Die Einrichtung zum Ausführen von
Speichet-Operationen aus wenigstens einem Prozessor nach Anspruch 14,
wobei jeder Prozessor (104, 106, 108) einen internen Cache
zum Speichern von Befehlen und Daten für den jeweils
zugehörigen Prozessor aufweist, wobei das Verfahren ferner
aufweist:
mit jedem Prozessor (104, 106, 108) gekoppelte interne
Cachemittel, die Befehle und Daten für jeden zugehörigen
Prozessor (104, 106, 108) aufweisen;
mit den internen Cachemitteln gekoppelte
Cachevergleichsmittel zum Durchsuchen eines internen Cache (1104)
für einen eine Speichere-Operation ausgebenden zugehörigen
Prozessor (104, 106, 108), um festzustellen, ob die
angeforderte Speicheradresse in der Speichere-Operation sich in dem
internen Cache (1104) aufhält, wenn der Prozessor (104, 106,
108) eine Speichere-Operation ausgibt, und zum Durchsuchen
eines internen Cache (1107) für einen eine Lade-Operation
ausgebenden zugehörigen Prozessor (104, 106, 108), um
festzustellen, ob die angeforderte Speicheradresse sich in dem
internen Cache (1104) aufhält, wenn der Prozessor (104, 106,
108) eine Lade-Operation ausgibt; und
mit den internen Cachemitteln gekoppelte
Cachezugriffsmittel zum Aktualisieren von Daten in dem internen Cache
(1104), die der äquivalenten Speicheradresse der Speichere-
Operation entsprechen, wenn eine Speicheradresse einer
ausgegebenen Speichere-Operation sich in dem internen Cache
(1104) aufhält, und zum Lesen von Daten des zugehörigen
Speicherplatzes in dem internen Cache (1104), wenn eine
Speicheradresse einer ausgegebenen Lade-Operation sich in
dem internen Cache (1104) aufhält.
17. Die Einrichtung zum Ausführen von
Speichere-Operationen aus wenigstens einem Prozessor nach Anspruch 14,
wobei die Teilordnungsmittel (1100) einen First-In-First-
Out(FIFO)-Puffer aufweisen.
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US07/702,781 US5265233A (en) | 1991-05-17 | 1991-05-17 | Method and apparatus for providing total and partial store ordering for a memory in multi-processor system |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| DE69231197D1 DE69231197D1 (de) | 2000-08-03 |
| DE69231197T2 true DE69231197T2 (de) | 2001-03-15 |
Family
ID=24822571
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| DE69231197T Expired - Fee Related DE69231197T2 (de) | 1991-05-17 | 1992-04-21 | Verfahren und Vorrichtung für eine verbesserte Speicherarchitektur |
Country Status (5)
| Country | Link |
|---|---|
| US (1) | US5265233A (de) |
| EP (1) | EP0514024B1 (de) |
| JP (1) | JPH05233421A (de) |
| KR (1) | KR100243853B1 (de) |
| DE (1) | DE69231197T2 (de) |
Families Citing this family (30)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US5398325A (en) * | 1992-05-07 | 1995-03-14 | Sun Microsystems, Inc. | Methods and apparatus for improving cache consistency using a single copy of a cache tag memory in multiple processor computer systems |
| US5434993A (en) * | 1992-11-09 | 1995-07-18 | Sun Microsystems, Inc. | Methods and apparatus for creating a pending write-back controller for a cache controller on a packet switched memory bus employing dual directories |
| US6144930A (en) * | 1993-06-09 | 2000-11-07 | Compaq Computer Corporation | Method for providing a memory model of a memory device for use in simulation |
| US5506967A (en) * | 1993-06-15 | 1996-04-09 | Unisys Corporation | Storage queue with adjustable level thresholds for cache invalidation systems in cache oriented computer architectures |
| DE69423206T2 (de) * | 1994-04-28 | 2000-09-07 | Hewlett-Packard Co., Palo Alto | Rechnervorrichtung mit Mitteln zum Erzwingen der Ausführung von Befehlen in regelmässiger Folge |
| US5745732A (en) * | 1994-11-15 | 1998-04-28 | Cherukuri; Ravikrishna V. | Computer system including system controller with a write buffer and plural read buffers for decoupled busses |
| US5699538A (en) * | 1994-12-09 | 1997-12-16 | International Business Machines Corporation | Efficient firm consistency support mechanisms in an out-of-order execution superscaler multiprocessor |
| US6073211A (en) * | 1994-12-13 | 2000-06-06 | International Business Machines Corporation | Method and system for memory updates within a multiprocessor data processing system |
| US5692153A (en) * | 1995-03-16 | 1997-11-25 | International Business Machines Corporation | Method and system for verifying execution order within a multiprocessor data processing system |
| US5822553A (en) * | 1996-03-13 | 1998-10-13 | Diamond Multimedia Systems, Inc. | Multiple parallel digital data stream channel controller architecture |
| US5797043A (en) * | 1996-03-13 | 1998-08-18 | Diamond Multimedia Systems, Inc. | System for managing the transfer of data between FIFOs within pool memory and peripherals being programmable with identifications of the FIFOs |
| US5778244A (en) * | 1996-10-07 | 1998-07-07 | Timeplex, Inc. | Digital signal processing unit using digital signal processor array with recirculation |
| US6748493B1 (en) | 1998-11-30 | 2004-06-08 | International Business Machines Corporation | Method and apparatus for managing memory operations in a data processing system using a store buffer |
| US6678810B1 (en) | 1999-12-30 | 2004-01-13 | Intel Corporation | MFENCE and LFENCE micro-architectural implementation method and system |
| US7538772B1 (en) * | 2000-08-23 | 2009-05-26 | Nintendo Co., Ltd. | Graphics processing system with enhanced memory controller |
| US6678807B2 (en) * | 2000-12-21 | 2004-01-13 | Intel Corporation | System and method for multiple store buffer forwarding in a system with a restrictive memory model |
| JP4180569B2 (ja) * | 2003-01-27 | 2008-11-12 | 富士通株式会社 | 記憶制御装置、データキャッシュ制御装置、中央処理装置、記憶装置制御方法、データキャッシュ制御方法およびキャッシュ制御方法 |
| US20050210204A1 (en) * | 2003-01-27 | 2005-09-22 | Fujitsu Limited | Memory control device, data cache control device, central processing device, storage device control method, data cache control method, and cache control method |
| US7360035B2 (en) * | 2004-09-01 | 2008-04-15 | International Business Machines Corporation | Atomic read/write support in a multi-module memory configuration |
| US7606998B2 (en) * | 2004-09-10 | 2009-10-20 | Cavium Networks, Inc. | Store instruction ordering for multi-core processor |
| US7941585B2 (en) * | 2004-09-10 | 2011-05-10 | Cavium Networks, Inc. | Local scratchpad and data caching system |
| EP2159702B1 (de) * | 2007-06-20 | 2013-04-17 | Fujitsu Limited | Cache-steuereinrichtung und steuerverfahren |
| US8244987B2 (en) | 2008-12-04 | 2012-08-14 | Electronics And Telecommunications Research Institute | Memory access device including multiple processors |
| KR101635395B1 (ko) * | 2010-03-10 | 2016-07-01 | 삼성전자주식회사 | 멀티포트 데이터 캐시 장치 및 멀티포트 데이터 캐시 장치의 제어 방법 |
| US9052890B2 (en) | 2010-09-25 | 2015-06-09 | Intel Corporation | Execute at commit state update instructions, apparatus, methods, and systems |
| US8713259B2 (en) * | 2010-11-17 | 2014-04-29 | Advanced Micro Devices, Inc. | Method and apparatus for reacquiring lines in a cache |
| US9361103B2 (en) * | 2012-11-02 | 2016-06-07 | Advanced Micro Devices, Inc. | Store replay policy |
| JP6191172B2 (ja) * | 2013-03-12 | 2017-09-06 | 日本電気株式会社 | メモリコントローラ、プロセッサ、演算処理方法、及び、演算命令ライブラリ。 |
| US10345883B2 (en) | 2016-05-31 | 2019-07-09 | Taiwan Semiconductor Manufacturing Co., Ltd. | Power estimation |
| US11914511B2 (en) * | 2020-06-22 | 2024-02-27 | Apple Inc. | Decoupling atomicity from operation size |
Family Cites Families (10)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US4136386A (en) * | 1977-10-06 | 1979-01-23 | International Business Machines Corporation | Backing store access coordination in a multi-processor system |
| JPS621067A (ja) * | 1985-02-25 | 1987-01-07 | Hitachi Ltd | ベクトル処理装置 |
| JPH0731669B2 (ja) * | 1986-04-04 | 1995-04-10 | 株式会社日立製作所 | ベクトル・プロセツサ |
| US5023776A (en) * | 1988-02-22 | 1991-06-11 | International Business Machines Corp. | Store queue for a tightly coupled multiple processor configuration with two-level cache buffer storage |
| US5148536A (en) * | 1988-07-25 | 1992-09-15 | Digital Equipment Corporation | Pipeline having an integral cache which processes cache misses and loads data in parallel |
| US5043886A (en) * | 1988-09-16 | 1991-08-27 | Digital Equipment Corporation | Load/store with write-intent for write-back caches |
| US4905141A (en) * | 1988-10-25 | 1990-02-27 | International Business Machines Corporation | Partitioned cache memory with partition look-aside table (PLAT) for early partition assignment identification |
| US5201041A (en) * | 1988-12-29 | 1993-04-06 | International Business Machines Corporation | Cache bypass apparatus |
| US5202972A (en) * | 1988-12-29 | 1993-04-13 | International Business Machines Corporation | Store buffer apparatus in a multiprocessor system |
| US5185871A (en) * | 1989-12-26 | 1993-02-09 | International Business Machines Corporation | Coordination of out-of-sequence fetching between multiple processors using re-execution of instructions |
-
1991
- 1991-05-17 US US07/702,781 patent/US5265233A/en not_active Expired - Lifetime
-
1992
- 1992-04-21 DE DE69231197T patent/DE69231197T2/de not_active Expired - Fee Related
- 1992-04-21 EP EP92303551A patent/EP0514024B1/de not_active Expired - Lifetime
- 1992-05-11 KR KR1019920007921A patent/KR100243853B1/ko not_active Expired - Fee Related
- 1992-05-18 JP JP4149015A patent/JPH05233421A/ja active Pending
Also Published As
| Publication number | Publication date |
|---|---|
| KR100243853B1 (ko) | 2000-02-01 |
| EP0514024B1 (de) | 2000-06-28 |
| EP0514024A2 (de) | 1992-11-19 |
| DE69231197D1 (de) | 2000-08-03 |
| EP0514024A3 (de) | 1994-05-04 |
| KR920022101A (ko) | 1992-12-19 |
| US5265233A (en) | 1993-11-23 |
| JPH05233421A (ja) | 1993-09-10 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| DE69231197T2 (de) | Verfahren und Vorrichtung für eine verbesserte Speicherarchitektur | |
| DE68924306T2 (de) | Mehrprozessorrechneranordnungen mit gemeinsamem Speicher und privaten Cache-Speichern. | |
| DE69327387T2 (de) | An einen paketvermittelten Bus gekoppelte Nachschreibsteuerungsschaltung für eine Cachespeichersteuerungsschaltung | |
| DE68927172T2 (de) | Multiprozessorsystem mit cache-speichern | |
| DE68922326T2 (de) | Speicherwarteschlange für eine festgekoppelte Mehrprozessorenkonfiguration mit einem zweistufigen Cache-Pufferspeicher. | |
| DE68928513T2 (de) | Verfahren zur Vorverarbeitung mehrerer Befehle | |
| DE68929224T2 (de) | Pipeline, die einen Cachespeicher für Rechnerprozessoren enthält | |
| DE69323790T2 (de) | Verfahren und Vorrichtung für mehreren ausstehende Operationen in einem cachespeicherkohärenten Multiprozessorsystem | |
| DE68928677T2 (de) | Verfahren und digitaler Computer zur Vorverarbeitung mehrerer Befehle | |
| DE112007003801B3 (de) | Vorrichtung mit einer speichereinheit und einer logik zur bereitstellung eines effizienten mechanismus‘ für transaktionalspeicherausführungen in out-of-order-prozessoren | |
| DE3486161T2 (de) | Datenverarbeitungssystem mit Datenkohärenz. | |
| DE69327288T2 (de) | Verfahren und System zur Aufrechterhaltung der Adressenübersetzungspufferspeicher-Kohärenz eines Multiprozessorsystems | |
| DE68923490T2 (de) | Prüfpunkt-Wiederholungssystem. | |
| DE3587439T2 (de) | Gemeinsam benutzter Mehrprozessor-Pipeline-Cachespeicher. | |
| DE3751356T2 (de) | Informationsverarbeitungssystem. | |
| DE69715328T2 (de) | System und Verfahren zur Parallelisierung der Durchführung von Speichertransaktionen mittels mehreren Speichermodellen | |
| DE69514165T2 (de) | Mehrstufige Cache-Speicheranordnung | |
| DE10085373B4 (de) | Verfahren zum Flushen von Cache-Zeilen | |
| DE69127726T2 (de) | Kombinierte Warteschlange für Entwertungen und Rücklaufdaten in einem Multiprozessorsystem | |
| DE69506623T2 (de) | Datenprozessor mit einer Ausführungseinheit zur Durchführung von Ladebefehlen und Verfahren zu seinem Betrieb | |
| DE3856451T2 (de) | Multiprozessor-Digitaldatenverarbeitungssystem | |
| DE69729917T2 (de) | Cachespeicherräumungsvorrichtung und hiermit versehenes Rechnersystem | |
| DE4218003C2 (de) | Cache-Steuereinrichtung für ein sekundäres Cache-Speichersystem | |
| DE3689042T2 (de) | Gerät zur Pufferung von Schreibanforderungen. | |
| DE69133302T2 (de) | Registerabbildung in einem einzigen Taktzyklus |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| 8364 | No opposition during term of opposition | ||
| 8339 | Ceased/non-payment of the annual fee |