APP下载

ARM计算环境下堆芯程序CORTH和KYLIN2的移植1)

2021-03-13明平洲余红星

中国核电 2021年1期
关键词:堆芯数值组件

明平洲,芦 韡,刘 东,曾 辉,余红星

(1.中国核动力研究设计院,四川 成都 610213;2.中国核动力研究设计院核反应堆系统设计技术重点实验室,四川 成都 610213)

中国核动力研究设计院开展的软件自主化项目已进入到第三期,其成果形式主要是NESTOR软件包等涵盖核反应堆多个学科所需的计算程序。堆芯计算涉及的学科主要有反应堆物理、热工水力、力学以及燃料性能等,它们的单学科计算或者多学科耦合计算均用于论证和分析堆芯内部存在的大量异质现象[1]。由于真实堆芯的解析解极难获得,不同的数值离散方法对各种物理数学方程的工程求解成为计算相关研究人员的核心工作[2]。现阶段中国核动力研究设计院引进的基础集群计算设施采用Intel商用处理器和国产飞腾处理器混合组成的结构,能够通过SLURM集群资源管理系统进行计算作业的分区投递。目前国内高端处理器市场主要有龙芯、飞腾和兆芯等品牌,其中飞腾研制的CPU已加入开放的ARM生态系统,指令集兼容ARMv8-A[3]。区别于Intel商用处理器使用的X86复杂指令集体系,ARM是典型的精简指令集体系。这使得集群计算机有不同特点的计算资源可供使用。不同指令集体系下的处理器存在着不同特点[4],在商用处理器受限或计算资源紧张的情况下,ARM计算资源有可能成为一种补充的数值计算资源。

研究涉及移植的两个软件描述为[5]:

1)CORTH是用于堆芯热工水力分析的子通道程序,可用于分析研究反应堆及其回路系统中冷却剂的流动特性、热量传输特性和燃料元件的传热特性,正在持续进行开发和改进。

2)反应堆物理涉及稳态计算和动态计算两大类,它们根据某一层面的均匀化处理结果进行全堆芯的中子物理参数求解。KYLIN2程序现阶段在组件级别为堆芯程序提供组件库的计算,其核心为使用特征线方法的中子输运求解器,具备多种计算功能。

1 计算环境说明

现阶段中国核动力研究设计院引进的集群计算机具备多个计算节点,分为多个分布式内存计算区域,两个主要类别对应于Intel商业处理器环境和国产飞腾处理器环境。前者在运行稳定性和配套软件上较为成熟;后者面向通用计算,但计算效率和运行稳定性略为不同,通常ARM处理器结构主要应用于嵌入式数字设备等领域,在数值分析计算领域尚处于局部应用状态。

硬件描述:飞腾FT-1500 A是基于ARM64位架构的服务器芯片,面向计算服务器市场。在集群计算机上,每个逻辑上的飞腾计算节点使用了一个飞腾FT-1500 A处理器,具备16个处理器核心,每个处理器核心运行单个线程。处理器打开了FP和ASIMD、SHA1,SHA2等标志位。每个飞腾计算节点上的内存为64 GB;

软件描述:操作系统为麒麟操作系统,开发环境主要为GCC 4.9.3,安装Glibc 2.19、make 4.0和开发工具链Binutils 2.24.90[6]。

子通道计算软件CORTH和堆芯组件程序KYLIN2作为专业应用软件在开发过程中依赖于第三方数值函数库等。因此,移植过程需要围绕两类软件进行移植和测试,一类是底层系统软件,用于为软件自主化的上层应用软件提供通用计算功能的接口,并在ARM计算环境下摆脱对商业函数库的依赖;另一类是堆芯计算本身的内容,需要进行程序代码改写和修订,适应新的计算环境。在本文中将对CORTH和KYLIN2展开分析和计算。

表1 待移植软件Table 1 Software to be ported

研究首先验证飞腾处理器所在ARM环境下移植的可行性和正确性,然后给出移植堆芯程序的过程和实验来展开讨论。考虑集群计算机商用计算节点配置参数的涉密性,这里选取的商用处理器对比对象为HP Z800服务器计算环境,其处理器为Intel Xeon X5540,共计12个核心,处理器频率为2.53 GHz,约为飞腾处理器的两倍。

2 移植和测试

整个移植工作采用自底向上的流程以适应ARM计算环境,测试过程则将对比Intel处理器环境(HP Z800服务器)和ARM计算环境(集群系统的飞腾计算节点)的效率、数值稳定性和正确性。

2.1 系统软件的移植

参与数据前后处理的DATA和HDF5函数库直接使用ARM计算环境提供的C/C++编译器进行编译和软件提供的基准程序进行测试,确保文本文件或二进制文件的正确读写。

