Scattern der Ergebnisdaten parallelisieren
In #44 (closed) wurden noch Speicher auf der GPU für genau ein lokales Ergebnisarray yl
allokiert, was für parallele Kernelausführung nicht ausreicht.
In diesem Task soll die Ausgabedatenstruktur fit für parallele Ausführung gemacht werden.
In GridOperator::nonlinear_jacobian_apply()
soll dazu Speicher für y
auf dem Device allokiert werden. Der Kernel-Lambda muß lokalen (auf 0.0 initialisierten) Speicher für yl
bereitstellen und an jacobian_apply_volume()
weiterreichen. Nach dem Aufruf von jacobian_apply_volume()
muß das Kernel-Lambda das lokale yl
in den Device-Speicher für y
scattern. Dazu sollen vorerst Atomare Operationen verwendet werden. Nach der Schleife über die Kernel-Lambda-Aufrufe in nonlinear_jacobian_apply()
muß dann daß Device-y
zurück in das CPU-y
transferiert werden.
Achtung: der y
-Parameter von nonlinear_jacobian_apply()
ist (größtenteils) additiv, d.h. er wird am Anfang nicht gelöscht sondern das Ergebnis der Berechnung auf den Wert beim Aufruf der Funktion draufaddiert. Das muß beim zurücktransferieren von der GPU beachtet werden.
Blockiert von: