News

新闻中心

时间:2023-01-18来源:沐曦PDE 杨琦

摘要


CFD(Computational fluid dynamics),即计算流体力学,是一种通过数值模拟的方式来研究流体的的方法。它能够帮助我们精确地预测流体的运动轨迹,以及它们在运动过程中所产生的温度、压力等物理量的分布情况,为工程设计、科学研究等领域提供重要的理论依据和验证预测。同时,现实世界看不见的物理量可以通过艺术般的渲染,向人们展现多彩绚烂的流体世界。CFD仿真以及仿真结果的渲染涉及到巨大的计算量,需要极高的计算性能才能在可接受的时间内得到准确的结果。因此,加速技术对于CFD仿真具有非常重要的作用。GPU是高性能计算的加速利器,使用GPU可以对流体仿真进行有效加速,这在过去的智算芯闻中已经有过介绍 (GPU频借力,CFD上青云),本文将主要聚焦GPU加速CFD的具体原理,更进一步阐述CFD仿真中GPU加速的技术细节。


图1 CFD渲染在工业中的应用
来源: http://www.qy6.com/cpdq/showprod15439420.html


工业和学术领域对于计算流体力学仿真加速的需求巨大,通往计算结果这座罗马城的道路当然越多越好。


早期的CFD加速技术依赖于基于CPU多核的分布式计算,将整个计算网格进行划分,每一块分配到单个CPU核心中进行单独处理,并行计算多块中的数学物理过程,最终得到某一时刻下的整体计算结果,分成的单一块被称为单元格(block),在CFD分布计算中,单元格之间的缓存信息传递是指在进行计算时,需要在相邻的单元格之间传递信息,这些信息可能包括流体的物理量(比如速度、压力等)、边界条件、源项等。这些信息在单元格之间传递时可以使用缓存(buffer)来存储,以便在计算过程中快速访问。


在进行CFD分布计算时,通常会使用两种方法来实现单元格之间的缓存信息传递:

1. 使用邻接矩阵存储单元格之间的关系,并使用缓存来存储信息。

2. 使用链表存储单元格之间的关系,并使用缓存来存储信息。


这两种方法都可以在计算过程中快速访问单元格之间的信息,但具体使用哪种方法要根据具体情况而定。然而,随着分块数量的增加,由于离散方程的特性,单元格边界上的网格需要与其它相邻单元格网格进行信息交换,也即需要在不同的CPU 线程之间进行信息传递,成为计算效率的阻碍,导致无限的分块甚至会造成计算时间的增加。因此,近年来,CFD加速技术已经扩展到图形处理单元(GPU)上。与CPU分布式计算不同,GPU加速技术直接将矩阵向量元素的计算分配到单个GPU核心上,避免了单元格之间的信息传递。因此,从图2中可以看出,在足够多的核心的情况下,整体计算时间直接取决于单个GPU核心的计算效率,相比于CPU分布式计算具有天然的优势。


图2 GPU 投入更多的晶体管用于并行计算
来源:https://docs.nvidia.com/cuda/cuda-c-programming-guide/_images/gpu-devotes-more-transistors-to-data-processing.png


在实际应用中,CFD加速技术的选择取决于计算流体力学仿真的具体需求。如果需要处理的网格量较小,可以选择基于CPU多核的分布式计算,这种技术简单易行,构建起来也比较容易。但是,对于需要处理的网格量较大的情况,如果采用GPU加速技术,则可以更高的提升计算效率缩短计算时间,同时还可以减少计算所需的硬件成本


在现代的CFD仿真中,GPU加速技术已经成为了主流的选择,可以为工程设计、科学研究等领域提供了更强大的工具。随着硬件技术的不断发展,GPU加速技术在CFD仿真领域的应用前景一片光明。


起步:GPU加速CFD计算原理


GPU加速CFD的计算原理具体来说,首先需要将CFD仿真的网格数据划分为若干个小块,然后分别计算每个小块中的物理量。对于每个小块,可以通过计算流体力学模型的基本方程来确定它的物理量。例如,对于Navier-Stokes方程,可以使用差分法求解,并利用欧拉法或隐式欧拉法等数值解法来求解。


接着,需要将每个小块的计算分配到单个GPU核心上进行处理。这可以通过编写专门的程序来实现,这些程序通常使用专门的编程语言,如CUDA或OpenCL,来实现对GPU的控制和调用。通过这些程序,可以实现对GPU的高效调用,从而大幅提高CFD仿真的速度和效率。


最后,需要将每个小块的计算结果组合起来,得到整个CFD仿真的结果。这可以通过合并小块的结果来实现,或者通过某种方法来重构小块的结果,使得它们可以直接转化为整个CFD仿真的结果。


