据我了解,多重网格方法通过解决同一问题的粗略版本(通过消除低频误差)然后投影回精细网格以消除高频误差来解决线性系统。对于大型系统,我可以看到如何在每个网格级别并行实现迭代方法。这种方法是否可以很好地并行扩展?算法中是否还有其他可以并行利用的并发源?
如何并行化求解线性方程组的多重网格方法?
计算科学
线性代数
并行计算
多重网格
2021-12-22 03:49:37
1个回答
并行几何多重网格很容易在结构化网格上实现。代数和非结构化多重网格更具技术性,请参阅此答案以获取实现的链接。
在乘法方法中(例如-cycles),一次只能计算一个级别。由于层数为在哪里是自由度的数量和是粗化因子(通常约为或者在尺寸),这个对数项是不可删除的。加法方法牺牲了一些常数因子,但可以同时计算所有水平,从而将对数因子减少到. 我还没有看到真实硬件的演示,其中增加的并发性证明了较差的常量和降低的加法方法的鲁棒性。
Gauss-Seidel 是一种非常流行的平滑器,它是乘法的,并且似乎不能有效地并行化。对于结构化网格上的简单离散化,并且当内存带宽不是问题时,红黑高斯-赛德尔的经典解决方案是合理的。对于更复杂的问题和现代硬件,Adams (2001)展示了一种更有效的算法。对于许多问题,在每个子域上使用独立 Gauss-Seidel 的简单方法是完全令人满意的。Gauss-Seidel 的替代方法是使用阻尼雅可比或多项式平滑器,参见Adams、Brezina、Hu 和 Tuminaro (2003)进行比较。这些平滑器的性能模型类似于任何其他模板计算,因此具有最佳的弱可扩展性,对于足够大以覆盖延迟的子域。
在实践中,粗网格很快就达到了强大的可扩展性限制(超过此限制,添加更多进程会增加运行时间),因此它们应该驻留在更小的 MPI 通信器上。这给实现增加了一些轻微的复杂性。对于粗略层次结构过多而无法继续粗化的问题,粗略层次求解可能成为瓶颈。
为了测试各种并行多重网格方法,我建议使用像PETSc这样的库,它允许您用很少的用户代码运行许多不同的算法。
其它你可能感兴趣的问题