使用CUDA计算数百个小矩阵的特征值/特征向量



我有一个关于使用CUDA对数百个小矩阵进行特征分解的问题。

我需要同时计算数百个(例如500个)小(64乘64)实对称矩阵的特征值和特征向量。我试图通过使用国际象棋锦标赛排序的Jacobi方法来实现它(有关更多信息,请参阅本文(PDF))。

在该算法中,在每个块中定义32个线程,而每个块处理一个小矩阵,并且32个线程一起工作以膨胀32个非对角元素,直到收敛。不过,我对它的表现不是很满意。

我想知道哪里有更好的算法来解决我的问题,即许多64乘64实对称矩阵的特征分解。我想户主的方法可能是一个更好的选择,但不确定它是否能在CUDA中有效实施。网上没有太多有用的信息,因为大多数其他程序员更感兴趣的是使用CUDA/OpenCL来分解一个大矩阵,而不是很多小矩阵。

至少对于特征值,可以在Cuda SDK 中找到一个样本

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

图像似乎已损坏,但下载示例仍然有效。我建议下载完整的SDK并查看现有的示例。此外,这篇论文可能很有帮助:

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

最新更新