在计算科学中重新排序稀疏矩阵

计算科学 稀疏矩阵 矩阵
2021-12-18 12:22:13

本文档的第 3 页,有一些稀疏矩阵的矩阵形式。我想知道在物理、化学等遇到的计算问题中是否还有其他形式,这样对矩阵进行重新排序会加快计算阶段。矩阵重新排序的预处理开销应该通过计算步骤的增益来摊销。

2个回答

矩阵重新排序不仅对加速有用,而且通常是强制性的,以便获得在合理时间内运行的代码,特别是对于稀疏直接求解器。这些旨在保持在 LU 分解期间填充的额外条目的数量很小。例如,反向 Cuthill-McKee 排序是一种有用的启发式方法,可用于获得具有更小带宽的重新排序,从而在您分解矩阵时提供更少的额外非零条目。同样,近似最小度数排序旨在直接使用图论中的一些思想来减少填充。如果您想自己尝试它们,这两种方法都在 Matlab 中实现symrcmsymamd如果你想知道更多,你应该看看戴维斯的书第 7 章中的稀疏线性系统的直接方法。

如果您使用的是迭代求解器但您使用不完整的 LU 分解进行预处理,则相同的重新排序也很有帮助。如果您只使用迭代方法,您可以选择其他排序方式。独立集排序和多色排序(参见稀疏线性系统的迭代方法,第 12 章)可用于并行化 Gauss-Seidel 迭代,进而获得多重网格算法的并行实现。

重新订购系统的初始成本可以在以后加速收回。对于时间相关或非线性 PDE,您求解的不是一个而是多个线性系统,尤其如此。单个线性系统通常也是如此,但您应该根据您使用的方法、将排列应用于您选择的矩阵存储格式的成本等来做出判断。最后,对于离散化非结构化网格上的 PDE,您更有可能在链接的页面中使用“其他”格式之一,(j)和(k),而不是像带状对角线这样漂亮的格式。

在无聊的时刻,我比较了很多重新排序策略关于它们加速预处理器的能力。我把这个比较放在这里(在标题A comparison of reordering strategy之后):

http://www.dealii.org/developer/doxygen/deal.II/namespaceDoFRenumbering.html