首页/文章/ 详情

技术分享︱基于非结构网格的仿真——太湖之光上的巨大挑战

13小时前浏览37

    一、背景

    在过去数十年中非结构网格被广泛应用于工业仿真领域,例如著名商业CFD软件Fluent以及开源CFD软件OpenFOAM都采用了基于非结构网格的有限体积法,而大多数结构分析软件例如Abaqus、Nastran等都采用了基于非结构网格的有限元法。非结构网格的流行不是没有原因的。几乎所有的工程几何结构都是非常复杂的,结构化网格虽然在精度和收敛性等方面有优势,但复杂几何高质量结构化网格生成的难度和效率却限制了其通用性。相反,非结构网格以其生成快速和适应复杂几何的特性,成为工业仿真领域的主流。

基于非结构网格的仿真——太湖之光上的巨大挑战的图3         基于非结构网格的仿真——太湖之光上的巨大挑战的图4

结构化网格(上)与非结构化网格(下)

    二、挑战

    由于数据结构的原因,非结构网格相比于结构化网格,其算法计算访存比更低,同时访存更加离散。另一方面,随着超级计算机架构演变,相较浮点性能的大幅提升,内存带宽日益成为瓶颈,让非结构网格仿真计算更加受限。架构演变也催生了多样的编程模型和加速库。在太湖之光等先进超级计算机上,对非结构网格算法进行优化加速,往往十分复杂且开发量巨大。这四方面的问题,让非结构网格仿真计算在太湖之光上的性能,成为一个巨大的挑战。

基于非结构网格的仿真——太湖之光上的巨大挑战的图5

太湖之光上非结构网格“四大问题”


    离散访存:

    非结构网格不同于结构化网格,其相关数据在内存中无法以规则的方式存储,导致访问具有分散和不连续的特性。换句话说,在仿真计算中,我们需要进行大量的临近插值积分,但是非结构网格单元的邻居却无法像结构网格一样连续规则地在内存中找到。离散访存的结果,就是让连续获取数据中有大量无效数据,或者只能跳跃地获取数据片段,从而损失有效的内存带宽。


    低计算密度:

    非结构网格拓扑复杂,同时仿真对数值稳定性要求较高。因此,在非结构网格上进行仿真计算,一般采用紧致的数值格式,其阶数相对较低。简单来理解,就是在进行插值积分时,用尽量少的网格单元邻居,邻居的邻居以及更远的临近关系基本不考虑。这样一来,在网格单元数据上执行的计算操作就少了。因此,非结构网格上的算法往往具有较低的计算访存比。以四面体网格有限体积离散的稀疏矩阵向量乘为例,其访存与计算之比仅为1/12浮点操作/字节。

基于非结构网格的仿真——太湖之光上的巨大挑战的图6

近年芯片浮点性能和内存带宽增长曲线[1]


    内存带宽瓶颈:

    限于单个核心性能提升的瓶颈,高性能计算机处理器架构由多核全面转向异构众核。例如,“神威·太湖之光”超级计算机就是采用纯国产异构众核芯片研制的千万核心计算系统。但是近年来,高性能处理器的浮点性能保持近似对数增长的同时,内存带宽却呈现出极为缓慢的增长态势。以太湖之光sw26010芯片为例,目前的浮点性能-内存带宽比,已高达20浮点操作/字节。这意味着1/12浮点操作/字节计算密度的稀疏矩阵向量乘,在sw26010芯片内存带宽满载时,仅能发挥出0.4%的理论浮点性能。

基于非结构网格的仿真——太湖之光上的巨大挑战的图7

算法与硬件间失衡的性能天平


    巨量开发:

    太湖之光绝大部分性能来自异构众核芯片sw26010上的8x8从核阵列,因此利用好从核是发挥太湖之光性能的核心。然而,以数十行代码的稀疏矩阵向量乘为例,直接利用在太湖之光上的基础加速库进行众核加速开发,如欲达到较为理想的性能,一般需要上千行代码和大量调试。对于复杂的工业仿真软件来说,这样的开发量是无法接受的。以开源CFD软件OpenFOAM为例,其代码量高达数百万行,热点核心遍布。如果全面采用手动加速开发,工作量无疑等同于再开发一个OpenFOAM。

    三、解决之法---UNAT   

    UNAT全称为“UNstructured Acceleration Toolkit”,是在太湖之光超级计算机进行非结构网格仿真计算加速开发的工具套件。UNAT具有友好接口,方便开发者快速在太湖之光上进行加速开发。UNAT底层实现了自动的数据结构优化,自动的并行遍历算法,用户只需关心具体操作实现,并免于大量调试。这些都大大缓解了,太湖之光上非结构网格计算加速的巨量开发问题和离散访存问题。UNAT更是通过一套耦合算子机制,将热点进行分解融合,采用循环时空二维分解,跨循环数据复用等策略,有效缓解了非结构网格计算密度低的问题和硬件上的内存带宽瓶颈。其中原理较为复杂,具体可以参考文末论文[2](见文章底部“阅读原文”)。


