Page 87 - 2025年第56卷第6期
P. 87

算,而计算任务主体由 GPU完成。程序由 C语言编写,编译时需要分别依次编译 GPU的 HIP接口
              代码和 MPI代码,计算任务提交采用 SLURM作业调度系统。


              3 算例分析


              3.1 理想模型中的精度验证 模型与程序的正确性是计算效率的基础。本研究在有限体积法求解浅水
              方程(非并行)代码        [28 - 31] 基础上增加了并行计算功能,即 “多节点- 多 GPU” 异构并行计算部分(MPI +
              GPU )。本节的主要目的在于通过两个经典算例着重对 MPI + GPU异构并行功能进行测试,包括在国产
              CPU?GPU平台上 MPI模块是否能够正确地处理通信和数据交换、GPU模块是否能够正确完成浅水方
              程求解计算、计算过程稳定性三个方面,从而确保模型的可行性、可靠性和一致性。
              3.1.1 一维溃坝算例 本算例为水力学计算领域广泛应用的一维溃坝水流基准算例                                     [17,32 - 33] 。考虑一平
              直均匀河道,长度 2000m,坡度 S= 0,摩阻 S= 0。河道 1000m处有一低坝,上游水深为 10m,下
                                              0          f
              游水深为 3m,溃坝前上、下游均为静水,计算网格单元尺寸为 4m。在大坝垮塌瞬间,坝上、下游
              形成非恒定急变流- 不连续波。下游因流量增加水位迅速上涨,形成涨水顺波向下游传播,上游则因
              下泄流量突然增加水位急剧下降形成降水逆波向上游传播。溃坝 50s时的瞬时水深线和流速的精确解
              和数值解如图 3所示。可以看出,并行和非并行数值解高度一致,且水深和流速与解析模型获得的精
              确解吻合较好,未见数值振荡,在间断波附近存在轻微数值弥散(可通过提高数值模型剖分精度进行
              抑制  [33] ),表明计算程序并行功能执行正常、精度较高。























                                               图 3 一维溃坝算例的水深和流速对比

              3.1.2 二维部分溃坝算例 本算例为一个部分溃坝二维算例,参考了 Fennema等                                [34 - 35] 的实验设置:部
              分水坝或水闸突然打开导致上游水体溃决,形成一道向下游扩散的洪水波,洪水波的前端呈现出明显
              的激波特征。由于初始条件存在不连续性,这对数值求解提出了较高要求。图 4(a)展示了模型计算区
              域几何形状,计算区域的长和宽均为 200m,溃口宽度为 75m。计算网格采用边长为 5m的正方形剖
              分,每行和每列均有 40个单元格。模拟期总时为 7s,共分为 7000个时间步,时间步长为 0.001s。上
              游水体的初始水深为 10m,下游水体的初始水深为 5m,计算区域的曼宁系数 n取 0。该算例不使用
              并行计算也可进行模拟,获得 t = 7s 时的水深见图 4(b),与文献[34]中的结果共同作为并行版计算结
              果的参照。为了验证 MPI + GPU代码的正确性,将计算区域分割为 4行、4列,共 16个子区域,分配
              给 16个进程,通过 4个节点调用 16块 GPU卡进行异构并行计算,所得 t = 7s 时的水深见图 4(c)。
              比较图 4(b)(c)中的结果可以发现,在计算误差范围内两者高度一致,而且与文献[34]吻合,表
              明 MPI + GPU并行计算功能得到了正确执行。本研究中未出现求解器崩溃,MPI + GPU模块表现出了
              优异的稳定性。



                                                                                                —  7 7 5 —
   82   83   84   85   86   87   88   89   90   91   92