如何批处理cusolver cholesky inverse(potri)?

时间:2019-07-08 15:35:17

标签: cuda cusolver

与CUBLAS不同,Cusolver具有Cholesky分解。我看到了cusolverDnDpotrsBatchedcusolverDnDpotrfBatched,但是很遗憾,我似乎在the documentation中找不到cusolverDnDpotriBatched

有没有什么方法可以批量cusolverDnDpotri而又没有大量开销,或者有什么方法可以等效API的工作?

1 个答案:

答案 0 :(得分:1)

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

您确定您确实需要逆运算吗?带有反函数的运算通常可以表示为线性系统的解决方案,对此您可以使用cusolverDnPotrsBatched

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

另一个选择是忘记矩阵是对称的,并将它们视为一般矩阵。然后,您可以使用MAGMA库及其magma_dgetri_outoflace_batched()函数对矩阵求逆(同样不能在原位)。不幸的是,MAGMA还不支持对称逆的批量版本。