GPU加速CFD的大部分工作集中在实现稀疏矩阵相乘的并行以节省求解时间。而工程CFD应用中,一般使用迭代法获得结果。矩阵求解的迭代法是指通过多次迭代来解决矩阵方程的一类方法。矩阵求解的迭代法通常包括两个步骤:迭代更新终止条件判断。首先,根据矩阵方程的基本性质,计算出一个初始的近似解,并通过迭代更新的方式来逐步接近真实的解。具体来说,每次迭代都会计算出一个新的近似解,并将其用于下一次迭代。这个过程会不断重复,直到达到终止条件为止。终止条件判断是指在每次迭代后判断是否已经满足了终止迭代的条件。通常,这个条件会包括两个部分:最大迭代次数解的精度。最大迭代次数表示迭代的最大次数,一旦达到这个次数,迭代就会终止。解的精度表示解的精度要求,如果当前解的精度已经达到了要求,迭代也会终止。矩阵求解的迭代法通常用于求解大规模的矩阵方程,因为它具有较高的计算效率和较小的存储开销。同时,由于每次迭代都只需要计算一个新的近似解,因此矩阵求解的迭代法还具有很好的可扩展性,可以通过增加迭代次数或提高解的精度来提高求解的准确度。矩阵求解的迭代法有许多种不同的具体实现方式,常用的迭代法包括Jacobi迭代、高斯-赛德尔迭代、SOR迭代,PCG,GMRES和PBiCG等。这些迭代法各有优缺点,需要根据具体情况选择合适的方法。下面举个例子:


图3 求解矩阵示例


观察以上矩阵,通常的求解方法为求逆运算,也即Ax=b, x=A-1b  。但是传统的求逆运算在计算机中会耗费大量的资源和时间,尤其当矩阵非常大的时候,常规运算无法满足科学计算的时间和资源要求。当矩阵为正定对称矩阵的时候,可以使用一种被称为预条件共轭梯度法(例如离散后的压力泊松方程)的方式来代替求逆工作,将求解原本的一元一次方程转换为求解一元二次方程(ϕ(x)= 1/2Ax2-bx)的最小值问题,最小值求解利用梯度下降法,为了确定梯度的方向以及下降的频率,利用共轭矩阵确定下降的参数,即称为共轭梯度下降法,同时为了加快收敛速度,使用梯度下降法之前,通过分解矩阵来集中分布的特征值的方法又称为预调件CG算法(共轭梯度法)[1]。PCG(Preconditioned Conjugate Gradient)是一种带预条件的共轭梯度法,是一种求解线性方程组的迭代法。它的基本思想是在每次迭代时,通过预条件处理来改善矩阵的特征值分布,从而提高迭代速度和精度。在PCG算法中,主要的运算包括内积、向量加法和向量乘法等。这些运算可以直接在GPU上进行,并可以利用GPU的并行处理能力来大幅提高运算速度,例如PCG算法中存在大量的向量(a)矩阵(M)相乘的过程,实现矩阵中M11∙a1, M12∙a2, M13∙a3 …… 在单个GPU核心中的计算过程同时进行,便实现了GPU的并行加速功能。


升空:GPU部分加速CFD计算


针对矩阵计算的加速是 GPU 加速 CFD 计算中的重要一环,因为这可以大大缩减 CFD 中最耗时的求解器的运行时间,提升 CFD 整体的运行效率。这对于工业和学术领域都有着重要的意义。例如,在 CFD 压力求解器中,泊松方程是一个重要的部分。我们可以结合开源 CFD 软件 OpenFOAM 和数学库 PETSc 联合 HYPRE,提供一个解决方案。这种方案可以用来对比压力方程在多核 CPU 和单颗 GPU 下的求解时间。通过使用 GPU 加速,我们可以显著地缩短求解时间,大大提高运行效率。


例如,我们可以比较压力方程在多核 CPU 和单颗 GPU 上的求解时间。在多核 CPU 上,通常需要数十个核心来运行压力方程,其中每个核心都负责一部分计算。CPU 核心之间的通信和同步需要额外的时间,而GPU 可以提供更高的计算带宽和更大的存储容量,从而更好地处理大规模的数据。这些优点使得 GPU 在解决压力方程时具有优越的性能,能够大大缩短求解时间,提高 CFD 计算的整体效率。


图4 不同求解器在CPU和GPU下的计算效率对比


观察上图,该算例基于800万网格的方腔驱动流算例,计算软件为开源的OpenFOAM,使用求解器为icoFOAM,从图中可以观察到,经过优化后的PETSC-HYPRE联合方案(Nvidia A100)对比40核心CPU(AMD EPYC 7)加速比达到了8.39倍,与NVIDIA开发的AMGX求解器的加速比接近。


