DE112006002237B4 - Verfahren zur selbstinitiierenden Synchronisierung in einem Computersystem - Google Patents

Verfahren zur selbstinitiierenden Synchronisierung in einem Computersystem Download PDF

Info

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
Application number
DE112006002237.7T
Other languages
English (en)
Other versions
DE112006002237T5 (de
Inventor
Mitchell K. Alsup
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Advanced Micro Devices Inc
Original Assignee
Advanced Micro Devices Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Advanced Micro Devices Inc filed Critical Advanced Micro Devices Inc
Publication of DE112006002237T5 publication Critical patent/DE112006002237T5/de
Application granted granted Critical
Publication of DE112006002237B4 publication Critical patent/DE112006002237B4/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/526Mutual exclusion algorithms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/04Addressing variable-length words or parts of words
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0831Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/126Replacement control using replacement algorithms with special data handling, e.g. priority of data or instructions, handling errors or pinning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30047Prefetch instructions; cache control instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores

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 aus 1 gezeigt sind.
    • 3 ist ein Flussdiagramm, das die Funktion einer Ausführungsform des in 1 und 2 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 in 1 und 2 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 der 1 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 in 2 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 aus 1 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: LOCK MOVx reg [ B + I*s + DISP ] .
    Figure DE112006002237B4_0001
    Insbesondere wird ein regulärer Speicherlesebefehl zu einem speziellen Befehl gemacht, indem das LOCK-Präfix hinzugefügt wird. Dies veranlasst die BIU 220, die zugehörige markierte physikalische Adresse in dem LLB 222 zu sammeln, wenn die Adresse durch den L1-Cache-Speicher (und TLB 206) geht. Ferner wird die Speicherzugriffsstärke verringert, um auf die Zeile (im Falle eines Cache-Fehltreffers) ohne Schreiberlaubnis (ReadS, not ReadM oder Read) zuzugreifen. Der Ladebefehl wird nicht aus dem LS2 heraus abgeschlossen, bis der „ACQUIRE“-Befehl aus der Synchronisierverteileinheit 230 zurückgegeben wird.
  • 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: LOCK PREFETCHW  [ B + I*s + DISP ] .
    Figure DE112006002237B4_0002
  • 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“ besitzt die Form: ACQUIRE reg , imm8
    Figure DE112006002237B4_0003
  • 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.
  • 3 ist ein Flussdiagramm, das die Funktionsweise der Ausführungsformen des Computersystems beschreibt, die in 1 und 2 gezeigt sind. Es sei gemeinsam auf 1 bis 3 verwiesen; zu Beginn werden im Block 405 Adressen von Cache-Zeilen, die aktuell bearbeitet werden oder auf die als Teil eines kritischen Abschnitts aktuell zugegriffen wird, in einer Liste bewahrt (beispielsweise innerhalb des LLB 222). Beispielsweise speichert die Synchronisierverteileinheit 230 die Adressen, die einem kritischen Abschnitt entsprechen, als eine Gruppe innerhalb eines Eintrags des Adressenspeichers 232. In einer Ausführungsform enthält jeder Eintrag des Adressenspeichers 232 auch einen Zählwert, der mit der gesamten Gruppe aus Adressen verknüpft ist, die darin gespeichert sind (Block 410). Wie zuvor beschrieben ist, ist der Zählwert kennzeichnend für die Anzahl der Wettbewerber (d. h. gegenseitigen Störer) für jede Adresse in der Gruppe. In einer weiteren Ausführungsform speichert die Synchronisierverteileinheit 230 eine Anzahl an Zählwerten in jedem Eintrag, so dass jede Adresse in dem Eintrag einen zugeordneten Zählwert besitzt.
  • 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)

    1. 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.
    2. 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.
    3. 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.
    4. 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.
    5. 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.
    6. 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.
    7. 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.
    8. 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.
    9. 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.
    10. 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.
    DE112006002237.7T 2005-08-23 2006-08-23 Verfahren zur selbstinitiierenden Synchronisierung in einem Computersystem Active DE112006002237B4 (de)

    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)

    * Cited by examiner, † Cited by third party
    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)

    * Cited by examiner, † Cited by third party
    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)

    * Cited by examiner, † Cited by third party
    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

    Patent Citations (2)

    * Cited by examiner, † Cited by third party
    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