论文部分内容阅读
格子玻尔兹曼方法(Lattice Boltzmann Method,LBM)是一种数值模拟方法,它建立在统计力学与分子运动论的基础上,架起微观与宏观、离散与连续的桥梁。该算法简单,易于实现,能够处理复杂的边界条件,且实验效果好。为了减少LBM模拟时间,本研究将并行技术与LBM结合并应用于流体模拟。在并行算法前,我们需要选择LBM模型,确定流体模拟的基本过程。按照松弛时间的不同,LBM可分为单松弛时间模型(single relaxation time,SRT)和多松弛时间模型(multiple-relaxation-time,MRT)。由于MRT模型模拟精度高、迭代次数少,能有效降低非物理震荡,具有更高的数值稳定性,因此本文以三维地下水流动为测试用例,采用D3Q19多松弛LBM模型对流体进行模拟。在MPI实现多松弛LBM(MRT-LBM)的并行过程中,我们将整个网格沿X方向进行数据划分,实现进程间的负载均衡。然后,我们详细分析了MRT-LBM算法的可并行性,找到所步骤间的依赖数据。再者,选用阻塞和非阻塞两种方式进行消息传递,只通信相邻格点所需的5个方向的数据,同时使用记数参数的方法减少通信开销,最终实现了算法的双节点多进程并行。实验结果表明,MPI程序具有一定的可扩展性,随着CPU核心的增加,加速比也在逐渐增加。针对密集型任务,单个GPU比单个CPU具有更强大的计算能力。因此本文在阻塞型MPI程序基础上结合CUDA实现了双节点多GPU的MRT-LBM算法并行。我们将整个离散网格均衡划分给每个CPU核心,一个CPU核心调度一个GPU设备,多个GPU同时计算,进而实现了双节点多GPU的并行。实验结果表明,在4个P100 GPU和4个Intel(R)Xeon(R)E5-2620 v4 CPU组成的集群环境下,加速比达到了182.66倍,其效果明显好于同等CPU数量的MPI并行。为了减少MPI通信时间和上下文切换的延迟,我们在阻塞型MPI+CUDA的基础上使用OpenMP技术在节点内以线程替换进程的方式,进而实现了MRT-LBM算法的多级并行。实验结果表明,在4个P100 GPU参与计算的条件下,阻塞型MPI+OpenMP+CUDA多级并行比阻塞型MPI+CUDA并行计算效率提高了8%以上。