Page 23 - 《软件学报》2025年第12期
P. 23

5404                                                      软件学报  2025  年第  36  卷第  12  期


                    1) 针对  SW26010Pro  处理器架构特点, 设计了异构众核即时编译支撑方案, 包括                ORCJIT  引擎构建以及动态
                 链接模式下的片上存储空间管理, 有效支撑了              Julia 等动态语言在国产异构众核处理器上的适配和优化.
                    2) 设计并实现了面向新一代神威超级计算机的动态语言编译器                      swJulia, 其继承了  Julia 编译系统的灵活性,
                 同时支持原生众核编程、向量数据类型以及运行时接口封装等针对                       SACA  编程模型的    Julia 语言扩展.
                    3) 基于  swJulia 成功实现了大规模并行量子化学模拟示范应用在新一代神威超级计算机上的部署, 并结合硬
                 件架构及应用特点, 实现了多个维度的优化方法, 有效验证了                  swJulia 编译系统的可用性和好用性.
                    本文第   1  节介绍背景及相关工作. 第       2  节介绍  swJulia 的基本结构及关键技术实现. 第       3  节以大规模并行量子
                 化学模拟器    NNQS-Transformer 为例介绍基于    swJulia 的示范应用支撑及优化. 第      4  节通过实验评估     swJulia 的基
                 础性能及示范应用的优化效果. 第          5  节给出总结和展望.
                  1   相关工作


                  1.1   Julia  动态编程语言
                    Julia 是一种现代的、开源的、高性能的科学计算和数据处理编程语言. 其由                      MIT  在  2009  年发起, 旨在解决
                 “两种语言”的问题, 即期望该语言在运行数值算法时的性能与                    C++或  Fortran  一样优秀, 而在编程方面与     Python
                                                                           [9]
                 或  Matlab  一样简单轻松  [6] . 截至  2024  年  6  月, Julia 在代码托管平台  GitHub 上的  Stars 数量超过  44.7k, TIOBE  编
                 程语言排行榜     [10] 排名第  29  位, 并且呈现稳步上升的趋势.
                    Julia 语言实现了静态编译语言和动态类型语言之间的平衡. 基于                  LLVM  的即时编译    (JIT) 机制, Julia 提供了
                 强大的计算性能. Julia 内置的函数式编程以及多重派发等功能, 在保证代码编写简单, 轻松易读的同时还能拥有与
                 静态语言类似的性能       [7] . 与  C  和  Fortran  等传统编程语言相比, Julia 在设计之初就考虑了并行计算相关的特性, 在
                 编程语言层面提供了向量化、线程级并行和分布式计算的原生支持.
                    Julia 语言能够非常方便地与其他编程语言嫁接. 目前, Julia 语言可以在不使用第三方代码的情况下, 直接调
                 用  C/C++、Fortran、Python、R  和  Matlab  等语言, 从而获得更具可读性和高效性的计算程序. 同时, 为了有效利
                 用  NVIDIA GPU  的强大计算能力, Julia 社区推出了     CUDA.jl [11] 以实现将  CUDA  编程模型无缝集成到    Julia 的元编
                 程系统. CUDA.jl 支持自动类型推断, 可以自动将          Julia 代码转换为  GPU  可执行的   CUDA Kernel, 并提供了一套丰
                 富的函数库, 覆盖内存管理、同步、错误处理等各个方面                  [12] .
                                                                                           [13]
                    自发布以来, Julia 获得了学术界和工业界的广泛关注, 并产生了大量优质的第三方库. Optim.jl 和                     Differential-
                 Equations.jl [14] 等科学计算库涵盖了数值分析、优化、微分方程求解等多个领域, 为研究人员提供了高效的算法实
                 现. FinEtools.jl [15] 和  FEMBase.jl [16] 等有限元分析库用于求解结构力学、热传导等问题, 支持各种结构类型和加载
                 条件下的仿真分析. CFD_Julia 是由      Pawar 等人  [17] 创建的流体力学模拟工具, 包含一系列经典的           CFD  算法, 并支
                 持多种边界条件和流动模型. Flux.jl      [18] 是一个基于  Julia 的深度学习框架, 提供了丰富的工具和库用于构建和训练
                 神经网络模型. Yao.jl  [19] 是一个开源的   Julia 语言框架, 旨在通过软件工具、量子算法设计、量子软件                 2.0  和量子
                 计算教育来赋能量子信息研究.
                    Julia 语言计算速度快、可读性高、开源免费, 相比              Python  等动态编程语言能够保证程序执行的高效性, 相
                 比  C++、Fortran  等静态编程语言更加贴近自然语言的编写风格, 是开发新兴科学计算应用的极佳选择, 亟需在新
                 一代神威超级计算机上进行部署和优化.
                  1.2   新一代申威异构众核处理器      SW26010Pro
                    SW26010Pro  异构众核处理器是新一代神威超级计算机的核心                [20] , 其基本结构如图  1  所示. SW26010Pro  片内
                 集成  6  个核组  (core group, CG), 每个核组包含  1  个控制核心  (management process element, MPE) 和  64  个运算核
                 心  (computing process element, CPE). MPE  主要功能是控制、通信、I/O  等, CPE  则主要用于加速并行计算. CG    中
                 CPE  以  8×8  阵列方式进行排布, CPE   之间通过阵列内网络进行互连. CG          中的任意两个      CPE  之间, 可以通过远程
                 内存访问   (remote memory access, RMA) 方式进行数据通信.
   18   19   20   21   22   23   24   25   26   27   28