首页/文章/ 详情

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

2小时前浏览4


  在追求航空器设计极致性能与效率的今天,高性能计算(HPC)已成为推动多学科设计优化(MDO)发展的核心引擎。我国自主研发的新一代神威超级计算机,以超过10万个SW26010-Pro处理器节点、1.5 Exaflops峰值性能能力,为复杂工程系统的超大规模、高精度仿真与优化提供了前所未有的硬件平台。其澎湃算力,预示着在航空航天、船舶、能源等关键领域实现变革性突破的潜力。然而,将这种理论上的潜力转化为实际工程应用效能,面临着严峻的挑战。


   新一代神威超算采用独特国产申威处理器、并实施严格“编译-执行”环境隔离(登录节点与计算节点架构异构、工具链隔离)的先进系统,对软件生态的适配性提出了极高的要求。当前主流开源MDO工具链(如基于PETSc、OpenMDAO等的框架)虽功能强大,但其开发与部署长期围绕国际主流x86生态进行,存在着显著的应用生态短板。这种不匹配直接导致了两个关键问题:


  • 性能潜力难以释放: 工具链底层核心库(如PETSc、METIS、特定求解器等)缺乏对申威架构的原生优化和深度适配,无法充分利用“新一代神威超算”的异构计算优势和超大规模并行能力,计算效率远低于预期。


  • 部署运行困难重重: 强制性的交叉编译环境、复杂的手动库依赖配置、自动化安装工具(pip, setup.py)在计算节点被禁用、以及对动态库兼容性的特殊要求等技术壁垒,使得在“新一代神威超算”上安装和调试庞大的开源MDO工具链变得极其复杂和脆弱,成为阻碍其实际应用的首要障碍。


  本文将聚焦于以上核心挑战,简要阐述如何在新一代超算平台上成功安装、调试并运行一套完整的开源MDO工具链。


01 痛点:航空仿真的“卡脖子之锁”

1.1 新一代神威超算环境特点

  1. 强制分离编译与执行

  •   登录节点:唯一允许使用交叉编译器的环境,开发者需手动将C/C++扩展库编译为国产处理器适配的二进制文件(如.a静态库或指定路径的.so动态库)。

  •   计算节点:仅支持运行预编译库,禁用pip install、setup.py等自动化编译安装工具,避免直接调用不兼容的本地编译器。


  2. 库安装高度依赖手动操作

  编译流程复杂:需人工指定交叉编译器路径(如SWGCC)、硬件指令集参数(-march=sw)、依赖库链接路径(-L/path/to/lib)等,配置错误将导致编译失败。


  3. 异构环境隔离

  登录节点与计算节点硬件架构不同(如神威处理器),编译器工具链严格隔离,强制交叉编译。


  4. 定制化开发程度高

  开发者需深度介入编译流程,手动指定CFLAGS、LDFLAGS等参数,适配目标环境。

1.2 两大痛点

  • 硬件隔离:申威处理器与国际x86软件指令集不兼容

  • 环境隔离:编译(登录节点)与运行(计算节点)严格分区,禁用自动化工具

1.3 “三无困境”

  • 无适配:PETSc、Adflow等底层库缺乏动态库的移植经验

  • 无协同:气动/结构/优化工具链断链

  • 无验证:各模块无法进行大规模并行测试(缺少算例)、气动|结构耦合优化效率未知


02 MDO工具链介绍

2.1 MDO软件包整体介绍

  密歇根大学的 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_PROCESSOR sw_64)
set(CMAKE_C_COMPILER swgcc)
set(CMAKE_Fortran_COMPILER swgfortran)


  2. configure+make安装方式


  • petsc配置命令

./configure --with-shared-libraries=1 AR=swar RANLIB=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.gz


  3. Makefile方式


  • TACS举例:

修改makefile.in
PYTHON = swpython
EXTRA_CC_FLAGS = -fPIC -O0 -g -mieee
SO_LINK_FLAGS=-fPIC -shared -mdynamic
LAPACK_LIBS = -L/~/lapack-3.10.1/build/lib -llapack -lpthread -lblas -lmpi
METIS_INCLUDE = -I${METIS_HOME}/include/ -I/usr/sw/mpi/mpi_current/include


  4. python安装库时的编译问题

