Speicherkonsistenz vs. Cache-Kohärenz


16

Stimmt es, dass die sequentielle Konsistenz eine stärkere Eigenschaft als die Cache-Kohärenz ist?

Gemäß

Sorin, Daniel J; Hill, Mark D; Wood, David A: Eine Einführung in Speicherkonsistenz und Cache-Kohärenz , Morgan & Claypool, 2011

sequentielle Konsistenz kann beschrieben werden als (nicht formal):

Das sequentielle Konsistenzspeichermodell gibt an, dass das System so angezeigt werden muss, dass alle Ladevorgänge und Speicherorte der Threads in einer Gesamtreihenfolge ausgeführt werden, die die Programmreihenfolge jedes Threads berücksichtigt. Jede Ladung erhält den Wert des letzten Geschäfts in dieser Gesamtreihenfolge.

Mit anderen Worten, das System ist sequentiell konsistent, wenn gegebene Speicherereignisse (Laden und Speichern) jedes Threads so angeordnet werden können, dass: 1) für jeden Thread die Reihenfolge seiner Ereignisse beibehalten wird und 2) die globale Reihenfolge erhalten bleibt seriell (jede Last gibt den zuletzt gespeicherten Wert zurück).

Jetzt fahren sie fort und beschreiben die Kohärenz:

Eine Definition der Kohärenz , die analog zur Definition der sequentiellen Konsistenz ist, besteht darin, dass ein kohärentes System angezeigt werden muss, um alle Ladevorgänge und Speicher in einem einzelnen Speicherort in einer Gesamtreihenfolge auszuführen, die die Programmreihenfolge jedes Threads berücksichtigt.

Mit anderen Worten ist das System kohärent, wenn gegebene Speicherereignisse jedes Threads für jeden Ort Ereignisse für diesen Ort ordnen können, so dass: 1) für jeden Thread die Reihenfolge seiner Ereignisse zu diesem Ort erhalten bleibt, und 2) für jeden Ort der Bestellung ist seriell.

Schließlich weisen sie auf den Unterschied hin:

Diese Definition hebt einen wichtigen Unterschied zwischen Kohärenz und Konsistenz hervor : Die Kohärenz wird für jeden Speicherort angegeben, während die Konsistenz für alle Speicherorte angegeben wird.

Es scheint also der Unterschied zu sein, dass für kohärente Systeme eine Gesamtreihenfolge für alle Ereignisse für jeden Standort erforderlich ist (also die Reihenfolge zwischen Ereignissen für einen bestimmten Standort), während für konsistente Systeme die Gesamtreihenfolge für alle Ereignisse definiert werden sollte (und damit auch für die Bestellung ist auch zwischen Veranstaltungen für verschiedene Standorte)?

Bedeutet das, dass Kohärenz weniger streng ist als Konsistenz? (was amüsant erscheint!) Gibt es Spuren, die kohärent, aber nicht konsistent sind?


2
Beachten Sie, dass uns Fragen des Formulars "Bitte überprüfen Sie meine Antwort!" Nicht gefallen. Können Sie eine genauere Frage hinzufügen? Wo könnte Ihre Lücke sein?
Raphael

@Raphael Sie haben Recht, und es war kein gutes Gefühl, als ich die Frage schrieb. Aber was tun, wenn ich im Internet keine Antwort finden konnte? zu finden, war es nicht sicher, ob es richtig ist. Hätte ich mir eine fischartige Frage ausdenken sollen? Oder keine Antwort auf die Frage? :)
Ayrat

@Ayrat Ich habe den letzten Teil Ihrer Frage als Antwort gelesen, die Sie überprüfen möchten. Wenn dies der Fall ist, sollte es einige Zweifel geben (sonst warum fragen?), Welche Sie für die Leser genau bestimmen sollten. Vielleicht habe ich falsch gelesen?
Raphael

@Raphael 'der letzte Teil möchte geprüft werden' - ja. 'warum fragst du?' - Das Thema ist neu und ich war mir nicht sicher, ob die Schlussfolgerung richtig ist. Ich werde versuchen, diese Art von Fragen in Zukunft zu vermeiden und wahrscheinlich jemanden finden, der das überprüft.)
Ayrat

Antworten:


9

Wie Sie bereits betont haben, ist Kohärenz eine Eigenschaft eines einzelnen Speicherorts, während sich die Konsistenz auf die Reihenfolge der Zugriffe auf alle Speicherorte bezieht. Sequenzielle Konsistenz ist eine streng stärkere Eigenschaft als Kohärenz. Das heißt: Jedes System, das sequentiell konsistent ist, ist auch an jedem Speicherort kohärent. Das Gegenteil ist nicht der Fall, ein Speicher, der an jedem Ort kohärent ist, ist nicht unbedingt sequentiell konsistent. In der Tat gibt es viele echte Cache-kohärente Multiprozessoren, bei denen das Speichermodell nur schwach konsistent ist (es gibt Fälle, in denen unterschiedliche Prozessoren beobachten, dass Zugriffe auf unterschiedliche Speicherorte in unterschiedlicher Reihenfolge erfolgen.)

Der Beweis der sequentiellen Konsistenz impliziert kohärent:

xx

xyx0y0xyxyyx

Dies kann zu überraschenden Ergebnissen führen. Beispielsweise

initially A=B=0
process 1               process 2
store A := 1            load B (gets 1)
store B := 1            load A (gets 0) 

Diese Spur ist zusammenhängend:

  • für A ist die Reihenfolge: proc2 loads A(gets 0),proc1 stores A:=1
  • für B ist die Reihenfolge: proc1 stores B:=1,proc2 loads B(gets 1)

Aber es ist nicht konsistent! Da wenn proc2 load B1 zurückgibt, dann proc1 store A := 1schon passiert und proc2 load Asollte auch 1 zurückgeben.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.