Supernodal vs. Multifrontal 矩阵分解

计算科学 稀疏矩阵
2021-11-26 04:14:49

通读 Tim Davis 的稀疏线性系统的直接方法一书,他说 matlab 可以使用超节点 Cholesky 分解,但从不使用多前 Cholesky 分解。至少在使用反斜杠运算符时。相比之下,在许多优化代码中使用的 HSL MA57 是一种稀疏对称的不定求解器,它使用了多前沿方法。

我对超节点和多额方法之间的区别只有一个非常基本的了解。所以我很好奇何时可以应用超节点与多额方法是否有限制?在它们都有效的情况下,它们之间是否有任何权衡可能导致一个比另一个更好?

1个回答

supernodal 和 multifrontal 方法都使用相同的想法实现高性能:使用类似 BLAS3 的矩阵内核对密集块执行矩阵运算。有很多报告比较了这些方法在各种矩阵上的具体实现,例如

http://www.numerical.rl.ac.uk/reports/ghsRAL200505.pdf

一般来说,我不知道有任何结果表明一种方法从根本上优于另一种方法。

有些矩阵非常稀疏,以至于超节点和多前沿方法的密集子矩阵方法不会导致最佳性能。参见,例如:

http://dl.acm.org/citation.cfm?id=1824814

正如您所指出的,MA57 是为对称不定矩阵设计的,当LLT并不总是可能的,但一个LDLT分解是。MATLAB 将 MA57 用于对称不定矩阵。看,

http://www.mathworks.com/help/matlab/ref/ldl.html

通过设置

spparms('spumoni',1);

在调用反斜杠之前,您可以查看您的特定矩阵正在使用哪些算法。有关更多信息,请参阅:

http://www.mathworks.com/help/matlab/ref/spparms.html