Cusp 库的性能比 PETSC(GMRES 200 次迭代)差,为什么?

计算科学 宠物 表现 库达 格瑞斯
2021-12-19 16:42:43

我想比较CUSPPETSc库中 GMRES 实现的速度。

用于测试的矩阵 (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 是否可以显着提高速度。

如果需要更多信息来回答这个问题,请告诉我。谢谢你。

0个回答
没有发现任何回复~