Heim > Backend-Entwicklung > C++ > Wie erreicht x86 eine Release-Acquire-Semantik ohne explizite Zäune?

Wie erreicht x86 eine Release-Acquire-Semantik ohne explizite Zäune?

Linda Hamilton
Freigeben: 2024-12-07 14:39:13
Original
543 Leute haben es durchsucht

How Does x86 Achieve Release-Acquire Semantics Without Explicit Fences?

x86-Speichermodell und Release-Acquire-Semantik

Im Nachgang zu einer früheren Anfrage zur Implementierung von atomaren Speicherspeichern „memory_order_release“ mithilfe von MOV x86-Anweisung wurden Fragen dazu aufgeworfen, wie Release-and-Acquire auf x86 ohne zusätzliche Synchronisierungsmechanismen wie Zäune usw. erreicht wird Sperren.

Einzelprozessor-Speicherreihenfolge

Intels Band 3A, Kapitel 8 seines Systementwicklungshandbuchs besagt, dass in einem Einzelprozessorsystem Lade- und Schreibvorgänge eine bestimmte Reihenfolge haben Garantien:

  • Lesungen werden nicht mit anderen nachbestellt Lesevorgänge.
  • Schreibvorgänge werden nicht mit älteren Lesevorgängen neu angeordnet.
  • Schreibvorgänge in den Speicher werden nicht mit anderen Schreibvorgängen neu angeordnet, außer unter bestimmten Umständen.

Multi -Ordnung des Prozessorspeichers

Der Multiprozessor-Abschnitt des Dokuments sieht dies jedoch nicht explizit vor Erwähnen Sie, wie Lasten durchgesetzt werden. Der Schwerpunkt liegt auf:

  • Aufbewahrung individueller Prozessorreihenfolgeregeln innerhalb der Kerne.
  • Einhaltung von Schreibvorgängen in derselben Reihenfolge durch alle Prozessoren.
  • Fehlen einer Reihenfolge zwischen Schreibvorgängen von verschiedene Prozessoren.
  • Speicherordnung unter Beachtung der Kausalität (d. h. unter Berücksichtigung der transitiven Sichtbarkeit).
  • Konsistenz der Sichtbarkeit von Filialaufträgen durch andere Verarbeiter als diejenigen, die die Läden ausführen.

Erfassung und Freigabe mithilfe von MOV

Verständnis Die Prinzipien der Einzelprozessor-Speicheranordnung sind von entscheidender Bedeutung. Laut Handbuch gelten für Multiprozessorsysteme beim Zugriff auf Cache-kohärenten Shared Memory die gleichen Prinzipien. Dies bedeutet, dass die Neuordnung nur lokal innerhalb jedes CPU-Kerns erfolgt.

Sobald ein Speicher global sichtbar wird, wird er für alle Kerne gleichzeitig sichtbar, wodurch sichergestellt wird, dass alle Kerne die Schreibvorgänge in einer konsistenten Reihenfolge ausführen. Aus diesem Grund sind nur lokale Barrieren wie mfence in x86 erforderlich, um sequentielle Konsistenz herzustellen.

Kohärente gemeinsame Sicht auf den Speicher

Die x86-Architektur verwaltet eine kohärente gemeinsame Ansicht Ansicht des Speichers durch kohärente Caches. Intels Definition von Multiprozessormechanismen unterstreicht die Bedeutung der Speicherkohärenz und Cache-Konsistenz, um sicherzustellen, dass alle Prozessoren Zugriff auf die gleichen Daten haben.

Zusätzlich Ressourcen

  • https://preshing.com/20120913/acquire-and-release-semantics/
  • https://preshing.com/20 120930/weak-vs-strong-memory-models/
  • https://www.cl.cam.ac.uk/~pes20/papers/x86-tso-memory-model.pdf

Das obige ist der detaillierte Inhalt vonWie erreicht x86 eine Release-Acquire-Semantik ohne explizite Zäune?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage