Heute habe ich ein anderes Verständnis mit meinem Professor in der Parallel Programming Klasse, über was ist "falsches Teilen". Was mein Professor gesagt hat macht wenig Sinn, also habe ich sofort darauf hingewiesen. Sie dachte, "falsches Teilen" würde zu einem Fehler im Programm führen.Was ist "falsches Teilen"? Wie man es reproduziert/vermeidet?
Ich sagte, "false sharing" passiert, wenn verschiedene Speicheradresse der gleichen Cache-Zeile zugeordnet sind, Schreiben von Daten zu einem davon wird dazu führen, dass ein anderer aus dem Cache geworfen wird. Wenn die Prozessoren zwischen den beiden falschen Freigabeadressen hin- und herschalten, können beide nicht im Cache bleiben, so dass alle Operationen zum Zugriff von DRAMs führen.
Das ist meine Meinung so weit. In der Tat bin ich mir auch nicht sicher, was ich gesagt habe ... Wenn ich ein Missverständnis habe, dann weise es bitte darauf hin.
So gibt es einige Fragen. Es wird angenommen, dass der Cache 64 Byte ausgerichtet ist, 4-Wege-assoziativ.
- Ist es möglich, dass zwei Adressen, die durch mehr als 64 Bytes getrennt sind, "false sharing" sind?
- Ist es möglich, dass ein einzelnes Thread-Programm ein "falsches Teilen" Problem festgestellt?
- Was ist das beste Codebeispiel zum Reproduzieren der "falschen Freigabe"?
- Im Allgemeinen, was sollte beachtet werden, um "falsches Teilen" für Programmierer zu vermeiden?