技術(shù)分享︱國(guó)產(chǎn)化突破:開源MDO工具鏈在新一代神威超算上的安裝與調(diào)試

動(dòng)圖

  在追求航空器設(shè)計(jì)極致性能與效率的今天,高性能計(jì)算(HPC)已成為推動(dòng)多學(xué)科設(shè)計(jì)優(yōu)化(MDO)發(fā)展的核心引擎。我國(guó)自主研發(fā)的新一代神威超級(jí)計(jì)算機(jī),以超過10萬(wàn)個(gè)SW26010-Pro處理器節(jié)點(diǎn)、1.5 Exaflops峰值性能能力,為復(fù)雜工程系統(tǒng)的超大規(guī)模、高精度仿真與優(yōu)化提供了前所未有的硬件平臺(tái)。其澎湃算力,預(yù)示著在航空航天、船舶、能源等關(guān)鍵領(lǐng)域?qū)崿F(xiàn)變革性突破的潛力。然而,將這種理論上的潛力轉(zhuǎn)化為實(shí)際工程應(yīng)用效能,面臨著嚴(yán)峻的挑戰(zhàn)。

   新一代神威超算采用獨(dú)特國(guó)產(chǎn)申威處理器、并實(shí)施嚴(yán)格“編譯-執(zhí)行”環(huán)境隔離(登錄節(jié)點(diǎn)與計(jì)算節(jié)點(diǎn)架構(gòu)異構(gòu)、工具鏈隔離)的先進(jìn)系統(tǒng),對(duì)軟件生態(tài)的適配性提出了極高的要求。當(dāng)前主流開源MDO工具鏈(如基于PETSc、OpenMDAO等的框架)雖功能強(qiáng)大,但其開發(fā)與部署長(zhǎng)期圍繞國(guó)際主流x86生態(tài)進(jìn)行,存在著顯著的應(yīng)用生態(tài)短板。這種不匹配直接導(dǎo)致了兩個(gè)關(guān)鍵問題:

  • 性能潛力難以釋放: 工具鏈底層核心庫(kù)(如PETSc、METIS、特定求解器等)缺乏對(duì)申威架構(gòu)的原生優(yōu)化和深度適配,無(wú)法充分利用“新一代神威超算”的異構(gòu)計(jì)算優(yōu)勢(shì)和超大規(guī)模并行能力,計(jì)算效率遠(yuǎn)低于預(yù)期。
  • 部署運(yùn)行困難重重: 強(qiáng)制性的交叉編譯環(huán)境、復(fù)雜的手動(dòng)庫(kù)依賴配置、自動(dòng)化安裝工具(pip, setup.py)在計(jì)算節(jié)點(diǎn)被禁用、以及對(duì)動(dòng)態(tài)庫(kù)兼容性的特殊要求等技術(shù)壁壘,使得在“新一代神威超算”上安裝和調(diào)試龐大的開源MDO工具鏈變得極其復(fù)雜和脆弱,成為阻礙其實(shí)際應(yīng)用的首要障礙。

  本文將聚焦于以上核心挑戰(zhàn),簡(jiǎn)要闡述如何在新一代超算平臺(tái)上成功安裝、調(diào)試并運(yùn)行一套完整的開源MDO工具鏈。

01 痛點(diǎn):航空仿真的“卡脖子之鎖”

1.1 新一代神威超算環(huán)境特點(diǎn)

  1. 強(qiáng)制分離編譯與執(zhí)行

  •   登錄節(jié)點(diǎn):唯一允許使用交叉編譯器的環(huán)境,開發(fā)者需手動(dòng)將C/C++擴(kuò)展庫(kù)編譯為國(guó)產(chǎn)處理器適配的二進(jìn)制文件(如.a靜態(tài)庫(kù)或指定路徑的.so動(dòng)態(tài)庫(kù))。
  •  計(jì)算節(jié)點(diǎn):僅支持運(yùn)行預(yù)編譯庫(kù),禁用pip install、setup.py等自動(dòng)化編譯安裝工具,避免直接調(diào)用不兼容的本地編譯器。

  2. 庫(kù)安裝高度依賴手動(dòng)操作

  編譯流程復(fù)雜:需人工指定交叉編譯器路徑(如SWGCC)、硬件指令集參數(shù)(-march=sw)、依賴庫(kù)鏈接路徑(-L/path/to/lib)等,配置錯(cuò)誤將導(dǎo)致編譯失敗。

  3. 異構(gòu)環(huán)境隔離

  登錄節(jié)點(diǎn)與計(jì)算節(jié)點(diǎn)硬件架構(gòu)不同(如神威處理器),編譯器工具鏈嚴(yán)格隔離,強(qiáng)制交叉編譯。

  4. 定制化開發(fā)程度高

  開發(fā)者需深度介入編譯流程,手動(dòng)指定CFLAGS、LDFLAGS等參數(shù),適配目標(biāo)環(huán)境。

