Multicore und Synchronisation

Welche Aussage zum in Multithread-Programmen auftretenden False Sharing ist richtig?

  1. AObwohl verschiedene Threads verschiedene Variablen ändern, liegen diese in derselben Cache-Zeile, sodass die Zeile zwischen den Kernen hin- und herwandert und es langsam wird
  2. BZwei Threads ändern dieselbe Variable ohne Synchronisation, und der Wert wird zerstört
  3. CThreads warten gegenseitig auf ihre Sperren und bleiben stehen
Antwort und Erläuterung anzeigen

Antwort: A. Obwohl verschiedene Threads verschiedene Variablen ändern, liegen diese in derselben Cache-Zeile, sodass die Zeile zwischen den Kernen hin- und herwandert und es langsam wird

Kohärenz wird in Einheiten der Cache-Zeile (im Allgemeinen 64 Byte) verwaltet. Auch wenn Kern 0 nur Variable a und Kern 1 nur Variable b ändert, werden bei Lage von a und b in derselben Zeile bei jedem Schreiben die Kopien des anderen ungültig, und die Zeile wandert zwischen den beiden Kernen hin und her. Das Ergebnis ist korrekt, die Leistung sinkt aber stark; das ist False Sharing. Das Problem tritt leicht bei Arrays für threadweise Zählungen auf.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Multicore und Synchronisation

  1. In einem Array von Zählern je Thread wie „long cnt[8];“ tritt False Sharing auf. Welche Gegenmaßnahme ist am besten geeignet?
  2. Welche Aussage zu einem Data Race (Datenwettlauf) ist richtig?
  3. Wird der obige Code gleichzeitig in zwei Threads ausgeführt, kann der Endwert von counter kleiner als 200000 sein. Welcher Grund ist richtig?
  4. Welche Aussage zu atomaren Befehlen (unteilbaren Befehlen) ist richtig?
  5. Wie arbeitet der atomare Befehl CAS (Compare-and-Swap)?

Vergleiche zu diesem Thema