与CUBLAS不同,Cusolver具有Cholesky分解。我看到了cusolverDnDpotrsBatched和cusolverDnDpotrfBatched,但不幸的是,我似乎在the documentation中找不到cusolverDnDpotriBatched。
有没有什么方法可以在不增加大量开销的情况下批量处理cusolverDnDpotri,或者有什么方法可以做到与API所做的等同?
发布于 2019-07-09 00:01:52
不幸的是,唯一的方法是编写自己的内核,因为没有“自动”方法将非批处理内核转换为批处理内核(编写一个性能良好的批处理版本的内核本身就是一篇科学论文,很容易被高调的HPC会议接受)。
你确定你真的需要反转吗?逆运算通常可以表示为线性系统的解,对于线性系统,您可以使用cusolverDnPotrsBatched。
如果您真的需要反转,我能想到的唯一不需要编写CUDA代码的方法就是调用cusolverDnPotrsBatched,并将右侧的Barray设置为一批单位矩阵。这样,系统Ai * Xi = I (其重写Barray)的解Xi是矩阵批次Aarray的逆。它确实需要额外的内存,而且效率不如为逆序编写内核,但应该比按顺序执行更快。
另一种选择是忘记矩阵是对称的,并将其视为一般矩阵。然后,您可以使用MAGMA库及其magma_dgetri_outoflace_batched()函数来反转矩阵(同样不是就地)。不幸的是,MAGMA也不支持对称逆的批处理版本。
https://stackoverflow.com/questions/56938289
复制相似问题