GPU的稀疏矩阵SVD的实现

计算科学 稀疏矩阵 矩阵分解 显卡 svd
2021-12-10 22:35:29

我有一个几乎平方),我想知道的特征值。是 Hermitian,因此特征值是实数正值。WN+1×NA=WTWA

通常的方法是这样做svd(W),但我发现没有 GPU SVD 稀疏实现。我正在使用 python,但我对任何语言都很擅长,希望我能找到一个 C/C++ 代码来包装和调用。

我研究了 cuSPARSE 和 cuSOLVE,我只发现:

  • 特征值求解器
  • 二维码
  • 乔列斯基

W是一个复杂稀疏矩阵,其中中的N+1×N12MM[9,10,11]

我尝试过使用 CPU 库(numpy 和 scipy),但它们非常慢,因为的非零 SVD 比例超过 20% 。我研究了 scikit-learn 实现的随机求解器,但我不能使用它,因为这种方法未被证明适用于复杂矩阵。M=9

任何提示都非常受欢迎。

1个回答

我不是软件方面的专家,当然也不是 GPU 软件方面的专家,但我希望能提供一些数学性质的建议,可能对您有所帮助。

给定一个矩阵,可以将嵌入到更大的方阵和 Hermitian 矩阵中WW

B=[0WW0].

B是一个方阵,其非零数是的两倍。的非零特征值的非零奇异值如果的奇异值,满足,则WB±WσWWv=σuWu=σv

B[uv]=[0WW0][uv]=[WvWu]=σ[uv].

[uv]是具有特征值 \sigma 的B向量。同样,是具有特征向量的特征向量。这应该允许您使用任何 Hermitian 特征值代码来获得(完整或截断的)SVD。这种嵌入可能不如专用 SVD 代码快,但它允许您利用现有的高度优化的特征值代码来计算 SVD。Bσ[uv]Bσ

此外,关于随机方法,我所知道的每种方法都适用于实数和复数矩阵。对复杂值的软件支持可能是另一回事。