没有合适的资源?快使用搜索试试~ 我知道了~
软件X 15(2021)100707原始软件出版物GridTools:便携式天气和气候应用框架Anton Afanasyeva,Mauro Biancoa,Mr. Boga,Lukas Mosimanna,Carlos Osunab,Felix Thalera,[1]杨晓波,李晓波. Schulthessa,ca瑞士国家超级计算中心,苏黎世联邦理工学院,瑞士b瑞士苏黎世联邦气象和气候研究所瑞士苏黎世联邦理工学院理论物理研究所dVulcan Inc,Seattle,美国ar t i cl e i nf o文章历史记录:收到2020年收到修订版2020年10月1日接受2021年保留字:C++天气气候库嵌入式DSLa b st ra ct天气预报和气候预测对于经济和社会的原因是非常重要的。实施天气和气候模型的软件开发复杂且难以维护,需要大量不同的能力,从环境科学,数值方法到低级编程。为了管理这种复杂性,我们开发了GridTools,这是一套针对天气和气候模型开发人员的软件库。通过将模型描述(前端)与其在目标平台上的有效实现(后端)分离,GridTools允许在各种平台上实现性能可移植的仿真,例如多核和GPU加速系统。我们讨论了应用GridTools的区域天气和气候模式COSMO和简单的基准以及COSMO上显示的性能结果。版权所有©2021作者。由爱思唯尔公司出版这是CC BY-NC-ND下的开放获取文章许可证(http://creativecommons.org/licenses/by-nc-nd/4.0/)。代码元数据当前代码版本1.1.2用于此代码版本的代码/存储库的永久链接https://github.com/ElsevierSoftwareX/SOFTX_2020_43法律代码许可证BSD-3-Clause使用git的代码版本控制系统用于驱动测试的软件代码语言、工具和服务使用C++、CUDA、CMake、Bash、Python编译要求、操作环境依赖性符合C++14的编译器:官方支持:Linux OSNVCC 9.2+GNU C++编译器7.3+ ClangC++编译器7.0.1+ Boost1.65.1+CMake 3.14.5+CUDA Toolkit 8.0+如果可用,链接到开发人员文档/手册https://gridtools.github.io/gridtools/latest/index.html问题支持电子邮件mbianco@cscs.ch1. 动机和意义天气预报和气候预测基于模拟软件,这些*通讯作者。电子邮件地址:mbianco@cscs.ch(Mauro Bianco).https://doi.org/10.1016/j.softx.2021.100707- 计算地球系统相关组件的未来状态。 这样的天气和气候模型是复杂的很难发展,也很难维持。开发有效的天气和气候应用程序所需的知识是巨大的,从环境科学到低级别编程。应用程序可以是数百万行代码,2352-7110/©2021作者。由爱思唯尔公司出版。这是一篇开放获取的文章,使用CC BY-NC-ND许可证(http://creativecommons.org/licenses/by-nc-nd/4.0/)。可在ScienceDirect上获得目录列表SoftwareX期刊主页:www.elsevier.com/locate/softxAnton Afanasye,Mauro Bianco,Lukas Mosimann等人软件X 15(2021)1007072命令式编程语言中的过程风格。天气预报模拟的时间限制意味着效率是最基本的。然而,HPC系统的发展历史表明,天气和气候应用在可实现的性能方面表现不佳已有四十年。虽然计算机被设计为最大化每秒浮点运算,但天气和气候应用程序受到内存带宽的限制[1],内存带宽已成为稀缺资源。由于计算机架构的兴起,是一种替代传统的多核系统与深存储器层次结构,有效的天气和气候模型的开发和维护这里介绍的软件采用了声明式的编程风格,利用领域科学家和计算机性能专家之间的关注点分离,以保持代码在不同架构上的可维护性和效率。这种方法已广泛应用于各个领域,并在其他工作中讨论[2模型的控制方程常采用显式有限差分法(FDM)和有限体积法(FVM)进行离散,从而产生模板算法。由于大气层的分层,当在垂直方向上使用隐式方案时,该实现更有效,这在该方向上的迭代循环中引入了天气和气候社区指的是 尽管存在垂直依赖性,但计算仍然是模板式的,因为计算内核是模板式的,在水平面上与水平域相比,垂直方向是浅的,并且当模型在分布式存储器计算机上执行时,维度被分解。Fuhrer等人[5]以前的工作表明,将仿真模型的动态核心从Fortran移植到名为STELLA的C++库 [6],可以为两种不同的计算机体系结构提供性能可移植的这导致了第一个在GPU上运行的天气和气候模拟代码。其他组件,如halo-update操作[7],允许在规模上执行代码[8]。然而,[6]中遵循的方法仅限于专门处理COSMO区域天气和气候模式[9],不适用于其他模式。相反,GridTools库集的开发允许开发人员表达更一般的天气和气候模型的数值模型,目标是允许模型开发人员实现可移植和有效的模型。此外,设计中注重可组合性和重用性,使模型的实现具有模块化和可维护性。2. 软件描述GridTools是一组C++库,旨在为开发人员提供实现天气和气候模型的工具。每个库提供一组有限的算法图案,建立一个模块化设计,其中每个组件是自包含的。主要组成部分是:1. 模板合成库,其提供用于指定类似模板的操作的嵌入式编程语言;2. 边界条件库,允许通用边界条件代码;3. 通信库[7],用于对分布式数据执行光环更新操作;4. 存储基础设施,用于控制所存储的数据字段的布局、对齐和填充,以支持平台特定的性能调整。GridTools最重要和最复杂的组件是模板组合库,它定义了开发人员可以在高级别上表达计算的接口,同时将实现的细节留给后端。在GridTools中,一个阶段被称为离散化有限差分算子(例如拉普拉斯算子)的逻辑应用。多阶段则是对输入数据的不同阶段的连续应用的组合。一个或多个多级可以组合在一起。用户可以指定将执行计算的后端(多核,GPU等)。将多阶段绑定到后端的结果称为(GridTools)计算。计算将应用于作为数据容器的字段,这些数据容器表示离散化空间数据尺寸.区分阶段和多阶段的原因是天气和气候模式需要应用连续的数值运算符,其输入和输出之间具有相应的这些运算符具有不同的模板形状,也就是说,它们需要访问不同邻域中的值。命令式代码可以通过应用不同的操作符多次迭代数据来编写,或者通过在非常复杂的循环体中手动融合操作符来编写,从而使代码的抽象层次变平。第一种方法会导致内存性能差,因为由一个阶段产生并由下一个阶段使用的数据需要存储在主存中。第二种方法,循环融合,可以极大地提高数据重用,但是代码将很快变得难以管理,无法扩展和调试。此外,在发生以下情况时,很难恢复到非融合实现不同的计算机体系结构将受益于具有较少融合操作的实现。虽然原则上可以由编译器提供融合,但是在编译器级别缺乏域信息抑制了融合。例如,假设模型开发人员指定一个字段应该作为中间结果写入,以便在两个阶段之间传递数据,但之后永远不会使用它。编译器不能为了优化而轻易忽略这些字段,即使从应用程序的角度来看这些字段是有效这突出了这样一个事实,即程序在错误的抽象级别上被指定,并且不能有效地表达正确的语义。在计算中,假设用户管理感兴趣的相关字段,而仅作为中间结果需要的字段由GridTools库本身管理。通过这种方式,不同的后端可以组织计算和中间数据,以利用特定的硬件特性。2.1. 软件构架图1描述了GridTools的总体结构。灰色部分被组织为典型的软件层次结构,顶层面向用户和更高级别,底层是平台特定的低级别接口。模板组成部分由两个主要组件组成:前端,它是用于指定计算的EDSL接口,以及后端之前的中间块,它负责数据依赖性分析和后端实例化计算的表示在模板组合的右侧,我们显示了边界条件和光环更新库(基于[7]),它们可以单独使用,也可以使用分布式边界接口一起使用,允许用户在域分解应用程序中指定边界条件在浅蓝色中,我们显示了库的输入:模板操作符,迭代空间规范,边界条件和光晕信息。在右边,用浅橙色表示的是其他有用的模块:存储模块Anton Afanasye,Mauro Bianco,Lukas Mosimann等人软件X 15(2021)1007073Fig. 1. GridTools的软件架构。灰色矩形描述了通常的软件体系结构图,其中,从上到下,抽象级别逐渐降低。蓝色的形状代表顶层的输入,而橙色的是工具模块,用于手动管理存储,与现有应用程序接口,并在C++中进行一些元编程让用户控制(如果需要)数据字段的存储布局和对齐,用于与遗留代码或其他应用程序接口的C/Fortran绑定,以及如果开发人员需要强大的工具来处理C++中的类型(不需要为天气/气候模型编程的领域科学家),则需要元编程库存储模块是性能的基础,并且抽象了用户难以以便携式方式管理的方面。程序员可以使用存储设施来确定给定目标后端的最佳存储类型(包括布局用户只需要选择(在编译时)后端并获取相关的存储类型,这样代码就不必当存储布局改变时,这是代码性能可移植性的关键。然后可以以独立于布局的方式访问字段,以便用户可以以可移植的方式访问数据。2.2. Gridtools接口和示例在这里,我们描述的主要接口所提供的模具组成模块,因为它是最复杂的,并突出了哲学的设计GridTools。该接口允许程序员实现FDM或FVM操作员(一个例子是在图。 2),并随后将这些操作组合成多级计算(图。 3)。我们有时将这些接口称为嵌入式领域特定语言(EDSL),因为接口的风格类似于领域特定语言。操作符实现特殊的函数作为具有特定特征的C++函数对象。操作符的参数列表是通过定义一个param_list来指定的,参数类型的序列被称为访问器(见图1)。第5行为例)。访问器指定参数的目的、参数列表中的索引以及指示第一个、第二个等中的最小和最大偏移量的范围,尺寸(图2的第2和第3行)。操作符的apply成员函数使用访问器访问给定偏移量处求值点周围的值。偏移量必须包含在访问器定义中指定的范围内,否则将向用户传达执行一个重要的特点是提供应用函数,第二个参数指定垂直区域。然后,模板操作员可以针对不同的垂直区域专门化数值,这是许多天气和气候模式中必不可少的功能,例如在垂直方向上实现边界条件,或在大气的垂直柱上实现隐式方案。一 旦 描 述 了 模 板 操 作 符 , 就 可 以 使 用 make_stage 和make_multistage函数组合它们。一多阶段计算对应于其阶段的应用,而这些阶段又是运算符对数据的应用。然后,在给定的后端上实现多级计算。 后端是标识实现组合执行的平台的类型(图1)。 3)。这些阶段在语法上被写为接受参数的函数调用最后,由这些操作产生的多阶段被传递给make_calculation函数,该函数也接受网格,该网格描述了在其上执行扩展的迭代空间。在这个make_calculation中提供了后端。后端是一种标识算法实现的类型,该算法将在给定的迭代空间(网格)上执行重要的是要注意,传递给阶段的参数(例如p_in和p_out)不包含要处理的数据,而是用于在编译时导出数据依赖关系的占位符(图2)。 3行3和4)。这个分析阶段允许后端为可能的中间结果分配必要的内存,并适当地调度如果占位符与临时(3中的p_lap)相关联,则后端将管理该临时的内存以优化其性能。作为示例,迭代空间可以以平铺的方式遍历,并且临时数据仅需要与平铺大小一样大,并且因此适合高速缓存。当运行计算时,其他占位符将与实际的数据存储对象相关联,如图7 的 第 7 行 所 示 。 3 . 第 三 章 。 有 些 数 据 可 以 绑 定 到make_calculation中,这在计算需要数十个参数的应用程序中很有用,但对于各种调用站点只有很少的变化这些接口的其他细微差别可以在GridTools的文档中找到[10]。由于应用程序和性能专家之间的关注点分离是GridTools的主要目标,因此我们的软件每天都会运行回归和性能测试,以确保不同平台上的质量图4比较了不同后端的性能,从简单到更复杂,运行相同的代码用于基本的语法。例如,复制模板将一个字段复制到另一个字段中,而其他字段执行更复杂的操作,如水平扩散或平流运算符。其他测试检查布局转换(用于与遗留Fortran代码接口)和边界条件。我们在此图中展示了三种不同的后端:P100GPU上的CUDA,一种为具有少量内核和大型缓存的旧微处理器量身定制的通用x86后端,以及众核(MC)后端,适用于最近的多核和众核处理器。MC后端最初是为Xeon-Phi平台设计的[11]。Anton Afanasye,Mauro Bianco,Lukas Mosimann等人软件X 15(2021)1007074图二、Gr idTo ols 中用于计算拉普拉斯算子的有限差分算子。图三. 两个拉普拉斯运算符的组合(由同一个函数对象实现)(第1-5行)及其后续执行(第7行)的示例图四、每 日 运行的性能回归测试的输出示例:显示的是CUDA和两个 CPU后端的配备GPU的单机的时间。3. 影响利用GridTools接口将COSMO模型的动态核心移植到C++语言中,并集成到基于Fortran的完整 COSMO模型中,验证了框架的功能完整性COSMO是一个非静力有限区域大气模式,由小尺度模拟联盟(COSMO)开发。从发布版本v5.6开始,COSMO附带了基于GridTools的动态核心,作为Fortran实现的替代方案,并取代了STELLA实现。在基于GridTools的实现,一些遗留的COSMO功能没有被包括在内。因此,直接比较基于GridTools的动态核心和原始Fortran实现之间的代码大小的差异并不直接。然而,作为一个例子,我们计算了新的快波解算器(src_fastwaves_sc. f 90)的大小,该解算器在Fortran和GridTools中都得到了充分的实现。在Fortran实现中,它的大小约为2.8k行代码,而GridTools实现则稍小,为2.5 kloc。然而,GridTools的实现更加模块化,Anton Afanasye,Mauro Bianco,Lukas Mosimann等人软件X 15(2021)1007075图五. COSMO动态核心模板性能。GridTools在大多数情况下都比STELLA的性能好一点,但幅度很小。显示的是在单精度257× 257× 81域因此包含额外的代码行用于抽象,并且可以在多个架构上无缝地高效由于更好的模块化和便携性,我们预计维护成本将降低。图图5显示了GridTools中的COSMO动态核心与P100 NVIDIAGPU上STELLA中的上一个版本之间的比较虽然GridTools通常表现得更好,但不应该期望有重大改进,因为STELLA已经实现了精心设计的算法(用于老一代GPU),从内存使用的角度来看接近最佳[1,6,8]。总的来说,基于GridTools的代码比以前的版本快了10%,而单个模板的结果可以是任何一种方式。GridTools版本的封装 更好,更易 于维护, 更不容易出错。 动态核心的GridTools实现由大约40个Grid-Tools计算组成。由于模板操作符的自包含定义和使用符号的本地名称的可能性,软件设计在STELLA实现方面发生了变化。例如,数据字段在组件之间显式传递,以使数据流在代码中显式,从而增加可读性,而不是在模块中通过全局名称来另一个例子是光环交换的管理,可以改为半自动的方法,其中光环线的状态被跟踪,以检查它们是否需要更新。由于GridTools库的设计原则,这些变化是可持续的。STELLA的另一个不同之处在于GridTools库可供更广泛的社区使用,而不仅仅是COSMO开发者。STELLA的情况并非如此,因为它与非开源的COSMO模型GridTools是一个独立的软件[12],拥有开源许可证。4. 结论在本文中,我们描述了用于开发天气和气候模型的GridTools库集。该设计基于关注点分离,相对于以前的实现,性能得到了改善。此外,GridTools的一个重要优点是降低了维护成本,并提高了应用程序代码的可组合性。将来,GridTools将扩展到处理其他体系结构。第三方提供商已经可以提供专门的后端。此外,GridTools的下一个版本将利用最新的C++特性提供更干净的界面,进一步提高GridTools库的可用性GridTools将成为即将到来的exa级计算时代的模型实现的基础,使GridTools成为最先进的软件产品。GridTools的Python接口正在开发中,以方便不熟悉C++的用户访问其功能。这将降低开发高性能天气和气候模型的门槛,从而加快其发展和适用性。CRediT作者贡献声明Anton Afanasyev:软件。Mauro Bianco:概念化,调查,软件,写作-原始草稿,写作-审查编辑。Lukas Mosimann:验证,软件。 汽车-洛斯Osuna:概念化,调查,软件,写作-审查编辑. FelixThaler:软件,验证,写作-评论编辑,数据管理。Hannes Vogt:软件,验证,写作-评论编辑。奥利弗·元首:概念化,监督,写作-评论编辑. 约斯特·范德冯德勒:监督,写作-评论编辑。托马斯C. Schulthess:概念化,写作-评论&编辑,资金获取。竞合利益作者声明,他们没有已知的竞争性财务利益或个人关系,可能会影响本文报告的工作致谢我们要感谢这些年来帮助构建GridTools库的所有贡献者,特别是Paolo Crosetto和Stefan Moosbrugger。这项工作得到了瑞士PASC项目GridTools、PASCHA和ENIAC项目以及欧盟委员会H2020未来和新兴技术(ESCAPE,授权号671627)的部分资助。Anton Afanasye,Mauro Bianco,Lukas Mosimann等人软件X 15(2021)1007076引用[1] [10]杨文,李文.艾级计算的目标和基线反思:基于天气和气候模拟的路线图。Comput Sci Eng 2019;21(1). IEEE计算机协会。[2] Unat D,Dubey A,Hoefler T,Shalf J,Abraham M,Bianco M,ChamberlainBL,Cledat R,Edwards HC,Finkel H,Fuerlinger K,Hannig F,Jeannot E,Kamil A,Keasler J,Kelly P,Leung V,Ltaief H,Maruyama N,NewburnCJ,Pericàs M. HPC系统的数据局部性抽象趋势。IEEE Trans ParallelDistribSyst2017;28(10):3007-20.[3] 张文辉,张文辉,张文辉. Kokkos:通过多态内存访问模式实现多核性能的可移植性。J ParallelDistrib Comput2014.[4] Hornung R,Keasler J. The raja portability layer:overview and status. 技术报告,LLNL-TR-661403,2014年。[5] Fuhrer O 等人 ,《Towards a performance portable ,architecture agnosticimplementation strategy for weather and climate models 》。SupercomputFront Innov 2014;1:1,http://superfri.org/superfri/article/view/17.[6]Gysi T,Osuna C,Fuhrer O,Bianco M,Schulthess TC. STELLA:天气和气候模式中结构网格方法的特定领域工具.I n :Proc. of the intl.用于高性能计算、网络、存储和分析。New York,NY,USA:ACM; 2015,p.第十二条第四十一条。[7]Bianco M.晕圈交换模式的界面。2014,ri.eu/IMG/pdf/wp86.pdf。[8]Fuhrer O , Chadha T , Hoefler T , Kwasniewski G , Lapillonne X ,Leutwyler D,Lüthi D,Osuna C,Schär C,Schulthess TC,Vogt H. 1km分辨率的近全球气候模拟:使用COSMO 5.0在4888 GPU上建立性能基线。Geosci Model Dev 2018;11:1665[9]Doms G,Baldauf M.非静力区域COSMO模式的描述-第一部分:动力学和数值 。 2015 年 , COSMO- 小 规 模 建 模 会 议 。 http://cosmo-model.org/content/model/documentation/core/cosmoDyncsNumcs.pdf。[10]GridTools存储库。https://gridtools.github.io/gridtools/latest/index.html网站。[11]2005年10月27日,李国伟,李国伟.将COSMO天气模型移植到众核CPU上。在:先进科学计算平台会议论文集。2019年,第1比11[12]https://github.com/GridTools/gridtools/releases/tag/v1.1.2网站。
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 5
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 天池大数据比赛:伪造人脸图像检测技术
- ADS1118数据手册中英文版合集
- Laravel 4/5包增强Eloquent模型本地化功能
- UCOSII 2.91版成功移植至STM8L平台
- 蓝色细线风格的PPT鱼骨图设计
- 基于Python的抖音舆情数据可视化分析系统
- C语言双人版游戏设计:别踩白块儿
- 创新色彩搭配的PPT鱼骨图设计展示
- SPICE公共代码库:综合资源管理
- 大气蓝灰配色PPT鱼骨图设计技巧
- 绿色风格四原因分析PPT鱼骨图设计
- 恺撒密码:古老而经典的替换加密技术解析
- C语言超市管理系统课程设计详细解析
- 深入分析:黑色因素的PPT鱼骨图应用
- 创新彩色圆点PPT鱼骨图制作与分析
- C语言课程设计:吃逗游戏源码分享
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功