-
Hintergrund
-
Die
Ausführungen
der vorliegenden Erfindung beziehen sich auf prozessorbasierte Systeme
und insbesondere auf die Implementierung eines Speicher-Kohärenzprotokolls
in einem derartigen System.
-
In
den letzten Jahren wurde in die Prozessoren in zunehmendem Maße Hardware
für eine
Parallelität auf
Ausführungsebene
eingeführt. Üblicherweise
ist die auf Ausführungsebene
von den Architekturen genutzte Parallelität explizit oder nicht spekulativ.
Die Verwendung der Parallelität
auf der Ebene spekulativer Abarbeitung wurde vorgeschlagen, um den
Nutzen der Multifaden-/Multikernarchitekturen noch weiter zu steigern.
In derartigen Lösungen
wird der Code in Stücke
aufgeteilt, die spekulativ parallel ausgeführt werden. Die Ausführung in
einem Transaktionsspeicher ist eine ähnliche Technik bei der zugelassen
wird, dass unterschiedliche Fäden
spekulativen Zugriff haben und in den Speicher schreiben, wobei
die möglichen
Datenabhängigkeiten zwischen
den Fäden
ignoriert werden. In diesen beiden Ausführungsmodellen wird der Zustand
des spekulativen Speichers atomisch an den Architekturzustand übergeben
oder in Abhängigkeit
von den Prüfungen
der Ausführungszeit
verworfen (zum Beispiel Speicherabhängigkeiten zwischen Fäden).
-
Zur
effektiven Implementierung dieser Ausführungsmodelle in aktuellen
Mehrfaden- und Mehrkernprozessoren wird die Hardware im Speicher-Teilsystem
um die Hardware zur Behandlung spekulativer Daten, zur Erkennung
von Datenabhängigkeiten
zwischen Fäden
und zur Übergabe
oder Vernichtung des spekulativen Zustands erweitert. Auf diese
Weise wird ein Speicher-Teilsystem in die Lage versetzt, eine unterschiedliche spekulative
Version pro Faden für
den gleichen Speicherplatz zu führen,
so dass spekulative Fäden
derselben Anwendung sich den Speicherbereich teilen und in die gleichen
Speicherbereiche schreiben können.
Ein um die Unterstützung
für Spekulation
und Multiversion erweitertes Speicher-Teilsystem wird auch als Multiversions-Cache
(MVC) bezeichnet. Häufig
beinhalten derartige Systeme zentralisierte Tabellen wie eine Tabelle
zur Auflösung
von Mehrdeutigkeiten im Speicher um den Pfad für die Daten aufrechtzuerhalten,
auf die spekulativ zugegriffen wurde. Hardware dieser Art ist jedoch
teuer und benötigt
eine beträchtliche
Menge an Platz und Energie. Eine Hardware dieser Art muss außerdem typischerweise
hardwarebasierte Lesebefehle unterstützen. Darüber hinaus ist ein bedeutender
Kommunikationsumfang zwischen den einzelnen Cachespeichern jedes
Systems unter Einschluss der Übertragung
der spekulativen Daten selbst erforderlich, was zu einer Erhöhung des
Busverkehrsaufkommens und zu Nachteilen bezüglich der Leistung und des
Energieverbrauchs führt.
-
Kurzbeschreibung der Zeichnungen
-
1 zeigt
ein Blockdiagramm eines Teils eines Systems entsprechend einer Ausführung der
vorliegenden Erfindung.
-
2 zeigt
ein Flussdiagramm eines Verfahrens zur spekulativen Abarbeitung
entsprechend einer Ausführung
der vorliegenden Erfindung.
-
3 zeigt
ein Flussdiagramm eines Verfahrens zur Abarbeitung zusätzlicher
spekulativer Operationen entsprechend einer Ausführung der vorliegenden Erfindung.
-
4 zeigt
ein Flussdiagramm eines Verfahrens für weitere spekulative Operationen
entsprechend einer Ausführung
der vorliegenden Erfindung.
-
5 zeigt
ein Flussdiagramm eines Verfahrens zur Verarbeitung empfangener
Busnachrichten entsprechend einer Ausführung der vorliegenden Erfindung.
-
6 zeigt
ein Flussdiagramm eines Verfahrens zur Übergabe der Ergebnisse einer
spekulativen Operation entsprechend einer Ausführung der vorliegenden Erfindung.
-
7 zeigt
ein Flussdiagramm eines Verfahrens zum Vernichten einer spekulativen
Operation entsprechend einer Ausführung der vorliegenden Erfindung.
-
8 zeigt
ein Zustandsübergangsdiagramm,
das die Antworten auf Prozessorereignisse entsprechend einer Ausführung der
vorliegenden Erfindung darstellt.
-
9 zeigt
ein Zustandsübergangsdiagramm,
das die Antworten auf Busnachrichten entsprechend einer Ausführung der
vorliegenden Erfindung darstellt.
-
10 zeigt
ein Blockdiagramm eines Multiprozessorsystems entsprechend einer
Ausführung
der vorliegenden Erfindung.
-
Ausführliche Beschreibung
-
Ein
Protokoll eines Multiversions-Cachespeichers zur Zulassung der spekulativen
Verarbeitung mehrfacher Fäden
und/oder Transaktionen in einem System kann in verschiedenen Ausführungen
implementiert werden. Auf diese Weise lässt sich ein verbessertes Verhalten
erzielen, da die Fäden
parallel ausführbar
sind und ein Cachespeicher-Kohärenzprotokoll
in Kombination mit der Software zur Steuerung der Befehle pro Faden
die Gültigkeit
eines jeden spekulativen Fadens bestimmen kann.
-
Darüber hinaus
implementiert ein Multiversions-Cachespeicher entsprechend einer
Ausführung
der vorliegenden Erfindung zur Verminderung der Komplexität der Hardware
keine Kommunikation von spekulativen Speicherwerten zwischen spekulativen
Fäden.
Dadurch, dass eine solche Kommunikation nicht stattfindet, vereinfacht
sich die Hardware wesentlich, auf diese Weise wird eine zentralisierte
Steuerlogik zur Versionskontrolle vermieden. Damit wird eine Verminderung
der Hardware zur Implementierung der Abarbeitung spekulativer Fäden auf
ein Minimum möglich
und darüber
hinaus ist kein zentrales Verzeichnis oder eine andere zentralisierte
Cache-Speicherstruktur erforderlich. Dagegen kann ein Cache-Speichercontroller,
der lokalen Cachespeichern zugeordnet ist, den Busverkehr in Zusammenhang
mit spekulativen Zugriffen empfangen und auf der Grundlage dieser
Information und des Zustands der minimalen spekulativen Hardware
im Cachespeicher bestimmen, ob ein Konflikt bezüglich eines Speicherplatzes
vorliegt, auf den ein Zugriff erfolgen soll. Wenn dies der Fall
ist, kann der Cache-Speichercontroller ein Signal an eine Softwareschicht
zur Feststellung der Art des Konflikts aussenden, zum Beispiel an
einen Anwendungshandler. Wird festgestellt, dass ein oder mehrere
Fäden zu
vernichten sind, kann der Anwendungshandler über den Bus eine Nachricht
aussenden, um diese Vernichtung zu veranlassen. Der Controller (oder
die Controller) des dem Faden (den Fäden) zugeordneten Cachespeichers
(der zugeordneten Cachespeicher) kann nach deren Annullierung demzufolge
den Zustand einer oder mehrerer dem Faden zugeordneter Speicherzeilen
setzen.
-
In
verschiedenen Ausführungen
kann ein Kohärenzprotokoll
für Multiversions-Cachespeicher
auf der Grundlage eines konventionellen Protokolls implementiert
werden: Geändert,
Gemeinsam genutzt, Ungültig (MSI)/Geändert, Exklusiv,
Gemeinsam genutzt, Ungültig
(MESI). Das Protokoll, auf das hier als Protokoll MUSLI Bezug genommen
wird, beinhaltet zusätzliche
Zustände
(zum Beispiel einen Zustand L entsprechend einem Zustand Spekulatives
Laden und einen Zustand U entsprechend einem Zustand Unsicher) und
kann in der Granularität
des Worts arbeiten, dynamisch die Speicherabhängigkeiten zwischen Fäden feststellen
und eine spekulative Version für
einen Speicherplatz in jedem Daten-Cachespeicher unterstützen. Das
heißt,
das Protokoll kann eine spekulative Version eines gegebenen Worts
pro Faden und pro Daten-Cachespeicher unterstützen.
-
Der
Zustand des spekulativen Speichers kann in jedem lokalen Daten-Cachespeicher
des Kerns gehalten werden und breitet sich bis zu dessen Übergabe
nicht auf höhere
Ebenen einer Speicherhierarchie aus. Das Entfernen einer spekulativ
veränderten
Cachespeicher-Zeile kann die Annullierung eines spekulativen Fadens
verursachen, der in diesem Kern abgearbeitet wird. Die kohärente Aktivität nicht
spekulativer Lade- und Speichervorgänge kann in der Granularität der Zeile
ausgeführt
werden. Für
spekulative Lade- und Speichervorgänge kann das Protokoll in der
Granularität
eines Worts arbeiten, um spekulative Versionen zu unterstützen und
unnötige
Annullierungen auf Grund einer falschen Bedingung für gemeinsame
Nutzung zu vermeiden.
-
Die
Speicherabhängigkeiten
zwischen Fäden
lassen sich dynamisch verifizieren. Wird eine Datenabhängigkeit
festgestellt (zum Beispiel eine Abhängigkeit zwischen Fäden für Lesen
nach Schreiben (RAW) oder Schreiben nach Lesen (WAR)), kann ein
Verletzungs-Handler aufgerufen werden. Der Verletzungs-Handler wird
auf Anwendungsebene ausgeführt
und annulliert in geeigneter Weise die spekulative Aktivität. Zur Verminderung
der Komplexität
der Hardware umfasst das Protokoll kein Konzept bezüglich der
Reihenfolge der Fäden.
Im Falle spekulativer Mehrfachfäden,
bei denen eine sequentielle Ordnung zwischen den Fäden besteht,
kann eine Softwareschicht implementiert werden, welche die Beziehungen
zwischen den Fäden
regelt. Im Fall einer Verletzung der Datenabhängigkeit zwischen Fäden ist
der aufgerufene Software-Handler für die Prüfung verantwortlich, ob eine
Abhängigkeit
Lesen nach Schreiben vorliegt, bevor der spekulative Faden (und alle
seine Nachfolger) annulliert wird, der einen Lesevorgang ausgeführt hat.
-
In
verschiedenen Ausführungen
kann die Entfernung nicht spekulativer Zeilen aus dem Cachespeicher
nach dem Protokoll MESI erfolgen. Da jedoch der Zustand des spekulativen
Speichers und der Zustand der Information lokal im Daten-Cachespeicher
gehalten wird und sich bis zu seiner Übergabe nicht auf höhere Ebenen
ausbreitet, verursacht jede Entfernung einer Zeile aus dem Cachespeicher,
auf den spekulativ zugegriffen wird (das heißt, ein Schreib- oder Lesezugriff),
eine Verletzung ähnlich
einer Datenabhängigkeit
zwischen Fäden.
-
Andererseits
kann das Protokoll eine Mischung von spekulativen und nicht spekulativen
Lade- und Speichervorgängen
im gleichen lokalen Daten-Cachespeicher zulassen. Generell wird
jeder von einem spekulativen Faden ausgeführte Lade- und Speichervorgang
als spekulativ behandelt. Dennoch können spezielle Lade- und Speichervorgänge, die
als "sichere" Zugriffe bezeichnet
werden, von beliebigen Fäden
(spekulativ oder nicht) als Zugriff auf den gemeinsam genutzten
Speicher ausgeführt
werden, diese Zugriffe dürfen
als nicht spekulativ betrachtet werden. Daher können Wechselwirkungen auftreten,
wenn sowohl spekulative als auch nicht spekulative Lade- und Speichervorgänge durch
Zugriff des gleichen Fadens auf die gleichen Speicherplätze ausgeführt werden.
In diesem Fall kann das Protokoll die Frage lösen, indem es immer dann einen Verletzungsfall
deklariert, wenn ein nicht spekulativer Lade- und Speichervorgang
auf den Speicherplatz eines Worts zugreift, auf das spekulativ zugegriffen
wurde (das heißt,
mit den Bits U oder L).
-
Das
Kohärenzprotokoll
kann in unterschiedlichen Ausführungen
den Pfad der Datenworte des Speichers dynamisch aufrechterhalten,
auf die ein spekulativer Zugriff erfolgt ist und die Datenabhängigkeiten
zwischen Fäden
prüfen,
um falsche Spekulationen über
den Ablauf zu erkennen. Der Mechanismus zur dynamischen Prüfung der
Abhängigkeiten
zwischen Fäden
kann auf mehreren Busnachrichten basieren. In einer Ausführung können derartige
Nachrichten mit dem Fadenbezeichner (ID) des die Nachricht erzeugenden
Fadens, der Adresse der Zeile des Cachespeichers auf die der Zugriff
erfolgt ist und mindestens einer Wortmaske zur Angabe des Worts
(der Worte) versehen werden, auf die ein Zugriff innerhalb der Zeile
erfolgt ist. Diese Nachrichten können
in unterschiedlichen Ausführungen
unterschiedliche Formen annehmen. Dennoch ist es möglich, diese
Nachrichten zu verwenden um andere Cache-Speichercontroller über den
Zustand der Daten zu informieren, auf die ein spekulativer Zugriff
erfolgt ist. Als Antwort können
diese Cache-Speichercontroller verschiedene Aktionen ausführen wie
nachstehend genauer beschrieben wird. In einer Ausführung können die bezüglich eines
spekulativen Zugriff generierten Nachrichten eine Nachricht zur
Leseprüfung,
eine Nachricht zur Schreibprüfung
und eine Nachricht zur Prüfung
nicht spekulativen Schreibens (die mit ChkRd, ChkWr und ChkNSWr
bezeichnet werden) beinhalten.
-
In
unterschiedlichen Systemen können
verschiedene Ausführungen
implementiert werden, dabei ist in einer Ausführung eines Mehrfachprozessorsystems
die Verwendung eines Multiversions-Cachespeichers möglich. Das
System kann zum Beispiel mehrere Prozessoren umfassen, zum Beispiel
Kerne eines Mehrfachkern-Prozessors oder mehrere Prozessoren eines
Mehrfach-Prozessorsystems. Jeder Kern kann einen lokalen Cachespeicher
beinhalten, oder diesem kann ein lokaler Cachespeicher zugeordnet
sein, zum Beispiel ein Cachespeicher Niveau 1 (L1), der einen Cache-Speichercontroller
beinhaltet.
-
In 1 ist
ein Blockdiagramm eines Teils eines Systems entsprechend einer Ausführung der
vorliegenden Erfindung dargestellt. Wie aus 1 hervorgeht,
beinhaltet das System 10 einen Prozessor 20, der mit
einem Systemspeicher 65 gekoppelt ist und in dem in einer
Ausführung
ein dynamischer Speicher für
direkten Zugriff (DRAM) verwendet werden kann. Wie in 1 gezeigt,
kann. der Prozessor 20 an den Systemspeicher 65 über eine
Schnittstelle 60 außerhalb
des Chips angeschlossen sein, der Geltungsbereich der vorliegenden
Erfindung wird hierdurch jedoch nicht auf diesen Aspekt beschränkt.
-
Wie
ebenfalls aus 1 hervorgeht beinhaltet ein
Prozessor 20 einen Kern 30 und einen Cachespeicher 40.
Der Prozessor 20 kann in einer Ausführung ein Prozessor mit nur
einem Kern sein, in anderen Implementierungen kann der Prozessor 20 ein
Mehrkern-Prozessor sein, in dem weitere Kerne in ähnlicher
Weise mit einem Kern und einem zugeordneten Cachespeicher konfiguriert
sind. Der Cachespeicher 40 kann ein Cachespeicher L1 sein,
der eine Speichermatrix 42 und einen Cache-Speichercontroller 50 umfasst.
Die Speichermatrix 42 enthält eine Mehrzahl von Cache-Speicherzeilen 43a–43n (allgemein
Zeile 43 des Cachespeichers). Jede Cache-Speicherzeile 43 kann
mehrfache Datenworte in einem Datenteil 49 speichern. Der
Datenteil 49 kann in einer Ausführung acht Worte speichern,
wobei der Geltungsbereich der vorliegenden Erfindung hierdurch nicht
beschränkt
wird. Außer
den Daten kann jede Cache-Speicherzeile ein zugeordnetes Etikett 44 beinhalten,
das für
den Zugriff auf die Cache-Speicherzeile verwendbar ist. Weiterhin
kann jede Cache-Speicherzeile 43 einen ersten Zustandsteil 45 mit
einer Reihe von Bits oder Flags enthalten entsprechend einem gewählten Cachespeicher-Kohärenzprotokoll.
In einer Ausführung
kann dies zum Beispiel ein Protokoll MESI sein. In anderen Ausführungen
sind andere Protokolle für
den Cachespeicher einsetzbar wie zum Beispiel ein Protokoll MSI.
-
Weiterhin
mit Bezug auf 1 kann jede Cache-Speicherzeile 43 außerdem eine
erste spekulative Maske 46 beinhalten, auf die auch als
erste Wortmaske Bezug genommen wird. Die erste spekulative Maske 46 kann
ein jedem Wort des Datenteils 49 zugeordnetes Bit enthalten.
Demzufolge kann die erste spekulative Maske 46 in der Ausführung nach 1 erste
spekulative Flags 411 –418 enthalten (allgemein erstes spekulatives
Flag 41), von denen jedes einem entsprechenden Wort des
Datenteils 49 zugeordnet ist. Die erste spekulative Wortmaske 46 ist
verwendbar um anzuzeigen, dass ein spekulatives Lesen des zugehörigen Worts
im Datenteil 49 stattgefunden hat.
-
Analog
dazu kann eine zweite spekulative Wortmaske 48, auf die
hier auch als zweite Wortmaske Bezug genommen wird, ein jedem Wort
des Datenteils 49 zugeordnetes Bit enthalten. Wie in 1 dargestellt, kann
die zweite spekulative Wortmaske zweite spekulative Flags 471 –478 (allgemein als zweites spekulatives Flag 47 bezeichnet)
von denen jedes einem entsprechenden Wort des Datenteils 49 zugeordnet
ist. Die zweite spekulative Wortmaske 48 ist verwendbar
um anzuzeigen, dass ein spekulatives Schreiben des zugehörigen Worts
im Datenteil 49 stattgefunden hat.
-
In
einer Ausführung
kann jedes der zweiten Flags der zweiten spekulativen Wortmaske 48 als
Bit U (Unsicher) bezeichnet werden, dieses wird gesetzt, wenn eine
Speicherung durch einen spekulativen Faden oder einen Transaktionsbereich
in das entsprechende Wort erfolgt. Analog dazu kann jedes der ersten
Flags 41 der ersten spekulativen Wortmaske 46 als
Bit L (spekulatives Laden) bezeichnet werden, dieses gibt an, dass
das Datenwort durch die Transaktion oder den spekulativen Faden
gelesen und nicht von diesem Faden oder dieser Transaktion erzeugt
wurde. Ein spekulatives Laden kann dieses Bit in jedem beliebigen
gelesenen Wort setzen, für
welches das Bit U leer ist.
-
Daher
kann der Cache-Speichercontroller 50 veranlassen, dass
bei spekulativer Ausführung
mit Zugriff auf Daten im Cachespeicher 40 die entsprechenden
Flags in der ersten spekulativen Maske 46 und in der zweiten
spekulativen Maske 48 gesetzt werden. Darüber hinaus
kann der Cache-Speichercontroller 50 auf der Grundlage
des Zustands einer gegebenen Zeile des Cachespeichers die Erzeugung
und Übertragung
von Busnachrichten bezüglich
des Zustands der unterschiedlichen Zeilen des Cachespeichers an
andere Agenten des Systems veranlassen, zum Beispiel an weitere
Cache-Speichercontroller. Auf diese Weise kann die spekulative Verarbeitung
unter Nutzung einer minimalen zusätzlichen Hardware implementiert
werden. In unterschiedlichen Ausführungen kann der Cache-Speicherkontroller 50 darüber hinaus
zum Empfang der eingehenden Busnachrichten konfiguriert sein, die
zum Beispiel von anderen Cache-Speichercontrollern stammen, und feststellen,
ob ein Konflikt zwischen einer in der Busnachricht angegebenen Adresse
und einem Speicherort im Cachespeicher 40 besteht. Wenn
dies der Fall ist, kann der Cache-Speichercontroller 50 eine
Nachricht über
die Verletzung der Datenabhängigkeit
zum Beispiel an den Kern 30 senden, um die Ausführung eines geeigneten
Handlers und eine Festlegung der Reihenfolge zwischen den in Konflikt
stehenden Zugriffen zu ermöglichen.
-
Wie
weiterhin in 1 dargestellt ist, kann der
Prozessor 20 eine Schnittstelle 55 auf dem Chip
beinhalten, welche die Kommunikation zwischen den einzelnen Kernen
im Prozessor 20 in Ausführungen
ermöglicht,
in denen der Prozessor 20 ein Mehrfachkern-Prozessor ist.
Obwohl in 1 diese spezielle Implementierung
dargestellt ist, wird hierdurch der Geltungsbereich der vorliegenden
Erfindung nicht auf diesen Aspekt eingeschränkt.
-
In 2 ist
ein Flussdiagramm eines Verfahrens zur Ausführung spekulativer Operationen
gemäß einer
Ausführung
der vorliegenden Erfindung dargestellt. Wie aus 2 hervorgeht,
kann das Verfahren 100 mit der spekulativen Ausführung eines
Fadens beginnen (Block 110). Diese spekulative Ausführung kann
der Abarbeitung eines Fadens entsprechen, zum Beispiel auf der Grundlage
der Vorhersage eines Zweigs eines wahrscheinlichen Wegs in einem
Programmablauf. In anderen Implementierungen kann die spekulative
Abarbeitung der Ausführung
einer Transaktion in einem Transaktionsspeicher gemäß einer
Ausführung
der vorliegenden Erfindung entsprechen. Während der Ausführung des
spekulativen Fadens kann bestimmt werden, ob eine Ladeoperation
(Rhombus 115) ausgeführt
werden muss. Wenn das nicht der Fall ist, wird die Steuerung an
den vorher betrachteten Block 110 zurückgegeben. Ist eine Ladeoperation
auszuführen, übernimmt
der Block 120 die Steuerung. Hierbei kann ein Zugriff auf
die Daten eines lokalen Cachespeichers (Block 120) erfolgen.
Zum Beispiel kann ein Kern, in dem der Faden ausgeführt wird,
Daten anfordern, die in einem Cachespeicher L1 vorhanden sind. Anschließend kann
bestimmt werden, ob die Daten, auf welche der Zugriff erfolgt ist,
während
der aktuellen spekulativen Abarbeitung (Rhombus 125) gelesen
oder geschrieben wurden. Es ist beispielsweise möglich, ein den Daten zugeordnetes
Bit U und ein Bit L zu prüfen,
um den spekulativen Zustand der Daten festzustellen, auf die zugegriffen
wurde. Wird festgestellt, dass während
der spekulativen Ausführung
kein Zugriff auf die Daten erfolgt ist, geht die Steuerung an Block 130 über.
-
Um
eine Multiversion der Daten zu ermöglichen, auf die zugegriffen
wurde, kann ein dem Cachespeicher L1 zugeordneter Cache-Speichercontroller
ein Flag bezüglich
des spekulativen Ladens für
die entsprechenden dem Prozessor gelieferten Daten setzen und außerdem eine
Busnachricht (Block 130) generieren. Genauer gesagt kann
der Cache-Speichercontroller die geforderten Daten an den Kern senden.
Der Cache-Speichercontroller kann darüber hinaus ein oder mehrere
den Daten zugeordnete Flags bezüglich
des spekulativen Ladens setzen. Nochmals mit Bezug auf 1 soll
angenommen werden, dass der Kern Daten aus einer kompletten Cache-Speicherzeile 43 anfordert.
Unter dieser Annahme würde
der Cache-Speichercontroller
alle ersten Flags 411 –418 der ersten spekulativen Wortmaske 46 setzen
um anzuzeigen, dass alle Daten entsprechend einer Cache-Speicherzeile 43 geladen
wurden. Um die Kohärenz
zwischen den Mehrfachfäden
zu wahren, kann der Cache-Speichercontroller außerdem eine Busnachricht generieren.
Es ist zu beachten, dass diese Busnachricht nur während des
ersten spekulativen Zugriffs auf einen Speicherplatz bestimmter
Daten im Verlauf der Abarbeitung eines spekulativen Fadens generiert
werden kann. Auf diese Weise wird ein verminderter Busverkehr realisiert,
ohne jedoch auf die Übermittlung
der benötigten
Information zu verzichten, das heißt, der spekulative Faden hatte
Zugriff auf einen bestimmten Speicherplatz. In einer Ausführung kann
eine Identifikationsnachricht gesendet werden um anzuzeigen, dass
die Daten im Cachespeicher während
der Abarbeitung spekulativ geladen wurden, dies kann einer Busnachricht
zur Leseprüfung,
also einem ChkRd entsprechen. Diese Nachricht kann mit der Adresse
und dem Inhalt der ersten Wortmaske gesendet werden. Diese Nachricht
kann veranlassen, dass weitere Cache-Speichercontroller feststellen,
ob in diese Wortmaske das Speichern eines Worts eingetragen wurde.
Die Analyse der Wortmaske durch weitere Cache-Speichercontroller
wird nachfolgend betrachtet. Es ist zu beachten, dass in Block 130 die
Operationen des Setzens eines Ladeflags und des Generierens einer
Busnachricht nicht erfolgen, wenn die Daten, auf welche der Zugriff
erfolgt ist, während
der aktuellen spekulativen Ausführung
bereits gelesen, geschrieben oder gespeichert wurden. Block 130 wird
also umgangen und das Verfahren 100 endet.
-
In 3 ist
ein Flussdiagramm eines Verfahrens zur Ausführung spekulativer Operationen entsprechend
einer Ausführung
der vorliegenden Erfindung dargestellt. Wie in 3 dargestellt
kann ein Verfahren 135 mit der Fortsetzung der spekulativen
Abarbeitung eines Fadens beginnen (Block 138). Anschließend wird bestimmt,
ob eine Speicherung erfolgen soll (Rhombus 140). Ist dies
nicht der Fall, wird die Steuerung wieder an Block 138 für eine weitere
spekulative Ausführung übergeben.
Ist dagegen eine Speicherungsspeicheroperation durchzuführen, geht
die Steuerung an Block 145 über.
-
In
diesem kann auf die Daten des lokalen Cachespeichers während der
spekulativen Abarbeitung zugegriffen werden (Block 145).
Anschließend
wird festgestellt ob diese Daten während der spekulativen Abarbeitung
generiert wurden (Rhombus 150). Wenn dies der Fall ist,
endet das Verfahren 135. Anderenfalls geht die Steuerung
von Rhombus 150 an Block 155 über.
-
In
diesem Block können
die spekulativen Daten gespeichert und ein Flag gesetzt werden,
welches das spekulative Schreiben anzeigt. Weiterhin kann eine Busnachricht
generiert werden (Block 155). Das heißt, außer dem Speichern der Daten
im Datenteil 49 einer Cache-Speicherzeile 43 werden ein
oder mehrere zweite Flags 47 in der zweiten spekulativen
Wortmaske 48 gesetzt, um dieses Schreiben spekulativer
Daten anzuzeigen. Darüber
hinaus kann der zugeordnete Cache-Speichercontroller eine Busnachricht
senden, zum Beispiel eine Nachricht zur Schreibprüfung, also
ein ChkWr, diese Nachricht wird von weiteren Cache-Speichercontrollern
empfangen, die daraufhin prüfen,
ob während
eines Ladevorgangs Daten eines Worts entsprechend der zweiten spekulativen
Wortmaske 48 von einem Speicherplatz gelesen wurden, auf
den das Schreiben erfolgt ist. Ebenso wie im Fall der vorhergehend
beschriebenen Nachricht zur Leseprüfung darf diese Nachricht ausschließlich während der
ersten Bereitstellung eines Daten-Speicherplatzes mit Speicherdaten
während
der Abarbeitung eines spekulativen Fadens gesendet werden. Dadurch
wird der Busverkehr vermindert, ohne jedoch auf die Bereitstellung
der erforderlichen Information zu verzichten, das heißt, ein
Daten-Speicherplatz wurde während
der spekulativen Ausführung
verändert.
Auch wenn die Beschreibung in Zusammenhang mit 3 für diese
spezielle Ausführungsform
erfolgt ist, muss beachtet werden, dass hierdurch der Geltungsbereich
der vorliegenden Erfindung nicht auf diesen Aspekt eingeschränkt wird.
Darüber
hinaus ist zu beachten, dass in einem System die Ausführung weiterer
Aktionen möglich
ist, um zu prüfen,
ob die spekulative Ausführung
die richtige war und daher akzeptiert werden soll, oder ob diese
wie nachstehend genauer beschrieben zu annullieren ist.
-
In 4 ist
ein Flussdiagramm eines Verfahrens für weitere spekulative Operationen
gemäß einer Ausführung der
vorliegenden Erfindung dargestellt. Wie aus 4 hervorgeht,
kann das Verfahren 200 mit der Komplettierung der spekulativen
Verarbeitung beginnen (Block 210). Ein spekulativer Prozess
wird beispielsweise komplettiert, wenn ein spekulativer Faden an
das Ende seiner Anweisungsfolge gelangt ist, oder wenn eine Transaktion
in einem Transaktionsspeichersystem abgeschlossen wird. In dem einen
oder dem anderen Fall können
bei der spekulativen Abarbeitung bestimmte Daten spekulativ in einen
lokalen Cachespeicher geschrieben werden, zum Beispiel in einen
Cachespeicher L1 eines Kerns, in dem die spekulative Abarbeitung stattgefunden
hat.
-
Anschließend wird
festgestellt, ob die spekulative Ausführung validiert wurde (Rhombus 220).
Bei dieser Prüfung
wird berücksichtigt,
ob die vom Kern für
die spekulative Abarbeitung verwendeten Daten gültig waren. Es ist möglich, die
Validierung in unterschiedlichen Ausführungen auf verschiedene Art
und mit unterschiedlicher Software in Kombination mit der Hardware
vorzunehmen.
-
Wird
weiterhin mit Bezug auf 4 die spekulative Abarbeitung
validiert, geht die Steuerung an Block 230 über, hier
kann die Übergabe
des Zustands des spekulativen Speichers an den Architekturzustand
erfolgen (Block 230). Diese Übergabe des Zustands des lokalen
Cachespeichers kann entsprechend einem Flussdiagramm erfolgen, das
nachstehend in Zusammenhang mit 6 beschrieben
wird. Wurde die Ausführung nicht
validiert, geht die Steuerung alternativ an Block 240 über. In
diesem kann die Annullierung des spekulativen Zustands erfolgen.
In einer Ausführung
ist es möglich,
diese Annullierung entsprechend dem Flussdiagramm in 7 auszuführen wie
nachstehend noch genauer erläutert
wird.
-
Wie
vorstehend beschrieben kann ein Cache-Speichercontroller außer dem
Setzen von Flags und dem Generieren von Busnachrichten während der
spekulativen Abarbeitung auch Busnachrichten empfangen, zum Beispiel
von anderen an der spekulativen Abarbeitung beteiligten Cache-Speichercontrollern.
Diese Busnachrichten können
Information bezüglich
des spekulativen Zustands von Daten in dem Cache-Speichercontroller
zugeordneten Cache-Speicherzeilen
enthalten, der diese Busnachrichten aussendet. Auf der Grundlage dieser
Nachrichten kann ein empfangender Cache-Speichercontroller feststellen,
ob dadurch Auswirkungen auf einen Speicherplatz in seinem lokalen
Cachespeicher entstanden sind.
-
In 5 ist
ein Flussdiagramm eines Verfahrens zur Verarbeitung empfangener
Busnachrichten gemäß einer
Ausführung
der vorliegenden Erfindung dargestellt. Wie aus 5 hervorgeht,
beginnt das Verfahren 300 mit dem Empfang einer der spekulativen
Abarbeitung zugeordneten Busnachricht (Block 310). Diese Busnachricht
wird zum Beispiel von einem Cache-Speichercontroller empfangen,
der einem spekulativ abgearbeiteten Faden zugeordnet ist. Auf der
Grundlage der empfangenen Busnachricht kann festgestellt werden, ob
die der Busnachricht entsprechenden Daten im Cachespeicher des die
Busnachricht empfangenden Cache-Speichercontroller vorhanden sind
(Rhombus 320). Auf der Grundlage der mit der Nachricht
gesendeten Information über
das Etikett ist eine Bestimmung möglich, ob ein Bit im Cachespeicher
vorliegt. Das Verfahren 300 endet, wenn dies nicht der
Fall ist.
-
Ist
dagegen eine Auswirkung zu verzeichnen, geht die Steuerung an Block 330 über. Hier
wird bestimmt, ob ein Konflikt zwischen den Daten entsprechend dem
spekulativen Zugriff und den Daten im lokalen Cachespeicher vorliegt.
Der Cache-Speichercontroller kann in verschiedenen Ausführungen
feststellen, ob ein Konflikt vorliegt indem er zum Beispiel die
mit der Nachricht empfangene spekulative Wortmaske mit der eigenen
spekulativen Wortmaske der betroffenen Cache-Speicherzeile vergleicht.
Beispielsweise wird eine logische Operation "UND" mit
den Bits der empfangenen Maske und der eigenen Maske der betroffenen
Datenzeile durchgeführt.
Diese Operation wird nachstehend genauer betrachtet. Bei Feststellung
einer Übereinstimmung
(das heißt,
das Ergebnis der logischen Operation "UND" ist
eine logische "Eins") liegt ein Konflikt
vor. Die Steuerung geht demzufolge an den Block 340 über. Werden
keine Auswirkungen festgestellt (das heißt, das Ergebnis der logischen
Operation "UND" ergibt nur logische "Nullen"), so liegt kein
Konflikt vor und das Verfahren 300 endet.
-
Weiterhin
in Bezug auf 5 kann der Cache-Speichercontroller
eine Verletzung der Datenabhängigkeit
signalisieren (Block 340), wenn ein Konflikt besteht. Genauer
gesagt kann er eine Verletzung der Datenabhängigkeit zwischen Fäden signalisieren.
In einer Ausführung
kann der die Verletzung feststellende Cache-Speichercontroller eine
bestimmte Verletzungsnachricht (Viol) zusammen mit den Bezeichnern
der in Konflikt stehenden Fäden
zum Beispiel an seinen zugeordneten Kern senden. Der Kern kann nun
seinerseits einen Anwendungshandler vektorisieren, damit dieser
einen Ordnungsvergleich zwischen den in Konflikt stehenden Fäden ausführt. Auf
der Grundlage der Festlegung der Ordnungsabhängigkeit kann der Anwendungshandler Busnachrichten
generieren, mit denen angezeigt wird, dass einer oder mehrere Fäden zu annullieren
sind, um Datenverletzungen zu vermeiden. Auch wenn die Darstellung
in 5 diese spezielle Implementierung zeigt ist zu
verstehen, dass die Behandlung ankommender Busnachrichten auch auf
andere Weise erfolgen kann.
-
In 6 ist
ein Flussdiagramm eines Verfahrens zur Übergabe der Ergebnisse einer
spekulativen Operation an einen Architekturzustand gemäß einer
Ausführung
der vorliegenden Erfindung dargestellt. Wie aus 6 zu
entnehmen ist, beginnt das Verfahren 400 mit dem Empfang
einer Nachricht zur Übergabe
an einen Bus (Block 410). Diese Nachricht zur Übergabe
an einen Bus wird durch den Cache-Speichercontroller empfangen,
der die Mitteilung erhalten hat, dass die in seinem Cachespeicher
abgelegten, spekulativ generierten Daten validiert wurden.
-
Daraufhin
kann der Cache-Speichercontroller den spekulativen Zustand der Datenzeile
zurücksetzen, auf
die in seinem lokalen Cachespeicher spekulativ zugegriffen wurde
(Block 420). Das heißt,
dass beide spekulative Wortmasken, die erste und die zweite, für alle Cache-Speicherzeilen zurückgesetzt
werden können, auf
die spekulativ zugegriffen wurde. Darüber hinaus kann jede dieser
Cache-Speicherzeilen, in denen ein oder mehrere Worte während der
spekulativen Ausführung
geändert
wurden, einen aktualisierten Kohärenzzustand
des Cachespeichers besitzen. Genauer gesagt kann für jede beliebige
dieser Zeilen ein Zustand "Geändert" gesetzt werden (Block 430).
Zum Beispiel in den Implementierungen unter Verwendung des Protokolls MESI
kann das Bit M gesetzt werden.
-
Als
Ergebnis führen
diese Operationen zu einer tatsächlichen
Aktualisierung der entsprechenden Cache-Speicherzeilen, auf die
in dem lokalen Cachespeicher spekulativ zugegriffen wurde, um den
eigenen Architekturzustand bezüglich
der Validierung der spekulativen Ausführung wiederzugeben. Um darüber hinaus einen
korrekten Architekturzustand durch das System zu erreichen, kann
der Cache-Speichercontroller weiterhin eine Bus-Aktualisierungsnachricht
generieren. Genauer gesagt, der Cache-Speichercontroller kann solche Nachrichten
für gemeinsam
genutzte Daten generieren, die geändert wurden (Block 440).
In einer Ausführung kann
eine Bus-Aktualisierungsnachricht gesendet werden, das heißt, eine
Nachricht DUpd.
-
In
Implementierungen, in denen Änderungen
auf Wortebene stattgefunden haben, können derartige Busnachrichten
veranlassen, dass ein oder mehrere Cache-Speichercontroller einen
Architekturwert der ungültigen
geänderten
Datenzeile senden (Block 460). Daraufhin kann der lokale
Cachespeicher nach Erhalt dieses Werts seine spekulativ geschriebenen
Worte mit dem Architekturwert der Zeile vereinen, um eventuell den korrekten
Architekturzustand der Zeile an den Speicher zu übergeben (Block 470).
Auch wenn diese spezielle Implementierung in der Ausführung nach 6 beschrieben
wurde, ist zu verstehen, dass der Geltungsbereich der vorliegenden
Erfindung nicht auf diesen Aspekt beschränkt ist.
-
Ein
Anwendungshandler oder ein anderer Agent kann bestimmen, ob die
spekulative Ausführung
einer Transaktion oder eines gegebenen Fadens eine Regel bezüglich der
Datenabhängigkeit
verletzt. Wenn dies der Fall ist, kann eine Busnachricht zur Annullierung
gesendet werden. In 7 ist ein Flussdiagramm eines Verfahrens
zur Annullierung einer spekulativen Operation gemäß einer
Ausführung
der vorliegenden Erfindung dargestellt. Wie aus 7 hervorgeht,
beginnt das Verfahren 500 nach Empfang einer Busnachricht
zur Annullierung (Block 510). In einer Ausführung wird
die Nachricht von einem Kern empfangen, in dem der Anwendungshandler
implementiert ist. Dennoch kann die Nachricht in anderen Ausführungen
auch von einem Cache-Speichercontroller oder einem weiteren Systemagenten
generiert werden.
-
Nach
Erhalt einer derartigen Nachricht kann ein Controller eines Cachespeichers,
in dem sich die Daten befinden auf die ein spekulativer Zugriff
erfolgt ist, den spekulativen Zustand der Cache-Speicherzeilen zurücksetzen,
auf die ein spekulativer Zugriff erfolgt ist (Block 520).
Beispielsweise können
die erste und die zweite spekulative Wortmaske für alle Cache-Speicherzeilen gelöscht werden,
auf die ein spekulativer Zugriff erfolgt ist.
-
Anschließend kann
der Cache-Speichercontroller den Zustand aller spekulativ geschriebenen
Cache-Speicherzeilen auf "Ungültig" setzen (Block 530).
Es können
demzufolge alle Cache-Speicherzeilen
ungültig
gemachten werden, für
die Flags in den zweiten spekulativen Wortmasken gesetzt sind. Dies
kann dem Setzen eines Bits "Ungültig" in einem Zustand
MESI der zugeordneten Cache-Speicherzeile entsprechen.
-
Weiterhin
mit Bezug auf 7 kann anschließend bestimmt
werden, ob die ungültig
gemachten Zeilen exklusiv genutzt wurden (Rhombus 540).
Das heißt,
es wird bestimmt, ob die ungültig
gemachten Zeilen, auf die ein spekulativer Zugriff erfolgt ist,
ausschließliches
Eigentum des lokalen Cachespeichers waren. Wenn dies nicht der Fall
ist, endet das Verfahren 500. Befand sich dagegen irgendeine
der ungültig
gemachten Zeilen im Zustand "Exklusiv", geht die Steuerung
an Block 550 über.
In diesem kann eine Busnachricht über die Freigabe (das heißt, RelOwner)
für diese
vorhergehend exklusiven Cache-Speicherzeilen gesendet werden (Block 550).
Daraufhin kann der Cache-Speichercontroller eine Busnachricht zur
Freigabe des Eigentums an der oder den zugehörigen Cache-Speicherzeilen
senden und demzufolge das Eigentum an der Speicherzeile zurückgeben.
Auch wenn in Zusammenhang mit 7 diese
spezielle Implementierung beschrieben wurde, ist zu verstehen, dass
der Geltungsbereich der vorliegenden Erfindung hierdurch nicht eingeschränkt wird
und in anderen Ausführungen
andere Formen zur Abwicklung oder Annullierung von Transaktionen
oder ungültigen spekulativen
Ausführungen
realisiert werden können.
-
In
8 und
9 werden
Zustandsübergangsdiagramme
entsprechend einer Ausführung
der vorliegenden Erfindung dargestellt. In
8 werden
die Antworten auf Ereignisse im Prozessor und in
9 die Antworten
auf Busnachrichten dargestellt. Aus Gründen der Übersichtlichkeit werden keine
transienten Zustände
dargestellt. Die Zustandsübergänge werden
gemäß folgender
Regel bezeichnet: "Ereignis
oder Nachricht/empfangene Aktionen und/oder erzeugte Nachrichten". Die am Protokoll
beteiligten und in
8 und
9 dargestellten
Zustände,
Ereignisse, Aktionen und Nachrichten sind in Tabelle 1 zusammengefasst. Tabelle 1
Zustand | Beschreibung |
M.
E. S. I | Zustände MESI
(pro Zeile): Geändert,
Exklusiv, Gemeinsam genutzt, Ungültig |
ML,
EL, SL, IL | Zustände spekulativen
Ladens (pro Wort): Wort vor dem spekulativen Laden erzeugt |
EU,
SU, IU | Zustände "Unsicher", spekulativ gespeichert
(pro Wort): Wort spekulativ geschrieben |
EUL,
SUL, IUL | Zustände Geladen
und Unsicher (pro Wort): Wort spekulativ geladen und später geschrieben |
Ereignis | Beschreibung |
Ld | Nicht
spekulatives Laden |
st | Nicht
spekulatives Speichern |
SLd | Spekulatives
Laden |
SSt | Spekulatives
Speichern |
SubW_SSt | Spekulatives
Speichern eines Teilworts |
Aktion | Beschreibung |
Tk | Buswert
nehmen und in Zeile kopieren |
Zusammenführen | Den
neuen Inhalt der Zeile mit den (unsicheren) spekulativen Werten zusammenführen |
Viol(tidprod tidcons) | Verletzungs-Handler
aufrufen auf Grund einer Verletzung der Abhängigkeit zwischen (tidprod y tidcons) |
Nachricht | Beschreibung |
BuSRd
(@line) | Bus
lesen – Anforderung
des Zeilenwerts |
BusRdX
(@line) | Exklusives
Buslesen – der
Zeilenwert wird exklusiv angefordert (sonstige Kopien ungültig machen) |
BusUpg
(@line) | Busgrad
erhöhen – sonstige
Kopien der Zeile ungültig
machen |
DRdResp
(@line) | Antwort
auf Daten lesen – Wert
der gelesenen Zeile |
DWrResp
(@line) | Antwort
auf Daten schreiben – Wert
der geschriebenen Zeile |
DWBack < (@line) | Daten
erneut schreiben – Wert
der eliminierten Zeile |
RelOwner
(@line) | Eigentum
freigeben – Rückgabe des
Eigentums an der Zeile an den Speicher |
ChkRd
(@line,Word_mask) | Lesen
prüfen – Nachweisen,
dass kein Wort in der Wortmaske geschrieben wurde |
ChkWr
(@line,Word_mask) | Schreiben
prüfen – Nachweisen,
dass kein Wort in der Wortmaske gelesen wurde |
ChkNSWr
(@line,Word_mask) | Nicht
spekulatives Schreiben prüfen – ChkWr
wurde durch eine nicht spekulative Speicherung generiert |
DUpd
(@line) | Daten
aktualisieren – Aktualisiert
den Speicher mit dem Zeilenwert ohne Freigabe des Eigentums |
DMTrsfr
(@line) | Datenspeicherübertragung – Der Speicher
erwirbt das Eigentum an der Zeile und sendet seine eigene saubere
Kopie an den Bus |
BusKill
(tid) | Annullieren – Annulliert
die (unsicheren) spekulativen Werte des zu dem Faden gehörigen Cachespeichers
tid |
BusCommit
(tid) | Übernehmen – Übernehmen
der (unsicheren) spekulativen Werte des zu dem Faden gehörigen Cachespeichers
tid |
-
In
verschiedenen Beispielen der in 8 und 9 dargestellten Übergänge wird
eine Nachricht ChkRd bei jedem spekulativen Laden mit Zugriff auf
einen Wort-Speicherplatz generiert, auf den vorher kein Zugriff
(lesen oder schreiben) durch denselben Faden erfolgt ist. Andererseits
wird die Nachricht ChkWr durch jedes spekulative Speichern auf einen
Wort-Speicherplatz erzeugt, auf den vorher nicht spekulativ geschrieben
wurde (und der demzufolge nicht unsicher ist). Wie vorstehend beschrieben
können
die Nachrichten zur Verifizierung nur beim ersten spekulativen Laden
oder Speichern auf einen Wort-Speicherplatz im Cachespeicher generiert
werden. Die Nachrichten ChkNSWr können durch jeden nicht spekulativen
Speichervorgang generiert werden (das heißt, Speicherung durch einen
nicht spekulativen Faden oder "sicheres" Speichern durch einen
beliebigen Faden).
-
Die
Verifizierung einer realen Abhängigkeit
kann immer dann ausgeführt
werden, wenn ein Cache-Speichercontroller eine Prüfnachricht
empfängt
und die Wortmaske der Nachricht mit den Bits L und U der Cache-Speicherzeile
vergleicht (zum Beispiel mit einer bitweisen Operation "UND"), auf die zugegriffen
wurde. Im allgemeinen veranlasst die Nachricht ChkRd, dass der Cache-Speichercontroller
die Wortmaske der Nachricht mit den Bits U vergleicht, während bei
Nachrichten ChkWr und ChkNSWr der Vergleich mit den Bits L erfolgt.
Im Fall eines Konflikts, das heißt, wenn das Ergebnis der bitweisen
Operation "UND" nicht Null ist,
wird eine Datenabhängigkeit
zwischen Fäden
und eine möglicherweise
daraus resultierende Verletzung festgestellt. Diese Verletzung ruft
einen Anwendungshandler mit den IDs (Bezeichnern) des produzierenden
und des verbrauchenden Fadens als Parameter auf. Wird die Verletzung
auf Grund einer Nachricht ChkNSWr generiert, kann als Fadenbezeichner
ein Sonder-ID als Parameter des erzeugenden Fadens übermittelt
werden der anzeigt, dass der erzeugende Faden nicht spekulativ ist.
-
In
verschiedenen Implementierungsformen kann die Anwendung über den
Verletzungs-Handler
für die korrekte
Annullierung der spekulativen Aktivität verantwortlich sein. In einem
Modell einer Abarbeitung spekulativer Mehrfachfäden bedeutet dies eine Überprüfung der
Reihenfolge zwischen den erzeugenden und den verbrauchenden Fäden um zu
prüfen,
ob die Verletzung durch eine Abhängigkeit
Lesen nach Schreiben verursacht wurde. Wenn dies der Fall ist, kann
der Handler eine Nachricht zur Annullierung des verbrauchenden Fadens
und aller seiner Nachfolger aussenden. Da in einem Transaktionsspeichersystem
keine Reihenfolge zwischen den Fäden
besteht, wird nur der verbrauchende Faden annulliert. Es ist zu
beachten, dass das Protokoll Mehrfachversionen (eine Version pro
Faden) des gleichen Wort-Speicherplatzes unterstützt und daher die Datenabhängigkeit
Schreiben nach Schreiben keine Verletzung verursacht.
-
Es
ist möglich,
die Zugriffe auf Teilworte besonders zu behandeln. Ein spekulatives
Speichern auf einen Speicherplatz eines Teilworts impliziert eine
Verletzung, wenn ein anderer Faden in das gleiche Wort schreibt,
da in diesem Fall die Kohärenz
des Cachespeichers nicht garantiert ist. Um diese zu garantieren,
wird durch das spekulative Speichern eines Teilworts veranlasst,
dass der Controller des zugeordneten Cachespeichers das Bit U setzt
und eine Nachricht ChkWr sendet, wie dies bei einer spekulativen
Speicheroperation der Fall ist. Darüber hinaus kann der Cache-Speichercontroller
das Bit L setzen und eine Nachricht ChkRd senden. Damit wird sichergestellt,
dass eine Verletzung der Datenabhängigkeit zwischen Fäden erkannt
wird, wenn ein anderer Faden auf den gleichen Wort-Speicherplatz
schreibt.
-
Wird
die spekulative Aktivität
bestätigt
und kein Fehler festgestellt, kann der spekulative Zustand des Speichers
in den Architekturzustand übernommen
werden. Um einen Übernahmeprozess
zu starten, wird eine Nachricht "BusCommit" (Bus Übernahme" gesendet, die den
Fadenbezeichner des zu übernehmenden
spekulativen Fadens oder des Transaktionsbereichs enthält. Wenn
der Cache-Speichercontroller die Nachricht "BusCommit" entsprechend dem in der Nachricht enthaltenen
Fadenbezeichner empfängt,
wird der Prozess zur Übernahme
des spekulativen Speichers eingeleitet. Dieser Prozess kann entsprechend
einem in
6 dargestellten Flussdiagramm
erfolgen. In der nachstehenden Tabelle 2 werden darüber hinaus
die mit der Cache-Speicherzeile in jedem der gegebenen Zustände ausgeführten Aktionen
zusammengefasst (Spalte "BusCommit"). Tabelle 2
Zustand | BusCommit | BusKill |
Nachricht | Neuer
Zustand | Nachricht | Neuer
Zustand |
IL | - | I | - | I |
SL | - | S | - | S |
EL | - | E | - | E |
ML | - | M | - | M |
IU | BusRdX | M | - | I |
SU | BusUpg | M | - | I |
EU | - | M | RelOwner | I |
IUL | BusRdX | M | - | I |
SUL | BusUpg | M | - | I |
EUL | - | M | RelOwner | I |
-
Es
ist zu beachten, dass mit dem Übernahmeprozess
ein Zurücksetzen
aller Bits L und U der Zeilen des lokalen Cachespeichers erfolgt
und der Zustand M für
diejenigen Zeilen gesetzt wird, in die ein beliebiges Wort spekulativ
geschrieben wurde (also unsicher). Zu diesem Zweck wird eine Abfrage
des lokalen Daten-Cachespeichers durchgeführt. Alle Zeilen, die sich
im Zustand SU oder im Zustand SUL befinden, bewirken eine Erhöhung des
Busgrads (BusUpg), um weitere Kopien der Zeile des Cachespeichers
ungültig
zu machen. Auf ähnliche
Weise verursachen die Zeilen im Zustand IU oder IUL die Erzeugung
einer Busnachricht für
exklusives Buslesen (BusRdX), um den Architekturwert der Zeile anzufordern
und die spekulativ geschriebenen Worte lokal zusammenzuführen. Weiterhin
wird für
die Zeilen im Zustand EU oder EUL dieser auf M geändert und keine
Busnachricht erzeugt, da die entsprechende Zeile nur lokal in diesem
Cachespeicher vorhanden ist.
-
Wenn
die Spekulation fehlschlägt,
muss die spekulative Aktivität
annulliert werden. Ein Protokoll entsprechend einer Ausführung der
vorliegenden Erfindung kann für
das Verwerfen des gesamten durch den transaktionalen Bereich oder
den annullierten Faden erzeugten spekulativen Speicherzustands verantwortlich sein.
Dies wird über
eine "BusKill" genannte Busnachricht
in einer Ausführung
implementiert, die in einer Ausführung
den Fadenbezeichner ID des zu annullierenden spekulativen Fadens
enthält.
Bei Empfang der Nachricht BusKill durch den Cache-Speichercontroller,
in welchem der Fadenbezeichner ID mit dem Fadenbezeichner der Nachricht übereinstimmt,
wird der Prozess zur Annullierung des spekulativen Speichers eingeleitet. Dieser
Prozess kann entsprechend dem in 7 gezeigten
Flussdiagramm ablaufen. Tabelle 2 enthält darüber hinaus alle mit einer Cache-Speicherzeile ausgeführten Operationen
für jeden
gegebenen Zustand (das heißt,
hier die Spalte BusKill).
-
Wie
vorstehend beschrieben beinhaltet diese Annullierung das Rücksetzen
aller Bits L und U in dem lokalen Daten-Cachespeicher. Weiterhin
werden alle Zeilen des Cachespeichers ungültig gemacht, die ein beliebiges
spekulatives (also unsicheres) Wort enthalten. Die Zeilen, auf die
nicht spekulativ zugegriffen wird, werden nicht geändert. Das
heißt,
alle Zeilen mit einem der Zustände
EU, EUL, SU, SUL, IU oder IUL wechseln in den Zustand I und die
Zeilen mit einem der Zustände
ML, EL, SL oder IL wechseln nach M, E, S und I. Es ist zu beachten,
dass die Zeilen im Zustand EU oder EUL das Eigentum an der Speicherzeile über eine
Busnachricht zur Freigabe des Eigentümers (das heißt, ein
RelOwner) zurückgeben,
wenn deren Zustand auf Ungültig
wechselt.
-
In
verschiedenen Ausführungen
erfolgt das Ordnen der Fäden
mittels Software (zum Beispiel durch einen Compiler generierter
Code), die für
das Filtern der Abhängigkeiten
zwischen den einzelnen Fäden
im Speicher bei Operationen wie Lesen nach Schreiben verantwortlich
ist.
-
Ein
Protokoll gemäß einer
Ausführung
der vorliegenden Erfindung kann ebenfalls die Abarbeitung des Transaktionsspeichers
unterstützen,
wobei die Reihenfolge der Fäden
bedeutungslos ist.
-
Es
ist möglich,
die Ausführungen
in zahlreichen Arten unterschiedlicher Systeme zu implementieren. In 10 wird
ein Blockdiagramm eines Systems entsprechend einer Ausführung der
vorliegenden Erfindung dargestellt. Wie aus 10 hervorgeht,
beinhaltet ein System für
eine Punkt-zu-Punkt-Verbindung 700 einen ersten Prozessor 770 und
einen zweiten Prozessor 780, die über eine Punkt-zu-Punkt-Verbindung 750 miteinander
gekoppelt sind. Obwohl 10 ein System für eine Punkt-zu-Punkt
Verbindung zeigt, ist zu verstehen, dass hierdurch der Geltungsbereich
der vorliegenden Erfindung nicht auf diesen Aspekt eingeschränkt wird und
das System 700 in anderen Ausführungen ein Multipunkt-Bus
oder ein sonstiges System dieser Art sein kann. Wie aus 10 hervorgeht,
kann jeder der Prozessoren 770 und 780 ein Mehrkern-Prozessor
sein, der einen ersten und einen zweiten Prozessorkern enthält (das
heißt,
Prozessorkerne 774a und 774b sowie 784a und 784b).
Die einzelnen Prozessorkerne können
jeder einen lokalen Cachespeicher beinhalten, für die ein Protokoll zur Wahrung
der Cachespeicher-Kohärenz
gemäß einer
Ausführung
der vorliegenden Erfindung implementiert ist. Demzufolge kann das
System 700 spekulative Transaktionen und Übertragungen
mit Mehrfachfäden
ausführen.
-
Der
erste Prozessor 770 beinhaltet darüber hinaus ein Speicherkontrollzentrum
(MCH) 772 und Punkt-zu-Punkt Schnittstellen (P-P) 776 und 778.
Analog dazu beinhaltet der zweite Prozessor 780 ein MCH 782 und
Schnittstellen P-P 786 und 788. Wie in 10 dargestellt
koppeln die MCH 772 und 782 die Prozessoren mit
den zugehörigen
Speichern, das heißt,
mit einem Speicher 732 und mit einem Speicher 734,
die Teile eines lokal mit den entsprechenden Prozessoren verbundenen
Hauptspeichers sein können.
-
Der
erste Prozessor 770 und der zweite Prozessor 780 können mit
einem Chipsatz 790 über
Schnittstellen P-P 752 und 754 gekoppelt sein.
Wie aus 10 hervorgeht, beinhaltet der
Chipsatz 790 Punkt-zu-Punkt Schnittstellen 794 und 798.
Darüber
hinaus umfasst der Chipsatz 790 eine Schnittstelle 792 zur
Kopplung des Chipsatzes 790 mit einem Motor zur Erzeugung
von Hochleistungsgraphiken 738. In einer Ausführung kann
ein Bus 739 "Advanced
Graphics Port (AGP)" (verbesserter
Graphikkarten-Anschluss) zur Kopplung zwischen dem Graphikmotor 738 und
dem Chipsatz 790 verwendet werden. Der Bus 739 AGP
genügt
der Accelerated Graphics Port Interface Specification, Revision
2.0 (Spezßfizierung
des verbesserten Graphikkarten Anschlusses, Revision 2.0), veröffentlicht
am 7. Mai 1998 von der Intel Corporation, Santa Clara, Kalifornien
(USA). Alternativ ist eine Kopplung dieser Komponenten über eine
Punkt-zu-Punkt Verbindung 739 möglich.
-
Der
Chipsatz 790 ist seinerseits mit einem ersten Bus 716 über eine
Schnittstelle 796 gekoppelt. In einer Ausführung kann
dieser erste Bus 716 ein "Peripheral Component Interconnect Bus
(PCI (Bus zur Verbindung peripherer Komponenten) sein, wie er in
der "PCI Local Bus
Specification, Production Version, Revision 2.1" vom Juni 1995 definiert ist oder ein
Bus wie der PCI Express Bus oder ein anderer Bus zur Zusammenschaltung
von Einund Ausgängen
(I/O) der dritten Generation sein, wobei der Geltungsbereich der
vorliegenden Erfindung nicht hierauf beschränkt wird.
-
Wie
aus 10 hervorgeht, können an den ersten Bus 716 mehrere
Ein-/Ausgabegeräte
I/O 714 zusammen mit einer Busbrücke 718 an den ersten
Bus 716 angeschlossen werden, die den ersten Bus 716 mit einem
zweiten Bus 720 koppelt. Der zweite Bus 720 kann
in einer Ausführung
ein LPC-Bus sein (Bus mit niedriger PIN-Zahl oder persönlicher
Geheimzahl). An den zweiten Bus können unterschiedliche Einrichtungen
angeschlossen sein, zum Beispiel eine Tastatur/Maus 722,
Kommunikationseinrichtungen 726 und die Datenspeichereinheit 728,
die in einer Ausführung
den Code enthalten kann. Darüber
hinaus ist es möglich,
an den zweiten Bus 720 ein Audio-Ein-/Ausgabegerät 724 anzuschließen.
-
Die
Ausführungen
können
in Form von Code implementiert und auf einem maschinenlesbaren Träger gespeichert
sein, wie zum Beispiel einem Speichermedium, auf dem Befehle gespeichert
sind, die zur Programmierung eines Systems zur Abarbeitung der Befehle
dienen können.
Das Speichermedium kann ohne Einschränkung auf die genannten flexible
Platten oder Disketten, Nur-Lese Kompakt-Disk (CD-ROMS), wieder beschreibbare
Kompakt-Disk (CD-RW), magnetooptische Platten, Halbleitereinrichtungen
wie Nur-Lesespeicher
(ROM), Schreib-Lesespeicher (RAM) wie dynamische Schreib-Lesespeicher
(DRAM), statische Schreib-Lesespeicher (SRAM), programmierbare,
löschbare
Nur-Lesespeicher
(EPROM), schnelle Speicher, programmierbare, elektrisch löschbare
Nur-Lesespeicher
(EEPROM), Magnetkarten oder optische Karten oder jedes beliebige
sonstige Medium umfassen, das zur Speicherung elektronischer Befehle
geeignet ist.
-
Obwohl
die vorliegende Erfindung in Zusammenhang mit einer begrenzten Zahl
von Ausführungen
beschrieben wurde, erkennen Fachleute auf dem Gebiet zahlreiche
Abwandlungen und Varianten derselben. Es wurde beabsichtigt, dass
die beigefügten
Patentansprüche
alle diese Abwandlungen und Varianten umfassen, insoweit diese im
tatsächlichen
Geist und Umfang der vorliegenden Erfindung enthalten sind.
-
Zusammenfassung
-
Bei
einer Ausführungsform
umfasst die vorliegende Erfindung ein Verfahren zum Empfangen einer Busnachricht
in einem ersten Cash-Speicher, die einem spekulativem Zugriff auf
einen Teil eines zweiten Cash-Speichers durch einen zweiten Faden
entspricht und ein dynamisches Bestimmen im ersten Cash-Speicher,
ob eine Abhängigkeit
zwischen Fäden
vorliegt, zwischen dem zweiten Faden und einem ersten Faden, der
mit dem ersten Cash-Speicher im Hinblick auf diesen Teil assoziiert
ist. Weitere Ausführungsformen
sind beschrieben und beansprucht.