Hardware: Gängige Mythen über CPU-Caches

Vieles, was über CPU-Caches erzählt wird, stimmt nicht. Zum Beispiel, dass Caches nicht auf Hardware-Ebene für Kohärenz sorgen können. Zeit, mit einigen Mythen über volatile Variablen und Nebenläufigkeit aufzuräumen.

Artikel von Rajiv Prabhakar veröffentlicht am
Eine Schatztruhe findet sich oft in einem Cache (französisch für: Versteck).
Eine Schatztruhe findet sich oft in einem Cache (französisch für: Versteck). (Bild: Fabian Koldorff für Intel Israel)

Dieser Artikel ist eine Übersetzung. Das Original des Softwareentwicklers und Bloggers Rajiv Prabhakar ist hier zu finden.

Als Computertechniker, der ein halbes Jahrzehnt lang bei Intel und Sun mit Caches gearbeitet hat, weiß ich einiges über Cache-Kohärenz. Im Studium gehörte das zu den schwersten Fächern, aber wenn man es einmal wirklich verstanden hat, lernt man Systemdesign-Prinzipien plötzlich zu schätzen.

Sie fragen sich vielleicht, warum sich Softwareentwickler überhaupt mit CPU-Cache-Design beschäftigen sollten. Ein Grund ist: Viele der Konzepte der Cache-Kohärenz sind direkt auf die Architektur verteilter Systeme und auf Isolationsebenen von Datenbanken anwendbar. Wenn man zum Beispiel versteht, wie Kohärenz in Hardware-Caches implementiert wird, versteht man besser, wie starke und schwache Konsistenz (beziehungsweise die sogenannte eventual consistency) funktionieren. Vielleicht kommt man auf Ideen, wie sich die Konsistenz in verteilten Systemen verbessern lässt, indem man die Erkenntnisse und Prinzipien aus der Hardware anwendet.

Ein weiterer Grund für Softwareentwickler, sich mit CPU-Cache-Design zu befassen, ist, dass Missverständnisse über Caches oft zu falschen Annahmen führen - und zwar vor allem, wenn es um eine parallele Ausführung und Race Conditions geht. Zum Beispiel gibt es die gängige Behauptung, nebenläufige Programmierung sei schwierig, weil "verschiedene Kerne veraltete Werte in ihren individuellen Caches haben können".

Auch kursiert die Annahme, dass volatile Variablen, etwa in Java, deswegen gebraucht werden, um zu verhindern, dass gemeinsam genutzte Daten lokal gecacht werden - und stattdessen gewährleisten, dass die Daten in den Hauptspeicher geschrieben oder aus dem Hauptspeicher gelesen werden.

Meistens sind solche Fehleinschätzungen harmlos (manchmal vielleicht sogar hilfreich), mitunter führen sie aber zu schlechten Designentscheidungen. Zum Beispiel mögen Entwickler so vielleicht glauben, gegen Parallelitätsfehler gefeit zu sein, wenn sie mit Single-Core-Systemen arbeiten. Allerdings kann es in Single-Core-Systemen durchaus Parallelitätsfehler geben, wenn nicht die richtigen Parallelitätskonstrukte verwendet werden.

Außerdem: Wenn volatile Variablen wirklich jedes Mal aus dem Hauptspeicher geschrieben/gelesen würden, wäre das extrem langsam. Schließlich sind Hauptspeicher-Zugriffe 200x langsamer als L1-Cache-Referenzen. Tatsächlich kann das Auslesen volatiler Variablen (in Java) oft genauso schnell sein wie eine L1-Cache-Referenz, was wiederum die Vorstellung widerlegt, dass Lese-/Schreibvorgänge mit volatilen Variablen bis in den Hauptspeicher vordringen würden. Wenn Sie bislang keine volatilen Variablen verwenden, weil Sie Bedenken wegen der Performance haben, sind Sie wahrscheinlich ein Opfer dieses Missverständnisses geworden.

Die Bedeutung von Kohärenz

Wenn aber nun verschiedene Kerne ihren eigenen Cache haben, in dem Kopien der gleichen Daten gespeichert sind, führt das nicht automatisch zu Inkongruenz bei den Daten, sobald sie mit den Schreibvorgängen beginnen? Nein, denn Hardware-Caches auf modernen x86-CPUs wie von Intel werden synchron zueinander gehalten. Solche Caches sind nicht so "dumm", wie viele Entwickler offenbar denken.

Vielmehr gibt es einige sehr komplizierte Protokolle und Logiken, die in jeden Cache eingebettet sind, mit anderen Caches kommunizieren und die Kohärenz über alle Threads hinweg erzwingen. All das geschieht auf der Hardware-Ebene - was bedeutet, dass wir als Software-/Compiler-/Systementwickler uns nicht damit befassen müssen.

Aber was meine ich eigentlich mit "synchron"? Es gibt einige Feinheiten bei dem Thema, aber eine relativ einfache Definition könnte sein: Wenn zwei Threads irgendwo im System von der gleichen Speicheradresse lesen, sollten sie niemals gleichzeitig unterschiedliche Werte lesen.

