Date: 2023-01-12
当你看到某个工程师电脑屏幕上出现花花绿绿的图案时,千万不要以为他在摸鱼,他很有可能在进行仿真计算。随着计算机技术的迅速发展,模拟仿真已经成为科学研究和工业设计的核心工具。
计算流体力学(Computational Fluid Dynamics,简称CFD)是仿真领域最具技术含量、算力需求最大的方向。它求解的方程是著名的N-S方程,千禧年七大难题之一,可谓“海森堡看了直摇头,诺贝尔奖得主绕道走”。为了获得精确的结果,需要使用计算机进行大量浮点运算,这对硬件的性能提出了很高的要求。
相比于CPU,GPU的峰值算力更高,数据吞吐量更大,为了提升模拟的效率,很多CFD软件都不同程度地支持GPU加速运算。那么这些CFD程序到底是如何应用GPU进行加速的呢?
一起来看CFD模拟的流程,先从CAD软件获得模拟对象的几何结构,然后进行网格划分,根据设置好的离散方法对控制方程(N-S方程)进行离散,得到一系列代数方程,最后根据上一个时刻流场的物理量,计算当前时刻流场的物理量,这样依次进行时间推进,直到完成我们需要的模拟。
根据空间迭代方法的不同,CFD的离散格式包括有限体积法、有限元方法、有限差分法等。
根据时间迭代方法的不同,CFD可以分成显式和隐式格式。在计算机条件欠佳的年代,人们首先发明了显式格式:即此刻的结果可以直接根据上一步的结果计算出来。对于每个网格,都需要进行类似的模板计算,而不同网格的计算在这一时刻又是互相无关的,我们为每个网格的计算分配一个计算核心从而实现并行计算。相比于CPU,GPU核心数量极大增加,计算效率自然可以大幅提升。而对于隐式格式,当前时刻的物理量需要通过求解与网格数量相同的大规模代数方程组来获得,而这个解方程的过程通常又可以转换成为大规模矩阵乘法或矩阵向量乘法的组合,通过调用高度优化的GPU数学库,也能够大幅提升计算效率。
在GPU并行化的帮助下,CFD模拟效率可以得到数量级上的提升,也因此可以提高研发效率,帮助我们在自动驾驶、航空航天、智慧城市、天气预报、精准医疗、生物制药、环境治理等多个领域实现更快速的发展。
(解说词来源:李路,沐曦科学计算生态软件技术专家)