Eigen 3 是一个不错的 C++ 模板库,其中一些例程是并行的。
cf Eigen 文档
并行化仅适用于 OMP,因此如果您打算使用 MPI(和 OMP)进行并行化,它可能不适合您的目的。#define EIGEN_USE_BLAS
Eigen 的一个很好的特性是,您可以通过简单地使用(和其他宏)为某些例程交换高性能 BLAS 库(如 MKL 或 OpenBLAS )。
同样,犰狳只允许节点级并行。根据我的经验,最好使用 Eigen,因为它更容易与 Eigen 中的原始 C++ 数组交互,这有助于使用其他库(例如 ARPACK++)。
根据我的经验,我建议不要将 GSL 用于线性代数。我发现它的性能不足,可用性比 Eigen 差。
如果您计划在多个节点上执行线性求解器(例如 BiCGstab),我建议您使用 Trilinos。由于 Trilinos 主页上提供了很好的示例,我在我的研究代码中使用了它,几乎没有深入研究它的文档。此外,它的性能还不错,并且可以通过在编译期间包含好的 BLAS/LAPACK 库来进行微调。
PETSc 也应该有类似的情况,尽管我从未积极使用过它的 LA 套路。以我的经验,PETSc 是依赖地狱,如果您想使用性能优化(例如针对您正在使用的 CPU 架构优化)版本的库,它需要。我认为,性能也应该相当不错,因为 PETSc 依赖于常见的 LA 库(BLAS、LAPACK、SCALAPACK 等)。
长话短说:为了在单个节点上实现互操作性和良好性能(使用 OpenMP),我建议将Eigen 与 OpenBLAS一起使用。如果您想通过 MPI 使用多个节点并让库弄清楚如何使用多个节点解决系统问题,请使用Trilinos。