何連花,趙蓮,姜金榮,金鐘
中國科學院計算機網絡信息中心,北京 100083
隨著大數據信息時代的到來,高性能計算逐漸成為所有科學和工程領域進行深入研究的關鍵工具,且為各種科學問題提供可信賴的計算結果。全球超級計算機的計算能力呈指數增長,2020年11月TOP500 排名[1],日本Fugaku(富岳)成為世界上最快的超級計算機,它理論峰值浮點性能達到537PFLOPS,實測Linpack 性能達到442PFLOPS。而進入TOP500 的門檻已提升到1.316PF,未來即將進入E 級計算時代。我國超級計算機在最近十年得到迅速發展,2013年6月天河二號位于TOP500 的榜首,此后連續六次在世界榜上排名第一,目前排名世界第六。而神威·太湖之光從2016年6月到2017年11月,連續四次在世界五百強排名第一,目前排名世界第四。我國高性能計算發展歷程詳見[2-3]。根據我國當前的項目計劃,在未來2-3年,神威系列、天河系列、曙光系列均有計劃推出E 級計算機。
得益于超級計算機的發展,我國在材料化學、高能物理與核物理、生物、大氣海洋環境、宇宙學等領域,科學與工程數值模擬的能力得到顯著提升。基于“神威·太湖之光”超級計算機,我國科研團隊分別于2016年和2017年獲得國際高性能計算應用領域最高“戈登·貝爾”獎,實現我國在高性能計算應用此獎項上從無到有的突破。
伴隨著超級計算機的高速發展,以及各應用領域對數值模擬能力需求的持續提升,各領域在超級計算機上編程變得越來越困難。目前超級計算機的體系結構越來越復雜,同構與異構并驅發展,對于各個領域的應用軟件直接移植到超級計算機上是一個巨大的挑戰。同時,隨著交叉學科興起,大型并行科學計算軟件的研發越來越依賴于物理、化學、材料等應用領域和計算數學、高性能計算領域的深度融合。2020年“戈登·貝爾”獎獲獎團隊,通過在物理建模、數學方法、機器學習以及高性能計算領域的交叉融合,取得了研究成果的重大突破。可見在未來的發展方向上,復雜應用是呈現“多時空尺度融合,多物理過程融合”的建模特征。
如圖1 所示,數值應用程序由三個層級組成。第一層是高性能實現的計算層,包括數據結構,并行化策略,負載均衡,I/O 通信等;第二層是數值算法的數學層,包括實現成熟的數值算法,實現快速解法器,計算時間積分等;第三層是應用程序模型的物理層,涉及到實際物理模型,物理領域特定的算法,領域專家經驗等。高性能計算層和數學層屬于領域通用技術,可以在多個應用程序中復用。這兩層可以集成到面向對象的編程接口的編程框架中。利用這些編程框架,可以串行編寫應用程序,而無需HPC 實現的詳細信息,應用領域專家不需要特意學習計算機體系結構和并行技術,就可以高效的在超級計算機上開發和移植領域應用軟件。

