Warum Synchronisation trotzdem wichtig ist

Das sind nur einige der möglichen Szenarien. Tatsächlich gibt es zahlreiche Varianten des obigen Designs - und keine zwei Implementierungen sind gleich. Zum Beispiel haben einige Designs einen O/F State. Einige verwenden Write-Back-Caches, andere Write-Through-Caches. Manche nutzen Snoop-Broadcasts, andere wiederum Snoop-Filter. Einige haben inklusive, andere exklusive Caches. Es gibt endlos viele Variationen - und Puffer haben wir noch nicht einmal erwähnt.

Das obige Beispiel nutzt zudem einen einfachen Prozessor mit nur zwei Cache-Ebenen. Das gleiche Protokoll kann aber auch rekursiv angewendet werden. Sie könnten leicht einen L3-Cache hinzufügen, der wiederum mehrere L2s koordiniert, wobei das gleiche Protokoll wie oben verwendet wird. Möglich wäre auch ein Multiprozessorsystem mit "Home Agents", die die Koordination über mehrere L3-Caches auf unterschiedlichen Chips übernehmen.

In jedem Szenario muss jeder Cache nur mit seinem Eltern-Cache (zum Abrufen von Daten/Berechtigungen) und seinen Kind-Caches (zum Gewähren/Widerrufen von Daten/Berechtigungen) kommunizieren. All das sollte so passieren, dass es für den Software-Thread unsichtbar ist. Aus Sicht der Software-Anwendung erscheint das Speicher-Subsystem als ein einziger, kohärenter Monolith ... mit sehr variablen Latenzen.

Warum dann überhaupt volatile Variablen?

Nachdem wir nun die unglaubliche Leistung und Kohärenz des Speichersystems Ihres Computers erörtert haben, fragen Sie sich vielleicht: Wenn Caches ohnehin synchronisiert werden - warum brauchen wir dann überhaupt volatile Variablen in Sprachen wie Java?

Das ist eine komplizierte Frage, die an anderer Stelle ausführlich beantwortet wird. Aber lassen Sie mich eine Sache dazu sagen: Werden Daten in CPU-Register eingelesen und gehalten, sind diese auch nicht synchron mit dem Cache oder Arbeitsspeicher.

Der Software-Compiler nimmt viele Optimierungen vor, wenn es darum geht, Daten in die Register zu laden, sie in den Cache zurückzuschreiben und sogar die Reihenfolge der Anweisungen zu ändern - und zwar alles unter der Annahme, dass der Code single threaded (also nicht nebenläufig) ausgeführt wird. Daher müssen alle Daten, die Race Conditions ausgesetzt sind, manuell durch nebenläufige Algorithmen und Sprachkonstrukte wie atomare und volatile Variablen geschützt werden.

Im Fall der volatilen Variablen in Java besteht ein Teil der Lösung darin, alle Lese-/Schreibvorgänge zu zwingen, die lokalen Register zu umgehen und stattdessen sofort Lese-/Schreibvorgänge im Cache auszulösen. Sobald die Daten in den L1-Cache gelesen/geschrieben werden, übernimmt das Hardware-Kohärenzprotokoll und bietet garantierte Kohärenz über alle globalen Threads hinweg.

So wird sichergestellt, dass, wenn mehrere Threads dieselbe Variable lesen oder in dieselbe Variable schreiben, alle synchron gehalten werden. So erreichen Sie eine Inter-Thread-Koordination in nur 1 Nanosekunde.

Bitte aktivieren Sie Javascript.
Oder nutzen Sie das Golem-pur-Angebot
und lesen Golem.de
  • ohne Werbung
  • mit ausgeschaltetem Javascript
  • mit RSS-Volltext-Feed
 Mögliche Abläufe für Schreib- und Lesevorgänge bei einer CPU mit vier Kernen
  1.  
  2. 1
  3. 2
  4. 3
Anzeige - Ein Vergleichsservice der Golem Media GmbH



Tom01 23. Apr 2021

Das ist so als ob Mann einen Trabi tunen will. Lieber eine bessere Programmiersprache...

Joey5337 15. Apr 2021

Die Schwierigkeit ergibt sich daraus, dass es gerade in C eine große Menge "undefined...

gelöscht 14. Apr 2021

Das kommt darauf an, auf welcher Position man auf der Erdscheibe wohnt und ob am Tag...



Aktuell auf der Startseite von Golem.de
Grace Hopper Superchip
Nvidia zeigt den DGX GH200 AI-Supercomputer

Die Kombination aus Grace Hopper, Bluefield 3 und NVLink ergibt funktional eine riesige GPU mit der Rechenkapazität eines Supercomputers und 144 TByte Grafikspeicher.

Grace Hopper Superchip: Nvidia zeigt den DGX GH200 AI-Supercomputer
Artikel
  1. Gefangen im Zeitstrom, verloren im All: Die zehn besten Sci-Fi-Serien der 1960er
    Gefangen im Zeitstrom, verloren im All
    Die zehn besten Sci-Fi-Serien der 1960er

    Sie sind die Klassiker, auf denen das ganze Genre aufbaut: die großen Science-Fiction-Serien der 1960er. Neben Star Trek gab es hier noch viel mehr.
    Von Peter Osteried

  2. SPD-Chefin: Esken will Konsequenzen für Twitters Ausstieg bei EU-Gesetz
    SPD-Chefin
    Esken will Konsequenzen für Twitters Ausstieg bei EU-Gesetz

    Twitter lasse sexistischen, rassistischen Hass zu. Esken will dagegen vorgehen, dass Elon Musk das EU-Gesetz über digitale Dienste ignoriert.

  3. Speicherleaks vermeiden: Ressourcen- und typensicheres Programmieren in C++
    Speicherleaks vermeiden
    Ressourcen- und typensicheres Programmieren in C++

    Bei C++ liegt alles in der Hand der Entwickler - und das kann gut und schlecht sein. Richtig angewendet, ist die Sprache aber alles andere als unsicher.
    Eine Anleitung von Adam Jaskowiec

Du willst dich mit Golem.de beruflich verändern oder weiterbilden?
Zum Stellenmarkt
Zur Akademie
Zum Coaching
  • Schnäppchen, Rabatte und Top-Angebote
    Die besten Deals des Tages
    • Daily Deals • Microsoft Xbox Wireless Controller 40,70€ • Lexar Play 1 TB 99,60€ • DAMN!-Deals mit AMD-Bundle-Aktion • MindStar: AMD Ryzen 9 5950X 429€, MSI RTX 3060 Gaming Z Trio 12G 329€, GIGABYTE RTX 3060 Eagle OC 12G 299€, be quiet! Pure Base 500DX 89€ • Logitech bis -46% [Werbung]
    •  /