随着 DeepSeek 的大火,也让人们对于英伟达 GPU 及其配套的统一计算设备架构 CUDA(Compute Unified Device Architecture)有了更多了解。

而在近日,深圳北理莫斯科大学杨杨副教授和合作者,围绕英伟达 GPU 研发出一款新算法。具体来说,该团队研发出一种使用 GPU 并行 CUDA 编程技术的键型近场动力学并行算法——PD-General。

在 AI 领域有“得算法者得天下的说法”,本次算法的最大价值在于不必更换 GPU,就能让计算效能实现最大化。

PD-General 能够充分利用英伟达 GPU 中的内部结构,通过读取 GPU 内部寄存器显卡,在无需更换更高级显卡的同时,就能提升计算效率,从而能够减少对于更高水平硬件的依赖。哪怕使用普通的家用 GPU,也能将原本需要几天才能完成的计算任务缩短到几小时甚至几分钟。


(来源:Engineering Analysis with Boundary Elements)

与串行程序(Serial)和 OpenMP 并行程序相比,本次算法可以分别实现高达 800 倍和 100 倍的加速。(注:串行程序,指的是按照指令顺序一个一个地执行的程序,前一个任务完成后下一个任务才会开始;OpenMP(Open Multi-Processing)并行程序,是一个用于共享内存并行编程的 API,主要用于 C、C++和 Fortran 语言。)

在典型的一百万粒子模拟中,当在低端 GPU PC 上执行 4000 次迭代时,本次算法在单精度条件下需要 5 分钟,在双精度条件下需要 20 分钟,这一速度能让科研人员进行复杂材料设计和损伤模拟时,可以更快地获得结果。

此外,研究人员还提出一种通用寄存器技术,其能用于高速访问寄存器,从而减少全局存储器访问。

该算法还能实现粒子并行的模式,并能通过使用寄存器针对带宽实现更有效的访问。(注:粒子并行是一种利用并行计算技术加速粒子系统模拟的方法,其基本思想是将粒子系统的计算任务分配到多个处理器或计算节点上,通过同时执行这些任务来提高计算效率。)

相比串行程序和其他并行算法,本次算法能够实现显著的加速,从而能够针对键型近场动力学(BBPD,bond based peridynamic)中的变形和裂纹扩展进行快速分析,同时这一算法也适用于其他近场动力学理论。

日前,相关论文以《基于 GPU 并行计算的快速键型近场动力学程序》(A fast bond-based peridynamic program based on GPU parallel computing)为题发在Engineering Analysis with Boundary Elements[1]。

深圳北理莫斯科大学杨杨副教授是第一作者兼通讯作者,南方科技大学刘轶军讲席教授和硕士生苏梓鑫是共同作者。


(来源:Engineering Analysis with Boundary Elements)

据了解,杨杨是研究力学算法出身,但是参与本次研究的硕士生则是计算机出身,后者非常熟悉计算机架构,正是这样跨学科的交叉融合,使得他们不走寻常路地打造了本次算法。



GPU 并行计算亟需破除“窘境”

据了解,近场动力学(PD,Peridynamic)是一个非局部理论框架。该理论通过引入基于积分的控制方程,来解决不连续空间建模的问题。(注:不连续空间建模,是一种用于模拟和分析不连续介质或结构的数值方法。)

这种方法在不改变网格的情况下,能够对裂纹扩展进行更好的建模。(注:裂纹扩展,是指材料在外界因素作用之下,裂纹从初始位置逐渐延伸的过程。)

在上述过程中,需要将求解域离散为一系列物质点,每个物质点包含了位置、体积和密度的相关信息。

为了保证数值计算的稳定性和准确性,必须设置较小的增量步长,而这会带来大量的迭代次数和计算资源。(注:增量步长,是指在数值计算和计算机模拟中,将整个计算过程划分为一系列小步骤的时间间隔。)

与基于经典连续体力学的方法相比,近场动力学不仅需要更多的计算,同时也需要更大的存储空间,因此会导致计算效率较低。

为了提高近场动力学的计算效率,此前曾有多个研究团队提出过一系列方法。

对于 CPU 并行加速中的大多数加速优化来说,都是面向小于 100 万点的示例。而对于大规模模拟来说,通常需要依赖超级计算机或多 CPU 结构,这往往需要更高的设备规格,而且也不方便用户使用。

此前,基于 GPU 的并行动力学研究大多局限于将串行程序转换为并行程序。大多数已有优化策略所带来的加速效果,也主要依赖于 GPU 自身性能的提升。与此同时,也很少有人基于 GPU 硬件结构来设计优化策略。

另外,GPU 并行计算还存在一些问题:

其一,用于存储邻域点的内存空间没有被预先确定大小,这导致线程和内存资源的利用效率十分低下,进而导致内存和计算资源的浪费,以至于让 GPU 难以处理大规模计算。(注:邻域点是指在数学和计算机科学中,以某个点为中心,满足一定距离或条件的一组点。)