圖1 高性能數值模擬應用的典型層級劃分Fig.1 Typical hierarchical division of high-performance numerical simulation applications
面向數值模擬的高性能編程框架研究起于二十世紀九十年代。美國在此方面投入大量人力和財力展開研究,研制出一系列面向高性能計算機的框架軟件,并成功運用到計算材料、計算化學、大氣環境等方面。歐盟方面,德國研制出針對有限元計算領域的框架軟件。本段主要關注國外編程框架的研發進展,從結構網格和非結構網格兩方面總結。
結構網格編程框架最為普遍。針對結構自適應網格(SAMR)[12],目前已經有一系列的框架軟件。SAMR 框架軟件主要有兩類:第一類專注于特定領域,增加了與這些應用程序相關的功能模塊和物理模型模塊,例如AstroBEAR[13], CRASH[14], Cactus[15], Enzo[16], FLASH[17], Overture[18], PLUTO[19], Uintah[20];另一類追求更通用的功能,為各種應用程序提供構建模塊,同時允許使用該框架構建特定領域的代碼, 例 如BoxLib[21-22],Chombo[23],AMReX[24-25],SAMRAI[26]。下面我們分別對國外主流的結構網格編程框架進行介紹,且表格1 對這些編程框架進行了總結。
BoxLib[21-22]是由勞倫斯伯克利國家實驗室(LBNL)的計算科學與工程中心(CCSE)開發的,主要是用于構建大規模并行SAMR 應用程序的框架。BoxLib 框架有兩個研發目標。首先,在大規模并行的SAMR 框架中支持新算法的快速開發、實現和測試; 第二,為特定科學領域編寫大規模代碼提供基礎,這些代碼將用于諸如天體物理學、宇宙學等領域的數值研究。BoxLib 基本的并行抽象是MultiFab,MultiFab 由FAB 組成,每個FAB 都是單網格上的數據集合。盡管BoxLib 本身提供了非常通用的功能來求解自適應網格層次結構上含時PDE,但很多特定領域都基于BoxLib 開發面向自身領域的應用程序代碼。 使用最廣泛的包括:完全可壓縮的輻射流體動力學軟件CASTRO[27]; 低馬赫數流體動力學軟件MAESTRO[28]等。目前BoxLib 已經被AMReX 替代。
Chombo[23]是由勞倫斯伯克利國家實驗室(LBNL)計算研究部門“應用數值算法小組(ANAG)”開發的,它是一個開源的框架軟件,目前最新版本是3.2.7。Chombo 是BoxLib 框架的分支,于1998年從BoxLib 分支出來。因此,Chombo 與BoxLib 共享許多功能。但它在數據容器的設計上與BoxLib 有所不同。Chombo 具有內置的診斷程序,可以跟蹤串行和并行時間,跟蹤內存泄漏情況等。Chombo 主要分為五個部分:BoxTools,提供了矩形陣列的運算及數據到分布式存儲系統的映射;AMRTools,提供數據通信的工具;AMRTimeDependent,管理含時自適應計算;AMRElliptic,用于自適應層級網格的橢圓方程求解;EBTools,嵌入式邊界離散工具。Chombo 正被應用于一些科學計算問題的研究中,包括廣義相對論軟件GRChombo、求解具有嵌入式邊界的可壓縮Navier-Stokes 方程、模擬陸地冰蓋的動力學、NASA Ames 的LAVA 軟件包使用了Chombo的一些工具等。
美國能源部ECP 計劃[29]列舉了化學與材料學、輔助設計、數據分析及優化、地球及空間科學、能源以及國家安全六大應用方向,以及數據與可視化、開發工具、數學庫、開源軟件、編程模型及運行時庫和軟件生態及分發等重點軟件技術。SAMR 為加速器設計,材料制造,天體物理學,燃燒,宇宙學,多相流和風電廠建模等領域的許多ECP 應用程序提供了時間和空間離散化基礎。主流的SAMR 框架軟件大多數最初使用MPI 進行基本并行化,其中將數據分發到MPI 列,每個列對自己的數據執行操作。最近,這些框架中的大多數都通過使用OpenMP 指令引入了一定級別的層次并行性。但隨著我們邁向E級機時代,節點體系結構已經發生了巨大變化,且不同類型的GPU 具有不同的編程模型,于是面向E級計算應用編程變得非常困難。AMReX[24-25]開發的主要推動力是為應用程序提供高性能框架,使其可以在各種當前和下一代系統上運行,而無需為每個新平臺花費大量精力重構代碼。AMReX 是一個開源的軟件框架,由勞倫斯伯克利國家實驗室(LBNL)、國家可再生能源實驗室(NREL)及阿貢國家實驗室(ANL)聯合開發的,用于構建大規模并行塊結構的AMR 應用程序,使得這些應用程序能夠高效地利用從筆記本電腦到E 級計算架構的計算機。AMReX 源代碼以及文檔等都托管在Github 上。AMReX 支持使用GNUMake 和CMake 構建應用程序,也可以將其構建為庫。AMReX 支持的算法可以求解簡單或復雜幾何形狀的偏微分方程系統。 AMReX 軟件的核心是一組靈活的數據結構,可用于表示分布式內存環境中的塊結構網格數據。AMReX 的主要功能包括:支持C++和Fortran 接口;支持在分層自適應網格結構上求解雙曲方程,拋物方程和橢圓方程;支持粒子和粒子網格操作;通過MPI,OpenMP,混合MPI/OpenMP,混 合MPI/(CUDA 或HIP 或DPC++)進行并行化,其中CUDA 用于包括NVIDIA GPU 的架構,而HIP 是用于包括AMD GPU 的架構;具有高效的并行I/O;支持AmrVis,VisIt,ParaView 和yt 的圖文件格式。目前七個ECP 應用程序項目以及許多非ECP 項目都在使用AMReX。
SAMRAI(Structured Adaptive Mesh Refinement Application Infrastructure)[26]是由勞倫斯利弗莫爾國家實驗室(LLNL)的應用科學計算中心(CASC)開發的,是一個面向對象的C++軟件庫,以使SAMR 能夠應用于與美國能源部計劃有關的大規模多物理場問題,目前版本4.0.3。SAMRAI 支持將SAMR 技術集成到現有代碼中,并簡化了在新應用領域中應用SAMR 方法。得益于面向對象的設計,SAMRAI 可以輕松地增強和擴展功能,從而滿足特定問題的需求。SAMRAI 涉及目標有兩方面:利用現有的并行通信框架的同時,支持自定義和擴展數據結構;為新應用提供靈活的算法框架。SAMRAI 已經被用于LLNL 和其他機構的各種應用程序開發和算法研究工作中。
Cactus[15]是由路易斯安娜州立大學(LSU)開發的,基于組件思想和MPI 通信實現,它的模塊化結構可以輕松實現多組件協作開發和跨平臺并行應用開發,目前版本4.9.0。Cactus 框架組件具有即插即用的特點,即組件可以與其他組件一起編譯和運行,并且組件可以在運行時按需組合而無需重新編譯,根據應用程序的特點,通過組件列表文件指定組件實現程序。Cactus 可以在許多架構上運行,在標準工作站或個人電腦上開發的應用程序可以在集群或超級計算機上無縫運行。Cactus 為很多軟件提供接口,例如Globus 元計算工具包,HDF5,PETSc 科學庫,web 界面以及高級可視化工具。Cactus 可以在多種架構和操作系統上運行,Cactus 有自己的用戶社區,且已經被計算科學中很多項目所運用。
Bireshwar 1968: Prasad Singh Bireshwar, A Tibetan Account of Abhayākaragupta,Journal of the Bihar and Orissa Research Society vol. 54, 179-198.
FLASH[17]是由芝加哥大學的計算科學Flash 中心(Flash Center for Computational Science)負責研究與開發的,是一個模塊化的、可擴展的、被廣泛使用的面向多物理多尺度的高性能編程框架,目前版本4.6.2。FLASH 結合了歐拉網格和拉格朗日粒子兩類模擬,包含相關支持模塊,模塊之間的交互和組合基于PYTHON 腳本語言進行配置,可以顯式指明模塊之間的訪問權限和繼承關系,它使用MPI 進行處理器間通信,并使用HDF5 或Parallel-NetCDF庫進行并行I/ O,以在各種不同的并行計算機上實現可移植性和可擴展性。它擁有不斷增長的用戶基礎,并已服務于天體物理學及其他領域。
Uintah[20]是由猶他大學的火災與爆炸模擬中心 (Center for the Simulation of Accidental Fires and Ex- plosions, C-SAFE)和科學計算與可視化研究所(Scientific Computing and Imaging Institute,SCI)共同研究與開發的,目前版本2.1.0。Uintah 包含一系列用于模擬和分析復雜化學物理反應的軟件庫,核心算法是SAMR 上的偏微分方程求解。Uintah 使用DAG 有向無環圖的方式確定組件之間的依賴關系和通信關系。目前Uintah 已經被廣泛運用到各項目中。

