cuda et méthodes numériques avec discrétisation temporelle implicite

10

Je cherche à porter du code qui résout un ensemble d'équations différentielles partielles (PDE) par la méthode des volumes finis sous forme IMPLICITE (pour la discrétisation temporelle).

Il en résulte qu'il existe un système tridiagonal d'équations dans les directions x, y, z qui est géré par le schéma ADI / TDMA.

Je n'arrive pas à trouver quoi que ce soit concernant la solution implicite des PDE avec CUDA.

Le schéma ADI / TDMA est-il possible à implémenter dans CUDA ?? Y a-t-il un exemple comme l'équation de diffusion de chaleur 2D disponible quelque part ??

Tout ce que j'ai pu trouver est un exemple de code CUDA pour l'équation de diffusion de chaleur 2D en différences finies mais sous forme EXPLICITE (Université de Cambridge).

Tout indice / référence serait grandement apprécié.

Khine
la source
2
Avec quel type d'EDP travaillez-vous? Est-ce linéaire, non linéaire? L'ensemble de votre système est-il tridiagonal? (Je ne comprends pas ce que vous entendiez par «tridiagonal dans les directions x, y, z»). En général, il est difficile d'implémenter des solveurs clairsemés ou des solveurs itératifs sur GPU en raison de produits internes mondialisés et d'une communication irrégulière (mais la communication peut être moins problématique si elle est tridiagonale). Edit: Ok googlé ADI, jamais utilisé avant moi. Google rapide sur les solveurs tridiagonaux a cependant trouvé ceci: impact.crhc.illinois.edu/shared/papers/sc12_tridiagonal-1.pdf
Reid.Atcheson
Merci pour le lien. Les PDE proviennent d'équations de conservation de la quantité de mouvement, de la masse et de l'énergie, ils sont donc fortement couplés et non linéaires. Il semble que monsieur Nikolai Sakharnykh l'ait déjà fait. Voici le lien pour les intéressés: nvidia.com/content/GTC/documents/1058_GTC09.pdf . Impossible de trouver un exemple de code, cela aiderait vraiment.
Khine
2
Veuillez supprimer votre publication en double sur SO, ou demander à ce qu'elle soit migrée ici.
David Ketcheson

Réponses:

1

Ce problème se prête à une forme hautement vectorisée. Comme vous l'avez noté, la méthode ADI donne quelques étapes des systèmes tridiagonaux. Puisqu'il est sous forme d'équations linéaires, vous pouvez utiliser CUsolver et CUblas pour appeler des versions GPU parallèles de routines d'algèbre linéaire standard. En les utilisant, vous devriez pouvoir prendre le code explicite et simplement changer la boucle interne en un appel CUsolver approprié et le résoudre de manière à ce que le code ressemble presque exactement à une implémentation CPU, mais avec les opérations matricielles effectuées sur les GPU via appels à la bibliothèque.

Chris Rackauckas
la source