如何使用 cusolver gesvd 函数从行主矩阵求解 SVD
How can solve SVD from row-major matrix using cusolver gesvd function
我是 cuda 的初学者。我想尝试使用 cusolver API 求解行主矩阵的 svd。但我对矩阵 A 的前导维度感到困惑。
我有一个行主矩阵 100x10。(例如,我有 100 个 10 维 space 的数据。)
作为 CUDA 文档,cusolverDnDgesvd 函数需要 lda 参数(矩阵 A 的前导维度)。我的矩阵是行优先的,所以我给了 10 给 cusolver gesvd 函数。但是功能不起作用。这个函数表明我的 lda 参数错误。
好的,我给 cusolver gesvd 函数 100。功能正常,但功能 (U、S、Vt) 的结果似乎是错误的。我的意思是,我无法从 USVt.
得到矩阵 A
据我所知,cuSolver API 假定所有矩阵都是列优先的。
如果我将矩阵更改为列优先,m 将低于 n(10x100)。但 gesvd 函数仅适用于 m >= n.
是的,我有麻烦了。我该如何解决这个问题?
Row-major、col-major和leading dimension是与存储相关的概念。矩阵可以存储在任一方案中,同时表示相同的数学矩阵。
为了获得正确的结果,您可以使用 cublasDgeam()
将行优先的 100x10 矩阵更改为列优先的 100x10 矩阵,这相当于在保持存储顺序的同时矩阵转置,然后调用 cusolver。
有很多资源在谈论存储顺序,
https://en.wikipedia.org/wiki/Row-major_order
https://fgiesen.wordpress.com/2012/02/12/row-major-vs-column-major-row-vectors-vs-column-vectors/
https://eigen.tuxfamily.org/dox-devel/group__TopicStorageOrders.html
Confusion between C++ and OpenGL matrix order (row-major vs column-major)
以及领先维度
你应该 google 他们。
我是 cuda 的初学者。我想尝试使用 cusolver API 求解行主矩阵的 svd。但我对矩阵 A 的前导维度感到困惑。
我有一个行主矩阵 100x10。(例如,我有 100 个 10 维 space 的数据。) 作为 CUDA 文档,cusolverDnDgesvd 函数需要 lda 参数(矩阵 A 的前导维度)。我的矩阵是行优先的,所以我给了 10 给 cusolver gesvd 函数。但是功能不起作用。这个函数表明我的 lda 参数错误。 好的,我给 cusolver gesvd 函数 100。功能正常,但功能 (U、S、Vt) 的结果似乎是错误的。我的意思是,我无法从 USVt.
得到矩阵 A据我所知,cuSolver API 假定所有矩阵都是列优先的。 如果我将矩阵更改为列优先,m 将低于 n(10x100)。但 gesvd 函数仅适用于 m >= n.
是的,我有麻烦了。我该如何解决这个问题?
Row-major、col-major和leading dimension是与存储相关的概念。矩阵可以存储在任一方案中,同时表示相同的数学矩阵。
为了获得正确的结果,您可以使用 cublasDgeam()
将行优先的 100x10 矩阵更改为列优先的 100x10 矩阵,这相当于在保持存储顺序的同时矩阵转置,然后调用 cusolver。
有很多资源在谈论存储顺序,
https://en.wikipedia.org/wiki/Row-major_order
https://fgiesen.wordpress.com/2012/02/12/row-major-vs-column-major-row-vectors-vs-column-vectors/
https://eigen.tuxfamily.org/dox-devel/group__TopicStorageOrders.html
Confusion between C++ and OpenGL matrix order (row-major vs column-major)
以及领先维度
你应该 google 他们。