选择可扩展线性求解器时应遵循哪些准则?

计算科学 线性代数 表现 并行计算 矩阵
2021-12-04 18:33:20

有许多不同的线性求解器,其中一些最适用于对角占优矩阵,一些适用于对称矩阵,一些适用于正定矩阵,一些适用于带状矩阵等......有直接方法,迭代方法,Krylov 空间方法等。 . 是否有一个很好的启发式方法来选择一个随着问题规模的增加而并行扩展的线性求解器?特别是,是否有某种框图可以为特定的矩阵系统类型指定一个有效(或最佳)的求解器?

2个回答

我认为“最佳”是指“最快的解决方案”。

我认为 PDE 求解器人员在针对某些离散化和问题(例如 Helmholtz 问题(例如,参见这个问题)和其他可以利用问题结构的情况)的最合适算法的建议方面有最好的建议。

从基本数值线性代数的角度来看,这里有一些通用的指导方针:

  • 如果您的问题是密集的,不是低秩的,并且足够小以适合内存,那么直接求解器是一个不错的选择。

  • 如果你的问题是病态的,预处理或正则化是个好主意。

  • 如果您可以利用结构(带状、对称性、对角优势),那么这样做将节省您的操作。

  • 如果您的问题稀疏且足够小,则稀疏直接求解器可以很好地工作。

  • 如果您的问题稀疏且大,请使用迭代求解器,因为填充会使稀疏的直接求解器无用。迭代求解器的功效取决于问题(请参阅此问题)并且取决于频谱。您可能想尝试所有这些,除非您的问题具有特定的结构,或者您从经验中知道某个算法对您的问题很有效。

  • 如果您的问题是密集且低秩的,您可以通过使用迭代求解器或专门的算法(需要特殊的问题结构,正如上面提到的偏微分方程)来利用该低秩结构。

在并行性方面,最好的算法最大限度地减少通信,这是通过相应地构建算法和数据来实现的。我不是这些问题的专家。我知道块循环矩阵分解在密集数值线性代数中很流行,而且……就是这样。我几乎完全在串行算法上工作,所以我将并行性的讨论留给其他人。

它可能甚至没有接近最佳值,但这是我使用的基本启发式方法:

  1. 不要使用直接求解器,除非所涉及的矩阵是对角矩阵、三对角矩阵、可以很容易地转化为三对角矩阵形式(如拆分算子方法),或者具有一些其他易于直接求解的属性。

  2. 使用您最喜欢的库使用的任何迭代求解器。迭代求解器往往更易于并行化。

请注意,如this answer所示,在许多特定情况下您确实需要一些特定算法。