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

问题描述 投票:0回答:2

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

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

在该算法中,每个块中定义了 32 个线程,每个块处理一个小矩阵,32 个线程共同膨胀 32 个非对角元素,直至收敛。不过,我对其表现不是很满意。

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

matrix cuda opencl linear-algebra numerical-methods
2个回答
4
投票

至少对于特征值,可以在 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


0
投票

cusolverDn*batched 似乎完全符合您的要求。例如 cusolverDnSsyevjBatched 将使用单精度计算复杂埃尔米特矩阵的特征值。您可以通过一次调用将多个矩阵传递到函数中。

https://docs.nvidia.com/cuda/cusolver/index.html?highlight=cusolverDnCheevjBatched#cusolverdn-t-gesvdjbatched

© www.soinside.com 2019 - 2024. All rights reserved.