1.2 兩大痛點(diǎn)

  • 硬件隔離:申威處理器與國(guó)際x86軟件指令集不兼容
  • 環(huán)境隔離:編譯(登錄節(jié)點(diǎn))與運(yùn)行(計(jì)算節(jié)點(diǎn))嚴(yán)格分區(qū),禁用自動(dòng)化工具

1.3 “三無(wú)困境”

  • 無(wú)適配:PETSc、Adflow等底層庫(kù)缺乏動(dòng)態(tài)庫(kù)的移植經(jīng)驗(yàn)
  • 無(wú)協(xié)同:氣動(dòng)/結(jié)構(gòu)/優(yōu)化工具鏈斷鏈
  • 無(wú)驗(yàn)證:各模塊無(wú)法進(jìn)行大規(guī)模并行測(cè)試(缺少算例)、氣動(dòng)|結(jié)構(gòu)耦合優(yōu)化效率未知

02 MDO工具鏈介紹

2.1 MDO軟件包整體介紹

  密歇根大學(xué)的 MDO 實(shí)驗(yàn)室開發(fā)了具有高保真度 (MACH) 框架的飛機(jī)配置的 MDO。主要包含軟件有:cgnsUtilities、baseclasses、pySpline、pyGeo、IDWarp、ADFlow、pyOptSparse、multipoint等。

技術(shù)分享︱國(guó)產(chǎn)化突破:開源MDO工具鏈在新一代神威超算上的安裝與調(diào)試的圖2

2.2 總結(jié)對(duì)比

技術(shù)分享︱國(guó)產(chǎn)化突破:開源MDO工具鏈在新一代神威超算上的安裝與調(diào)試的圖3

表 1 基礎(chǔ)軟件庫(kù)總結(jié)

2.3 整體架構(gòu)

技術(shù)分享︱國(guó)產(chǎn)化突破:開源MDO工具鏈在新一代神威超算上的安裝與調(diào)試的圖4

表 2 整體架構(gòu)

03 破局:三大核心技術(shù)攻堅(jiān)戰(zhàn)

3.1 編譯器“穿墻術(shù)”

  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安裝庫(kù)時(shí)的編譯問題

# 傳統(tǒng)流程(崩潰)
pip install pyGeo  # 在計(jì)算節(jié)點(diǎn)觸發(fā)編譯 → 失敗!  
# 神威方案(突圍)
swgcc -mdynamic -fPIC *.c → 登錄節(jié)點(diǎn)編譯核心庫(kù) 
swpython setup.py install → 計(jì)算節(jié)點(diǎn)純安裝

3.2 動(dòng)態(tài)庫(kù)“復(fù)活術(shù)”

  1. 目標(biāo)

  修復(fù)PETSc、Transform動(dòng)態(tài)庫(kù)引用時(shí)的nonzero padding致命錯(cuò)誤。

  2. 挑戰(zhàn)

  編譯鏈接的庫(kù)在神威平臺(tái)無(wú)法識(shí)別。

  3. 解決方案

  成功安裝后,會(huì)生成 petsc.so 動(dòng)態(tài)庫(kù),但是該庫(kù)如果直接使用會(huì)報(bào)錯(cuò)nonzero padding in e_ident。這是由于系統(tǒng)架構(gòu)導(dǎo)致的,兩種方法可以解決該問題。

  • 方法1:將鏈接好的petsc.so下載到本地,使用軟件winhex打開,將第9位數(shù)字2改為0,替換即可。
  • 方法2:手動(dòng)將編譯好的文件進(jìn)行鏈接

3.3 多節(jié)點(diǎn)“并行術(shù)”

  超算平臺(tái)的MPI函數(shù)實(shí)現(xiàn)不夠全面,有些函數(shù)存在問題,例如MPI_Scatterv、MPI_Gatherv、MPI_Allreduce。如果逐個(gè)對(duì)程序的源碼進(jìn)行修改,存在耗時(shí)長(zhǎng)、難定位、難測(cè)試等問題。比較好的解決辦法是自己在底層mpi函數(shù)的基礎(chǔ)上實(shí)現(xiàn)一套包含幾個(gè)問題函數(shù)的動(dòng)態(tài)庫(kù),在程序鏈接的時(shí)候把這個(gè)動(dòng)態(tài)庫(kù)加上。

  以MPI_Allgatherv函數(shù)舉例:

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;
        // 獲取當(dāng)前進(jìn)程的發(fā)送數(shù)據(jù)長(zhǎng)度
        int my_sendcount = recvcounts[rank];
        MPI_Aint send_size = my_sendcount * extent;
        // 創(chuàng)建臨時(shí)發(fā)送緩沖區(qū)
        void *tmp_sendbuf = malloc(send_size);
        if (!tmp_sendbuf) return MPI_ERR_UNKNOWN;
        // 從recvbuf的對(duì)應(yīng)位置拷貝數(shù)據(jù)到臨時(shí)緩沖區(qū)
        char *src = (char *)recvbuf + displs[rank] * extent;
        memcpy(tmp_sendbuf, src, send_size);
        // 調(diào)用標(biāo)準(zhǔn)Allgatherv,發(fā)送類型和接收類型均為recvtype
        mpi_errno = my_MPI_Allgatherv(tmp_sendbuf, my_sendcount, recvtype,
                                   recvbuf, recvcounts, displs, recvtype, comm);
        free(tmp_sendbuf);
    } else {
        // 正常調(diào)用標(biāo)準(zhǔn)Allgatherv
        mpi_errno = my_MPI_Allgatherv(sendbuf, sendcount, sendtype,
                                   recvbuf, recvcounts, displs, recvtype, comm);
    }
    return mpi_errno;
}
//其中my_MPI_Allgatherv函數(shù)是用MPI_Allgather實(shí)現(xiàn)的

