DE112019000629B4 - Koordination von cacheoperationen - Google Patents

Koordination von cacheoperationen Download PDF

Info

Publication number
DE112019000629B4
DE112019000629B4 DE112019000629.0T DE112019000629T DE112019000629B4 DE 112019000629 B4 DE112019000629 B4 DE 112019000629B4 DE 112019000629 T DE112019000629 T DE 112019000629T DE 112019000629 B4 DE112019000629 B4 DE 112019000629B4
Authority
DE
Germany
Prior art keywords
memory
coherency
processor
line
copy
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
DE112019000629.0T
Other languages
English (en)
Other versions
DE112019000629T5 (de
Inventor
Burkhard Steinmacher-Burow
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of DE112019000629T5 publication Critical patent/DE112019000629T5/de
Application granted granted Critical
Publication of DE112019000629B4 publication Critical patent/DE112019000629B4/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0817Cache consistency protocols using directory methods
    • G06F12/0822Copy directories
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0817Cache consistency protocols using directory methods
    • G06F12/0828Cache consistency protocols using directory methods with concurrent directory accessing, i.e. handling multiple concurrent coherency transactions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0808Multiuser, multiprocessor or multiprocessing cache systems with cache invalidating means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0831Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
    • G06F12/0833Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means in combination with broadcast means (e.g. for invalidation or updating)
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/522Barrier synchronisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/084Multiuser, multiprocessor or multiprocessing cache systems with a shared cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1048Scalability
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/62Details of cache specific to multiprocessor cache arrangements
    • G06F2212/621Coherency control relating to peripheral accessing, e.g. from DMA or I/O device

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Multi Processors (AREA)

Abstract

Verfahren zum Koordinieren einer Ausführung einer Anweisungsabfolge, die eine Mehrzahl von Anweisungen aufweist, durch eine Prozessoreinheit (246) eines kohärenten, gemeinsam genutzten Arbeitsspeichersystems (200), wobei die Prozessoreinheit funktionsmäßig mit einem Prozessorcache (204) verbunden ist, wobei das Verfahren aufweist:Ausführen einer Anweisung der Anweisungsabfolge durch die Prozessoreinheit, wobei die Ausführung der Anweisung die Prozessoreinheit veranlasst, eine Kopie einer Arbeitsspeicherzeile eines Hauptarbeitsspeichers (277) des gemeinsam genutzten Arbeitsspeichersystems in den Prozessorcache zu füllen;Empfangen (302) einer Nachricht, die Markierungsinformationen beinhaltet, die anzeigen, ob Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg bestätigt ist, durch die Prozessoreinheit von einer Steuereinheit (272), die als Teil eines gemeinsam genutzten Arbeitsspeichers (214) enthalten ist, wobei die Steuereinheit eine Verzeichnistabelle (274) von Arbeitsspeicherzeilen-Einträgen und eine Übergangstabelle (276) aufrechterhält;nach dem Erkennen (304), dass die empfangenen Markierungsinformationen anzeigen, dass Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile unbestätigt ist, Markieren (306) der betreffenden Arbeitsspeicherzeile durch die Prozessoreinheit;nach dem Erkennen (304), dass die empfangenen Markierungsinformationen anzeigen, dass die Weitergabe der Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile bestätigt ist, Entfernen der Markierung (308) der jeweiligen Arbeitsspeicherzeile durch die Prozessoreinheit; undnach dem Ausführen einer Arbeitsspeicherbarriereanweisung der Anweisungsabfolge Verhindern (300) einer Vollendung der Ausführung der Arbeitsspeicherbarriereanweisung durch die Prozessoreinheit, während die Arbeitsspeicherzeile markiert ist.

Description

  • HINTERGRUND
  • Die vorliegende Offenbarung betrifft das Gebiet der Computersysteme. Insbesondere betrifft die Offenbarung ein Verfahren zum Koordinieren einer Ausführung einer Anweisungsabfolge, die eine Mehrzahl von Anweisungen aufweist, durch eine Prozessoreinheit eines kohärenten, gemeinsam genutzten Arbeitsspeichersystems, eine Prozessoreinheit eines kohärenten, gemeinsam genutzten Arbeitsspeichersystems, ein Verfahren zum Verwalten eines Kohärenzverzeichnisses, das Arbeitsspeicherkohärenz eines gemeinsam genutzten Arbeitsspeichersystems realisiert, ein Kohärenzverzeichnis, das Arbeitsspeicherkohärenz eines gemeinsam genutzten Arbeitsspeichersystems realisiert, und ein kohärentes, gemeinsam genutztes Arbeitsspeichersystem, das ein Kohärenzverzeichnis aufweist, das Arbeitsspeicherkohärenz des gemeinsam genutzten Arbeitsspeichersystems realisiert.
  • Gemeinsam genutzte Arbeitsspeichersysteme weisen eine Mehrzahl von Prozessoren auf, denen allen ein Arbeitsspeicherzugriff bereitgestellt ist, wodurch die Datenverarbeitungseffizienz verbessert wird. Ein gemeinsam genutzter Arbeitsspeicher kann für eine Mehrzahl von Prozessoren einen gleichzeitigen Zugriff auf dieselben Daten bereitstellen, wodurch ein Speichern redundanter Datenkopien vermieden und Datenübertragung zwischen den Prozessoren ermöglicht werden. Das gemeinsam genutzte Arbeitsspeichersystem stellt z.B. einen Hauptarbeitsspeicher bereit, auf den eine Mehrzahl von Prozessoren zugreifen kann. Um für die Prozessoren einen schnellen Zugriff auf Arbeitsspeicherzeilen des Hauptarbeitsspeichers zu ermöglichen, kann eine Arbeitsspeicherarchitektur eines derartigen gemeinsam genutzten Arbeitsspeichersystems ferner eine Mehrzahl von Prozessorcaches zum Zwischenspeichern von Daten aufweisen, die durch die Prozessoren verarbeitet werden sollen. Zum Beispiel kann jeder Prozessor funktionsmäßig mit einem oder mehreren Prozessorcaches verbunden sein.
  • Bei einem gemeinsam genutzten Arbeitsspeichersystem mit einer Mehrzahl von Prozessorcaches besteht jedoch das Risiko von Komplikationen, die aufgrund einer fehlenden Datenkohärenz auftreten können. Sobald in einem in der Prozessorcaches enthaltene Daten aktualisiert werden, muss sichergestellt werden, dass alle übrigen Prozessorcaches beim Verarbeiten derselben Daten die aktualisierten Daten verwenden, um zu vermeiden, dass unterschiedliche Prozessoren inkohärente Daten verwenden. Mit anderen Worten, Weitergabe von Kohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg muss sichergestellt werden, um Kohärenz im gesamten System herzustellen.
  • Um zu vermeiden, dass ein Prozessor veraltete Daten verwendet, die in der Zwischenzeit geändert wurden, wird eine Ordnungseinschränkung bei Cacheoperationen benötigt. Ein streng geordnetes Arbeitsspeichermodell schreibt vor, dass Änderungen an den Werten gemeinsam genutzter Variabler stets für die anderen Threads eines ausgeführten Multithreading-Programms sichtbar sein müssen. Mit anderen Worten, das Ordnen der Arbeitsspeicheroperationen muss im Voraus definiert werden, ohne Ausnahmen zuzulassen, um Konkurrenzsituationen zu vermeiden. Ein streng geordnetes Modell ist jedoch unter Umständen nicht flexibel, was zu einer Begrenzung der Verarbeitungseffizienz führt. Im Gegensatz hierzu kann die Verarbeitungseffizienz verbessert werden, indem eine Lockerung der strengen Ordnung zugelassen wird. Es können Anweisungen vorliegen, die parallel oder sogar in einer willkürlichen Reihenfolge ausgeführt werden können, ohne dass dadurch Probleme verursacht oder eine Konkurrenzsituation herbeigeführt werden. Arbeitsspeichermodelle, die eine Lockerung der Ordnung zulassen, werden als schwach geordnete Arbeitsspeichermodelle bezeichnet. Um nach wie vor ein gewisses Maß an Ordnung aufrechtzuerhalten, geben schwach geordnete Arbeitsspeichermodelle Arbeitsspeicherbarrieren vor, die über spezielle, eindeutig definierte Arbeitsspeicherbarriereanweisungen hergestellt werden. Eine Arbeitsspeicherbarriereanweisung definiert einen Punkt in eine Anweisungsabfolge, bei dem Kohärenz sichergestellt und gegebenenfalls eine Synchronisierung durchgeführt werden müssen. Ein derartiges schwaches Arbeitsspeichermodell schreibt vor, dass Änderungen an den Werten gemeinsam genutzter Variabler nur für andere Threads sichtbar gemacht werden müssen, wenn eine derartige Arbeitsspeicherbarriere erreicht ist.
  • Schwach geordnete Arbeitsspeichermodelle können beim Optimieren einer Anweisungsabfolge einen höheren Freiheitsgrad bereitstellen. Es muss lediglich sichergestellt sein, dass Werte möglicherweise gemein genutzter Variablen an Arbeitsspeicherbarrieren sowohl in der optimierten als auch in der nicht optimierten Anweisung garantiert gleich sind. Insbesondere kann ein Neuordnen von Anweisungen in einem Block von Anweisungen als sicher angenommen werden, der keine Arbeitsspeicherbarriere enthält.
  • Um Arbeitsspeicherkohärenz gemeinsam genutzter Arbeitsspeichersysteme sicherzustellen und die Leistungsfähigkeit zu verbessern, besteht ein kontinuierlicher Bedarf, die Realisierung und das Verwalten von Arbeitsspeicherbarrieren zu verbessern.
  • Die Druckschrift US 2016 / 0 026 571 A1 betrifft eine Informationsverarbeitungsvorrichtung, die eine Vielzahl von Prozessoren, einschließlich eines Prozessors auf der Acquire-Seite und eines Prozessors auf der Release-Seite, und einen gemeinsamen Speicher beinhaltet. Der Prozessor auf der Acquire-Seite und der Prozessor auf der Release-Seite enthalten einen Cache, eine Speicherzugriffssteuereinheit im Prozessor auf der Release-Seite, die so konfiguriert ist, dass sie einen StoreFence-Befehl ausgibt, um eine Garantie für den Abschluss der Cache-Invalidierung durch den Prozessor auf der Acquire-Seite anzufordern, eine Speicherzugriffssteuereinheit in dem Prozessor auf der Acquire-Seite, die so konfiguriert ist, dass sie als Reaktion auf den StoreFence-Befehl einen LoadFence-Befehl ausgibt, um den Abschluss der Cache-Invalidierung gemäß der Invalidierungsanforderung aus dem gemeinsam genutzten Speicher nach Abschluss eines Prozesses für die Cache-Invalidierung zu garantieren, und eine Invalidierungsanforderungssteuereinheit, die so konfiguriert ist, dass sie einen Prozess zum Invalidieren des Caches gemäß der Invalidierungsanforderung aus dem gemeinsam genutzten Speicher durchführt.
  • Die Druckschrift US 5 848 283 A betrifft ein Verfahren und System zur effizienten Aufrechterhaltung von Datenkohärenz in einem Multiprozessor-Datenverarbeitungssystem mit mehreren Prozessoren, die über einen gemeinsamen Bus miteinander verbunden sind. Jedes Mal, wenn versucht wird, ausgewählte Daten durch einen der Prozessoren zu ändern, wird ein Multistate-Bussynchronisationsflag im initiierenden Prozessor eingerichtet. Eine Busoperationsanforderung, die für die Art der Datenänderung geeignet ist, wird dann von einem Cache, der mit dem initiierenden Prozessor verbunden ist, an eine mit diesem verbundene Speicherwarteschlange ausgegeben. Die Busoperationsanforderung wird dann von der Speicherwarteschlange auf einer opportunistischen Basis auf den gemeinsamen Bus übertragen, wodurch zusätzliche Cache-Operationen während der Anhängigkeit der Busoperationsanforderung stattfinden können. Eine erfolgreiche Geltendmachung der Busoperationsanforderung, die anzeigt, dass keine Kohärenzprobleme in Bezug auf andere Prozessoren bestehen, führt zu einer Änderung des Zustands des Multistate-Bussynchronisationsflags, was eine Änderung der ausgewählten Daten ermöglicht. Gelingt es nicht, die Busbetriebsanforderung erfolgreich durchzusetzen, wird die Busbetriebsanforderung automatisch erneut gestellt, wodurch die Fähigkeit des Systems, die Datenkohärenz aufrechtzuerhalten, erheblich verbessert wird.
  • Die Druckschrift US 6 088 769 A betrifft ein Verfahren und Vorrichtung zur Aufrechterhaltung der Kohärenz zwischen gemeinsam genutzten Daten, die in einer Vielzahl von Speichervorrichtungen gespeichert sind, wobei sich jede Speichervorrichtung in einem anderen Knoten innerhalb eines eng gekoppelten Multiprozessorsystems befindet. Jeder Knoten enthält eine „lokale Kohärenzeinheit“ und einen zugehörigen Prozessor. Jedem Speicher/Prozessor-Paar ist eine Cache-Einheit zugeordnet. Jede lokale Kohärenzeinheit verwaltet eine Tabelle, die angibt, ob sich die aktuellste Kopie der im Knoten gespeicherten Daten im lokalen Speicher, im lokalen Cache oder in einem nichtlokalen Cache befindet. Die vorliegende Erfindung umfasst eine „globale Kohärenzeinheit“, die mit jedem Knoten über die logische Verbindung verbunden ist. Die globale Kohärenzeinheit umfasst eine Verbindungsüberwachungsvorrichtung und eine globale Kohärenztabelle. Wenn Daten, die sich im Speicher eines ersten Knotens befinden, an einen zweiten Knoten übertragen werden, aktualisiert die Verbindungsüberwachungsvorrichtung die globale Kohärenztabelle, um anzuzeigen, dass die Daten gemeinsam genutzt werden. Die globale Kohärenztabelle gibt vorzugsweise auch an, in welchem Knoten sich eine Kopie der aktuellsten Daten befindet.
  • Die Druckschrift US 6 356 983 B1 betrifft ein Cache-Kohärenzverzeichnis für ein Multiprozessor-Computersystem mit gemeinsamem Speicher. Jeder cachefähigen Speicherstelle ist eine Datenstruktur zugeordnet, wobei die Datenstruktur Stellen zum Speichern von Zustandswerten umfasst, die einen exklusiven Zustand, einen gemeinsam genutzten Zustand, einen nicht zwischengespeicherten Zustand, einen belegten Zustand, einen belegten nicht zwischengespeicherten Zustand, einen gesperrten Zustand und einen anhängigen Zustand anzeigen. Der belegte Zustand und der anhängige Zustand arbeiten zusammen, um eine Cache-Zeile für die zukünftige Verwendung durch einen Prozessor zu reservieren, während die Cache-Zeile gerade von einem oder mehreren anderen Prozessoren verwendet wird.
  • Die Druckschrift US 8 281 079 B2 betrifft Multiprozessorsysteme und -verfahren, die einen Pre-Fetch-Puffer verwenden, um einem Quellprozessor als Reaktion auf eine Anforderung Datenfüllungen zu liefern. Ein Pre-Fetch-Puffer ruft Daten als nicht zwischengespeicherte Datenfüllung ab. Der Quellprozessor verarbeitet die Daten als Reaktion auf eine Quellanforderung.
  • KURZDARSTELLUNG
  • Verschiedene Ausführungsformen stellen ein Verfahren zum Koordinieren einer Ausführung einer Anweisungsabfolge, die eine Mehrzahl von Anweisungen aufweist, durch eine Prozessoreinheit eines kohärenten, gemeinsam genutzten Arbeitsspeichersystems bereit, eine Prozessoreinheit eines kohärenten, gemeinsam genutzten Arbeitsspeichersystems, ein Verfahren zum Verwalten eines Kohärenzverzeichnisses, das eine Arbeitsspeicherkohärenz eines gemeinsam genutzten Arbeitsspeichersystems realisiert, ein Kohärenzverzeichnis, das die Arbeitsspeicherkohärenz eines gemeinsam genutzten Arbeitsspeichersystems realisiert, und ein kohärentes, gemeinsam genutztes Arbeitsspeichersystem, das ein Kohärenzverzeichnis aufweist, das die Arbeitsspeicherkohärenz des gemeinsam genutzten Arbeitsspeichersystems realisiert. Vorteilhafte Ausführungsformen sind in den Unteransprüchen beschrieben. Ausführungsformen der vorliegenden Erfindung können frei miteinander kombiniert werden, sofern sie sich nicht gegenseitig ausschließen.
  • Bei einem Aspekt betrifft die Erfindung ein Verfahren nach dem Anspruch 1 zum Koordinieren eine Ausführung einer Anweisungsabfolge, die eine Mehrzahl von Anweisungen aufweist, durch eine Prozessoreinheit eines kohärenten, gemeinsam genutzten Arbeitsspeichersystems. Die Prozessoreinheit ist funktionsmäßig mit einem Prozessorcache verbunden. Eine Anweisung der Anweisungsabfolge wird durch die Prozessoreinheit ausgeführt. Die Ausführung der Anweisung veranlasst die Prozessoreinheit, eine Kopie einer Arbeitsspeicherzeile eines Hauptarbeitsspeichers des gemeinsam genutzten Arbeitsspeichersystems in den Prozessorcache zu füllen. Die Arbeitsspeicherzeile wird durch die Prozessoreinheit markiert, nachdem erste Markierungsinformationen erkannt wurden, die anzeigen, dass Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile unbestätigt ist. Die Markierung der markierten Arbeitsspeicherzeile wird durch die Prozessoreinheit entfernt, nachdem zweite Markierungsinformationen erkannt wurden, die anzeigen, dass die Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile bestätigt ist. Nach der Ausführung einer Arbeitsspeicherbarriereanweisung der Anweisungsabfolge durch die Prozessoreinheit verhindert die Prozessoreinheit eine Vollendung der Ausführung, während die Arbeitsspeicherzeile markiert ist.
  • Ausführungsformen können die nützliche Wirkung haben, dass die Prozessoreinheit in die Lage versetzt wird, effizient sicherzustellen, dass die Ausführung der Anweisungsabfolge angehalten wird, sobald die Arbeitsspeicherbarriereanweisung erreicht ist, d.h. in dem Fall ausgeführt wird, dass Weitergabe von Kohärenz noch nicht bestätigt wurde. Das Markieren der Arbeitsspeicherzeile zeigt an, dass die Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile unbestätigt ist. Mit anderen Worten, das Markieren der Arbeitsspeicherzeile zeigt an, dass keine Informationen verfügbar sind, ob die Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile hergestellt ist. Für den Fall, dass die Arbeitsspeicherzeile nicht markiert ist, liegen keine Probleme hinsichtlich der Kohärenz vor, aber die Weitergabe der Kohärenz wurde stattdessen ausdrücklich und definitiv bestätigt, und es ist kein Anhalten notwendig. Für den Fall, dass die Arbeitsspeicherzeile markiert ist, muss auf eine ausdrückliche Bestätigung gewartet werden, und ein Anhalten ist notwendig. Eine derartige Bestätigung kann z.B. durch ein Verzeichnis bereitgestellt werden, das eine auf Verzeichnissen beruhende Kohärenz des gemeinsam genutzten Arbeitsspeichersystems realisiert, oder durch Antworten der übrigen Prozessoreinheiten des gemeinsam genutzten Arbeitsspeichersystems auf eine Anforderung hinsichtlich der Herstellung von Kohärenz, die mittels Rundsenden durch eine Prozessoreinheit verbreitet wird, die das Füllen der Arbeitsspeicherzeile durchführt. Da nur Arbeitsspeicherzeilen markiert sind, für die die Weitergabe von Kohärenz unbestätigt ist, d.h. ein Indikator, der als Markierung registriert ist, kann lokaler Arbeitsspeicherplatz der Prozessoreinheit gespart werden.
  • Die Ausführung darf nur unter der Bedingung fortgesetzt werden, dass die Arbeitsspeicherzeile nicht markiert ist, d.h., dass bestätigt ist, dass die Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg weitergegeben ist. Eine Weitergabe der Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg bedeutet, dass Kohärenz des gemeinsam genutzten Arbeitsspeichersystems in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile in den Prozessorcache hergestellt wird. Das Koordinieren der Ausführung einer Anweisungsabfolge wird durch eine einzelne Prozessoreinheit realisiert, z.B. durch einen Prozessorchip oder einen Prozessorkern. Daher kann das Verfahren für eine auf Verzeichnissen beruhende Kohärenz sowie für eine auf Rundsenden (Rundsenden) beruhende Kohärenz verwendbar sein.
  • Gemäß Ausführungsformen wird die Vollendung der Ausführung der Arbeitsspeicherbarriereanweisung verhindert, bis die Markierungen aller Arbeitsspeicherzeilen entfernt sind, die zuvor durch die Prozessoreinheit markiert wurden. Ausführungsformen können die nützliche Wirkung haben, dass das Entfernen der Markierung einer einzelnen Arbeitsspeicherzeile eine notwendige Voraussetzung zur Fortsetzung der Ausführung der Arbeitsspeicherbarriereanweisung ist. Als hinreichende Bedingung kann realisiert sein, dass die Markierungen aller zuvor durch die Prozessoreinheit markierten Arbeitsspeicherzeilen entfernt sind, d.h., dass die Prozessoreinheit weder markierte Arbeitsspeicherzeilen noch Markierungen von Arbeitsspeicherzeilen aufweist. Daher können Anweisungen, die ein Füllen einer Kopie einer Arbeitsspeicherzeile in den Prozessorcache bewirken, ohne Berücksichtigung einer Arbeitsspeicherkohärenz frei ausgeführt werden, bis die Arbeitsspeicherbarriereanweisung erreicht ist. Sobald die Arbeitsspeicherbarriereanweisung erreicht ist, muss Arbeitsspeicherkohärenz hergestellt und aktiv bestätigt werden, damit die Arbeitsspeicherbarriereanweisung fortgesetzt wird. Arbeitsspeicherkohärenz kann über das gemeinsam genutzte Arbeitsspeichersystem hinweg weitergegeben werden, bevor die Arbeitsspeicherbarriereanweisung ausgeführt wird. Die Arbeitsspeicherbarriereanweisung stellt jedoch einen Punkt in der Anweisungsabfolge dar, an dem verlangt wird, dass die Weitergabe von Kohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf alle Füllungen von Kopien von Arbeitsspeicherzeilen in den Prozessorcache vollendet worden sein muss. Die jeweilige Vollendung kann sichergestellt werden, indem eine ausdrückliche Bestätigung des erfolgreichen Weitergebens verlangt wird. Vor der Ausführung der Arbeitsspeicherbarriere kann durch den Prozessor eine Kenntnis über die Weitergabe von Kohärenz hergestellt werden, muss aber nicht hergestellt werden.
  • Gemäß Ausführungsformen weist das Markieren der Arbeitsspeicherzeile ein Hinzufügen einer Kennung der Arbeitsspeicherzeile zu einem Puffer der Prozessoreinheit auf. Das Entfernen der Markierung der markierten Arbeitsspeicherzeile weist das Löschen der Kennung der Arbeitsspeicherzeile aus dem Puffer der Prozessoreinheit auf. Ausführungsformen können die nützliche Wirkung haben, dass der Puffer einen direkten Überblick bereitstellen kann, ob Arbeitsspeicherzeilen vorliegen, für die eine notwendige Bestätigung der Weitergabe von Kohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg nach wie vor fehlt. Der Puffer kann die Markierungen z.B. in Form eines ungeordneten Satzes von Indikatoren bereitstellen. Für den Fall, dass im Puffer ein Indikator enthalten ist, der eine Arbeitsspeicherzeile anzeigt, wurde Weitergabe von Kohärenz für die jeweilige Arbeitsspeicherzeile noch nicht bestätigt. Für den Fall, dass für eine bestimmte Arbeitsspeicherzeile kein Indikator im Puffer enthalten ist, wurde Weitergabe von Kohärenz für die jeweilige Arbeitsspeicherzeile bestätigt. Markierungen können gesetzt werden, indem Indikatoren hinzugefügt werden, die dem Puffer die zu markierenden Arbeitsspeicherzeilen anzeigen. Daher handelt es sich bei dem Puffer um einen Puffer von nicht weitergegebenen Arbeitsspeicherzeilen.
  • Gemäß Ausführungsformen wird die Vollendung der Ausführung der Arbeitsspeicherbarriereanweisung verhindert, bis der Puffer der Prozessoreinheit leer ist. Ausführungsformen können nützliche Wirkung haben, dass sie eine schnelle und effektive Realisierung einer Kohärenzprüfung in dem Fall bereitstellen, dass eine Arbeitsspeicherpufferanweisung ausgeführt wird, die eine Kohärenzprüfung erfordert. Für den Fall, dass der Puffer keine Indikatoren aufweist, wurde Kohärenz für jede Arbeitsspeicherzeile hergestellt und bestätigt, die zuvor durch die Prozessoreinheit in den Prozessorcache gefüllt wurde. Für den Fall, dass der Puffer nach wie vor Indikatoren aufweist, wartet die Prozessoreinheit, bis Kohärenz für diese verbliebenen Indikatoren bestätigt ist und der Puffer leer ist. Daher kann sichergestellt werden, dass für eine nach der Arbeitsspeicherbarriereanweisung ausgeführte Anweisung der Anweisungsabfolge das gemeinsam genutzte Arbeitsspeichersystem in Bezug auf alle Arbeitsspeicherzeilen kohärent ist, von denen zuvor Kopien in den Prozessorcache gefüllt wurden.
  • Gemäß Ausführungsformen weisen Nachrichten, die Änderungen des Inhalts des Prozessorcache betreffen und durch die Prozessoreinheit verarbeitet werden, ein Kohärenzweitergabefeld auf. Das Kohärenzweitergabefeld weist eines aus Folgendem auf: Markierungsinformationen, die anzeigen, dass Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem in Bezug auf die Änderung unbestätigt ist, Markierungsinformationen, die anzeigen, dass Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem in Bezug auf die Änderung bestätigt ist, oder Markierungsinformationen, die anzeigen, dass weder eine Aktion zum Markieren noch zum Entfernen von Markierungen erforderlich ist.
  • Ausführungsformen können die nützliche Wirkung haben, dass eine effiziente Datenübertragung zwischen der Prozessoreinheit und dem Rest des gemeinsam genutzten Arbeitsspeichersystems ermöglicht wird, wodurch Rückmeldungen hinsichtlich des Füllens der Kopie der Arbeitsspeicherzeile in den Prozessorcache und der Weitergabe von Kohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile in den Prozessorcache bereitgestellt werden. Zum Beispiel kann die Prozessoreinheit einen exklusiven Schreibzugriff auf eine Arbeitsspeicherzeile des Hauptarbeitsspeichers anfordern. Für den Fall eines Fehlschlags der Anforderung im Prozessorcache kann eine Anforderung an ein Kohärenzverzeichnis gesendet oder über das gemeinsam genutzte Arbeitsspeichersystem hinweg mittels Rundsenden verbreitet werden. Die Anforderung kann Markierungsinformationen aufweisen, die anzeigen, dass keine Aktionen zum Markieren oder Entfernen von Markierungen notwendig sind. Bis jetzt wurde lediglich eine Anforderung gesendet, ohne tatsächlich ein Füllen der Arbeitsspeicherzeile in den Prozessorcache einzuleiten. Eine durch die Prozessoreinheit empfangene Antwort auf die Anforderung kann eine Kopie der angeforderten Daten aufweisen, z.B. eine exklusive Schreibkopie, die der empfangende Prozessor in den Prozessorcache füllt. Die Antwort kann Markierungsinformationen aufweisen, die anzeigen, dass Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf die Änderung unbestätigt ist. Nachdem Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg hergestellt wurde, z.B. durch Invalidieren gemeinsam genutzter Lesekopien der angeforderten Arbeitsspeicherzeile, die in Prozessorcaches weiterer Prozessoreinheiten enthalten ist, können die Invalidierungen durch die weiteren Prozessoreinheiten bestätigt werden, die diese ausführen. Die Bestätigung kann an die Prozessoreinheit gesendet werden, die die Kopie der Arbeitsspeicherzeile in den Prozessorcache gefüllt hat, die in einer Nachricht in Form eines Befehls enthalten ist, der ein Entfernen einer Markierung der jeweiligen Arbeitsspeicherzeile anweist, indem Markierungsinformationen bereitgestellt werden, die anzeigen, dass Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf die Änderung bestätigt ist.
  • Bei einem weiteren Aspekt betrifft die Erfindung eine Prozessoreinheit nach Anspruch 11 eines kohärenten, gemeinsam genutzten Arbeitsspeichersystems. Die Prozessoreinheit ist funktionsmäßig mit einem Prozessorcache verbunden und so konfiguriert, dass eine Ausführung einer Anweisungsabfolge koordiniert wird, die eine Mehrzahl von Anweisungen aufweist. Die Koordination weist eine Ausführung einer Anweisung der Anweisungsabfolge auf. Die Ausführung der Anweisung veranlasst die Prozessoreinheit, eine Kopie einer Arbeitsspeicherzeile eines Hauptarbeitsspeichers des gemeinsam genutzten Arbeitsspeichersystems in den Prozessorcache zu füllen. Die Korrelation weist ferner ein Markieren der jeweiligen Arbeitsspeicherzeile auf, nachdem Markierungsinformationen erkannt wurden, die anzeigen, dass Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile unbestätigt ist. Nach Erkennung von Markierungsinformationen, die anzeigen, dass die Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile bestätigt ist, entfernt die Prozessoreinheit die Markierung von der Arbeitsspeicherzeile. Nach der Ausführung einer Arbeitsspeicherbarriereanweisung der Anweisungsabfolge verhindert die Prozessoreinheit eine Vollendung der Ausführung der Arbeitsspeicherbarriereanweisung, während die Arbeitsspeicherzeile markiert ist.
  • Ausführungsformen können die nützliche Wirkung haben, dass eine Prozessoreinheit eines kohärenten, gemeinsam genutzten Arbeitsspeichersystems bereitgestellt wird, die so konfiguriert ist, dass das oben erwähnte Verfahren zum Koordinieren einer Ausführung einer Anweisungsabfolge effizient realisiert wird, die eine Mehrzahl von Anweisungen aufweist.
  • Gemäß Ausführungsformen wird die Vollendung der Ausführung der Arbeitsspeicherbarriereanweisung verhindert, bis die Markierungen aller Arbeitsspeicherzeilen entfernt sind, die zuvor durch die Prozessoreinheit markiert wurden. Ausführungsformen können die nützliche Wirkung haben, dass die Prozessoreinheit sicherstellt, dass die Vollendung der Arbeitsspeicherbarriereanweisung verhindert wird, bis Kohärenz des gemeinsam genutzten Arbeitsspeichersystems in Bezug auf alle Füllungen von Kopien von Arbeitsspeicherzeilen bestätigt ist, die zuvor durch die Prozessoreinheit ausgeführt wurden.
  • Gemäß Ausführungsformen weist die Prozessoreinheit einen Puffer zum Registrieren von Arbeitsspeicherzeilen auf, von denen Kopien in den Prozessorcache gefüllt werden und für die Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem in Bezug auf das Füllen der jeweiligen Kopien unbestätigt ist. Das Markieren der Arbeitsspeicherzeile weist ein Hinzufügen einer Kennung der Arbeitsspeicherzeile zu einem Puffer der Prozessoreinheit auf. Das Entfernen der Markierung der markierten Arbeitsspeicherzeile weist das Löschen der Kennung der Arbeitsspeicherzeile aus dem Puffer der Prozessoreinheit auf.
  • Ausführungsformen können die nützliche Wirkung haben, dass eine Infrastruktur zum Registrieren von Arbeitsspeicherzeilen, für die Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem in Bezug auf das Füllen der jeweiligen Kopien unbestätigt ist.
  • Gemäß Ausführungsformen wird die Vollendung der Ausführung der Arbeitsspeicherbarriereanweisung verhindert, bis der Puffer der Prozessoreinheit leer ist. Ausführungsformen können die vorteilhafte Wirkung haben, dass durch den Puffer ein effektiver Überblick bereitgestellt werden kann, ob beliebige Arbeitsspeicherzeilen vorliegen, von denen Kopien bereits vor der Vollendung der Arbeitsspeicherbarriereanweisung in den Prozessorcache gefüllt wurden und für die nach wie vor eine Bestätigung erforderlich ist. Für den Fall, dass der Puffer leer ist, wurden alle notwendigen Bestätigungen empfangen. Für den Fall, dass der Puffer nicht leer ist, liegen nach wie vor ausstehende Bestätigungen vor, auf die die Prozessoreinheit warten muss.
  • Bei einem weiteren Aspekt betrifft die Erfindung ein Verfahren nach Anspruch 17 zum Verwalten eines Kohärenzverzeichnisses, das Arbeitsspeicherkohärenz eines gemeinsam genutzten Arbeitsspeichersystems realisiert. Das Kohärenzverzeichnis hält Markierungsinformationen aufrecht, die einer Arbeitsspeicherzeile eines Hauptarbeitsspeichers des gemeinsam genutzten Arbeitsspeichersystems zugewiesen sind. Eine Prozessoreinheit des gemeinsam genutzten Arbeitsspeichersystems leitet ein Füllen einer Kopie der Arbeitsspeicherzeile in einen Prozessorcache ein, der funktionsmäßig mit der Prozessoreinheit verbunden ist. Die Markierungsinformationen zeigen an, ob Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile bestätigt ist. Das Kohärenzverzeichnis bezieht die Markierungsinformationen in eine Nachricht ein und sendet die Nachricht an die Prozessoreinheit.
  • Ausführungsformen können die nützliche Wirkung haben, dass ein effizientes Verfahrens zum Verwalten eines Kohärenzverzeichnisses bereitgestellt wird, das Arbeitsspeicherkohärenz eines gemeinsam genutzten Arbeitsspeichersystems realisiert. Das Kohärenzverzeichnis kann die Kohärenz des gemeinsam genutzten Arbeitsspeichersystems prüfen und gegebenenfalls Aktionen zum Herstellen von Kohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile in den Prozessorcache einleiten. Wenn zum Beispiel in dem Fall, dass eine exklusive Schreibkopie und/oder eine geänderte Kopie einer exklusiven Schreibkopie der Arbeitsspeicherzeile in den Prozessorcache geführt wird, kann das Kohärenzverzeichnis eine Invalidierung anderer Kopien der Arbeitsspeicherzeile über das gemeinsam genutzte Arbeitsspeichersystem hinweg einleiten, insbesondere in Prozessorcaches weiterer Prozessoreinheiten des gemeinsam genutzten Arbeitsspeichersystems. Zum Beispiel können veraltete Kopien, d. h. verfallene Kopien, invalidiert werden, um eine zukünftige Verwendung inkohärenter Kopien der Arbeitsspeicherzeilen durch unterschiedliche Prozessoreinheiten des gemeinsam genutzten Arbeitsspeichersystems zu verhindern.
  • Gemäß Ausführungsformen leitet das Kohärenzverzeichnis das Aufrechterhalten der den Arbeitsspeicherzeilen zugewiesenen Markierungsinformationen nach dem Feststellen ein, dass eine Änderung des Inhalts eines entfernt angeordneten Prozessorcache einer weiteren Prozessoreinheit des gemeinsam genutzten Arbeitsspeichersystems erforderlich ist, um Arbeitsspeicherkohärenz in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile in den entfernt angeordneten Cache weiterzugeben.
  • Ausführungsformen können die nützliche Wirkung haben, dass Verarbeitungskapazitäten gespart und die Markierungsinformationen nur für den Fall erzeugt und aufrechterhalten werden, dass das Kohärenzverzeichnis feststellt, dass der Inhalt eines entfernt angeordneten Prozessorcache einer weiteren Prozessoreinheit geändert werden muss, um Arbeitsspeicherkohärenz sicherzustellen. Zum Beispiel müssen für den Fall einer gemeinsam genutzten Leseanforderung zuvor geladene gemeinsam genutzte Lesekopien der angeforderten Arbeitsspeicherzeile in entfernt angeordneten Prozessorcaches weiterer Prozessoreinheiten nicht geändert werden, da Arbeitsspeicherkohärenz durch die zusätzliche gemeinsam genutzte Leseanforderung nicht verändert wird. Jedoch können für den Fall einer exklusiven Schreibanforderung Änderungen, d.h. Invalidierungen, übriger gemeinsam genutzter Lesekopien erforderlich sein, um Arbeitsspeicherkohärenz herzustellen.
  • Gemäß Ausführungsformen sendet das Kohärenzverzeichnis eine Anforderung an den entfernt angeordneten Prozessorcache. Die Anforderung fordert eine Änderung des Inhalts des entfernt angeordneten Prozessorcache an, um die Arbeitsspeicherkohärenz in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile in den entfernt angeordneten Prozessorcache weiterzugeben.
  • Ausführungsformen können die nützliche Wirkung haben, eine effiziente Steuerung von Arbeitsspeicherkohärenz durch das Kohärenzverzeichnis zu realisieren. Sobald das Kohärenzverzeichnis durch Senden der Anforderung und Empfangen der entsprechenden Antworten alle Änderungen eingeleitet und/oder vollendet hat, kann das Kohärenzverzeichnis der Prozessoreinheit die Vollendung von Weitergabe von Kohärenz bestätigen.
  • Gemäß Ausführungsformen weist das Kohärenzverzeichnis ein Register auf, um die Änderungen von Inhalten der Prozessorcaches der weiteren Prozessoreinheiten des gemeinsam genutzten Arbeitsspeichersystems aufgrund der Weitergabe der Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile zu überwachen.
  • Ausführungsformen können die nützliche Wirkung haben, dass ein Register zum Überwachen der Änderungen und zum Ermitteln realisiert wird, wann die Weitergabe von Kohärenz vollendet ist.
  • Gemäß Ausführungsformen weist das Register einen Kohärenzweitergabe-Benachrichtigungsindikator auf, der Prozessorcaches von Prozessoreinheiten des gemeinsam genutzten Arbeitsspeichersystems kennzeichnet, die durch das Kohärenzverzeichnis zu benachrichtigen sind, wenn die Weitergabe der Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile bestätigt ist.
  • Ausführungsformen können die nützliche Wirkung haben, dass das Kohärenzverzeichnis in die Lage versetzt wird, effizienter zu überwachen, welche Prozessorcaches des gemeinsam genutzten Arbeitsspeichersystems über die Kohärenz informiert werden müssen, d.h. welche der Prozessorcaches mit Kopien von Arbeitsspeicherzeilen gefüllt wurden, für die in Zukunft unter Umständen eine positive Bestätigungsprüfung der Weitergabe von Kohärenz für den Fall erforderlich ist, dass eine Arbeitsspeicherbarriereanweisung ausgeführt wird.
  • Bei einem weiteren Aspekt betrifft die Erfindung ein Kohärenzverzeichnis nach Anspruch 23 , das Arbeitsspeicherkohärenz eines gemeinsam genutzten Arbeitsspeichersystems realisiert. Das Kohärenzverzeichnis ist so konfiguriert, dass Markierungsinformationen aufrechterhalten werden, die einer Arbeitsspeicherzeile eines Hauptarbeitsspeichers des gemeinsam genutzten Arbeitsspeichersystems zugewiesen sind. Eine Prozessoreinheit des gemeinsam genutzten Arbeitsspeichersystems leitete ein Füllen einer Kopie der Arbeitsspeicherzeile in einen Prozessorcache ein, der funktionsmäßig mit der Prozessoreinheit verbunden ist. Die Markierungsinformationen zeigen an, ob Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile bestätigt ist. Das Kohärenzverzeichnis ist ferner so konfiguriert, dass die Markierungsinformationen in eine Nachricht einbezogen werden und die Nachricht an die Prozessoreinheit gesendet wird.
  • Ausführungsformen können die nützliche Wirkung haben, dass ein Kohärenzverzeichnis bereitgestellt wird, das Arbeitsspeicherkohärenz eines gemeinsam genutzten Arbeitsspeichersystems realisiert, das so konfiguriert ist, dass Markierungsinformationen effizient aufrechterhalten werden, die einer Arbeitsspeicherzeile eines Hauptarbeitsspeichers des gemeinsam genutzten Arbeitsspeichersystems zugewiesen sind.
  • Bei einem weiteren Aspekt betrifft die Erfindung ein kohärentes, gemeinsam genutztes Arbeitsspeichersystem nach Anspruch 24, das ein Kohärenzverzeichnis aufweist, das Arbeitsspeicherkohärenz des gemeinsam genutzten Arbeitsspeichersystems realisiert, einen Hauptarbeitsspeicher und eine Prozessoreinheit, die funktionsmäßig mit einem Prozessorcache verbunden ist.
  • Die Prozessoreinheit ist so konfiguriert, dass eine Ausführung einer Anweisungsabfolge koordiniert wird, die eine Mehrzahl von Anweisungen aufweist. Die Koordination weist eine Ausführung einer Anweisung der Anweisungsabfolge auf. Die Ausführung der Anweisung veranlasst die Prozessoreinheit, eine Kopie einer Arbeitsspeicherzeile des Hauptarbeitsspeichers in den Prozessorcache zu füllen. Nach Erkennung von Markierungsinformationen, die anzeigen, dass Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile unbestätigt ist, markiert die Prozessoreinheit die jeweilige Arbeitsspeicherzeile. Nach einer Erkennung von Markierungsinformationen, die anzeigen, dass die Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile bestätigt ist, entfernt die Prozessoreinheit die Markierung von der Arbeitsspeicherzeile. Nach einer Ausführung einer Arbeitsspeicherbarriereanweisung der Anweisungsabfolge verhindert die Prozessoreinheit eine Vollendung der Ausführung, während die Arbeitsspeicherzeile markiert ist.
  • Das Kohärenzverzeichnis ist zum Aufrechterhalten der Markierungsinformationen konfiguriert, die der Arbeitsspeicherzeile nach einer Feststellung einer Einleitung des Füllens der Kopie der Arbeitsspeicherzeile zugewiesen wurden. Die Markierungsinformationen zeigen an, ob die Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile bestätigt ist. Zunächst bezieht das Kohärenzverzeichnis die Markierungsinformationen, die anzeigen, dass die Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile unbestätigt ist, in eine erste Nachricht ein und sendet die erste Nachricht an die Prozessoreinheit. Das Kohärenzverzeichnis aktualisiert die Markierungsinformationen nach Erhalten einer Bestätigung der Weitergabe und bezieht die aktualisierten Markierungsinformationen in eine zweite Nachricht ein. Die aktualisierten Markierungsinformationen zeigen an, dass die Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile in eine zweite Nachricht bestätigt ist. Die zweite Nachricht mit den aktualisierten Markierungsinformationen wird durch das Kohärenzverzeichnis an die Prozessoreinheit gesendet.
  • Ausführungsformen können die nützliche Wirkung haben, dass ein kohärentes, gemeinsam genutztes Arbeitsspeichersystem bereitgestellt wird, das ein Kohärenzverzeichnis aufweist, das Arbeitsspeicherkohärenz des gemeinsam genutzten Arbeitsspeichersystems realisiert, einen Hauptarbeitsspeicher und eine Prozessoreinheit, die funktionsmäßig mit einem Prozessorcache verbunden ist. Das gemeinsam genutzte Arbeitsspeichersystem kann eine Koordination der Ausführung von Anweisungsabfolge durch einzelne Prozessoreinheiten effizient realisieren, und eine Kontrolle über die Weitergabe von Kohärenz über den gemeinsam genutzten Arbeitsspeicher hinweg durch das Kohärenzverzeichnis effizient aufrechterhalten.
  • Figurenliste
    • 1 stellt ein Blockschema eines beispielhaften Computersystems dar, das zum Realisieren eines kohärenten, gemeinsam genutzten Arbeitsspeichersystems geeignet ist;
    • 2 stellt ein Blockschema eines beispielhaften eines kohärenten, gemeinsam genutzten Arbeitsspeichersystems dar;
    • 3 stellt ein Blockschema eines beispielhaften eines kohärenten, gemeinsam genutzten Arbeitsspeichersystems dar;
    • 4 stellt ein Blockschema eines beispielhaften eines kohärenten, gemeinsam genutzten Arbeitsspeichersystems dar;
    • 5 stellt ein Blockschema eines beispielhaften eines kohärenten, gemeinsam genutzten Arbeitsspeichersystems dar;
    • 6 stellt ein Blockschema eines beispielhaften Verfahrens zur Ausführung einer Anweisungsabfolge dar,
    • 7 stellt ein Blockschema eines beispielhaften kohärenten Verzeichnisses dar, das Kohärenz eines gemeinsam genutzten Arbeitsspeichersystems realisiert,
    • 8 stellt ein Blockschema eines beispielhaften Verfahrens zum Verwalten eines Kohärenzverzeichnisses dar, das Arbeitsspeicherkohärenz eines gemeinsam genutzten Arbeitsspeichersystems realisiert,
    • 9 stellt ein Blockschema eines beispielhaften Verfahrens zum Verwalten eines Kohärenzverzeichnisses dar, das Arbeitsspeicherkohärenz eines gemeinsam genutzten Arbeitsspeichersystems realisiert,
    • die 10A und 10B stellen ein Flussdiagramm eines beispielhaften Verfahrens zum Ausführen einer Anweisungsabfolge und zum Realisieren von Arbeitsspeicherkohärenz eines gemeinsam genutzten Arbeitsspeichersystems dar, und
    • 11 stellt ein Blockschema dar, das eine beispielhafte Mehrprozessorarchitektur veranschaulicht, die Kohärenz eines gemeinsam genutzten Arbeitsspeichersystems realisiert.
  • AUSFÜHRLICHE BESCHREIBUNG
  • Die Beschreibungen der verschiedenen Ausführungsformen der vorliegenden Erfindung sollen der Veranschaulichung dienen, sind jedoch nicht als vollständig oder auf die Erfindung in der offenbarten Form beschränkt gedacht. Für den Fachmann sind viele Modifikationen und Variationen denkbar, ohne dass diese eine Abweichung vom Schutzbereich und Grundgedanken der beschriebenen Ausführungsformen darstellen würden. Die hierin verwendete Terminologie wurde gewählt, um die Grundgedanken der Ausführungsformen, die praktische Anwendung bzw. die technische Verbesserung gegenüber den auf dem Markt vorgefundenen Technologien auf bestmögliche Weise zu erläutern bzw. anderen mit entsprechenden Fachkenntnissen das Verständnis der hierin offenbarten Ausführungsformen zu ermöglichen.
  • In einem Prozessorcache werden zeitweilig Daten gespeichert, um ein schnelleres Bedienen zukünftiger Anforderungen in Bezug auf diese Daten zu ermöglichen. Bei in einem Prozessorcache gespeicherten Daten kann es sich um eine Kopie, d.h. ein Duplikat, an anderer Stelle, z.B. in einem Hauptarbeitsspeicher, gespeicherter Daten handeln. Ein Cachetreffer erfolgt, wenn die angeforderten Daten in einem Cache gefunden werden können, während ein Cachefehltreffer auftritt, wenn die angeforderten Daten nicht im Cache gefunden werden können. Cachetreffer werden bedient, indem Daten aus dem Prozessorcache gelesen werden, was schneller als das Lesen der Daten aus einem langsameren Datenspeicher wie z.B. einem Hauptarbeitsspeicher erfolgt. Daher kann die Verwendung von Prozessorcaches die Geschwindigkeit erhöhen, mit der das System ein Computersystem ausführt.
  • Um durch einen Prozessorcache Daten bereitzustellen, werden die Daten zwischen einem Sicherungsspeicher wie z.B. dem Hauptarbeitsspeicher und dem Prozessorcache in Blöcken übertragen, wobei jeder Block eine feste Größe aufweist. Ein derartiger Datenblock wird als Arbeitsspeicherzeile oder Cachezeile bezeichnet. Wenn eine Arbeitsspeicherzeile aus einem Hauptarbeitsspeicher in einen Prozessorcache kopiert wird, wird ein Cacheeintrag erstellt. Der Cacheeintrag kann die kopierten Daten aufweisen, d.h. die Arbeitsspeicherzeile, sowie den angeforderten Speicherort im Sicherungsspeicher, d.h. ein Adresskennzeichen, das die Adresse der jeweiligen Arbeitsspeicherzeile im Hauptarbeitsspeicher bereitstellt.
  • Wenn ein Cacheclient wie z.B. ein Prozessor von einem Speicherort im Sicherungsspeicher lesen oder auf diesen schreiben soll, d.h. eine Arbeitsspeicherzeile lesen oder schreiben soll, kann der Cacheclient zuerst auf einen entsprechenden Eintrag im Cache prüfen. Der Prozessorcache prüft alle Cacheeinträge auf die Adresse der jeweiligen Arbeitsspeicherzeile. Für den Fall eines Cachetreffers, d.h., ein Crash-Eintrag wurde gefunden, der das Adresskennzeichen aufweist, kann der Prozessor sofort Daten aus dem Prozessorcacheeintrag mit dem gewünschten Adresskennzeichen lesen oder in diesen schreiben und somit die darin gespeicherte Arbeitsspeicherzeile abändern. Für den Fall eines Cachefehltreffers kann der Prozessorcache einen neuen Cacheeintrag zuordnen und eine dem gesuchten Adresskennzeichen zugewiesene Arbeitsspeicherzeile aus einem weiteren Cache eines weiteren Cacheclients, z.B. einem Prozessor, oder aus dem Sicherungsspeicher in den neuen Cacheeintrag kopieren. Danach kann die Anforderung aus dem Inhalt des neuen Cacheeintrags mit der neuen Arbeitsspeicherzeile des Cache erfüllt werden.
  • Durch Zwischenspeichern kann eine Leistungssteigerung bei Übertragungen von Daten realisiert werden, insbesondere von Daten, die wiederholt übertragen werden. Zum Beispiel kann ein Prozessorcache aufgrund des innerhalb eines Cache erfolgenden Pufferns nach einer erstmaligen Übertragung einer Arbeitsspeicherzeile eine Leistungssteigerung realisieren. Ferner kann ein Prozessorcache aufgrund des Abrufens einer Arbeitsspeicherzeile aus einem Hauptarbeitsspeicher und des Speicherns dieser in einem schnelleren dazwischen befindlichen Prozessorcache eine Leistungssteigerung realisieren, sodass die jeweilige Arbeitsspeicherzeile für den Fall, dass sie wiederholt angefordert wird, aus dem schnelleren dazwischen befindlichen Prozessorcache und nicht aus dem Hauptarbeitsspeicher abgerufen werden kann. Darüber hinaus kann ein Prozessorcache eine Leistungssteigerung des Schreibens einer geänderten Arbeitsspeicherzeile erreichen, indem die Arbeitsspeicherzeile unverzüglich im dazwischen befindlichen Prozessorcache gespeichert und eine Übertragung der jeweiligen Arbeitsspeicherzeile in den Hauptarbeitsspeicher in eine spätere Phase verschoben werden. Alternativ kann eine Übertragung der jeweiligen Arbeitsspeicherzeile in den Hauptarbeitsspeicher als Hintergrundprozess erfolgen.
  • Ein Prozessorcache kann eine Mehrzahl von Einträgen aufweisen. Jeder Eintrag kann Cachedaten aufweisen, d.h. eine Kopie einer Arbeitsspeicherzeile, die auch als Cachezeile bezeichnet wird, bei der es sich um eine Kopie von Daten einer Arbeitsspeicherzeile, d.h. eines Arbeitsspeicherblocks, in einem Sicherungsspeicher wie z.B. einem Hauptarbeitsspeicher handelt. Jeder Eintrag kann ferner ein Adresskennzeichen aufweisen, das die in dem Eintrag, d.h. der Arbeitsspeicherzeile, enthaltenen Daten kennzeichnet. Genauer gesagt, das Adresskennzeichen kann die im Sicherungsspeicher gespeicherten Daten kennzeichnen, von denen die jeweiligen Daten im Cacheeintrag eine Kopie sind. Im Falle eines Schreibzugriffs auf den jeweiligen Cacheeintrag kann die Arbeitsspeicherzeile geändert werden und daher eine geänderte Kopie bestimmter Daten sein, die im Sicherungsspeicher gespeichert sind. Nach dem Ändern einer Arbeitsspeicherzeile im Prozessorcache können die Daten im Sicherungsspeicher, von denen die jeweilige Arbeitsspeicherzeile eine Kopie ist, unter Verwendung eines Arbeitsspeicherkohärenzprotokolls aktualisiert werden, um Kohärenz zwischen der im Prozessorcache gespeicherten Arbeitsspeicherzeile und den entsprechenden Daten sicherzustellen, die im Sicherungsspeicher gespeichert sind. Darüber hinaus kann jeder Eintrag Zustandsinformationen aufweisen, die einen Zustand der im jeweiligen Eintrag, d.h. der Arbeitsspeicherzeile, gespeicherten Daten kennzeichnen.
  • Für den Fall, dass eine Kopie einer Arbeitsspeicherzeile durch einen einzelnen Cacheclient aktualisiert wird, sind alle anderen Kopien der Arbeitsspeicherzeile mit derselben Adresse unter Umständen veraltet. Daher kann es notwendig werden, die Handhabung dieser veralteten Arbeitsspeicherzeilen zu verwalten. Um Arbeitsspeicherkohärenz sicherzustellen, muss unter Umständen sichergestellt werden, dass veraltete Kopien einer Arbeitsspeicherzeile nicht mehr als gültige Kopie verwendet werden. Eine veraltete Kopie kann entweder invalidiert oder aktualisiert werden.
  • Wenn der Cacheclient wie z.B. ein Prozessorkern oder ein Prozessorchip auf Daten zugreifen muss, die vermutlich im Sicherungsspeicher gespeichert sind, kann er zuerst einen oder mehrere Prozessorcaches prüfen. Wenn innerhalb eines dieser Prozessorcaches ein Eintrag mit einem Adresskennzeichen gefunden wird, das mit dem Adresskennzeichen der angeforderten Arbeitsspeicherzeile übereinstimmt, kann die durch den jeweiligen Prozessorcacheeintrag bereitgestellte Arbeitsspeicherzeile anstelle der entsprechenden Daten verwendet werden, die im Sicherungsspeicher gespeichert sind. Diese Situation wird als Cachetreffer bezeichnet. Im Falle eines Cachefehltreffers, d.h., wenn in dem einen oder den mehreren Prozessorcaches kein Eintrag mit dem jeweiligen Adresskennzeichen der gewünschten Arbeitsspeicherzeile gefunden werden kann, werden die gewünschten, nicht zwischengespeicherten Daten aus dem Sicherungsspeicher abgerufen. Die nicht zwischengespeicherten Daten, die während der Trefferfehlerbehandlung aus dem Sicherungsspeicher abgerufen werden, können z.B. in einen Prozessorcache gespeichert werden und somit im Falle eines weiteren Zugriffsversuchs einen Cachetreffer ermöglichen.
  • Um Konsistenz zwischen dem einen oder den mehreren Prozessorcaches und dem Hauptarbeitsspeicher sowie zwischen unterschiedlichen Caches aufrechtzuerhalten, muss ein Zwischenspeicherungsprozess unter Umständen ein Cachekohärenzprotokoll einhalten.
  • In der Computerarchitektur bezeichnet der Begriff „Arbeitsspeicherkohärenz“ eine Einheitlichkeit von Daten gemeinsam genutzter Ressourcen, die in einer Mehrzahl von Prozessorcaches eines gemeinsam genutzten Arbeitsspeichersystems gespeichert sind. Bei einem gemeinsam genutzten Arbeitsspeichersystem kann das Aufrechterhalten von Arbeitsspeicherkohärenz von besonderer Bedeutung sein.
  • Bei einem gemeinsam genutzten Arbeitsspeichersystem, z.B. in Form eines Mehrprozessorsystems mit gemeinsam genutztem Arbeitsspeicher und mindestens einem separaten Prozessorcache für jeden Prozessor, kann es unter Umständen möglich sein, dass viele Kopien derselben Zeile des gemeinsam genutzten Arbeitsspeichers vorliegen: zum Beispiel eine Kopie im Hauptarbeitsspeicher und eine in jedem eines oder mehrerer der lokalen Caches der Prozessoren, die eine Kopie der jeweiligen Arbeitsspeicherzeile angefordert haben. Wenn eine der Kopien geändert wird, müssen die anderen Kopien diese Änderung widerspiegeln. Bei Arbeitsspeicherkohärenz handelt es sich um den Bereich, der sicherstellt, dass Änderungen von Kopien von Arbeitsspeicherzeilen in Prozessorcaches rechtzeitig im gesamten System weitergegeben werden.
  • Das gemeinsam genutzte Arbeitsspeichersystem kann eine Mehrzahl von Prozessorcaches aufweisen. Gemäß Ausführungsformen kann das gemeinsam genutzte Arbeitsspeichersystem in Form eines elektronischen Datenverarbeitungssystems wie z.B. eines Computers bereitgestellt sein. Zum Beispiel weist das jeweilige elektronische Datenverarbeitungssystem einen oder mehrere Mehrkernprozessoren auf. Jeder Mehrkernprozessor weist eine oder mehrere unabhängige Verarbeitungseinheiten auf, d.h. Kerne, die Programmanweisungen lesen und ausführen. Jeder dieser Kerne kann mit einem lokalen Cache bereitgestellt sein, d.h. einem individuellen Cache zum Zwischenspeichern von Daten, die durch den jeweiligen Kern verwendet werden. Gemäß Ausführungsformen kann ein lokaler Cache nur den Kern bedienen, dem er zugewiesen ist.
  • Gemäß einem weiteren Beispiel kann das elektronische Datenverarbeitungssystem eine Mehrzahl von Prozessorchips aufweisen. Zwei oder mehr der Prozessorchips können jeweils einen lokalen Prozessorcache aufweisen, d.h., ein individueller Cache bedient lediglich einen Prozessor, der in dem Prozessorchip enthalten ist, der dem jeweiligen Cache zugewiesen ist.
  • Arbeitsspeicherkohärenz kann z.B. unter Verwendung eines auf Invalidierung beruhenden Arbeitsspeicherkohärenzprotokolls wie z.B. MESI oder Modifikationen wie etwa H-MESI, MOESI, MESIF oder MERSI realisiert werden.
  • Gemäß MESI wird jedem Cacheeintrag einer der folgenden vier möglichen Zustände zugewiesen, abgeändert, exklusiv, gemeinsam genutzt und ungültig. Der Zustand wird z.B. unter Verwendung von zwei zusätzlichen Bits angezeigt. „Abgeändert“ kennzeichnet eine Arbeitsspeicherzeile, die nur im aktuellen Cache vorliegt und geändert, aber noch nicht festgeschrieben wurde (dirty), d.h., sie wurde im Vergleich zur entsprechenden Datenzeile geändert, die im Hauptarbeitsspeicher gespeichert ist. Daher muss der Cache die abgeänderte Arbeitsspeicherzeile zurück in den Hauptarbeitsspeicher schreiben, bevor beliebige andere Lesevorgänge der nicht mehr gültigen Datenzeile zulässig sind, die im Hauptarbeitsspeicherzustand gespeichert ist. Das Zurückschreiben der jeweiligen Arbeitsspeicherzeile kann den Zustand der Arbeitsspeicherzeile von abgeändert in gemeinsam genutzt ändern.
  • „Exklusiv” kennzeichnet eine Arbeitsspeicherzeile, die nur im aktuellen Cache vorliegt und nicht verändert wurde, d.h., die nach wie vor mit den entsprechenden Datenzeilen übereinstimmt, die im Hauptarbeitsspeicher gespeichert sind. Der Exklusiv-Zustand kann in den gemeinsam genutzten Zustand geändert werden, z.B. als Reaktion auf ein Empfangen einer Leseanforderung von einem anderen Cache. Beim Empfangen einer derartigen Leseanforderung kann eine Kopie der angeforderten Arbeitsspeicherzeile als gemeinsam genutzte Cachezeile an den anfordernden Cache gesendet werden, und der Zustand der im Cache verbleibenden Arbeitsspeicherzeile kann in gemeinsam genutzt geändert werden. Der Zustand der jeweiligen Arbeitsspeicherzeile kann z.B. von exklusiv in abgeändert geändert werden, falls sie in die jeweilige Arbeitsspeicherzeile geschrieben wird.
  • „Gemeinsam genutzt“ kennzeichnet eine Arbeitsspeicherzeile, die in einer Mehrzahl von Caches gespeichert sein kann und die nicht verändert wurde.
  • „Ungültig” kennzeichnet einen Cacheeintrag, der nicht verwendet wurde und nicht verwendet werden darf, um einen Arbeitsspeicherzugriff zu erfüllen. Der Zustand einer Arbeitsspeicherzeile in einem Cache kann z.B. von gemeinsam genutzt in ungültig geändert werden, falls eine Kopie der jeweiligen Arbeitsspeicherzeile durch einen anderen Cache als exklusive Arbeitsspeicherzeile angefordert wird. Zum Beispiel kann die gemeinsam genutzte Kopie der jeweiligen Arbeitsspeicherzeile als exklusive Kopie weitergeleitet werden, während die verbleibende kopierte Arbeitsspeicherzeile invalidiert wird, um Inkohärenz zu vermeiden, d.h., dass unterschiedliche Caches unterschiedliche Kopien derselben Arbeitsspeicherzeile verwenden. Für den Fall, dass eine ungültige Arbeitsspeicherzeile gelesen werden soll, muss eine gültige Kopie davon, d.h. gemeinsam genutzt oder exklusiv, aus einem weiteren Cache oder aus dem Hauptarbeitsspeicher gelesen werden.
  • Das MOESI-Protokoll weist zusätzlich zu den vier üblichen MESI-Protokollzuständen einen fünften Zustand „Im Besitz“, der für Daten steht, die sowohl verändert sind als auch gemeinsam genutzt werden. Dadurch kann unter Umständen die Notwendigkeit vermieden werden, Daten zurück in den Hauptarbeitsspeicher zu schreiben, bevor sie gemeinsam genutzt werden. Wenn letztendlich Daten nach wie vor zurückgeschrieben werden müssen, kann das Zurückschreiben verzögert werden. „Verändert“ kennzeichnet eine Arbeitsspeicherzeile, bei der es sich um die einzige gültige Kopie der Arbeitsspeicherzeile handelt und die geändert wurde.
  • „Im Besitz” kennzeichnet eine Kopie einer Arbeitsspeicherzeile, bei der es sich um die einzige handelt, die geändert werden darf, während andere Prozessorcaches unter Umständen gültige Kopien aufweisen, die jedoch nicht geändert werden dürfen. Änderungen der im Besitz befindlichen Arbeitsspeicherzeile müssen mittels Rundsenden an alle anderen Prozessorcaches verbreitet werden, die die Arbeitsspeicherzeile gemeinsam nutzen. Die Einführung des Im-Besitz-Zustandes ermöglicht eine gemeinsame Nutzung geänderter, aber noch nicht festgeschriebener Daten, d.h., eine geänderte Arbeitsspeicherzeile kann zu verschiedenen Prozessorcaches verschoben werden, ohne den Hauptarbeitsspeicher zu aktualisieren. Die Arbeitsspeicherzeile kann in den Abgeändert-Zustand geändert werden, nachdem alle gemeinsam genutzten Kopien invalidiert wurden, oder sie kann in den Gemeinsam-genutzt-Zustand geändert werden, indem die Änderungen zurück in den Hauptarbeitsspeicher geschrieben werden.
  • Die Arbeitsspeicherbarriereanweisung stellt eine Ordnungsfunktion bereit, die sicherstellt, dass alle Arbeitsspeicheranweisungen vollendet werden, die vor der Arbeitsspeicherbarriereanweisung eingeleitet wurden, und dass keine nachfolgenden Arbeitsspeicheranweisungen eingeleitet werden, nachdem die Arbeitsspeicherbarriereanweisung vollendet ist. Wenn die Arbeitsspeicherbarriereanweisung vollendet ist, sind alle Arbeitsspeicherzugriffe vollendet, die vor der Arbeitsspeicherbarriereanweisung eingeleitet wurden.
  • Arbeitsspeicherbarriereanweisungen sind unter Umständen notwendig, da moderne Prozessoren Leistungsoptimierungen nutzen können, die zu einer Ausführung außerhalb der Reihenfolge führen können. Dieses Neuordnen von Arbeitsspeicheroperationen wie z.B. von Lade- und Speichervorgängen kann innerhalb eines einzelnen Ausführungs-Threads unbemerkt erfolgen. Im Falle gleichzeitig ausgeführter Programme und Gerätetreiber können derartige Leistungsoptimierungen zu einem nicht vorhersagbaren Verhalten führen, sofern keine ausreichende Steuerung erfolgt.
  • Das gemeinsam genutzte Arbeitsspeichersystem ist so konfiguriert, dass über Prozessoreinheiten hinweg eine schwach geordnete Ausführung von Arbeitsspeicherzugriffsanweisungen zum Laden und Speichern zugelassen wird. Eine Anweisungsabfolge eines Prozessors weist eine Arbeitsspeicherbarriereanweisung auf, die die Ausführung der vorhergehenden Zugriffsanweisungen des Ablaufs durch die Prozessoreinheit und die Weitergabe von Kohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg erzwingt, bevor die nachfolgenden Anweisungen des Ablaufs ausgeführt werden. Ausführungsformen können die nützliche Wirkung haben, dass eine Arbeitsspeicherbarriereanweisung mit schneller Ausführung realisiert wird, obwohl wenige Computerressourcen verwendet werden.
  • Eine typische Kohärenzweitergabe kann eine oder mehrere zwischengespeicherte Kopien des früheren Wertes einer Arbeitsspeicherzeile invalidieren.
  • Gemäß Ausführungsformen weist ein gemeinsam genutztes Arbeitsspeichersystem, das eine schwach geordnete Ausführung von Arbeitsspeicherzugriffsanweisungen zum Laden und Speichern über Prozessoreinheiten hinweg zulässt, eine Mehrzahl von Prozessoren auf. Jeder Prozessor weist einen Nicht-weitergegeben-Puffer zum Speichern nicht weitergegebener Arbeitsspeicherzeilen auf. Der Nicht-weitergegeben-Puffer überwacht die Arbeitsspeicherzeilenadressen der vorherigen Zugriffe durch den Prozessor, für die die Weitergabe von Kohärenz zu anderen Prozessoren unbekannt ist. Des Weiteren weist jeder Prozessor eine Arbeitsspeicherbarriereanweisung auf, die realisiert wird, indem durch den Prozessor die Ausführung nachfolgender Arbeitsspeicherzugriffsanweisungen seiner Anweisungsabfolge angehalten wird, bis der Nicht-weitergegeben-Puffer leer ist.
  • Gemäß Ausführungsformen weist eine Nachricht, die eine Arbeitsspeicherzeile betrifft und durch ein Kohärenzverzeichnis an einen Prozessorcache N gesendet werden soll, ein Weitergegeben-Feld auf, das anzeigt, ob Arbeitsspeicherkohärenz in Bezug auf die Arbeitsspeicherzeile weitergegeben wurde. Falls ein Übergangseintrag des Kohärenzverzeichnisses für die Arbeitsspeicherzeile erwartet, dass das Kohärenzverzeichnis eine Invalidierungsbestätigungsnachricht von einem oder mehreren Prozessorcaches empfängt, in denen eine frühere Kopie der Arbeitsspeicherzeile zwischengespeichert ist, setzt das Kohärenzverzeichnis das Weitergegeben-Feld der Nachricht auf Nein.
  • Falls ein Verzeichniseintrag oder ein Übergangseintrag des Kohärenzverzeichnisses für die Arbeitsspeicherzeile erwartet, dass das Kohärenzverzeichnis keine Invalidierungsbestätigungsnachricht von einem oder mehreren Prozessorcaches empfängt, in denen eine frühere Kopie der Arbeitsspeicherzeile zwischengespeichert ist, setzt das Kohärenzverzeichnis das Weitergegeben-Feld der Nachricht auf Ja. Falls die Zeile einen Übergangseintrag enthielt und falls das Weitergegeben-Feld der Nachricht auf Ja gesetzt ist, setzt das Kohärenzverzeichnis ein Weitergabebenachrichtigungsfeld für den Cache N im Übergangseintrag des Kohärenzverzeichnisses für die Zeile auf Nein.
  • Falls das Weitergegeben-Feld der Nachricht auf Nein gesetzt ist, setzt das Kohärenzverzeichnis ein Weitergabebenachrichtigungsfeld für den Cache N im Übergangseintrag des Kohärenzverzeichnisses für die Arbeitsspeicherzeile auf Ja.
  • Falls das Kohärenzverzeichnis den Übergangseintrag der Arbeitsspeicherzeile aktualisiert und falls der aktualisierte Übergangseintrag erwartet, dass das Kohärenzverzeichnis keine Invalidierungsbestätigungsnachricht von Prozessorcaches empfängt, in denen eine frühere Kopie der Arbeitsspeicherzeile gespeichert ist, sendet das Kohärenzverzeichnis eine Weitergegeben-Nachricht für die Arbeitsspeicherzeile an jeden Prozessorcache, für den das Weitergabebenachrichtigungsfeld im Übergangseintrag für die Arbeitsspeicherzeile auf Ja gesetzt ist.
  • Für jede derartige durch das Kohärenzverzeichnis an einen Prozessorcache gesendete Weitergegeben-Nachricht setzt das Kohärenzverzeichnis im Übergangseintrag das entsprechende Weitergabebenachrichtigungsfeld für den Prozessorcache auf Nein.
  • Gemäß Ausführungsformen aktualisiert das Kohärenzverzeichnis den Übergangseintrag einer Arbeitsspeicherzeile als Teil der Kohärenzverzeichnisaktionen, die durch das Kohärenzverzeichnis verursacht werden, das eine Nachricht von einem Prozessorcache empfängt, die eine Arbeitsspeicherzeile betrifft.
  • Gemäß Ausführungsformen weist die im Puffer gespeicherte Kennung der markierten Arbeitsspeicherzeile die Arbeitsspeicheradresse der jeweiligen Arbeitsspeicherzeile im Hauptarbeitsspeicher auf. Ausführungsformen können die nützliche Wirkung haben, dass eine effiziente Kennung zum Kennzeichnen von Arbeitsspeicherzeilen bereitgestellt wird. Da die Arbeitsspeicheradresse bereits verwendet wird, um die Arbeitsspeicherzeile im Hauptarbeitsspeicher sowie eventuell auch im Prozessorcache zu kennzeichnen, ist keine zusätzliche Logik zum Übersetzen oder Interpretieren von Kennungen erforderlich.
  • Gemäß Ausführungsformen wird die Arbeitsspeicherkohärenz des gemeinsam genutzten Arbeitsspeichersystems unter Verwendung eines Kohärenzverzeichnisses realisiert. Ausführungsformen können die nützliche Wirkung haben, dass eine zentrale Einheit in Form des Kohärenzverzeichnisses bereitgestellt wird, die eine Weitergabe von Kohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg steuern, prüfen und bestätigen kann.
  • Gemäß Ausführungsformen wird mindestens eine der ersten und zweiten Markierungsinformationen durch eine Nachricht bereitgestellt, die durch den Prozessor vom Kohärenzverzeichnis empfangen wird bzw. werden. Ausführungsformen können die nützliche Wirkung haben, dass das Kohärenzverzeichnis Weitergabe von Kohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg bestätigt. Gemäß Ausführungsformen wird mindestens eine der ersten und zweiten Markierungsinformationen durch eine Nachricht bereitgestellt, die durch den Prozessor an das Kohärenzverzeichnis gesendet wird bzw. werden. Ausführungsformen können die nützliche Wirkung haben, dass ein Bedarf zum Bestätigen einer Weitergabe von Kohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg angekündigt wird.
  • Gemäß Ausführungsformen wird die Arbeitsspeicherkohärenz des gemeinsam genutzten Arbeitsspeichersystems unter Verwendung von Rundsenden realisiert. Ausführungsformen können die nützliche Wirkung haben, dass auf Rundsenden beruhende Protokolle zum Realisieren von Kohärenz des gemeinsam genutzten Arbeitsspeichersystems kein zentrales Kohärenzverzeichnis benötigen. Des Weiteren muss kein zentrales Kohärenzverzeichnis geprüft und aufrechterhalten werden, um Arbeitsspeicherkohärenz zu realisieren. Sofern eine ausreichende Bandbreite verfügbar ist können daher auf Rundsenden beruhende Protokolle zum Realisieren von Arbeitsspeicherkohärenz schneller als auf Verzeichnissen beruhende Protokolle sein, da alle Transaktionen einer Arbeitsspeicherzeile eine Anforderung/für alle Prozessoren sichtbare Anforderung aufweisen. Ein Nachteil eines auf Rundsenden beruhenden Protokolls ist dessen fehlende Skalierbarkeit. Jede Anforderung muss mittels Rundsenden an alle Knoten im System verbreitet werden, d.h. an alle Prozessorcaches, was bedeutet, dass das System größer wird und die erforderliche Bandbreite zum Realisieren des Verfahrens zunimmt.
  • Gemäß Ausführungsformen handelt es sich bei der Anweisung, die die Prozessoreinheit veranlasst, die Kopie der Arbeitsspeicherzeile in den Prozessorcache zu füllen, um eine Anweisung, die einen Schreibzugriff auf die jeweilige Arbeitsspeicherzeile angibt. Gemäß Ausführungsformen weist die Weitergabe der Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg ein Invalidieren weiterer Kopien der Arbeitsspeicherzeile auf, die durch entfernt angeordnete Prozessorcaches weiterer Prozessoreinheiten des gemeinsam genutzten Arbeitsspeichersystems verwendet werden. Ausführungsformen können die nützliche Wirkung haben, dass sichergestellt werden kann, dass keine weitere Prozessoreinheit eine veraltete gemeinsam genutzte Lesekopie der Arbeitsspeicherzeile verwendet, d.h. eine verfallene Kopie, während die Prozessoreinheit eine neue Kopie der jeweiligen Arbeitsspeicherzeile schreibt.
  • Gemäß Ausführungsformen weist die im Puffer gespeicherte Kennung der markierten Arbeitsspeicherzeile die Arbeitsspeicheradresse der jeweiligen Arbeitsspeicherzeile im Hauptarbeitsspeicher auf. Ausführungsformen können die nützliche Wirkung haben, dass eine gemeinsame Kennung verwendet wird, um eine Arbeitsspeicherzeile im Hauptarbeitsspeicher, in den Prozessorcaches und im Puffer der Prozessoreinheit zu kennzeichnen.
  • Gemäß Ausführungsformen weist die durch das Kohärenzverzeichnis angeforderte Änderung eine Invalidierung einer weiteren Kopie der Arbeitsspeicherzeile auf, die im entfernt angeordneten Prozessorcache enthalten ist. Ausführungsformen können die nützliche Wirkung haben, dass sichergestellt werden kann, dass keiner der entfernt angeordneten Prozessorcaches eine veraltete Kopie der Arbeitsspeicherzeile verwendet, d.h. verfallene Kopie, während die Prozessoreinheit eine neue Kopie der jeweiligen Arbeitsspeicherzeile in den Prozessorcache füllt. Daher können eine Nutzung inkohärenter Kopien der Arbeitsspeicherzeilen sowie ein Einführen einer Konkurrenzsituation wirksam vermieden werden.
  • 1 stellt ein Computersystem 100 dar, das zum Realisieren eines gemeinsam genutzten Arbeitsspeichersystems geeignet ist. Es wird klar sein, dass die hierin beschriebenen Verfahren mit Hilfe computergestützter Systeme automatisiert sind. Diese Verfahren können ferner in Software 112, 122 (einschließlich Firmware 122), Hardware (Prozessor) 105 oder in einer Kombination davon realisiert sein. Bei beispielhaften Ausführungsformen sind die hierin beschriebenen Verfahren in Software, als ausführbare Anweisungen, realisiert, und können durch einen Spezial- oder Universalcomputer wie zum Beispiel einen Personal Computer, eine Workstation, einen Minicomputer oder einen Großrechner verwendet werden. Das allgemeinste System 100 beinhaltet daher einen Universalcomputer 101.
  • Bei beispielhaften Ausführungsformen beinhaltet der Computer 101 hinsichtlich der in 1 gezeigten Hardwarearchitektur einen Prozessor 105, einen Arbeitsspeicher (Hauptarbeitsspeicher) 110, der mit einer Arbeitsspeichersteuereinheit 115 verbunden ist, und eine oder mehrere Eingabe- und/oder Ausgabeeinheiten (E/A-Einheiten) (ohne Peripherieeinheiten) 10, 145, die über eine lokale Eingabe-/Ausgabe-Steuereinheit 135 verbunden sind. Bei der Eingabe-/Ausgabe-Steuereinheit 135 kann es sich, ohne auf diese beschränkt zu sein, um einen oder mehrere Busse oder andere drahtgebundene oder drahtlose Verbindungen handeln, die in der Technik bekannt sind. Die Eingabe-/Ausgabe-Steuereinheit 135 kann weitere Elemente aufweisen, die aus Gründen der Einfachheit weggelassen wurden, beispielsweise Steuereinheiten, Puffer, Cache, Treiber, Repeater und Empfänger, um die Kommunikation zu ermöglichen. Ferner kann die lokale Schnittstelle Adress-, Steuer- und/oder Datenverbindungen aufweisen, um eine entsprechende Datenübertragung zwischen den oben genannten Komponenten zu ermöglichen. Wie hierin beschrieben, können die E/A-Einheiten 10, 145 allgemein eine beliebige verallgemeinerte kryptografische Karte oder eine Smart-Card beinhalten, die in der Technik bekannt sind.
  • Bei dem Prozessor 105 handelt es sich um eine Hardwareeinheit zum Ausführen von Software, insbesondere der, die im Arbeitsspeicher 110 gespeichert ist. Bei dem Prozessor 105 kann es sich um einen kundenspezifischen oder handelsüblichen Prozessor, eine Zentraleinheit (CPU), einen Hilfsprozessor unter mehreren zum Computer 101 gehörigen Prozessoren, einen auf Halbleitern beruhenden Mikroprozessor (in Form eines Mikrochips oder Chipsatzes), einen Makroprozessor oder allgemein eine beliebige Einheit zum Ausführen von Softwareanweisungen handeln. Der Prozessor 105 kann zu Datenübertragungszwecken mit einem oder mehreren lokalen Caches verbunden sein oder eine derartige Verbindung aufweisen. Der Prozessor 105 kann einen oder mehrere Prozessorkerne aufweisen. Jeder der Prozessorkerne kann funktionsmäßig mit einem oder mehreren lokalen Prozessorcaches verbunden sein. Der Prozessor 105 kann in Form einer Mehrzahl von Prozessorchips realisiert sein, wobei jeder Prozessorchip einen oder mehrere lokale Prozessorcaches aufweisen kann. Die Prozessorcaches können jeweils eine Cachesteuereinheit zum Steuern des jeweiligen Cache aufweisen. Im Falle mehrerer Prozessorcaches kann Arbeitsspeicherkohärenz in Form von auf Verzeichnissen beruhender Arbeitsspeicherkohärenz oder von auf Rundsenden beruhender Arbeitsspeicherkohärenz realisiert sein.
  • Der Arbeitsspeicher 110 kann ein beliebiges oder eine Kombination aus flüchtigen Arbeitsspeicherelementen (z.B. Direktzugriffsspeicher (random access memory (RAM) wie zum Beispiel DRAM, SRAM, SDRAM usw.)) und nichtflüchtigen Arbeitsspeicherelementen (z.B. ROM, löschbarer programmierbarer Nur-Lese-Speicher (EPROM), elektronisch löschbarer programmierbarer Nur-Lese-Speicher (EEPROM), programmierbarer Nur-Lese-Speicher (PROM) beinhalten. Zu beachten ist, dass der Arbeitsspeicher 110 eine verteilte Architektur haben kann, bei der verschiedene Komponenten voneinander entfernt angeordnet sind, auf die der Prozessor 105 jedoch zugreifen kann.
  • Die Software im Arbeitsspeicher 110 kann ein oder mehrere separate Programme beinhalten, von denen jedes eine geordnete Auflistung ausführbarer Anweisungen zum Realisieren logischer Funktionen aufweist, insbesondere von Funktionen, die in Ausführungsformen der vorliegenden Erfindung einbezogen sind. Bei dem Beispiel von 1 beinhaltet Software im Arbeitsspeicher 110 Anweisungen oder Software 112.
  • Die Software im Arbeitsspeicher 110 soll außerdem normalerweise ein geeignetes Betriebssystem (BS) 111 beinhalten. Das BS 111 steuert im Wesentlichen die Ausführung anderer Computerprogramme wie z.B. möglicherweise der Software 112.
  • Die hierin beschriebenen Verfahren können in Form eines Quellprogramms 112, eines ausführbaren Programms 112 (Objektcode), von Scripts oder einer beliebigen anderen Einheit vorliegen, die eine Menge durchzuführender Anweisungen 112 aufweist. Bei Bereitstellung als Quellprogramm muss das jeweilige Programm mit Hilfe eines Compilers, Assemblers, Interpreters oder dergleichen übersetzt werden, der im Hauptarbeitsspeicher 110 enthalten sein kann, sodass das in Verbindung mit dem BS 111 ordnungsgemäß funktioniert. Des Weiteren können die Verfahren in einer objektorientierten Programmiersprache geschrieben sein, die Klassen von Daten und Methoden enthält, oder in einer prozeduralen Programmiersprache, die Routinen, Unterroutinen und/oder Funktionen enthält.
  • Bei beispielhaften Ausführungsformen können eine herkömmliche Tastatur 150 und eine Maus 155 mit der Eingabe-/Ausgabe-Steuereinheit 135 verbunden sein. Zu weiteren Ausgabeeinheiten wie zum Beispiel zu den E/A-Einheiten 145 können Eingabeeinheiten wie zum Beispiel und ohne auf diese beschränkt zu sein, ein Drucker, ein Scanner, ein Mikrofon und dergleichen gehören. Schließlich können zu den E/A-Einheiten 10, 145 ferner Einheiten gehören, die Datenübertragung sowohl für Eingänge als auch für Ausgänge realisieren, zum Beispiel und ohne auf diese beschränkt zu sein, eine Netzwerkschnittstellenkarte (Network Interface Card, NIC), ein Modulator/Demodulator (zum Zugreifen auf andere Dateien, Einheiten, Systeme oder ein Netzwerk) ein Hochfrequenz-Transceiver (HF-Transceiver) oder ein anderer Transceiver, eine Telefonschnittstelle, eine Bridge, ein Router und dergleichen. Bei den E/A-Einheiten 10, 145 kann es sich um eine beliebige verallgemeinerte kryptografische Karte oder Smart-Card handeln, die in der Technik bekannt sind. Das System 100 kann ferner eine Anzeigesteuereinheit 125 beinhalten, die mit einer Anzeige 130 verbunden ist. Bei beispielhaften Ausführungsformen kann das System 100 ferner eine Netzwerkschnittstelle zum Verbinden mit einem Netzwerk 165 beinhalten. Bei dem Netzwerk 165 kann es sich um ein IP-Netzwerk zur Datenübertragung zwischen dem Computer 101 und einem beliebigen externen Server, Client und dergleichen über eine Breitbandverbindung handeln. Das Netzwerk 165 sendet und empfängt Daten zwischen dem Computer 101 und externen Systemen 30, die einbezogen sein können, um einen Teil oder alle der Schritte der hierin erörterten Verfahren durchzuführen. Bei beispielhaften Ausführungsformen kann es sich bei dem Netzwerk 165 um ein verwaltetes IP-Netzwerk handeln, das durch einen Dienstanbieter administriert wird. Das Netzwerk 165 kann in drahtloser Form realisiert sein, z.B. unter Verwendung von Funkprotokollen und -technologien wie zum Beispiel WLAN, WiMax usw. Bei dem Netzwerk 165 kann es sich außerdem um ein Netzwerk mit Paketvermittlung wie zum Beispiel ein lokales Netzwerk, ein Weitverkehrsnetzwerk, ein Stadt- oder Regionalnetzwerk, das Internet-Netzwerk oder eine ähnliche Art von Netzwerkumgebung handeln. Bei dem Netzwerk 165 kann es sich um ein Fixed Wireless Network, ein drahtloses lokales Netzwerk (local area network, LAN), ein drahtloses Weitverkehrsnetzwerk (wide area network, WAN), ein Personal Area Network (PAN), ein virtuelles privates Netzwerk (VPN), ein Intranet oder ein anderes geeignetes Netzwerksystem handeln, das Ausrüstungen zum Empfangen und Senden von Signalen beinhaltet.
  • Wenn es sich bei dem Computer 101 um einen PC, eine Workstation, eine intelligente Einheit oder dergleichen handelt, kann die Software im Arbeitsspeicher 110 ferner ein Basic Input Output System (BIOS) 122 enthalten. Beim BIOS handelt es sich um einen Satz notwendiger Softwareroutinen, die beim Einschalten Hardware initialisiert und testet, das BS 111 startet und die Übertragung von Daten zwischen den Hardwareeinheiten unterstützt. Das BIOS ist im ROM gespeichert, sodass das BIOS ausgeführt werden kann, wenn der Computer 101 aktiviert wird.
  • Im Betriebszustand des Computers 101 ist der Prozessor 105 so konfiguriert, dass im Arbeitsspeicher 110 gespeicherte Software 112 ausgeführt, Daten zum und aus dem Arbeitsspeicher 110 übertragen und der Software folgend Operationen des Computers 101 allgemein gesteuert werden. Die hierin beschriebenen Verfahren und das BS 111 werden ganz oder teilweise, aber normalerweise in letztgenannter Weise, durch den Prozessor 105 gelesen, eventuell innerhalb des Prozessors 105 gepuffert und anschließend ausgeführt. Der Speicher 120 kann einen Plattenspeicher wie zum Beispiel einen Festplattenlaufwerksspeicher aufweisen.
  • 2 zeigt ein beispielhaftes kohärentes, gemeinsam genutztes Arbeitsspeichersystem 200 in Form eines Datenverarbeitungssystems, das unter Verwendung eines Kohärenzverzeichnisses 210 auf Verzeichnissen beruhende Kohärenz realisiert. Das kohärente, gemeinsam genutzte Arbeitsspeichersystem 200 weist eine Mehrzahl von N Prozessorkernen 202, 252 auf, die jeweils mit einem lokalen Prozessorcache 204, 254 verbunden sind. Daten werden zwischen den Prozessorcaches 204, 254 über eine Verbindungsstruktur 206 ausgetauscht. Die Verbindungsstruktur 206 verbindet ferner die Prozessorcaches 204, 254 mit dem Kohärenzverzeichnis 210. Das Kohärenzverzeichnis 210 überwacht den Inhalt der Prozessorcaches 204, 254, d.h. die darin enthaltenen Arbeitsspeicherzeilen, und realisiert auf diese Weise Kohärenz. Darüber hinaus verbindet die Verbindungsstruktur 206 die Caches 204, 254 mit einer Arbeitsspeicher-Speicher-Schnittstelle 212. Über die Arbeitsspeicher-Speicher-Schnittstelle 212 können Daten von einem Sicherungsspeicher in Form eines gemeinsam genutzten Arbeitsspeichers wie z.B. eines Hauptarbeitsspeichers empfangen und an diesen gesendet werden. Zum Beispiel versucht ein Prozessorkern 1, eine Arbeitsspeicherzeile aus einem Prozessorcache 1 abzurufen, was zu einem Cachefehltreffer führt, da der Prozessorcache 1 keine gültige Kopie der angeforderten Arbeitsspeicherzeile aufweist, oder der Prozessorkern 1 kann z.B. eine Schreibkopie anfordern, aber der Prozessorcache 1 weist unter Umständen nur eine Lesekopie auf. Der Prozessorkern 1 kann eine Anforderung bezüglich einer gültigen Kopie der gewünschten Arbeitsspeicherzeile über die Verbindungsstruktur 206 an das Kohärenzverzeichnis 210 senden. Das Kohärenzverzeichnis 210 prüft, ob ein beliebiger der weiteren Prozessorcaches die angeforderte Arbeitsspeicherzeile aufweist. Für den Fall, dass einer der weiteren Prozessorcaches die gewünschte Arbeitsspeicherzeile aufweist, kann das Kohärenzverzeichnis 210 die Anforderung an den jeweiligen weiteren Prozessorcache weiterleiten, der die gewünschte Arbeitsspeicherzeile aufweist. Für den Fall, dass keiner der weiteren Prozessorcaches die gewünschte Arbeitsspeicherzeile aufweist, kann das Kohärenzverzeichnis 210 die Anforderung über die Arbeitsspeicher-Speicher-Schnittstelle 212 an den Sicherungsspeicher weiterleiten. Auf diese Weise kann eine gültige Kopie der gewünschten Arbeitsspeicherzeile zum anfordernden Prozessorkern 1 übertragen werden, der die jeweilige Arbeitsspeicherzeile in den Cache 1 füllt.
  • 3 zeigt ein beispielhaftes kohärentes, gemeinsam genutztes Arbeitsspeichersystem 200 in Form eines Datenverarbeitungssystems, das eine Mehrzahl von Prozessorkernen 202, 252 aufweist, die jeweils mit einem lokalen Prozessorcache 204, 254 bereitgestellt sind. Arbeitsspeicherkohärenz wird auf der Grundlage von Rundsenden realisiert. Im Gegensatz zum gemeinsam genutzten Arbeitsspeichersystem von 2 weist das kohärente, gemeinsam genutzte Arbeitsspeichersystem 200 von 3 kein Kohärenzverzeichnis auf. Für den Fall von Kohärenz auf der Grundlage von Rundsenden sendet der Prozessorkern 1 für den Fall eines Cachefehltreffers die Anforderungen bezüglich einer gültigen Kopie der gewünschten Arbeitsspeicherzeile per Rundsenden über die Verbindungsstruktur 206 an die weiteren Prozessorkerne 2 bis N des kohärenten, gemeinsam genutzten Arbeitsspeichersystems 200. Für den Fall, dass der Prozessorkern 1 keine Antwort empfängt, die die angeforderte gültige Kopie der gewünschten Arbeitsspeicherzeile aufweist, kann der Prozessorkern 1 die Kopie über die Verbindung 206 und die Arbeitsspeicher-Speicher-Schnittstelle 212 vom Sicherungsspeicher anfordern.
  • 4 zeigt ein beispielhaftes kohärentes, gemeinsam genutztes Arbeitsspeichersystem 200 in Form eines Datenverarbeitungssystems, das eine Mehrzahl von Prozessorchips 201, 251 aufweist. Jeder Prozessorchip ist mit einem lokalen Prozessorcache 204, 254 bereitgestellt. Arbeitsspeicherkohärenz der Caches 204 wird auf der Grundlage von Rundsenden realisiert. Die Verbindungsstruktur 206 ermöglicht Datenübertragung zwischen den Caches 204, 254 und einer Arbeitsspeicher-Speicher-Schnittstelle 212. Die Arbeitsspeicher-Speicher-Schnittstelle 212 kann z.B. durch einen Arbeitsspeicherteilsystemchip bereitgestellt sein. Das Abrufen einer gültigen Kopie einer gewünschten Arbeitsspeicherzeile kann analog zum Verfahren von 3 durchgeführt werden.
  • 5 zeigt ein beispielhaftes kohärentes, gemeinsam genutztes Arbeitsspeichersystem 200 in Form eines Datenverarbeitungssystems, das eine Mehrzahl von Prozessorchips 201, 251 aufweist. Jeder Prozessorchip ist mit einem lokalen Prozessorcache 204, 254 bereitgestellt. Arbeitsspeicherkohärenz der Caches 204 wird unter Verwendung des Kohärenzverzeichnisses 210 realisiert, das durch einen Arbeitsspeicherteilsystemchip 203 bereitgestellt wird. Der Arbeitsspeicherteilsystemchip 203 stellt ferner eine Verbindungsstruktur 206 bereit, die Datenübertragung zwischen den Caches 204, 254, dem Kohärenzverzeichnis 210 und einer Arbeitsspeicher-Speicher-Schnittstelle 212 ermöglicht. Die Arbeitsspeicher-Speicher-Schnittstelle 212 kann z.B. durch den Arbeitsspeicherteilsystemchip 203 bereitgestellt sein. Das Abrufen einer gültigen Kopie einer gewünschten Arbeitsspeicherzeile kann analog zum Verfahren von 2 durchgeführt werden.
  • 6 zeigt ein beispielhaftes Verfahren zum Koordinieren einer Ausführung von Anweisungen durch eine Prozessoreinheit wie z.B. einen Prozessorchip 201 unter Verwendung einer Barriereanweisung. Der Prozessorchip 201 weist eine Anweisungsausführungseinheit 246 auf, die Anweisungen ausführt. Eine ausgeführte Anweisung kann eine Kopie einer Arbeitsspeicherzeile erfordern. Bei den Anweisungen kann es sich z.B. um eine Lese- oder Schreibanweisung handeln. Die Anweisungsausführungseinheit 246 prüft, ob der Prozessorcache 204 die erforderliche Arbeitsspeicherzeile aufweist. Für den Fall eines Cachefehltreffers wird eine Anforderung an den gemeinsam genutzten Arbeitsspeicher 214 gesendet, die eine Kopie der gewünschten Arbeitsspeicherzeile anfordert, um die Kopie in den Prozessorcache 204 zu füllen. An den gemeinsam genutzten Arbeitsspeicher 214 gesendete Nachrichten wie z.B. Anforderungen oder Befehle sowie vom gemeinsam genutzten Arbeitsspeicher 214 empfangene Nachrichten werden in Schritt 302 auf Informationen hinsichtlich der Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem 200 hinweg in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile geprüft. Zum Beispiel kann vom gemeinsam genutzten Arbeitsspeicher 214 eine Antwort empfangen werden, die die angeforderte Kopie der Arbeitsspeicherzeile aufweist. Die durch die Antwort bereitgestellte Kopie der Arbeitsspeicherzeile wird in den Prozessorcache 204 gefüllt, um z.B. die Ausführung der oben erwähnten Anweisung zu vollenden oder eine Ausführung möglicher nachfolgender Anweisungen unter Verwendung von Vorabzugriffen zu beschleunigen. In Schritt 302 können entweder die Nachricht selbst oder deren zur Prüfung erzeugte Kopie verwendet werden. Die Nachrichten können jeweils ein Kohärenzweitergabefeld aufweisen, das in Schritt 304 geprüft wird. Für den Fall, dass das Kohärenzweitergabefeld Markierungsinformationen aufweist, die anzeigen, dass die Weitergabe von Arbeitsspeicherkohärenz in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile nicht bestätigt ist, wird in Schritt 306 ein Indikator der jeweiligen Arbeitsspeicherzeile wie z.B. ihre Arbeitsspeicheradresse zu einem Puffer 248 des Prozessorchips 201 hinzugefügt. Puffer 248, der auch als Nicht-weitergegeben-Puffer bezeichnet wird, kann einen ungeordneten Satz von Adressen von Arbeitsspeicher Zeilen aufweisen, für die Weitergabe von Speicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem 200 noch nicht bestätigt wurde. Für den Fall, dass das Kohärenzweitergabefeld Markierungsinformationen aufweist, die anzeigen, dass die Weitergabe von Arbeitsspeicherkohärenz in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile bestätigt ist, wird in Schritt 308 der Indikator, sofern er vorliegt, der jeweiligen Arbeitsspeicherzeile der jeweiligen Arbeitsspeicheradresse aus dem Puffer 248 des Prozessorchips 201 entfernt. Für den Fall, dass das Kohärenzweitergabefeld Informationen aufweist, die anzeigen, dass hinsichtlich des Puffers 248 keine Aktion erforderlich ist, wird keine Aktion 310 durchgeführt.
  • Nach dem Ausführen einer Arbeitsspeicherbarriereanweisung durch die Anweisungsausführungseinheit 246 des Prozessorchips 201 wird an den Puffer 248 eine Barriereanforderung gesendet, die prüft, ob der Puffer 248 beliebige Indikatoren aufweist, die Arbeitsspeicherzeilen anzeigen, für die Weitergabe von Kohärenz über das kohärente, gemeinsam genutzte Arbeitsspeichersystem 200 hinweg noch nicht bestätigt wurde. Für den Fall, dass der Puffer 248 beliebige Indikatoren enthält, wird in Schritt 300 gewartet, bis der Puffer 248 leer ist. Solange der Puffer 248 nicht leer ist, wird die Vollendung der Ausführung der Barriereanweisung verhindert. Für den Fall, dass festgestellt wird, dass der Puffer 248 leer ist, wird an die Anweisungsausführungseinheit 246 eine Barriereantwort gesendet, die die Anweisungsausführungseinheit 246 informiert, dass der Puffer 248 leer ist. Sobald der Puffer 248 leer ist, vollendet die Anweisungsausführungseinheit 246 die Ausführung der Barriereanweisung.
  • 7 zeigt ein beispielhaftes Kohärenzverzeichnis 210 eines kohärenten, gemeinsam genutzten Arbeitsspeichersystems 200. Das kohärente, gemeinsam genutzte Arbeitsspeichersystem 200 weist eine Mehrzahl von Prozessorcaches 204, 244 auf, die zu Datenübertragungszwecken über eine Verbindungsstruktur 204 mit einem gemeinsam genutzten Arbeitsspeicher 214 verbunden sind. Der gemeinsam genutzte Arbeitsspeicher 214 kann eine Mehrzahl von Arbeitsspeicher-Hubs 270, 280 aufweisen. Anforderungen von den Prozessorcaches 204, 244 für den Fall von Cachefehltreffern werden über die Verbindungsstruktur 206 an das Kohärenzverzeichnis 210 gesendet. Das Kohärenzverzeichnis 210 weist eine Verzeichnissteuereinheit 272 (directory controller, DC) auf, die das Kohärenzverzeichnis 210 steuert. Das Kohärenzverzeichnis 210 kann ferner eine Verzeichnistabelle 274 aufweisen. Die Verzeichnistabelle 274 kann eine Mehrzahl von Einträgen mit einer Arbeitsspeicherzeile pro Eintrag aufweisen. Mit anderen Worten, jeder Eintrag der Verzeichnistabelle 274 kann einer Arbeitsspeicherzeile zugewiesen sein, von der eine Kopie durch einen oder mehrere der Prozessorcaches 204, 244 verwendet wird. Die Einträge können ein Adresskennzeichen mit der Arbeitsspeicheradresse der Arbeitsspeicherzeile, der der jeweilige Eintrag zugewiesen ist, Statusinformationen, Zugriffstypinformationen und ID-Informationen aufweisen. Die Statusinformationen können anzeigen, ob der Status der Kopie der Arbeitsspeicherzeile in den Prozessorcaches 204, 244 stabil ist, d.h. T = 0, oder ob er aktuell einer Änderung unterliegt, sodass es sich um einen Übergangsstatus handelt, d.h. T = 1. Im Falle eines stabilen Status erfolgen aktuell keine Änderungen. Der Eintrag kann ferner den Zugriffstyp der Arbeitsspeicherzeile durch die Prozessorcaches 204, 244 kennzeichnen, wie z.B. einen gemeinsam genutzten Lesezugriff oder einen exklusiven Schreibzugriff. Des Weiteren können die Prozessorcaches 204, 244, die aktuell eine Kopie der Arbeitsspeicherzeile verwenden, durch die ID-Informationen gekennzeichnet sein, die z.B. eine Kennung eines Prozessors aufweisen können, der funktionsmäßig mit dem zu kennzeichnenden Prozessorcaches 204, 244 verbunden ist, und/oder eine Kennung des jeweiligen Prozessorcache 204, 244 selbst.
  • Für den Fall, dass es sich bei dem Status der Kopien der Arbeitsspeicherzeile in den Prozessorcaches 204, 244 um einen Übergangsstatus handelt, d.h., die Kopien der Arbeitsspeicherzeile unterliegen aktuell Änderungen, um Kohärenz über die Prozessorcaches 204, 244 herzustellen, kann der Verzeichnistabelleneintrag einen Zeiger auf einen Eintrag in einer Übergangstabelle 276 aufweisen. Zum Beispiel müssen für den Fall, dass durch einen der Prozessorcaches 204, 244 eine exklusive Schreibkopie der Arbeitsspeicherzeile angefordert wird, durch andere Prozessorcaches 204, 244 gemeinsam genutzte Lesekopien invalidiert werden. Das Kohärenzverzeichnis 210 kann eine Übergangstabelle 276 aufweisen, um die Weitergabe von Kohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf eine einzelne Arbeitsspeicherzeile zu überwachen. Für den Fall, dass sich eine Kopie einer Arbeitsspeicherzeile in einem Übergangszustand befindet, kann für die jeweilige Arbeitsspeicherzeile ein Eintrag in der Übergangstabelle 276 erzeugt werden. Die Übergangstabelle 276 kann eine Mehrzahl von Einträgen mit einer Arbeitsspeicherzeile pro Eintrag aufweisen. Mit anderen Worten, jeder Eintrag der Übergangstabelle 276 kann einer Arbeitsspeicherzeile mit Übergangskopien zugewiesen sein, von der eine Kopie durch einen oder mehrere der Prozessorcaches 204, 244 verwendet wird. Ein Eintrag der Übergangstabelle 276 kann alle diejenigen Prozessorcaches 204, 244 kennzeichnen, die aktuell Kopien der jeweiligen Arbeitsspeicherzeilen verwenden. Für jeden dieser Prozessorcaches 204, 244 kann der Eintrag den neuesten Zustand der Kopie der Arbeitsspeicherzeile überwachen, die durch die jeweiligen Prozessorcaches 204, 244 verwendet wird, wie z.B. gemeinsam genutzte Lesekopie, exklusive Schreibkopie oder ungültig. Des Weiteren kann der Eintrag Anforderungen, die vom jeweiligen Prozessorcache 204, 244 empfangen wurden, und ausstehende Anforderungen überwachen, die durch das Kohärenzverzeichnis an den jeweiligen Prozessorcache 204, 244 gesendet wurden, d.h. Anforderungen, für die Antworten erforderlich sind. Schließlich kann der Übergangstabelleneintrag für jeden dieser Prozessorcaches 204, 244 einen Indikator aufweisen, der anzeigt, ob die jeweiligen Prozessorcaches 204, 244 benachrichtigt werden müssen, sobald durch das Kohärenzverzeichnis 210 eine Bestätigung der Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf die Arbeitsspeicherzeile erhalten wurde. Der Übergangstabelle 276 kann ein Bitvektor 278 beigefügt sein, der anzeigt, welche Einträge der Übergangstabelle aktuell zur Verwendung frei sind und welche aktuell zum Überwachen der Weitergabe von Kohärenz einer Arbeitsspeicherzeile verwendet werden.
  • Nach dem Empfangen einer Anforderung bezüglich einer Kopie einer Arbeitsspeicherzeile von einem der Prozessorcaches 204, 244 kann die Verzeichnissteuereinheit 272 des Kohärenzverzeichnisses 210 unter Verwendung der Verzeichnistabelle 274 ermitteln, ob einer der übrigen Prozessorcaches 204, 244 eine gültige Kopie der angeforderten Arbeitsspeicherzeile aufweist. Für den Fall, dass einer der übrigen Prozessorcaches 204, 244 eine gültige Kopie der angeforderten Arbeitsspeicherzeile aufweist, kann die Verzeichnissteuereinheit 272 die Anforderung an den jeweiligen Prozessorcache 204, 244 weiterleiten, um eine Kopie der angeforderten Arbeitsspeicherzeile abzurufen. Für den Fall, dass keiner der übrigen Prozessorcaches 204, 244 eine gültige Kopie der angeforderten Arbeitsspeicherzeile aufweist, kann die Verzeichnissteuereinheit 272 die Anforderung zu einer Arbeitsspeichersteuereinheit 275 weiterleiten, die einen Arbeitsspeicher 277 steuert, um von dem jeweiligen Arbeitsspeicher 277 eine Kopie der angeforderten Arbeitsspeicherzeile abzurufen.
  • 8 zeigt ein beispielhaftes Verfahren zum Verwalten eines Kohärenzverzeichnisses 210, das Kohärenz eines gemeinsam genutzten Arbeitsspeichersystems realisiert. In Schritt 400 empfängt das Kohärenzverzeichnis 210 über eine Verbindungsstruktur 206 eine Nachricht von einem Prozessorcache, z.B. C0, des gemeinsam genutzten Arbeitsspeichersystems. Die Nachricht kann eine Arbeitsspeicherzeile L betreffen. Zum Beispiel kann es sich bei der Nachricht um eine Anforderung bezüglich einer Kopie der Arbeitsspeicherzeile L handeln. Die Verzeichnissteuereinheit 272 des Kohärenzverzeichnisses 210 kann in Schritt 402 prüfen, ob ein Bedarf vorliegt, eine Nachricht M an den Prozessorcache C0 zu senden, z.B. als Antwort auf die empfangene Nachricht. Zum Beispiel muss die DC an den Prozessorcache C0 unter Umständen eine Nachricht M in Form einer Antwort senden, die die angeforderte Arbeitsspeicherzeile L aufweist. Für den Fall, dass kein Bedarf vorliegt, eine Nachricht M zu senden, kann die Verzeichnissteuereinheit 272 das Verarbeiten der empfangenen Meldung je nach ihrem Inhalt fortsetzen. Für den Fall, dass ein Bedarf vorliegt, eine Nachricht M zu senden, kann das Verfahren mit Schritt 404 fortgesetzt werden. In Schritt 404 prüft die Verzeichnissteuereinheit 272, ob die Übergangstabelle 276 einen Übergangseintrag für die Arbeitsspeicherzeile L aufweist. Zu diesem Zweck kann die Verzeichnissteuereinheit 272 zunächst die Verzeichnistabelle 274 prüfen. Für den Fall, dass die Verzeichnistabelle 274 einen Eintrag für die Arbeitsspeicherzeile L enthält, kann die Verzeichnissteuereinheit 272 prüfen, ob der jeweilige Eintrag der Verzeichnistabelle 274 einen Zeiger auf einen Eintrag der Übergangstabelle 276 aufweist, der der Arbeitsspeicherzeile L zugewiesen ist. Für den Fall, dass die Übergangstabelle 276 keinen Übergangseintrag für die Arbeitsspeicherzeile L aufweist, kann das Verfahren mit Schritt 410 fortgesetzt werden. In Schritt 410 kann zur Nachricht M eine Markierungsinformation hinzugefügt werden, die anzeigt, dass Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf eine Arbeitsspeicherzeile L bestätigt ist, d.h. Prop=yes (Weitergabe = Ja). Da das gemeinsam genutzte Arbeitsspeichersystem keinen Übergangszustand einer Kopie der Arbeitsspeicherzeile L aufweist, ist Arbeitsspeicherkohärenz für die Arbeitsspeicherzeile L stabil, und es ist keine Weitergabe nötig. In Schritt 416 wird die Nachricht M über die Verbindungsstruktur 206 an den Prozessorcache C0 gesendet. In Schritt 418 empfängt der Prozessorcache C0 die Nachricht M vom Kohärenzverzeichnis 210.
  • Für den Fall, dass in Schritt 404 festgestellt wird, dass die Übergangstabelle 276 einen Übergangseintrag für die Arbeitsspeicherzeile L aufweist, kann das Verfahren mit Schritt 406 fortgesetzt werden. Ein Übergangseintrag für die Arbeitsspeicherzeile L bedeutet, dass Kohärenz in Bezug auf die Arbeitsspeicherzeile L über das gemeinsam genutzte Arbeitsspeichersystem hinweg weitergegeben werden muss. In Schritt 406 wird unter Verwendung der Übergangstabelle 276 geprüft, ob durch einen oder mehrere der Prozessorcaches des gemeinsam genutzten Arbeitsspeichersystems Aktionen durchgeführt werden müssen, um Kohärenz herzustellen. Zum Beispiel wird unter Umständen erwartet, dass eine oder mehrere gültige Kopien der Arbeitsspeicherzeile L invalidiert werden müssen, um Kohärenz herzustellen. Für den Fall, dass keine weiteren Aktionen durchgeführt werden müssen, kann das Verfahren in Schritt 408 fortgesetzt werden. Da sich die Arbeitsspeicherzeile L in einem Übergangszustand befindet, d.h., Kohärenz für die Arbeitsspeicherzeile L wurde noch nicht bestätigt, kann der Kohärenzweitergabe-Benachrichtigungsindikator für den Prozessorcache C0 im Übergangseintrag der Arbeitsspeicherzeile L in der Übergangstabelle 276 anzeigen, dass dem Prozessorcache C0 eine Bestätigung der Weitergabe von Kohärenz bereitgestellt werden muss, sobald durch die Verzeichnissteuereinheit 272 des Kohärenzverzeichnisses 210 eine derartige Bestätigung erhalten wird. Keine weiteren Aktionen zeigen an, dass die Weitergabe von Kohärenz erfolgreich vollendet wurde, d.h., dass eine Bestätigung für die Weitergabe bereitgestellt wurde. In Schritt 408 kann für den Fall, dass der Prozessorcache C0 über die Bestätigung informiert ist, der Weitergabebenachrichtigungsindikator für den Prozessorcache C0 geändert werden, sodass er anzeigt, dass dem Prozessorcache C0 keine Bestätigung der Weitergabe von Kohärenz bereitgestellt werden muss, während in Schritt 410 die jeweilige Bestätigung zur Nachricht M hinzugefügt wird. Die Nachricht M wird anschließend an den Prozessorcache C0 gesendet, wie in den Schritten 416 und 418 gezeigt.
  • Für den Fall, dass die Prüfung von Schritt 406 anzeigt, dass nach wie vor Aktionen durchgeführt werden müssen, kann das Verfahren mit Schritt 412 fortgesetzt werden. Derartige durchzuführende Aktionen können durch ausstehende Anforderungen angezeigt werden, die im Übergangseintrag der Arbeitsspeicherzeile L aufgezeichnet sind, d.h. kennzeichnende Anforderungen, die noch nicht ausgeführt oder bestätigt wurden. In Schritt 412 wird sichergestellt, dass der Kohärenzweitergabe-Benachrichtigungsindikator für den Prozessorcache C0 im Übergangseintrag der Arbeitsspeicherzeile L in der Übergangstabelle 276 anzeigt, dass dem Prozessorcache C0 eine Bestätigung der Weitergabe von Kohärenz bereitgestellt werden muss, sobald durch die Verzeichnissteuereinheit 272 des Kohärenzverzeichnisses 210 eine derartige Bestätigung erhalten wird. In Schritt 414 kann zur Nachricht M eine Markierungsinformation hinzugefügt werden, die anzeigt, dass Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf eine Arbeitsspeicherzeile L unbestätigt ist, d.h. Prop=no (Weitergabe = Nein). Die Nachricht M wird anschließend an den Prozessorcache C0 gesendet, wie in den Schritten 416 und 418 gezeigt.
  • 9 zeigt ein beispielhaftes Verfahren zum Verwalten eines Kohärenzverzeichnisses 210, das unter Verwendung derselben Infrastruktur wie in 8 gezeigt Kohärenz eines gemeinsam genutzten Arbeitsspeichersystems realisiert. In Schritt 500 empfängt das Kohärenzverzeichnis 210 über die Verbindungsstruktur 206 eine Nachricht von einem Prozessorcache, z.B. C0, des gemeinsam genutzten Arbeitsspeichersystems. Die Nachricht kann eine Arbeitsspeicherzeile L betreffen. Zum Beispiel kann es sich bei der Nachricht um eine Anforderung bezüglich einer Kopie der Arbeitsspeicherzeile L handeln. In Schritt 502 prüft die Verzeichnissteuereinheit 272 des Kohärenzverzeichnisses 210 unter Verwendung der Verzeichnistabelle 274 und der Übergangstabelle 276, ob die Verzeichnissteuereinheit 272 einen Übergangseintrag für die Arbeitsspeicherzeile L in der Übergangstabelle 276 aktualisiert hat. Für den Fall, dass die Verzeichnissteuereinheit 272 feststellt, dass in der Übergangstabelle 276 keine Aktualisierung eines Übergangseintrags für die Arbeitsspeicherzeile L vorliegt, setzt die Verzeichnissteuereinheit 272 das Verarbeiten der empfangenen Nachricht je nach ihrem Inhalt fort. Für den Fall, dass die Verzeichnissteuereinheit 272 in der Übergangstabelle 276 einen Übergangseintrag für die Arbeitsspeicherzeile L aktualisiert hat, kann das Verfahren mit Schritt 504 fortgesetzt werden. In Schritt 504 wird unter Verwendung der Übergangstabelle 276 geprüft, ob durch einen oder mehrere der Prozessorcaches des gemeinsam genutzten Arbeitsspeichersystems Aktionen durchgeführt werden müssen, um Kohärenz herzustellen. Zum Beispiel wird geprüft, ob gemäß dem Übergangseintrag der Arbeitsspeicherzeile L eine Antwort erwartet wird, die eine Invalidierung einer Kopie der Arbeitsspeicherzeile L bestätigt, die durch einen der Prozessorcaches des gemeinsam genutzten Arbeitsspeichersystems verwendet wird. Für den Fall, dass die Verzeichnissteuereinheit 272 feststellt, dass Aktionen erwartet werden, die zum Herstellen von Kohärenz ausgeführt werden sollen, kann die Verzeichnissteuereinheit 272 das Verarbeiten der empfangenen Nachricht je nach ihrem Inhalt fortsetzen, z.B. gemäß dem Verfahren von 8. Für den Fall, dass die Verzeichnissteuereinheit 272 feststellt, dass keine Aktionen erwartet werden, die zum Herstellen von Kohärenz ausgeführt werden sollen, kann das Verfahren mit Schritt 506 fortgesetzt werden. In Schritt 506 wird durch die Verzeichnissteuereinheit 272 geprüft, ob der Übergangseintrag der Arbeitsspeicherzeile L einen Kohärenzweitergabe-Benachrichtigungsindikator aufweist, der einen beliebigen Prozessorcache CX, X ∈ {0, 1, ..., N} des gemeinsam genutzten Arbeitsspeichersystems kennzeichnet, der für den Fall benachrichtigt werden soll, dass die Weitergabe von Kohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf die Arbeitsspeicherzeile L bestätigt ist. Für den Fall, dass die Verzeichnissteuereinheit 272 einen oder mehrere Prozessorcaches CX ermittelt, wird in Schritt 508 eine Nachricht in Form eines Befehls „D2Ccmd.Propagated (addr A, Prop=yes)“ an jeden der Prozessorcaches CX gesendet, die anzeigt, dass die Weitergabe von Kohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf die Arbeitsspeicherzeile L mit der Arbeitsspeicheradresse A bestätigt ist, d.h. Prop=yes. Die Nachricht wird durch die Prozessorcaches CX in Schritt 512 empfangen. In Schritt 510 wird der Kohärenzweitergabe-Benachrichtigungsindikator für die benachrichtigten Prozessorcaches CX geändert, sodass die Indikatoren keinen weiteren Informationsbedarf für die Prozessorcaches CX anzeigen.
  • Die 10A und 10B zeigen ein beispielhaftes Verfahren zum Koordinieren einer Ausführung einer Anweisungsabfolge unter Verwendung einer Barriereanweisung durch einen Prozessor eines kohärenten, gemeinsam genutzten Arbeitsspeichersystems. Kohärenz des gemeinsam genutzten Arbeitsspeichersystems kann unter Verwendung eines Kohärenzverzeichnisses realisiert werden. Ein Prozessor, d.h. P0, des gemeinsam genutzten Arbeitsspeichersystems kann eine Anweisung einer Anweisungsabfolge ausführen. Die Ausführung der Anweisung kann ein Schreiben auf eine Arbeitsspeicherzeile mit der Arbeitsspeicheradresse A aufweisen, d.h. Füllen einer geänderten Kopie der Arbeitsspeicherzeile mit der Arbeitsspeicheradresse A in einen Prozessorcache von P0. Eine in der Anweisungsabfolge enthaltene Arbeitsspeicherbarriereanweisung wird durch P0 ausgeführt. Die Vollendung der Ausführung der Speicherbarriereanweisung wird verhindert, bis Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf die geänderte Kopie der Arbeitsspeicherzeile mit der Arbeitsspeicheradresse A vollendet und bestätigt ist. Zum Beispiel muss die Auswirkung des P0-Schreibvorgangs an einen weiteren Prozessor des gemeinsam genutzten Arbeitsspeichersystems weitergegeben werden, z.B. an P1. Zunächst enthält unter Umständen keiner der Prozessorcaches eine Kopie der Arbeitsspeicherzeile mit der Adresse A. Daher weist die Verzeichnistabelle in einem Arbeitsspeicher-Hub mit dem Kohärenzverzeichnis unter Umständen keinen Eintrag auf, der auf die Arbeitsspeicheradresse Ader Arbeitsspeicherzeile verweist.
  • In Schritt 600 kann der Prozessor P1 eine Leseanweisung „A laden“ ausführen, die im lokalen Prozessorcache C1 von P1 fehlschlägt. Daher gibt C1 eine Anforderung an das Kohärenzverzeichnis aus, z.B. „C2Dreq.I2S(Addr=A, Prop=NA)“, die Informationen aufweist, die anzeigen, dass keine Aktion (NA) an einem Nicht-weitergegeben-Puffer UB1 von P1 erforderlich ist. Bei der Anforderung „Request C2Dreq.I2S(Addr=A, Prop=NA)“ handelt es sich um eine Anforderung (req), die von einem Prozessorcache (C) an ein Kohärenzverzeichnis (D) gesendet wird und eine gemeinsam genutzte Lesekopie (S) einer Arbeitsspeicherzeile mit der Adresse A anfordert. In Schritt 602 empfängt die Verzeichnissteuereinheit, d.h. DC, des Kohärenzverzeichnisses die Anforderung „C2Dreq.I2S(Addr=A, Prop=NA)“. DC findet in der Verzeichnistabelle, d.h. DT, des Kohärenzverzeichnisses keinen Eintrag für die Arbeitsspeicheradresse A. Daher richtet DC in DT einen neuen Eintrag des Typs „stabil“, d.h. T = 0, und des Typs „gemeinsam genutzt, lesen“ ein, d.h. W = 0. Der entstehende Eintrag in DT kann z.B. die Form [Addr=A. T=0. W=0. P1 im ID-Feld gesetzt] haben. DC verwendet eine Arbeitsspeichersteuereinheit, um die angeforderten Daten, d.h. eine Kopie der Arbeitsspeicherzeile mit der Adresse A, aus einem Hauptarbeitsspeicher abzurufen. In Schritt 604 sendet DC eine Antwort „D2Creply.I2S(Addr=A, data, Prop=yes) an P1. In Schritt 606 empfängt P1 die Antwort „D2Creply.I2S(Addr=A, data, Prop=yes)“, die die Adresse A aus UB1 entfernt, sofern sie vorliegt. Die Antwort „D2Creply.I2S(Addr=A, data, Prop=yes) bewirkt, dass der lokale Prozessorcache C1 einen Eintrag für die gemeinsam genutzte Lesekopie der Arbeitsspeicherzeilenadresse A einrichtet und die Anweisung „A laden“ erfüllt, indem die empfangene gemeinsam genutzte Lesekopie der Arbeitsspeicherzeilenadresse A in C1 gefüllt wird.
  • In Schritt 608 führt P0 nach der angenommenen Vollendung der oben erwähnten Aktionen eine Anweisung „A speichern, Wert“ aus, d.h. eine Anweisung zum Schreiben des Wertes in die Arbeitsspeicherzeile mit der Adresse A, die in C0 von P0 fehlschlägt. Daher gibt C0 eine Anforderung „C2Dreq.I2E(Addr=A, Prop=NA)“ aus, die keine Aktion (NA) an einem Nicht-weitergegeben-Puffer UB0 von P0 enthält, und sendet die Anforderung an das Kohärenzverzeichnis. In Schritt 610 empfängt DC eine Anforderung „C2Dreq.I2E(Addr=A, Prop=NA)“ bezüglich einer exklusiven Schreibkopie der Arbeitsspeicherzeile mit der Arbeitsspeicheradresse A. Für die Arbeitsspeicherzeile mit der Arbeitsspeicheradresse A findet DC in DT den oben eingerichteten „stabil, gemeinsam genutzt, lesen“-Eintrag [Addr=A. T=0. W=0. P1 im ID-Feld gesetzt]. In Schritt 612 sendet DC eine Anforderung „D2Creq.S2I(Addr=A, Prop=yes)“ an P1, um zu bewirken, dass P1 die gemeinsam genutzte Lesekopie der Arbeitsspeicherzeile mit der Arbeitsspeicheradresse A in C1 invalidiert. Des Weiteren wählt DC einen beliebigen der nicht verwendeten Einträge in der Übergangstabelle, d.h. TT, indem dessen Index als TTindexA notiert wird. DC ändert den DT-Eintrag in den Typ „Übergang“, d.h. T = 1, was zu dem Eintrag [Addr=A. T=1. Pointer=TTindexA.] führt. Des Weiteren setzt DC den TT-Eintrag auf TTindexA to [PO(E, -, -, yes). P1(S, -, S2I, no). P2(I, -, -, no)], um den Übergangszustand gemäß der Syntax (LATEST_STATE, RECEIVED_REQUEST, SENT_REQUEST, PropNotify?) für jeden Prozessorcache zu codieren. Der TT-Eintrag zeigt an, dass C0 von P0 eine exklusive Schreibkopie aufweist und nicht informiert werden muss, sobald eine Bestätigung der Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf das Füllen der exklusiven Schreibkopie in C0 vollendet ist. P1 weist eine gemeinsam genutzte Lesekopie auf, aber das Kohärenzverzeichnis wartet auf eine Bestätigung der Ausführung der Invalidierungsanforderung, die an C1 von P1 gesendet wurde. Es liegt kein Bedarf vor, C1 von P1 über die Weitergabe von Kohärenz in Bezug auf das Füllen der exklusiven Schreibkopie in C0 zu informieren. Schließlich weist ein Prozessorcache C2 eines weiteren Prozessors P2 des gemeinsam genutzten Arbeitsspeichersystems eine ungültige Kopie der Arbeitsspeicherzeile mit der Adresse A auf und muss nicht über die Weitergabe von Kohärenz informiert werden. DC verwendet eine Arbeitsspeichersteuereinheit, um die angeforderten Daten, d.h. eine Kopie der Arbeitsspeicherzeile mit der Adresse A, aus dem Hauptarbeitsspeicher abzurufen. In Schritt 614 sendet DC eine Antwort „D2Creply.I2E(Addr=A, data, Prop=no) an den Prozessor P0. Die Antwort an P0 weist Prop=no auf, und der Übergangseintrag für P0 weist PropNotify=yes auf, da der Übergangseintrag für die Arbeitsspeicherzeile mit der Adresse A mindestens einen anderen Prozessor als P0 mit einer ausstehenden SENT_REQUEST kennzeichnet, d.h. P1. Bei diesem Szenario weist P1 SENT_REQUEST=S21 auf.
  • In Schritt 616 empfängt P1 eine Anforderung „D2Creq.S2I(Addr=A, Prop=yes)“, die die Adresse A aus UB1 entfernt, sofern sie vorliegt. Die Anforderung „D2Creq.S2I(A, Prop=yes)“ bewirkt ferner, dass der Prozessorcache C1 die gemeinsam genutzte Lesekopie der Arbeitsspeicherzeile mit der Adresse A invalidiert. In Schritt 618 gibt P1 eine Antwort „C2Dreply.S2I(Addr=A, Prop=NA)“ aus, die die Invalidierung der gemeinsam genutzten Lesekopie der Arbeitsspeicherzeile mit der Adresse A bestätigt, und sendet diese an das Kohärenzverzeichnis. Die Antwort zeigt an, dass keine Aktion, d.h. NA, an UB1 erforderlich ist.
  • In Schritt 620 empfängt P0 eine Antwort „D2Creply.I2E(Addr=A, data, Prop=no)“, die die exklusive Schreibkopie der Arbeitsspeicherzeile mit der Adresse A zu UB0 hinzufügt. Die Antwort „D2Creply.I2E(Addr=A, data, Prop=no)“ bewirkt, dass C0 einen Eintrag für die exklusive Schreibkopie der Arbeitsspeicherzeile mit der Adresse A einrichtet und die jeweilige Arbeitsspeicherzeile in C0 füllt. Des Weiteren wird die Anweisung „A laden, Wert“ durch Speichern des jeweiligen Wertes in der Kopie der Arbeitsspeicherzeile mit der Adresse A ausgeführt. Die nachfolgenden Schritte 612, 616 und 618 einerseits und die nachfolgenden Schritte 614 und 620 andererseits können gleichzeitig oder in beliebiger Reihenfolge erfolgen.
  • In Schritt 622 empfängt die Verzeichnissteuereinheit DC vom Prozessor P1 eine Antwort „C2Dreply.S2I(Addr=A, Prop=NA)“. Für die Arbeitsspeicheradresse A findet DC in DT einen Eintrag des Typs „Übergang“, d. h. T = 1, der Form [Addr=A. T=1. Pointer=TTindexA] mit einem Zeiger auf den TT-Eintrag [PO(E, -, -, yes). P1(S, -, S21, no). P2(I, -, -, no)]. Die Antwort „C2Dreply.S2I(Addr=A, Prop=NA)“ vom Prozessor P1 bewirkt, dass DC die P1-Werte im TT-Eintrag aktualisiert. Der aktualisierte TT-Eintrag wird zu [PO(E, -, -, yes). P1(I, -, -, no). P2(I, -, -, no)]. Der aktualisierte TT-Eintrag weist keine ausstehende SENT_REQUEST an beliebige von Prozessoren des gemeinsam genutzten Arbeitsspeichersystems auf, wodurch die Weitergabe von Kohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg bestätigt wird. Des Weiteren weist der aktualisierte TT-Eintrag den Wert P0(E, -, -, yes) auf, der eine Benachrichtigung von P0 anfordert, wenn die Weitergabe von Kohärenz bestätigt ist.
  • In Schritt 624 sendet DC einen Befehl „D2Ccmd.Propagated(Addr=A, Prop=yes)“ an den Prozessor P0. Des Weiteren löscht DC PropNotify für P0, d.h. setzt den TT-Eintrag auf [PO(E, -, -, no). P1(I, -, -, no). P2(I, -, -, no)]. Dieser TT-Eintrag beschreibt keinen beliebigen Übergangszustand, da keine ausstehende SENT_REQUEST an beliebige von Prozessoren des gemeinsam genutzten Arbeitsspeichersystems vorliegt. Mit anderen Worten, der jeweilige TT-Eintrag beschreibt einen stabilen Zustand. Daher setzt DC den Eintrag in DT für die Arbeitsspeicherzeile mit der Adresse A auf den Typ „stabil“ d.h. T = 0, und den Typ „exklusiver Schreibvorgang“, d.h. W = 1. Der entstehende DT-Eintrag lautet [Addr=A. T=0. W=1. P0 im ID-Feld-gesetzt]. Schließlich löscht DC den TT-Eintrag mit TTindexA und gibt TTindexA an die nicht verwendeten Einträge 278 in der Übergangstabelle zurück.
  • In Schritt 626 führt P0 eine Arbeitsspeicherbarriereanweisung aus. Die Arbeitsspeicherbarriereanweisung kann z.B. erfordern, dass durch die zu vollendende Anweisungsabfolge zuvor alle Schreibanweisungen ausgegeben werden. Das Vollenden der Arbeitsspeicherbarriereanweisung wird verhindert, bis UB0 leer ist. Da P0 „D2Ccmd.Propagated(Addr=A, Prop=yes)“ noch nicht vom Kohärenzverzeichnis empfangen hat, weist UB0 nach wie vor die Adresse A auf, und die Vollendung der Ausführung der Arbeitsspeicherbarriereanweisung wird verhindert. In Schritt 628 empfängt C0 eine Antwort „D2Ccmd.Propagated(Addr=A, Prop=yes)“, die die Adresse A aus UB0 entfernt. Daher ist in Schritt 628 der UB0 an P0 leer, und die Arbeitsspeicherbarriereanweisung wird vollendet. In Schritt 630 wird die Ausführung der Anweisungsabfolge an P0 fortgesetzt.
  • Beispielhafte Verzeichnis-an-Cache-Nachrichten (D2C-Nachrichten) können zum Beispiel Anforderungen „D2Creq()“, Antworten „D2Creply()“ und Befehle „\D2Ccmd()“ aufweisen. Eine Anforderung „D2Creq()“ erfordert eine nachfolgende Antwort „C2Dreply()“. Eine Antwort „D2Creply()“ wird als Reaktion auf eine vorhergehende Anforderung „C2Dreq()“ gesendet. Ein Befehl „D2Ccmd()“ hat keine nachfolgende Antwort.
  • Beispielhafte Cache-an-Verzeichnis-Nachrichten (C2D-Nachrichten) können zum Beispiel Anforderungen „C2Dreq()“, Antworten „C2Dreply()“ und Befehle „C2Dcmd()“ aufweisen. Eine Anforderung „C2Dreq()“ erfordert eine nachfolgende Antwort „C2Dreply()“. Eine Antwort „C2Dreply()“ wird als Reaktion auf eine vorhergehende Anforderung „C2Dreq()“ gesendet. Ein Befehl „C2Dcmd()“ hat keine nachfolgende Antwort.
  • Wenn eine Nachricht des Typs „Arbeitsspeicherzugriff“, d.h. eine Nachricht, die ein Füllen einer Arbeitsspeicherzeile in einen Prozessorcache betrifft, durch eine Prozessoreinheit gesendet oder empfangen wird, kann eine Kohärenzweitergabeprüfeinheit der Prozessoreinheit ein Kohärenzweitergabe-Benachrichtigungsfeld der Nachricht prüfen, um zu ermitteln, ob ein Bedarf vorliegt, auf einen Nicht-weitergegeben-Puffer der Prozessoreinheit einzuwirken, sowie, welche Aktionen erforderlich sind. Eine Nachricht des Typs „Arbeitsspeicherzugriff“ kann auch Nachrichten aufweisen, die eine Invalidierung einer Arbeitsspeicherzeile in einem Prozessorcache betreffen. Mögliche Werte des Kohärenzweitergabe-Benachrichtigungsfeldes in Nachrichten des Typs „Arbeitsspeicherzugriff“ können aufweisen: „Prop=yes“ bewirkt, dass die Arbeitsspeicheradresse der Arbeitsspeicherzeile in der jeweiligen Nachricht aus dem Nicht-weitergegeben-Puffer entfernt wird, sofern sie vorliegt. „Prop=no“ bewirkt, dass die Arbeitsspeicheradresse der Arbeitsspeicherzeile in der jeweiligen Nachricht zum Nicht-weitergegeben-Puffer hinzugefügt wird. „Prop=NA“ bewirkt keine Aktionen am Nicht-weitergegeben-Puffer.
  • In der folgenden Tabelle werden beispielhafte Verzeichnis-an-Cache-Anforderungen (D2C-Anforderungen) bereitgestellt:
    Nachricht Wert von prop Anmerkung
    D2Creq.S2I(addr, prop) yes|no yes|no gemäß Verzeichniseintrag bei diesem und anderen entsprechenden D2C-Nachrichtentypen
    D2Creq.E2I(addr, prop) yes|no
  • In der folgenden Tabelle werden beispielhafte Verzeichnis-an-Cache-Antworten (D2C-Antworten) bereitgestellt:
    Nachricht Wert von prop Anmerkung
    D2Creply.I2E(addr, data, prop) yes|no Beispielhaftes Szenario:
    Zunächst handelt es sich bei der Arbeitsspeicherzeile um eine in einem oder mehreren
    Prozessorcaches gemeinsam genutzte Lesekopie. Das Verzeichnis empfängt „C2Dreq.I2E()“ von einem weiteren Prozessor, wodurch bewirkt wird, dass das Verzeichnis „D2Creq.S2I()“ an die anfänglichen Prozessoren sendet.
    - Verzeichnis sendet „D2Creply.I2E(propagated = no)“, da „C2Dreply.S2I()“ noch nicht von allen anfänglichen Prozessoren empfangen wurde.
    D2Creply.I2S(addr, data, prop) yes|no
    D2Creply.I2S2I(addr, data, prop) yes|no Selbst wenn ein Prozessorcache nur kurz eine zu beseitigende Kopie des aktuellen Arbeitsspeicherzeilenwertes empfängt, muss die Weitergabe der Arbeitsspeicherzeile über den jeweiligen Prozessor überwacht werden.
  • In der folgenden Tabelle wird ein beispielhafter Verzeichnis-an-Cache-Befehl (D2C-Befehl) bereitgestellt:
    Nachricht Wert von prop Anmerkung
    D2Ccmd.Propagated(addr, prop) yes
  • In der folgenden Tabelle werden beispielhafte Cache-an-Verzeichnis-Anforderungen (C2D-Anforderungen) bereitgestellt:
    Nachricht Wert von prop Anmerkung
    C2Dreq.I2S(addr, prop) NA
    C2Dreq.I2E(addr, prop) NA
    C2Dreq.O2M(addr, prop) no Im MOESI-Protokoll kann ein Cache im Zustand „Im Besitz“ in den Zustand „Abgeändert“ versetzt werden, bevor Kontakt mit dem Kohärenzverzeichnis aufgenommen wird.
  • In der folgenden Tabelle werden beispielhafte Cache-an-Verzeichnis-Antworten (C2D-Antworten) bereitgestellt:
    Nachrichtentyp Wert von prop Anmerkung
    C2Dreply.S2I(addr, prop) NA Die Barrierefunktionalität erfordert, dass eine Arbeitsspeicherzeile im Nicht-weitergegeben-Puffer in diesem verbleibt, selbst wenn sich die jeweilige Arbeitsspeicherzeile nicht mehr im lokalen Cache befindet. In diesem Fall wird die Arbeitsspeicherzeile durch einen späteren Befehl „D2Ccmd.Propagated(addr)“ entfernt.
    Die Arbeitsspeicherzeile wird zum Beispiel auf Anforderung nach Empfangen einer Anforderung „D2C.S2Ireq(addr)“ entfernt.
    C2Dreply.E2I(addr, prop) NA
  • In der folgenden Tabelle werden beispielhafte Cache-an-Verzeichnis-Befehle (C2D-Befehle) bereitgestellt:
    Nachrichtentyp Wert von prop Anmerkung
    C2Dcmd.I2M.zero(addr, prop) no Bei einer zuvor ungültigen Arbeitsspeicherzeile im lokalen Cache wird lokales Durchschreiben eines Nullwertes nicht weitergegeben.
    C2Dcmd.M2I(addr, data, prop) NA Die Barrierefunktionalität erfordert, dass eine Arbeitsspeicherzeile im Nicht-weitergegeben-Puffer in diesem verbleibt, selbst wenn sich die jeweilige Arbeitsspeicherzeile nicht mehr im lokalen Cache befindet.
    C2Dcmd.S2I(addr, prop) NA Die Barrierefunktionalität erfordert, dass eine Arbeitsspeicherzeile im Nicht-weitergegeben-Puffer in diesem verbleibt, selbst wenn
    sich die jeweilige Arbeitsspeicherzeile nicht mehr im lokalen Cache befindet.
  • 11 zeigt eine beispielhafte kohärente, gemeinsam genutzte Arbeitsspeicherstruktur in Form eines Mehrprozessor-Computersystems in Form eines Mehrprozessorservers 200, der mehrere Prozessorchips 201 aufweist. Der Mehrprozessorserver 200 weist einen Satz von Arbeitsspeicher-Hub-Chips 203 auf. Jeder Prozessorchip 201 kann mit einer Mehrzahl von Anschlüssen 224 bereitgestellt sein. Gemäß einer Ausführungsform kann die Anzahl von Anschlüssen 224, die pro Prozessorchip 201 bereitgestellt sind, gleich der Anzahl von Arbeitsspeicher-Hub-Chips 203 sein. Jeder Prozessorchip 201 ist mit einem lokalen Cache 204 zum Zwischenspeichern von Arbeitsspeicherzeilen bereitgestellt, d.h. von Arbeitsspeicherzeilen, die durch den Prozessorchip 201 verarbeitet werden sollen. Die Prozessorchips 201 des Servers 200 können identisch konfiguriert sein. Anwendungssoftware kann auf einem oder mehreren Prozessorchips 201 ausgeführt werden, da kann eine bestimmte Anwendung stillschweigend eingeschlossen oder ausdrücklich ähnliche oder unterschiedliche Prozessorchips 201 nutzen oder von diesen profitieren.
  • Jeder Arbeitsspeicher-Hub-Chip 203 kann mit einer Mehrzahl lokaler Arbeitsspeichermodule 234 bereitgestellt sein, z.B. mit Dual-Inline-Memory-Modulen (DIMM), die eine Reihe integrierter dynamischer Arbeitsspeicherschaltungen aufweisen. Daher realisiert jeder Arbeitsspeicher-Hub-Chip 203 eine Arbeitsspeicher-Hub-Einheit. Des Weiteren kann jeder Arbeitsspeicher-Hub-Chip 203 eine Mehrzahl von Anschlüssen 222 aufweisen. Zum Beispiel kann die Anzahl von Anschlüssen 222 pro Arbeitsspeicher-Hub-Chip 203 gleich der Anzahl von Prozessorchips 201 sein. Darüber hinaus kann jeder Arbeitsspeicher-Hub-Chip 203 für Arbeitsspeicherzeilen, die in den Arbeitsspeichermodulen 236 lokal beim jeweiligen Arbeitsspeicher-Hub-Chip 203 gespeichert sind, ein Kohärenzverzeichnis 210 aufweisen, um auf Verzeichnissen beruhende Kohärenz für Arbeitsspeicherzeilen zu realisieren, die in den Caches 204 eines oder mehrerer Prozessorchips 201 gespeichert sind. Hinsichtlich des Satzes von Arbeitsspeicher-Hub-Chips 203 des Servers 200 können alle Arbeitsspeicher-Hub-Chips 20 identisch oder ähnlich wie jeder Arbeitsspeicher-Hub-Chip 203 konfiguriert sein, der ähnliche Funktionen durchführt. Anwendungssoftware kann auf einem oder mehreren Prozessorchips 201 ausgeführt werden, und daher profitiert die Leistungsfähigkeit einer bestimmten Anwendung normalerweise von dem Arbeitsspeicher, der durch viele und ähnliche Arbeitsspeicher-Hub-Chips 203 bedient wird, wobei jede bestimmte Arbeitsspeicheradresse durch einen einzigen vordefinierten Arbeitsspeicher-Hub-Chip 203 bedient wird.
  • Jeder Prozessorchip 201 kann zu Datenübertragungszwecken mit jedem Arbeitsspeicher-Hub-Chip 203 z.B. über eine bidirektionale Punkt-zu-Punkt-Verbindung 230 verbunden sein, zum Beispiel über eine serielle Datenübertragungsverbindung. Daher kann jeder Prozessorchip 201 mit Arbeitsspeicherzugriff auf jedes der Arbeitsspeichermodule 234 lokal bei einem der Arbeitsspeicher-Hub-Chips 203 bereitgestellt sein. Der Zugriff auf die Arbeitsspeichermodule 236 kann auf der Grundlage einer UMA-Architektur (UMA = Uniform Memory Access) bereitgestellt sein. Eine bestimmte Arbeitsspeicherzeile, d.h. Arbeitsspeicherzeile, kann auf einem oder mehreren Arbeitsspeichermodulen 236 als Sicherungsspeicher, d.h. Hauptarbeitsspeicher, lokal bei denselben Arbeitsspeicher-Hub-Chips 203 gespeichert sein. Eine bestimmte Arbeitsspeicherseite, die eine Mehrzahl von Arbeitsspeicherzeilen aufweist, kann z.B. über die Arbeitsspeichermodule 236 aller Arbeitsspeicher-Hub-Chips 203 hinweg verschränkt sein.
  • Das Computersystem kann zum Beispiel 16 Prozessorchips 201 und 128 Arbeitsspeicher-Hub-Chips 203 aufweisen. In diesem Fall kann jeder Prozessorchip 201128 Anschlüsse 224 aufweisen, um zu Datenübertragungszwecken mit jedem der Arbeitsspeicher-Hub-Chips 203 verbunden zu sein. Des Weiteren kann jeder der Arbeitsspeicher-Hub-Chips 203 mit 16 Anschlüssen 222 bereitgestellt sein, sodass jeder Arbeitsspeicher-Hub-Chip 203 zu Datenübertragungszwecken mit jedem Prozessorchip 201 über eine getrennte Punkt-zu-Punkt-Datenübertragungsverbindung 230 verbunden sein kann.
  • Aspekte der vorliegenden Erfindung sind hierin unter Bezugnahme auf Flussdiagrammdarstellungen und/oder Blockschemata von Verfahren, Vorrichtungen (Systemen) und Computerprogrammprodukten gemäß Ausführungsformen der Erfindung beschrieben. Es wird klar sein, dass jeder Block der Flussdiagramme und/oder der Blockschemata und Kombinationen von Blöcken in den Flussdiagrammen und/oder Blockschemata durch einen Computerprogrammanweisungen realisiert werden kann bzw. können.
  • Bei der vorliegenden Erfindung kann es sich um ein System, ein Verfahren und/oder ein Computerprogrammprodukt handeln. Das Computerprogrammprodukt kann (ein) durch einen Computer lesbare(s) Speichermedium (oder -medien) beinhalten, auf dem/denen durch einen Computer lesbare Programmanweisungen gespeichert ist/sind, um einen Prozessor zu veranlassen, Aspekte der vorliegenden Erfindung auszuführen.
  • Bei dem durch einen Computer lesbaren Speichermedium kann es sich um eine physische Einheit handeln, auf der Anweisungen zur Verwendung durch eine Einheit zur Ausführung von Anweisungen aufbewahrt und gespeichert sein können. Bei dem durch einen Computer lesbaren Speichermedium kann es sich zum Beispiel, ohne auf diese beschränkt zu sein, um eine elektronische Speichereinheit, eine magnetische Speichereinheit, eine optische Speichereinheit, eine elektromagnetische Speichereinheit, eine Halbleiterspeichereinheit oder eine beliebige geeignete Kombination des Vorstehenden handeln. Zu einer nicht erschöpfenden Liste konkreterer Beispiele des durch einen Computer lesbaren Speichermediums gehören die folgenden: eine transportable Computerdiskette, eine Festplatte, ein Direktzugriffsspeicher (random access memory, RAM), ein Nur-Lese-Speicher (read-only memory, ROM), ein löschbarer programmierbarer Nur-Lese-Speicher (erasable programmable read-only memory, EPROM bzw. Flash-Speicher), ein statischer Direktzugriffsspeicher (static random access memory, SRAM), ein transportabler Kompaktspeicherplatte-Nur-Lese-Speicher (compact disc read-only memory, CD-ROM), eine DVD (digital versatile disc), ein Speicher-Stick, eine Diskette, eine mechanisch codierte Einheit wie zum Beispiel Lochkarten oder erhabene Strukturen in einer Rille, auf denen Anweisungen gespeichert sind, und beliebige geeignete Kombinationen des Vorstehenden. Ein durch einen Computer lesbares Speichermedium im hierin verwendeten Sinne ist nicht so auszulegen, dass es sich dabei um flüchtige Signale handelt, beispielsweise um Funkwellen oder sich frei ausbreitende elektromagnetische Wellen, um elektromagnetische Wellen, die sich durch einen Hohlleiter oder andere Übertragungsmedien ausbreiten (z.B. Lichtimpulse, die ein Lichtwellenleiterkabel durchlaufen) oder um elektrische Signale, die über ein Kabel übertragen werden.
  • Hierin beschriebene durch einen Computer lesbare Programmanweisungen können über ein Netzwerk, zum Beispiel das Internet, ein lokales Netzwerk ein Weitverkehrsnetzwerk und/oder ein Drahtlosnetzwerk von einem durch einen Computer lesbaren Speichermedium auf betreffende Datenverarbeitungs-/Verarbeitungseinheiten oder auf einen externen Computer oder eine externe Speichereinheit heruntergeladen werden. Das Netzwerk kann Kupferübertragungskabel, Lichtwellenleiter, Drahtlosübertragung, Router, Firewalls, Switches, Gateway-Computer und/oder Edge-Server aufweisen. Eine Netzwerkadapterkarte oder eine Netzwerkschnittstelle bei jeder Datenverarbeitungs-/Verarbeitungseinheit empfängt durch einen Computer lesbare Programmanweisungen aus dem Netzwerk und leitet die durch einen Computer lesbaren Programmanweisungen zur Speicherung in einem durch einen Computer lesbaren Speichermedium innerhalb der jeweiligen Datenverarbeitungs-/Verarbeitungseinheit weiter.
  • Bei durch einen Computer lesbaren Programmanweisungen zum Ausführen von Arbeitsschritten der vorliegenden Erfindung kann es sich um Assembleranweisungen, ISA-Anweisungen (ISA = Instruction Set Architecture), Maschinenanweisungen, maschinenabhängige Anweisungen, Mikrocode, Firmware-Anweisungen, Daten zum Setzen von Zuständen oder entweder Quellcode oder Objektcode handeln, die in einer beliebigen Kombination aus einer oder mehreren Programmiersprachen geschrieben sind, zu denen eine objektorientierte Programmiersprache wie beispielsweise Smalltalk, C++ oder Ähnliches und herkömmliche prozedurale Programmiersprachen wie beispielsweise die Programmiersprache „C“ oder ähnliche Programmiersprachen gehören. Die durch einen Computer lesbaren Programmanweisungen können vollständig auf dem Computer eines Benutzercomputersystems, teilweise auf dem Computer eines Benutzercomputersystems, als eigenständiges Softwarepaket, teilweise auf dem Computer eines Benutzercomputersystems und teilweise auf einem entfernt angeordneten Computer oder vollständig auf dem entfernt angeordneten Computer oder Server ausgeführt werden. Beim letztgenannten Szenario kann der entfernt angeordnete Computer mit dem Computer eines Benutzercomputersystems über eine beliebige Art von Netzwerk verbunden sein, unter anderem über ein lokales Netzwerk (Local Area Network, LAN) oder über ein Weitverkehrsnetzwerk (Wide Area Network, WAN), oder die Verbindung kann zu einem externen Computer hergestellt sein (beispielsweise über das Internet unter Nutzung eines Internet-Dienstanbieters (Internet Service Provider)). Bei einigen Ausführungsformen können elektronische Schaltungen, zu denen beispielsweise programmierbare Logikschaltungen, vor Ort programmierbare Schaltungen (Field-Programmable Gate Arrays, FPGA) oder programmierbare logische Arrays (PLA) gehören, die durch einen Computer lesbaren Programmanweisungen ausführen, indem Zustandsinformationen der durch einen Computer lesbaren Programmanweisungen genutzt werden, um die elektronische Schaltung zu personalisieren, sodass Aspekte der vorliegenden Erfindung durchgeführt werden.
  • Aspekte der vorliegenden Erfindung sind hierin unter Bezugnahme auf Flussdiagrammdarstellungen und/oder Blockschemata von Verfahren, Vorrichtungen (Systemen) und Computerprogrammprodukten gemäß Ausführungsformen der Erfindung beschrieben. Es wird klar sein, dass jeder Block der Flussdiagramme und/oder der Blockschemata und Kombinationen von Blöcken in den Flussdiagrammen und/oder Blockschemata durch einen Computerprogrammanweisungen realisiert werden kann bzw. können.
  • Diese durch einen Computer lesbaren Programmanweisungen können einem Prozessor eines Universalcomputers, eines Spezialcomputers oder anderer programmierbaren Datenverarbeitungsvorrichtungen bereitgestellt werden, um eine Maschine zu erzeugen, sodass die Anweisungen, die über den Prozessor des Computers oder anderer programmierbarer Datenverarbeitungsvorrichtungen ausgeführt werden, Mittel schaffen, - um die in einem Block bzw. in den Blöcken des Flussdiagramms bzw. der Flussdiagramme und/oder des Blockschemas bzw. der Blockschemata angegebenen Funktionen/Aktionen zu realisieren. Diese durch einen Computer lesbaren Programmanweisungen können ebenfalls in einem durch einen Computer lesbaren Medium gespeichert sein, das einen Computer, andere programmierbare Datenverarbeitungsvorrichtungen oder andere Einheiten anweisen kann, in einer bestimmten Weise zu funktionieren, sodass das durch einen Computer lesbare Medium mit darauf gespeicherten Anweisungen ein Erzeugnis aufweist, das Anweisungen enthält, die die in einem Block bzw. in den Blöcken der Flussdiagramme und/oder der Blockschemata angegebene Funktion/Aktion realisieren.
  • Die durch einen Computer lesbaren Programmanweisungen können auch in einen Computer, in andere programmierbare Datenverarbeitungsvorrichtungen oder in andere Einheiten geladen werden, um zu bewirken, dass auf dem Computer, auf anderen programmierbaren Vorrichtungen oder anderen Einheiten eine Reihe von Arbeitsschritten ausgeführt wird, um einen mittels Computer realisierten Prozess zu schaffen, sodass die Anweisungen, die auf dem Computer, auf anderen programmierbaren Vorrichtungen oder Einheiten ausgeführt werden, die in einem Block bzw. in den Blöcken der Flussdiagramme und/oder der Blockschemata angegebenen Funktionen/Aktionen realisieren.
  • Die Flussdiagramme und Blockschemata in den Figuren veranschaulichen die Architektur, Funktionalität und Wirkungsweise möglicher Realisierungsformen von Systemen, Verfahren und Computerprogrammprodukten gemäß verschiedenen Ausführungsformen der vorliegenden Erfindung. In diesem Zusammenhang kann jeder Block in den Flussdiagrammen bzw. in den Blockschemata eine Steuerungskomponente, ein Segment oder einen Abschnitt von Anweisungen darstellen, das bzw. der eine oder mehrere ausführbare Anweisungen zur Realisierung der angegebenen Logikfunktion bzw. Logikfunktionen aufweist. Bei einigen alternativen Realisierungsformen können die im Block angegebenen Funktionen in einer anderen als in der Reihenfolge ausgeführt werden, die in den Figuren angegeben ist. Beispielsweise können zwei hintereinander aufgeführte Blöcke tatsächlich im Wesentlichen gleichzeitig ausgeführt werden, oder die Blöcke können je nach der mit den Blöcken verbundenen Funktionalität manchmal in umgekehrter Reihenfolge ausgeführt werden. Darüber hinaus ist anzumerken, dass jeder Block der dargestellten Blockschemata und/oder Flussdiagramme sowie Kombinationen von Blöcken in den dargestellten Blockschemata und/oder Flussdiagrammen mit Hilfe zweckgebundener hardwaregestützter Systeme zum Ausführen der angegebenen Funktionen bzw. Aktionen oder mit Hilfe von Kombinationen aus zweckgebundener Hardware und zweckgebundenen Computeranweisungen realisiert werden kann bzw. können.
  • Bei möglichen Kombinationen von oben beschriebenen Merkmalen kann es sich um die folgenden handeln:
    1. 1. Ein Verfahren zum Koordinieren einer Ausführung einer Anweisungsabfolge, die eine Mehrzahl von Anweisungen aufweist, durch eine Prozessoreinheit eines kohärenten, gemeinsam genutzten Arbeitsspeichersystems, wobei die Prozessoreinheit funktionsmäßig mit einem Prozessorcache verbunden ist, wobei das Verfahren aufweist:
      • • Ausführen einer Anweisung der Anweisungsabfolge, wobei die Ausführung der Anweisung die Prozessoreinheit veranlasst, durch die Prozessoreinheit eine Kopie einer Arbeitsspeicherzeile eines Hauptarbeitsspeichers des gemeinsam genutzten Arbeitsspeichersystems in den Prozessorcache zu füllen;
      • • nach dem Erkennen erster Markierungsinformationen, die anzeigen, dass Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile unbestätigt ist, Markieren der betreffenden Arbeitsspeicherzeile durch die Prozessoreinheit;
      • • nach dem Erkennen zweiter Markierungsinformationen, die anzeigen, dass die Weitergabe der Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile bestätigt ist, Entfernen der Markierung der jeweiligen Arbeitsspeicherzeile durch die Prozessoreinheit;
      • • nach dem Ausführen einer Arbeitsspeicherbarriereanweisung der Anweisungsabfolge Verhindern einer Vollendung der Ausführung der Arbeitsspeicherbarriereanweisung durch die Prozessoreinheit, während die Arbeitsspeicherzeile markiert ist.
    2. 2. Das Verfahren nach Punkt 1, wobei die Vollendung der Ausführung der Arbeitsspeicherbarriereanweisung verhindert wird, bis die Markierungen aller Arbeitsspeicherzeilen entfernt sind, die zuvor durch die Prozessoreinheit markiert wurden.
    3. 3. Das Verfahren nach einem der vorhergehenden Punkte, wobei das Markieren der Arbeitsspeicherzeile ein Hinzufügen einer Kennung der Arbeitsspeicherzeile zu einem Puffer der Prozessoreinheit aufweist und wobei das Entfernen der Markierung der markierten Arbeitsspeicherzeile ein Entfernen der Kennung der Arbeitsspeicherzeile aus dem Puffer der Prozessoreinheit aufweist.
    4. 4. Das Verfahren nach Punkt 3, wobei die im Puffer gespeicherte Kennung der markierten Arbeitsspeicherzeile die Arbeitsspeicheradresse der jeweiligen Arbeitsspeicherzeile im Hauptarbeitsspeicher aufweist.
    5. 5. Verfahren nach einem der Punkte 3 bis 4, wobei die Vollendung der Ausführung der Arbeitsspeicherbarriereanweisung verhindert wird, bis der Puffer der Prozessoreinheit leer ist.
    6. 6. Das Verfahren nach einem der vorhergehenden Punkte, wobei die Arbeitsspeicherkohärenz des gemeinsam genutzten Arbeitsspeichersystems unter Verwendung eines Kohärenzverzeichnisses realisiert wird.
    7. 7. Das Verfahren nach Punkt 6, wobei mindestens eine der ersten und zweiten Markierungsinformationen durch eine Nachricht bereitgestellt wird bzw. werden, die durch den Prozessor vom Kohärenzverzeichnis empfangen wird.
    8. 8. Das Verfahren nach einem der Punkt 6 oder 7, wobei mindestens eine der ersten und zweiten Markierungsinformationen durch eine Nachricht bereitgestellt wird bzw. werden, die durch den Prozessor an das Kohärenzverzeichnis gesendet wird.
    9. 9. Das Verfahren nach einem der Punkte 1 bis 5, wobei die Arbeitsspeicherkohärenz des gemeinsam genutzten Arbeitsspeichersystems unter Verwendung von Rundsenden realisiert wird.
    10. 10. Das Verfahren nach einem der vorhergehenden Punkte, wobei es sich bei der Anweisung, die die Prozessoreinheit veranlasst, die Kopie der Arbeitsspeicherzeile in den Prozessorcache zu füllen, um eine Anweisung handelt, die einen Schreibzugriff auf die jeweilige Arbeitsspeicherzeile angibt.
    11. 11. Das Verfahren nach einem der vorhergehenden Punkte, wobei die Weitergabe der Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg ein Invalidieren weiterer Kopien der Arbeitsspeicherzeile aufweist, die durch entfernt angeordnete Prozessorcaches weiterer Prozessoreinheiten des gemeinsam genutzten Arbeitsspeichersystems verwendet werden.
    12. 12. Das Verfahren nach einem der vorhergehenden Punkte, wobei Nachrichten, die Änderungen des Inhalts des Prozessorcache betreffen und durch die Prozessoreinheit verarbeitet werden, ein Kohärenzweitergabefeld aufweisen, wobei das Kohärenzweitergabefeld eines aus Folgendem aufweist: Markierungsinformationen, die anzeigen, dass Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem in Bezug auf die Änderung unbestätigt ist, Markierungsinformationen, die anzeigen, dass Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem in Bezug auf die Änderung bestätigt ist, oder Markierungsinformationen, die anzeigen, dass weder eine Aktion zum Markieren noch zum Entfernen von Markierungen erforderlich ist.
    13. 13. Eine Prozessoreinheit eines kohärenten, gemeinsam genutzten Arbeitsspeichersystems, wobei die Prozessoreinheit funktionsmäßig mit einem Prozessorcache verbunden und so konfiguriert ist, dass eine Ausführung einer Anweisungsabfolge koordiniert wird, die eine Mehrzahl von Anweisungen aufweist, wobei das Koordinieren aufweist:
      • • Ausführen einer Anweisung der Anweisungsabfolge, wobei die Ausführung der Anweisung die Prozessoreinheit veranlasst, eine Kopie einer Arbeitsspeicherzeile eines Hauptarbeitsspeichers des gemeinsam genutzten Arbeitsspeichersystems in den Prozessorcache zu füllen;
      • • nach dem Erkennen von Markierungsinformationen, die anzeigen, dass Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile unbestätigt ist, Markieren der betreffenden Arbeitsspeicherzeile durch die Prozessoreinheit;
      • • nach dem Erkennen von Markierungsinformationen, die anzeigen, dass die Weitergabe der Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile bestätigt ist, Entfernen der Markierung der jeweiligen Arbeitsspeicherzeile durch die Prozessoreinheit;
      • • nach dem Ausführen einer Arbeitsspeicherbarriereanweisung der Anweisungsabfolge Verhindern einer Vollendung der Ausführung der Arbeitsspeicherbarriereanweisung, während die Arbeitsspeicherzeile markiert ist.
    14. 14. Die Prozessoreinheit nach Punkt 13, wobei die Vollendung der Ausführung der Arbeitsspeicherbarriereanweisung verhindert wird, bis die Markierungen aller Arbeitsspeicherzeilen entfernt sind, die zuvor durch die Prozessoreinheit markiert wurden.
    15. 15. Die Prozessoreinheit nach einem der Punkte 13 oder 14, wobei die Prozessoreinheit einen Puffer zum Registrieren von Arbeitsspeicherzeilen aufweist, von denen Kopien in den Prozessorcache gefüllt werden und für die Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem in Bezug auf das Füllen der jeweiligen Kopien unbestätigt ist, wobei das Markieren der Arbeitsspeicherzeile ein Hinzufügen einer Kennung der Arbeitsspeicherzeile zum Puffer der Prozessoreinheit aufweist und wobei das Entfernen der Markierung der markierten Arbeitsspeicherzeile ein Entfernen der Kennung der Arbeitsspeicherzeile aus dem Puffer des Prozessors aufweist.
    16. 16. Die Prozessoreinheit nach Punkt 15, wobei die im Puffer gespeicherte Kennung der markierten Arbeitsspeicherzeile die Arbeitsspeicheradresse der jeweiligen Arbeitsspeicherzeile im Hauptarbeitsspeicher aufweist.
    17. 17. Die Prozessoreinheit nach einem der Punkte 15 bis 16, wobei die Vollendung der Ausführung der Arbeitsspeicherbarriereanweisung verhindert wird, bis der Puffer der Prozessoreinheit leer ist.
    18. 18. Ein Verfahren zum Verwalten eines Kohärenzverzeichnisses, das Arbeitsspeicherkohärenz eines gemeinsam genutzten Arbeitsspeichersystems realisiert, wobei das Verfahren aufweist:
      • • Aufrechterhalten von Markierungsinformationen durch das Kohärenzverzeichnis, die einer Arbeitsspeicherzeile eines Hauptarbeitsspeichers des gemeinsam genutzten Arbeitsspeichersystems zugewiesen sind, wobei eine Prozessoreinheit des gemeinsam genutzten Arbeitsspeichersystems ein Füllen einer Kopie der Arbeitsspeicherzeile in einen Prozessorcache eingeleitet hat, der funktionsmäßig mit der Prozessoreinheit verbunden ist, wobei die Markierungsinformationen anzeigen, ob Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile bestätigt ist;
      • • Einbeziehen der Markierungsinformationen in eine Nachricht, die durch das Kohärenzverzeichnis an die Prozessoreinheit gesendet werden soll;
      • • Senden der Nachricht an die Prozessoreinheit durch das Kohärenzverzeichnis.
    19. 19. Das Verfahren nach Punkt 18, wobei das Kohärenzverzeichnis das Aufrechterhalten der den Arbeitsspeicherzeilen zugewiesenen Markierungsinformationen nach dem Feststellen einleitet, dass eine Änderung des Inhalts eines entfernten Prozessorcache einer weiteren Prozessoreinheit des gemeinsam genutzten Arbeitsspeichersystems erforderlich ist, um Arbeitsspeicherkohärenz in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile in den entfernten Cache weiterzugeben.
    20. 20. Das Verfahren nach Punkt 19, wobei das Kohärenzverzeichnis eine Anforderung an den entfernten Prozessorcache sendet, die eine Änderung des Inhalts des entfernten Prozessorcache anfordert, um die Arbeitsspeicherkohärenz in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile in den entfernten Prozessorcache weiterzugeben.
    21. 21. Das Verfahren nach Punkt 20, wobei die durch das Kohärenzverzeichnis angeforderte Änderung eine Invalidierung einer weiteren Kopie der Arbeitsspeicherzeile aufweist, die im entfernten Prozessorcache enthalten ist.
    22. 22. Das Verfahren nach Punkt 19, wobei das Kohärenzverzeichnis ein Register aufweist, um die Änderungen von Inhalten der Prozessorcaches der weiteren Prozessoreinheiten des gemeinsam genutzten Arbeitsspeichersystems aufgrund der Weitergabe der Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile zu überwachen.
    23. 23. Das Verfahren nach Punkt 22, wobei das Register einen Kohärenzweitergabe-Benachrichtigungsindikator aufweist, der Prozessorcaches von Prozessoreinheiten des gemeinsam genutzten Arbeitsspeichersystems kennzeichnet, die durch das Kohärenzverzeichnis zu benachrichtigen sind, wenn die Weitergabe der Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile bestätigt ist.
    24. 24. Ein Kohärenzverzeichnis, das Arbeitsspeicherkohärenz eines gemeinsam genutzten Arbeitsspeichersystems realisiert, wobei das Kohärenzverzeichnis konfiguriert ist zum:
      • • Aufrechterhalten von Markierungsinformationen, die einer Arbeitsspeicherzeile eines Hauptarbeitsspeichers des gemeinsam genutzten Arbeitsspeichersystems zugewiesen sind, wobei eine Prozessoreinheit des gemeinsam genutzten Arbeitsspeichersystems ein Füllen einer Kopie der Arbeitsspeicherzeile in einen Prozessorcache eingeleitet hat, der funktionsmäßig mit der Prozessoreinheit verbunden ist, wobei die Markierungsinformationen anzeigen, ob Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile bestätigt ist;
      • • Einbeziehen der Markierungsinformationen in eine Nachricht;
      • • Senden der Nachricht an die Prozessoreinheit.
    25. 25. Ein kohärentes, gemeinsam genutztes Arbeitsspeichersystem, das ein Kohärenzverzeichnis aufweist, das Arbeitsspeicherkohärenz des gemeinsam genutzten Arbeitsspeichersystems realisiert, einen Hauptarbeitsspeicher und eine Prozessoreinheit, die funktionsmäßig mit einem Prozessorcache verbunden ist, wobei die Prozessoreinheit konfiguriert ist zum Koordinieren einer Ausführung einer Anweisungsabfolge, die eine Mehrzahl von Anweisungen aufweist, wobei das Koordinieren aufweist:
      • • Ausführen einer Anweisung der Anweisungsabfolge, wobei die Ausführung der Anweisung die Prozessoreinheit veranlasst, eine Kopie einer Arbeitsspeicherzeile des Hauptarbeitsspeichers in den Prozessorcache zu füllen;
      • • nach dem Erkennen von Markierungsinformationen, die anzeigen, dass Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile unbestätigt ist, Markieren der betreffenden Arbeitsspeicherzeile durch die Prozessoreinheit;
      • • nach dem Erkennen von Markierungsinformationen, die anzeigen, dass die Weitergabe der Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile bestätigt ist, Entfernen der Markierung der jeweiligen Arbeitsspeicherzeile durch die Prozessoreinheit;
      • • nach dem Ausführen einer Arbeitsspeicherbarriereanweisung der Anweisungsabfolge Verhindern einer Vollendung der Ausführung der Arbeitsspeicherbarriereanweisung, während die Arbeitsspeicherzeile markiert ist;
      und das Kohärenzverzeichnis zum Aufrechterhalten der Markierungsinformationen konfiguriert ist, die der Arbeitsspeicherzeile des Hauptarbeitsspeichers nach dem Feststellen einer Einleitung des Füllens der Kopie der Arbeitsspeicherzeile zugewiesen wurden, wobei die Markierungsinformationen anzeigen, ob die Weitergabe der Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile bestätigt ist, wobei das Aufrechterhalten aufweist:
      • • zunächst Einbeziehen der Markierungsinformationen, die anzeigen, dass die Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile unbestätigt ist, in eine erste Nachricht;
      • • Senden der Nachricht an die Prozessoreinheit;
      • • nach dem Erhalten einer Bestätigung der Weitergabe Aktualisieren der Markierungsinformationen und Einbeziehen der aktualisierten Markierungsinformationen, die anzeigen, dass die Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile unbestätigt ist, in eine zweite Nachricht;
      • • Senden der zweiten Nachricht an die Prozessoreinheit.

Claims (24)

  1. Verfahren zum Koordinieren einer Ausführung einer Anweisungsabfolge, die eine Mehrzahl von Anweisungen aufweist, durch eine Prozessoreinheit (246) eines kohärenten, gemeinsam genutzten Arbeitsspeichersystems (200), wobei die Prozessoreinheit funktionsmäßig mit einem Prozessorcache (204) verbunden ist, wobei das Verfahren aufweist: Ausführen einer Anweisung der Anweisungsabfolge durch die Prozessoreinheit, wobei die Ausführung der Anweisung die Prozessoreinheit veranlasst, eine Kopie einer Arbeitsspeicherzeile eines Hauptarbeitsspeichers (277) des gemeinsam genutzten Arbeitsspeichersystems in den Prozessorcache zu füllen; Empfangen (302) einer Nachricht, die Markierungsinformationen beinhaltet, die anzeigen, ob Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg bestätigt ist, durch die Prozessoreinheit von einer Steuereinheit (272), die als Teil eines gemeinsam genutzten Arbeitsspeichers (214) enthalten ist, wobei die Steuereinheit eine Verzeichnistabelle (274) von Arbeitsspeicherzeilen-Einträgen und eine Übergangstabelle (276) aufrechterhält; nach dem Erkennen (304), dass die empfangenen Markierungsinformationen anzeigen, dass Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile unbestätigt ist, Markieren (306) der betreffenden Arbeitsspeicherzeile durch die Prozessoreinheit; nach dem Erkennen (304), dass die empfangenen Markierungsinformationen anzeigen, dass die Weitergabe der Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile bestätigt ist, Entfernen der Markierung (308) der jeweiligen Arbeitsspeicherzeile durch die Prozessoreinheit; und nach dem Ausführen einer Arbeitsspeicherbarriereanweisung der Anweisungsabfolge Verhindern (300) einer Vollendung der Ausführung der Arbeitsspeicherbarriereanweisung durch die Prozessoreinheit, während die Arbeitsspeicherzeile markiert ist.
  2. Verfahren nach Anspruch 1, wobei die Vollendung der Ausführung der Arbeitsspeicherbarriereanweisung verhindert wird, bis die Markierungen aller Arbeitsspeicherzeilen entfernt sind, die zuvor durch die Prozessoreinheit markiert wurden.
  3. Verfahren nach Anspruch 1, wobei das Markieren der Arbeitsspeicherzeile ein Hinzufügen einer Kennung der Arbeitsspeicherzeile zu einem Puffer (248) der Prozessoreinheit aufweist und wobei das Entfernen der Markierung der markierten Arbeitsspeicherzeile ein Entfernen der Kennung der Arbeitsspeicherzeile aus dem Puffer der Prozessoreinheit aufweist.
  4. Verfahren nach Anspruch 3, wobei die im Puffer gespeicherte Kennung der markierten Arbeitsspeicherzeile eine Arbeitsspeicheradresse der jeweiligen Arbeitsspeicherzeile im Hauptarbeitsspeicher aufweist.
  5. Verfahren nach Anspruch 3, wobei die Vollendung der Ausführung der Arbeitsspeicherbarriereanweisung verhindert wird, bis der Puffer der Prozessoreinheit leer ist.
  6. Verfahren nach Anspruch 1, wobei die Arbeitsspeicherkohärenz des gemeinsam genutzten Arbeitsspeichersystems unter Verwendung eines Kohärenzverzeichnisses (210) realisiert wird.
  7. Verfahren nach Anspruch 6, wobei Markierungsinformationen durch eine Nachricht bereitgestellt werden, die durch die Prozessoreinheit an das Kohärenzverzeichnis gesendet wird.
  8. Verfahren nach Anspruch 1, wobei die Arbeitsspeicherkohärenz des gemeinsam genutzten Arbeitsspeichersystems unter Verwendung von Rundsenden realisiert wird.
  9. Verfahren nach Anspruch 1, wobei es sich bei der Anweisung, die die Prozessoreinheit veranlasst, die Kopie der Arbeitsspeicherzeile in den Prozessorcache zu füllen, um eine Anweisung handelt, die einen Schreibzugriff auf die jeweilige Arbeitsspeicherzeile angibt.
  10. Verfahren nach Anspruch 1, wobei die Weitergabe der Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg ein Invalidieren weiterer Kopien der Arbeitsspeicherzeile aufweist, die durch entfernt angeordnete Prozessorcaches weiterer Prozessoreinheiten des gemeinsam genutzten Arbeitsspeichersystems verwendet werden.
  11. Verfahren nach Anspruch 1, wobei Nachrichten, die Änderungen des Inhalts des Prozessorcache betreffen und durch die Prozessoreinheit verarbeitet werden, ein Kohärenzweitergabefeld aufweisen, wobei das Kohärenzweitergabefeld eines aus Folgendem aufweist: Markierungsinformationen, die anzeigen, dass Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem in Bezug auf die Änderung unbestätigt ist, Markierungsinformationen, die anzeigen, dass Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem in Bezug auf die Änderung bestätigt ist, oder Markierungsinformationen, die anzeigen, dass weder eine Aktion zum Markieren noch zum Entfernen von Markierungen erforderlich ist.
  12. Prozessoreinheit (246) eines kohärenten, gemeinsam genutzten Arbeitsspeichersystems (200), wobei die Prozessoreinheit funktionsmäßig mit einem Prozessorcache (204) verbunden und so konfiguriert ist, dass eine Ausführung einer Anweisungsabfolge koordiniert wird, die eine Mehrzahl von Anweisungen aufweist, wobei das Koordinieren aufweist: Ausführen einer Anweisung der Anweisungsabfolge, wobei die Ausführung der Anweisung die Prozessoreinheit veranlasst, eine Kopie einer Arbeitsspeicherzeile eines Hauptarbeitsspeichers (277) des gemeinsam genutzten Arbeitsspeichersystems in den Prozessorcache zu füllen; Empfangen (302) einer Nachricht, die Markierungsinformationen beinhaltet, die anzeigen, ob Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg bestätigt ist, durch die Prozessoreinheit von einer Steuereinheit (272), die als Teil eines gemeinsam genutzten Arbeitsspeichers (214) enthalten ist, wobei die Steuereinheit eine Verzeichnistabelle (274) von Arbeitsspeicherzeilen-Einträgen und eine Übergangstabelle (276) aufrechterhält; nach dem Erkennen (304), dass die empfangenen Markierungsinformationen anzeigen, dass Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile unbestätigt ist, Markieren (306) der betreffenden Arbeitsspeicherzeile durch die Prozessoreinheit; nach dem Erkennen (304), dass die empfangenen Markierungsinformationen anzeigen, dass die Weitergabe der Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile bestätigt ist, Entfernen (308) der Markierung der jeweiligen Arbeitsspeicherzeile durch die Prozessoreinheit; und nach dem Ausführen einer Arbeitsspeicherbarriereanweisung der Anweisungsabfolge Verhindern (300) einer Vollendung der Ausführung der Arbeitsspeicherbarriereanweisung, während die Arbeitsspeicherzeile markiert ist.
  13. Prozessoreinheit nach Anspruch 12, wobei die Vollendung der Ausführung der Arbeitsspeicherbarriereanweisung verhindert wird, bis die Markierungen aller Arbeitsspeicherzeilen entfernt sind, die zuvor durch die Prozessoreinheit markiert wurden.
  14. Prozessoreinheit nach Anspruch 12, wobei die Prozessoreinheit einen Puffer (248) zum Registrieren von Arbeitsspeicherzeilen aufweist, von denen Kopien in den Prozessorcache gefüllt werden und für die Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem in Bezug auf das Füllen der jeweiligen Kopien unbestätigt ist, wobei das Markieren der Arbeitsspeicherzeile ein Hinzufügen einer Kennung der Arbeitsspeicherzeile zum Puffer der Prozessoreinheit aufweist und wobei das Entfernen der Markierung der markierten Arbeitsspeicherzeile ein Entfernen der Kennung der Arbeitsspeicherzeile aus dem Puffer des Prozessors aufweist.
  15. Prozessoreinheit nach Anspruch 14, wobei die im Puffer gespeicherte Kennung der markierten Arbeitsspeicherzeile die Arbeitsspeicheradresse der jeweiligen Arbeitsspeicherzeile im Hauptarbeitsspeicher aufweist.
  16. Prozessoreinheit nach Anspruch 14, wobei die Vollendung der Ausführung der Arbeitsspeicherbarriereanweisung verhindert wird, bis der Puffer der Prozessoreinheit leer ist.
  17. Verfahren zum Verwalten eines Kohärenzverzeichnisses (210), das Arbeitsspeicherkohärenz eines gemeinsam genutzten Arbeitsspeichersystems realisiert, wobei das Verfahren aufweist: Aufrechterhalten von Markierungsinformationen durch das Kohärenzverzeichnis, die einer Arbeitsspeicherzeile eines Hauptarbeitsspeichers (277) des gemeinsam genutzten Arbeitsspeichersystems zugewiesen sind, wobei eine Prozessoreinheit des gemeinsam genutzten Arbeitsspeichersystems ein Füllen einer Kopie der Arbeitsspeicherzeile in einen Prozessorcache eingeleitet hat, der funktionsmäßig mit der Prozessoreinheit verbunden ist, wobei die Markierungsinformationen anzeigen, ob Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile bestätigt ist, wobei das Kohärenzverzeichnis eine Verzeichnistabelle (274) und eine Übergangstabelle (276) umfasst; Einbeziehen (410, 414) der Markierungsinformationen in eine Nachricht, die durch das Kohärenzverzeichnis an die Prozessoreinheit gesendet werden soll; und Senden (416) der Nachricht an die Prozessoreinheit durch das Kohärenzverzeichnis, wobei die Prozessoreinheit die Kopie der Arbeitsspeicherzeile in den Prozessorcache gefüllt hat.
  18. Verfahren nach Anspruch 17, wobei das Kohärenzverzeichnis das Aufrechterhalten der den Arbeitsspeicherzeilen zugewiesenen Markierungsinformationen nach dem Feststellen einleitet, dass eine Änderung des Inhalts eines entfernt angeordneten Prozessorcache einer weiteren Prozessoreinheit des gemeinsam genutzten Arbeitsspeichersystems erforderlich ist, um Arbeitsspeicherkohärenz in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile in den entfernten Cache weiterzugeben.
  19. Verfahren nach Anspruch 18, wobei das Kohärenzverzeichnis eine Anforderung an den entfernten Prozessorcache sendet (608), die eine Änderung des Inhalts des entfernten Prozessorcache anfordert, um die Arbeitsspeicherkohärenz in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile in den entfernten Prozessorcache weiterzugeben.
  20. Verfahren nach Anspruch 19, wobei die durch das Kohärenzverzeichnis angeforderte Änderung eine Invalidierung einer weiteren Kopie der Arbeitsspeicherzeile aufweist, die im entfernten Prozessorcache enthalten ist.
  21. Verfahren nach Anspruch 18, wobei das Kohärenzverzeichnis ein Register aufweist, um die Änderungen von Inhalten der Prozessorcaches der weiteren Prozessoreinheiten des gemeinsam genutzten Arbeitsspeichersystems aufgrund der Weitergabe der Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile zu überwachen.
  22. Verfahren nach Anspruch 21, wobei das Register einen Kohärenzweitergabe-Benachrichtigungsindikator aufweist, der Prozessorcaches von Prozessoreinheiten des gemeinsam genutzten Arbeitsspeichersystems kennzeichnet, die durch das Kohärenzverzeichnis zu benachrichtigen sind, wenn die Weitergabe der Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile bestätigt ist.
  23. Kohärenzverzeichnis (210), das Arbeitsspeicherkohärenz eines gemeinsam genutzten Arbeitsspeichersystems (200) realisiert, wobei das Kohärenzverzeichnis konfiguriert ist zum: Aufrechterhalten von Markierungsinformationen, die einer Arbeitsspeicherzeile eines Hauptarbeitsspeichers (277) des gemeinsam genutzten Arbeitsspeichersystems zugewiesen sind, wobei eine Prozessoreinheit des gemeinsam genutzten Arbeitsspeichersystems ein Füllen einer Kopie der Arbeitsspeicherzeile in einen Prozessorcache eingeleitet hat, der funktionsmäßig mit der Prozessoreinheit verbunden ist, wobei die Markierungsinformationen anzeigen, ob Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile bestätigt ist, wobei das Kohärenzverzeichnis eine Verzeichnistabelle (274) und eine Übergangstabelle (276) umfasst; Einbeziehen (410, 414) der Markierungsinformationen in eine Nachricht; und Senden (416) der Nachricht an die Prozessoreinheit, wobei die Prozessoreinheit die Kopie der Arbeitsspeicherzeile in den Prozessorcache gefüllt hat.
  24. Kohärentes, gemeinsam genutztes Arbeitsspeichersystem (200), das ein Arbeitsspeicherkohärenz des gemeinsam genutzten Arbeitsspeichersystems realisierendes Kohärenzverzeichnis (210), einen Hauptarbeitsspeicher (277) und eine Prozessoreinheit aufweist, die funktionsmäßig mit einem Prozessorcache (204) verbunden ist, wobei die Prozessoreinheit konfiguriert ist zum Koordinieren einer Ausführung einer Anweisungsabfolge, die eine Mehrzahl von Anweisungen aufweist, wobei das Koordinieren aufweist: Ausführen einer Anweisung der Anweisungsabfolge, wobei die Ausführung der Anweisung die Prozessoreinheit veranlasst, eine Kopie einer Arbeitsspeicherzeile des Hauptarbeitsspeichers in den Prozessorcache zu füllen; Empfangen (302) einer Nachricht, die Markierungsinformationen beinhaltet, die anzeigen, ob Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg bestätigt ist, durch die Prozessoreinheit von einer Steuereinheit (272), die als Teil eines gemeinsam genutzten Arbeitsspeichers enthalten ist, wobei die Steuereinheit eine Verzeichnistabelle (274) von Arbeitsspeicherzeilen-Einträgen und eine Übergangstabelle (276) aufrechterhält; nach dem Erkennen (304), dass die empfangenen Markierungsinformationen anzeigen, dass Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile unbestätigt ist, Markieren (306) der betreffenden Arbeitsspeicherzeile durch die Prozessoreinheit; nach dem Erkennen (304), dass die empfangenen Markierungsinformationen anzeigen, dass die Weitergabe der Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile bestätigt ist, Entfernen (308) der Markierung der jeweiligen Arbeitsspeicherzeile durch die Prozessoreinheit; und nach dem Ausführen einer Arbeitsspeicherbarriereanweisung der Anweisungsabfolge Verhindern (300) einer Vollendung der Ausführung der Arbeitsspeicherbarriereanweisung, während die Arbeitsspeicherzeile markiert ist; und das Kohärenzverzeichnis zum Aufrechterhalten der Markierungsinformationen konfiguriert ist, die der Arbeitsspeicherzeile des Hauptarbeitsspeichers nach dem Feststellen einer Einleitung des Füllens der Kopie der Arbeitsspeicherzeile zugewiesen wurden, wobei die Markierungsinformationen anzeigen, ob die Weitergabe der Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile bestätigt ist, wobei das Kohärenzverzeichnis eine Übergangstabelle umfasst, wobei das Aufrechterhalten aufweist: zunächst Einbeziehen (414) der Markierungsinformationen, die anzeigen, dass die Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile unbestätigt ist, in eine erste Nachricht; Senden (416) der Nachricht an die Prozessoreinheit; Nach dem Erhalten (408) einer Bestätigung der Weitergabe Aktualisieren der Markierungsinformationen und Einbeziehen der aktualisierten Markierungsinformationen, die anzeigen, dass die Weitergabe von Arbeitsspeicherkohärenz über das gemeinsam genutzte Arbeitsspeichersystem hinweg in Bezug auf das Füllen der Kopie der Arbeitsspeicherzeile unbestätigt ist, in eine zweite Nachricht; Senden (416) der zweiten Nachricht an die Prozessoreinheit, die die Kopie der Arbeitsspeicherzeile in den Prozessorcache gefüllt hat.
DE112019000629.0T 2018-04-03 2019-03-27 Koordination von cacheoperationen Active DE112019000629B4 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/944,047 US11119927B2 (en) 2018-04-03 2018-04-03 Coordination of cache memory operations
US15/944,047 2018-04-03
PCT/IB2019/052482 WO2019193455A1 (en) 2018-04-03 2019-03-27 Coordination of cache memory operations

Publications (2)

Publication Number Publication Date
DE112019000629T5 DE112019000629T5 (de) 2020-10-29
DE112019000629B4 true DE112019000629B4 (de) 2023-04-27

Family

ID=66397336

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112019000629.0T Active DE112019000629B4 (de) 2018-04-03 2019-03-27 Koordination von cacheoperationen

Country Status (6)

Country Link
US (1) US11119927B2 (de)
JP (1) JP7193547B2 (de)
CN (1) CN111868699A (de)
DE (1) DE112019000629B4 (de)
GB (1) GB2587512B (de)
WO (1) WO2019193455A1 (de)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11119927B2 (en) 2018-04-03 2021-09-14 International Business Machines Corporation Coordination of cache memory operations
US11579921B2 (en) * 2018-08-29 2023-02-14 Alibaba Group Holding Limited Method and system for performing parallel computations to generate multiple output feature maps
US10884720B2 (en) * 2018-10-04 2021-01-05 Microsoft Technology Licensing, Llc Memory ordering annotations for binary emulation
US11099991B2 (en) * 2019-01-24 2021-08-24 Vmware, Inc. Programming interfaces for accurate dirty data tracking
US10754782B1 (en) * 2019-03-30 2020-08-25 Intel Corporation Apparatuses, methods, and systems to accelerate store processing
US11720360B2 (en) 2020-09-11 2023-08-08 Apple Inc. DSB operation with excluded region
CN112764785B (zh) * 2020-12-24 2021-10-29 江苏云涌电子科技股份有限公司 一种自动升级多级控制器的方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5848283A (en) 1993-01-29 1998-12-08 International Business Machines Corporation Method and system for efficient maintenance of data coherency in a multiprocessor system utilizing cache synchronization
US6088769A (en) 1996-10-01 2000-07-11 International Business Machines Corporation Multiprocessor cache coherence directed by combined local and global tables
US6356983B1 (en) 2000-07-25 2002-03-12 Src Computers, Inc. System and method providing cache coherency and atomic memory operations in a multiprocessor computer architecture
US8281079B2 (en) 2004-01-13 2012-10-02 Hewlett-Packard Development Company, L.P. Multi-processor system receiving input from a pre-fetch buffer
US20160026571A1 (en) 2014-07-24 2016-01-28 Nec Corporation Information processing device, memory order guarantee method, and recording medium storing program

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6070231A (en) * 1997-12-02 2000-05-30 Intel Corporation Method and apparatus for processing memory requests that require coherency transactions
US6963967B1 (en) 2000-06-06 2005-11-08 International Business Machines Corporation System and method for enabling weak consistent storage advantage to a firmly consistent storage architecture
US7380107B2 (en) 2004-01-13 2008-05-27 Hewlett-Packard Development Company, L.P. Multi-processor system utilizing concurrent speculative source request and system source request in response to cache miss
US7962696B2 (en) 2004-01-15 2011-06-14 Hewlett-Packard Development Company, L.P. System and method for updating owner predictors
JP4119380B2 (ja) * 2004-02-19 2008-07-16 株式会社日立製作所 マルチプロセッサシステム
US20090248988A1 (en) * 2008-03-28 2009-10-01 Mips Technologies, Inc. Mechanism for maintaining consistency of data written by io devices
US8095739B2 (en) 2009-04-13 2012-01-10 International Business Machines Corporation Barriers processing in a multiprocessor system having a weakly ordered storage architecture without broadcast of a synchronizing operation
US20100318741A1 (en) 2009-06-12 2010-12-16 Cray Inc. Multiprocessor computer cache coherence protocol
US8656115B2 (en) * 2010-08-20 2014-02-18 Intel Corporation Extending a cache coherency snoop broadcast protocol with directory information
US8935513B2 (en) 2012-02-08 2015-01-13 International Business Machines Corporation Processor performance improvement for instruction sequences that include barrier instructions
US20130227221A1 (en) 2012-02-29 2013-08-29 Advanced Micro Devices, Inc. Cache access analyzer
US9396115B2 (en) 2012-08-02 2016-07-19 International Business Machines Corporation Rewind only transactions in a data processing system supporting transactional storage accesses
WO2015163895A1 (en) 2014-04-24 2015-10-29 Empire Technology Development Llc Directory coherence for multicore processors
US9727466B2 (en) * 2014-08-26 2017-08-08 Arm Limited Interconnect and method of managing a snoop filter for an interconnect
US9652400B2 (en) 2014-12-14 2017-05-16 Via Alliance Semiconductor Co., Ltd. Fully associative cache memory budgeted by memory access type
US9740617B2 (en) 2014-12-23 2017-08-22 Intel Corporation Hardware apparatuses and methods to control cache line coherence
US9483409B2 (en) 2015-02-05 2016-11-01 International Business Machines Corporation Store forwarding cache
GB2539383B (en) 2015-06-01 2017-08-16 Advanced Risc Mach Ltd Cache coherency
US9916247B2 (en) * 2016-02-04 2018-03-13 International Business Machines Corporation Cache management directory where hardware manages cache write requests and software manages cache read requests
US11119927B2 (en) 2018-04-03 2021-09-14 International Business Machines Corporation Coordination of cache memory operations

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5848283A (en) 1993-01-29 1998-12-08 International Business Machines Corporation Method and system for efficient maintenance of data coherency in a multiprocessor system utilizing cache synchronization
US6088769A (en) 1996-10-01 2000-07-11 International Business Machines Corporation Multiprocessor cache coherence directed by combined local and global tables
US6356983B1 (en) 2000-07-25 2002-03-12 Src Computers, Inc. System and method providing cache coherency and atomic memory operations in a multiprocessor computer architecture
US8281079B2 (en) 2004-01-13 2012-10-02 Hewlett-Packard Development Company, L.P. Multi-processor system receiving input from a pre-fetch buffer
US20160026571A1 (en) 2014-07-24 2016-01-28 Nec Corporation Information processing device, memory order guarantee method, and recording medium storing program

Also Published As

Publication number Publication date
DE112019000629T5 (de) 2020-10-29
GB2587512B (en) 2022-07-13
CN111868699A (zh) 2020-10-30
US11119927B2 (en) 2021-09-14
JP7193547B2 (ja) 2022-12-20
GB2587512A (en) 2021-03-31
GB202016744D0 (en) 2020-12-09
WO2019193455A1 (en) 2019-10-10
US20190303295A1 (en) 2019-10-03
JP2021519456A (ja) 2021-08-10

Similar Documents

Publication Publication Date Title
DE112019000629B4 (de) Koordination von cacheoperationen
DE102007030116B4 (de) Snoop-Filter mit ausschließlicher Inhaberschaft
DE112015004336B4 (de) Konfigurationsbasierte Auswahl eines Cachekohärenz-Protokolls
DE69727856T2 (de) Multiprozessorsystem mit Konsistenzfehler-Registrierung mit entsprechendem Verfahren
DE112017001959T5 (de) Cachespeicher-Zugriff
DE102009032076B4 (de) Erfüllung von Speicherordnungsanforderungen zwischen Teillesevorgängen und Nicht-Snoop-Zugriffen
DE69721643T2 (de) Multiprozessorsystem ausgestaltet zur effizienten Ausführung von Schreiboperationen
DE69724353T2 (de) Mehrrechnersystem mit einem Drei-Sprung-Kommunikationsprotokoll
DE69722079T2 (de) Ein Mehrrechnersystem mit Anordnung zum Durchführen von Blockkopieroperationen
DE10262164B4 (de) Computersystem mit einer hierarchischen Cacheanordnung
DE69722512T2 (de) Mehrrechnersystem mit einem die Anzahl der Antworten enthaltenden Kohärenzprotokoll
DE10393919B4 (de) Spekulative verteilte Konfliktauflösung für ein Cache-Kohärenzprotokoll
DE102014117463A1 (de) Datenkohärenzmodell und Protokoll auf Cluster-Ebene
DE69736544T2 (de) Verfahren zur Verminderung der Anzahl von Kohärenz-Zyklen in einem verzeichnisbasierten Cachekohärenz-Speichersystem unter Verwendung eines Speicherzustands-Cachespeichers
DE102019105879A1 (de) Verwaltung von kohärenten Verknüpfungen und Mehr-Ebenen-Speicher
DE112013000889T5 (de) Weiterleitungsfortschritts-Mechanismus für Speichervorgänge bei Vorhandensein von Ladekonflikten in einem Ladevorgänge begünstigenden System
DE102013201079A1 (de) Mechanismus des Weiterleitungsfortschritts für Speichervorgänge beim Vorhandensein einer Überlastung in einem System, das Belastungen durch Zustandsänderungen begünstigt
DE112007001171T5 (de) Verfahren für virtualisierten Transaktionsspeicher bei globalem Überlauf
DE102009023898A1 (de) Optimierung von gleichzeitigen Zugriffen in einem verzeichnisbasierten Kohärenzprotokoll
DE112008002019T5 (de) Auslagern von Eingabe/Ausgabe (I/O)-Virtualisierungsarbeitsgängen an einem Prozessor
DE112005002180T5 (de) Lösen von Cachekonflikten
DE112012001660T5 (de) Speicher-Checkpointing in einem System gespiegelter virtueller Maschinen
DE102016013577A1 (de) Systeme und Verfahren zum adaptiven Partitionieren in verteilten Cache-Speichern
DE10219623A1 (de) System und Verfahren zur Speicherentscheidung unter Verwendung von mehreren Warteschlangen
DE112010001404T5 (de) Opportunistische Verbesserung einer MMIO-Anfrageabwicklung aufgrund eines Zielberichts von Raumerfordernissen

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R016 Response to examination communication
R018 Grant decision by examination section/examining division
R084 Declaration of willingness to licence
R020 Patent grant now final