Multicore und Synchronisation
Welche Aussage zum in Multithread-Programmen auftretenden False Sharing ist richtig?
- 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
- BZwei Threads ändern dieselbe Variable ohne Synchronisation, und der Wert wird zerstört
- 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.