-
Die
vorliegende Erfindung betrifft das Speicherordnen und insbesondere
das Ausführen
von Speicheroperationen gemäß einem
Speicherordnungsmodell.
-
Ein
Ausführen
einer Speicherinstruktion muß gemäß einem
Speicherordnungsmodell der Zielbefehlssatzarchitektur (ISA) agieren.
Als Referenz weisen die beiden Haupt-ISAs der Intel Corporation,
Intel®-Architektur
(IA-32 oder x86) und Intels ITANIUM®-Prozessorfamilie
(IPF), sehr unterschiedliche Speicherordnungsmodelle auf. Bei der
IA-32 müssen Lade-
und Speicheroperationen sichtbar in Programmordnung sein. Bei der
IPF-Architektur müssen
sie es im Allgemeinen nicht, es gibt jedoch Spezialinstruktionen,
durch welche ein Programmierer ein Ordnen, falls nötig, erzwingen
kann (z.B. Ladeannahme (hierin als „Ladeannahme" bezeichnet), Speicherfreigabe
(hierin als „Speicherfreigabe" bezeichnet), Speicherschranke
und Semaphoren).
-
Eine
einfache Strategie, jedoch mit geringem Leistungsvermögen, um
Speicheroperationen in Ordnung zu halten, ist es, keiner Speicherinstruktion
zu gestatten, auf eine Speicherhierarchie zuzugreifen, bis eine
vorhergehende Speicherinstruktion ihre Daten (für einen Ladevorgang) erhalten
hat oder eine Bestätigung
der Eigentümerschaft über ein
Cachekohärenzprotokoll
(für einen
Speichervorgang) bekommen hat.
-
Software-Anwendungen
hängen
jedoch zunehmend von geordneten Speicheroperationen ab, das bedeutet
von Speicheroperationen, welche ein Ordnen anderer Speicheroperationen
und von ihnen selbst einführen.
Beim Ausführen
paralleler Threads in einem Chip-Multiprozessor (CMP) werden geordnete
Speicherinstruktionen in Synchronisation und Kommunikation zwischen
unterschiedlichen Software-Threads oder Prozessen einer einzelnen
Anwendung verwendet. Ein Ausführen
von Transaktionen und verwaltete Laufzeitumgebungen hängen von
geordneten Speicherinstruktionen ab, um wirksam zu funktionieren.
Weiterhin nehmen binäre Übersetzer, welche
aus einem stärkeren
ISA-Speicherordnungsmodell (z.B. x86) in eine schwächere ISA-Speicherordnung (z.B.
IPF) übersetzen,
an, daß die übersetzte
Anwendung von dem Ordnen abhängt,
welches von dem stärkeren
Speicherordnungsmodell erzwungen wird. Wenn die Binärcodierungen
folglich übersetzt
sind, müssen
sie Lade- und Speichervorgänge durch
geordnete Lade- und Speichervorgänge
ersetzen, um die Richtigkeit des Programms zu garantieren.
-
Mit
zunehmendem Einsatz geordneter Speicheroperationen wird das Leistungsvermögen geordneter
Speicheroperationen wichtiger. Bei aktuellen x86-Prozessoren ist
ein ungeordnetes Ausführen
geordneter Speicheroperationen bereits entscheidend für das Leistungsvermögen, da
alle Speicheroperationen geordnete Operationen sind. Ungeordnete
Prozessoren, welche ein starkes Speicherordnungsmodell implementieren,
können
spekulativerweise ungeordnete Ladevorgänge ausführen und dann überprüfen, um
zu gewährleisten,
daß keine
Ordnungsverletzung aufgetreten ist, bevor die Ladeinstruktion dem Maschinenzustand übergeben
wird. Dies kann durch Nachverfolgen ausgeführter jedoch noch nicht übergebener
Ladeadressen in einer Ladeschlange und durch Überwachen von Schreibvorgängen durch
andere Zentraleinheiten (CPUs) oder Cache-kohärenten Agenten vorgenommen
werden. Falls eine andere CPU auf die gleiche Adresse schreibt wie
ein Ladevorgang in der Ladeschlange, kann die CPU den passenden
Ladevorgang einfangen oder erneut ausführen (und alle nachfolgenden,
nicht übergebenen Ladevorgänge löschen) und
dann diesen Ladevorgang und alle nachfolgenden Ladevorgänge wieder ausführen, um
sicherzustellen, daß kein
jüngerer
Ladevorgang vor einem älteren
Ladevorgang erfüllt wird.
-
Geordnete
CPUs können
jedoch Ladeinstruktionen übergeben,
bevor die ihre Daten in die Registerdatei zurückgegeben haben. Bei einer
derartigen CPU können
Ladevorgänge übergeben
werden, sobald sie alle ihre Fehlerprüfungen (z.B. Ausbleiben im
Datenübersetzungspuffer
(DTB) und unausgerichteter Zugang) bestanden haben und bevor Daten
abgerufen werden. Wenn Ladeinstruktionen einmal zurückgezogen
wurden, können
sie nicht wieder ausgeführt
werden. Deshalb ist es keine Option, Ladevorgänge einzufangen und erneut
abzurufen oder wieder auszuführen,
nachdem sie auf der Grundlage des Überwachens von Schreibvorgängen von
anderen CPUs zurückgezogen
wurden, wie oben stehend beschrieben.
-
Es
besteht folglich ein Bedarf zum Verbessern des Leistungsvermögens geordneter
Speicheroperationen insbesondere bei einem Prozessor mit einem schwachen
Speicherordnungsmodell.
-
KURZE BESCHREIBUNG DER
ZEICHNUNGEN
-
1 ist
ein Blockdiagramm eines Abschnitts eines Systems gemäß einer
Ausführungsform
der vorliegenden Erfindung.
-
2 ist
ein Ablaufdiagramm eines Verfahrens zum Ausführen einer Ladeinstruktion
gemäß einer
Ausführungsform
der vorliegenden Erfindung.
-
3 ist
ein Ablaufdiagramm eines Verfahrens zum Laden von Daten gemäß einer
Ausführungsform
der vorliegenden Erfindung.
-
4 ist
ein Ablaufdiagramm eines Verfahrens zum Ausführen einer Speicherinstruktion
gemäß einer
Ausführungsform
der vorliegenden Erfindung.
-
5 ist
ein Ablaufdiagramm eines Verfahrens zum Ausführen einer Speicherschranke
gemäß einer
Ausführungsform
der vorliegenden Erfindung.
-
6 ist
ein Blockdiagramm eines Systems gemäß einer Ausführungsform
der vorliegenden Erfindung.
-
AUSFÜHRLICHE
BESCHREIBUNG
-
Unter
Bezugnahme auf 1 wird ein Blockdiagramm eines
Abschnitts eines Systems gemäß einer
Ausführungsform
der vorliegenden Erfindung gezeigt. Genauer gesagt kann, wie in 1 gezeigt, System 10 ein
Informationsbehandelungssystem sein, wie beispielsweise ein Personal-Computer (z.B. ein
Arbeitsplatz-Computer, ein Notebook-Computer, ein Server-Computer
oder dergleichen). Wie in 1 gezeigt,
kann System 10 verschiedene Prozessorbetriebsmittel umfassen,
wie beispielsweise eine Ladeschlange 20, eine Speicherschlange 30 und
einen Misch- (d.h.
einen Schreibkombinations-)-Puffer 40. Bei bestimmten Ausführungsformen
können
sich diese Schlangen und Puffer innerhalb eines Prozessors des Systems
befinden, wie beispielsweise in einer Zentraleinheit (CPU). Beispielsweise
kann eine derartige CPU bei bestimmten Ausführungsformen gemäß einer
Architektur IA-32 oder IPF sein, obwohl der Schutzumfang der vorliegenden
Erfindung nicht so eingeschränkt
ist. Bei anderen Ausführungsformen
können
die Ladeschlange 20 und die Speicherschlange 30 zu
einem einzelnen Puffer vereinigt werden.
-
Ein
Prozessor, welcher derartige Prozessorbetriebsmittel umfaßt, kann
sie als vorübergehende Speicherung
für verschiedene
Speicheroperationen verwenden, welche innerhalb des Systems ausgeführt werden
können.
Beispielsweise kann die Ladeschlange 20 verwendet werden,
um vorübergehend Einträge bestimmter
Speicheroperationen, wie beispielsweise Ladeoperationen, zu speichern
und um vorhergehende Ladevorgänge
oder andere Speicheroperationen nachzuverfolgen, welche abgeschlossen
sein müssen,
bevor die gegebene Speicheroperation selbst abgeschlossen werden
kann. Genauso kann die Speicherschlange 30 verwendet werden, um
Speicheroperationen zu speichern, beispielsweise Speichervorgänge, und
um vorhergehende Speicheroperationen (gewöhnlich Ladevorgänge) nachzuverfolgen,
welche abgeschlossen sein müssen, bevor
eine gegebene Speicheroperation selbst übergeben werden kann. Bei verschiedenen
Ausführungsformen
kann ein Mischpuffer 40 als ein Puffer verwendet werden,
um vorübergehend
Daten entsprechend einer Speicheroperation zu speichern, bis zu
einem derartigen Zeitpunkt, an welchem die Speicheroperation (z.B.
ein Speichervorgang oder eine Semaphore) abgeschlossen oder übergeben
werden kann.
-
Eine
ISA mit einem schwachen Speicherordnungsmodell (wie beispielsweise
IPF-Prozessoren) können
explizite Instruktionen umfassen, welche eine stringente Speicherordnung
erfordern (z.B. Ladeannahme, Speicherfreigabe, Speicherschranke und
Semaphoren), während
die gewöhnlichsten
Lade- und Speichervorgänge
keine stringente Speicherordnung einführen. Bei einer ISA mit einem
starken Speicherordnungsmodell (z.B. einer ISA IA-32) kann jede
Lade- oder Speicherinstruktion
stringenten Speicherordnungsregeln folgen. Folglich kann ein Programm,
welches aus einer IA-32-Umgebung in eine IPF-Umgebung übersetzt
wurde, beispielsweise eine starke Speicherordnung einführen, um
ein sachgerechtes Programmverhalten zu gewährleisten, indem alle Ladevorgänge durch
Ladeannahmen und alle Speichervorgänge durch Speicherfreigaben
substituiert werden.
-
Wenn
ein Prozessor gemäß einer
Ausführungsform
der vorliegenden Erfindung eine Ladeannahme verarbeitet, gewährleistet
er, daß die
Ladeannahme eine globale Sichtbarkeit erzielt hat, bevor nachfolgende
Ladevorgänge
und Speichervorgänge verarbeitet
werden. Falls folglich die Ladeannahme in einem Datencache des ersten
Levels ausbleibt, kann nachfolgenden Ladevorgängen verboten werden, auch
dann die Registerdatei zu aktualisieren, wenn sie in dem Datencache
eingetroffen wären,
und nachfolgende Speichervorgänge
müssen
die Eigentümerschaft
des Blocks, welchen sie schreiben, nur prüfen, nachdem die Ladeannahme
ihre Daten in die Registerdatei zurückgegeben hat. Um dies zu erreichen,
kann der Prozessor erzwingen, daß alle jüngeren Ladevorgänge als
eine ausstehende Ladeannahme in dem Datencache ausbleiben und in
eine Ladeschlange eintreten, d.h. in einer Anforderungsschlange
(MRQ) ausbleiben, um eine sachgerechte Ordnung zu gewährleisten.
-
Wenn
ein Prozessor gemäß einer
Ausführungsform
der vorliegenden Erfindung eine Speicherfreigabe verarbeitet, gewährleistet
er, daß alle
vorhergehenden Lade- und Speichervorgänge eine globale Sichtbarkeit
erzielt haben. Bevor folglich die Speicherfreigabe ihren Schreibvorgang
global sichtbar machen kann, müssen
alle vorhergehenden Ladevorgänge
Daten in die Registerdatei zurückgegeben
haben und müssen
alle vorhergehenden Speichervorgänge
eine Sichtbarkeit der Eigentümerschaft über ein
Cachekohärenzprotokoll
erzielt haben.
-
Speicherschranken-
und Semaphorenoperationen weisen Elemente sowohl von Ladeannahme- als auch von Speicherfreigabesemantiken
auf.
-
Immer
noch unter Bezugnahme auf 1 wird Ladeschlange 20 (hierin
auch als „MRQ 20" bezeichnet) gezeigt,
welche einen MRQ-Eintrag 25 umfaßt, welcher ein Eintrag entsprechend
einer bestimmten Speicheroperation (d.h. eines Ladevorgangs) ist.
Während
sie zu Darstellungszwecken mit einem einzelnen Eintrag 25 gezeigt
wird, können mehrere
derartige Einträge
vorliegen. Dem MRQ-Eintrag 25 ist ein Ordnungsvektor 26 zugeordnet,
welcher mit mehreren Bits gebildet wird. Jedes Bit des Ordnungsvektors 26 kann
einem Eintrag innerhalb der Ladeschlange 20 entsprechen,
um anzuzeigen, ob vorhergehende Speicheroperationen abgeschlossen
wurden. Folglich kann der Ordnungsvektor 26 vorhergehende
Ladevorgänge
nachverfolgen, welche abgeschlossen werden müssen, bevor eine zugeordnete
Speicheroperation abgeschlossen werden kann.
-
Dem
MRQ-Eintrag 25 ist auch ein Ordnungsbit (O-Bit) 27 zugeordnet,
welches verwendet werden kann, um anzuzeigen, daß nachfolgende Speicheroperationen,
welche in der Ladeschlange 20 gespeichert sind, hinsichtlich
des MRQ-Eintrags 25 geordnet werden sollten.
-
Weiterhin
kann auch ein Validierungsbit 28 vorliegen. Wie außerdem in 1 gezeigt,
kann der MRQ-Eintrag 25 auch eine Ordnungsspeicherpuffer-Kennung
(ID) 29 umfassen, welche verwendet werden kann, um einen
Eintrag in einem Speicherpuffer entsprechend der Speicheroperation
des MRQ-Eintrags zu identifizieren.
-
Genauso
kann die Speicherschlange 30 (hierin auch als „STB 30" bezeichnet) mehrere
Einträge
umfassen. Zu Darstellungszwecken wird nur ein einzelner STB-Eintrag 35 in 1 gezeigt.
Der STB-Eintrag 35 kann einer gegebenen Speicheroperation
(d.h. einem Speichervorgang) entsprechen. Wie in 1 gezeigt,
kann der STB-Eintrag 35 einen Ordnungsvektor 36 aufweisen,
welcher ihm zugeordnet ist. Ein derartiger Ordnungsvektor kann das
relative Anordnen der Speicheroperation entsprechend dem STB-Eintrag 35 hinsichtlich
vorhergehender Speicheroperationen innerhalb der Ladeschlange 20 und
bei manchen Ausführungsformen
gegebenenfalls innerhalb der Speicherschlange 30 anzeigen. Folglich
kann der Ordnungsvektor 36 vorhergehende Speicheroperationen
(gewöhnlich
Ladevorgänge)
in der MRQ 20 anzeigen, welche abgeschlossen werden müssen, bevor
eine zugeordnete Speicheroperation übergeben werden kann. Während es
nicht in 1 gezeigt wird, kann die STB 30 bei
bestimmten Ausführungsformen
eine STB-Übergabebenachrichtigung
(z.B. der MRQ bereitstellen, um anzuzeigen, daß nun eine vorhergehende Speicheroperation
(gewöhnlich
ein Speichervorgang in der STB) übergeben
wurde.
-
Bei
verschiedenen Ausführungsformen
kann der Mischpuffer 40 ein Signal 45 (d.h. ein
Signal „alle vorhergehenden
Schreibvorgänge
sichtbar") übertragen,
welches verwendet werden kann, um anzuzeigen, daß alle vorhergehenden Schreiboperationen Sichtbarkeit
erzielt haben. Bei einer derartigen Ausführungsform kann das Signal 45 verwendet
werden, um zu melden, daß eine
Freigabe-semantische Speicheroperation in der STB 30 (gewöhnlich eine
Speicherfreigabe, eine Speicherschranken- oder eine Semaphorenfreigabe),
welche ein Übergeben
verzögert hat,
nun beim Empfang des Signals 45 übergeben werden kann. Eine
Verwendung des Signals 45 wird nachfolgend weiter diskutiert.
-
Zusammen
können
diese Mechanismen eine Speicherordnung erzwingen, wie sie von den
Semantiken der erteilten Speicheroperationen benötigt wird. Die Mechanismen
können
ein hohes Leistungsvermögen
erleichtern, da ein Prozessor gemäß bestimmten Ausführungsformen
nur Ordnungsbedingungen erzwingen kann, wenn es erwünscht ist,
native Binärcodes
zu nutzen, welche ein schwaches Speicherordnungsmodell verwenden.
-
Weiterhin
können
bei verschiedenen Ausführungsformen
Ordnungsvektorprüfungen
für Ladevorgänge so lange
wie möglich
verzögert
werden. Dies weist zwei Auswirkungen auf. Hinsichtlich vorbereiteter
Speicherzugriffe greifen erstens Ladevorgänge, welche Ordnungsbedingungen
erfordern, normal auf die Cachehierarchie zu (abgesehen von einem
erzwungenen Ausbleiben aus dem primären Datencache). Dies gestattet
einem Ladevorgang, auf Caches des zweiten und dritten Levels und
auf andere Socket-Caches und Speicher des Prozessors zuzugreifen,
bevor seine Ordnungsbedingungen geprüft werden. Nur wenn die Daten
des Ladevorgangs bereit sind, in die Registerdatei geschrieben zu
werden, wird der Ordnungsvektor geprüft, um zu gewährleisten,
daß alle
Bedingungen erfüllt
sind. Falls eine Ladeannahme aus dem primären Datencache ausbleibt, kann
beispielsweise ein nachfolgender Ladevorgang (welcher warten muß, daß die Ladeannahme
abgeschlossen wird) seine Anforderung im Schatten der Ladeannahme
starten. Falls die Ladeannahme Daten zurückgibt, bevor der nachfolgende Ladevorgang
Daten zurückgibt,
erleidet der nachfolgende Ladevorgang keine Leistungseinbuße aufgrund
der Ordnungsbedingung. Folglich kann im besten Fall ein Ordnen erzwungen
werden, während
Ladeoperationen vollständig
vorbereitet sind.
-
Hinsichtlich
einem Datenvorablesezugriff wird zweitens ein nachfolgender Ladevorgang
seinen zugegriffenen Block wirksam vorab in den CPU-Cache ausgelesen
haben, falls er versucht, Daten vor einer vorhergehenden Ladeannahme
zurückzugeben.
Nachdem die Ladeannahme Daten zurückgibt, kann es der nachfolgende
Ladevorgang aus der Ladeschlange heraus erneut versuchen und seine
Daten aus dem Cache bekommen. Eine Ordnung kann erhalten werden,
weil ein eingreifender, global sichtbarer Schreibvorgang bewirkt,
daß die
Cachezeile ungültig
wird, was dazu führt,
daß der
Cacheblock erneut ausgelesen wird, um eine aktualisierte Kopie zu erhalten.
-
Jetzt
unter Bezugnahme auf 2 wird ein Ablaufdiagramm eines
Verfahrens zum Ausführen
einer Ladeinstruktion gemäß einer
Ausführungsform der
vorliegenden Erfindung gezeigt. Eine derartige Ladeinstruktion kann
eine Ladevorgangs- oder eine Ladeannahmeinstruktion sein. Wie in 2 gezeigt, kann
Verfahren 100 durch ein Empfangen einer Ladeinstruktion
(Oval 102) beginnen. Eine derartige Instruktion kann in
einem Prozessor mit Speicherordnungsregeln ausgeführt werden,
in welchem eine Ladeannahmeinstruktion global sichtbar wird, bevor
irgendeine nachfolgende Lade- oder Speicheroperation global sichtbar
wird. Ersatzweise muß eine
Ladeinstruktion bei bestimmten Prozessorumgebungen nicht geordnet
sein. Während
das Verfahren der 2 verwendet werden kann, um
Ladeinstruktionen zu behandeln, kann ein ähnlicher Ablauf bei anderen
Ausführungsformen
verwendet werden, um andere Speicheroperationen zu behandeln, welche den
Speicherordnungsregeln anderer Prozessoren entsprechen, bei welchen
eine erste Speicheroperation vor nachfolgenden Speicheroperationen
sichtbar werden muß.
-
Immer
noch unter Bezugnahme auf 2 kann als
nächstes
festgestellt werden, ob irgendwelche vorhergehenden geordneten Operationen
in einer Ladeschlange (Karo 105) ausstehen. Derartige Operationen
können
Ladeannahmeinstruktionen, Speicherschranken und dergleichen umfassen.
Falls derartige Operationen ausstehen, kann der Ladevorgang in einer
Ladeschlange (Block 170) gespeichert werden. Weiterhin
kann ein Ordnungsvektor, welcher dem Eintrag in der Ladeschlange
entspricht, auf der Grundlage von Ordnungsbits vorhergehender Einträge (Block 180)
erzeugt werden. Das bedeutet, daß Ordnungsbits in dem erzeugten
Ordnungsvektor für Operationen,
welche geordnet werden können,
vorliegen können,
wie beispielsweise für
Ladeannahmen, Speicherschranken und dergleichen. Bei einer Ausführungsform
kann der MRQ-Eintrag die O-Bits aller vorhergehenden MRQ-Einträge kopieren,
um seinen Ordnungsvektor zu erzeugen. Wenn beispielsweise fünf vorhergehende
MRQ-Einträge
vorliegen, von welchen jeder bereits global sichtbar geworden ist,
kann der Ordnungsvektor für
den sechsten Eintrag einen Einzelwert für jede der fünf vorhergehenden
MRQ-Einträge
umfassen. Dann kann die Steuerung zu Karo 115 weitergehen,
wie nachfolgend weiter diskutiert wird. Während 2 zeigt,
daß ein
gegenwärtiger
Eintrag von vorhergehenden Ordnungsoperationen in der Speicherschlange
abhängig sein
kann, kann der aktuelle Eintrag auch von vorhergehenden Ordnungsoperationen
in der Speicherschlange abhängig
sein, und demgemäß kann auch bestimmt
werden, ob es irgendwelche derartige Operationen in der Speicherschlange
gibt.
-
Falls
bei Karo 105 statt dessen festgestellt wird, daß keine
vorhergehenden geordneten Operationen in der Ladeschlange ausstehen,
kann festgestellt werden, ob Daten in einem Datencache vorliegen
(Karo 110). Falls dies so ist, können die Daten aus dem Datencache
(Block 118) erhalten werden, und ein normales Ausführen kann
fortgesetzt werden.
-
Bei
Karo 115 kann festgestellt werden, ob die Instruktion eine
Ladeannahmeoperation ist. Falls sie es nicht ist, kann die Steuerung
zum Erhalten der Daten zu 3 weitergehen
(Oval 195). Falls statt dessen bei Karo 115 festgestellt
wird, daß die
Instruktion eine Ladeannahmeoperation ist, kann die Steuerung zu
Block 120 weitergehen, bei welchem erzwungen werden kann,
daß nachfolgende
Ladevorgänge
in dem Datencache ausbleiben (Block 120). Wenn erzeugt,
kann der MRQ-Eintrag dann auch sein eigenes O-Bit setzen (Block 150).
Ein derartiges Ordnungsbit kann durch nachfolgende MRQ-Einträge verwendet
werden, um zu bestimmen, wie ihr Ordnungsvektor hinsichtlich der
gegenwärtig
vorhandenen MRQ-Einträge
zu setzen ist. Mit anderen Worten, ein nachfolgender Ladevorgang
kann ein O-Bit eines MRQ-Eintrags durch entsprechendes Setzen eines
entsprechenden Bits in seinem Ordnungsvektor melden. Als nächstes kann
die Steuerung zu Oval 195 weitergehen, welches der 3 entspricht,
welche nachfolgend diskutiert wird.
-
Während es
in 2 nicht gezeigt ist, können bei bestimmten Ausführungsformen
nachfolgende Ladeinstruktionen in einem MRQ- Eintrag gespeichert
werden und ein O-Bit und ein dementsprechender Ordnungsvektor erzeugt
werden. Das bedeutet, daß nachfolgende
Ladevorgänge
bestimmen können,
wie ihr Ordnungsvektor durch Kopieren der O-Bits vorhandener MRQ-Einträge zu setzen
ist (d.h. ein nachfolgender Ladevorgang meldet das O-Bit der Ladeannahme
durch ein Setzen des entsprechenden Bits in seinem Ordnungsvektor
des MRQ-Eintrags). Während
es in 2 nicht gezeigt ist, versteht es sich, daß nachfolgende
(d.h. Nicht-Freigabe) Speichervorgänge, auf die gleiche Weise
wie es Ladevorgänge
tun, bestimmen können,
wie ihr Ordnungsvektor auf der Grundlage der O-Bits der MRQ-Einträge zu setzen
ist.
-
Jetzt
unter Bezugnahme auf 3 wird ein Ablaufdiagramm eines
Verfahrens zum Laden von Daten gemäß einer Ausführungsform
der vorliegenden Erfindung gezeigt. Wie in 3 gezeigt,
kann das Verfahren 200 mit einer Datenladeoperation beginnen
(Oval 205). Als nächstes
können
Daten aus der Speicherhierarchie entsprechend der Ladeinstruktion
empfangen werden (Block 210). Derartige Daten können sich
an verschiedenen Orten einer Speicherhierarchie befinden, wie beispielsweise
im Systemspeicher oder in einem ihm zugeordneten Cache oder in einem
Cache auf dem Chip oder nicht auf dem Chip, welches einem Prozessor
zugeordnet ist. Wenn die Daten aus der Speicherhierarchie empfangen
werden, können
sie im Datencache oder in einem anderen temporären Speicherort gespeichert werden.
-
Dann
kann ein Ordnungsvektor entsprechend der Ladeinstruktion analysiert
werden (Block 220). Beispielsweise kann ein MRQ-Eintrag
in einer Ladeschlange entsprechend der Ladeinstruktion einen ihm
zugeordneten Ordnungsvektor aufweisen. Der Ordnungsvektor kann analysiert
werden, um zu bestimmen, ob der Ordnungsvektor gelöscht ist
(Karo 230). Falls alle Bits des Ordnungsvektors gelöscht sind,
kann dies bei der Ausführungsform
der 3 anzeigen, daß alle vorhergehenden Speicheroperationen
abgeschlossen sind. Falls der Ordnungsvektor nicht gelöscht ist,
zeigt dies an, daß derartige
vorhergehende Operationen nicht abgeschlossen wurden und entsprechend
keine Daten zurückgegeben
wurden. Statt dessen geht die Ladeoperation in der Ladeschlange
in einen Wartezustand (Block 240), wobei sie auf einen
Fortschritt vorhergehender Speicheroperationen, wie beispielsweise
vorhergehender Ladeannahmeoperationen, wartet.
-
Falls
statt dessen bei Karo 230 festgestellt wird, daß der Ordnungsvektor
gelöscht
ist, kann die Steuerung zu Block 250 weitergehen, bei welchem die
Daten in eine Registerdatei geschrieben werden können. Als nächstes kann der Eintrag entsprechend der
Ladeinstruktion freigegeben werden (Block 260). Schließlich kann
bei Block 270 das Ordnungsbit, welches der abgeschlossenen
(d.h. freigegebenen) Ladeoperation entspricht, spaltenweise aus
allen nachfolgenden Einträge
in der Ladeschlange und in der Speicherschlange gelöscht werden.
In derartiger Weise können
diese Ordnungsvektoren mit dem abgeschlossenen Status der aktuellen
Operation aktualisiert werden.
-
Falls
eine Speicheroperation bereit ist, zu versuchen, globale Sichtbarkeit
zu erlangen (z.B. Kopieren aus dem Speicherpuffer heraus in den
Mischpuffer und Anfordern der Eigentümerschaft für ihren Cacheblock), kann sie
erst überprüfen, um
zu gewährleisten,
daß ihr
Ordnungsvektor gelöscht
ist. Falls er es nicht ist, kann die Operation verzögert werden,
bis der Ordnungsvektor vollständig
gelöscht ist.
-
Jetzt
unter Bezugnahme auf 4 wird ein Ablaufdiagramm eines
Verfahrens zum Ausführen
einer Speicherinstruktion gemäß einer
Ausführungsform
der vorliegenden Erfindung gezeigt. Eine derartige Speicherinstruktion
kann eine Speicher- oder eine Speicherfreigabeinstruktion sein.
Bei bestimmten Ausführungsformen
muß eine
Speicherinstruktion nicht geordnet sein. Bei Ausführungsformen
zur Verwendung mit bestimmten Prozessoren können jedoch Speicherordnungsregeln
diktieren, daß alle
vorhergehenden Lade- oder Speicheroperationen global sichtbar werden,
bevor eine Speicherfreigabeoperation selbst global sichtbar wird.
Während
er in der Ausführungsform
der 4 auf Speicherinstruktionen bezogen diskutiert
wird, versteht es sich, daß ein derartiger
Ablauf oder ein ähnlicher
Auflauf verwendet werden kann, um ähnliche Speicherordnungsoperationen
zu verarbeiten, welche erfordern, daß vorhergehende Speicheroperationen
vor einer Sichtbarkeit der gegebenen Operation sichtbar werden.
-
Immer
noch unter Bezugnahme auf 4 kann das
Verfahren 400 durch Empfangen einer Speicherinstruktion
beginnen (Oval 405). Bei Block 410 kann die Speicherinstruktion
in einen Eintrag in der Speicherschlange eingefügt werden. Als nächstes kann
festgestellt werden, ob die Operation eine Speicherfreigabeoperation
ist (Karo 415). Falls sie es nicht ist, kann ein Ordnungsvektor
für den
Eintrag auf der Grundlage aller vorhergehenden, ausstehenden, geordneten
Operationen in der Ladeschlange erzeugt werden (wobei ihr Ordnungsbit
gesetzt ist) (Block 425). Da die Speicherinstruktion keine
geordnete Instruktion ist, kann ein derartiger Ordnungsvektor erzeugt
werden, ohne daß ihr
Ordnungsbit gesetzt wird. Dann kann die Steuerung zu Karo 430 weitergehen,
wie nachfolgend weiter diskutiert wird.
-
Falls
statt dessen bei Karo 415 festgestellt wird, daß eine Speicherfreigabeoperation
vorliegt, kann als nächstes
ein Ordnungsvektor für
den Eintrag auf der Grundlage von Informationen erzeugt werden,
welche alle vorhergehenden, ausstehenden Operationen in der Ladeschlange,
welche geordnet werden können,
betreffen (Block 420). Wie oben stehend diskutiert, kann
ein derartiger Ordnungsvektor Bits entsprechend anstehender Speicheroperationen umfassen
(z.B. ausstehende Ladevorgänge
in einer MRQ sowie Speicherschranken und andere derartige Operationen).
-
Bei
Karo 430 kann festgestellt werden, ob der Ordnungsvektor
gelöscht
ist. Falls der Ordnungsvektor nicht gelöscht ist, kann eine Schleife
ausgeführt
werden, bis der Ordnungsvektor gelöscht wird. Wenn der Ordnungsvektor
gelöscht
wird, kann festgestellt werden, ob die Operation eine Freigabeoperation
ist (Karo 435). Falls es nicht so ist, kann die Steuerung
unmittelbar zu Block 445 weitergehen; wie nachfolgend diskutiert
wird. Falls statt dessen festgestellt wird, daß eine Freigabeoperation vorliegt,
kann dann bestimmt werden, ob alle vorhergehenden Schreibvorgänge Sichtbarkeit
erzielt haben (Karo 440). Bei einer Ausführungsform
können
Speichervorgänge
beispielsweise sichtbar sein, wenn Daten, welche der Instruktion
entsprechen, in einem gegebenen Puffer oder an einem anderen Speicherort
vorliegen. Falls nicht, kann Karo 440 auf sich selbst zurück verzweigen,
bis alle vorhergehenden Schreibvorgänge Sichtbarkeit erzielt haben.
Wenn eine derartige Sichtbarkeit erzielt ist, kann die Steuerung
zu Block 445 weitergehen.
-
Dort
kann der Speichervorgang Sichtbarkeit für den Schreibvorgang in seinen
Cacheblock anfordern (Block 445). Während es nicht in 4 gezeigt ist,
können
Daten in dem Mischpuffer zu dem Zeitpunkt gespeichert werden, an
welchem dem Speichervorgang gestattet ist, Sichtbarkeit anzufordern. Falls
bei einer Ausführungsform
alle vorhergehenden Speichervorgänge
Sichtbarkeit erreicht haben, kann ein Mischpuffer-Sichtbarkeitssignal
logisch wahr gesetzt werden. Ein derartiges Signal kann anzeigen, daß alle vorhergehenden
Speicheroperationen globale Sichtbarkeit erlangt haben, wie durch
den Mischpuffer bestätigt
wird. Bei einer Ausführungsform
kann ein Cachekohärenzprotokoll
abgefragt werden, um eine derartige Sichtbarkeit zu erlangen. Eine
derartige Sichtbarkeit kann erlangt werden, wenn das Cachekohärenzprotokoll
eine Rückbestätigung an
den Speicherpuffer bereitstellt.
-
Bei
bestimmten Ausführungsformen
kann sich ein Cacheblock für
eine Speicherfreigabeoperation bereits in dem eigenen Mischpuffer
(MGB) befinden, wenn die Speicherfreigabe bereit ist, Sichtbarkeit
zu erlangen. Der MGB kann ein hohes Leistungsvermögen für Ströme von Speicherfreigaben
erhalten (z.B. bei Codesegmenten, bei welchen alle Speichervorgänge Speicherfreigaben
sind), falls es ein ausreichendes Maß an Mischung in dem MGB für diese Blöcke gibt.
-
Falls
der Speichervorgang Sichtbarkeit erlangt hat, kann ein Bestätigungsbit
zum Speichern von Daten in dem Mischpuffer gesetzt werden. Der MGB
kann dieses Bestätigungsbit,
welches auch als ein Eigentümerschafts-
oder Schmutzbit bezeichnet wird, für jeden gültigen Cacheblock umfassen.
Bei derartigen Ausführungsformen
kann der MGB dann eine ODER-Operation über alle seine gültigen Einträge durchführen. Falls
irgendwelche gültigen
Einträge nicht
bestätigt
sind, kann das Signal „alle
vorhergehenden Schreibvorgänge
sichtbar" logisch
falsch gesetzt werden. Wenn dieses Bestätigungsbit einmal gesetzt ist,
kann der Eintrag global sichtbar werden. In einer derartigen Weise
kann Sichtbarkeit für
die Speicher- oder Speicherfreigabeinstruktion erzielt werden (Block 460).
Es versteht sich, daß mindestens
bestimmte Aktionen, welche in 4 dargelegt sind,
bei unterschiedlichen Ausführungsformen
in einer anderen Reihenfolge durchgeführt werden können. Beispielsweise
können
bei einer Ausführungsform
vorhergehende Schreibvorgänge
sichtbar werden, wenn Daten, welche der Instruktion entsprechen,
in einem gegebenen Puffer oder in einem anderen Speicherort vorliegen.
-
Jetzt
unter Bezugnahme auf 5 wird ein Ablaufdiagramm eines
Verfahrens zum Ausführen
einer Speicherschranken-(MF)-Operation gemäß einer Ausführungsform
der vorliegenden Erfindung gezeigt. Bei der Ausführungsform der 5 kann
eine Speicherschranke in einem Prozessor mit Speicherordnungsregeln
verarbeitet werden, welche diktieren, daß für eine Speicherschranke alle
vorhergehenden Lade- und Speichervorgänge sichtbar werden, bevor irgendwelche
nachfolgenden Lade- und Speichervorgänge sichtbar gemacht werden
können.
Bei einer Ausführungsform
kann ein derartiger Prozessor ein IPF-Prozessor, ein IA-32-Prozessor
oder ein anderer derartiger Prozessor sein.
-
Wie
in 5 gezeigt kann eine Speicherschrankeninstruktion
von einem Prozessor erteilt werden (Oval 505). Als nächstes kann
ein Eintrag sowohl in einer Ladeschlange als auch in einer Speicherschlange
mit Ordnungsvektoren erzeugt werden, welche dem Eintrag entsprechen
(Block 510). Genauer gesagt, die Ordnungsvektoren können allen vorhergehenden
betätigbaren
Operationen in der Ladeschlange entsprechen. Beim Bilden des MRQ-Eintrags
kann eine Eintragsnummer, welche dem Speicherschlangeneintrag entspricht,
in ein Speicherordnungsidentifikations-(ID)-Feld des Ladeschlangeneintrags
eingefügt
werden (Block 520). Insbesondere kann die MRQ den STB-Eintrag
aufzeichnen, welcher von der Speicherschranke in einen Feld „Ordnungs-STB-ID" belegt war. Als
nächstes
kann das Ordnungsbit für
den Ladeschlangeneintrag gesetzt werden (Block 530). Der
MRQ-Eintrag für
die Speicherschranke kann sein O-Bit setzen, so daß nachfolgende
Lade- und Speichervorgänge
die Speicherschranke in ihrem Ordnungsvektor registrieren.
-
Dann
kann festgestellt werden, ob alle vorhergehenden Speichervorgänge sichtbar
sind und ob nun der Ordnungsvektor für den Eintrag in der Speicherschlange
gelöscht
ist (Karo 535). Falls nicht, kann eine Schleife ausgeführt werden,
bis derartige Speichervorgänge
sichtbar geworden sind und der Ordnungsvektor gelöscht wird.
Wenn dies auftritt, kann die Steuerung zu Block 550 weitergehen,
bei welchem der Speicherschrankeneintrag aus der Speicherschlange
freigegeben werden kann.
-
Wie
bei einer Speicherfreigabeverarbeitung kann die STB verhindern,
daß die
MF freigegeben wird, bis ihr Ordnungsvektor gelöscht ist und sie ein Signal „alle vorhergehenden
Schreibvorgänge
sichtbar" aus dem
Mischpuffer empfängt.
Wenn die Speicherschranke einmal aus der STB freigegeben wird, kann
die Speicherordnungsschlangen-ID der Speicherschranke an die Ladeschlange übertragen
werden (Block 560). Dementsprechend kann die Ladeschlange
die Speicherschlangen-ID des freigegebenen Speichervorgangs sehen
und eine inhaltsadressierte Speicher-(CAM)-Operation über alle
Ordnungsspeicherschlangen-ID-Felder der Einträge durchführen. Weiterhin kann der Speicherschrankeneintrag
in der Ladeschlange aus einem Wartezustand aufgeweckt werden.
-
Dann
können
das Ordnungsbit, welches dem Ladevorgang entspricht, und Schlangeneinträge spaltenweise
aus allen anderen Einträgen
(d.h. nachfolgenden Lade- und Speichervorgängen) in der Ladeschlange und
in der Speicherschlange gelöscht werden
(Block 570), wobei ihnen gestattet wird, abgeschlossen
zu werden, und die Speicherschranke kann aus der Ladeschlange freigegeben
werden.
-
Ordnungs-Hardware
kann gemäß einer
Ausführungsform
der vorliegenden Erfindung auch die Ordnung von Speicher- oder anderen
Prozessoroperationen aus anderen Gründen steuern. Beispielsweise
kann sie verwendet werden, um einen Ladevorgang mit einem vorhergehenden
Speichervorgang zu ordnen, welcher einige jedoch nicht alle Daten
des Ladevorgangs bereitstellen kann (Teiltreffer); sie kann verwendet
werden, um Lesen-nach-Schreiben- (RAW), Schreiben-nach-Lesen- (WAR)
und Schreiben-nach-Schreiben-(WAW)-Datenabhängigkeitsgefahren durch Speicher
zu erzwingen; und sie kann verwendet werden, um ein lokales Umgehen von
Daten aus bestimmten Operationen zu anderen zu vermeiden (z.B. aus
einer Semaphore zu einem Ladevorgang oder aus einem Speichervorgang
zu einer Semaphore). Weiterhin können
bei bestimmten Ausführungsformen
Semaphoren die gleiche Hardware verwenden, um eine sachgerechte
Ordnung zu erzwingen.
-
Jetzt
unter Bezugnahme auf 6 wird ein Blockdiagramm eines
repräsentativen
Computersystems 600 gemäß einer
Ausführungsform
der Erfindung gezeigt. Wie in 6 gezeigt,
umfaßt
das Computersystem 600 einen Prozessor 601a. Der
Prozessor 601a kann bei einer Ausführungsform über eine Speichersystemverbindung 620 an
ein Cache-kohärentes,
gemeinsam genutztes Speichersubsystem („kohärenter Speicher 630") 630 angeschlossen
sein. Bei einer Ausführungsform
kann der kohärente
Speicher 630 einen dynamischen Schreib-/Lesespeicher (DRAM, dynamic random
access memory) umfassen und kann weiterhin eine kohärente Speichersteuerungslogik
umfassen, um den kohärenten
Speicher 630 für
den Prozessor 601a und 601b gemeinsam zu nutzen.
-
Es
versteht sich, daß bei
anderen Ausführungsformen
zusätzliche
derartige Prozessoren an den kohärenten
Speicher 630 angeschlossen werden können. Weiterhin kann bei bestimmten
Ausführungsformen
der kohärente
Speicher 630 teilweise und derartig ausgebreitet implementiert
werden, daß eine
Untergruppe von Prozessoren innerhalb des Systems 600 mit
manchen Abschnitten des kohärenten
Speichers 630 kommuniziert und andere Prozessoren mit anderen
Abschnitten des kohärenten
Speichers 630 kommunizieren.
-
Wie
in 6 gezeigt, kann Prozessor 601a gemäß einer
Ausführungsform
der vorliegenden Erfindung eine Speicherschlange 30a, eine
Ladeschlange 20a und einen Mischpuffer 40a umfassen. Es
wird auch ein Sichtbarkeitssignal 45a gezeigt, welches
bei bestimmten Ausführungsformen
der Speicherschlange 30a aus dem Mischpuffer 40a bereitgestellt
werden kann. Außerdem
kann ein Level-2-(L2)-Cache 607 an den Prozessor 601a angeschlossen
werden. Wie weiterhin in 6 gezeigt wird, können ähnliche
Prozessorkomponenten in dem Prozessor 601b vorhanden sein,
welcher ein zweiter Kernprozessor eines Multiprozessorsystems sein
kann.
-
Der
kohärente
Speicher 630 kann auch (über eine Hub-Verknüpfung) an
einen Eingang/Ausgang-(E/A)-Hub 635 angeschlossen sein,
welcher an einen E/A-Erweiterungsbus 655 und an einen Peripheriebus 650 angeschlossen
ist. Bei verschiedenen Ausführungsformen
kann der E/A-Erweiterungsbus 655 an verschiedene E/A-Geräte angeschlossen werden,
wie beispielsweise unter anderen Geräten an eine Tastatur und an
eine Maus. Der Peripheriebus 650 kann an verschiedene Komponenten
angeschlossen werden, wie beispielsweise an das Peripheriegerät 670,
welches eine Speichervorrichtung sein kann, wie beispielsweise ein
Flash-Speicher, eine
Einbaukarte und dergleichen. Obwohl die Beschreibung auf spezifische
Komponenten des Systems 600 verweist, können zahlreiche Modifikationen der
illustrierten Ausführungsformen
möglich
sein.
-
Ausführungsformen
können
in einem Computerprogramm implementiert werden, welches auf einem
Speichermedium mit Instruktionen, um ein Computersystem zu programmieren,
gespeichert werden kann, um die Ausführungsformen durchzuführen. Das
Speichermedium kann insbesondere jeden Plattentyp, einschließlich Disketten,
Optikplatten, Compact-Disks mit Nur-Lesespeicher (CD-ROMs), wiederbeschreibbaren
Compact-Disks (CD-RWs) und Magneto-Optikplatten, Halbleiterelementen, wie
beispielsweise Nur-Lesespeicher (ROMs), Direktzugriffsspeicher (RAMs),
wie beispielsweise dynamische und statische RAMs, löschbare
programmierbare Nur-Lesespeicher (EPROMs), elektrisch löschbare
programmierbare Nur-Lesespeicher
(EEPROMs), Flash-Speicher, magnetische oder optische Karten oder
alle Medientypen umfassen, welche zum Speichern elektronischer Instruktionen
geeignet sind.
-
Andere
Ausführungsformen
können
als Software-Module implementiert werden, welche von einer programmierbaren
Steuerungsvorrichtung ausgeführt
werden.
-
Während die
vorliegende Erfindung hinsichtlich einer begrenzten Anzahl von Ausführungsformen beschrieben
wurde, werden Durchschnittsfachleute zahlreiche Modifikationen und
Abweichungen davon erkennen. Es ist vorgesehen, daß die angefügten Ansprüche alle
derartigen Modifikationen und Abweichungen so abdecken, daß sie innerhalb
des wahren Gedankens und Schutzumfangs dieser vorliegenden Erfindung
fallen.