通常的压力速度求解,压力方程往往占据百分之五十以上的计算时间,优化压力泊松方程的求解能够有效的降低CFD总体计算时间,在一定程度上,GPU部分加速CFD计算中,压力方程的并行为首选方案。


CFD并行加速的最终目标自然是实现全步骤的并行加速,包括并不仅限于压力、速度方程求解、网格、矩阵处理,以及其中隐含的各种算法,在并行方案中都需要得到优化。针对这些目标,CFD 软件开发商需要继续探索各种不同的技术和方法,提供更先进的 GPU 加速解决方案。这些解决方案包括但不限于使用高性能编程语言来实现压力方程的并行求解;使用高性能数学库,如 cuBLAS 或 cuSparse,来提高矩阵计算的效率;以及使用高性能通信库,如 MPI 或 P2P,来优化网格处理和数据交换。此外,CFD 软件开发商也可以通过优化软件的设计和架构,来支持更大规模的 CFD 计算和更多核的 GPU 配置。这可以通过采用面向对象的编程模型,提供更加灵活的代码结构,以便在不同的平台和硬件上实现最佳的性能。


翱翔:GPU全步骤加速CFD计算


全步骤的CFD加速在实际工程应用中十分重要,通过GPU优化大幅减少全过程计算时间,能够大大减少工程应用中的等待时间,提高工作效率。在全步骤 GPU 加速方案中,针对不同的求解器和模型(如湍流、传热和燃烧模型等),优化的内容各不相同。例如,对于汽车空气动力学仿真,仿真案例可能会非常大,通常会超过 30 亿个单元。运行这样大规模的仿真需要数千个核心和大量的计算时间,有时甚至需要数周。为了缩短仿真时间,提高计算效率,并降低功耗,我们可以尝试完全在 GPU 上运行这些仿真。这样,可以利用 GPU 的高性能和并行计算能力,大大提高计算速度,缩短仿真时间。要实现完全在 GPU 上运行仿真,需要使用适用于 GPU 的 CFD 软件,并在设置求解参数时指定使用 GPU 进行计算。此外,为了最大化利用 GPU 的性能,还需要进行软件和算法优化,使它们能够充分利用 GPU 的特性。通过这些措施,可以将仿真时间从数周减少到几天,或者从几天减少到几小时,同时大幅降低功耗。


图5 利用GPU进行汽车空气动力学仿真的加速比[2]
来源: https://www.ansys.com/zh-cn/blog/unleashing-the-power-of-multiple-gpus-for-cfd-simulations


上图展示的仿真是使用 Fluent 在不同的 CPU 和 GPU 配置上运行基准的 DrivAer 模型,计算汽车空气动力学案例时的性能对比。结果显示,单个 NVIDIA A100 GPU 的性能比采用 80 个 Intel Xeon Platinum 8380 核心的集群高 5 倍;如果扩展到 8 个 NVIDIA A100 GPU,那么仿真速度可提升 30 倍以上。在原生 GPU 求解器上运行仿真可以对公司的可持续工作和减少等待结果的时间产生重大而直接的影响。使用 GPU 加速仿真可以更快地获得结果,同时保证结果的可靠性。例如,在汽车工程领域,使用 GPU 加速仿真可以更快地完成车身气动学分析,并且可以对多种不同的设计变体进行模拟,从而快速找到最优设计。这有助于提高汽车制造商的效率,更快地推出新产品,并有效地降低设计和生产成本。在航空航天领域,使用 GPU 加速仿真可以更快地完成飞行器设计分析,包括气动学分析、结构动力学分析和控制动力学分析等。这有助于提高飞行器的性能和安全性,同时也有利于快速验证新设计方案,并有效地降低研发和试验成本。


瞭望:AI结合GPU加速CFD计算


AI和GPU都是高性能计算的重要手段,结合起来可以在CFD计算中实现更高效的加速。人工智能通过深度学习模型来预测流体特征,包括流速、压力、温度等信息。这些信息可以通过流体动力学方程模拟得到,并通过深度学习模型学习和优化,从而获得较好的预测效果。AI可以通过模拟和优化方法,对网格分布和大小进行调整,以便在CFD计算中获得更高的精度和更快的速度。在流量求解器中,通过AI预测流体特征并优化流量方程,并通过GPU进行并行计算,可以加速提高求解的效率。


此外,通过AI预测CFD模型中的不确定性,并通过GPU进行并行优化,可以有效地提高CFD计算的效率。通过这种方式,AI和GPU结合起来,可以为CFD计算提供更高的性能和更快的速度,为工程设计和科学研究带来更多的便利。AI 在计算流体动力学(CFD)领域中主要有两种应用方式:物理智能网络 (PINN) 生成对抗网络 (GAN)