参与数值计算的PETSc、SparseLib++、Lapack和SuperLU在移植过程中重点用于求解线性方程组和参与特征值计算等数值问题。各个函数库由多个模块组成,底层依赖于向量、矩阵和索引集等数据结构,内部采用C/C++语言和Fortran语言混合编程。这里移植到飞腾计算节点后使用GNU编译器(gcc,g++和gfortran)以及基于GNU编译器生成的并行编译器(mpicc,mpicxx和mpifort)进行编译,能够正常生成静态库和动态库。与此同时,基于已有的热工分析内的守恒控制方程和特征线方法内的提取的全局粗网加速线性方程组的研究工作[7],使用移植的库进行例题测试。ARM计算环境能够正常完成数值计算,且收敛精度均达到预期的需求。

2.2 CORTH

CORTH程序实现全堆芯栅元级别的子通道计算,仅使用C/C++编程。移植过程中需要去掉MKL函数库的依赖和改写Fortran语言部分,例如将线性方程组的求解改用SparseLib++进行求解。此外在ARM64平台上重新编译DATA类和热工物性函数库Thermal_lib,移植过程涉及Fortran和C++在ARM环境下的相互调用,例如热工物性函数库中的func函数,在书写GNU编译器对应的头文件声明为:

#ifdef __cplusplus

extern"C"

{

#endif

extern double func_(double*,double*,double*);

#ifdef __cplusplus

}

#endif

移植完成后针对ACP1000压水堆四种子通道划分的例题进行串行计算效率的测试。两种硬件环境下均使用GNU编译器,编译优化等级统一设置为O2。

表2 CORTH运行时间统计Table 2 Runtime statistics of CORTH

串行计算情况下Intel商用节点的效率明显高于ARM计算节点,随着子通道划分的数量增加,ARM计算节点的效率与Intel计算环境的差距由7.8倍变为4.7倍。经过测试之后可以明确子通道分析程序的运行特点:随着问题规模的提升,ARM计算节点与Intel计算环境的效率差距在减小。

2.3 KYLIN2

KYLIN2用于生成组件截面库,内部的燃耗计算提供不同工况点,因此KYLIN2的核心计算功能体现为二维特征线输运计算和点燃耗计算。KYLIN2程序的主要计算步骤为:

1)计算参数的初始化和分配内存空间;

2)读取输入文件;

3)获取基干数据库文件;

4)判断计算类型,执行组件基干计算或燃料分支计算;

5)燃耗步是否结束,结束则整个计算完成,否则转回步骤2)。

串行KYLIN2程序的移植过程主要涉及替换燃耗计算的线性方程组求解部分,即使用SuperLU函数库提供的直接消去法函数进行线性方程组的求解。

表3 组件例题Table 3 Assembly examples

以上两个例题将在HPZ800服务器和内部集群计算机的飞腾计算节点运行。数值稳定性和正确性将对比按照燃耗深度与有效增殖因子值的关系图形给出(限于篇幅,每个燃耗步下的功率分布和燃耗分布不在论文中给出)。计算效率方面则给出同一例题在HP Z800服务器和飞腾计算节点的各自串行总计算时间。

(1)31016B例题

该例题增殖因子随燃耗深度的变化趋势如图1所示。

图1 31016B问题的燃耗变化趋势图Fig.1 Burn-up change trend of 31016B example

从图1中可以看到,两种硬件平台下增殖因子随燃耗深度的变化趋势保持吻合,数值稳定性在误差范围内。该例题在两类硬件环境中的串行计算时间统计如表4所示,两者相差约在6倍左右。

表4 31016B问题的计算时间Table 4 Calculation time of 31016B example

(2)42000_Grey例题

该例题增殖因子随燃耗深度的变化趋势如图2所示。

图2 42000_Grey问题的燃耗变化趋势图Fig.2 Burn-up change trend of 24000_Grey example

从图2中可以看到,两种硬件平台下增殖因子随燃耗深度的变化趋势保持吻合,数值稳定性在误差范围内。另外该例题在两类硬件环境中的串行计算时间统计如表5所示,两者相差约在7倍左右。

表5 42000_Grey问题的计算时间Table 5 Calculation time of 42000_Grey example

根据以上的移植和测试,可以得出结论: KYLIN2程序在ARM计算节点与Intel计算环境的效率差距在6~8倍,仍然远高于CPU频率之间的差别,这一方面由于ARM精简指令的运行方式在数值计算方面相比Intel处理器使用的复杂指令集在处理数值计算的时候存在差异,另一方面也由于飞腾处理器FT-1500 A的缓存较小。整个计算结果表明数值求解方法的替换对数值稳定性没有影响,ARM计算节点上数值计算的准确性与Intel计算环境没有明显差异。

