PETSc 对密集矩阵有多大用处?

计算科学 线性代数 宠物 布拉斯
2021-12-01 00:49:17

无论我在哪里看到,PETSc 教程/文档等都说它对线性代数很有用,并且通常指定稀疏系统会受益。稠密矩阵呢?我担心为密集的 A解决Ax=bAx=bA

我用 Fortran 编写了自己的 CG 和 QMR 代码。基本构造是撕开伪代码并在可能的情况下添加 BLAS 例程(和) ddot,并进行一些自我调整。这与 PETSc 相比如何?dnrmdgemv

我知道最好的答案是我自己尝试,但由于时间和其他原因,这是不可能的。

任何帮助深表感谢。

2个回答

如果您有具有结构的密集矩阵(例如快速变换、Schur 补码等),PETSc 可能会很有用。在这些情况下,您不会组装完整的矩阵。

对于组装的密集系统,PETSc 目前使用 PLAPACK,但 PETSc 原生格式的矩阵分布并不是最小化通信的最佳方式(对于大多数操作)。Jack Poulson、Matt Knepley 和我已经讨论过移植 PETSc 的密集线性代数以使用Elemental,这是 Jack 更现代的密集线性代数库。这还没有发生,但我们会在有时间的时候做。

如果想要一个功能齐全的密集线性代数库,请使用 Elemental。对于这些操作,它可能总是比 PETSc 拥有更完整的 API。如果您需要与稀疏或未组装的系统进行交互,那么坚持使用 PETSc 并提取您需要使用 Elemental 处理密集部分(或帮助我们编写 PETSc 与 Elemental 的接口)可能是有意义的。

重要的是要意识到并行密集线性代数库通常专注于 3 级 BLAS 例程(执行处理数据的例程)和更高级别的功能,如分解和特征求解器。他们通常不会调整您所指的级别 1 和级别 2 操作。O(n3)O(n2)

既然您提到您在共享内存系统上,我会推荐libFLAME和/或PLASMA,但我认为对于您的 1 级和 2 级操作,两者都不会比供应商线程 BLAS 快得多。

Jed 推荐了Elemental,这是我碰巧开发的,但我要再次强调 1 级和 2 级运算不是并行密集线性代数库的主要关注点。老实说,我从未对这些例程中的任何一个进行基准测试。