Gemeinsamer Speicher und Konsistenz
Die Shared-Memory-Architektur ermöglicht es mehreren Prozessoren, in einem gemeinsamen Adressraum zu arbeiten; ein Speicherkonsistenzmodell definiert die Reihenfolge, in der die Speicheroperationen eines Prozessors für andere sichtbar werden, den Vertrag, auf den parallele Programme angewiesen sind.
Definition
Ein Speicherkonsistenzmodell ist die Spezifikation der zulässigen Reihenfolgen von Speicherlese- und -schreibvorgängen über Prozessoren hinweg in einem Shared-Memory-System, das definiert, welche Werte ein Ladevorgang zurückgeben kann und somit den Vertrag zwischen Hardware und nebenläufiger Software festlegt.
Scope
Dieses Thema behandelt Shared-Memory-Multiprocessing und, zentral, Speicherkonsistenzmodelle: sequentielle Konsistenz, relaxierte und schwache Modelle, Speicher-Fences und die Beziehung zwischen Konsistenz und Kohärenz. Es behandelt auch Synchronisationsprimitive, die auf dem Konsistenzmodell basieren. Ausgeschlossen sind der pro-Ort-Kohärenzmechanismus (Cache-Kohärenzprotokolle) und die Chip-Ebene-Integration von Kernen (Multicore- und Chip-Multiprozessoren).
Core questions
- Welche Reihenfolge von Speicheroperationen dürfen parallele Programme annehmen?
- Wie unterscheidet sich sequentielle Konsistenz von relaxierten Konsistenzmodellen?
- Warum existieren relaxierte Modelle, und wie stellen Speicher-Fences die benötigte Reihenfolge wieder her?
- Wie definieren Kohärenz und Konsistenz zusammen das korrekte Shared-Memory-Verhalten?
Key concepts
- gemeinsamer Adressraum
- Speicherkonsistenzmodell
- sequentielle Konsistenz
- relaxierte und schwache Konsistenz
- Speicher-Fences und -Barrieren
- Konsistenz vs. Kohärenz
- Synchronisationsprimitive
- Datenkonflikte
Key theories
- Sequentielle Konsistenz
- Lamports sequentielle Konsistenz erfordert, dass das Ergebnis der Ausführung so ist, als ob alle Operationen der Prozessoren in einer einzigen globalen Reihenfolge verschachtelt wären, die die Programmreihenfolge jedes Prozessors respektiert; sie ist intuitiv, schränkt aber die Hardwareoptimierung ein, was relaxierte Modelle motiviert.
Mechanisms
Die Hardware ordnet Speicheroperationen zur Leistungssteigerung neu an und puffert sie, sodass das Konsistenzmodell festlegt, welche Neuordnungen für andere Prozessoren sichtbar sind. Sequentielle Konsistenz verbietet sichtbare Neuordnungen über Prozessoren hinweg; relaxierte Modelle erlauben bestimmte Neuordnungen zur Beschleunigung und erfordern von Programmierern das Einfügen von Speicher-Fences, um die Reihenfolge bei Bedarf zu erzwingen. Synchronisationsprimitive wie Sperren und atomare Operationen basieren auf diesen Garantien, und Programme, die Datenkonflikte vermeiden, verhalten sich vorhersehbar.
Clinical relevance
Das Speicherkonsistenzmodell ist die Grundlage für die korrekte nebenläufige Programmierung: Es bestimmt, was ein Multithread-Programm legitim über die Sichtbarkeit und Reihenfolge gemeinsamer Aktualisierungen annehmen darf. Ein Missverständnis führt zu subtilen, schwer reproduzierbaren Fehlern, und Sprachspeichermodelle (wie in C++ und Java) bauen direkt auf diesen Hardwarekonzepten auf.
History
Lamport formalisierte die sequentielle Konsistenz 1979. Als die Hardware bei der Neuordnung von Speicherzugriffen zur Leistungssteigerung aggressiver wurde, verbreiteten sich in den 1980er und 1990er Jahren relaxierte Konsistenzmodelle über Architekturen hinweg, was zu Arbeiten führte, diese zu definieren und zu zähmen und schließlich Programmiersprachen eigene, gut spezifizierte Speichermodelle zu geben.
Debates
- Starke versus relaxierte Konsistenz
- Starke Modelle wie die sequentielle Konsistenz sind leichter zu begründen, begrenzen aber die Hardwareleistung, während relaxierte Modelle Optimierungen auf Kosten der Programmierkomplexität ermöglichen; das Feld balanciert weiterhin intuitive Semantik gegen Effizienz durch sorgfältig spezifizierte Modelle und Fences.
Key figures
- Leslie Lamport
- Sarita Adve
- Mark D. Hill
- David E. Culler
Related topics
Seminal works
- hennessy2019
- culler1999
Frequently asked questions
- Was ist der Unterschied zwischen Kohärenz und Konsistenz?
- Kohärenz garantiert, dass alle Prozessoren sich schließlich auf den Wert jedes einzelnen Speicherorts einigen und Schreibvorgänge darauf in einer sinnvollen Reihenfolge sehen. Konsistenz regelt die Reihenfolge von Operationen über verschiedene Orte hinweg, wie sie von verschiedenen Prozessoren beobachtet werden. Ein Konsistenzmodell setzt Kohärenz voraus und fügt Regeln für die ortsübergreifende Reihenfolge hinzu.
- Warum verwenden Prozessoren relaxierte Speichermodelle?
- Eine strikte Reihenfolge würde die Hardware zwingen, auf Pufferung und Neuordnung zu verzichten, die die Speicherlatenz verbergen, was die Leistung beeinträchtigen würde. Relaxierte Modelle ermöglichen es der Hardware, frei zu optimieren, und geben Programmierern explizite Fences, um die Reihenfolge nur dort zu erzwingen, wo die Korrektheit dies erfordert.