如何通过CUDA使用cuSolver重复向前和向后求解?

如何通过CUDA使用cuSolver重复向前和向后求解?,cuda,gpu,cusolver,Cuda,Gpu,Cusolver,最近我发明了一种新方法。新方法在CUDA(每秒20到40帧)上运行得非常完美,我已经成功地对它进行了测试。当我试图与旧方法进行比较时,问题就出现了。旧方法是在CPU上实现的。它首先进行LU分解A=LU,然后向前+向后运行步骤来求解(LU)x=b。旧方法非常好的一点是,A没有变化,因此LU分解只能进行一次,开销只是前向+后向求解A是稀疏的和对称正定的。(我认为这在许多问题中是一种相当普遍的做法,例如,固定域中的流体模拟。) 为了公平比较,我想在GPU上实现旧方法。但是我在cuSolver或cuSp

最近我发明了一种新方法。新方法在CUDA(每秒20到40帧)上运行得非常完美,我已经成功地对它进行了测试。当我试图与旧方法进行比较时,问题就出现了。旧方法是在CPU上实现的。它首先进行LU分解A=LU,然后向前+向后运行步骤来求解(LUx=b。旧方法非常好的一点是,A没有变化,因此LU分解只能进行一次,开销只是前向+后向求解A稀疏的对称正定的。(我认为这在许多问题中是一种相当普遍的做法,例如,固定域中的流体模拟。)

为了公平比较,我想在GPU上实现旧方法。但是我在cuSolver或cuSparse中没有发现任何稀疏LU分解。我应该用其他图书馆来计算吗?我应该使用cusolverRfSolve()进行求解吗?如果是这样,为什么不输入LU,而将PQ输入此函数?有没有类似于我尝试做的工作示例


即使旧方法在GPU上运行较慢,我也希望看到它,这使我的新方法非常有用。

从文档中可以看出,
cusolverRfSolve
的预期用途需要以下调用:

  • cusolverRfCreate
  • cusolverRfSetup[主机/设备]