Page 33 - 《软件学报》2025年第12期
P. 33
5414 软件学报 2025 年第 36 卷第 12 期
Julia hybrid code SWPyTorch
MPE code @saca CPE code Python API
Torch distributed library
Process
MPE compiler SACA.jl c10d GroupMPI libmpi
Parser
CPE compiler
Torch tensor library
High-level SACA wrapper ①
Julia IR Reused ATen TH THNN
optimizations SIMD exts
Torch runtime library
Lowering Runtime APIs
Tensor OP
impl dispatch Mem alloc
Low-level
LLVM IR
optimizations LLVM.jl ①
Support LLVM wrapper ② Accelerate libraries
OrcJIT engine
LLVM ToolChains
CoupleStates swBLAS
Executable Runtime CPE DyLink swMath swDNN
stream libs objects ③
SW26010Pro executable image swTENSOR …
Julia packages
NLopt.jl KrylovKit.jl TensorOperation.jl LinearAlgebra.jl File system
MPI.jl PyCall.jl Distributed.jl … roFS Lustre
图 12 基于 Julia 的可扩展量子化学模拟器 NNQS-Transformer 组成结构
其次, Julia 通过其基础库中的 ccall 方法, 能够实现对 C/C++动态库中众核函数的直接调用, 诸如 swBLAS、
swMath 等. 此方法不仅充分利用了 C 语言众核加速库的丰富资源和卓越性能, 同时保留了 Julia 编程的便捷性与
灵活性. 这一调用路径在图 12 中以②号箭头标明.
最后, 对于其他支持众核优化的关键函数, 我们借助 SACA.jl 提供的@saca 宏, 在 Julia 中直接进行 SACA 众
核编程. 这种方式可以灵活控制多核组计算资源和内存空间, 从而满足 NNQS-Transformer 对片内大共享空间、多
级细粒度并行等高级功能的需求. 相应的调用路径在图 12 中以③号箭头清晰指示.
3.2 完备的第三方库适配
结合 NNQS-Transformer 的实际需求, 我们在新一代神威超级计算机上成功移植了多个 Julia 第三方库, 功能
涵盖数值计算、分布式通信及外部函数调用等多个领域. 同时, 我们对相关的底层支撑环境进行了专门的适配和
优化. 相关第三方库及其底层支撑环境如表 4 所示.
表 4 NNQS-Transformer 依赖的第三方 Julia 库及其底层支撑环境
类别 Julia库 底层支撑环境
NLopt.jl libnlopt.so
KrylovKit.jl -
数值计算
TensorOperations.jl -
LinearAlgebra.jl libswblas.so, libswlapack.so
Distributed.jl -
分布式通信
MPI.jl libmpi.so
外部调用 PyCall.jl swPython解释器
在数值计算方面, 我们引入了 NLopt.jl [30] , 其底层基于 libnlopt.so 实现, 能够应对从简单的数值最小化到复杂
的优化约束问题. 此外, KrylovKit.jl [31] , 一个纯 Julia 语言实现的开源项目, 也被纳入我们的库体系中. 它提供了多