图6 PINN示例图[3]
来源:A High-Performance and Flexible Deep Learning Framework for Dynamic Neural Networks. Journal of Machine Learning Research


PINN 是一种基于神经网络的方法,其通过学习和预测流体流动的物理特征来高效地解决高维度非线性问题和高计算量的问题。受此思想启发,学者们进一步提出了具有更强泛化性的算子学习方法,例如傅里叶神经算子(FNO)。基于这类方法,我们能够使用网络结构如卷积神经网络 (CNN)、循环神经网络 (RNN) 和注意力机制 (Attention) 等来学习和预测流体流动的物理特征。生成对抗网络 (GAN) 是一种生成模型,在 CFD 领域中主要用于流场生成和样本增强。通过学习真实流场的特征来生成新的流场样本,来增加训练数据的多样性,提高网络的性能。


生成对抗网络 (GAN) 是一种生成模型,在 CFD 领域中主要用于流场生成和样本增强。通过学习真实流场的特征来生成新的流场样本,来增加训练数据的多样性,提高网络的性能。


通过结合这两种方法, AI 在 CFD 领域中可以更好地解决复杂的流体流动问题,提高计算效率和预测精度。并在工业和航空领域有着广泛的应用。


以百度飞桨为例,它是一款深度学习框架,为了支持物理智能网络 (PINN) 等科学计算类任务, 依托于飞桨核心框架,新增了函数式自动微分接口和部分算子高阶自动微分的功能。在 PINN 中,需要通过计算损失函数对网络参数的梯度来更新参数, 而这个梯度的计算通常需要求解大量的非线性方程,自动微分的出现就可以帮助开发者高效地计算这些非线性梯度。飞桨的自动微分通过在计算图节点中进行符号微分,并用数值存储节点间的微分结果,实现比数值微分更精确、比符号微分更高效的微分机制[4]


科学计算任务对框架提出了新的需求:(1)由于损失函数中存在方程部分,功能上要求支持更高阶的微分。(2)在用户接口上,需要提供更加贴近数学公式的函数式自动微分接口。为了满足这些需求,框架中增加了高阶导数算子,并在设计基础算子体系时考虑到了支持不限阶数的自动微分。同时,飞桨也提供了 jacobian、hessian、jvp 和 vjp 等函数式自动微分接口,方便用户构建方程。整个过程可以从下图中窥探一二。总之,GPU在AI加速方面效果很好,可以大幅提升AI+CFD 的研发和应用效率。


图7 飞浆平台自动微分接口

来源: https://www.cnblogs.com/wujianming-110117/p/14747206.html


GPU在CFD加速方向研究火热,在工程应用中的主要场景主要有航空航天、汽车设计、医疗制药和城市防洪[5-7]等。总之,GPU可以在不同层面上加速CFD 的模拟,从对求解器的加速,到全流程加速,再到通过加速AI 训练和推理加速CFD的研究和应用,GPU在CFD模拟应用中发挥越来越重要的作用, CFD计算通过GPU来实现腾飞的路径越来越清晰,随着计算机硬件和软件技术的发展,我们也可以期待看到 CFD 计算在更多方面取得新的突破。


参考资料


[1] Fletcher, R. (1964). Function minimization using conjugate gradients. Computer Journal, 7(3), 149-154.
[2] Giovanni Petrone, https://www.ansys.com/zh-cn/blog/unleashing-the-power-of-multiple-gpus-for-cfd-simulations, 2022
[3] Meng, Xuhui & Li, Zhen & Zhang, Dongkun & Karniadakis, George. (2019). PPINN: Parareal Physics-Informed Neural Network for time-dependent PDEs.
[4] Li, J., Li, Y., & Duan, Y. (2019). Fluid: A High-Performance and Flexible Deep Learning Framework for Dynamic Neural Networks. Journal of Machine Learning Research, 20(44), 1-5.
[5] Walden, Aaron, et al. "A mixed precision multicolor point-implicit solver for unstructured grids on GPUs." 2019 IEEE/ACM 9th Workshop on Irregular Applications: Architectures and Algorithms (IA3). IEEE, 2019.
[6] Ames, Jeff, et al. "Multi-GPU immersed boundary method hemodynamics simulations." Journal of computational science 44 (2020): 101153.
[7] Fernández-Pato, Javier, and Pilar García-Navarro. "An efficient gpu implementation of a coupled overland-sewer hydraulic model with pollutant transport." Hydrology 8.4 (2021): 146.

  • 国内商务合作 Business@metax-tech.com
  • 国际商务合作 International.Business@metax-tech.com
  • 媒体合作 PR@metax-tech.com