PETSc对稠密矩阵有多有用?


14

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

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

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

任何帮助深表感谢。

Answers:


7

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

对于组装的密集系统,PETSc当前使用PLAPACK,但是PETSc本机格式的矩阵分布并不是使通信最小化的最佳方法(对于大多数操作)。Jack Poulson,Matt Knepley和我已经讨论过将PETSc的稠密线性代数移植为使用Elemental,这是Jack更现代的稠密线性代数库。它尚未发生,但有时间我们会做。

如果需要功能全面的密集线性代数库,请使用Elemental。对于这些操作,它可能总是比PETSc具有更完整的API。如果您需要与稀疏或未组装的系统进行交互,那么坚持使用PETSc并提取将Elemental用于密集零件所需的内容(或者帮助我们将PETSc接口编写为Elemental)可能是有意义的。


如果我在共享内存系统上工作,您的答案是什么?
Inquest 2012年

1
您可以使用多个MPI进程或多个pthread。在编写适用于共享内存的并行软件方面,我看不出什么意义,因为通常您在编写分布式内存时考虑的内存位置相对于除最佳线程实现以外的所有性能都可以提高性能。如果只需要内部使用线程用于密集线性代数的“串行” API,则可以使用线程化BLAS。
杰德·布朗

我希望我的代码能在我的Xeon 12核心工作站上运行(到目前为止,我不再关注集群)。我正在将Intel MKL用于(线程)BLAS。您还会推荐我尝试PETSc吗?
Inquest 2012年

如果您想要的只是BLAS,则对它感到满意,并且已经编写了代码,只需使用它即可。如果您想要更大的灵活性和/或使用分布式内存的机会,则可能需要PETSc。
杰德·布朗

灵活性方面?分布式内存?
Inquest

5

Øñ3Øñ2

既然您提到您使用的是共享内存系统,所以我建议使用libFLAME和/或PLASMA,但是对于您的1级和2级操作,我认为这两者都不比供应商线程BLAS显着快。

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


因此,据我了解,每个随后的并行密集线性代数库都将尝试优化诸如特征向量计算,系统解而不是BLAS的运算。另外,Elemental看起来确实令人印象深刻。如果可以,我一定会试一试。
Inquest 2012年

他们通常会优化3级BLAS。原因是大多数使用该库的人都会进行大量的计算,这些计算通常可以映射到3级BLAS。
Jack Poulson '02

那是因为BLAS 1/2不能变得更好吗?(也许是因为表面体积特性?)O(N ^ 2)数据和O(N ^ 2)计算?
Inquest 2012年

这是因为BLAS 1和2在计算中通常是低阶项。高性能密集线性代数的整个“游戏”都将以正确的方式斜视每个操作,以便您可以致电xGEMM和朋友进行尽可能多的工作。
Jack Poulson '02

同样,是的,它们执行与备忘大致相同的失败次数的事实是为什么要尽可能避免使用它们的原因。
Jack Poulson '02
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.