● 摘要
SPH(Smoothed Particle Hydrodynamics)是流体动力学领域一种成熟且仍在不断发展的仿真方法,其被广泛的应用于影视、游戏、医学等各个领域中。SPH方法使用粒子离散化问题域,通过加权求和邻居粒子的贡献值来计算粒子的物理量。为了使得仿真效果更加逼真、细节更丰富,粒子规模被不断提高。SPH方法的计算量非常大,CPU已经难以满足SPH方法的计算需求,浮点性能超过CPU几十倍的GPU开始被用于加速SPH方法。目前,如何利用GPU加速SPH方法已经有了较大发展,从单GPU发展到多GPU,但是仍然有许多地方值得深入研究。
本文在分析本领域国内外典型研究成果的基础之上研究了如何利用GPU加速SPH方法,并在此基础之上设计并完成了面向SPH方法的并行加速平台。
虽然国内外对如何利用单GPU加速SPH方法已经有了比较成熟的研究结果,但是还有可以优化的余地。本文针对传统实现当中存在的分支问题以及邻域搜索范围过大分别提出了不同的优化方法。在网格边长为支持域半径的二分之一时,性能提升分别达到了约50%和约10%。
多GPU加速SPH方法是利用GPU加速SPH方法的发展趋势,并且已经有了一些研究成果发表。本文详细研究对比了不同的动态负载均衡方法,从通讯的角度考虑选择了空间分割方法。空间分割方法根据实现细节又可以被分为4种方法,本文从空间分割方法固有的一致性问题和GPU间通讯两方面出发对比了各自的优劣,结合单机多GPU的硬件特点选择了合适的空间分割方法。在对负载均衡和通讯优化以后,多GPU加速比呈现接近线性的增长,4GPU时的加速比能够达到3.7倍。
并行加速平台以C函数库的形式向用户提供一套开发接口。GPU集群库的编程模型将GPU集群抽象为一个称之为粒子系统的虚拟仿真环境,用户可以向其中添加不同类型的粒子、提交并执行用于控制粒子行为的kernel函数。这一设计使用户可以比较灵活的实现SPH方法,摆脱了和GPU集群开发相关的繁重工作,能够将研究精力集中于SPH方法本身。设计自动化加速平台时借鉴了很多单机多GPU加速方法的研究成果。负载均衡方法根据研究单机多GPU加速方法时对负载均衡的研究成果,选择了强扩展性强的ORB方法。通讯方面采用和单机多GPU加速方法类似的通讯策略,但是结合GPU集群的特点做了进一步的优化。