-
GEBIET DER ERFINDUNG
-
Die vorliegende Erfindung bezieht sich generell auf Computersysteme.
-
HINTERGRUND DER ERFINDUNG
-
Prozessoren verwenden oft einen MESI-Zustandskohärenzmechanismus für Multiprozessor-Caching, wobei jede Zeile in dem Cache entweder modifiziert, exklusiv, gemeinsam genutzt oder ungültig markiert wird. Eine gemeinsam genutzte Zeile kann erst dann in eine exklusive oder modifizierte umgewandelt werden (wenn eine Speicheranweisung zum Beispiel zu einer gemeinsam genutzten Zeile zurückziehen möchte), nachdem zuerst eine Belauschung (engl. „snoop“) zu anderen Caches gesendet wurde, die alle anderen möglichen gemeinsam genutzten Zeilen in gleichgestellten Caches in ungültige umwandeln, und es dann der Zeile endlich erlaubt wurde, in eine exklusive upgegradet zu werden. Die möglichen Zustandskombinationen werden gemäß dem MESI-Zustandskohärenzmechanismus verfolgt und implementiert.
US 7 873 793 B1 beschreibt Verfahren und System zur Unterstützung spekulativer Modifikation in einem Daten-Cache. US 2005 / 0 154 831 A1 beschreibt Multiprozessorsysteme und -verfahren.
US 7 062 631 B1 beschreibt ein Verfahren und System zum Erzwingen konsistenter pro-physikalischer Seiten-Cachefähigkeitsattribute.
-
Das Problem mit einem konventionellen System ist aber, dass das System zwei Wahlmöglichkeiten hat, wenn eine Speicheranweisung eine gemeinsam genutzte Cachezeile trifft (engl. „hits“). Es kann entweder abwarten, dass alle Belauschungen abschließen, bevor es erlaubt, dass die Speicheranweisung abschließt, was die Parallelität der Maschine reduziert, oder es kann die gemeinsam genutzte Zeile hinauswerfen (engl. „evict“) und dann die Speicheranweisung zu einer ungültigen Zeile abschließen. Dies erlaubt mehr Parallelität, da der Prozessor mit der Ausführung von anderem Code fortsetzen kann, aber erlaubt nicht, dass irgendwelche spätere Zugriffe (engl. „loads“) die in der Zeile enthaltenen Daten sehen. Das Ausführen des Hinauswerfens fügt auch Latenz hinzu.
-
ZUSAMMENFASSUNG DER ERFINDUNG
-
Ausführungsforme der vorliegenden Erfindung verwenden einen spekulativen Caching-Mechanismus, wobei alle Cachezeilen mit einem MESI-Zustand (zum Beispiel modifiziert, exklusiv, gemeinsam genutzt oder ungültig) markiert werden, aber auch mit einer Mehrzahl von zusätzlichen Bits markiert werden, die sich auf den spekulativen transaktionalen Zustand der Zeile beziehen. Dies erlaubt, dass jede Transaktion atomar festgeschrieben (engl. „atomically committed) (zum Beispiel alles auf einmal gespeichert) oder zurückgerollt (zum Beispiel alle Änderungen verworfen) wird.
-
In einer Ausführungsform weist die vorliegende Erfindung ein computerimplementiertes Verfahren zur Akquirierung spekulativer Genehmigung (engl. „speculative permission acquisition“) für Zugriff auf einen gemeinsam genutzten (engl. „shared“) Speicher auf. Das Verfahren nach Anspruch 1 enthält unter anderem ein Erhalten eine Speicheranweisung (engl. „störe“) von einem Prozessorkern, eine gemeinsam genutzte Cachezeile zu modifizieren, und in Antwort auf das Erhalten der Speicheranweisung, ein Markieren der Cachezeile als spekulativ. Die Cachezeile wird dann gemäß der Speicheranweisung modifiziert. Nach Erhalt einer Modifikationsgenehmigung, kann die modifizierte Cachezeile anschließend festgeschrieben (engl „committed“) werden.
-
Das vorhergehende ist eine Zusammenfassung und enthält folglich zwangsläufig Simplifizierungen, Generalisierungen und Weglassungen von Details; Fachleute werden folglich erkennen, dass die Zusammenfassung nur illustrativ ist und nicht dazu beabsichtigt ist, in irgendeiner Weise limitierend zu sein. Andere Aspekte, erfinderische Merkmale und Vorteile der vorliegenden Erfindung, wie sie alleine von den Patentansprüchen definiert ist, werden in der nicht limitierende detaillierte Beschreibung, die unten gegeben wird, ersichtlich werden.
-
Figurenliste
-
Die vorliegende Erfindung wird in den Figuren der beigefügten Zeichnungen beispielhaft und nicht limitierend dargestellt, und in denen gleiche Bezugszeichen sich auf ähnliche Elemente beziehen.
- Die 1 zeigt ein Diagramm von einer Cachemanagementeinheit gemäß einer Ausführungsform der vorliegenden Erfindung.
- Die 2 zeigt einen Cachezeile und eine Mehrzahl von spekulativen Zustandsbits gemäß einer Ausführungsform der vorliegenden Erfindung.
- Die 3 zeigt einen Prozess zum Upgraden einer Cachezeile gemäß einer Ausführungsform der vorliegenden Erfindung.
- Die 4 zeigt einen Prozess zum Upgraden einer Cachezeile, bei dem zwei Upgrades gleichzeitig ablaufen, gemäß einer Ausführungsform der vorliegenden Erfindung.
- Die 5 zeigt ein Flussdiagramm von einem Prozess zur Akquirierung spekulativer Genehmigungen gemäß einer Ausführungsform der vorliegenden Erfindung.
- Die 6 zeigt ein Computersystem gemäß einer Ausführungsform der vorliegenden Erfindung.
-
DETAILLIERTE BESCHREIBUNG DER ERFINDUNG
-
Die 1 zeigt ein Diagramm von einer Cachemanagementeinheit gemäß einer Ausführungsform der vorliegenden Erfindung. Eine Cachemanagementeinheit 101 ist, wie in der 1 gezeigt, an einen L1-Cache 102 und einen L2-Cache 103 gekoppelt. Der L1-Cache ist an den Prozessorkern 102 gekoppelt zum kommunikativen Austauschen von Instruktionen und Daten, die die Cachezeilen aufweisen.
-
Ausführungsformen der vorliegenden Erfindung verwenden einen spekulativen Caching-Mechanismus, wobei alle Cachezeilen mit einem MESI-Zustand (zum Beispiel modifiziert, exklusiv, gemeinsam genutzt oder ungültig) markiert werden, aber auch mit einer Mehrzahl von zusätzlichen Bits markiert werden, die sich auf den spekulativen Transaktionszustand der Zeile beziehen. Dies erlaubt, dass jede Transaktion atomar festgeschrieben (zum Beispiel alles auf einmal gespeichert) oder zurückgerollt (zum Beispiel alle Änderungen verworfen) werden.
-
Die 2 zeigt eine Cachezeile 202 und eine Mehrzahl von spekulativen Zustandsbits gemäß einer Ausführungsform der vorliegenden Erfindung. In einer Ausführungsform ist dieses spekulative transaktionale Verhalten der Caches implementiert durch Hinzufügung eines spekulativen Bits, das bedeutet, dass die Zeile in der jetzigen Transaktionen modifiziert worden ist, und eines observierten Bits, das bedeutet, dass die Zeile in der jetzigen Transaktion gelesen worden ist, zu den Cachezeilen. Die spekulativen Zustandsbits (zum Beispiel spekulative und observierte Bits) werden nach einem Festschreiben (engl. „commitment“) oder Zurückrollen (engl. „rollback“) gelöscht, aber spekulative Zeilen werden auch nach einem Zurückrollen von modifizierten in ungültige umgewandelt. Jegliche modifizierte Daten, die die Transaktion vorausgehen, müssen zu einem Außen-Level-Cache (engl. „outerlevel cache“) als eine versionierte (engl. „versioned“) Zeile zurückgeschrieben werden. So lange sowohl spekulative als auch observierte Zeilen bis zum Ende der Transaktion im Cache verbleiben, wird die Transaktion folglich bei dem Sichtpunkt des Systems oder anderer Prozessoren in dem System atomar gesehen werden.
-
Wenn zum Beispiel eine transaktionale Speicheranweisung verfehlt (zum Beispiel oder eine ungültige Zeile trifft), helfen die spekulativen Zustandsbits zu sichern, dass die Transaktion nicht festgeschrieben wird, bevor exklusive Genehmigungen für die Zeile dadurch akquiriert worden sind, das Belauschungen zu jeglichen anderen Caches, die die Zeile enthalten mögen, abgeschlossen sind. Dies kann mit einer geringen Anzahl von Zustandsmaschinen oder speziellen Cachezeilen gemacht werden, die die Zeile als exklusiv aber nicht sichtbar für Belauschungen markieren. Diese Zustandsmaschinen behalten den Überblick über die Zeile bis alle Belauschungen zu anderen Caches abgeschlossen sind und markieren dann die Zeile als jetzt sichtbar für Belauschungen.
-
Folglich ist eine solche Ausführungsform konsistent mit der üblichen MESI-Regel, dass, wenn irgendeiner Cache eine Zeile als modifiziert oder exklusiv hat, dann müssen alle anderen gleichgestellten Caches die Zeile als ungültig haben. Gemäß Ausführungsformen der vorliegenden Erfindung, wenn eine Zeile modifiziert oder exklusiv und nicht sichtbar für Belauschungen ist, berechnet der Prozessor aber tatsächlich den Zustand, in dem die Zeile am Ende der Transaktion sein wird, statt die Zeile in der Tat als modifiziert oder exklusiv in dem vollen MESI-Protokoll zu markieren.
-
Zum Beispiel, wenn eine Belauschung eine observierte oder spekulative Zeile trifft, die für Belauschungen sichtbar ist, muss die jetzige Transaktion für diesen Prozessor entweder festgeschrieben oder zurückgerollt werden, bevor die Belauschung abgeschlossen werden kann. Im Allgemeinen bedeutet dies, dass Belauschungen Zurückrollungen verursachen, wenn sie observierte oder spekulative Zeilen treffen.
-
Ein spekulativer Caching-Mechanismus gemäß Ausführungsformen der vorliegenden Erfindung ist vorteilhafterweise im Stande, Begrenzungen eines konventionellen Systems zu vermeiden. Zum Beispiel, wenn eine transaktionale Speicheranweisung eine gemeinsam genutzte Zeile trifft, hatte das konventionelle System zwei Wahlmöglichkeiten: 1. Abwarten, dass alle Belauschungen abgeschlossen werden, bevor erlauben, dass die Speicheranweisung abgeschlossen wird, was die Parallelität der Maschine reduziert. 2. Hinauswerfen der gemeinsam genutzten Zeile, dann Abschließen der Speicheranweisung zu einer ungültigen Zeile. Dies erlaubt mir Parallelität, weil der Prozessor mit Ausführung von anderem Code fortsetzten kann, aber erlaubt keinen späteren Zugriffen, die in der Zeile enthaltenen Daten zu sehen. Das Ausführen des Hinauswerfens fügt auch Latenz hinzu.
-
Ein spekulativer Caching-Mechanismus gemäß Ausführungsformen der vorliegenden Erfindung stellt eine Anzahl von Vorteilen bereit. Die Hinzufügung von solchen Upgrade-Zustandsmaschinen stellt die Funktionalität bereit.
-
1. Akquirierungen von Genehmigungen kann überlappt werden für mehrere Speicheranweisungen, die gemeinsam genutzte Zeilen verfehlten oder trafen, durch Erlauben, dass die Maschine weiterhin Code abschließt bis die nächste transaktionale Abgrenzung (engl. „transactional boundary“). Dies gibt uns die beste Leistung dadurch, dass nicht auf Genehmigungsanforderungen seriell gewartet wird. Wir können auch Zugriffsverfehlen (engl. „load misses“) aussenden oder andere Operationen langer Latenz starten, ohne zuerst auf alle Belauschungen zu warten. Zusätzlich, aufgrund des Vorauslaufen-Modus unseres Prozessors, können wir sogar über die Transaktionsabgrenzung hinaus sehen, um mehrere Verfehlen-Anforderungen zu enthüllen und an äußeren Caches zu senden.
-
2. Stadt ein extra Bit für jede Cachezeile zu speichern, kann eine geringe Anzahl von Zustandsmaschinen verwaltet werden, die die Adressen verfolgen, die derzeit upgegradet werden. Diese Zustandsmaschinen müssen nicht verfolgen, wo sich die Zeile innerhalb des Caching-Systems befindet, was Speicherbedarf reduziert und bedeutet, dass die Upgrade-Zustandsmaschinen mit anderen Hinauswerfe-Zustandsmaschinen oder mit anderen Maschinen, die Cachezeilen bewegen, nicht ineinandergreifen müssen. Zusätzlich, wenn eine Upgradeanforderung an das äußere Speichersystem gesendet worden ist, besteht kein Bedürfnis mehr, die Adresse zu verfolgen. Dies erlaubt eine Erweiterung durch zwei Sätze von Zustandsmaschinen: eine, die Adressen aufbewahrt, die andere nur wartend auf antworte auf schon abgesandte Anforderungen. Der letztgenannte Satz von Zustandsmaschinen benötigt eine sehr geringe Speichermenge, was die Anzahl von Zustandselementen erheblich verkleinert, wenn mit einer Upgrade-Bit-pro-Cachezeile-Implementierung verglichen wird.
-
3. Eine Speicheranweisung, die eine gemeinsam genutzte Zeile trifft, mag eine Zeile mit einer schon ausstehenden Anforderung treffen. Da Anforderungen exklusive Genehmigungen zurückgeben oder nicht zurückgeben könnten, erlaubt das Design der Zustandsmaschine abzuwarten, dass die vorhandene Anforderung abgeschlossen wird, bevor jegliche zusätzliche Anforderungen gemacht werden, was das Anforderungsprotokoll zwischen Caches simplifiziert und redundante Anforderungen reduziert, wobei Leistung verbessert wird.
-
4. Jede Zustandsmaschine sichert, dass die jetzige Transaktion nicht abgeschlossen wird, ohne dass eine logische ODER-Operation über alle Upgrade-Bits des gesamten Cache verlangt wird. Da es sehr schwierig ist, eine ODER-Operation über viele Bits zu implementieren, verlangt die Zustandsmaschine-Lösung keine allzu schwierige Mechanismen, wie zum Beispiel eine schwierige Implementierung oder irgend eine Art anderer Maschinerie, die upgegradeten Zeilen in einen speziellen Aufbewahrungspuffer hinein bewegen würden, was Latenz hinzufügen würde.
-
5. Ein inklusives Äußerer-Cache-Design mag tatsächlich nicht benötigen, Genehmigungen in allen Fällen zu akquirieren, bevor eine Antwort auf eine dieser Upgradeanforderungen gesendet wird. Wenn der äußere Cache weiß, dass die Zeile nicht mehr in dem inneren Cache vorhanden ist, dann kann er sofort antworten. Der innere Prozessor hat seine Transaktion schon zurückgerollt und die upgegradete Zeile ungültig markiert, so dass die Antwort nichts Schädliches macht. In Fällen, in denen Prozessoren um eine Zeile kämpfen und Schwierigkeiten haben, mit ihren spekulativen Transaktionen Fortschritte zu machen, könnte dies Leistung bemerkbar fördern. Diese und die anderen oben beschriebenen Vorteile sind in beispielhaften Operationen schematisiert, die durch 3 und 4 unten beschrieben werden.
-
Die 3 stellt einen Cachezeile-Upgradeprozess gemäß einer Ausführungsform der vorliegenden Erfindung dar. Wie in der 3 gezeigt, sind zwei gemeinsam genutzten Caches dargestellt, Cache A und Cache B. Die jeweilige Cache-MESI und Cache-Transaktional sind auch gezeigt. Die 3 zeigt, dass, wenn eine Transaktion festgeschrieben wird, das Upgrade erlaubt, dass die Speicheranweisung ausgeführt wird, durch Markieren der Cachezeile als spekulativ. Das „*“ bezeichnet Zeiten während der Transaktion, wo Festschreibungen nicht erlaubt sind.
-
Die 4 stellt einen Cachezeile-Upgradeprozess dar, bei dem zwei Upgrades gleichzeitig ablaufen, gemäß einer Ausführungsform der vorliegenden Erfindung. Wie in der 4 gezeigt, sind zwei gemeinsam genutzten Caches dargestellt, Cache A und Cache B. Die jeweilige Cache-MESI und Cache-Transaktional sind auch gezeigt. Zwei Upgrades sind gezeigt, indem sie die Transaktion abschließen. Wie mit 3, zeigt die 4, dass, wenn eine Transaktion festgeschrieben wird, das Upgrade erlaubt, dass die Speicheranweisung ausgeführt wird, durch Markieren der Cachezeile als spekulativ.
-
Die 5 zeigt ein Flussdiagramm von einem Prozess zur Akquirierung spekulativer Genehmigungen gemäß einer Ausführungsform der vorliegenden Erfindung. Wie in der 5 gezeigt, zeigt der Prozess 500 die Übersichtsschritte des Prozesses zur Akquirierung spekulativer Genehmigungen für die Akquirierung von Genehmigungen zum Modifizieren von Cachezeilen.
-
Der Prozess 500 beginnt im Schritt 501, in dem eine Speicheranweisung von einem Prozessorkern erhalten wird, eine gemeinsam genutzte Cachezeile zu modifizieren. Im Schritt 502 wird die Cachezeile als spekulativ markiert. Im Schritt 503 wird die Cachezeile gemäß der Speicheranweisung modifiziert. Im Schritt 504, nach Erhalt einer Modifikationsgenehmigung, Festschreiben der modifizierte Cachezeile. Im Schritt 505, falls die Modifikationsgenehmigung nicht erhalten worden ist, Detektieren, ob eine Cachemanagementverletzung stattgefunden hat. Eine solche Cachemanagementverletzung kann zum Beispiel eine MESI-Verletzung sein. Im Schritt 506 initiiert der Prozess 500 eine Wiederherstellung nach Detektion einer Cachemanagementverletzung.
-
Computersvstemplattform
-
Die 6 zeigt ein Computersystem 600 gemäß einer Ausführungsform der vorliegenden Erfindung. Das Computersystem 600 zeigt die Bauteile eines einfachen Computersystems gemäß Ausführungsformen der vorliegenden Erfindung, das die Ausführungsplattform für bestimmte hardwarebasierte und softwarebasierte Funktionalität bereitstellt. Das Computersystem 600 weist generell zumindest eine CPU 601, einen Systemspeicher 615 und zumindest eine Grafikverarbeitungseinheit (GPU) 610 auf. Die CPU 601 kann an den Systemspeicher 615 über eine(n) Brückenbauteil/Speichersteuerung (nicht gezeigt) gekoppelt sein oder sie kann direkt an den Systemspeicher 615 über eine Speichersteuerung (nicht gezeigt), die intern in der CPU 601 ist, gekoppelt sein. Die GPU 610 ist an eine Anzeigevorrichtung 612 gekoppelt. Die GPU 610 ist gezeigt aufweisend einen Allokation/De-Allokations-Bauteil 620 für Just-in-Time-Registerallokation für einen Prozessor mit mehreren Threads. Eine Registerdatei 627 und ein beispielhaftes eine der Mehrzahl von Registern (zum Beispiel Register 625), dass die Registerdatei enthält, ist auch innerhalb der GPU 610 gezeigt. Eine oder mehrere zusätzliche GPUs können optional an das System 600 gekoppelt sein, um dessen Computerkraft weiter zu erhöhen. Die GPU(s) 610 ist (sind) an die CPU 601 und den Systemspeicher 615 gekoppelt. Das System 600 kann zum Beispiel als ein Desktopcomputersystem oder ein Servercomputersystem implementiert sein, das eine kraftvolle Mehrzweck-CPU 601 hat, die an eine dedizierte grafikrendernde GPU 610 gekoppelt ist. In einer solchen Ausführungsform können Bauteile inkludiert sein, die periphere Busse, spezialisierten Grafikspeicher, I/O-Vorrichtungen und ähnliches hinzufügen. In ähnlicher Weise kann das System 600 als eine Handheld-Vorrichtung (zum Beispiel Mobiltelefon etc.) oder als eine Set-Top-Videospielkonsole implementiert sein, wie zum Beispiel das Xbox®, das von Microsoft Corporation in Redmond, Washington erhältlich ist, oder die PlayStation3®, die von Sony Computer Entertainment Corporation in Tokio, Japan erhältlich ist.
-
Es sollte verstanden werden, dass die GPU 610 implementiert werden kann als ein diskretes Bauteil, als eine diskrete Grafikkarte, die zum Koppeln an das Computersystem 600 über einen Anschluss (zum Beispiel AGP-Slot, PCI-Express-Slot etc.) ausgelegt ist, als ein diskretes Integrierter-Schaltkreis-Die (das zum Beispiel direkt an einer Hauptplatine montiert ist) oder als eine integrierte GPU, die innerhalb des Integrierter-Schaltkreis-Die eines Computersystem-Chipsatzbauteils (nicht gezeigt) inkludiert ist. Zusätzlich kann ein lokaler Grafikspeicher 614 inkludiert sein für die GPU 610 zum Speichern von Grafikdaten hoher Bandweite.