Answers:
如果您具有结构密集的矩阵(例如快速变换,Schur补码等),则PETSc可能会有用。在这些情况下,您将不会组装完整的矩阵。
对于组装的密集系统,PETSc当前使用PLAPACK,但是PETSc本机格式的矩阵分布并不是使通信最小化的最佳方法(对于大多数操作)。Jack Poulson,Matt Knepley和我已经讨论过将PETSc的稠密线性代数移植为使用Elemental,这是Jack更现代的稠密线性代数库。它尚未发生,但有时间我们会做。
如果需要功能全面的密集线性代数库,请使用Elemental。对于这些操作,它可能总是比PETSc具有更完整的API。如果您需要与稀疏或未组装的系统进行交互,那么坚持使用PETSc并提取将Elemental用于密集零件所需的内容(或者帮助我们将PETSc接口编写为Elemental)可能是有意义的。
既然您提到您使用的是共享内存系统,所以我建议使用libFLAME和/或PLASMA,但是对于您的1级和2级操作,我认为这两者都不比供应商线程BLAS显着快。
Jed推荐了我碰巧开发的Elemental,但我会再次强调1级和2级运算不是并行密集线性代数库的主要重点。老实说,我从未对任何这些例程进行基准测试。