Vermeiden von Lock-Contention durch umsortieren der Ausführungsreihenfolge des Compute-Kernels
Benachbarte Elemente eines Gitters haben eine hohe Wahrscheinlichkeit ähnliche Indices zu bekommen, und damit von derselben Thread-group bearbeitet zu werden. Benachbarte Elemente haben auch eine Tendenz dieselben Vertices zu haben. Das Scattern der Ergebnisse führt dann häufig dazu, daß zwei threads derselben Workgroup versuchen denselben Mutex zu locken. Das gilt es zu vermeiden, denn je häufiger das passiert um so ineffizienter arbeitet das device.
Eine Möglichkeit das zu Umgehen wäre die Elemente anders auf die Workgroups zu verteilen, so dass Lock contention schlicht seltener passiert. Andererseits führt das umsortieren dann eventuell zu scattered Zugriffen auf andere Daten, was den erhofften performance-Gewinn zunichte machen könnte.
TODO:
-
Ein Umsortierungsschema überlegen -
Implementieren -
Benchmarken mit Full Mutex (#59 (closed)) -
Benchmarken mit Sparse Mutex (#60 (closed))
Depends: #59 (closed) || #60 (closed)