Mögliche Abläufe für Schreib- und Lesevorgänge bei einer CPU mit vier Kernen

Das gebräuchlichste Protokoll, das verwendet wird, um die Kohärenz zwischen Caches zu erzwingen, ist das MESI-Protokoll. Jeder Prozessor hat seine eigene Variante dieses Designs und die jeweiligen Varianten bringen ihre eigenen Vorteile, Kompromisse und ihr eigenes Potenzial für einzigartige Bugs mit sich.

Alle Varianten haben jedoch eine Gemeinsamkeit: Jede Datenzeile in einem Cache ist mit einem der folgenden Zustände versehen.

1. Modified (M)

  • Diese Daten wurden geändert und unterscheiden sich vom Hauptspeicher.
  • Diese Daten sind die Quelle der Wahrheit und alle anderen Daten sind veraltet.

2. Exklusive (E)

  • Diese Daten wurden nicht geändert und sind mit den Daten im Hauptspeicher synchronisiert.
  • Kein anderer Zwilling des Caches hat diese Daten.

3. Shared (S)

  • Diese Daten wurden nicht geändert und sind mit den Daten an anderer Stelle synchronisiert.
  • Es gibt andere Zwillinge des Caches, die (möglicherweise) ebenfalls dieselben Daten haben.

4. Invalid (I)

  • Diese Daten sind veraltet und sollten niemals verwendet werden.

Die Cache-Kohärenz kann erreicht werden, wenn wir die oben genannten Zustände erzwingen und aktualisieren. Hier einige Beispiele für eine CPU mit 4 Kernen, von denen jeder einen eigenen L1-Cache hat und die zudem alle auf einen gemeinsamen (shared) L2-Cache zugreifen.

Schreiben

Angenommen, ein Thread auf Core 1 möchte auf die Adresse 0xabcd schreiben. Mögliche Abläufe sind:

Bei einem Cache-Hit

1. L1-1 hat die Daten im E- oder M-Zustand.
2. L1-1 führt den Schreibvorgang durch. Alles erledigt.

  • Kein anderer Cache hat die Daten; es ist sicher, sofort in ihn zu schreiben.
  • Der Zustand der Cache-Zeile wird auf M gesetzt, da sie nun modifiziert ist.

Bei einem lokalen Cache-Miss und einem Hit beim Zwilling des Caches

1. L1-1 hat die Daten im Zustand S

  • Das impliziert, dass ein Zwilling des Caches die Daten auch haben könnte.
  • Derselbe Ablauf wird auch verwendet, wenn L1-1 die Daten gar nicht hat.

2. L1-1 sendet einen Request-for-Ownership an den L2-Cache.
3. L2 sieht in seinem Verzeichnis nach und stellt fest, dass L1-2 die Daten aktuell im Zustand S hat.
4. L2 sendet ein Snoop-Invalidate an L1-2.
5. L1-2 markiert seine Daten als Invalid (I).
6. L1-2 sendet ein ACK an L2.
7. L2 sendet zusammen mit den neuesten Daten ein ACK an L1-1.
1. L2 merkt sich, dass L1-1 die Daten für diese Adresse im Zustand E hat.
8. L1-1 hat nun die neuesten Daten sowie die Erlaubnis, in den E-Zustand zu wechseln.
9. L1-1 führt den Schreibvorgang durch und ändert den Status dieser Daten auf M.

Lesen

Nehmen wir nun an, ein Thread auf Core 2 möchte aus der Adresse 0xabcd lesen. Das sind mögliche Abläufe:

Bei einem Cache-Hit

1. L1-2 hat die Daten im Zustand S, E oder M.
2. L1-2 liest die Daten und gibt sie an den Thread zurück. Alles erledigt.

Bei einem lokalen Cache-Miss und einem Eltern-Cache-Miss