Ein Beispiel, wie nicht-kohärente Caches diese Regel verletzen können, finden Sie im ersten Abschnitt dieses Tutorials. Keine moderne x86-CPU verhält sich so, wie es im Tutorial beschrieben wird - ein fehlerhafter Prozessor aber schon.

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. 1
  2. 2
  3. 3
  4.  
Anzeige - Ein Vergleichsservice der Golem Media GmbH

CPU Top 10 nach dem Leistungsindex 2022 - von PCGH getestet

ProduktnameCore i7-13700KCore i9-13900KCore i5-13600KRyzen 9 7950XRyzen 7700XRyzen 9 7900XRyzen 5 7600X Ryzen 7 5800X3DCore i9-12900KRyzen 5 5600
HerstellerIntelIntelIntelAMDAMDAMDAMDAMDIntelAMD
Weitere Daten anzeigen ...
Leistung97,4 %/84,0 %100,0 %/ 100,0 %92,6 %/73,2 %86,7 %/96,9 %86,5 %/68,4 %85,7 %/81,9 %82,6 %/59,7 %88,2 %/53,7 %82,9 %/76,4 %68,5 %/46,2 %
Kerne16c/24t24c/32t14c/20t16c/32t8c/16t12c/24t6c/12t8c/16t16c/24t6c/12t
GrafikeinheitJaJaJaJaJaJaJaJaJaJa
Basis-Takt (Turbo)3,40/2,50 GHz (5,4/4,2 GHz)3,00/2,20 GHz (5,8/4,3 GHz)3,50/2,60 GHz (5,1/3,9 GHz)4,5 GHz (5,8 GHz)4,5 GHz (5,6 GHz)4,7 GHz (5,7 GHz)4,7 GHz (5,5 GHz)3,4 GHz (4,6 GHz)3,20/2,40 GHz (5,20/3,90 GHz)3,5 GHz (4,5 GHz)
RAMDDR5-5600 G2/ DDR4-3200 G1DDR5-5600 G2/ DDR4-3200 G1DDR5-5600 G2/ DDR4-3200 G1DDR5-5200DDR5-5200DDR5-5200DDR5-5200DDR4-3200DDR5-4800 G2/ DDR4-3200 G1DDR4-3200
Sockel170017001700AM5AM5AM5AM5AM41700AM4
Features
  • Kaum langsamer als 13900K
  • Maximale Leistung im Desktop
  • Schneller als Ryzen 7 5800X3D
  • Effizienteste Raptor-Lake-CPU
  • Sehr schnell in Anwendungen
  • Für Spieler die beste Wahl
  • Allrounder
  • Effizienter Spiele-Partner
  • Sehr gute Leistung in Spielen
  • Höchste Leistung
  • Sehr guter 6-Kerner
  • Sehr gutes Preis-Leistungs-Verhältnis
Angebote


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
Entwickler
ChatGPT könnte Google-Job mit 183.000 Dollar Gehalt kriegen

Google hat ChatGPT mit Fragen aus seinem Entwickler-Bewerbungsgespräch gefüttert. Die KI könne demnach eine Einsteigerposition erhalten.

Entwickler: ChatGPT könnte Google-Job mit 183.000 Dollar Gehalt kriegen
Artikel
  1. Politische Ansichten auf Google Drive: Letzte Generation mit Datenschutz-Super-GAU
    Politische Ansichten auf Google Drive
    Letzte Generation mit Datenschutz-Super-GAU

    Die Aktivisten der Letzten Generation haben Daten von Unterstützern mitsamt politischer Meinung und Gefängnisbereitschaft ungeschützt auf Google Drive gelagert.

  2. Windkraft-Ausbauplan: Scholz will vier bis fünf neue Windräder pro Tag
    Windkraft-Ausbauplan
    Scholz will vier bis fünf neue Windräder pro Tag

    Die Energiewende in Deutschland soll durch einen massiven Ausbau der Windkraft-Anlagen vorangetrieben werden. Bundeskanzler Scholz will Tempo machen.

  3. Telekom-Internet-Booster: Hybridzugang der Telekom mit 5G ist verfügbar
    Telekom-Internet-Booster
    Hybridzugang der Telekom mit 5G ist verfügbar

    Die 5G-Antenne der Telekom hängt an einem zehn Meter langen Flachbandkabel. Die zugesagte Datenrate reicht bis 300 MBit/s im Download.

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 • Logitech G915 Lightspeed 219,89€ • ASUS ROG Strix Scope Deluxe 107,89€ • Gigabyte B650 Gaming X AX 185,99€ • Alternate Weekend Sale • MindStar: be quiet! Dark Rock 4 49€, Fastro MS200 2TB 95€ • Mindfactory DAMN-Deals: Grakas & CPUS u. a. AMD Ryzen 7 5700X 175€ • PCGH Cyber Week [Werbung]
    •  /