# 传统流程(崩溃)
pip install pyGeo  # 在计算节点触发编译 → 失败!  
# 神威方案(突围)
swgcc -mdynamic -fPIC *.c → 登录节点编译核心库 
swpython setup.py install → 计算节点纯安装

3.2 动态库“复活术”

  1. 目标

  修复PETSc、Transform动态库引用时的nonzero padding致命错误。


  2. 挑战

  编译链接的库在神威平台无法识别。


  3. 解决方案

  成功安装后,会生成 petsc.so 动态库,但是该库如果直接使用会报错nonzero padding in e_ident。这是由于系统架构导致的,两种方法可以解决该问题。

  • 方法1:将链接好的petsc.so下载到本地,使用软件winhex打开,将第9位数字2改为0,替换即可。

  • 方法2:手动将编译好的文件进行链接

3.3 多节点“并行术”

  超算平台的MPI函数实现不够全面,有些函数存在问题,例如MPI_Scatterv、MPI_Gatherv、MPI_Allreduce。如果逐个对程序的源码进行修改,存在耗时长、难定位、难测试等问题。比较好的解决办法是自己在底层mpi函数的基础上实现一套包含几个问题函数的动态库,在程序链接的时候把这个动态库加上。

  以MPI_Allgatherv函数举例:

int MPI_Allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
                                  void *recvbuf, const int recvcounts[], const int displs[],
    MPI_Datatype recvtype, MPI_Comm comm) {
  int mpi_errno = MPI_SUCCESS;
  int rank;
  MPI_Comm_rank(comm, &rank);
  if (sendbuf == MPI_IN_PLACE) {
    MPI_Aint lb, extent;
    mpi_errno = MPI_Type_get_extent(recvtype, &lb, &extent);
    if (mpi_errno != MPI_SUCCESS) return mpi_errno;
    // 获取当前进程的发送数据长度
    int my_sendcount = recvcounts[rank];
    MPI_Aint send_size = my_sendcount * extent;
    // 创建临时发送缓冲区
    void *tmp_sendbuf = malloc(send_size);
    if (!tmp_sendbuf) return MPI_ERR_UNKNOWN;
    // 从recvbuf的对应位置拷贝数据到临时缓冲区
    char *src = (char *)recvbuf + displs[rank] * extent;
    memcpy(tmp_sendbuf, src, send_size);
    // 调用标准Allgatherv,发送类型和接收类型均为recvtype
    mpi_errno = my_MPI_Allgatherv(tmp_sendbuf, my_sendcount, recvtype,
          ecvbuf, recvcounts, displs, recvtype, comm);
          free(tmp_sendbuf);
  } else {
          // 正常调用标准Allgatherv
          mpi_errno = my_MPI_Allgatherv(sendbuf, sendcount, sendtype,
                              recvbuf, recvcounts, displs, recvtype, comm);
  }
  return mpi_errno;
}
//其中my_MPI_Allgatherv函数是用MPI_Allgather实现的


04 测试成果

4.1 气动结构耦合优化算例并行测试

  1. 算例参数



测试内容



ADFlow气动求解与TACS结构求解的并行测试



网格规模



21万



算例目标



重量与阻力系数



设计变量



攻角、机翼刨面翼型、扭转和结构厚度



约束



有机翼的厚度与体积不变、升力系数大于0.5




  2. 测试目的

  验证气动网格规模从3万增至21万时,流固耦合优化框架在多节点并行环境下的计算效率与稳定性。

  软硬件环境:

  •   硬件:新一代神威超算,超过十万核组。

  •   软件:神威加速计算架构SACA


  3. 测试结论

  算例成功完成21万网格规模的流固耦合优化,验证了框架处理高分辨率模型的能力。多节点并行效率满足预期,气动/结构求解器协同稳定,为大规模工程优化提供可靠基础。


图 1 优化目标收敛曲线



图 2 压力云图



图 3 失效准则云图



4.2 气动结构耦合优化多工况并行测试

  1. 算例描述

  在前一个节气动结构耦合优化算例的基础上,增加工况数,保持优化目标,设计变量和约束不变。划分通信域,使得各个工况直接得以并行。


  2. 测试目的

  测试并行规模与并行效率,通过通过扩展工况数目,同时逐步增加核心数,直至总核心数超百万。


  3. 测试结论

  由测试结果可以看出,随着核心数的增加,并行效率出现了下降,百万核心相较于十万核心的并行效率为89.65%,符合预期。