基于非结构网格的仿真——太湖之光上的巨大挑战的图8

UNAT原理图


    下面通过几个典型应用,看一下UNAT的应用效果。

    稀疏矩阵向量乘:

    用COO格式稀疏矩阵向量乘进行测试。随着矩阵元素维度变化,UNAT最高加速比和单核组Flops分别达到近27 倍和3.5 GFlops(0.46%理论性能)。与手工优化的代码相比,UNAT API实现了其大约70%的性能。考虑到兼容性和通用性带来的额外开销,其效果是相当可观的。


基于非结构网格的仿真——太湖之光上的巨大挑战的图9

COO稀疏矩阵向量乘加速比及浮点性能


    某CFD求解器加速:

    一个开发者仅用1周时间,采用UNAT对其中主要6个热点核心进行了加速开发。热点核心众核加速比平均在19倍左右,整体加速也达到了10倍。

基于非结构网格的仿真——太湖之光上的巨大挑战的图10

某CFD求解器优化加速

    OpenFOAM风资源评估应用:

    利用UNAT加速工具,我们对OpenFOAM某风资源评估应用大部分热点进行了加速,众核加速比在8-15倍之间。由于UNAT卓越贡献,最终该应用在太湖之光上取得了整体4倍加速。

基于非结构网格的仿真——太湖之光上的巨大挑战的图11   基于非结构网格的仿真——太湖之光上的巨大挑战的图12

OpenFOAM风资源评估应用优化加速

    燃烧仿真应用:

    利用UNAT加速工具,单个开发者 2周内完成了15万行某燃烧仿真程序优化,使得该程序最终在太湖之光上取得了整体5.4倍加速。由于性能提升,该软件可使用10亿级网格,在合理的时间内,进行航空发动机全环燃烧室高保真数值模拟。


基于非结构网格的仿真——太湖之光上的巨大挑战的图13

基于非结构网格的仿真——太湖之光上的巨大挑战的图14  基于非结构网格的仿真——太湖之光上的巨大挑战的图15

  

燃烧仿真应用优化加速


参考文献:
[1]  Vincent, P., Witherden, F., Vermeire, B., Park, J. S., & Iyer, A. (2016). Towards Green Aviation with Python at Petascale. SC16: International Conference for High Performance Computing, Networking, Storage and Analysis. doi:10.1109/sc.2016.1
[2] Liu, H. , et al. "UNAT: UNstructured Acceleration Toolkit on SW26010 many-core processor." Engineering Computations: Int J for Computer-Aided Engineering (2020).
FluentHPCNastranAbaqusOpenFOAM网格处理通用云计算求解技术理论科普创新方法
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2025-09-05
最近编辑:13小时前
神工坊(高性能仿真)
神工坊,提供高性能仿真解决方案...
获赞 329粉丝 54文章 141课程 6
点赞
收藏
作者推荐

技术分享︱国产化突破:开源MDO工具链在新一代神威超算上的安装与调试

