cuda и численные методы с неявной дискретизацией по времени


10

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

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

Я не могу найти что-то относительно неявного решения PDE с CUDA.

Можно ли реализовать схему ADI / TDMA в CUDA? Есть ли где-нибудь пример, подобный 2D уравнению диффузии тепла?

Все, что я мог найти, - это пример кода CUDA для двумерного уравнения теплопроводности в конечных разностях, но в ЯВНОЙ форме (Университет Кембриджа).

Любая подсказка / ссылка будет принята с благодарностью.


2
С какими типами PDE вы работаете? Это линейно, нелинейно? Является ли ваша система трехдиагональной? (Я не понимаю, что вы имели в виду под «трехугольником в направлениях x, y, z»). В общем случае трудно реализовать разреженные решатели или итеративные решатели на графическом процессоре из-за глобализированных внутренних продуктов и нерегулярного взаимодействия (но обмен данными может быть менее проблематичным, если он является трехдиагональным). Изменить: Хорошо гуглил ADI, никогда не использовал его до меня. Быстрый Google на решатели трехдиагональной, хотя нашел это: воздействие.crhc.illinois.edu
shared/

Спасибо за ссылку. PDE взяты из уравнений сохранения импульса, массы и энергии, поэтому они сильно связаны и нелинейны. Кажется, господин Николай Сахарных уже сделал это. Вот ссылка для заинтересованных: nvidia.com/content/GTC/documents/1058_GTC09.pdf . Не могу найти пример кода, хотя, это действительно поможет.
Кхине

2
Пожалуйста, удалите дубликаты на SO или попросите перенести их сюда.
Дэвид Кетчесон

Ответы:


1

Эта проблема поддается сильно векторизованной форме. Как вы заметили, метод ADI дает несколько шагов трехдиагональных систем. Поскольку он имеет форму линейных уравнений, вы можете использовать CUsolver и CUblas для вызова параллельных версий графических процессоров стандартных процедур линейной алгебры. Используя их, вы должны быть в состоянии взять явный код и просто изменить внутренний цикл на соответствующий вызов CUsolver и решить его так, чтобы код выглядел почти точно так же, как реализация ЦП, но с матричными операциями, выполняемыми на графических процессорах через библиотека звонков.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.