Multicore und Synchronisation

Was gilt für schwache Speicherkonsistenzmodelle wie bei ARM oder RISC-V (RVWMO)?

  1. ASie erlauben viele Umordnungen von Lese- und Schreibzugriffen auf verschiedene Adressen, und an Stellen, an denen Reihenfolge nötig ist, muss das Programm Barrieren o. Ä. einfügen
  2. BSie erlauben keinerlei Umordnung, daher gibt es keine Barrierebefehle
  3. CSie garantieren nicht einmal die Reihenfolge von Lese- und Schreibzugriffen auf dieselbe Adresse
Antwort und Erläuterung anzeigen

Antwort: A. Sie erlauben viele Umordnungen von Lese- und Schreibzugriffen auf verschiedene Adressen, und an Stellen, an denen Reihenfolge nötig ist, muss das Programm Barrieren o. Ä. einfügen

Bei schwachen Modellen kann die Hardware Lese- und Schreibzugriffe auf verschiedene Adressen ohne Abhängigkeiten recht frei umordnen. Das vereinfacht die Schaltung und erleichtert Leistungs- und Energieeffizienz, doch beim Austausch von Daten mit anderen Kernen muss die Reihenfolge durch Fence-Befehle oder Lese-/Schreibbefehle mit Acquire-/Release-Semantik ausdrücklich angegeben werden. In höheren Sprachen erzeugt der Compiler bei Verwendung atomarer Variablen die passenden Befehle.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Multicore und Synchronisation

  1. Welche Aufgabe haben Memory-Barrier-(Fence-)Befehle?
  2. Im obigen Code bereitet Thread 1 data vor und signalisiert dies mit flag; Thread 2 liest data, nachdem er flag gesehen hat. Was ist nötig, damit Thread 2 auf einer CPU mit schwachem Speicherkonsistenzmodell sicher 42 liest?
  3. Was gilt für Speicheroperationen mit Acquire- und Release-Semantik?
  4. Warum genügt es in C nicht als Synchronisation, eine für den Austausch zwischen Threads verwendete Flag-Variable nur mit volatile zu versehen?
  5. Warum lässt sich bei _Atomic in C11 und std::atomic in C++11 die Speicherreihenfolge (Memory Order) angeben?

Vergleiche zu diesem Thema