Chcę zaimportować kod, który rozwiązuje zbiór równań różniczkowych cząstkowych (PDE) metodą objętości skończonej w formie IMPLICIT (dla dyskretyzacji czasu).
W wyniku tego powstaje tridiagonalny układ równań w kierunkach x, y, z, który jest obsługiwany przez schemat ADI / TDMA.
Nie mogę znaleźć niczego, co dotyczy niejawnego rozwiązania PDE z CUDA.
Czy możliwe jest wdrożenie schematu ADI / TDMA w CUDA? Czy jest gdzieś dostępny przykład 2D równania dyfuzji ciepła?
Jedyne, co mogłem znaleźć, to przykładowy kod CUDA dla równania 2D dyfuzji ciepła w różnicach skończonych, ale w formie EXPLICIT (University of Cambridge).
Wszelkie wskazówki / odniesienia byłyby bardzo mile widziane.
Odpowiedzi:
Ten problem nadaje się do postaci wysoce wektorowej. Jak zauważyłeś, metoda ADI daje kilka kroków układów trójosiowych. Ponieważ ma on postać równań liniowych, możesz używać CUsolver i CUblas do wywoływania równoległych wersji GPU standardowych procedur algebry liniowej. Korzystając z nich, powinieneś być w stanie pobrać jawny kod i po prostu zmienić wewnętrzną pętlę na odpowiednie wywołanie CUsolver i rozwiązać go w taki sposób, aby kod wyglądał prawie dokładnie jak implementacja procesora, ale z operacjami macierzowymi wykonywanymi na GPU przez połączenia z biblioteką.
źródło