Cuda 如何批处理cusolver-cholesky逆(potri)?

Cuda 如何批处理cusolver-cholesky逆(potri)?,cuda,cusolver,Cuda,Cusolver,Cusolver具有Cholesky分解,与CUBLAS不同。我看到了cusolverndpotrbatched和cusolverndpotrbatched,但不幸的是,我似乎无法在中找到cusolverndpotrbatched 有没有什么方法可以批量处理cusolverndpotri,而不需要大量的开销,或者有没有一种方法可以实现API的功能 不幸的是,唯一的方法是编写自己的内核,因为没有“自动”的方法将非批处理内核转换为批处理内核(编写性能良好的批处理内核版本本身就是一篇科学论文,很容易被

Cusolver具有Cholesky分解,与CUBLAS不同。我看到了
cusolverndpotrbatched
cusolverndpotrbatched
,但不幸的是,我似乎无法在中找到
cusolverndpotrbatched


有没有什么方法可以批量处理
cusolverndpotri
,而不需要大量的开销,或者有没有一种方法可以实现API的功能

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

你确定你真的需要倒数吗?逆运算通常可以表示为线性系统的解,对于线性系统,可以使用
cusolverdenportsbatched

如果你真的需要反向,我能想到的唯一不需要编写CUDA代码的方法就是调用
cusolverdenportsbatched
,将右侧
Barray
设置为一批标识矩阵。这样,系统<代码>席席AixI= i>代码>(覆盖<代码> Barray < /代码>)是矩阵批<代码> Aarray < />代码的逆。它确实需要额外的内存,效率不如编写一个反转内核,但应该比按顺序执行更快


另一种选择是忘记矩阵是对称的,而将它们视为一般矩阵。然后,您可以使用MAGMA库及其函数来反转矩阵(同样不在适当的位置)。不幸的是,MAGMA也不支持对称逆的批处理版本。

真正简短的答案是no@talonmies有没有一个原因,它没有包括在库索尔弗更新以及?这个问题将必须直接向NVIDIA。我不是说,编写批处理内核并不像在例程末尾添加
batched
那么简单。开发人员需要花费数周甚至数月的时间来做好这项工作并正确地优化代码。了解NVIDIA,他们将精力集中在最紧迫的问题上,因为他们(和其他任何公司一样)没有多余的开发人员时间来处理客户不需要的事情。现在如果我去解决
x
解决方案,这将大大降低程序的性能,而无需重新编写cholesky解算器。在
Ax=b
中,可以很容易地生成
b
,但是要处理的
b
s数量非常多,而
a
s数量级更少。这意味着我不能从内存中读取
b
s,而是动态生成它们。这只有通过编写自己的解算器才能实现。用cholesky逆变器替换非cholesky逆变器将有可能在不改变许多代码的情况下提高性能。