métodos cuda e numéricos com discretização implícita do tempo


10

Estou procurando portar algum código que resolva um conjunto de equações diferenciais parciais (PDE) pelo método de volume finito no formato IMPLICIT (para discretização do tempo).

Como resultado, existe um sistema tridiagonal de equações nas direções x, y, z, que é tratado pelo esquema ADI / TDMA.

Não consigo encontrar nada sobre a solução implícita de PDEs com CUDA.

É possível implementar o esquema ADI / TDMA no CUDA? Existe um exemplo como a equação de difusão de calor 2D disponível em algum lugar?

Tudo o que pude encontrar é um código de amostra CUDA para a equação de difusão de calor 2D em diferenças finitas, mas na forma EXPLICIT (Universidade de Cambridge).

Qualquer dica / referência seria muito apreciada.


2
Com que tipo de PDEs você está trabalhando? Isso é linear, não linear? Todo o seu sistema é tridiagonal? (Não entendo o que você quis dizer com 'tridiagonal nas direções x, y, z'). Em geral, é difícil implementar solucionadores esparsos ou iterativos na GPU por causa de produtos internos globalizados e comunicação irregular (mas a comunicação pode ser menos problemática se for tridiagonal). Edit: Ok ADI pesquisado, nunca usei antes de mim. O google rápido em solucionadores tridiagonais encontrou o seguinte: impact.crhc.illinois.edu/shared/papers/sc12_tridiagonal-1.pdf
Reid.Atcheson

Obrigado pelo link. Os PDEs são de equações de conservação de momento, massa e energia, portanto são fortemente acoplados e não lineares. Parece que o senhor Nikolai Sakharnykh já fez isso. Aqui está o link para os interessados: nvidia.com/content/GTC/documents/1058_GTC09.pdf . Não é possível encontrar um código de exemplo, isso realmente ajudaria.
Khine

2
Exclua sua postagem duplicada no SO ou solicite a migração aqui.
David Ketcheson

Respostas:


1

Esse problema se presta a uma forma altamente vetorizada. Como você observou, o método ADI fornece algumas etapas dos sistemas tridiagonais. Como está na forma de equações lineares, é possível usar o CUsolver e o CUblas para chamar versões GPU paralelas de rotinas de álgebra linear padrão. Usando isso, você poderá pegar o código explícito e apenas alterar o loop interno para uma chamada apropriada do CUsolver e resolvê-lo de uma maneira em que o código pareça quase exatamente como uma implementação de CPU, mas com as operações de matriz feitas nas GPUs via chamadas de biblioteca.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.