04 測(cè)試成果

4.1 氣動(dòng)結(jié)構(gòu)耦合優(yōu)化算例并行測(cè)試

  1. 算例參數(shù)

測(cè)試內(nèi)容

ADFlow氣動(dòng)求解與TACS結(jié)構(gòu)求解的并行測(cè)試

網(wǎng)格規(guī)模

21萬(wàn)

算例目標(biāo)

重量與阻力系數(shù)

設(shè)計(jì)變量

攻角、機(jī)翼刨面翼型、扭轉(zhuǎn)和結(jié)構(gòu)厚度

約束

有機(jī)翼的厚度與體積不變、升力系數(shù)大于0.5

  2. 測(cè)試目的

  驗(yàn)證氣動(dòng)網(wǎng)格規(guī)模從3萬(wàn)增至21萬(wàn)時(shí),流固耦合優(yōu)化框架在多節(jié)點(diǎn)并行環(huán)境下的計(jì)算效率與穩(wěn)定性。

  軟硬件環(huán)境:

  •   硬件:新一代神威超算,超過十萬(wàn)核組。
  •   軟件:神威加速計(jì)算架構(gòu)SACA

  3. 測(cè)試結(jié)論

  算例成功完成21萬(wàn)網(wǎng)格規(guī)模的流固耦合優(yōu)化,驗(yàn)證了框架處理高分辨率模型的能力。多節(jié)點(diǎn)并行效率滿足預(yù)期,氣動(dòng)/結(jié)構(gòu)求解器協(xié)同穩(wěn)定,為大規(guī)模工程優(yōu)化提供可靠基礎(chǔ)。

技術(shù)分享︱國(guó)產(chǎn)化突破:開源MDO工具鏈在新一代神威超算上的安裝與調(diào)試的圖5

圖 1 優(yōu)化目標(biāo)收斂曲線

技術(shù)分享︱國(guó)產(chǎn)化突破:開源MDO工具鏈在新一代神威超算上的安裝與調(diào)試的圖6

圖 2 壓力云圖

技術(shù)分享︱國(guó)產(chǎn)化突破:開源MDO工具鏈在新一代神威超算上的安裝與調(diào)試的圖7

圖 3 失效準(zhǔn)則云圖

4.2 氣動(dòng)結(jié)構(gòu)耦合優(yōu)化多工況并行測(cè)試

  1. 算例描述

  在前一個(gè)節(jié)氣動(dòng)結(jié)構(gòu)耦合優(yōu)化算例的基礎(chǔ)上,增加工況數(shù),保持優(yōu)化目標(biāo),設(shè)計(jì)變量和約束不變。劃分通信域,使得各個(gè)工況直接得以并行。

  2. 測(cè)試目的

  測(cè)試并行規(guī)模與并行效率,通過通過擴(kuò)展工況數(shù)目,同時(shí)逐步增加核心數(shù),直至總核心數(shù)超百萬(wàn)。

  3. 測(cè)試結(jié)論

  由測(cè)試結(jié)果可以看出,隨著核心數(shù)的增加,并行效率出現(xiàn)了下降,百萬(wàn)核心相較于十萬(wàn)核心的并行效率為89.65%,符合預(yù)期。

技術(shù)分享︱國(guó)產(chǎn)化突破:開源MDO工具鏈在新一代神威超算上的安裝與調(diào)試的圖8

圖 4 并行效率

05 結(jié)語(yǔ)

  開源MDO工具鏈在新一代神威超算平臺(tái)上的成功安裝和調(diào)試,標(biāo)志著國(guó)內(nèi)首條完整適配國(guó)產(chǎn)申威處理器超算環(huán)境的開源MDO工具鏈實(shí)現(xiàn)了從“單點(diǎn)工具可用”“全鏈路貫通”的重大突破。該成果不僅解決了航空仿真領(lǐng)域的“卡脖子”難題,還為國(guó)產(chǎn)處理器平臺(tái)的軟件生態(tài)建設(shè)提供了可行路徑,具有顯著的技術(shù)突破價(jià)值和深遠(yuǎn)的產(chǎn)業(yè)應(yīng)用意義。

技術(shù)分享︱國(guó)產(chǎn)化突破:開源MDO工具鏈在新一代神威超算上的安裝與調(diào)試的圖9


登錄后免費(fèi)查看全文
立即登錄
App下載
技術(shù)鄰APP
工程師必備
  • 項(xiàng)目客服
  • 培訓(xùn)客服
  • 平臺(tái)客服

TOP