用于测试的矩阵 (A) 是通过在 20x20x20 网格上使用 7 点模板获得的3d 拉普拉斯矩阵 => 矩阵的大小为 8000 x 8000。这是一个有 7 个对角线的带状矩阵。
RHS (b) 是通过将 A 乘以 1 的向量获得的。我想通过 GMRES 解决 Ax=b
对于 PETSC 和 CUSP,我只计算了 GMRES 求解器 200 次迭代所花费的时间(即不计算读取矩阵所花费的时间)
在 Petsc 上,计时是用 PetscGetTime() 完成的,而在 Cusp 上,计时是用 Cuda 事件完成的。
%--------------------------
计时
Petsc (1 cpu) 花了0.0558379 秒 完成 200 次 GMRES 迭代。
Cusp 花了0.1183 秒 来做同样的事情。
%----------------------------
如您所见,即使在单个处理器上,Petsc 也比 Cusp 库快 2.14 倍。使用超过 1 个处理器时,速度差距会变大(显然)。
该实验是在 运行CUDA 4.0的Ubuntu 10.10上的GTX 570卡上完成的,具有cusp v 0.3.1和推力 1.6.0
我已经阅读了 CUSP 的一位作者的这篇论文。但是,他们没有将 CUSP 与 Petsc 的性能进行比较。
该论文还说,用于存储稀疏矩阵的数据结构很重要。因此,他们提供了几种格式,如 DIA、ELL、HYB、COO 等,但即使在我全部尝试之后,Cusp GMRES 性能也没有改变,200 次迭代仍然需要 0.1183 秒。
这是我在使用 CUSP 时使用的 pastebin 上的(相当短的)GPU 代码。我不确定我是否以最佳方式使用 Cusp 库。
尽管 PETSc 有可能仍然确实比 CUSP 更好,但我想知道如果使用得当,CUSP 是否可以显着提高速度。
如果需要更多信息来回答这个问题,请告诉我。谢谢你。