其二,大多数 GPU 并行计算仍然严重依赖全局内存,CUDA 的内存结构并未得到没有充分利用,导致内存带宽被浪费。

其三,大多数近场动力学并行算法缺乏通用性。有的算法可能会限制邻域的大小,以至于只能处理均匀分布且未损坏的离散结构;而有的算法则可能会限制近场动力学理论。(注:离散结构,是将连续函数或变量转换为离散点的结构。)

基于上述局限性,本次研究人员开发了 PD-General 算法,借此成功提高了内存使用率和计算效率。



大大提高计算效率,扩展 PC 计算能力

Warp,是 GPU 中执行并行操作的基本单位,它由 32 个线程组成。因此,研究人员将线程块组织设为 32k(k 是正整数)。

研究人员以内力计算为基准,在英伟达的 Nsight Systems 上,测试和比较了三种模型中不同线程块组织的性能。(注:Nsight Systems 是一款系统级性能分析工具,专用于实现应用算法的可视化,旨在帮助开发者发现优化机会并进行调优,从而实现跨 CPU 和 GPU 的高效扩展。)

期间,研究人员分析了单个时间步骤的执行情况,并分别测试了 64、128、256、512、768 和 1024 个线程的线程块组织。

测试结果如下图所示,条形图表示占用率,折线图表示执行效率。该图显示:当每个块的线程数为 1024 时,性能最低。另外,线程块组织的占用率越高,计算效率就越高。

一般来说,拥有 128 到 256 个线程的组织可以实现最佳性能。考虑到增加邻域半径的潜在影响,研究人员选择了具有 256 个线程的组织来开展测试。(注:邻域半径,是指以某点为中心,覆盖一定范围的距离。在这个范围内的点被认为是该点的“邻居”,其在许多算法和应用中都有重要作用。)


(来源:Engineering Analysis with Boundary Elements)

研究人员还测试了程序的总计算时间。总计算时间指的是,从程序开始到结束的完整执行时间,它包括除了数据输出之外的所有操作的时间。

实验中,研究人员运行了三个不同的模型:线性程序、OpenMP 并行程序、CUDA 并行程序,同时这一实验涵盖了 7 组不同尺度的离散结构,这些离散结构拥有从 2 万到 200 万不等的点数。

与此同时,研究人员还分析了邻域点数量大于 32 和小于 32 的情况。下图表明,基于 CUDA 的并行程序比 OpenMP 和串行程序效率高得多。


(来源:Engineering Analysis with Boundary Elements)

另外,随着物质点数量的增加,基于 CUDA 的并行程序的效率更加明显。如下图所示,并行程序的初始加速比相对较低,与 OpenMP 程序相比没有显著差异。

然而,随着物质点的增加,加速比开始上升。带裂纹的键型近场动力学加速比是 OpenMP 的 200 倍。


(来源:Engineering Analysis with Boundary Elements)

在最大规模案例研究中,研究人员将近场动力学的时间复杂度设为 O(PN),P 为物质点的总数,N 为每个物质点的视界点数。此外,研究人员使用 ADP、AP、PN 表示内存大小(单位为字节)。

实验中,研究人员所使用的 GPU 理论内存大小为 12GB。然而,由于操作系统的要求和 CUDA 启动占用的内存,只有大约 11GB 的内存可被用于编程。

因此,研究人员使用 11GB 作为基线,以确定近场动力学的最大比例。通过代入四个条件:1. 双精度,N=28;2. 双精度,N=36;3. 单精度,N=28;4. 单精度,N=36 来代入相应内存计算公式。借此得出了相应条件下的理论内存占用情况(如下表所示)。


(来源:Engineering Analysis with Boundary Elements)

实验结果显示,单精度的吞吐量是双精度的 64 倍。因此,在更高的精度水平之下,当处理相同规模的问题时,双精度的处理速度和运行速度较慢。而且,邻域半径的大小也会影响程序性能。

与此同时,这也表明邻域点数量越多,执行规模越小,执行效率越低。

研究人员在论文中表示,其所使用的近场动力学通用模型能够模拟数千万个粒子。通过优化参数设置,可以模拟的最大粒子数为 75645000。

具体来说,在单精度下模拟 1000 步只需 100 秒到 600 秒执行时间,而在双精度下模拟 1000 步需要 900 秒到 2500 秒执行时间。

总的来说,研究人员通过分析近场动力学模型和探索并行计算理论,利用 CUDA 打造了高性能、低成本的近场动力学分析框架 PD-General。在并行框架中,其所开发的邻域生成模块有效地减少了内存占用浪费。此外,研究人员还通过内存访问模块,大大提高了计算效率,从而可以扩展个人计算机的计算能力。

参考资料:

1.Yang,Y. et al. A fast bond-based peridynamic program based on GPU parallel computing.Engineering Analysis with Boundary Elements172,106133(2025). https://doi.org/10.1016/j.enganabound.2025.106133

https://baijiahao.baidu.com/s?id=1822824852862951748&wfr=spider&for=pc

排版:刘雅坤

ad1 webp
ad2 webp
ad1 webp
ad2 webp