与 CUBLAS 不同,Cusolver 具有 Cholesky 分解。我看到cusolverDnDpotrsBatched
and cusolverDnDpotrfBatched
,但不幸的是我似乎无法cusolverDnDpotriBatched
在文档中找到。
有没有什么方法可以在没有大量开销的情况下进行批处理cusolverDnDpotri
,或者有什么方法可以做与 API 所做的等效的事情?
不幸的是,唯一的方法是编写自己的内核,因为没有“自动”方法可以将非批处理内核转换为批处理内核(编写性能良好的内核批处理版本本身就是一篇科学论文,很容易被高调的 HPC 会议接受)。
你确定你真的需要逆吗?逆运算通常可以表示为线性系统的解,您可以使用cusolverDnPotrsBatched
.
如果你真的需要逆,我能想到的唯一不需要编写 CUDA 代码的方法就是调用cusolverDnPotrsBatched
将右侧Barray
设置为一批恒等矩阵。这样,系统的解 Xi Ai * Xi = I
(覆盖Barray
)是矩阵 batch 的倒数Aarray
。它确实需要额外的内存,并且不如为逆向编写内核那么有效,但应该比顺序执行要快。
另一种选择是忘记矩阵是对称的,并将它们视为一般矩阵。然后,您可以使用 MAGMA 库及其magma_dgetri_outoflace_batched()
函数来反转矩阵(同样不是就地)。不幸的是,MAGMA 也不支持批量版本的对称逆。