APP下载

高性能计算数值模拟框架软件研究进展

2021-02-12何连花赵莲姜金荣金钟

数据与计算发展前沿 2021年6期
关键词:超级计算机高性能应用程序

何连花,赵莲,姜金荣,金钟

中国科学院计算机网络信息中心,北京 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

1 国外编程框架的研发进展

面向数值模拟的高性能编程框架研究起于二十世纪九十年代。美国在此方面投入大量人力和财力展开研究,研制出一系列面向高性能计算机的框架软件,并成功运用到计算材料、计算化学、大气环境等方面。欧盟方面,德国研制出针对有限元计算领域的框架软件。本段主要关注国外编程框架的研发进展,从结构网格和非结构网格两方面总结。

1.1 结构网格框架

结构网格编程框架最为普遍。针对结构自适应网格(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

1.2 非结构网格框架

随着计算机的快速发展以及数值方法的不断更新,各领域涉及到的求解区域越来越复杂,单一的结构化网格不能满足需求,从而各领域专家陆续采用非结构网格。非结构网格是有限元、有限体积等数值方法最常用的离散网格,各国都将其作为科学计算重点发展的方向。

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 包括通信和容错有关的系统软件库。

1.3 小结

本节关注国外编程框架的研发进展,这些编程框架在各自领域发挥重要的作用。随着超级计算机迅速发展,各框架软件开发者也都重视各框架软件在超级计算机上的可扩展性,或调整并行策略,或重视异构加速。其中AMReX 更是面向E 级计算机的体系结构特征进行开发。

2 国内编程框架的研发进展

本世纪我国超级计算机得到迅速发展,从而编程框架的研究也已经成为我国高性能计算的重要研究方向之一。我国编程框架的研究起于本世纪初,主要有北京应用物理与计算数学研究所的JASMIN和JAUMIN,中科院数学与系统科学研究院研制的PHG,以及中科院计算机网络信息中心研制的SC_Tangram。下面我们将分别介绍这四个框架的研发情况。

2.1 结构网格框架

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 将针对不同应用需求开发相应的接口,从而运用到更多的科学计算领域中。

2.2 非结构网格框架

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 级计算并行有限元应用软件。

3 展望

经过近二十年的发展,我国框架软件的研制已经取得阶段性进展,各框架软件也已经具备了支撑面向万亿至十亿亿次超级计算机的并行应用程序开发的能力。本文提到的四款国产框架软件,JASMIN和JAUMIN 从更广的角度去构建框架,是并行计算底层支撑;PHG 更专注于自适应有限元开发,PHG涉及到的算法专门面向有限元计算进行过调优;SC_Tangram 在异构计算方面表现更突出。

放眼超算发展的全景,以日本富岳和我国神威·太湖之光为代表的同构众核计算架构仍非E 级超算建设的主流。各国计划中的下代E 级超算仍以异构为主。国际上及我国不仅重视E 级计算机的研发,同时也重视面向大型科学计算的应用软件研发。为了降低各应用软件在异构平台上的编程难度,支持应用软件的快速开发和重构,框架软件的发展也需针对E 级计算机的体系结构特征,调整各框架软件的底层数据结构和核心算法,提升并行可扩展性,增强各框架软件对异构众核计算的支持,使各框架软件能具备支撑开发E 级并行计算应用软件的能力。

除了高效地利用超级计算机之外,框架软件的发展还需要结合领域专家的需求,拓展新领域新方向,针对新问题开发新的功能模块,以便应用到更多的科学计算领域。

利益冲突声明

所有作者声明不存在利益冲突关系。

猜你喜欢

超级计算机高性能应用程序
超级计算机
超级计算机及其在航空航天领域中的应用
删除Win10中自带的应用程序
谷歌禁止加密货币应用程序
每秒100亿亿次 中国超级计算机
一款高性能BGO探测器的研发
高性能砼在桥梁中的应用
SATA推出全新高性能喷枪SATAjet 5000 B
高性能可变进气岐管降低二氧化碳排放
三星电子将开设应用程序下载商店