表1 國外主流的結構網格編程框架概覽表Table 1 Overview of main structured grid programming frameworks abroad
隨著計算機的快速發展以及數值方法的不斷更新,各領域涉及到的求解區域越來越復雜,單一的結構化網格不能滿足需求,從而各領域專家陸續采用非結構網格。非結構網格是有限元、有限體積等數值方法最常用的離散網格,各國都將其作為科學計算重點發展的方向。
libMesh[30]最初于2002年在德克薩斯大學奧斯汀分校CFDLab 中創建,它是一個C ++框架,用于在串行和并行平臺上對偏微分方程進行數值模擬,旨在為當前可用的許多高質量軟件包提供友好的界面。libMesh 主要是為并行AMR 計算提供支持,且能支持各種主流的有限元,并盡可能使用高質量的現有軟件。PETSc 或Trilinos Project 用于求解串行和并行平臺上線性系統。libMesh 提供了SLEPc 的可選接口,用于求解標準和廣義特征值問題。
PUMI(The Parallel Unstructured Mesh Infrastructure)[31]是由倫斯勒理工大學(RPI)開發的,是一個非結構化的分布式網格數據管理系統,能夠處理一般的非流形模型并有效地支持自動化的自適應分析。 PUMI 支持由五個庫組成的大規模并行計算機上的非結構化網格上的所有操作,包括消息傳遞和線程管理庫PCU、幾何模型接口GMI、非結構化網格表示MDS、分區模型和分布式網格管理APF Mesh、字段管理APF Field。PUMI為RPI科學計算研究中心開發的所有自動自適應仿真軟件提供核心功能。這些軟件目前正在被DOE、NSF、NASA、IBM 等多家單位使用。
UG4[32]是由法蘭克福歌德大學的歌德科學計算中心(G-CSC)開發的,是一個功能強大的軟件框架,用于在大規模并行計算機體系結構上求解復雜的偏微分方程。UG4 主要功能包括動態負載平衡、分布式自適應多網格層次結構上的高效求解器、基于靈活組件的離散化系統以及基于模塊化插件的體系結構,并且可有效的支持大規模并行計算機體系結構。UG4 包含五個有用的工具和應用程序,包括軟件包管理器ughub-UG4、科學計算的網格生成工具ProMesh4、視覺編程和自動GUI 生成的Visual Reflection 庫VRL、可視化ProfileViewer 以及大型矩陣和向量可視化工具ConnectionViewer。
ppOpen-HPC[33]是由東京大學、京都大學和日本海洋地球科學技術中心開發的一個開源基礎框架,用于在超級計算機上開發和執行大規模科學應用程序。ppOpen-HPC 包含四個組件:ppOpen-APPL 是一組優化的庫,涵蓋用于科學計算的各種類型的程序,例如并行I/O、線性求解器、可視化、自適應網格細化(AMR)以及實現了在特定算法(有限元、有限差分、有限體積、邊界元和離散單元法五種模型)下的動態負載均衡功能;ppOpen-MATH 由常見的數值庫組成,例如多重網格求解器(ppOpen-MATH/MG),并行圖庫(ppOpen-MATH/GRAPH),并行可視化(ppOpen-MATH/VIS)和用于耦合多物理場仿真庫(ppOpen-MATH/MP);通過使用ppOpen-AT,可以自動在各種類型的環境下生成優化的庫和應用程序;ppOpen-SYS 包括通信和容錯有關的系統軟件庫。
本節關注國外編程框架的研發進展,這些編程框架在各自領域發揮重要的作用。隨著超級計算機迅速發展,各框架軟件開發者也都重視各框架軟件在超級計算機上的可擴展性,或調整并行策略,或重視異構加速。其中AMReX 更是面向E 級計算機的體系結構特征進行開發。
本世紀我國超級計算機得到迅速發展,從而編程框架的研究也已經成為我國高性能計算的重要研究方向之一。我國編程框架的研究起于本世紀初,主要有北京應用物理與計算數學研究所的JASMIN和JAUMIN,中科院數學與系統科學研究院研制的PHG,以及中科院計算機網絡信息中心研制的SC_Tangram。下面我們將分別介紹這四個框架的研發情況。
JASMIN(J Adaptive Structured Meshes applications INfrastructure)[6]由北京應用物理與計算數學研究所研制,是以激光聚變高性能數值模擬為主要需求背景而開發的并行應用支撐軟件框架。JASMIN采用標準C++和Fortran77 語言編制,基于MPI 平臺和OpenMP 實現的混合計算。與算法類框架不同,JASMIN 是基于結構化網格的通用并行編程框架,用于數值模擬。基于JASMIN 框架,用戶不需要熟悉并行計算的復雜通信語句、自適應計算和高性能算法的實現細節,只需根據離散格式、初邊值條件和誤差評估方法,同時了解數據的依賴關系,就可以研制出求解偏微分方程的高效率并行應用程序。這些程序可以高效運行于現代并行機之上,實施大規模數值模擬。數值模擬結果可以由并行與分布可視化系統 TeraVAP 實施交互式可視化分析。JASMIN 具備自動容錯功能,在天河系列系統上,能一次提交運行到底,即中間系統局部故障發生時作業會自動續算。JASMIN 4.0 在并行擴展性上得到很大的提升,可有效實現20 萬核CPU 上的大規模計算,在天河二號上實現96 萬異構核計算,在神威·太湖之光上實現100 萬異構核計算。目前,JASMIN 應用領域包括大氣環境、電磁環境、核能開發、金屬材料分子動力學模擬等。
SC_Tangram[11]是由中國科學院計算機網絡信息中心研制的,該框架初期以計算宇宙學為應用背景,以運行時環境的支持和組件化協作開發兩個方面為關注點,設計的一種具有可擴展性的框架軟件。SC_Tangram 基于Charm++[34-35]和Cactus[15]框架開發,通過組件化思想調用,并且擁有自動負載均衡、容錯以及自動檢查點的優點,可以大幅降低編程難度,加速應用的開發和移植。SC_ Tangram 的核心組件是Flesh 組件,通過抽取和封裝應用共性實現共性組件以及面向領域的數據類型組件,通過調用CUDA、BLAS 等外部庫組件實現異構編程以及對于基礎數值庫的調用。針對我國最新研制的DCU 架構,改寫底層makefile 編譯腳本,自動鏈接DCU 代碼編譯生成動態鏈接庫,且框架中加入DCU 編程外部庫,從而SC_Tangram 支持DCU 異構計算。目前SC_Tangram 已經應用到力學計算、相場模擬及第一性原理計算等應用領域。未來SC_Tangram 將針對不同應用需求開發相應的接口,從而運用到更多的科學計算領域中。
JAUMIN (J Adaptive Unstructured Meshes Applications INfrastructure)[7-8]是由北京應用物理與計算數學研究所于2011年啟動研制的,是一個用于在非結構化網格上進行大規模并行數值模擬的編程框架。它集成了通用的非結構化網格數據模型,基于模式的并行計算模型和基于組件的編程模型。這些功能使JAUMIN 能夠有效地屏蔽并行實現細節并顯著降低編程復雜性,從而成為超級計算機和應用程序之間的橋梁。 JAUMIN 支持多種網格類型;支持多種計算方法,包括有限元、有限體積、ALE 方法等;支持多物理場、多時空尺度耦合計算;支持動態負載均衡;集合各種解法器,包括線性解法器、非線性解法器、特征值解法器。JAUMIN 促進了大規模并行非結構化網格應用程序的開發,并支持將應用程序擴展到成千上萬個CPU 內核。近年來,JAUMIN 已被廣泛用于一系列應用中,例如大變形彈塑性流體力學,材料破壞和斷裂,大型復雜結構沖擊動力學,結構靜態和模態振動分析等。基于JAUMIN 框架研制的軟件包括:三維ALE 流體力學軟件、三維粒子輸運軟件JSNT-U、沖擊動力學分析軟件PANDA-Impact、靜力/振動分析軟件PANDAStavib 等。
PHG (Parallel Hierarchical Grid)[9-10]是中國科學院數學與系統科學研究院“科學與工程計算國家重點實驗室”于2004年啟動研制的。網格和離散格式是影響計算結果精度的主要因素,自適應有限元方法可根據解的性質自動調整網格和離散格式,從而用小的計算代價獲得好的計算精度。自適應有限元方法正被領域專家廣泛使用,但是程序實現自適應有限元方法卻非常困難。PHG 是三維自適應有限元并行程序開發平臺,其核心是分布式的層次網格結構,目前版本0.9.5。 PHG 平臺主要采用C 語言編寫,利用MPI 及OpenMP 實現并行。PHG 平臺提供面向對象方式的應用程序編程接口,將網格、自由度、有限元基函數等都實現成對象。 PHG 支持基于最新頂點二分加密的并行網格自適應加密和放粗,提供多種主流的單元標記策略;支持hp 自適應有限元計算(對不同單元同時或分別加密和提高基函數階數); 支持大規模并行和動態負載平衡; 提供大型稀疏線性方程組直接求解和靈活的預處理迭代求解,包括自研解法器PCG、PGMRES、AMS 以及國際主流解法器PETSc、Hypre、LASPack 等; 可擴展到十萬進程、數十萬處理器核;計算結果可導出VTK、OpenDX、Ensight 等格式進行可視化。PHG 還包含一些有用資源,例如提供常用的有限元基函數,包括高階層次基函數以及譜元基函數;提供包括三角形、四面體上的高階數值積分庫及工具。PHG 平臺正被應用于一些科學計算問題的研究,包括第一性原理電子結構實空間計算軟件包RealSPACES[36]、開源結構分析軟件PHG-Solid、冰蓋模擬軟件MPAS-PHG 等。面向E 級計算機即將到來,PHG 需要針對E 級計算機架構進行平臺重構,從而支撐開發E 級計算并行有限元應用軟件。
經過近二十年的發展,我國框架軟件的研制已經取得階段性進展,各框架軟件也已經具備了支撐面向萬億至十億億次超級計算機的并行應用程序開發的能力。本文提到的四款國產框架軟件,JASMIN和JAUMIN 從更廣的角度去構建框架,是并行計算底層支撐;PHG 更專注于自適應有限元開發,PHG涉及到的算法專門面向有限元計算進行過調優;SC_Tangram 在異構計算方面表現更突出。
放眼超算發展的全景,以日本富岳和我國神威·太湖之光為代表的同構眾核計算架構仍非E 級超算建設的主流。各國計劃中的下代E 級超算仍以異構為主。國際上及我國不僅重視E 級計算機的研發,同時也重視面向大型科學計算的應用軟件研發。為了降低各應用軟件在異構平臺上的編程難度,支持應用軟件的快速開發和重構,框架軟件的發展也需針對E 級計算機的體系結構特征,調整各框架軟件的底層數據結構和核心算法,提升并行可擴展性,增強各框架軟件對異構眾核計算的支持,使各框架軟件能具備支撐開發E 級并行計算應用軟件的能力。
除了高效地利用超級計算機之外,框架軟件的發展還需要結合領域專家的需求,拓展新領域新方向,針對新問題開發新的功能模塊,以便應用到更多的科學計算領域。
利益沖突聲明
所有作者聲明不存在利益沖突關系。