cuda und numerische Methoden mit impliziter Zeitdiskretisierung

10

Ich möchte einen Code portieren, der einen Satz partieller Differentialgleichungen (PDE) nach der Methode des endlichen Volumens in IMPLICIT-Form (für die Zeitdiskretisierung) auflöst.

Als Ergebnis gibt es ein tridiagonales Gleichungssystem in x-, y- und z-Richtung, das vom ADI / TDMA-Schema behandelt wird.

Ich kann anscheinend nichts über die implizite Lösung von PDEs mit CUDA finden.

Kann das ADI / TDMA-Schema in CUDA implementiert werden? Gibt es irgendwo ein Beispiel wie eine 2D-Wärmediffusionsgleichung?

Ich konnte nur einen CUDA-Beispielcode für die 2D-Wärmediffusionsgleichung in endlichen Differenzen, aber in EXPLICIT-Form (University of Cambridge) finden.

Jeder Hinweis / Hinweis wäre sehr dankbar.

Khine
quelle
2
Mit welcher Art von PDEs arbeiten Sie? Ist das linear, nichtlinear? Ist Ihr gesamtes System tridiagonal? (Ich verstehe nicht, was Sie mit "tridiagonal in x-, y-, z-Richtung" gemeint haben). Im Allgemeinen ist es aufgrund globalisierter innerer Produkte und unregelmäßiger Kommunikation schwierig, Sparse-Solver oder iterative Solver auf der GPU zu implementieren (Kommunikation kann jedoch weniger problematisch sein, wenn dies tridiagonal ist). Edit: Ok, googelte ADI, habe es noch nie zuvor benutzt. Schnelle Google auf tridiagonalen Lösern fand dies jedoch: Impact.crhc.illinois.edu/shared/papers/sc12_tridiagonal-1.pdf
Reid.Atcheson
Danke für den Link. Die PDEs stammen aus Erhaltungsgleichungen von Impuls, Masse und Energie, sind also stark gekoppelt und nichtlinear. Herr Nikolai Sakharnykh scheint es bereits getan zu haben. Hier ist der Link für Interessierte: nvidia.com/content/GTC/documents/1058_GTC09.pdf . Kann aber keinen Beispielcode finden, das würde wirklich helfen.
Khine
2
Bitte löschen Sie Ihr doppeltes Posting auf SO oder fordern Sie die Migration hier an.
David Ketcheson

Antworten:

1

Dieses Problem bietet sich für eine stark vektorisierte Form an. Wie Sie bereits bemerkt haben, bietet die ADI-Methode einige Schritte für tridiagonale Systeme. Da es sich um lineare Gleichungen handelt, können Sie mit CUsolver und CUblas parallele GPU-Versionen von Standardroutinen für lineare Algebra aufrufen. Mit diesen sollten Sie in der Lage sein, den expliziten Code zu nehmen und einfach die innere Schleife in einen geeigneten CUsolver-Aufruf zu ändern und ihn so zu lösen, dass der Code fast genau wie eine CPU-Implementierung aussieht, jedoch mit den Matrixoperationen, die auf den GPUs über ausgeführt werden Bibliotheksaufrufe.

Chris Rackauckas
quelle