Jump to content

    
Sign in to follow this  
f3434s

Реализация SVD для Cuda

Recommended Posts

Реализация алгоритма SVD на CUDA для простых матриц, т.е. которые хранятся построчно в виде массива.
Количество столбцов не должно превышать количество строк. Размерности матрицы должны быть кратны 16.

Реализован алгоритм, описанный в работе "SVD-разложение и его практические приложения, Колесников Е.В.".
Сначала проводится бидиагонализация матрицы. Затем запускается итерационный алгоритм, состоящий из QR-поворотов.
Разница только в том, что в данной программе по диагонали бегут сразу несколько потоков.

Программа не использует никаких дополнительных библиотек.

Из-за проблемы остановки долго работающих ядер драйвером приходится разбивать задачи на части. Например, функции перемножения матриц запускаются в тройных циклах. Первый цикл соответствует группам строк, второй - группам столбцов, а третий разбивает перемножение строки на столбец на части.
Программа отлаживалась на видеокарте GTX 280.

В алгоритме бидиагонализации используется преобразование Хаусхолдера, матрица которого равна своей обратной и транспонированной.

Для отладки раскомментируйте строки с PrintCudaMatrixToFile().

Главный файл - svd.cu

Архив с программой тут:  https://disk.yandex.ru/d/XORcDdt3SJbJSg

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this