Page 35 - 《软件学报》2025年第12期
P. 35
5416 软件学报 2025 年第 36 卷第 12 期
和异构计算平台设计的标准化测试集, 其中包含多个计算密集型和内存密集型的应用程序, 常被用于评估 GPU、
多核 CPU 及其他异构计算设备的性能. Rodinia 中的测试用例均来源于实际问题, 因此能够有效代表现实中可能
遇到的计算挑战. 通过移植 Rodinia v3.1 版本中的 Julia 用例 [39] 至 SACA.jl, 我们能够系统地评估 swJulia 在新一代
神威超级计算机上的编程成熟度, 并深入探究 SACA.jl 在生成高效众核代码方面的能力. 这一研究路径不仅有助
于量化 swJulia 的性能表现, 更能为未来的优化工作提供依据.
针对示范应用, 本文选取了 4 个典型分子系统作为测试用例, 以全面评估 NNQS-Transformer 在新一代神威超
级计算机上的模拟效果. 具体而言, 包括 C 2 、LiCl、C 2 H 4 O 这 3 个小分子系统, 以及 Fenton 反应的 Fe(H 2 O) 5 H 2 O 2
大分子系统 (包含 52 个量子位数和 46 个电子). 通过这些具有挑战性的测试用例, 我们能够有效地验证 swJulia 在
支撑大规模量子化学模拟时的性能潜力及可扩展性.
4.2 swJulia 编译器性能测试
为了全面展示 swJulia 编译系统的能力, 我们进行了 3 个方面的评估. 首先, 我们在神威平台上使用 Micro-
Benchmarks 对比了 Julia 与其他主流编程语言的性能, 以验证 MPE 编译器的高效性. 其次, 我们对比并分析了
Rodinia 中单线程 Julia 测试课题在 x86 和神威平台上的性能, 以评估使用 swJulia 的运行时开销. 最后, 我们使用
SACA.jl 对单线程 Julia 测试课题实施了初步的众核优化, 并且在 SW26010Pro 上测试并统计了性能加速比以及代
码修改行数, 以展示 SACA.jl 在众核编程上的便捷性.
4.2.1 MPE 编译器性能测试
图 13 展示了 Julia 与其他主流编程语言针对常见操作的性能对比, 其中, Fortran、Python 和 Julia 以 C 为基准
的平均相对执行时间分别为 1.50、77.71 以及 2.12. C 和 Fortran 均属于静态编程语言, 需要经过 swGCC 编译器将
源代码转换为机器码. swGCC 提供了丰富的 AOT 编译优化, 能够根据程序特点进行针对性的代码变换及数据排
布, 因此整体性能相对较优. Python 是典型的解释型语言, 其每次执行前都需要通过解释器将源代码转换为字节
码. 同时, Python 解释器在执行每条语句时都需要进行类型检查, 以动态确定对象的类型. 上述转换和检查等操作
会引入额外的开销, 导致程序启动和执行时间的增加, 因此在执行效率上通常不如编译型语言. Julia 结合了编译型
和解释型语言的优点, 既通过多重分派机制支持动态的泛型编程, 又采用 JIT 机制根据实际参数类型实施专门优
化, 因此在执行效率上接近 C 语言.
10 3
recursion_fibonacci
以 C 语言实现为基准的相对执行时间 10 1 0 iteration_pi_sum
parse_integers
userfunc_mandelbrot
recursion_quicksort
2
10
matrix_statistics
matrix_multiply
print_to_file
10
10 −1
C Fortran Python Julia
图 13 Julia 与其他语言针对常见操作的性能对比
Julia 的 JIT 机制会在函数首次执行时进行编译, 主要流程包括词法分析、语法分析以及类型推断等, 并根据
推断得到的类型信息生成特例化的代码. 同时, 在函数运行过程中, Julia 的垃圾回收 (garbage collection, GC) 机制
会自动清理不再使用的内存. 在首次运行时, 由于需要初始化内存并跟踪内存回收, 因此垃圾回收的开销相对较
高. 考虑到不同处理器在指令集、硬件结构以及峰值性能等方面的差异性, 仅比较 Julia 程序在不同系统上的执行

