Warum verwendet der Store von std::atomic XCHG, wenn sequenzielle Konsistenz angefordert wird?
Während zunächst ein Speichervorgang mit sequenzieller Konsistenz angezeigt werden kann Als etwas, das mithilfe einer einfachen Speicheranweisung gefolgt von einer Speicherbarriere implementiert werden kann, bietet die Verwendung von XCHG (mit einem impliziten Sperrpräfix) eine optimalere Möglichkeit Lösung.
XCHG und sequentielle Konsistenz
Auf x86- und x86_64-Architekturen bietet XCHG sowohl einen Speicheraustausch als auch eine vollständige Speicherbarriere und stellt so die sequentielle Reihenfolge der Speicheroperationen sicher. Dies macht es zu einer effektiven Möglichkeit, sequentielle Konsistenzspeicher zu implementieren.
Einschränkungen regulärer Store-Anweisungen
Eine reguläre Store-Anweisung allein, wie z. B. MOV, kann keine sequentielle Konsistenz garantieren . Es stellt lediglich eine Release-Semantik bereit, die eine Neuordnung bei späteren Vorgängen, einschließlich Erfassungslasten, ermöglicht.
Leistungsüberlegungen
Während sowohl MFENCE als auch XCHG zur Implementierung verwendet werden können Da es sich um sequenzielle Konsistenzspeicher handelt, weisen sie auf verschiedenen CPUs unterschiedliche Leistungsmerkmale auf. Auf bestimmten CPUs kann MFENCE die Ausführung benachbarter Anweisungen außerhalb der Reihenfolge blockieren. Im Gegensatz dazu ist XCHG möglicherweise effizienter für Single-Thread-Vorgänge oder wenn die zwischengespeicherte Zeile im L1-Cache heiß ist.
Compiler- und Kernel-Praktiken
Verschiedene Compiler und Operationen Systeme bevorzugen unterschiedliche Ansätze für die Implementierung von Speichern mit sequentieller Konsistenz. GCC verwendete in der Vergangenheit MOV MFENCE, während andere Compiler und der Linux-Kernel XCHG verwenden.
Zusätzliche Hinweise
Es ist wichtig zu beachten, dass:
Das obige ist der detaillierte Inhalt vonWarum verwendet der Store von „std::atomic' XCHG für sequentielle Konsistenz?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!