cuda e metodi numerici con discretizzazione temporale implicita


10

Sto cercando di portare un po 'di codice che risolve un insieme di equazioni differenziali parziali (PDE) con il metodo del volume finito in forma IMPLICIT (per la discretizzazione del tempo).

Di conseguenza esiste un sistema tridiagonale di equazioni nelle direzioni x, y, z che è gestito dallo schema ADI / TDMA.

Non riesco a trovare nulla per quanto riguarda la soluzione implicita di PDE con CUDA.

Lo schema ADI / TDMA è possibile implementare in CUDA ?? C'è un esempio come l'equazione di diffusione del calore 2D disponibile da qualche parte ??

Tutto quello che ho potuto trovare è un codice di esempio CUDA per l'equazione di diffusione del calore 2D in differenze finite ma in forma EXPLICIT (Università di Cambridge).

Qualsiasi suggerimento / riferimento sarebbe molto apprezzato.


2
Con che tipo di PDE stai lavorando? È lineare, non lineare? L'intero sistema è tridiagonale? (Non capisco cosa intendevi per "tridiagonale nelle direzioni x, y, z"). In generale, è difficile implementare solutori sparsi o solutori iterativi su GPU a causa di prodotti interni globalizzati e comunicazione irregolare (ma la comunicazione può essere un problema minore se questo è tridiagonale). Modifica: Ok google ADI, non l'ho mai usato prima di me stesso. Google Quick su risolutori tridiagonal ha trovato questo: impact.crhc.illinois.edu/shared/papers/sc12_tridiagonal-1.pdf
Reid.Atcheson

Grazie per il link. I PDE provengono da equazioni di conservazione di quantità di moto, massa ed energia, quindi sono fortemente accoppiati e non lineari. Sembra che Nikolai Sakharnykh lo abbia già fatto. Ecco il link per gli interessati: nvidia.com/content/GTC/documents/1058_GTC09.pdf . Tuttavia, non riesco a trovare un codice di esempio, sarebbe di grande aiuto.
Khine,

2
Elimina i tuoi post duplicati su SO o richiedi la migrazione qui.
David Ketcheson,

Risposte:


1

Questo problema si presta a una forma altamente vettoriale. Come hai notato, il metodo ADI offre alcuni passaggi dei sistemi tridiagonali. Dal momento che è sotto forma di equazioni lineari, puoi usare CUsolver e CUblas per chiamare versioni GPU parallele di routine di algebra lineare standard. Usando questi, dovresti essere in grado di prendere il codice esplicito e semplicemente cambiare il ciclo interno in una chiamata CUsolver appropriata e risolverlo in un modo in cui il codice assomiglia quasi esattamente a un'implementazione della CPU, ma con le operazioni a matrice eseguite sulle GPU tramite chiamate in biblioteca.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.