1. L1-2 hat die Daten im Zustand I, das heißt, er darf sie nicht verwenden.
2. L1-2 sendet einen Request-for-Share an den L2-Cache.
3. L2 hat die Daten auch nicht. Er liest die Daten aus dem Speicher.
4. L2 holt die Daten aus dem Speicher zurück.
5. L2 sendet die Daten an L1-2, zusammen mit der Erlaubnis, in den S-Zustand zu wechseln.

  • L2 merkt sich, dass L1-2 die Daten im S-Zustand hat.

6. L1-2 holt die Daten, speichert sie in seinem Cache und sendet sie an den Thread.

Bei einem lokalen Cache-Miss und einem Eltern-Cache-Hit

1. L1-2 hat die Daten im Zustand I.
2. L1-2 sendet einen Request-for-S an den L2-Cache.
3. L2 sieht, dass L1-1 die Daten im Zustand S hat.
4. L2 sendet ein ACK an L1-2, zusammen mit den Daten und der Erlaubnis, in den S-Zustand zu wechseln.
5. L1-2 holt die Daten, speichert sie in seinem Cache und sendet sie an den Thread.

Bei einem lokalen Cache-Miss und einem Hit beim Zwilling des Caches

1. L1-2 hat die Daten im Zustand I.
2. L1-2 sendet einen Request-for-S an den L2-Cache.
3. L2 sieht, dass L1-1 die Daten im Zustand E (oder M) hat.
4. L2 sendet einen Snoop-Share an L1-1.
5. L1-1 ändert seinen Zustand zu S.
6. L1-1 sendet ein ACK an L2, gegebenenfalls zusammen mit den geänderten Daten.
7. L2 sendet ein ACK an L1-2, zusammen mit den Daten und der Erlaubnis, in den S-Zustand zu wechseln.
8. L1-2 holt die Daten, speichert sie in seinem Cache und sendet sie an den Thread.

Bitte aktivieren Sie Javascript.
Oder nutzen Sie das Golem-pur-Angebot
und lesen Golem.de
  • ohne Werbung
  • mit ausgeschaltetem Javascript
  • mit RSS-Volltext-Feed
 Hardware: Gängige Mythen über CPU-CachesWarum Synchronisation trotzdem wichtig ist 
  1.  
  2. 1
  3. 2
  4. 3
  5.  
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
Angeblicher ARD-Plan
Rundfunkbeitrag könnte auf über 25 Euro steigen

Laut einem Bericht wollen die öffentlich-rechtlichen Sender eine Anhebung des Rundfunkbeitrags auf bis zu 25,19 Euro pro Monat fordern.

Angeblicher ARD-Plan: Rundfunkbeitrag könnte auf über 25 Euro steigen
Artikel
  1. E-Fuels: VDA begrüßt Verbrennerkompromiss, Greenpeace übt Kritik
    E-Fuels
    VDA begrüßt Verbrennerkompromiss, Greenpeace übt Kritik

    Die Einigung zwischen EU-Kommission und Bundesregierung zu Verbrennermotoren ruft erste Reaktionen hervor.

  2. Elektrifizierung von Kommunalfahrzeugen: Radnabenantrieb von Schaeffler serienreif
    Elektrifizierung von Kommunalfahrzeugen
    Radnabenantrieb von Schaeffler serienreif

    Schaeffler setzt auf Radnabenantriebe für die Elektrifizierung von Fahrzeugen, die nicht schnell fahren und beispielsweise in der Stadt eingesetzt werden.

  3. USA: Amateurfunker nutzen 22-Meter-Skulptur als Antenne
    USA
    Amateurfunker nutzen 22-Meter-Skulptur als Antenne

    Mit nur fünf Watt Sendeleistung konnten Studenten in New York fast die gesamten östlichen USA abdecken - dank einer Skulptur als Antenne.

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 • MediaMarkt-Osterangebote • 3 Spiele kaufen, 2 zahlen • Cyberport Jubiläums-Deals • MSI Optix 30" WFHD/200 Hz 289€ • Verbatim 1-TB-SSD 42,90€ • Creative Sound Blaster X G6 99,99€ • Thrustmaster T300 RS GT PC/PS 290€ • Logitech G535 Lightspeed 69,99€ • NBB Black Weeks [Werbung]
    •  /