Подтвердить что ты не робот

Рассчитать собственные значения/собственные векторы сотен малых матриц с использованием CUDA

У меня вопрос о собственном разложении сотен небольших матриц с использованием CUDA.

Мне нужно вычислить собственные значения и собственные векторы из сотен (например, 500) малых (64 на 64) реальных симметричных матриц одновременно. Я попытался реализовать его методом Якоби, используя порядок шахматного турнира (см. этот документ (PDF) для получения дополнительной информации).

В этом алгоритме в каждом блоке определены 32 потока, в то время как каждый блок обрабатывает одну небольшую матрицу, а 32 потока работают вместе, чтобы раздуть 32 недиагональных элемента до сходимости. Однако я не очень доволен своей работой.

Мне интересно, где есть лучший алгоритм для моего вопроса, т.е. собственное разложение многих 64-на-64 реальных симметричных матриц. Я думаю, что метод домовладельца может быть лучшим выбором, но не уверен, что он может быть эффективно реализован в CUDA. В Интернете не так много полезной информации, так как большинство других программистов больше заинтересованы в использовании CUDA/OpenCL для разложения одной большой матрицы вместо множества небольших матриц.

4b9b3361

Ответ 1

По крайней мере, для собственных значений образец можно найти в SDK Cuda

http://www.nvidia.de/content/cudazone/cuda_sdk/Linear_Algebra.html

Изображения кажутся разбитыми, но загрузка образцов по-прежнему работает. Я бы предложил загрузить полный SDK и посмотреть на этот пример. Кроме того, этот документ может быть полезен:

http://docs.nvidia.com/cuda/samples/6_Advanced/eigenvalues/doc/eigenvalues.pdf