0

与 CUBLAS 不同,Cusolver 具有 Cholesky 分解。我看到cusolverDnDpotrsBatchedand cusolverDnDpotrfBatched,但不幸的是我似乎无法cusolverDnDpotriBatched文档中找到。

有没有什么方法可以在没有大量开销的情况下进行批处理cusolverDnDpotri,或者有什么方法可以做与 API 所做的等效的事情?

4

1 回答 1

1

不幸的是,唯一的方法是编写自己的内核,因为没有“自动”方法可以将非批处理内核转换为批处理内核(编写性能良好的内核批处理版本本身就是一篇科学论文,很容易被高调的 HPC 会议接受)。

你确定你真的需要逆吗?逆运算通常可以表示为线性系统的解,您可以使用cusolverDnPotrsBatched.

如果你真的需要逆,我能想到的唯一不需要编写 CUDA 代码的方法就是调用cusolverDnPotrsBatched将右侧Barray设置为一批恒等矩阵。这样,系统的解 Xi Ai * Xi = I(覆盖Barray)是矩阵 batch 的倒数Aarray。它确实需要额外的内存,并且不如为逆向编写内核那么有效,但应该比顺序执行要快。

另一种选择是忘记矩阵是对称的,并将它们视为一般矩阵。然后,您可以使用 MAGMA 库及其magma_dgetri_outoflace_batched()函数来反转矩阵(同样不是就地)。不幸的是,MAGMA 也不支持批量版本的对称逆。

于 2019-07-08T16:01:52.463 回答