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 程序在不同系统上的执行
   30   31   32   33   34   35   36   37   38   39   40