Cuda y métodos numéricos con discretización de tiempo implícita

10

Estoy buscando portar algún código que resuelva un conjunto de ecuaciones diferenciales parciales (PDE) por el método de volumen finito en forma IMPLICIT (para la discretización de tiempo).

Como resultado, existe un sistema tridiagonal de ecuaciones en direcciones x, y, z que se maneja mediante el esquema ADI / TDMA.

Parece que no puedo encontrar nada con respecto a la solución implícita de PDE con CUDA.

¿Es posible implementar el esquema ADI / TDMA en CUDA? ¿Hay algún ejemplo como la ecuación de difusión de calor 2D disponible en alguna parte?

Todo lo que pude encontrar es un código de muestra CUDA para la ecuación de difusión de calor 2D en diferencias finitas pero en forma EXPLÍCITA (Universidad de Cambridge).

Cualquier sugerencia / referencia sería muy apreciada.

Khine
fuente
2
¿Con qué tipo de PDE estás trabajando? ¿Es esto lineal, no lineal? ¿Es todo su sistema tridiagonal? (No entiendo lo que quisiste decir con 'tridiagonal en direcciones x, y, z'). En general, es difícil implementar solucionadores dispersos o solucionadores iterativos en la GPU debido a los productos internos globalizados y la comunicación irregular (pero la comunicación puede ser un problema menor si esto es tridiagonal). Editar: Ok Google ADI, nunca lo usé antes que yo. Google rápido en solucionadores tridiagonales aunque encontró esto: impact.crhc.illinois.edu/shared/papers/sc12_tridiagonal-1.pdf
Reid.Atcheson
Gracias por el enlace. Las PDE provienen de ecuaciones de conservación de momento, masa y energía, por lo que están fuertemente acopladas y no son lineales. Parece que el Sr. Nikolai Sakharnykh ya lo ha hecho. Aquí está el enlace para los interesados: nvidia.com/content/GTC/documents/1058_GTC09.pdf . Sin embargo, no puedo encontrar un código de muestra, eso realmente ayudaría.
Khine
2
Elimine su publicación duplicada en SO o solicite que se migre aquí.
David Ketcheson

Respuestas:

1

Este problema se presta a una forma altamente vectorizada. Como notó, el método ADI da algunos pasos de los sistemas tridiagonales. Como está en forma de ecuaciones lineales, puede usar CUsolver y CUblas para llamar a versiones de GPU paralelas de rutinas de álgebra lineal estándar. Con estos, debe poder tomar el código explícito y simplemente cambiar el bucle interno a una llamada CUsolver adecuada y resolverlo de una manera en que el código se vea casi exactamente como una implementación de CPU, pero con las operaciones matriciales realizadas en las GPU a través de llamadas a la biblioteca.

Chris Rackauckas
fuente