适用于大型矩阵的C ++ / CUDA截断SVD(最好在GPU上)

时间:2019-04-18 19:27:33

标签: gpu svd decomposition truncated orthogonal

我在GPU上有一个巨型矩阵(A),我需要对其进行正交分解(A = U * V ^ T)。我想到使用SVD,但是也许你们会带我一个不同的方向。我正在用C ++ / CUDA编写。

A在内存中是131262 x 1380,因此这意味着如果我使用完整的SVD分解,则矩阵U将不适合我的GPU。仅U个就占用131262 ^ 2 * 4 = 68918850576字节。

我希望cuSOLVER的cusolverDnSgesvd可以产生截短的SVD,而仅提供足够的内存来容纳截短的SVD,但事实并非如此。 cusolverDnSgesvd的文档建议,对于mxn mtx A,即使您使用jobu ='S'选项,U也必须在内存中为mxm。

鉴于我的mtx A的大小,有人可以建议一种替代的稳定且希望快速的方法吗?我真的很感谢所有帮助!

我希望cuSOLVER的cusolverDnSgesvd可以产生截短的SVD,而仅提供足够的内存来容纳截短的SVD,但事实并非如此。 cusolverDnSgesvd的文档建议,对于mxn mtx A,即使您使用jobu ='S'选项,U也必须在内存中为mxm。

0 个答案:

没有答案