如何并行化求解网格方程组的多重网格方法?


11

据我了解,多重网格方法通过解决相同问题的较粗略版本(通过消除低频误差)来解决线性系统,然后投影回细网格以消除高频误差。对于大型系统,我可以看到如何在每个网格级别并行实现迭代方法。这种方法是否可以并行扩展?算法中是否还有其他并发源可供并行使用?

Answers:


14

并行几何多重网格很容易在结构化网格上实现。代数和非结构化多网格技术性更高,请参见此答案以获取实现的链接。

在乘法方法(例如循环)中,一次只能计算一个级别。由于级别数是,其中是自由度数,是粗化因子(通常在维度上约为或),因此该对数项不可删除。添加剂的方法牺牲一些恒定的因素,但可以同时计算所有的水平,从而减少对数因子。我还没有看到在真实硬件上进行的演示,其中并发性的提高证明常数方法较差,而加法的健壮性却有所降低。VlogcNNc2d3ddlog2logcN

高斯-塞德尔(Gauss-Seidel)是一种非常流行的平滑器,具有乘法功能,而且似乎无法有效并行化。对于结构化网格上的简单离散化,并且当不考虑内存带宽时,采用红黑高斯-赛德尔的经典解决方案是合理的。对于更复杂的问题和现代硬件,Adams(2001)展示了一种效率更高的算法。对于许多问题,在每个子域上使用独立的Gauss-Seidel的简单方法是完全令人满意的。Gauss-Seidel的替代方法是使用阻尼Jacobi或多项式平滑器,请参见Adams,Brezina,Hu和Tuminaro(2003)进行比较。这些平滑器的性能模型类似于任何其他模具计算,因此具有最佳的弱可伸缩性O(N/P) 足以覆盖延迟的子域。

实际上,粗网格可以迅速达到强大的可扩展性限制(超过此限制,添加更多进程会增加运行时间),因此它们应驻留在越来越小的MPI通信器上。这给实现增加了一些轻微的复杂性。对于其中粗级结构太多而无法继续进行粗化的问题,粗级求解可能会成为瓶颈。

为了测试各种并行的多重网格方法,我建议使用像PETSc这样的库,该库允许您用很少的用户代码运行许多不同的算法。


Adams(2001)的链接不再起作用。我相信您要说的文章就是这样的:ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=1592790&tag=1。“一种用于多网格平滑器的分布式内存非结构化高斯-赛德尔算法”让我知道我是否错了。
nukeguy
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.