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.
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-Caches | Warum Synchronisation trotzdem wichtig ist |
CPU Top 10 nach dem Leistungsindex 2022 - von PCGH getestet
![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | |
Produktname | Core i7-13700K | Core i9-13900K | Core i5-13600K | Ryzen 9 7950X | Ryzen 7700X | Ryzen 9 7900X | Ryzen 5 7600X | Ryzen 7 5800X3D | Core i9-12900K | Ryzen 5 5600 |
Hersteller | Intel | Intel | Intel | AMD | AMD | AMD | AMD | AMD | Intel | AMD |
Weitere Daten anzeigen ... | ||||||||||
Leistung | 97,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 % |
Kerne | 16c/24t | 24c/32t | 14c/20t | 16c/32t | 8c/16t | 12c/24t | 6c/12t | 8c/16t | 16c/24t | 6c/12t |
Grafikeinheit | Ja | Ja | Ja | Ja | Ja | Ja | Ja | Ja | Ja | Ja |
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) |
RAM | DDR5-5600 G2/ DDR4-3200 G1 | DDR5-5600 G2/ DDR4-3200 G1 | DDR5-5600 G2/ DDR4-3200 G1 | DDR5-5200 | DDR5-5200 | DDR5-5200 | DDR5-5200 | DDR4-3200 | DDR5-4800 G2/ DDR4-3200 G1 | DDR4-3200 |
Sockel | 1700 | 1700 | 1700 | AM5 | AM5 | AM5 | AM5 | AM4 | 1700 | AM4 |
Features |
|
|
|
|
|
|
|
|
|
|
Angebote |
Das ist so als ob Mann einen Trabi tunen will. Lieber eine bessere Programmiersprache...
Die Schwierigkeit ergibt sich daraus, dass es gerade in C eine große Menge "undefined...
Das kommt darauf an, auf welcher Position man auf der Erdscheibe wohnt und ob am Tag...