用于求解稀疏线性系统的 GPU 加速库

计算科学 并行计算 线性求解器 图书馆 显卡 预处理
2021-12-01 17:46:36

有几个库可以(迭代地)在多个 CPU 上并行求解大型稀疏线性方程组。我们的并行集群还连接了强大的 GPU,但到目前为止,我还没有找到任何可以并行使用 CPU 和 GPU 来求解稀疏线性方程组的求解器。

主要问题:实际上是否没有使用 CPU 和 GPU 的求解器,或者您能推荐我一个吗?

相关问题:许多求解器库可以使用用户定义的矩阵向量积,这是任何迭代求解器的基本操作。所以我可以使用 GPU 来帮助 CPU 计算矩阵向量积,但存在的问题是:当没有明确指定矩阵,而只是给出矩阵向量积时,(非常重要的)预处理器例程不能使用。任何想法如何克服这个问题?

1个回答

线性系统求解器通常受到内存访问的限制,因此在并行系统中通信成为瓶颈。通常只有非常大的系统(数百万个未知数)才能实现良好的扩展,对于较小的系统,使用单节点或单 GPU 求解器可能会更好。下面列出了我所知道的支持 GPU 的库,对于“通常的”CPU 求解器,请参阅Libraries for solve sparse linear systems

至于自定义矩阵向量乘积,这些库的主要问题之一是每个库都使用自己的稀疏矩阵表示。大多数情况下,它们基于 CSR、CSC 或 Ellpack 等标准格式,因此可能可以进行有效的转换,但无法实现位兼容。问题在于优化操作是不够的,这可以通过用户定义的运算符进行概括,而且还必须考虑每个操作的内存访问模式。如果您能想到一个既通用又高效的解决方案,请告诉我(您可能应该先写一篇论文)。

仅限 CUDA 的库:

  • cuSOLVER为密集和稀疏系统提供了几种直接方法。它是封闭源代码,与 CUDA 工具包捆绑在一起。
  • cuSPARSE提供不完全分解,可用作迭代方法的预处理器。它是封闭源代码,与 CUDA 工具包捆绑在一起。
  • CUSP提供迭代方法和多个预处理器,包括平滑聚合代数多重网格。它是免费和开源的。

混合或 CUDA 加速库:

  • SuiteSparse具有 CUDA 加速的 Cholesky 分解。它是免费和开源的。
  • SuperLU_DIST具有 CUDA 加速的 LU 分解。它是免费和开源的。
  • ViennaCL是一个使用 CUDA、OpenCL 和 OpenMP 进行并行化的库,但我不知道一个计算是否可以并行使用多个后端。它提供了多个迭代求解器和预处理器。它是免费和开源的。
  • AmgX提供代数多重网格和预处理迭代方法。它使用 CUDA、MPI 和 OpenMP 进行并行化。它具有商业和免费许可证,后者仅限于注册开发人员和非商业用途。