Page 209 - 《软件学报》2026年第6期
P. 209

2528                                                       软件学报  2026  年第  37  卷第  6  期


                 distributed meta-search strategies, machine learning model-guided performance prediction, and SHAP-based compilation option analysis and
                 filtering,  the  resource  utilization  and  search  efficiency  during  the  compilation  tuning  process  are  significantly  improved.  Experimental
                 results  show  that  SWTuner  performs  excellently  in  tuning  typical  test  cases  on  the  new-generation  Sunway  supercomputer,  not  only
                 reducing  search  time  but  also  achieving  notable  reductions  in  actual  execution  power  consumption  during  the  search  process  compared  to
                 other  tuning  methods.  During  the  tuning  process,  the  random  forest  model  employed  by  SWTuner  demonstrates  good  generalization
                 capability  and  prediction  accuracy,  effectively  reducing  search  space  dimensionality  while  maintaining  tuning  effectiveness,  providing  an
                 efficient and reliable solution for automatic compilation tuning in high-performance computing.
                 Key words:  auto-tuning; AUC-Bandit algorithm; distributed meta-search; random forest model; Shapley value
                    编译器作为底层硬件与上层应用之间的重要桥梁, 其实施的优化技术对于提升程序性能至关重要                                 [1] . 例如, 循
                 环展开  [2] 、常数传播  [3] 等优化通过减少不必要的计算来提升程序运行速度. 结构体重组                   [4] 及函数内联  [5] 等优化通
                 过调整数据和指令的空间排布来增强              Cache  局部性. 同时, 现代编译器还能够利用单指令流多数据流                  (single
                 instruction multiple data, SIMD) 指令集和自动并行化等技术充分挖掘特定硬件架构的并行处理能力              [6−8] .
                    由于编译器内部的优化逻辑极为复杂, 即便是经验丰富的程序员也很难全面掌握所有编译选项的具体作用及
                 其相互影响. 手动调整编译选项以达到最佳性能通常是一项既耗时又费力的工作. 程序员需要深入了解每个选项
                 的意义, 测试不同配置组合下的程序表现, 并反复实验以找到最优配置. 这一过程不仅需要大量的时间和精力, 而
                 且结果往往受到个人经验和知识水平的限制, 难以确保获得最佳性能                      [9] .
                    随着编译技术的发展, 编译器版本及语言标准快速迭代, 编程模型和抽象层次也越发复杂. 如表                            1 所示, DPC++
                 支持统一的    SYCL  异构编程模型    [10] , RUSTC  通过静态类型检查和所有权模型确保内存安全            [11] , 而  Julia 则通过内
                 置的函数式编程以及多重派发等功能, 在保证代码编写简单、轻松易读的同时还能拥有与静态语言类似的性能                                    [12] .
                 这些新特性带来了更为复杂的编译挑战, 需要更多的编译选项来支持. 然而, 选项之间复杂的相互作用以及对应用
                 特点和硬件架构的依赖性, 使得传统的手工调优方法难以应对.

                                      表 1 主流编译器支持的编程模型、编程语言及选项数量

                             编译器        版本             编程模型              编程语言         选项数量
                              GCC       11.4.0   OpenMP/OpenACC/OpenCL  C/C++/Fortran   252
                             LLVM       14.0.0   OpenMP/OpenACC/OpenCL    C/C++         391
                             DPC++      14.0.0          SYCL               C++          441
                             NVCC        11.5           CUDA              C/C++         123
                             RUSTC      1.75.0           -                 Rust          47
                              GO        1.18.1           -                 GO            66
                              Julia     1.8.1            -                 Julia         37

                    为了解决上述问题, 研究人员设计了一系列自动化的编译调优方法, 以确保程序在特定的目标机器和体系结
                 构上达到预期的性能标准         [13] . 迭代式自动调优  [14] 是目前该领域最常用的技术之一, 其定义搜索空间并选择一组初
                 始配置来启动迭代过程, 随后根据程序性能的变化不断调整选项及参数, 逐步将结果收敛到最优配置. 在搜索策略
                 的选择上, 当前主流的编译调优方法通常依赖基于学习策略的变体, 包括遗传算法、模拟退火算法、粒子群算法
                 或贝叶斯优化等启发式搜索算法, 以及基于机器学习或深度学习方法构建的性能模型等                             [15–17] . 这些自动化的调优
                 方法不仅减轻了程序员的负担, 还能够更加高效地挖掘程序的潜在性能.
                    然而, 当前编译调优的研究仍面临以下几个方面的挑战: 首先, 目前主流的编译调优框架大多面向单核或多核
                 系统设计, 这导致搜索过程难以有效利用大规模并行计算系统的硬件资源, 扩展性受到严重限制. 其次, 传统的搜
                 索策略如遗传算法、模拟退火等容易陷入局部最优解, 而更高级的搜索策略往往依赖于使用基于机器学习方法构
                 建的复杂而强大的模型. 这些模型          (例如深度神经网络等) 需要大量样本进行训练, 以保证模型的准确性和泛化性.
                 同时, 当前的搜索方法侧重于提高搜索效率和精度, 而忽视了搜索过程中的功耗开销. 在高性能计算领域, 功耗管
                 理变得尤为重要, 因为这直接关系到系统的总体运行成本和可扩展性. 最后, 当前的搜索空间优化方法主要依赖于
                 传统的统计学方法, 难以充分挖掘编译选项之间的深层次依赖关系, 从而导致错过潜在的优化机会.
   204   205   206   207   208   209   210   211   212   213   214