在追求航空器设计极致性能与效率的今天,高性能计算(HPC)已成为推动多学科设计优化(MDO)发展的核心引擎。我国自主研发的新一代神威超级计算机,以超过10万个SW26010-Pro处理器节点、1.5Exaflops峰值性能能力,为复杂工程系统的超大规模、高精度仿真与优化提供了前所未有的硬件平台。其澎湃算力,预示着在航空航天、船舶、能源等关键领域实现变革性突破的潜力。然而,将这种理论上的潜力转化为实际工程应用效能,面临着严峻的挑战。新一代神威超算采用独特国产申威处理器、并实施严格“编译-执行”环境隔离(登录节点与计算节点架构异构、工具链隔离)的先进系统,对软件生态的适配性提出了极高的要求。当前主流开源MDO工具链(如基于PETSc、OpenMDAO等的框架)虽功能强大,但其开发与部署长期围绕国际主流x86生态进行,存在着显著的应用生态短板。这种不匹配直接导致了两个关键问题:性能潜力难以释放:工具链底层核心库(如PETSc、METIS、特定求解器等)缺乏对申威架构的原生优化和深度适配,无法充分利用“新一代神威超算”的异构计算优势和超大规模并行能力,计算效率远低于预期。部署运行困难重重:强制性的交叉编译环境、复杂的手动库依赖配置、自动化安装工具(pip,setup.py)在计算节点被禁用、以及对动态库兼容性的特殊要求等技术壁垒,使得在“新一代神威超算”上安装和调试庞大的开源MDO工具链变得极其复杂和脆弱,成为阻碍其实际应用的首要障碍。本文将聚焦于以上核心挑战,简要阐述如何在新一代超算平台上成功安装、调试并运行一套完整的开源MDO工具链。01痛点:航空仿真的“卡脖子之锁”1.1新一代神威超算环境特点1.强制分离编译与执行登录节点:唯一允许使用交叉编译器的环境,开发者需手动将C/C++扩展库编译为国产处理器适配的二进制文件(如.a静态库或指定路径的.so动态库)。计算节点:仅支持运行预编译库,禁用pipinstall、setup.py等自动化编译安装工具,避免直接调用不兼容的本地编译器。2.库安装高度依赖手动操作编译流程复杂:需人工指定交叉编译器路径(如SWGCC)、硬件指令集参数(-march=sw)、依赖库链接路径(-L/path/to/lib)等,配置错误将导致编译失败。3.异构环境隔离登录节点与计算节点硬件架构不同(如神威处理器),编译器工具链严格隔离,强制交叉编译。4.定制化开发程度高开发者需深度介入编译流程,手动指定CFLAGS、LDFLAGS等参数,适配目标环境。1.2两大痛点硬件隔离:申威处理器与国际x86软件指令集不兼容环境隔离:编译(登录节点)与运行(计算节点)严格分区,禁用自动化工具1.3“三无困境”无适配:PETSc、Adflow等底层库缺乏动态库的移植经验无协同:气动/结构/优化工具链断链无验证:各模块无法进行大规模并行测试(缺少算例)、气动|结构耦合优化效率未知02MDO工具链介绍2.1MDO软件包整体介绍密歇根大学的MDO实验室开发了具有高保真度(MACH)框架的飞机配置的MDO。主要包含软件有:cgnsUtilities、baseclasses、pySpline、pyGeo、IDWarp、ADFlow、pyOptSparse、multipoint等。2.2总结对比表1基础软件库总结2.3整体架构表2整体架构03破局:三大核心技术攻坚战3.1编译器“穿墙术”1.Cmake安装方式文件头部增加set(CMAKE_SYSTEM_PROCESSORsw_64)set(CMAKE_C_COMPILERswgcc)set(CMAKE_Fortran_COMPILERswgfortran)2.configure+make安装方式petsc配置命令./configure--with-shared-libraries=1AR=swarRANLIB=swranlib--LD_SHARED=-mdynamic--LDFLAGS="-fPIC-mdynamic"CFLAGS="-fPIC-mieee"CXXFLAGS="-fPIC-mieee"FFLAGS="-fPIC-mieee"FCFLAGS="-fPIC-mieee"--with-scalar-type=real--with-mpi-dir=/usr/sw/mpi/mpi_current--with-batch=1--download-fblaslapack=/home/export/online1/mdt00/shisuan/swgf_wx/chaos/dafoam/packages/petsc_lib/externalpackages/petsc-pkg-fblaslapack.tar.gz3.Makefile方式TACS举例:修改makefile.inPYTHON=swpythonEXTRA_CC_FLAGS=-fPIC-O0-g-mieeeSO_LINK_FLAGS=-fPIC-shared-mdynamicLAPACK_LIBS=-L/~/lapack-3.10.1/build/lib-llapack-lpthread-lblas-lmpiMETIS_INCLUDE=-I${METIS_HOME}/include/-I/usr/sw/mpi/mpi_current/include4.python安装库时的编译问题#传统流程(崩溃)pipinstallpyGeo#在计算节点触发编译→失败!#神威方案(突围)swgcc-mdynamic-fPIC*.c→登录节点编译核心库swpythonsetup.pyinstall→计算节点纯安装3.2动态库“复活术”1.目标修复PETSc、Transform动态库引用时的nonzeropadding致命错误。2.挑战编译链接的库在神威平台无法识别。3.解决方案成功安装后,会生成petsc.so动态库,但是该库如果直接使用会报错nonzeropaddingine_ident。这是由于系统架构导致的,两种方法可以解决该问题。方法1:将链接好的petsc.so下载到本地,使用软件winhex打开,将第9位数字2改为0,替换即可。方法2:手动将编译好的文件进行链接3.3多节点“并行术”超算平台的MPI函数实现不够全面,有些函数存在问题,例如MPI_Scatterv、MPI_Gatherv、MPI_Allreduce。如果逐个对程序的源码进行修改,存在耗时长、难定位、难测试等问题。比较好的解决办法是自己在底层mpi函数的基础上实现一套包含几个问题函数的动态库,在程序链接的时候把这个动态库加上。以MPI_Allgatherv函数举例:intMPI_Allgatherv(constvoid*sendbuf,intsendcount,MPI_Datatypesendtype,void*recvbuf,constintrecvcounts[],constintdispls[],MPI_Datatyperecvtype,MPI_Commcomm){intmpi_errno=MPI_SUCCESS;intrank;MPI_Comm_rank(comm,&rank);if(sendbuf==MPI_IN_PLACE){MPI_Aintlb,extent;mpi_errno=MPI_Type_get_extent(recvtype,&lb,&extent);if(mpi_errno!=MPI_SUCCESS)returnmpi_errno;//获取当前进程的发送数据长度intmy_sendcount=recvcounts[rank];MPI_Aintsend_size=my_sendcount*extent;//创建临时发送缓冲区void*tmp_sendbuf=malloc(send_size);if(!tmp_sendbuf)returnMPI_ERR_UNKNOWN;//从recvbuf的对应位置拷贝数据到临时缓冲区char*src=(char*)recvbuf+displs[rank]*extent;memcpy(tmp_sendbuf,src,send_size);//调用标准Allgatherv,发送类型和接收类型均为recvtypempi_errno=my_MPI_Allgatherv(tmp_sendbuf,my_sendcount,recvtype,ecvbuf,recvcounts,displs,recvtype,comm);free(tmp_sendbuf);}else{//正常调用标准Allgathervmpi_errno=my_MPI_Allgatherv(sendbuf,sendcount,sendtype,recvbuf,recvcounts,displs,recvtype,comm);}returnmpi_errno;}//其中my_MPI_Allgatherv函数是用MPI_Allgather实现的04测试成果4.1气动结构耦合优化算例并行测试1.算例参数测试内容ADFlow气动求解与TACS结构求解的并行测试网格规模21万算例目标重量与阻力系数设计变量攻角、机翼刨面翼型、扭转和结构厚度约束有机翼的厚度与体积不变、升力系数大于0.52.测试目的验证气动网格规模从3万增至21万时,流固耦合优化框架在多节点并行环境下的计算效率与稳定性。软硬件环境:硬件:新一代神威超算,超过十万核组。软件:神威加速计算架构SACA3.测试结论算例成功完成21万网格规模的流固耦合优化,验证了框架处理高分辨率模型的能力。多节点并行效率满足预期,气动/结构求解器协同稳定,为大规模工程优化提供可靠基础。图1优化目标收敛曲线图2压力云图图3失效准则云图4.2气动结构耦合优化多工况并行测试1.算例描述在前一个节气动结构耦合优化算例的基础上,增加工况数,保持优化目标,设计变量和约束不变。划分通信域,使得各个工况直接得以并行。2.测试目的测试并行规模与并行效率,通过通过扩展工况数目,同时逐步增加核心数,直至总核心数超百万。3.测试结论由测试结果可以看出,随着核心数的增加,并行效率出现了下降,百万核心相较于十万核心的并行效率为89.65%,符合预期。图4并行效率05结语开源MDO工具链在新一代神威超算平台上的成功安装和调试,标志着国内首条完整适配国产申威处理器超算环境的开源MDO工具链实现了从“单点工具可用”到“全链路贯通”的重大突破。该成果不仅解决了航空仿真领域的“卡脖子”难题,还为国产处理器平台的软件生态建设提供了可行路径,具有显著的技术突破价值和深远的产业应用意义。

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