使用 cuSolver 计算一般矩阵的逆的最有效方法是什么?
What is the most efficient way to compute the inverse of a general matrix using cuSolver?
我想使用 cuSolver 包中的 getrf
和 getrs
并用 B=I
.
求解 AB=X
这是解决这个问题的最佳方法吗?
如果是这样,在设备内存中创建主列单位矩阵 B
的最佳方法是什么?可以使用 for
循环轻松完成,但这会 1. 占用大量内存,并且 2. 速度很慢。有没有更快的方法?
请注意,不幸的是,cuSolver 不提供 getri
。因此我必须使用 getrs
.
直到CUDA提供了LAPACK API getri
,我认为getrf
和getrs
是大矩阵求逆的最佳选择
矩阵 B
与 A
的大小相同,所以我认为分配 B
不会使该任务消耗比其 input/output 大得多的内存数据确实如此。
getrf
和getrs
的复杂度分别是O(n^3)
和O(n^2)
,而设置B=I
是O(n^2) + O(n)
。我认为这不应该成为整个程序的瓶颈。您可以分享您的实现,以便我们检查问题出在哪里。
我想使用 cuSolver 包中的 getrf
和 getrs
并用 B=I
.
AB=X
这是解决这个问题的最佳方法吗?
如果是这样,在设备内存中创建主列单位矩阵
B
的最佳方法是什么?可以使用for
循环轻松完成,但这会 1. 占用大量内存,并且 2. 速度很慢。有没有更快的方法?
请注意,不幸的是,cuSolver 不提供 getri
。因此我必须使用 getrs
.
直到CUDA提供了LAPACK API getri
,我认为getrf
和getrs
是大矩阵求逆的最佳选择
矩阵 B
与 A
的大小相同,所以我认为分配 B
不会使该任务消耗比其 input/output 大得多的内存数据确实如此。
getrf
和getrs
的复杂度分别是O(n^3)
和O(n^2)
,而设置B=I
是O(n^2) + O(n)
。我认为这不应该成为整个程序的瓶颈。您可以分享您的实现,以便我们检查问题出在哪里。