当前位置: 首页 > news >正文

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

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

        在追求航空器设计极致性能与效率的今天,高性能计算(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等。

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

2.2 总结对比

技术分享︱国产化突破:开源MDO工具链在新一代神威超算上的安装与调试的图3
表 1 基础软件库总结

2.3 整体架构

技术分享︱国产化突破:开源MDO工具链在新一代神威超算上的安装与调试的图4
表 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,发送类型和接收类型均为recvtypempi_errno = my_MPI_Allgatherv(tmp_sendbuf, my_sendcount, recvtype,recvbuf, recvcounts, displs, recvtype, comm);free(tmp_sendbuf);} else {// 正常调用标准Allgathervmpi_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万网格规模的流固耦合优化,验证了框架处理高分辨率模型的能力。多节点并行效率满足预期,气动/结构求解器协同稳定,为大规模工程优化提供可靠基础。

技术分享︱国产化突破:开源MDO工具链在新一代神威超算上的安装与调试的图5
图 1 优化目标收敛曲线

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

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

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

  1. 算例描述

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

  2. 测试目的

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

  3. 测试结论

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

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

05 结语

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

新媒体矩阵版尾.png

http://www.xdnf.cn/news/1369891.html

相关文章:

  • 使用QML的Rectangle组件的边框属性
  • HMM简单拓展-HSMM与高阶HMM
  • C/C++ 数据结构 —— 树(2)
  • nginx-负载均衡
  • C++工程实战入门笔记4-函数(一)
  • WeakAuras Lua Script ICC (BarneyICC) Simplified Chinese [Mini]
  • 深入了解linux系统—— 线程互斥
  • ArcGIS学习-11 实战-商场选址
  • 洛谷 P12332 题解
  • 如何利用ArcGIS探究环境与生态因子对水体、土壤、大气污染物等影响实践技术
  • pytorch_grad_cam 库学习笔记—— Ablation-CAM 算法的基类 AblationCAM 和 AblationLayer
  • 如何避免频繁切换npm源
  • pytorch-利用letnet5框架深度学习手写数字识别
  • Vue2(七):配置脚手架、render函数、ref属性、props配置项、mixin(混入)、插件、scoped样式
  • 深入解析交换机端口安全:Sticky MAC的工作原理与应用实践
  • 机器视觉学习-day03-灰度化实验-二值化和自适应二值化
  • 【C++】智能指针底层原理:引用计数与资源管理机制
  • 深度学习篇---LeNet-5网络结构
  • 病理软件Cellprofiler使用教程
  • vue2 和 vue3 生命周期的区别
  • 一篇文章拆解Java主流垃圾回收器及其调优方法。
  • LeetCode-22day:多维动态规划
  • 代码随想录Day62:图论(Floyd 算法精讲、A * 算法精讲、最短路算法总结、图论总结)
  • vue2和vue3的对比
  • TensorFlow 深度学习:使用 feature_column 训练心脏病分类模型
  • Day3--HOT100--42. 接雨水,3. 无重复字符的最长子串,438. 找到字符串中所有字母异位词
  • CentOS 7 服务器初始化:从 0 到 1 的安全高效配置指南
  • 肌肉力量训练
  • 木马免杀工具使用
  • 产品经理操作手册(3)——产品需求文档