DE112006002237B4 - Verfahren zur selbstinitiierenden Synchronisierung in einem Computersystem - Google Patents
Verfahren zur selbstinitiierenden Synchronisierung in einem Computersystem Download PDFInfo
- Publication number
- DE112006002237B4 DE112006002237B4 DE112006002237.7T DE112006002237T DE112006002237B4 DE 112006002237 B4 DE112006002237 B4 DE 112006002237B4 DE 112006002237 T DE112006002237 T DE 112006002237T DE 112006002237 B4 DE112006002237 B4 DE 112006002237B4
- Authority
- DE
- Germany
- Prior art keywords
- addresses
- address
- count
- processor
- arbiter
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 26
- 230000015654 memory Effects 0.000 claims abstract description 114
- 230000004044 response Effects 0.000 claims abstract description 35
- 230000002452 interceptive effect Effects 0.000 claims abstract description 5
- 239000000872 buffer Substances 0.000 claims description 8
- 238000012545 processing Methods 0.000 description 57
- 239000000523 sample Substances 0.000 description 20
- 230000001427 coherent effect Effects 0.000 description 9
- 238000012986 modification Methods 0.000 description 8
- 230000004048 modification Effects 0.000 description 8
- 238000004891 communication Methods 0.000 description 6
- 230000008569 process Effects 0.000 description 6
- 230000006870 function Effects 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 4
- 238000010586 diagram Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 230000001965 increasing effect Effects 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 238000013519 translation Methods 0.000 description 2
- 238000007792 addition Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000006073 displacement reaction Methods 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 230000001976 improved effect Effects 0.000 description 1
- 230000001939 inductive effect Effects 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000000630 rising effect Effects 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/526—Mutual exclusion algorithms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/04—Addressing variable-length words or parts of words
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0815—Cache consistency protocols
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0815—Cache consistency protocols
- G06F12/0831—Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0862—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/12—Replacement control
- G06F12/121—Replacement control using replacement algorithms
- G06F12/126—Replacement control using replacement algorithms with special data handling, e.g. priority of data or instructions, handling errors or pinning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30047—Prefetch instructions; cache control instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/30087—Synchronisation or serialisation instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/3017—Runtime instruction translation, e.g. macros
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
Abstract
Verfahren zum Bereitstellen einer selbstinitiierten Synchronisierung in einem Computersystem, das mehrere Prozessoren umfasst, die mit mehreren Speicherressourcen (314A, 314B, 314C, 314D) verbunden sind, mit den Schritten:Senden einer Anforderung für einen exklusiven Zugriff auf eine gegebene Speicherressource der mehreren Speicherressourcen (314A, 314B, 314C, 314D) von einem Prozessor (18A, 18B) an eine Verteileinheit (230),wobei die Anforderung eine oder mehrere Adressen, die mit der gegebenen Speicherressource verknüpft sind, enthält;Vergleichen durch die Verteileinheit (230) von jeder der einen oder der mehreren Adressen mit jeder Adresse mehrerer Gruppen aus Adressen, wobei jede Adresse der mehreren Gruppen aus Adressen einer jeweiligen Speicherressource entspricht, für die einer Anforderungseinheit exklusiver Zugriff gewährt worden ist; undin Reaktion darauf, dass eine Adresse der einen oder mehreren Adressen mit einer Adresse in den mehreren Gruppen aus Adressen übereinstimmt, Zurückgeben durch die Verteileinheit (230) eines Zählwertes, der mit der übereinstimmenden Adresse verknüpft ist, an den Prozessor, wobei der Zählwert eine Anzahl an Anforderungseinheiten, die im Hinblick auf die übereinstimmende Adresse in Konkurrenz miteinander stehen, kennzeichnet;wobei in Reaktion auf das Empfangen eines ein nicht erfolgreiches Ergebnis anzeigenden Zählwertes, der angibt, dass eine oder mehrere Anforderungseinheiten im Hinblick auf die übereinstimmende Adresse miteinander in Konkurrenz stehen, Software auf dem Prozessor laufen gelassen wird, die unter Verwendung des Zählwerts eine andere Speicherressource der mehreren Speicherressourcen (314A, 314B, 314C, 314D) in nachfolgenden Anforderungen auswählt, um so selbstinitiiert eine Störung bei einem weiteren Synchronisierungsversuch zu vermeiden.
Description
- Hintergrund der Erfindung
- Technisches Gebiet
- Diese Erfindung betrifft im Mikroprozessoren und betrifft insbesondere die Prozesssynchronisierung zwischen Prozessoren in einem Mehrprozessorensystem.
- Hintergrund der Erfindung
- Das Leistungsvermögen von modernen Mikroprozessoren hat sich stetig und in den vergangenen 10 Jahren dramatisch verbessert. Zu einem gewissen Grade werden die Leistungssteigerungen der größeren Arbeitsfrequenz und ferner einer Technik zugeordnet, die als tiefes Vektorverarbeiten bzw. tiefe Pipelineverarbeitung bekannt ist. Allgemein gesagt, betrifft die tiefe Pipelineverarbeitung bzw. Vektorverarbeitung das Verwenden von Befehlsvektorverfahren mit vielen Stufen, wobei jede Stufe weniger arbeitet, wodurch die gesamte Vektorverarbeitungskette bei einer höheren Geschwindigkeit arbeiten kann. Diese Technik hat sich in der Industrie gut bewährt. Jedoch gibt es Nachteile im Hinblick auf eine erhöhte Frequenz und die tiefe Vektorarbeitung bzw. Pipelineverarbeitung. Beispielsweise können die Taktsignalverzögerung und die Leistungsaufnahme bei hoher Arbeitsfrequenz beträchtlich sein. Die physikalischen Grenzen, die durch das thermische Budget auf Systemebene auferlegt werden, und die zunehmende Schwierigkeit bei der Handhabung der Taktsignalverzögerung sind Zeichen dafür, dass die praktischen Grenzen der Technik unmittelbar bevorstehen. Daher wird in der Industrie nach einer Leistungssteigerung gesucht, wobei andere Techniken eingesetzt werden. Eine Art an Technologie zur Steigerung der Leistung ist die Verwendung von Prozessoren mit mehreren Kernen und insbesondere die Mehrfachverarbeitung.
- Wenn Computersysteme Mehrfachverarbeitungsschemata mit immer mehr Prozessoren (beispielsweise Verarbeitungskeme) verwenden, wird die Anzahl der anfordernden Einheiten, die einander stören können oder die auf die gleichen Speicherdaten zugreifen, sich in einem Maße erhöht, so dass konventionelle Verfahren zur Prozesssynchronisierung nicht mehr ausreichend sind. Wenn beispielsweise eine geringe Anzahl an Prozessoren eine Verfahren zum Bereitstellen einer selbstinitiierten Synchronisierung in einem Computersystem, das mehrere Prozessoren umfasst, die mit mehreren Speicherressourcen verbunden sind, mit den Schritten:
- Senden einer Anforderung für einen exklusiven Zugriff auf eine gegebene Speicherressource der mehreren Speicherressourcen von einem Prozessor an eine Verteileinheit,
- wobei die Anforderung eine oder mehrere Adressen, die mit der gegebenen Speicherressource verknüpft sind, enthält;
- Vergleichen durch die Verteileinheit von jeder der einen oder der mehreren Adressen mit jeder Adresse mehrerer Gruppen aus Adressen, wobei jede Adresse der mehreren Gruppen aus Adressen einer jeweiligen Speicherressource entspricht, für die einer Anforderungseinheit exklusiver Zugriff gewährt worden ist; und
- in Reaktion darauf, dass eine Adresse der einen oder mehreren Adressen mit einer Adresse in den mehreren Gruppen aus Adressen übereinstimmt, Zurückgeben durch die Verteileinheit eines Zählwertes, der mit der übereinstimmenden Adresse verknüpft ist, an den Prozessor, wobei der Zählwert eine Anzahl an Anforderungseinheiten, die im Hinblick auf die übereinstimmende Adresse in Konkurrenz miteinander stehen, kennzeichnet;
- wobei in Reaktion auf das Empfangen eines ein nicht erfolgreiches Ergebnis anzeigenden Zählwertes, der angibt, dass eine oder mehrere Anforderungseinheiten im Hinblick auf die übereinstimmende Adresse miteinander in Konkurrenz stehen, Software auf dem Prozessor laufen gelassen wird, die unter Verwendung des Zählwerts eine andere Speicherressource der mehreren Speicherressourcen in nachfolgenden Anforderungen auswählt, um so selbstinitiiert eine Störung bei einem weiteren Synchronisierungsversuch zu vermeiden.
- In einer weiteren Ausführungsform umfasst ein Computersystem einen oder mehrere Prozessoren, die miteinander und mehreren Speichern verbunden sind, wobei jeder der Prozessoren ausgebildet ist, Befehle zum Senden einer Anforderung für einen exklusiven Zugriff auf eine gegebene Speicherressource der mehreren Speicherressourcen an zumindest einer in der Anforderung enthaltenen Adresse auszuführen;
und eine Synchronisierverteileinheit, die ausgebildet ist, die von einem Prozessor gesendete Anforderung zu empfangen und jede der einen oder mehreren Adressen mit jeder Adresse von mehreren Gruppen aus Adressen zu vergleichen, wobei jede Adresse der mehreren Gruppen aus Adressen einer jeweiligen Speicherressource entspricht, für die einer Anforderungseinheit exklusiver Zugriff gewährt ist;
wobei die Verteileinheit ausgebildet ist, einen Zählwert, der mit der Gruppe verknüpft ist, die die übereinstimmende Adresse enthält, zu einem gegebenen anfordernden Prozessor in Reaktion darauf zurückzugeben, dass eine Adresse der einen oder mehreren Adressen mit einer Adresse in den mehreren Gruppen aus Adressen übereinstimmt, wobei der Zählwert für eine Anzahl an Anforderungseinheiten, die im Hinblick auf die übereinstimmende Adresse miteinander in Konkurrenz stehen, kennzeichnend ist; und
wobei in Reaktion auf das Empfangen eines ein nicht erfolgreiches Ergebnis anzeigenden Zählwerts, der eine oder mehrere Anforderungseinheiten angibt, die im Hinblick auf die übereinstimmende Adresse in Konkurrenz stehen, der Prozessor ausgebildet ist, eine andere Speicherressource der mehreren Speicherressourcen in nachfolgenden Anforderungen auszuwählen, um so selbstinitiiert eine Störung bei einem weiteren Synchronisierungsversuch zu vermeiden. -
1 ist eine Blockansicht einer Ausführungsform eines Computersystems. -
2 ist eine Blockansicht, in der weitere Details einer Ausführungsform eines Verarbeitungsknotens aus1 gezeigt sind. -
3 ist ein Flussdiagramm, das die Funktion einer Ausführungsform des in1 und2 gezeigten Computersystems zeigt. - Ressource beanspruchen, bieten einfache Verriegelungsstrukturen ein adäquates Leistungsverhalten für kritische Abschnitte der Codierung. Beispielsweise können verriegelte Arithmetikoperationen in Speicherquellen ausreichend sein. Wenn das Ausmaß der Mehrfachverarbeitung anwächst, sind diese einfachen Schemata zunehmend weniger effizient. Zu diesem Zweck enthalten modernere Prozessoren Zusätze für den Befehlssatz, wozu Hardwaresynchronisierungsgrundelemente (beispielsweise CMPXCHG, CMPXCHG8B und CMPXCHG16B) gehören, die auf einer atomaren Aktualisierung einer einzelnen Speicherstelle beruhen. Jedoch wird nunmehr der Bereich beschritten, in welchem selbst diese Hardwaregrundelemente nicht mehr den Grad an Leistung bereitstellen, die in Hochleistungsmultiprozessoren mit einer großen Anzahl an Prozessoren erforderlich ist.
- Die
US 4 574 350 A offenbart ein Verfahren zum Einschränken der gleichzeitigen Verwendung geteilter Computerspeicherressourcen durch Prozessoren mithilfe einer Lock-Einheit. - Die
US 4 725 946 A offenbart eine Semaphore-Architektur zur Koordination von Prozessoranforderungen und Prozessen in Mehrprozesssor-Computersystemen. - In vielen konventionellen Prozessoren werden Synchronisierverfahren auf der Grundlage eines optimistischen Modells eingesetzt. D. h., beim Betrieb in einer Multiprozessorumgebung sind diese konventionellen Prozessoren so gestaltet, dass diese unter der Annahme arbeiten, dass sie eine Synchronisierung erreichen können, indem wiederholt die Synchronisationscodierung abgearbeitet wird, bis keine Störung mehr erkannt wird, und anschließend erklären die Prozessoren, dass eine Synchronisierung erreicht ist. Diese Art der Synchronisierung kann zu einer unerwünschten Zeitverschwendung führen, insbesondere wenn viele Prozessoren dies bei dem gleichen Synchronisierereignis versuchen, da nicht mehr als ein einzelner Prozessor zu einer gegebenen Zeit erfolgreich ist. Daher sind andere Synchronisierverfahren wünschenswert.
- Überblick über die Erfindung
- Es sind diverse Ausführungsformen eines Verfahrens zum Bereitstellen einer selbstinitiierenden Synchronisierung in einem Computersystem offenbart. Es wird bereitgestellt ein
4 ist ein Flussdiagramm, das die Funktionsweise einer Ausführungsform des in1 und2 gezeigten Computersystems in Reaktion auf das Empfangen einer Kohärenzinvalidierungsanfrage beschreibt. - Obwohl die Erfindung diversen Modifizierungen und alternativen Formen unterliegen kann, sind dennoch spezielle Ausführungsformen beispielhaft in den Zeichnungen gezeigt und sind im Weiteren detailliert beschrieben. Es sollte jedoch beachtet werden, dass die Zeichnungen und die detaillierte Beschreibung nicht beabsichtigen, die Erfindung auf die spezielle offenbarte Form einzuschränken, sondern die Erfindung soll vielmehr alle Modifizierungen, Äquivalente und Alternativen abdecken, die innerhalb des Grundgedankens und Schutzbereichs der vorliegenden Erfindung liegen, wie sie durch die angefügten Patentansprüche definiert ist. Zu beachten ist, dass der Begriff „kann" in dieser Anmeldung durchgängig in einem „möglichen“ Sinne (d. h., hat die Möglichkeit zu, ist in der Lage zu) anstatt im Sinne von ist erforderlich (d. h. muss) verwendet ist.
- Art bzw. Arten zum Ausführen der Erfindung
- Um den Aufbau von leistungsfähigen Synchronisierverfahren in Software zu ermöglichen, wird ein Satz aus Befehlen, der als eine fortschrittliche Synchronisierungseinrichtung bezeichnet wird, verwendet. Die Einrichtung kann den Aufbau einer nicht-blockierenden Synchronisierung, einer wartefreien Synchronisierung, eines Transaktionsspeichers zusammen mit dem Aufbau diverser Formen von Vergleichs- und Austauschgrundeinheiten ermöglichen, die typischerweise beim Aufbau dieser Verfahren eingesetzt werden. Die Einrichtung erlaubt das Ausbilden (in Software) einer großen Vielfalt an Synchronisiergrundeinheiten.
- Ferner kann die fortschrittliche Synchronisiereinrichtung Software zur Programmierung einer großen Vielfalt an Synchronisierarten ermöglichen. Jede Synchronisierart kann direkt angeben: Die Cache-Zeilen, die für einen erfolgreichen Abschluss erforderlich sind, einen Sequenzpunkt, an dem der Fehler den Steuerungsablauf umlenken können, einen Datenmodifizierabschnitt, an dem das Ergebnis des erfolgreichen kritischen Abschnitts ausgeführt wird, und einen Sequenzpunkt, an dem der Erfolg für den Rest des Systems sichtbar ist, so dass die gesamte Sequenz aus Befehlen als atomar erscheint.
- Somit kann die Funktion der fortschrittlichen Synchronisiereinrichtung das Erhalten und Freigeben mehrerer Cache-Zeilen mit Schreiberlaubnis, die mit einem kritischen Abschnitt verknüpft sind, im Wesentlichen gleichzeitig aus der Sicht durch andere Prozessoren/Keme ermöglichen. Dieser Prozess wird als eine Linearisierung bezeichnet. Nach der Datennahme können diverse Modifizierungen ausgeführt werden, bevor eine andere interessierte Partei eine der Modifizierungen an einer der spezifizierten mehreren Cache-Zeilen beobachtet. Zwischen der Datennahme bzw. in Besitznahme der Daten und der Freigabe dürfen keine anderen Prozessoren diese gleichen Zeilen manipulieren (beispielsweise eine Schreiberlaubnis besitzen). Ein ähnliches Verfahren könnte ausgeführt sein, indem keine Nachrichten „Quelle fertig“ für die zugehörigen Zeilen gesendet wird, wodurch gleichzeitige Zugriffe vermieden werden. Jedoch führen diese Lösungen zu einer gegenseitigen Blockade und/oder einer aktiven Blockierung oder zu Laufzeitfehlern. Somit umfasst ein Computersystem Prozessoren und Prozessorkeme, die die fortschrittliche Synchronisiereinrichtung einrichten, wie dies nachfolgend beschrieben ist.
-
1 zeigt eine Ausführungsform eines Computersystems 100. Das Computersystem 100 umfasst mehrere Verarbeitungsknoten 312A, 312B, 312C und 312D. Jeder Verarbeitungsknoten 312A bis 312D ist mit einem entsprechenden Speicher 314A bis 314D über eine Speichersteuerung 316A bis 316D verbunden, die in jedem entsprechenden Verarbeitungsknoten 312A bis 312D vorgesehen ist. Des weiteren enthalten die Verarbeitungsknoten 312A bis 312D eine Schnittstellenlogik (IF), die zu Kommunikation zwischen den Verarbeitungsknoten 312A bis 312D verwendet wird. Beispielsweise enthält der Verarbeitungsknoten 312A eine Schnittstellenlogik 318A zur Kommunikation mit dem Verarbeitungsknoten 312B, eine Schnittstellenlogik 318B zur Kommunikation mit dem Verarbeitungsknoten 312C und eine dritte Schnittstellenlogik 318C zur Kommunikation mit einem noch weiteren Verarbeitungsknoten (nicht gezeigt). In ähnlicher Weise enthält der Verarbeitungsknoten 312B Schnittstellenlogiken 318D, 318E und 318F; der Verarbeitungsknoten 312C enthält Schnittstellenlogiken 318G, 318H und 318I; und der Verarbeitungsknoten 312D enthält Schnittstellenlogiken 318J, 318K und 318L. Der Verarbeitungsknoten 312D ist ausgebildet, mit mehreren Eingabe/Ausgabe-Geräten (beispielsweise die Geräte 320A bis 320B in einer Prioritätskettenanordnung) über die Schnittstellenlogik 318L zu kommunizieren. Andere Verarbeitungsknoten können mit anderen I/O-Geräten in ähnlicher Weise in Verbindung treten. Prozessoren können diese Schnittstelle verwenden, um auf Speicher zuzugreifen, die mit anderen Prozessoren in dem System verknüpft sind. Es ist zu beachten, dass eine Komponente, die eine Bezugszahl gefolgt von einem Buchstaben zugewiesen hat, im Allgemeinen auch lediglich durch die Zahl allein bezeichnet wird, wenn dies angebracht ist. Wenn beispielsweise im Allgemeinen auf die Verarbeitungsknoten verwiesen wird, wird der Ausdruck Verarbeitungsknoten 312 verwendet. - Die Verarbeitungsknoten 312 implementieren eine paketbasierte Verbindung für die Kommunikation zwischen den Verarbeitungsknoten. In der dargestellten Ausführungsform wird die Verbindung als Gruppen aus unidirektionalen Leitungen (beispielsweise ihren Leitungen 324A zum Senden von Paketen von dem Verarbeitungsknoten 321A zu dem Verarbeitungsknoten 312B und Leitungen 324B zum Senden von Paketen von dem Verarbeitungsknoten 312B zu dem Verarbeitungsknoten 312A verwendet). Es werden andere Leitungsgruppen 324C bis 324H verwendet, um Pakete zwischen anderen Verarbeitungsknoten auszutauschen, wie in
1 gezeigt ist. Im Allgemeinen enthält jede Gruppe aus Leitungen 324 eine oder mehrere Datenleitungen, eine oder mehrere Taktleitungen entsprechend den Datenleitungen und eine oder mehrere Steuerleitungen, die die Art des übertragenen Pakets angegeben. Die Verbindung kann mit einer mit dem Cache-kohärenten Weise zur Kommunikation zwischen dem Verarbeitungsknoten betrieben werden oder in einer nicht-kohärenten Weise zur Kommunikation zwischen einem Verarbeitungsknoten und einem I/O-Gerät (oder einer Busbrücke für einen I/O-Bus mit konventionellem Aufbau, etwa dem PCI-Bus oder ISA-Bus). - Des weiteren kann die Verbindung in einer nicht-kohärenten Weise unter Anwendung einer Prioritätskettenstruktur zwischen den I/O-Geräten betrieben werden, wie dies gezeigt ist (beispielsweise 320A und 320B). Zu beachten ist, dass in einer beispielhaften Ausführungsform die Verbindung als eine kohärente Hypertransport-Verbindung oder eine nichtkohärente Hypertransportverbindung eingerichtet wird, obwohl in anderen Ausführungsformen auch andere Verbindungen möglich sind.
- Die I/O-Geräte 320A bis 320B sind beliebige geeignete I/O-Geräte. Beispielsweise umfassen die I/O-Geräte 320A bis 320B Geräte für Kommunikation mit einem weiteren Computersystem, mit dem die Geräte verbunden sind (beispielsweise Netzwerkschnittstellenkarten oder Modems). Ferner können die I/O-Geräte 320A bis 320B Videobeschleuniger, Audiokarten, Festplatten oder Diskettenlaufwerte oder Laufwerkssteuerungen, SCSI (Kleincomputersystemschnittstellen-) Adapter und Telefonkarten, Klangkarten und eine Vielzahl von Datennahmekarten, etwa GPIB oder Feldbusschnittstellenkarten umfassen. Zu beachten ist, dass der Begriff „I/O-Gerät bzw. Eingabe/Ausgabe-Gerät“ und der Begriff „peripheres Gerät“ hierin gleichbedeutend verwendet sind.
- Die Speicher 314A bis 314D umfassen beliebige geeignete Speichereinrichtungen. Beispielsweise umfasst ein Speicher 314A bis 314D einen oder mehrere RAMBUS DRAM's (RDRAM's), synchrone DRAM's (SDRAM's), DDR SDRAM's, statische RAM, etc. Der Speicheradressenraum des Computersystems 300 ist auf die Speicher 314A bis 314D aufgeteilt. Jeder Verarbeitungsknoten 312A bis 312D besitzt eine Speicherkarte, die verwendet wird, um zu bestimmen, welche Adressen welchen Speichern 314A bis 314D zugeordnet sind, um somit ist festgelegt, welchem Verarbeitungsknoten 312A bis 312D eine Speicheranforderung für eine spezielle Adresse zuzuleiten ist. Die Speichersteuerungen 316A bis 316D enthalten eine Steuerschaltung zur Kommunikation mit den Speichern 314A bis 314D. Des weiteren enthalten die Speichersteuerungen 316A bis 316D Anforderungswarteschlangen zum Aufreihen von Speicheranforderungen. Die Speicher 314A bis 314D können eine Codierung speichern, die von den Prozessoren ausführbar ist, um damit die Funktion einzurichten, wie sie in den vorhergehenden Abschnitten beschrieben ist.
- Zu beachten ist, dass ein von einem Verarbeitungsknoten zu einem weiteren zu sendendes Paket durch eine oder mehrere Zwischenknoten laufen kann. Beispielsweise kann ein von dem Verarbeitungsknoten 312A zu dem Verareitungsknoten 312A zu dem Verarbeitungsknoten 312D zu sendendes Paket durch den Verarbeitungsknoten 312B oder dem Verarbeitungsknoten 312C laufen, wie dies in
1 gezeigt ist. Es kann ein beliebiger geeigneter Weiterleitungsalgorithmus eingesetzt werden. In anderen Ausführungsformen des Computersystems 100 sind mehr oder weniger Verarbeitungsknoten verwendet, als dies in der Ausführungsform der1 gezeigt ist. Im Allgemeinen werden die Pakete als eine oder mehrere Bitseiten auf den Leitungen 324 zwischen den Knoten übertragen. Eine Bitzeit kann die ansteigende oder abfallende Flanke des Taktsignals auf den entsprechenden Taktleitungen sein. Die Pakete können Befehlspakete zum Initiieren von Transaktionen, Sondierungs- bzw. Abfragepakete für das Beibehalten der Cache-Kohärenz und Antwortpakete aus entsprechenden Anfragen und Befehlen sein. - In einer Ausführungsform enthalten die Verarbeitungsknoten 312 zusätzlich einen oder mehrere Prozessorkerne (in
2 gezeigt). Zu beachten ist, dass die Prozesskerne in jedem Verarbeitungsknoten über interne paketbasierte Verbindungen, die in einer Cache-kohärenten Weise betrieben werden, in Verbindung treten können. Des weiteren ist zu beachten, dass Prozessorkerne und die Verarbeitungsknoten 312 so ausgebildet sein können, dass sie einige (oder alle) der Speicher 314 gemeinsam nutzen. - In einer Ausführungsform ist in einem oder mehreren der Prozessorkerne die x86-Architektur eingerichtet, obwohl auch andere Architekturen möglich und hierin mit eingeschlossen sind. Eine Befehlsdecodierlogik in jedem der diversen Prozessorkerne ist ausgebildet, Befehle zu markieren, die eine LOCK- bzw. Verriegelungspräfix verwenden. Wie ferner nachfolgend beschrieben ist, kann die Prozessorkemlogik Hardware enthalten (in
2 gezeigt), die eine Erkennung der mit dem „verriegelten“ Befehlen verknüpften Markierungen ermöglicht. Diese Hardware ermöglicht die Verwendung des LOCK-Befehlspräfix, um kritische Abschnitte an Codierung als Teil der fortschrittlichen Synchronisiereinrichtung zu kennzeichnen. - Um die Auswirkungen der Störungen zu verringern, die durch versuchtes Zugreifen von mehr als einem Prozessor auf die gleiche Speicherreferenzen (beispielsweise kritische Abschnitte der Codierung) hervorgerufen werden, ist die fortschrittliche Synchronisiereinrichtung und die zugehörige Hardware in dem Computersystem 100 eingerichtet. Wie nachfolgend detaillierter beschrieben ist, verwendet die fortschrittliche Synchronisiereinrichtung neue Befehle und verwendet Hardware, etwa eine Synchronisierverteilung (in
2 gezeigt), die mit der Cache-kohärenten Vernetzung verbunden ist. Wie in2 gezeigt ist, ist die Synchronisierverteileinheit 230 mit einer Nordbrückeneinheit 290 eines Verarbeitungsknotens 312 verbunden, wodurch die Synchronisierverteileinheit explizite Adressen beobachten kann, die mit Transaktionen der fortschrittlichen Synchronisiereinrichtung jedes Knotens verknüpft sind. Die Synchronisierverteileinheit kann an einer beliebigen Stelle in den kohärenten Bereich des Verbindungsnetzwerkes angeordnet sein. Zu beachten ist, dass obwohl eine einzelne Synchronisierverteileinheit gezeigt ist, dass, wenn ein System für die Unterstützung mehrerer virtueller Maschinen ausgelegt ist, und diese virtuellen Maschinen tatsächlich den physikalischen Speicher nicht gemeinsam benutzen, mehrere Synchronisierverteileinheiten ausgebildet sein können, um die Synchronisieraufgabe auf mehrere Verteileinheiten aufzuteilen. - Zu beachten ist, dass der Begriff „kritischer Abschnitt“ durchgängig in diesem Dokument verwendet wird. Ein „kritischer Abschnitt“ bezeichnet einen Abschnitt an Codierung, der in der fortschrittlichen Synchronisiereinrichtung verwendet wird, und der einen oder mehrere Speicherreferenzbefehle, die mit einem LOCK-Präfix versehen sind, einen Befehl „Datennahme bzw. Acquire“ und ein Befehl „Freigabe“ enthält, der den kritischen Abschnitt beendet. In einer Ausführungsform gibt es drei Stufen für jeden kritischen Abschnitt: 1) Angeben der Adresse bzw. der Adressen der Cache-Zeile bzw. Zeilen, die während des kritischen Abschnitts erforderlich sind (beispielsweise Eintritt in den kritischen Abschnitt), 2) die erforderlichen Aktivitäten, um diese Cache-Zeilen zu erhalten, 3) atomares Modifizieren der Daten des kritischen Abschnitts, 4) Freigeben der Cache-Zeilen für das System. Insbesondere die Codierung des kritischen Abschnitts erscheint so, als ob diese von interessierten Beobachtern atomar ausgeführt wird. Die erste Phase kann als die Spezifizierungsphase bezeichnet werden, während die dritte Phase häufig als die atomare Phase bezeichnet wird.
- In diversen Ausführungsformen darf die Software „einfache“ arithmetische und logische Manipulationen an den Daten zwischen dem Lesen und Modifizieren der Daten des kritischen Abschnitts ausführen, solang die einfachen arithmetischen Operationen beim Ausführen keine Ausnahmebehandlungen hervorrufen. Wenn eine Datenmanipulation eine Ausnahmebehandlung innerhalb eines kritischen Abschnitts hervorruft, kann die atomare Abarbeitung dieses kritischen Abschnitts nicht garantiert werden. Die Software des kritischen Abschnitts sollte einen Fehler im atomaren Verhalten erkennen und damit in geeigneter Weise umgehen, wie dies nachfolgend beschrieben ist.
- Im Allgemeinen verwendet die fortschrittliche Synchronisiereinrichtung ein abgeschwächtes Speichermodell und operiert lediglich auf den Daten, die im Cache-Speicher ablegbar sind. Dieses abgeschwächte Speichermodell verhindert, dass die fortschrittliche Synchronisiereinrichtung Taktzyklen verschwendet, um auf diverse Prozessoren und das Lehren von Speicherpuffem zu warten, bevor ein kritischer Abschnitt ausgeführt wird. Wenn jedoch die Software ein standardmäßiges starkes PC-Speichermodell benötigt, kann die Software LFENSE, SFENSE oder MFENSE-Befehle unmittelbar vor dem Befehl „Freigabe“ einfügen, um eine standardmäßige PC der Speicherordnung zu gewährleisten. Für den Fall der Verwendung einer auf den Cache anwendbaren Synchronisierung, um Zugriffe auf nicht im Cache-Speicher ablegbare Daten zu ermöglichen, stellt ein SFNENSE-Befehl zwischen dem letzten verriegelten Schreibbefehl und dem „Freigabe“-Befehl sicher, dass die nicht in Cache ablegbaren Daten global sichtbar sind, bevor die auf dem Cache anwendbaren Synchronsierungsdaten in einem anderen Prozessor sichtbar sind. Dies erlaubt eine maximale Überlappung von Zugriffen mit Cache-Zwischenspeicherung bei minimaler Leistungseinbu-ße.
- In diversen Ausführungsformen umfasst die Schnittstellenlogik 318A bis 318L eine Vielzahl an Puffern zum Empfangen von Paketen aus der Verbindung und zur Speicherung der Pakete, die über die Verbindung zu senden sind. Das Computersystem 100 verwendet einen geeigneten Ablaufsteuerungsmechanismus zum Übermitteln von Paketen. Zusätzlich zu den Schnittstellenlogiken 318A bis 318L enthält jeder Verarbeitungsknoten entsprechende Pufferschnittstelleneinheiten (BIU) 220 (in
2 gezeigt), die die Funktion ermöglichen, eine selbstinitiierende Synchronisierung durchzuführen. Wie beispielsweise nachfolgend beschrieben wird, ist die BIU 220 für jene speziellen Adressen ausgebildet, die mit einem fortschrittlichen Synchronisierereignis verknüpft sind, und ist ferner ausgebildet, diese Adressen der Synchronisierverteileinheit 230 in Reaktion auf das Ausführen eines „Datennahme bzw Acquire“-Befehls zuzuführen. Die BIU 220 ist ferner ausgebildet, zu bestimmen, ob die von der Synchronisierverteileinheit 230 erhaltene Antwort angibt, dass die Adressen eine Störung hervorrufen. Abhängig davon, ob die Antwort angibt, dass die Adressen nicht ohne gegenseitige Störung sind, kann die BIU 220 den anfordernden Prozessorkem über einen Fehler informieren, indem ein Fehlerzahlwert an ein Register innerhalb des Prozessorkems 18 gesendet wird und indem eine vollständige Nachricht an die Synchronisierverteileinheit 230 gesendet wird, oder wenn eine Störungsfreiheit garantiert ist, wird das Ausführen des kritischen Abschnitts zugelassen und es wird gewartet, bis die Nachricht auf Abgeschlossenheit an die Synchronisierverteileinheit 230 gesendet wird. -
2 ist eine Blockansicht, die detailliertere Aspekte von Ausführungsformen des Verarbeitungsknotens 312A und der Synchronisierverteileinheit 230 aus1 zeigt. Gemäß2 umfasst der Verarbeitungsknoten 312A Prozessorkerne 18A und 18n, wobei n eine beliebige Anzahl an Prozessorkemen repräsentiert. Da in den diversen Ausführungsformen die Prozessorkerne im Wesentlichen gleich sind, werden detaillierte Aspekte des Prozessorkerns 18 hier im Weiteren beschrieben. Wie gezeigt, sind die Prozessorkerne 18A und 18n mit der Busschnittstelleneinheit 220 verbunden, die mit einer Nordbrückeneinheit 200 verbunden ist, die wiederum mit der Speichersteuerung 316A, der Hypertransport-Schnittstellenlogik 318A bis 318C und auch mit der Synchronisierverteileinheit 230 über ein Paar aus unidirektionalen Leitungen 324I bis 324J verbunden ist. - Der Prozessorkem 18A enthält eine Hardware, die zum Ausführen von Befehlen ausgebildet ist. Insbesondere enthält der Prozessorkem 18A wie dies für viele Prozessoren typisch ist, eine oder mehrere Befehlsausführungsvektorverarbeitungen bzw. Pipelines mit einer Zahl von Pipeline-Stufen, Speicherstufen und einer Steuerung und einem Adressenübersetzungsmechanismus (wovon lediglich relevante Bereiche der Kürze halber gezeigt sind). Folglich enthält, wie dies gezeigt ist, der Prozessorkern 18A einen Befehlscache-Speicher der Ebene 1 (L1), eine Vorabhollogik und eine Verzweigungsvorhersagelogik. Da diese Blöcke eng mit dem Befehlscache-Speicher gekoppelt sind, sind sie zusammen als Block 250 dargestellt. Der Prozessorkem 18A enthält ferner einen Datencache-Speicher 207 der Ebene L1. Der Prozessorkem 18A umfasst ferner einen Befehlsdecodierer 255 und eine Befehlsausgabe- und Steuereinheit 256 ist ausgebildet, Befehle von dem Befehlsdecodierer 255 zu empfangen und Operationen an eine Disponiereinheit 259 bzw. Ablauforganisationseinheit auszugeben. Ferner ist die Befehlsausgabe- und Steuereinheit 256 mit einem Mikrocodierungs-Nur-Lese-Speicher (MROM) (nicht gezeigt) verbunden. Die Disponiereinheit 259 ist ausgebildet, ausgegebene Operationen von der Befehlsausgabe- und Steuereinheit 256 zu empfangen und Operationen an Ausführungseinheiten 260 auszugeben. In diversen Ausführungsformen enthalten die Ausführungseinheiten 260 eine beliebige Anzahl von Ganzzahlausführungseinheiten und Gleitkommaeinheiten. Ferner enthält der Prozessorkem 18A einen TLB 206 und eine Lade/Schreib-Einheit 270. Zu beachten ist, dass in alternativen Ausführungsformen ein chipinterner L2-Cache-Speicher vorgesehen sein kann (obwohl dies nicht gezeigt ist).
- Der Befehlsdecodierer 255 ist ausgebildet, Befehle in Operationen umzuwandeln, die direkt decodiert oder indirekt decodiert werden unter Anwendung von Operationen, die in den MROM gespeichert sind. Der Befehlsdecodierer 255 kann gewisse Befehle in Operationen decodieren, die in der Ausführungseinheiten 260 auszuführen sind. Einfache Befehle können einer einzelnen Operation entsprechen, während in anderen Ausführungsformen komplexere Befehle mehreren Operationen entsprechen. In einer Ausführungsform enthält der Befehlsdecodierer 255 mehrerer Decodierer (nicht gezeigt), um gleichzeitig Befehle zu decodieren. Jeder Befehl kann in einen Satz aus Steuerwerten in mehreren Stufen ausgerichtet und decodiert werden, abhängig davon, ob die Befehle zuerst zu dem MROM geleitet werden. Diese Steuerwerte können in einem Befehlsstrom zur Befehlsausgabe- und Steuereinheit 257 zusammen mit Operandenadressinformationen und Versetzungs- oder unmittelbaren Daten geleitet werden, die in dem Befehl enthalten sein können. Wie nachfolgend beschrieben ist, kann der Befehlsdecodierer die Adresse mit einer Marke kennzeichnen, wenn ein Speicherreferenzbefehl ein „LOCK“- bzw. ein „Verriegelungs“-Präfix enthält.
- Die Lade/Schreibeinheit 270 ist ausgebildet, eine Schnittstelle zwischen den Ausführungseinheiten 260 und den Datencache-Speicher 207 zu bilden. In einer Ausführungsform enthält die Lade/Schreibeinheit 270 Lade/Schreibpuffer mit diversen Speicherstellen für Daten und Adresseninformationen für anhängige Ladeoperationen und Schreiboperationen. Die dargestellte Ausführungsform enthält LS1 205, LS 209, physikalische LS2 210 und Datenspeicherung 211. Ferner enthält der Prozessorkem 18A eine Markierungslogik 208 und ein Markierungsbit 213.
- In einer Ausführungsform wird ein kritischer Abschnitt auf eine von zwei Arten verarbeitet: deterministisch oder optimistisch. Die Wahl des Ausführens beruht auf der Konfiguration der fortschrittlichen Synchronisiereinrichtung auf den Zustand einer Vorhersageeinheit für kritische Abschnitte, wie dies detailliert nachfolgend beschrieben ist. In diversen Ausführungseinheiten kann das Basiseingabe/Ausgabe-System (BIOS), das Betriebssystem (OS) oder eine virtuelle Speicherverwaltung (VMM) den Arbeitsmodus der fortschrittlichen Synchronisiereinrichtung konfigurieren. Beim Betrieb in den deterministischen Ausführungsmodus werden die durch die verriegelten Speicherreferenzbefehle spezifizierten Adressen gebündelt und als Ganzes zu der Synchronisierverteileinheit 230 zum Untersuchen auf Störungen hin gesendet. Die Cache-Zeilendaten werden dann erhalten und der kritische Abschnitt wird ausgeführt (wie dies zugelassen ist). Wenn im Gegensatz in dem optimistischen Synchronisiermodus gearbeitet wird, wird keine Störung angenommen, und der kritische Abschnitt wird ausgeführt (wobei die Synchronisierverteileinheit 230 umgegangen wird), und wenn ein anderer Prozessor diesen kritischen Abschnitt stört, wird diese Störung erkannt und der Prozessor geht zurück zum „Beschaffen“- bzw. „ACQUIRE"-Befehl und führt den Steuerablauf von der atomaren Phase weg.
- Um den deterministischen Modus einzurichten, verwendet die fortschrittliche Synchronisiereinrichtung die Synchronisierverteileinheit 230. Wie zuvor beschrieben ist, prüft die Synchronisierverteileinheit 230 alle physikalischen Adressen, die mit einer Synchronisieranforderung verknüpft sind, und wertet den Satz aus Adressen als zulässig „befunden“ oder als Fehler (d. h. weist diese zurück) auf der Grundlage davon, ob ein anderer Prozessorkem oder eine andere Anforderungseinheit auf diesen Adressen operiert oder diese angefordert hat, wenn diese gerade angesprochen werden. Somit ermöglicht die Synchronisierverteileinheit 230 den Aufbau einer Software, die selbstinitiativer Weise Störungen vermeidet. Wenn eine Störung durch die Synchronisierverteileinheit 230 erkannt wird, reagiert die Synchronisierverteileinheit 230 auf eine Anforderung mit einem Fehlerstatus mit einer einzigartigen Zahl (beispielsweise einem Zählwert 233) auf einen anfordernden Prozessorkem. In einer Ausführungsform gibt der Zählwert die Anzahl der Anforderungseinheiten an, die im Wettbewerb stehen für die eine oder mehreren Speicherressourcen, die angefordert werden. Die Software kann diese nun verwenden, um in selbstinitiierender Weise eine Störung in nachfolgenden Durchläufen des kritischen Abschnitts zu vermeiden, indem diese Nummer verwendet wird, um eine andere Ressource auszuwählen, um damit einen Zugriff auf einen kritischen Abschnitt zu unternehmen.
- Wie folglich in
2 gezeigt ist, enthält die Synchronisierverteileinheit 230 einen Speicher 232 mit einer Reihe von Einträgen. Jeder der Einträge speichert eine oder mehrere physikalische Adressen von Anforderungen, die aktuell bearbeitet werden. In einer Ausführungsform enthält jeder Eintrag bis zu acht physikalische Adressen, die als eine einzelne 64-Byte-Anforderung übermittelt werden. Des weiteren kann der Eintrag der Synchronisierverteileinheit den Zählwert 233 enthalten, der allen Adressen in dem Eintrag entspricht. Wie zuvor beschrieben ist, gibt der Zählwert die Anzahl der Anforderungseinheiten (d. h. Störer) an, die um eine der Adressen in einem kritischen Abschnitt im Wettbewerb zueinander stehen. Wenn die Synchronisierverteileinheit 230 einen Satz an Adressen empfängt, prüft eine Vergleichseinheit 231 in der Synchronisierverteileinheit 230 im Hinblick über eine Übereinstimmung zwischen jeder Adresse in dem Satz und allen Adressen in dem Speicher 232. Wenn es keine Übereinstimmung gibt, ist die Synchronisierverteileinheit 230 ausgebildet, eine positive Antwort auszugeben, indem ein zulässiger Zählwert zurückgegeben wird und die Adressen dem Speicher 232 abgelegt wurden. In einer Ausführungsform ist der zulässige Zählwert 0, obwohl ein beliebiger anderer geeigneter Zählwert verwendet werden kann. Wenn es jedoch eine Adressenübereinstimmung gibt, kann die Synchronisierverteileinheit 230 den Zählwert 233, der mit dem Satz aus Adressen verknüpft ist und die übereinstimmende Adresse enthält, erhöhen, und dem Zählwert dann als Teil einer negativen Antwort zurückgeben. Zu beachten ist, dass die Vergleichseinheit 231 nur eine Struktur zum Vergleichen sein kann, die auf diverse Arten eingerichtet ist, wie dies gewünscht ist. Des weiteren wird in einer weiteren Ausführungsform jede in dem Speicher 232 gespeicherte Adresse mit einem entsprechenden Wert verknüpft. Der Zählwert ist kennzeichnend für die Anzahl der Anforderungseinheiten (d. h. Störer), die zueinander im Wettbewerb für eine der entsprechenden Adressen in einem kritischen Abschnitt stehen. - In der dargestellten Ausführungsform enthält die Busschnittstelleneinheit (BIU) 220 eine Zählwertvergleichsschaltung 221, einen verriegelten Zeilenpuffer (LLB) 222 und eine Vorhersageeinheit 223. Die BIU 220 umfasst ferner diverse andere Schaltungen zum Senden und Empfangen von Transaktionen von den diversen Komponenten, mit der diese verbunden ist, wobei diese jedoch der Einfachheit halber nicht gezeigt sind. Die BIU 220 ist ausgebildet, einen Satz aus Adressen, die mit einem kritischen Abschnitt verknüpft sind, von dem LLB 222 zu der Synchronisierverteileinheit 230 in Reaktion auf das Ausführen eines „ACQUIRE“-Befehls zu senden. Des weiteren ist die Vergleichsschaltung 221 ausgebildet, den Zählwert, der von der Synchronisierverteileinheit 230 zurückgegeben wird, zu prüfen, wenn der Zählwert ein zulässiger Zählwert (beispielsweise Null) oder ein einen Fehler anzeigender Zählwert ist. Zu beachten ist, dass der SBB 22 unter Anwendung einer beliebigen Art an Speicherstruktur eingerichtet werden kann. Beispielsweise kann dieser Teil eines bestehenden Speicheradressenpuffers (MAB) oder nach Bedarf eine separate Einheit sein.
- Wie zuvor beschrieben ist, werden, wenn der Prozessorkern 18 in dem deterministischen Synchronisiermodus arbeitet, mit einem kritischen Abschnitt verknüpfte Adressen während des Befehlsdecodierens markiert unter Anwendung des LOCK-Präfix. Insbesondere werden Speicherreferenzen, die explizit in fortschrittlichen Synchronisiercodierungssequenzen teilhaben, unter Anwendung des LOCK-Präfix mit einem geeigneten MOV-Befehl kennzeichnet. Verriegelte Ladebefehle können die folgende Form aufweisen:
- Obwohl die Anforderung der BIU 320 (an die Synchronisierverteileinheit 230) auf eine Antwort wartet, führt der LLB 222 eine Überwachung im Hinblick auf Sondierungsanforderungen mit durchlässiger Struktur durch, und wenn eine (oder mehrere) auftreten, wird veranlasst, dass der ACQUIRE-Befehl ein negatives Resultat besitzt, selbst wenn die Synchronisierverteileinheit 230 ein erfolgreiches Ergebnis zurückgibt. Das LOCK-Präfix veranlasst keine spezielle Verriegelung des Cache-Speichers oder des Busses, sonder bietet einfach eine geeignete Markierung, die speicherbasierten MOV-Befehlen hinzugefügt wird. Verriegelte Befehle zum Verschieben von Werten in einem Register (die ansonsten auch als verriegelte Ladeoperationen bezeichnet werden) werden normal bis hinab zur Datencache-Pipeline verarbeitet.
- Folglich wird während der Adressenübersetzung jede lineare Adresse in dem linearen Adressenbereich des LS 209 gespeichert. Die entsprechenden physikalischen Adressen werden in dem TLB 206 und in dem physikalischen LS2 210 abgelegt, während die entsprechenden Daten in dem Datencache-Speicher 207 und dem Daten LS2 211 gespeichert werden. Die Markierungslogik 208 erkennt die LOCK-Präfixmarkierung, die während des Decodierens erzeugt wurde, und erzeugt ein zusätzliches Markierungsbit 213, wodurch jede derartige Adresse als Teil eines kritischen Abschnitts gekennzeichnet wird. Jede verriegelte Ladeoperation, die ein Fehltreffer in dem Daten-Cache-Speicher ist, erhält ihre Cache-Zeilendaten über die Speicherhierarchie mit einer Aufrufstruktur für „Lesen bei gemeinsamen Zugriff“, wobei jedoch die Schreiberlaubnis geprüft wird.
- Wenn der Prozessorkem 18 in einem deterministischen Synchronisiermodus betrieben wird, wie zuvor beschrieben ist, werden mit einem kritischen Abschnitt verknüpfte Adressen während der Befehlsdecodierung unter Anwendung des LOCK-Präfix markiert. Insbesondere werden Speichervorabholreferenzen, die explizit Teil von fortschrittlichen Synchronisiercodierungssequenzen sind, unter Anwendung des LOCK-Präfix mit einem geeigneten Befehl „PREFETCHW“ markiert. Diese Art an verriegelten Ladebefehlen besitzen die folgende Form:
- Somit wird ein regulärer Speicher-PREFETCHW-Befehl zu einem speziellen Befehl gemacht, indem ein LOCK-Präfix angefügt wird. Dies bewirkt, dass die BIU 220 die zugehörige markierte physikalische Adresse für den LLB 222 markiert, wenn die Adresse für einen L1-Cache-Speicher (und TLB 206) läuft. Des weiteren wird die Speicherzugriffsstärke verringert, um einen tatsächlichen Zugriff auf die Zeile zu vermeiden. Der Befehl PREFETCHW wird nicht aus dem LS2 heraus abgeschlossen, bis der Befehl „ACQUIRE“ aus der Synchronisierverteileinheit 230 zurückgegeben wird. Diese Befehle können verwendet werden, um Cache-Zeilen anzusprechen, die Teil des kritischen Abschnitts sind und die Daten erfordern (beispielsweise einen Zeiger), um andere Daten abzurufen, die ebenfalls in dem kritischen Abschnitt benötigt werden. Am Ende der Spezifizierungsphase wird ein Befehl „ACQUIRE“ verwendet, um die BIU 220 darüber zu informieren, dass alle Speicherreferenzadressen für den kritischen Abschnitt in LLB 222 gespeichert sind.
-
- Der Befehl „ACQUIRE“ prüft, ob die Anzahl der verriegelten Speicherreferenzbefehle gleich dem unmittelbaren Wert in dem Befehl „ACQUIRE“ ist. Wenn diese Prüfung ein nicht korrektes Ergebnis liefert, wird der Befehl „ACQUIRE“ mit einem Fehlercode beendet, ansonsten veranlasst der Befehl „ACQUIRE“ die BIU 220, alle in dem LLB 222 gespeicherten Adressen an die Synchronisierverteileinheit 230 zu senden. Dieser Befehl „sieht aus“ wie ein Speicherreferenzbefehl auf dem Datenpfad, so dass der Zählwert, der von der Synchronisierverteileinheit 230 zurückgegeben wird, verwendet werden kann, um zu bestätigen (oder abzulehnen), dass auf alle Zeilen ohne Störung zugegriffen werden kann. Für diesen „Lade“-Befehl ist keine Adresse notwendig, da es nur eine einzelne Synchronisierverteileinheit 230 pro virtueller Maschine oder pro System geben kann. Das in dem Befehl „ACQUIRE“ angegebene Register ist das Zielregister des Prozessorkerns 18.
- In einer Ausführungsform beinhaltet die Struktur eine verriegelten Ladeoperation bei einer Sondierungsanfrage die Überwachung der Lage für eine Sondierungsanforderung mit Ungültigerklärung (beispielsweise Probe Inv oder Probe ReadM). Wenn für eine Stelle eine Sondierung mit „Ungültigerklärung“ erkannt wird, gibt die LS1- oder LS2-Warteschlange einen Fehlerstatus zurück, ohne dass auf den Abschluss der Leseoperation gewartet wird. Es kann ein allgemeiner Fehler (#GP) erzeugt werden, wenn die Anzahl der verriegelten Ladeoperationen eine Mikroarchitekturgrenze übersteigt. Wenn ein Befehl „ACQUIRE“ ein unzulässiges Ergebnis zurückgibt, dann wird der Zählwert der verriegelten Ladeoperationen auf Null zurückgesetzt. Wenn die Adresse nicht für einen Speicher mit Rückschreibeigenschaft ist, erzeugt der Befehl einen Seitenfehler (#PF) oder einen #GP-Fehler oder der Befehl „ACQUIRE“ kann so abgearbeitet werden, das ein negatives Ergebnis erhalten wird (wenn dieser nachfolgend angetroffen wird).
- Es wird erwartet, dass einige kritische Abschnitte eine Reihe von arithmetischen Entscheidungen oder Steuerablaufentscheidungen aufweisen, um zu berechnen, welche Datenmodifizierungen geeignet sind (falls welche vorhanden sind). Jedoch sollte die Software dafür sorgen, dass diese Arten an Befehlen niemals eine tatsächliche Sonderbehandlung hervorrufen. In einer Ausführungsform werden arithmetische Befehle und Speicherreferenzbefehle in den SSE-Registem (XMM) oder in den Registern für Allgemeinzwecke (beispielsweise EAX, etc.) oder in den MMX- oder x87-Registem verarbeitet.
- Wie zuvor beschrieben ist, erachtet die Synchronisierverteileinheit 230 die Anforderung gesammelt als zulässig oder zeichnet diese gesammelt als unzulässig. Wenn die Synchronisierverteileinheit 230 die Anforderung als unzulässig einstuft, kann die Antwort für die BIU 220 bezeichnet werden als „Synchronisationsverteilfehler nach ACQUIRE“, wobei das Null-Bit gesetzt ist (beispielsweise RFLAGS.ZF). Wie zuvor beschrieben ist, enthält die von der Synchronisierverteileinheit 230 zurückgegebene Antwort den Zählwert 233, der die Anzahl der Störer kennzeichnet. Die Software kann diesen Zählwert verwenden, um künftige Störungen zu reduzieren, wie dies zuvor beschrieben ist. Der Zählwert 233 von der Synchronisierverteileinheit 230 kann einem allgemeinen Register (nicht gezeigt) in den Prozessorkem 18 zugeführt werden und kann auch zum Setzen von Bedingungscodierungen verwendet werden. Wenn die Synchronisierverteileinheit 230 die Anforderung weitergibt, kann die Rückantwort für die BIU 220 einen zulässigen Zählwert (beispielsweise Null) enthalten.
- Wenn in einer Ausführungsform die Synchronisierverteiladressenspeicher 232 voll ist, wird die Anforderung mit einem negativen Zählwert, etwa Minus eins (-1) zurückgegeben. Dies gibt der Software, die in dem Prozessorkem abgearbeitet wird, ein Mittel, um eine Überlastung in dem System zu erkennen und zu ermöglichen, dass die Software keine weiteren Anforderungen an die Synchronisierverteileinheit 230 für eine gewisse Zeitdauer sendet. Beispielsweise kann die Software andere Aufgaben abarbeiten oder kann einfach eine gewisse Zeit verstreichen lassen, bevor ein erneuter Synchronisierversuch unternommen wird.
- Wenn der Zählerwert Null ist, (was bedeutet, dass keine Störungen von der Synchronisierverteileinheit 230 beobachtet werden), führt der Prozessorkem 18 die Befehle in dem kritischen Abschnitt aus und bearbeitet die Daten in den Cache-Zeilen nach Bedarf. Wenn die Datenbearbeitung abgeschlossen ist, wird ein „RELEASE“- bzw. Freigabe-Befehl ausgeführt, der das Ende des kritischen Abschnitts anzeigt. In einer Ausführungsform ermöglicht der „RELEASE“-Befehl, dass alle modifizierten Daten im Wesentlichen gleichzeitig sichtbar sind, indem die „RELEASE“-Nachricht an die Synchronisierverteileinheit 230 gesendet wird, wodurch die zugehörigen Cache-Zeilen für das System wieder verfügbar sind.
- Wie zuvor beschrieben ist, kann ein kritischer Codierungsabschnitt einen oder mehrere Speicherreferenzbefehle mit dem LOCK-Präfix aufweisen, woran sich der „ACQUIRE“-Befehl anschließt. Des weiteren folgt ein bedingter Sprungbefehl nach dem „ACQUIRE“-Befehl, so dass die Codierung den kritischen Abschnitt verlassen kann, sollte die Synchronisierverteileinheit 230 eine Codierung „Fehler nach ACQUIRE“ ausgeben oder eine Sondierungsanfrage mit Ungültigerklärung erkannt werden, bevor auf die Cache-Zeilen zugegriffen wird. In derartigen Ausführungsformen kann auf den bedingten Sprungbefehl ein Freigabebefehl folgen. Im Folgenden sind zwei kritische Codierungsabschnitte gezeigt, um zwei Arten kritischer Abschnitte beispielhaft darzustellen. Zu beachten ist, dass die folgenden Codesegmente lediglich Beispiele für Diskussionszwecke sind. Zu beachten ist, dass andere Ausführungsformen möglich sind und hierin mit eingeschlossen sind.
- Das folgende erste beispielhafte Codesegment zeigt das Entfernen eines Elements in einer doppelt vernetzten Liste, wobei dies unter Anwendung des Freigabebefehls erfolgt.
// Concurrency Queue Version // p ist in RAX LOCK MOVD A,[RAX+next] // a = p->next LOCK MOVD B,[RAX+prev] // b = p->prev LOCK MOVD C,[A+next] // c = a->prev LOCK MOVD D,[B+next] // d = b->next ACQUIRE reg JNZ fails MOVD [A+next], D // a->prev = d MOVD [B+prev], D // b->prev = c MOVD [RAX+next], 0 // p->next = Null MOVD [RAX+prev], 0 // p->prev = Null RELEASE
Das folgende beispielhafte Codesegment zeigt das Einfügen eines Elements in eine doppelt vernetzte Liste, wobei ebenfalls der Freigabebefehl bzw. „RELEASE“-Befehl verwendet wird.
// Concurrency Queue Version // q is in RAX // p ist in RSI LOCK MOVD S,[RAX+next] // s = q->next LOCK PREFETCHW [RSI+prev] // touch p->prev LOCK PREFETCHW [RSI+next] // touch p->next LOCK PREFETCHW [S+next] // touch s->next ACQUIRE reg JNZ fails MOVD [RAX+next],RSI // q->next = p MOVD [S+prev],RSI // s->prev = p MOVD [RSI+next],S // p->next = s MOVD [RSI+prev],RAX //p->prev = q RELEASE
In einer Ausführungsform unterstützt die fortschrittliche Synchronisiereinrichtung zwei Arten von Fehler, d. h. „Fehler nach ACQUIRE“ und einen „Fehler für Anforderungseinheit“ bzw. „Fail-to-REQUESTOR“. Der „Fehler nach ACQUIRE“ bewirkt, dass der „ACQUIRE“-Befehl abgeschlossen wird, wobei das Null-Bit gesetzt ist (beispielsweise RFLAGS.ZF), so dass der nachfolgende bedingte Sprungbefehl den Steuerablauf von Schaden hervorrufenden Befehlen in der atomaren Phase weg führen kann. Die Synchronisierverteilung mit „Fehler nach ACQUIRE“ bei gesetztem Null-Bit (beispielsweise RFLAGS.ZF) ist ein Fehler der Art „Fehler nach ACQUIRE“. Eine andere Art ist ein Prozessor- „Fehler nach ACQUIRE“. In einer Ausführungsform kommunizieren währen des Ausführens kritischer Abschnitte die Prozessorkeme durch Beobachten von Speichertransaktionen. Diese Beobachtungen können bei den „ACQUIRE“-Befehl eines ausführenden Prozessorkems sichtbar gemacht werden. Insbesondere während der Zeit zwischen dem Beginn des Sammelns von Adressen, die für einen kritischen Abschnitt erforderlich sind und der Antwort der Synchronisierverteileinheit 230 überwacht der Prozessorkem 18 alle jene Adressen auf kohärente Ungültigkeitserklärungsanfragen (beispielsweise Sondierung bzw. Anfrageanforderung mit Ungültigerklärung). Wenn beliebige Zeilen als Ungültig erklärt werden, wird die Antwort der Synchronisierverteileinheit 230 ignoriert und der „ACQUIRE-Befehl“ kann zu einem Fehler führen, wobei das Null-Bit gesetzt ist (beispielsweise RFLAGS.ZF).
Der Fehler „Fehler für Anforderungseinheit“ kann als eine „Sondierungs“-Antwort gesendet werden, wenn es einen Cache-Treffer für eine Zeile gibt, die im Hinblick auf eine Störung geprüft wurde und von der Synchronisierverteileinheit 230 als zulässig erkannt wurde. Eine „Fehler für Anforderungseinheit“-Antwort verursacht eine „Fehler nach ACQUIRE“ in dem anfordernden Prozessor, wenn dieser aktuell einen kritischen Abschnitt gemäß der fortschrittlichen Synchronisiereinrichtung verarbeitet, oder dadurch wird bewirkt, dass die BIU des anfordernden Prozessors diese Speicheranforderung erneut ausgibt, wenn diese nicht den kritischen Abschnitt verarbeitet. Die BIU 220 kann ausgebildet sein, einen „Fehler nach ACQUIRE“ in Reaktion auf das Empfangen einer Sondierungsanfrage mit Ungültigkeitserklärung zu bewirken, bevor eine Nachricht von der Synchronisierverteileinheit 230 über ein positives Ergebnis erhalten wird.
Sobald die Adressen des kritischen Abschnitts übemommen sind, erhält ein Prozessorkem 18, der seine Adressen von der Synchronisierverteileinheit 230 erhalten hat, exklusiven Zugriff auf jede Cache-Zeile (beispielsweise Schreiberlaubnis), wenn Speicherreferenzbefehle in der atomaren Phase verarbeitet werden. Nachdem eine zulässige Cache-Zeile eintrifft, greift der Prozessorkem 18 auf diese Cache-Zeile dauerhaft zu und verhindert, dass andere Prozessorkerne die Zeile verwenden, indem auf kohärente Ungültigkeitserklärungsanfragen mit „Fehler für Anforderungseinheiten“-Antworten reagiert wird. Zu beachten ist, dass eine „Fehler für Anforderungseinheit“ auch als eine Negativbestätigung (NAK) bezeichnet werden kann.
Wie zuvor beschrieben ist, wird, wenn ein Prozessor eine „Fehler für Anforderungseinheit“ Nachricht empfängt und gleichzeitig in einer fortschrittlichen Synchronisierbefehlssequenz teilnimmt, diese Befehlssequenz veranlasst, dass sie bei dem „ACQUIRE“-Befehl mit einem negativen Ergebnis reagiert. In diesem Falle wird der nachfolgende bedingte Sprung genommen und der Schaden hervorrufende Teil der Speicherreferenzbefehle in dem kritischen Abschnitt wird vermieden. Wenn jedoch ein Prozessor eine „Fehler für Anforderungseinheit“ Nachricht empfängt und nicht in einer fortschrittlichen Synchronisierbefehlssequenz teilnimmt, kann die BIU des anfordernden Prozessors die ursprüngliche Speichertransaktion emeut anfordern. Somit ermöglicht die abgelaufene Zeitdauer zwischen dem Senden der „Fehler für Anforderungseinheit“ Nachricht und dem nachfolgenden Eintreffen der nächsten kohärenten Sondierungsanfrage mit Ungültigkeitserklärung in dem als zulässig erklärten kritischen Abschnitt ein weiteres Voranschreiten des Prozessors mit einer garantierten Zustimmung der Synchronisierverteileinheit. Die Sicherstellung des weiteren Fortschritts ermöglicht es, dass die fortschrittliche Synchronisiereinrichtung unter einer Konkurrenzsituation effektiver ist als aktuell bestehende Synchronisiermechanismen. Somit können früher oder später der kritische Abschnitt und die störende Speicherreferenz ausgeführt werden (beispielsweise keine einseitige Blockierung oder eine gegenseitige Blockade).
Wie zuvor erläutert ist, kann das Leistungsverhalten des Prozessors, der in der fortschrittlichen Synchronisiereinrichtung teilnimmt, optimiert werden, indem eine Vorhersageeinheit 223 für kritische Abschnitte eingesetzt wird. Ursprünglich kann die Vorhersageeinheit 223 so eingerichtet sein, dass diese vorhersagt, dass keine Störung während des Ausführens eines kritischen Abschnitts erwartet wird. In diesem Modus verwendet der Prozessorkem 18 für gewöhnlich die Synchronisierverteileinheit 230 nicht. Stattdessen kann der Prozessorkern 18 die verriegelten Speicherreferenzen aufzeichnen und kann diese im Hinblick auf kohärente Sondierungsanfragen mit Ungültigkeitserklärung überprüfen, um eine gegenseitige Störung zu erkennen. Wenn das Ende des kritischen Abschnitts erreicht wird, bevor eine gegenseitige Störung erkannt wird, hat keine interessierte dritte Partei die Aktivität des kritischen Abschnitts „gesehen“ und diese wurde ausgeführt, als ob sie in atomarer Weise ausgeführt wird. Diese Eigenschaft ermöglicht es, dass die fortschrittliche Synchronisiereinrichtung im Hinblick auf Prozessortaktzyklen vergleichbar ist mit aktuell existierenden Synchronisiermechanismen, wenn keine Konkurrenzsituation beobachtet wird.
Wenn insbesondere eine gegenseitige Störung erkannt wird, kann der Prozessorkem 18 einen Fehlerstatus für den „ACQUIRE“-Befehl erzeugen und die nachfolgende bedingte Verzweigung ändert den Steuerablauf so, dass diese aus dem kritischen Abschnitt herausführt, und setzt die Vorhersageeinheit zurück, so dass diese einen deterministischen Modus voraussagt. Wenn der nächste kritische Abschnitt erkannt wird, wird der Decodierer voraussagen, dass eine gegenseitige Störung auftreten könnte und verarbeitet den kritischen Abschnitt unter Anwendung der Synchronisierverteileinheit 230 (wenn diese aktiviert ist).
In einer Ausführungsform arbeitet die fortschrittliche Synchronisiereinrichtung unter Verwendung von fehljustierten Datenpunkten, solange diese Punkte nicht die Cache-Zeilen bilden, die nicht Teil des eigentlichen kritischen Abschnitts sind. Die Software darf Synchronisierelemente besitzen, die sich über die Cache-Zeilengrenzen hinweg erstrecken, solange alle Cache-Zeilen, die derart betroffen sind, als Teil des Eintrags des kritischen Abschnitts erkannt werden. Wenn ein Datenelement von einer Cache-Zeile in eine weitere Cache-Zeile reicht, die nicht Teil der Synchronisationskommunikation ist, erkennt der Prozessor keinen Fehler in der atomaren Handhabung und gibt auch keinen Mangel an atomaren Verhalten bekannt.
Der Zugriff auf Daten des kritischen Abschnitts kann von der Anwesenheit dieser Daten im Hauptspeicher abhängen. Alle Zeilen, die für den kritischen Abschnitt erforderlich sind, werden vor Eintritt in den kritischen Abschnitt abgerufen und jegliche Zugriffsrechte oder Seitenfehlerproblem können erkannt werden, wenn die verriegelten Ladeoperationen oder die verriegelten Befehle "PREFETCHW° vor dem Eintritt in den kritischen Abschnitt ausgeführt werden. Wenn eine der Eingangsadressen einen Fehler annimmt, wird der nachfolgende „ACQUIRE“-Befehl zu einem Fehler führen. Nach dem Eintritt in den kritischen Abschnitt ruft der Prozessor einen Fehler in dem „ACQUIRE“-Befehl hervor, wenn ein Befehl eine Sonderbehandlung bewirkt, und der nachfolgend bedingte Strom führt den Programmablauf weg von dem kritischen Abschnitt.
Wenn der Decodierer des Prozessorkems 18 einen Interrupt annehmen muss, wird in einer Ausführungsform dafür gesorgt, dass der „ACQUIRE“-Befehl zu einem Fehler führt, wobei das Null-Bit gesetzt ist (beispielsweise RFLAGS.ZF) und der Interrupt wird beim „ACQUIRE“-Befehl genommen.
Zu beachten ist, dass in Ausführungsformen, in denen die Synchronisierverteileinheit 230 mit einer Nordbrückeneinrichtung innerhalb des Hypertransportnetzes verbunden ist, die Synchronisierverteileinheit 230 einer vorbestimmten und/oder reservierten Knotenkennung bzw. ID zugeordnet erhält, die keine andere Komponente aufweist. Diese Zuordnung kann zum Zeitpunkt des Hochlaufens mittels des BIOS beispielsweise durchgeführt werden. In den obigen Ausführungsformen kann der Zählwert als ein 64-Wert zurückgegeben werden, obwohl auch andere Werte möglich sind.
Wenn ein Prozessor oder Prozessorkem, der die fortschrittliche Synchronisiereinrichtung implementiert hat, einen atomaren Zugriff auf eine oder mehrere Cache-Zeilen anfordert, erscheint die Anforderung in Form eines kritischen Codierungsabschnitts. Beispielsweise kann, wie zuvor beschrieben ist, zur Sicherstellung der vollständigen Beendigung von Befehlen in einer atomaren Weise (wie sich dies für einen Betrachter von außen ergibt) ein kritischer Abschnitt die Verwendung von verriegelten MOV-Befehlen enthalten, woran sich ein „ACQUIRE“-Befehl und ein Freigabe-Befehl bzw. „RELEASE“-Befehl anschließt (Block 415). Folglich wird die Gruppe aus Adressen, die angefordert wird, im Hinblick auf gegenseitige Störungen überprüft. In einer Ausführungsform wird die Gruppe aus Adressen mit allen Adressen innerhalb des Adressenspeichers 232 verglichen (Block 420). In den zuvor beschriebenen Ausführungsformen bewirken die verriegelten MOV-Befehle, dass die Adressen markiert werden. Die Markierung veranlasst, dass die BIU 220 jede markierte Adresse in dem LLB 222 speichert. Der „ACQUIRE“-Befehl veranlasst die BIU 220, die gesamte Gruppe aus Adressen in dem LLB 222 zur Synchronisierverteileinheit 230 in Form eines nicht im Cache speicherbaren Schreibbefehls zu senden, der 64 Bytes an physikalischen Adressendaten beinhaltet. Die Synchronisierverteileinheit 230 vergleicht die Gruppe aus Adressen mit allen Adressen in dem Speicher 232.
Wenn es eine Übereinstimmung für eine Adresse gibt (Block 425), wird der mit der übereinstimmenden Adresse verknüpft Zählwert erhöht (Block 455) und der neu Zählwert wird an die BIU 220 als Teil einer Fehlerantwort auf die nicht im Cache speicherbaren Schreiboperation (Block 460) zurückgegeben, die 64 Bits an Antwortdaten enthält. Des weiteren verwirft die Synchronisierverteileinheit 230 die Gruppe aus Adressen bei einem Fehler. Die BIU 220 sendet den Fehler-Zählwert an das Register des anfordernden Prozessors/Kems, der ebenfalls Bedingungscodierungsflaggen setzen kann. Als Folge kann der anfordernde Prozessor/Kem den Zählwert verwenden, um eine weitere Gruppe aus Speicherressourcen in nachfolgenden Operationen auszuwählen (Block 465) und um eine gegenseitige Störung in seinen nachfolgenden Synchronisierversuch zu vermeiden. Der Funktionsablauf geht dann weiter wie zuvor im Block 415 beschrieben ist.
Es sei auf Block 425 verwiesen; wenn es keine übereinstimmende Adresse im Speicher 232 gibt, gibt die Synchronisierverteileinheit 230 einen Zählwert für ein erfolgreiches Ergebnis (beispielsweise Null) an die BIU 220 zurück (Block 430). Des weiteren speichert die Synchronisierverteileinheit 230 die Gruppe aus Adressen in einem Eintrag des Speichers 232 (Block 435). Die BIU 220 sendet den Zählwert entsprechend dem erfolgreichen Ergebnis an das anfordernde Prozessor/Kem-Register, das in dem „ACQUIRE“-Befehl spezifiziert ist. Der anfordernde Prozessor/Kem kann die Daten in den angeforderten Adressen manipulieren oder anderweitig darauf operieren (Block 440). Wenn die Operation nicht abgeschlossen ist (Block 445), sendet die BIU 220 keine Nachricht über die Vollständigkeit an die Synchronisierverteileinheit 230. Wenn die Operation in den kritischen Abschnitt abgeschlossen ist, etwa, wenn der „RELEASE“-Befehl bzw. Freigabe-Befehl ausgeführt ist, sendet die BIU 220 eine Nachricht über die Vollständigkeit an die Synchronisierverteileinheit 230. Bei Empfang der Nachricht über die Vollständigkeit gibt die Synchronisierverteileinheit 230 die entsprechenden Adressen aus dem Speicher 232 frei, wodurch diese Adressen an das System zur Verwendung an einen weiteren Prozessor/Kem freigegeben werden (Block 450). Ferner aktualisiert die Lade/Schreibeinheit 270 den Datencache-Speicher für alle Befehle in diesem kritischen Abschnitt, die abgeschlossen sind.
Wie zuvor beschrieben ist, wenn eine Kohärenzungültigkeitsanfrage bzw. Sondierung eine Adresse in dem kritischen Abschnitt während des Abarbeitens des kritischen Abschnitts trifft, kann die Antwort auf diese Sondierungsanfrage von dem Zustand der Verarbeitung dese kritischen Abschnitts abhängen (d. h. ob die Cache-Zeilen beansprucht wurden oder nicht). 4 ist ein Flussdiagramm, das die Funktionsweise der Ausführungsformen der 1 und 2 beschreibt, wenn eine Kohärenzungültigkeitserklärungssondierungsanfrage empfangen wird.
Es sei gemeinsam auf die 1 bis 4 verwiesen; zu Beginn wird im Block 505 aus 4 eine Sondierungsanfrage mit Ungültigkeitserklärung empfangen und diese trifft eine Adresse in einem kritischen Abschnitt in der Lade/Schreibeinheit 270. Wenn die angeforderten Zeilen erfolgreich beansprucht wurden (Block 510) (beispielsweise wird eine Kohärenzungültigkeitssondierungsanfrage empfangen, nachdem die Synchronisierverteileinheit 230 einen Erfolg anzeigenden Zählwert bereitgestellt hat, und die Gruppe aus Adressen in dem Speicher 232 gespeichert hat), sendet die BIU 220 eine „Fehler für Anforderungseinheit“ Antwort als eine Reaktion auf die Sondierungsanfrage (Block 515). In dem anfordernden Prozessorkern sollte diese „Fehler für Anforderungseinheit“-Antwort einen Fehler des „ACQUIERE“-Befehls hervorrufen, wenn der Prozessorkem bei der Bearbeitung eines kritischen Abschnitts war, oder es sollte ein erneutes Versuchen der Adressen bewirken, wenn dies nicht der Fall ist.
Es sei wieder auf Block 510 verwiesen, wenn die angeforderten Zeilen erhalten wurden, kann der Prozessorkem einen Zählwert, der von der Synchronisierverteileinheit 230 empfangen wird, ignorieren (Block 520). Die Lade/Schreibeinheit 270 benachrichtigt die Befehlsausgabe- und Steuereinheit 257, dass es einen Sondierungsanfragetreffer gibt (beispielsweise Prb-Treffer-Signal) und das ein „Fehler nach ACQUIRE“) auftritt. Somit wird der „ACQUIRE-Befehl veranlasst, einen Fehler zu folgen, wie dies zuvor beschrieben ist. Für einen ausstehenden Beobachter führt der „ACQUIRE“-Befehl einfach zu einem Fehler.
Zu beachten ist, dass das zuvor beschriebene Computersystem 100 einen Verarbeitungsknoten aufweist, die einen oder mehrere Prozessorkerne enthalten, hierin auch berücksichtigt ist, dass in anderen Ausführungsformen die fortschrittliche Synchronisiereinrichtung und die zugehörige Hardware unter Anwendung von eigenständigen Prozessoren oder einer Kombination aus Verarbeitungsknoten und einzelnen Prozessoren bei Bedarf eingerichtet werden können. In derartigen Ausführungsformen enthält jeder einzelne Prozessor die gesamte zuvor beschriebene Hardware oder einen Teil davon und ist in der Lage, die Befehle auszuführen, die Teil der fortschrittlichen Synchronisiereinrichtung sind. Die Begriffe „Prozessor und Prozessorkem können in gewisser Weise anonym verwendet werden, mit Ausnahme, wenn spezielle Unterschiede verwiesen ist.
Codierungen und/oder Daten, die die in den vorhergehenden Abschnitten beschriebene Funktionen vermitteln, können auch auf einem Computer zugreifbaren/lesbaren Medium vorgesehen werden. Allgemein gesagt, ein computerzugreifbares/lesbares Medium enthält ein beliebiges Medium, auf das ein Computer während der Verwendung zugreifen kann, um damit Befehle und/oder Daten für den Computer bereitzustellen. Beispielsweise gehören zu einem Medium, auf das ein Computer zugreifen kann, Speichermedien, etwa magnetische oder optische Medien, beispielsweise Disketten (in Form von festmontierten oder entfembaren), CD-ROM oder DVD-ROM, CD-R, CD-RW, DVD-R, DVD-RW, flüchtige und nichtflüchtige Speichermedien (RAM), beispielsweise synchrone dynamische RAM (SDRAM), RAMBUS DRAM (RDRAM), statische RAM (SRAM), etc., ROM; Flash-Speicher, nichtflüchtige Speicher (beispielsweise Flash-Speicher), über die auf eine periphere Schnittstelle zugegriffen werden kann, etwa einer universellen seriellen Bus- (USB) Schnittstelle, etc. sowie Medien, auf die über Übertragungsmedien oder Signale, etwa elektrische, elektromagnetische oder digitale Signale zugegriffen werden kann, die über ein Kommunikationsmedium, etwa ein Netzwerk und/oder eine drahtlose Verbindung übertragen werden.
Obwohl die Ausführungsformen in großen Detail beschrieben sind, können zahlreiche Variationen und Modifizierungen für den Fachmann ersichtlich werden, sobald er die obige Offenbarung vollständig dotiert hat. Es ist beabsichtigt, dass die folgenden Patentansprüche so interpretiert werden, dass alle derartigen Variationen und Modifizierungen mit erfasst werden.
Industrielle Anwendbarkeit:
- Diese Erfindung ist allgemein auf Mikroprozessoren anwendbar.
Claims (10)
- Verfahren zum Bereitstellen einer selbstinitiierten Synchronisierung in einem Computersystem, das mehrere Prozessoren umfasst, die mit mehreren Speicherressourcen (314A, 314B, 314C, 314D) verbunden sind, mit den Schritten: Senden einer Anforderung für einen exklusiven Zugriff auf eine gegebene Speicherressource der mehreren Speicherressourcen (314A, 314B, 314C, 314D) von einem Prozessor (18A, 18B) an eine Verteileinheit (230), wobei die Anforderung eine oder mehrere Adressen, die mit der gegebenen Speicherressource verknüpft sind, enthält; Vergleichen durch die Verteileinheit (230) von jeder der einen oder der mehreren Adressen mit jeder Adresse mehrerer Gruppen aus Adressen, wobei jede Adresse der mehreren Gruppen aus Adressen einer jeweiligen Speicherressource entspricht, für die einer Anforderungseinheit exklusiver Zugriff gewährt worden ist; und in Reaktion darauf, dass eine Adresse der einen oder mehreren Adressen mit einer Adresse in den mehreren Gruppen aus Adressen übereinstimmt, Zurückgeben durch die Verteileinheit (230) eines Zählwertes, der mit der übereinstimmenden Adresse verknüpft ist, an den Prozessor, wobei der Zählwert eine Anzahl an Anforderungseinheiten, die im Hinblick auf die übereinstimmende Adresse in Konkurrenz miteinander stehen, kennzeichnet; wobei in Reaktion auf das Empfangen eines ein nicht erfolgreiches Ergebnis anzeigenden Zählwertes, der angibt, dass eine oder mehrere Anforderungseinheiten im Hinblick auf die übereinstimmende Adresse miteinander in Konkurrenz stehen, Software auf dem Prozessor laufen gelassen wird, die unter Verwendung des Zählwerts eine andere Speicherressource der mehreren Speicherressourcen (314A, 314B, 314C, 314D) in nachfolgenden Anforderungen auswählt, um so selbstinitiiert eine Störung bei einem weiteren Synchronisierungsversuch zu vermeiden.
- Verfahren nach
Anspruch 1 , das ferner umfasst: Zurückgeben eines Zählwerts mit erfolgreichem Ergebnis mit dem Wert Null in Reaktion darauf, dass keine Adresse der einen oder mehreren Adressen mit einer Adresse in den mehreren Gruppen aus Adressen übereinstimmt. - Verfahren nach
Anspruch 1 , das ferner umfasst: Verwenden des Zählwertes um zu bestimmen, ob ein anderer Prozessor exklusiven Zugriff auf eine andere Speicherressource besitzt. - Verfahren nach
Anspruch 1 , wobei Anfordern eines exklusiven Zugriffs umfasst: Ausführen einer oder mehrerer verriegelter Speicherreferenzbefehle mit einem „LOCK“-Präfix, wobei das „LOCK“-Präfix bewirkt, dass Adressen, die mit den verriegelten Speicherreferenzbefehlen verknüpft sind, mit einem oder mehreren Indikationsbits während der Befehlsdecodierung markiert werden. - Verfahren nach
Anspruch 4 , wobei Anfordern des exklusiven Zugriffs ferner umfasst: Ausführen eines „ACQUIRE”-Befehls, der bewirkt, dass jede der einen oder mehreren Adressen für die vorgegebene Speicherressource mit jeder Adresse der mehreren Gruppen aus Adressen verglichen wird. - Verfahren nach
Anspruch 4 , das ferner umfasst: Speichern der mit den verriegelten Speicherreferenzbefehlen verknüpften Adressen in einem Prozessorpuffer und in Reaktion auf das Ausführen des „ACQUIRE“-Befehls, Senden aller Adressen in dem Prozessorpuffer, so dass diese verglichen werden. - Computersystem (100) mit: einem oder mehreren Prozessoren (18A, 18B), die miteinander und mehreren Speichern (314A bis 314D) verbunden sind, wobei jeder der Prozessoren ausgebildet ist, Befehle zum Senden einer Anforderung für einen exklusiven Zugriff auf eine gegebene Speicherressource der mehreren Speicherressourcen (314A, 314B, 314C, 314D) an zumindest einer in der Anforderung enthaltenen Adresse auszuführen; und einer Synchronisierverteileinheit (230), die ausgebildet ist, die von einem Prozessor gesendete Anforderung zu empfangen und jede der einen oder mehreren Adressen mit jeder Adresse von mehreren Gruppen aus Adressen zu vergleichen, wobei jede Adresse der mehreren Gruppen aus Adressen einer jeweiligen Speicherressource entspricht, für die einer Anforderungseinheit exklusiver Zugriff gewährt ist; wobei die Verteileinheit ausgebildet ist, einen Zählwert (233), der mit der Gruppe verknüpft ist, die die übereinstimmende Adresse enthält, zu einem gegebenen anfordernden Prozessor in Reaktion darauf zurückzugeben, dass eine Adresse der einen oder mehreren Adressen mit einer Adresse in den mehreren Gruppen aus Adressen übereinstimmt, wobei der Zählwert für eine Anzahl an Anforderungseinheiten, die im Hinblick auf die übereinstimmende Adresse miteinander in Konkurrenz stehen, kennzeichnend ist; und wobei in Reaktion auf das Empfangen eines ein nicht erfolgreiches Ergebnis anzeigenden Zählwerts, der eine oder mehrere Anforderungseinheiten angibt, die im Hinblick auf die übereinstimmende Adresse in Konkurrenz stehen, der Prozessor ausgebildet ist, eine andere Speicherressource der mehreren Speicherressourcen (314A, 314B, 314C, 314D) in nachfolgenden Anforderungen auszuwählen, um so selbstinitiiert eine Störung bei einem weiteren Synchronisierungsversuch zu vermeiden.
- Computersystem nach
Anspruch 7 , wobei die Verteileinheit ferner ausgebildet ist, einen ein erfolgreiches Ergebnis anzeigenden Zählwert von 0 in Reaktion darauf zurückzugeben, dass keine Adresse der einen oder mehreren Adressen mit einer Adresse in den mehreren Gruppen aus Adressen übereinstimmt. - Computersystem nach
Anspruch 7 , wobei jeder der einen oder mehreren Prozessoren ferner ausgebildet ist, den Zählwert zu verwenden, um zu bestimmen, ob ein anderer Prozessor exklusiven Zugriff auf eine andere Speicherressource besitzt. - Computersystem nach
Anspruch 7 , wobei jeder des einen oder der mehreren Prozessoren ferner ausgebildet ist: einen oder mehrere Speicherreferenzbefehle mit einem „LOCK“-Präfix auszuführen, wobei das „LOCK“-Präfix bewirkt, dass mit den verriegelten Speicherreferenzbefehlen verknüpfte Adressen mit einer oder mehreren Indikationen während der Befehlsdecodierung markiert werden; einen „ACQUIRE“-Befehl auszuführen, der bewirkt, dass jede der einen oder der mehreren Adressen der vorgegebenen Speicherressource mit jeder Adressen der mehreren Gruppen aus Adressen verglichen wird.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US71054805P | 2005-08-23 | 2005-08-23 | |
US60/710,548 | 2005-08-23 | ||
PCT/US2006/033192 WO2007025112A1 (en) | 2005-08-23 | 2006-08-23 | Method for proactive synchronization within a computer system |
Publications (2)
Publication Number | Publication Date |
---|---|
DE112006002237T5 DE112006002237T5 (de) | 2008-06-19 |
DE112006002237B4 true DE112006002237B4 (de) | 2023-04-06 |
Family
ID=37607137
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE112006002237.7T Active DE112006002237B4 (de) | 2005-08-23 | 2006-08-23 | Verfahren zur selbstinitiierenden Synchronisierung in einem Computersystem |
Country Status (7)
Country | Link |
---|---|
US (6) | US7627722B2 (de) |
JP (1) | JP5103396B2 (de) |
KR (1) | KR101369441B1 (de) |
CN (1) | CN101297270A (de) |
DE (1) | DE112006002237B4 (de) |
GB (1) | GB2445294B (de) |
WO (1) | WO2007025112A1 (de) |
Families Citing this family (55)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7627722B2 (en) * | 2005-08-23 | 2009-12-01 | Advanced Micro Devices, Inc. | Method for denying probes during proactive synchronization within a computer system |
US7681020B2 (en) * | 2007-04-18 | 2010-03-16 | International Business Machines Corporation | Context switching and synchronization |
US20090125519A1 (en) * | 2007-11-13 | 2009-05-14 | Intel Corporation | Device, system, and method for regulating software lock elision mechanisms |
US8108610B1 (en) * | 2008-10-21 | 2012-01-31 | Nvidia Corporation | Cache-based control of atomic operations in conjunction with an external ALU block |
US8135926B1 (en) * | 2008-10-21 | 2012-03-13 | Nvidia Corporation | Cache-based control of atomic operations in conjunction with an external ALU block |
US8108557B2 (en) * | 2009-01-22 | 2012-01-31 | Hewlett-Packard Development Company, L.P. | System and method for measuring clock skew on a network |
US8316368B2 (en) * | 2009-02-05 | 2012-11-20 | Honeywell International Inc. | Safe partition scheduling on multi-core processors |
US9727508B2 (en) * | 2009-04-27 | 2017-08-08 | Intel Corporation | Address learning and aging for network bridging in a network processor |
US9384063B2 (en) * | 2009-06-18 | 2016-07-05 | Microsoft Technology Licensing, Llc | Eliding synchronization in a concurrent data structure |
US20120117317A1 (en) | 2009-08-20 | 2012-05-10 | Rambus Inc. | Atomic memory device |
US8307198B2 (en) * | 2009-11-24 | 2012-11-06 | Advanced Micro Devices, Inc. | Distributed multi-core memory initialization |
US20110208921A1 (en) * | 2010-02-19 | 2011-08-25 | Pohlack Martin T | Inverted default semantics for in-speculative-region memory accesses |
US9122476B2 (en) | 2010-12-07 | 2015-09-01 | Advanced Micro Devices, Inc. | Programmable atomic memory using hardware validation agent |
US8793471B2 (en) * | 2010-12-07 | 2014-07-29 | Advanced Micro Devices, Inc. | Atomic program verification |
US8788794B2 (en) * | 2010-12-07 | 2014-07-22 | Advanced Micro Devices, Inc. | Programmable atomic memory using stored atomic procedures |
KR20120101761A (ko) * | 2011-03-07 | 2012-09-17 | 삼성전자주식회사 | 캐시 페이즈 검출기 및 프로세서 코어 |
US10061618B2 (en) * | 2011-06-16 | 2018-08-28 | Imagination Technologies Limited | Scheduling heterogenous computation on multithreaded processors |
US9037838B1 (en) * | 2011-09-30 | 2015-05-19 | Emc Corporation | Multiprocessor messaging system |
TWI454922B (zh) * | 2011-12-19 | 2014-10-01 | Phison Electronics Corp | 記憶體儲存裝置及其記憶體控制器與資料寫入方法 |
CN104025027B (zh) * | 2011-12-30 | 2017-08-15 | 英特尔公司 | 结构访问处理器、方法、系统和指令 |
US9430391B2 (en) * | 2012-03-29 | 2016-08-30 | Advanced Micro Devices, Inc. | Managing coherent memory between an accelerated processing device and a central processing unit |
US9086957B2 (en) | 2012-08-02 | 2015-07-21 | International Business Machines Corporation | Requesting a memory space by a memory controller |
CN103020003A (zh) * | 2012-12-31 | 2013-04-03 | 哈尔滨工业大学 | 面向多核程序确定性重演的内存竞争记录装置及其控制方法 |
KR102020358B1 (ko) * | 2013-03-14 | 2019-11-05 | 삼성전자 주식회사 | 단말 및 그 단말에서 애플리케이션 동기화 방법 |
US9146885B2 (en) * | 2013-05-17 | 2015-09-29 | Analog Devices, Inc. | Parallel atomic increment |
US10229043B2 (en) | 2013-07-23 | 2019-03-12 | Intel Business Machines Corporation | Requesting memory spaces and resources using a memory controller |
US9256553B2 (en) * | 2014-03-26 | 2016-02-09 | International Business Machines Corporation | Transactional processing based upon run-time storage values |
US9262343B2 (en) * | 2014-03-26 | 2016-02-16 | International Business Machines Corporation | Transactional processing based upon run-time conditions |
CN104035888B (zh) * | 2014-06-11 | 2017-08-04 | 华为技术有限公司 | 一种缓存数据的方法及存储设备 |
US9710381B2 (en) | 2014-06-18 | 2017-07-18 | International Business Machines Corporation | Method and apparatus for cache memory data processing |
US9740614B2 (en) * | 2014-06-27 | 2017-08-22 | International Business Machines Corporation | Processor directly storing address range of co-processor memory accesses in a transactional memory where co-processor supplements functions of the processor |
US9619386B2 (en) | 2015-01-29 | 2017-04-11 | Kabushiki Kaisha Toshiba | Synchronization variable monitoring device, processor, and semiconductor apparatus |
US9513960B1 (en) | 2015-09-22 | 2016-12-06 | International Business Machines Corporation | Inducing transactional aborts in other processing threads |
US9916179B2 (en) | 2015-10-29 | 2018-03-13 | International Business Machines Corporation | Interprocessor memory status communication |
US9760397B2 (en) | 2015-10-29 | 2017-09-12 | International Business Machines Corporation | Interprocessor memory status communication |
US10261827B2 (en) | 2015-10-29 | 2019-04-16 | International Business Machines Corporation | Interprocessor memory status communication |
US9563467B1 (en) | 2015-10-29 | 2017-02-07 | International Business Machines Corporation | Interprocessor memory status communication |
US9772874B2 (en) * | 2016-01-29 | 2017-09-26 | International Business Machines Corporation | Prioritization of transactions based on execution by transactional core with super core indicator |
US20170300427A1 (en) * | 2016-04-18 | 2017-10-19 | Mediatek Inc. | Multi-processor system with cache sharing and associated cache sharing method |
RU2623806C1 (ru) * | 2016-06-07 | 2017-06-29 | Акционерное общество Научно-производственный центр "Электронные вычислительно-информационные системы" (АО НПЦ "ЭЛВИС") | Способ и устройство обработки стереоизображений |
US10944694B2 (en) * | 2016-12-06 | 2021-03-09 | Hewlett Packard Enterprise Development Lp | Predictive arbitration circuit |
US10452573B2 (en) | 2016-12-06 | 2019-10-22 | Hewlett Packard Enterprise Development Lp | Scripted arbitration circuit |
US10237198B2 (en) | 2016-12-06 | 2019-03-19 | Hewlett Packard Enterprise Development Lp | Shared-credit arbitration circuit |
US10721185B2 (en) | 2016-12-06 | 2020-07-21 | Hewlett Packard Enterprise Development Lp | Age-based arbitration circuit |
US11157407B2 (en) | 2016-12-15 | 2021-10-26 | Optimum Semiconductor Technologies Inc. | Implementing atomic primitives using cache line locking |
US10223186B2 (en) * | 2017-02-01 | 2019-03-05 | International Business Machines Corporation | Coherency error detection and reporting in a processor |
US10776282B2 (en) | 2017-12-15 | 2020-09-15 | Advanced Micro Devices, Inc. | Home agent based cache transfer acceleration scheme |
US10693811B2 (en) | 2018-09-28 | 2020-06-23 | Hewlett Packard Enterprise Development Lp | Age class based arbitration |
US10796399B2 (en) | 2018-12-03 | 2020-10-06 | Advanced Micro Devices, Inc. | Pixel wait synchronization |
CN109933543B (zh) * | 2019-03-11 | 2022-03-18 | 珠海市杰理科技股份有限公司 | Cache的数据锁定方法、装置和计算机设备 |
CN110490581B (zh) * | 2019-07-18 | 2022-09-30 | 拉货宝网络科技有限责任公司 | 一种分布式系统临界数据资源更新方法及系统 |
US20220100504A1 (en) * | 2020-09-25 | 2022-03-31 | Advanced Micro Devices, Inc. | Shared data fabric processing client reset system and method |
US11740973B2 (en) * | 2020-11-23 | 2023-08-29 | Cadence Design Systems, Inc. | Instruction error handling |
US20230019241A1 (en) * | 2021-07-19 | 2023-01-19 | EMC IP Holding Company LLC | Selecting surviving storage node based on environmental conditions |
US11892972B2 (en) * | 2021-09-08 | 2024-02-06 | Arm Limited | Synchronization mechanisms for a multi-core processor using wait commands having either a blocking or a non-blocking state |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4574350A (en) | 1982-05-19 | 1986-03-04 | At&T Bell Laboratories | Shared resource locking apparatus |
US4725946A (en) | 1985-06-27 | 1988-02-16 | Honeywell Information Systems Inc. | P and V instructions for semaphore architecture in a multiprogramming/multiprocessing environment |
Family Cites Families (42)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5142676A (en) * | 1988-12-28 | 1992-08-25 | Gte Laboratories Incorporated | Separate content addressable memories for storing locked segment addresses and locking processor identifications for controlling access to shared memory |
CA2045791A1 (en) * | 1990-06-29 | 1991-12-30 | Richard Lee Sites | Branch performance in high speed processor |
US5285528A (en) * | 1991-02-22 | 1994-02-08 | International Business Machines Corporation | Data structures and algorithms for managing lock states of addressable element ranges |
US5613139A (en) * | 1994-05-11 | 1997-03-18 | International Business Machines Corporation | Hardware implemented locking mechanism for handling both single and plural lock requests in a lock message |
JP4086259B2 (ja) * | 1995-08-04 | 2008-05-14 | 株式会社東芝 | 通信システム |
US5968157A (en) * | 1997-01-23 | 1999-10-19 | Sun Microsystems, Inc. | Locking of computer resources |
US6343338B1 (en) * | 1997-04-01 | 2002-01-29 | Microsoft Corporation | System and method for synchronizing disparate processing modes and for controlling access to shared resources |
US6219751B1 (en) * | 1998-04-28 | 2001-04-17 | International Business Machines Corporation | Device level coordination of access operations among multiple raid control units |
US6182186B1 (en) * | 1998-06-30 | 2001-01-30 | Sun Microsystems, Inc. | Method and apparatus that utilizes lock states to lock resources |
US6389519B1 (en) * | 1999-07-19 | 2002-05-14 | Ati International Srl | Method and apparatus for providing probe based bus locking and address locking |
US6651088B1 (en) * | 1999-07-20 | 2003-11-18 | Hewlett-Packard Development Company, L.P. | Method for reducing coherent misses in shared-memory multiprocessors utilizing lock-binding prefetchs |
KR100331565B1 (ko) * | 1999-12-17 | 2002-04-06 | 윤종용 | 매트릭스 연산 장치 및 매트릭스 연산기능을 갖는 디지털신호처리 장치 |
US6668308B2 (en) * | 2000-06-10 | 2003-12-23 | Hewlett-Packard Development Company, L.P. | Scalable architecture based on single-chip multiprocessing |
US6604162B1 (en) * | 2000-06-28 | 2003-08-05 | Intel Corporation | Snoop stall reduction on a microprocessor external bus |
US6678772B2 (en) * | 2000-12-19 | 2004-01-13 | International Businesss Machines Corporation | Adaptive reader-writer lock |
US6976158B2 (en) * | 2001-06-01 | 2005-12-13 | Microchip Technology Incorporated | Repeat instruction with interrupt |
US7325064B2 (en) * | 2001-07-17 | 2008-01-29 | International Business Machines Corporation | Distributed locking protocol with asynchronous token prefetch and relinquish |
US6868476B2 (en) * | 2001-08-27 | 2005-03-15 | Intel Corporation | Software controlled content addressable memory in a general purpose execution datapath |
US20060218556A1 (en) * | 2001-09-28 | 2006-09-28 | Nemirovsky Mario D | Mechanism for managing resource locking in a multi-threaded environment |
US7120762B2 (en) * | 2001-10-19 | 2006-10-10 | Wisconsin Alumni Research Foundation | Concurrent execution of critical sections by eliding ownership of locks |
US6986005B2 (en) * | 2001-12-31 | 2006-01-10 | Hewlett-Packard Development Company, L.P. | Low latency lock for multiprocessor computer system |
US7089371B2 (en) * | 2002-02-12 | 2006-08-08 | Ip-First, Llc | Microprocessor apparatus and method for prefetch, allocation, and initialization of a block of cache lines from memory |
US6721816B1 (en) * | 2002-02-27 | 2004-04-13 | Advanced Micro Devices, Inc. | Selecting independently of tag values a given command belonging to a second virtual channel and having a flag set among commands belonging to a posted virtual and the second virtual channels |
US7685583B2 (en) * | 2002-07-16 | 2010-03-23 | Sun Microsystems, Inc. | Obstruction-free mechanism for atomic update of multiple non-contiguous locations in shared memory |
US7814488B1 (en) * | 2002-09-24 | 2010-10-12 | Oracle America, Inc. | Quickly reacquirable locks |
US20040068607A1 (en) * | 2002-10-07 | 2004-04-08 | Narad Charles E. | Locking memory locations |
US7117481B1 (en) * | 2002-11-06 | 2006-10-03 | Vmware, Inc. | Composite lock for computer systems with multiple domains |
US7290105B1 (en) * | 2002-12-16 | 2007-10-30 | Cisco Technology, Inc. | Zero overhead resource locks with attributes |
US7162589B2 (en) * | 2002-12-16 | 2007-01-09 | Newisys, Inc. | Methods and apparatus for canceling a memory data fetch |
US7080209B2 (en) * | 2002-12-24 | 2006-07-18 | Intel Corporation | Method and apparatus for processing a load-lock instruction using a relaxed lock protocol |
US7269717B2 (en) * | 2003-02-13 | 2007-09-11 | Sun Microsystems, Inc. | Method for reducing lock manipulation overhead during access to critical code sections |
US20040268046A1 (en) * | 2003-06-27 | 2004-12-30 | Spencer Andrew M | Nonvolatile buffered memory interface |
US20050120185A1 (en) * | 2003-12-01 | 2005-06-02 | Sony Computer Entertainment Inc. | Methods and apparatus for efficient multi-tasking |
US8332483B2 (en) * | 2003-12-15 | 2012-12-11 | International Business Machines Corporation | Apparatus, system, and method for autonomic control of grid system resources |
US7210019B2 (en) * | 2004-03-05 | 2007-04-24 | Intel Corporation | Exclusive access for logical blocks |
US20050283783A1 (en) * | 2004-06-22 | 2005-12-22 | Desota Donald R | Method for optimizing pipeline use in a multiprocessing system |
JP4287799B2 (ja) * | 2004-07-29 | 2009-07-01 | 富士通株式会社 | プロセッサシステムおよびスレッド切り替え制御方法 |
US7406625B2 (en) * | 2004-08-17 | 2008-07-29 | International Business Machines Corporation | Protecting a code range in a program from breakpoints |
US20060095685A1 (en) * | 2004-11-03 | 2006-05-04 | Bonola Thomas J | System and method to coordinate access to a sharable data structure using deferred cycles |
US7454570B2 (en) * | 2004-12-07 | 2008-11-18 | International Business Machines Corporation | Efficient memory update process for on-the-fly instruction translation for well behaved applications executing on a weakly-ordered processor |
US7797704B2 (en) * | 2005-03-30 | 2010-09-14 | Hewlett-Packard Development Company, L.P. | System and method for performing work by one of plural threads using a lockable resource |
US7627722B2 (en) * | 2005-08-23 | 2009-12-01 | Advanced Micro Devices, Inc. | Method for denying probes during proactive synchronization within a computer system |
-
2006
- 2006-08-23 US US11/508,493 patent/US7627722B2/en active Active
- 2006-08-23 GB GB0802809A patent/GB2445294B/en active Active
- 2006-08-23 WO PCT/US2006/033192 patent/WO2007025112A1/en active Application Filing
- 2006-08-23 US US11/508,491 patent/US7552290B2/en active Active
- 2006-08-23 US US11/508,492 patent/US7606985B2/en active Active
- 2006-08-23 JP JP2008528175A patent/JP5103396B2/ja active Active
- 2006-08-23 CN CNA2006800395372A patent/CN101297270A/zh active Pending
- 2006-08-23 KR KR1020087007115A patent/KR101369441B1/ko active IP Right Grant
- 2006-08-23 US US11/508,647 patent/US20070050563A1/en not_active Abandoned
- 2006-08-23 US US11/508,494 patent/US20070050561A1/en not_active Abandoned
- 2006-08-23 US US11/508,646 patent/US7636819B2/en active Active
- 2006-08-23 DE DE112006002237.7T patent/DE112006002237B4/de active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4574350A (en) | 1982-05-19 | 1986-03-04 | At&T Bell Laboratories | Shared resource locking apparatus |
US4725946A (en) | 1985-06-27 | 1988-02-16 | Honeywell Information Systems Inc. | P and V instructions for semaphore architecture in a multiprogramming/multiprocessing environment |
Also Published As
Publication number | Publication date |
---|---|
US20070050563A1 (en) | 2007-03-01 |
US20070067529A1 (en) | 2007-03-22 |
US7636819B2 (en) | 2009-12-22 |
US20070050561A1 (en) | 2007-03-01 |
US7552290B2 (en) | 2009-06-23 |
CN101297270A (zh) | 2008-10-29 |
GB2445294A (en) | 2008-07-02 |
GB2445294B (en) | 2009-01-21 |
KR101369441B1 (ko) | 2014-03-04 |
WO2007025112A1 (en) | 2007-03-01 |
US20070050562A1 (en) | 2007-03-01 |
JP2009506436A (ja) | 2009-02-12 |
DE112006002237T5 (de) | 2008-06-19 |
GB0802809D0 (en) | 2008-03-26 |
US7627722B2 (en) | 2009-12-01 |
US20070050559A1 (en) | 2007-03-01 |
JP5103396B2 (ja) | 2012-12-19 |
KR20080038435A (ko) | 2008-05-06 |
US7606985B2 (en) | 2009-10-20 |
US20070050560A1 (en) | 2007-03-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE112006002237B4 (de) | Verfahren zur selbstinitiierenden Synchronisierung in einem Computersystem | |
DE112007000812B4 (de) | Vorrichtung mit einer speichereinheit und drei logiken, verfahren zum durchführen der verfahrensschritte der vorrichtung undsystem mit einem speicher und einem prozessor zur bereitstellung eines effizienten mechanismus‘ für transaktionalspeicherausführungen in out-of-order-prozessoren | |
DE112010003492B4 (de) | Transaktionsspeichersystem mit wirksamerZwischenspeicherunterstützung | |
DE69908193T2 (de) | Ausführung von speicher- und ladeoperationen mittels einer linkdatei | |
DE112013002069B4 (de) | Hohes Leistungsverbindungskohärenz-Protokoll | |
DE112004002848B4 (de) | Mikroprozessor und Verfahren zum Verifizieren einer Speicherdatei in einem derartigen Mikroprozessor | |
DE112005003874B3 (de) | Transaktionsgestützter Verarbeitungsbetrieb mit gemeinsam genutzten Daten in einer Multiprozessorumgebung | |
DE102018000886A1 (de) | Virtuelle Maschinenkommunikation auf Hardware-Basis | |
DE60009151T2 (de) | Vorhersage von datenbeförderung von speicher- zum ladebefehl mit untrainierung | |
DE112007001171T5 (de) | Verfahren für virtualisierten Transaktionsspeicher bei globalem Überlauf | |
DE112010004322T5 (de) | Vorhersagen und Vermeiden von Operand-Speichervorgang-Vergleich-Gefahren in Mikroprozessoren mit abweichender Reihenfolge | |
DE102016219651A1 (de) | Für Vorabzugriff unempfindlicher transaktionsgebundener Speicher | |
DE112010004963T5 (de) | Synchronisieren von SIMD Vektoren | |
DE102014003399A1 (de) | Systeme und Verfahren zur Implementierung transaktionalen Speichers | |
DE112004001854T5 (de) | System und Verfahren zur Handhabung von Sonderinstruktionen in einem Prozessor auf Grundlage eines Cache-Speichers mit Ablaufverfolgung | |
DE19506734A1 (de) | Computersystem und Verfahren zum Aufrechterhalten der Speicherkonsistenz in einer Busanforderungswarteschlange | |
DE112013003079T5 (de) | Anweisungen für Transaktionsbeginn/-ende | |
DE112013002040T5 (de) | Transaktionsabbruchverarbeitung | |
DE112010004971T5 (de) | Ein System, Verfahren und eine Vorrichtung für einen Cache-Flush eines Seitenbereichs und TLB Invalidierung eines Bereichs von Einträgen | |
DE102014003799A1 (de) | Systeme und Verfahren zur Übertragungseliminierung mit Bypass-Mehrfachinstanziierungstabelle | |
DE102018002525A1 (de) | Hybridatomaritätsunterstützung für einen binärübersetzungsbasierten mikroprozessor | |
DE102018001537A1 (de) | System, vorrichtung und verfahren zum selektiven freigeben einer instruktionshandhabung auf lokalitäts-basis | |
DE112016007516T5 (de) | Vorrichtungen und verfahren für eine prozessorarchitektur | |
DE112016005863T5 (de) | Minimierung von Snoop-Verkehr lokal und über Kerne auf einem Chip-Mehrkern-Fabric | |
DE102016006399A1 (de) | Hardwarevorrichtungen und verfahren zum durchführen von transaktionaler energieverwaltung |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
OP8 | Request for examination as to paragraph 44 patent law | ||
R018 | Grant decision by examination section/examining division | ||
R020 | Patent grant now final |