metode cuda dan numerik dengan diskritisasi waktu implisit

10

Saya mencari untuk port beberapa kode yang menyelesaikan satu set persamaan diferensial parsial (PDE) dengan metode volume hingga dalam bentuk IMPLICIT (untuk diskritisasi waktu).

Akibatnya ada sistem persamaan tridiagonal dalam arah x, y, z yang ditangani oleh skema ADI / TDMA.

Saya tidak bisa menemukan apa pun mengenai solusi implisit dari PDE dengan CUDA.

Apakah skema ADI / TDMA dapat diterapkan di CUDA ?? Apakah ada contoh seperti persamaan difusi panas 2D yang tersedia di suatu tempat ??

Yang bisa saya temukan adalah kode sampel CUDA untuk persamaan difusi panas 2D dalam perbedaan hingga tetapi dalam bentuk EXPLICIT (University of Cambridge).

Setiap petunjuk / referensi akan sangat dihargai.

Khine
sumber
2
PDE macam apa yang Anda kerjakan? Apakah ini linier, nonlinier? Apakah seluruh sistem Anda berbentuk segitiga? (Saya tidak mengerti apa yang Anda maksud dengan 'tridiagonal di arah x, y, z'). Secara umum sulit untuk menerapkan solver sparse atau soliter iteratif pada GPU karena produk dalam global dan komunikasi tidak teratur (tetapi komunikasi mungkin kurang menjadi masalah jika ini tridiagonal). Sunting: Ok Google googled, tidak pernah menggunakannya sebelumnya. Google cepat pada pemecah tridiagonal meskipun menemukan ini: impact.crhc.illinois.edu/shared/papers/sc12_tridiagonal-1.pdf
Reid.Atcheson
Terima kasih atas tautannya. PDE berasal dari persamaan konservasi momentum, massa, dan energi sehingga mereka sangat berpasangan dan non-linear. Sepertinya Tuan Nikolai Sakharnykh sudah melakukannya. Berikut ini tautan untuk yang berminat: nvidia.com/content/GTC/documents/1058_GTC09.pdf . Tidak dapat menemukan kode sampel, itu akan sangat membantu.
Khine
2
Harap hapus duplikat posting Anda pada SO, atau minta untuk dimigrasi ke sini.
David Ketcheson

Jawaban:

1

Masalah ini cocok untuk bentuk yang sangat vektor. Seperti yang Anda catat, metode ADI memberikan beberapa langkah sistem tridiagonal. Karena ini dalam bentuk persamaan linear, Anda dapat menggunakan CUsolver dan CUblas untuk memanggil versi GPU paralel dari rutinitas aljabar linier standar. Dengan menggunakan ini, Anda harus dapat mengambil kode eksplisit dan hanya mengubah loop batin ke panggilan CUsolver yang tepat dan menyelesaikannya dengan cara di mana kode tersebut terlihat hampir persis seperti implementasi CPU, tetapi dengan operasi matriks yang dilakukan pada GPU melalui panggilan perpustakaan.

Chris Rackauckas
sumber