3 KYLIN2的OpenMP并行优化

实际工程应用时需要对KYLIN2反复调用,生成不同工况点下的大量组件截面库。为了在飞腾处理器为代表的ARM计算环境下提升计算效率,对KYLIN2的输运计算模块编制OpenMP共享式内存并行版本KYLIN2-OpenMP,增强国产芯片的实用性。使用两种常见于学术论文的组件基准例题(压水堆组件AFA3G和C5G7基准例题UO2组件)进行测试,同时对比有效增殖因子值的正确性和计算效率。

首先对不使用粗网加速的情况进行统计,编译优化选项选为-O2,相应的计算结果和串行计算效率统计如表6所示。飞腾计算节点在求解AFA3 G组件问题时耗时较长(约两天时间仍然没有计算完成),与HP Z800相差一个数量级(10倍)。

表6 无粗网加速的计算时间统计Table 6 Calculation time without GCMFD

使用粗网加速之后将减少数值迭代次数,表7统计相应的运行时间,编译优化选项仍然选为-O2。数值方法的改变并不会改变数据的内存布局,处理器的差异仍然保持在一个数量级左右。

表7 粗网加速的计算时间统计Table 7 Calculation time of GCMFD

接下来固定优化等级为O2,然后测试OpenMP多线程版本在两种硬件环境下的实际并行效率,限于篇幅这里仅给出C5 G7 UO2组件例题的统计结果(AFA3 G组件例题有类似结果)。实验时考虑HP Z800服务器最多有12个处理器核心,因此线程数取值范围取为[1,12]。

如图3所示趋势,两种硬件环境下C5 G7例题的计算效率在O2优化等级下均通过多线程并行取得效率的提升,但处理器核数超过8个之后并不能带来计算效率的改善,这一方面由于C5 G7例题的能群循环结构只有7个能群,能群并行的算法存在着增益上限,另一方面多线程的管理开销随着线程增多逐渐变得不可忽略。借助于OpenMP共享式内存并行,单个计算方案在飞腾计算节点内的计算效率与HP Z800服务器的差距在缩小,此时统计计算时间可以明确使用8个线程后飞腾处理器运行两个例题的效率与HP Z800服务器上单个Intel处理器的运行时间接近。当集群计算机的商用计算资源紧张时,由于国产计算节点使用人数较少,此多线程并行版本的临时解决方案可满足使用ARM计算环境临时替换商用计算环境执行计算的需求(核工程计算过程中,Intel商用处理器经常使用单线程来运行早期版本的KYLIN2程序)。

图3 引入OpenMP并行后的组件例题运行时间Fig.3 Runtime statistics ofassembly example after OpenMP programming

4 结论

在内部集群计算机的飞腾计算节点进行移植应用,探讨国产芯片构建的计算环境应用于工程计算的可行性,形成的结论如下所述:

1)所有初步移植的程序在飞腾计算节点上的串行计算效率均低于HP Z800这类Intel处理器商用服务器,且超过处理器频率之间的差异。更改编译优化等级之后,计算效率的差异保持不变;

2)现阶段串行CORTH 0.8.4版本和KYLIN2 0.8.8版本的程序已被成功移植到飞腾计算节点,且能够正常运行和开展工程计算。移植过程使用的计算例题均能够正常完成计算,计算结果与Intel硬件环境下保持一致(偏差范围内);

3)飞腾计算节点上的数值计算运行效率较低,一方面是由于使用的是底层函数库,另一方面也由于飞腾处理器本身的精简指令集特性和较小的缓存。相比Intel处理器复杂指令集存在多种复合指令,完成部分计算需要更多的指令周期,但通过引入局部的OpenMP多线程优化,可以使得国产飞腾这种ARM计算环境成为工程计算的补充资源。

国产处理器及其生态环境在持续发展,核反应堆工程计算在后续发展过程可以横向借鉴日本、美国等经验,覆盖更多的计算硬件,提升适用性和交叉验证计算方案的正确性。本文形成的结论和记录的技术细节将随着后续在国产计算节点上开展的计算分析工作进行深化和扩展。

致谢

本研究工作感谢中国核动力研究设计院设计所九室提供的样本程序和集群运行环境,同时也感谢相关人员对论文的建议。

猜你喜欢

堆芯数值组件
Android系统上移动组件化应用框架设计
体积占比不同的组合式石蜡相变传热数值模拟
数值大小比较“招招鲜”
创建Vue组件npm包实战分析
智能机械臂
舰载雷达TR组件冲击计算方法分析
舰船测风传感器安装位置数值仿真
铝合金加筋板焊接温度场和残余应力数值模拟