用于大型线性方程组的 c++ 库

计算科学 线性代数 并行计算 mpi
2021-12-15 23:43:02

我正在寻找使用并行化和共享内存来求解大型线性方程组(10e5)的库。1.稀疏,复杂对称,SPD。2.适用于高阶有限元法,DGFEM使用域分解。3. 适用于带有内置预处理器的迭代求解器。4. 适用于 C++ 和/或 MATLAB。操作系统首选 - Ubuntu。英特尔编译器。(Paradiso 不支持 intel Mkl)

4个回答

对于密集线性代数,LAPACK 和 BLAS 库几乎总是要走的路。有许多与 LAPACK 和 BLAS 接口的 C++ 包。

此空间中可能有用的其他一些软件包:

UMFPACK:非对称多正面方法,顺序但稳健

SuperLU:超节点稀疏 LU,具有并行变体(sharedmem 和 distmem)

TAUCS:sharedmem 并行多前端,可以利用复杂的对称性(我认为)

MyraMath:sharedmem 并行多前端,可以利用复杂的对称性,有一些有趣的算法来支持子结构/DDM(免责声明:我创作了这个)

根据我的经验,PARDISO 通常是最快的。

此页面提供了各种线性求解器之间的比较 http://www.netlib.org/utk/people/JackDongarra/la-sw.html

对于一个分布式的、基于 C++ 的求解器,它可以专门为稀疏矩阵处理 SPD 以及内置的预处理,我强烈推荐Elemental

Eigen 不使用并行性来求解线性系统(参见http://eigen.tuxfamily.org/index.php?title=FAQ#How_does_Eigen_compare_to_BLAS.2FLAPACK.3F中的评论)。

Trilinos提供了不同的线性求解器(直接、预处理器、迭代器)。

PardisoMUMPS是其他可以并行运行的直接求解器。