图 4 并行效率

05 结语

  开源MDO工具链在新一代神威超算平台上的成功安装和调试,标志着国内首条完整适配国产申威处理器超算环境的开源MDO工具链实现了从“单点工具可用”“全链路贯通”的重大突破。该成果不仅解决了航空仿真领域的“卡脖子”难题,还为国产处理器平台的软件生态建设提供了可行路径,具有显著的技术突破价值和深远的产业应用意义。




HPC多学科优化网格处理后处理分析其他耦合二次开发代码&命令航空航天云计算求解技术创新方法知识工程
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2025-08-27
最近编辑:2小时前
神工坊(高性能仿真)
神工坊,提供高性能仿真解决方案...
获赞 316粉丝 53文章 138课程 5
点赞
收藏
作者推荐

技术分享︱大型稀疏线性方程组求解技术——工业仿真的底层核心

一、背景在工业仿真领域,对各种现实世界的问题进行数值模拟时,如流体动力学分析、电磁场仿真、结构力学应力应变分析等,其控制方程通常是偏微分方程组,在经过不同方法的隐式离散之后最终都可转化为大型稀疏线性方程组。随着人们对计算精度要求的不断提高,方程组的阶数也从上千阶、几十万阶提高到百万、千万阶甚至更高,所需的计算量以及存储需求也随之迅速膨胀。根据一般经验,方程组求解时间会占总计算时间的70%以上,往往是整个计算过程中的性能瓶颈。如果说求解器是工业CAE软件的核心模块,那么大型稀疏线性方程组的求解技术将毫无疑问是底层求解器的核心。NASA翼型网格经过离散得到的稀疏矩阵(素材来源于网络)二、方法众所周知,稀疏线性方程组的求解方法可以分为直接法和迭代法,两类方法各有优劣,特点比较如下:迭代法[1]:对于不同类型稀疏矩阵表现差异较大,存在收敛性与收敛速度问题,催生了许多预处理技术(Preconditioners);对原矩阵的编辑很少,SpMV(Sparsematrix-vectormultiplication)是其核心运算;内存需求小,求解速度较快,算法复杂度低;较易实现并行化。直接法[2]:通用、稳定;通过前后处理,能够保证计算的收敛性与精度;对原矩阵的编辑多(分解、排序、缩放等);内存需求大,求解速度慢,算法复杂度更高;并行度有限。其中迭代法的种类很多,可以分为定常(Stationary)迭代法与非定常迭代法[3]。经典的定常迭代法有Jacobi迭代法、Gauss-Seidel迭代法、SOR迭代法等,这些方法均可基于矩阵分裂推导得到;而在数值模拟中,非定常迭代法则显得更加重要,常见的有共轭梯度法(ConjugateGradientCG)、广义最小残量方法(GeneralizedMinimalResidualGMRES)、稳定双共轭梯度法(BiconjugateGradientStabilizedBi-CGSTAB)等,这些算法都属于Krylov子空间方法。如今高性能共轭梯度(HPCG)测试包已成为国际上评测超级计算机性能的主要工具[4],Krylov子空间方法也被评为20世纪最伟大的十大算法之一[5]。还有一些迭代算法则比较特殊,它们基于特殊结构和性质,例如我们耳熟能详的多重网格(MultigridMG)方法,它更多地被称为数值计算领域中一种加速迭代收敛的技术,而不仅仅是一种单纯的算法。2014-2021年HPCG性能评测结果对比(素材来源于网络)直接法的基础是矩阵的分解,常见的分解形式有LU分解、Cholesky分解、QR分解等。稀疏线性方程组的两类常见直接求解算法分别为超节点(Supernodal)方法和多波前(Multifrontal)法,其主要思想是将完整的稀疏矩阵的分解任务转化成许多个相对稠密的子矩阵的分解任务,任务间的依赖关系由消去树(Eliminationtree)或其他类似的数据结构来确定。直接法的求解步骤通常分为矩阵重排、符号分解、数值分解与回代求解四个部分。一个稀疏矩阵与其对应的消去树(来自文献6)三、挑战当前,国产超级计算机的峰值性能已达每秒十亿亿次量级,不久便将进入百亿亿次(E级)计算时代,我国的神威E级计算机和天河E级计算机已经蓄势待发。这些国际领先的超级计算机为我国科学与工程计算应用迈进超大规模计算时代、实现更高精细度的数值模拟提供了强力支撑。然而,超大规模计算也给高实用性与高性能的大型稀疏线性方程组求解的算法设计与优化带来了巨大挑战。1.高实用当前,国产超级计算机的峰值性能已达每秒十亿亿次量级,不久便将进入百亿亿次(E级)计算时代,我国的神威E级计算机和天河E级计算机已经蓄势待发。这些国际领先的超级计算机为我国科学与工程计算应用迈进超大规模计算时代、实现更高精细度的数值模拟提供了强力支撑。然而,超大规模计算也给高实用性与高性能的大型稀疏线性方程组求解的算法设计与优化带来了巨大挑战。以SiP封装芯片的电磁-热-力耦合数值模拟为例,其稀疏矩阵具有明显的病态特征(来自文献7)2.高性能随着计算机硬件性能的提升,超级计算机呈现“多级嵌套并行、异构众核加速”的复杂体系结构特征,会导致大型稀疏线性方程组求解器的实现效率急剧下降。从下图也可以发现,随着高性能计算机系统变得更加复杂,特别是众核架构采用后,在每一代世界性能最为强大的超级计算机上,应用的实际求解能力变得更加低效,即解决问题时间(time-to-solution)变得越来越长。如何设计能匹配机器体系结构特征的算法与性能优化技术,是大型稀疏线性方程组求解技术以及其他科学计算核心算法中当前亟待解决的关键问题。解决问题时间与超级计算机性能趋势对比对于大规模稀疏线性方程组,原有串行和小规模并行模式下的数据结构和算法容易导致并行求解性能低下或失败。在分布式并行层面,需要解决以下几个问题:一是在数据和任务分解方面,如何设计良好的负载均衡策略、稀疏矩阵的高效存储格式以及计算通信重叠等优化策略;二是在负载均衡的前提下,如何设计以尽力避免节点间的通信;三是在内在串行特性导致并行化困难的算法方面,如何改进数据的分布方式以增加并行性。在共享内存环境中,稀疏线性方程组求解算法的可扩展性问题也需要特别关注。因为现代多核/众核处理器上的核数在可预见的未来也将越多,在单个CPU上封装数十甚至上百个有较强处理能力的核心,或是在GPU上封装成千上万个轻量级处理单元将变得非常普遍。如何在这种共享内存节点上实现细粒度的并行仍然是很有挑战的研究内容。左图:AMD霄龙CPU,64核128线程,右图:英伟达Hopper架构GPU,1.8万核心四、我们的探索——UNAP面对来自“应用与机器”的双重挑战,神工坊团队与国产异构众核平台体系架构紧密耦合,发展了一套大型稀疏线性方程组求解库UNAP。该求解库是早期应基于非结构网格的仿真需求而开发的,其全称为“UNstructuredAlgebraPackage”。为了解决高实用性的挑战,UNAP结合异构众核处理器多级并行的特点和稀疏矩阵迭代解法的需求,初步探索了各种预处理方法在众核异构平台上的并行实现技术。UNAP已实现PCG、PBiCGStab、GMRES等Krylov子空间方法以及AMG代数多重网格求解器,预处理器包含Jacobi、DIC、DILU等,未来还将开发直接求解模块,以满足来自各领域的复杂应用需求。为了达到高性能的目标,UNAP根据国产超算的异构特点,结合其处理器的多级缓冲区,实现了计算/通信混合的并行迭代算法;由于迭代算法的并发度天然较高,UNAP主要通过算法调整、浮点运算替换内存访问、通信同步等手段[9],充分利用了申威主从众核浮点计算性能高而带宽受限的特点,且通过增加计算比例降低了全局集合通信代价。在共享内存层面,UNAP还可以调用太湖之光超级计算机上的加速工具套件UNAT和向量计算加速库swArrays,充分发挥出从核阵列的计算能力,达到进一步的性能提升。代数求解库UNAP的组织架构UNAP的整体结构如上图所示,底层并行环境主要包含对“神威·太湖之光”超级计算机申威众核异构芯片SW26010的从核并行计算支持和普通的进程间MPI层级并行支持。采用以容器模板为核心的架构体系,基本容器层主要包含Vector分布式向量容器以及Matrix分布式矩阵容器。在容器层向下可调用向量计算加速库和非结构计算加速库,实现在国产申威众核芯片上的高效并行,同时,向上可扩展预条件子、迭代解法以及直接解法。这种架构可以将元素的内部处理通过模板泛化,从而降低求解算法实现的复杂度,也具有较好的可移植性,易于兼容x86-CPU平台。核心的代数求解器模块包含了Krylov子空间迭代求解器、预条件子、代数多重网格求解器以及开发中的直接求解模块。几个案例说明UNAP的应用情况:发动机燃烧室大涡模拟:在某航空发动机全环燃烧室的大涡模拟中,网格量达10亿,采用UNAP作为核心求解模块后,最终的并行规模达到1.6万进程,稀疏线性方程组求解部分加速达到20倍,收敛速度显著提升。船舶水动力学应用:在某水动力学软件中,通过UNAP的接入(主要使用了求解压力和压力修正方程的代数多重网格算法和求解速度等方程的预条件稳定双共轭梯度法),获得了在代数求解过程中的自动多级并行能力,在神威·太湖之光超级计算机上完成了千万级网格对标算例计算,并行规模达到万核级别,相对百进程并行效率不低于50%,经测试与商业软件FLUENT相当。电机设备电磁场分析:在某公司核心求解器向神威平台的移植部署中,采用UNAP代替原有直接求解库,进行了网格量为千万级的电机模型有限元算例并行计算测试,并对比了替换前后算例的节点磁通密度计算结果,UNAP表现良好。一个典型算例展示UNAP的功能与性能:算例:方腔驱动流,不可压,上壁面滑移速度为1,其他为固壁边界,方腔的边长为1,雷诺数100。并行计算结果:以4进程为例,下图给出了方腔在各个进程的分割情况,流线图中可以清楚看到主涡和二次涡。方腔驱动流的流线图简单的并行计算效率测试:强扩展性测试:固定算例网格整体求解规模,通过比较不同并行核数下的计算时间可获得强扩展性并行计算效率。本测试采用的网格规模数量为2千万,网格类型为六面体,进程数量分别为64、256、1024,并行核数规模分别为4160、16640和66560,统计时间为前20步计算时间。弱扩展性测试:固定每个进程上的网格规模,通过比较不同并行核数下的计算时间来获得弱扩展性并行计算效率。本测试采用的网格规模数量分别为2千万、4千万、8千万,网格类型为六面体,进程数量分别为64进程、128进程和256进程,并行核数规模分别为4160、16640和66560,单个进程网格数量约为31.25万,统计时间为前20步计算时间。(本文作者:赵程鹏)参考文献:[1]SaadY.Iterativemethodsforsparselinearsystems[M].SocietyforIndustrialandAppliedMathematics,2003.[2]DavisTA,RajamanickamS,Sid-LakhdarWM.Asurveyofdirectmethodsforsparselinearsystems[J].ActaNumerica,2016,25:383-566.[3]BarrettR,BerryM,ChanTF,etal.Templatesforthesolutionoflinearsystems:buildingblocksforiterativemethods[M].SocietyforIndustrialandAppliedMathematics,1994.[4]MarjanovićV,GraciaJ,GlassCW.PerformancemodelingoftheHPCGbenchmark[C]//InternationalWorkshoponPerformanceModeling,BenchmarkingandSimulationofHighPerformanceComputerSystems.Springer,Cham,2014:172-192.[5]CipraBA.Thebestofthe20thcentury:Editorsnametop10algorithms[J].SIAMnews,2000,33(4):1-2.[6]GuptaA,KarypisG,KumarV.Highlyscalableparallelalgorithmsforsparsematrixfactorization[J].IEEETransactionsonParallelandDistributedsystems,1997,8(5):502-520.[7]WangW,LiuY,ZhaoZ,etal.ParallelMultiphysicsSimulationofPackageSystemsUsinganEfficientDomainDecompositionMethod[J].Electronics,2021,10(2):158.[8]刘伟峰.高可扩展,高性能和高实用的稀疏矩阵计算研究进展与挑战[J].数值计算与计算机应用,2020,41(4):259.[9]GUH,RENHU,LIUC,etal.AnoptimizedChebyshevsmootherInGAMGsolverofopenfoamonsunwayTaihulightsupercomputer[C]//The13thOpenFOAMWorkshop.2018.

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