куда та чисельні методи з неявною часовою дискретизацією


10

Я шукаю порт деякого коду, який вирішує набір часткових диференціальних рівнянь (PDE) методом кінцевих обсягів у формі IMPLICIT (для дискретизації часу).

В результаті виникає тридіагональна система рівнянь у напрямках x, y, z, якою керується схема ADI / TDMA.

Я, здається, не можу знайти нічого щодо неявного вирішення PDE з CUDA.

Чи можлива реалізація схеми ADI / TDMA в CUDA ?? Чи є десь такий приклад, як 2D рівняння дифузії тепла ??

Все, що я міг знайти, - це зразок коду CUDA для двовимірного рівняння дифузії тепла в кінцевих відмінностях, але у формі EXPLICIT (Кембриджський університет).

Будь-який натяк / посилання буде дуже вдячний.


2
З якими PDE ви працюєте? Це лінійна, нелінійна? Ваша система тридіагональна? (Я не розумію, що ви мали на увазі під "тридіагональним у напрямках x, y, z"). Взагалі важко реалізувати рідкісні розв'язувачі або ітеративні рішення на GPU через глобалізовані внутрішні продукти та нерегулярний зв’язок (але спілкування може бути меншою проблемою, якщо це тридіагональне). Редагувати: Добре гуглити ADI, ніколи не використовував його раніше. Швидкий google на тридіагональних вирішувачах, хоча виявив це: impact.crhc.illinois.edu/shared/papers/sc12_tridiagonal-1.pdf
Reid.Atcheson

Дякую за посилання PDE складаються з рівнянь збереження імпульсу, маси та енергії, тому вони сильно пов'язані та нелінійні. Здається, містер Микола Сахарний це вже зробив. Ось посилання для зацікавлених: nvidia.com/content/GTC/documents/1058_GTC09.pdf . Неможливо знайти зразок коду, але це справді допоможе.
Хине

2
Видаліть дублюючу публікацію на SO або попросіть її перенести сюди.
Девід Кетчесон

Відповіді:


1

Ця проблема піддається дуже векторизованій формі. Як ви зазначали, метод ADI дає кілька кроків тридіагональних систем. Оскільки це у формі лінійних рівнянь, ви можете використовувати CUsolver та CUblas для виклику паралельних версій GPU стандартних лінійних підпрограм алгебри. Використовуючи ці, ви повинні мати можливість взяти явний код і просто змінити внутрішній цикл на відповідний виклик CUsolver і вирішити його таким чином, що код виглядає майже точно як реалізація процесора, але з операціями з матрицею, що виконуються на графічних процесорах через бібліотечні дзвінки.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.