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] . 这些自动化的调优
方法不仅减轻了程序员的负担, 还能够更加高效地挖掘程序的潜在性能.
然而, 当前编译调优的研究仍面临以下几个方面的挑战: 首先, 目前主流的编译调优框架大多面向单核或多核
系统设计, 这导致搜索过程难以有效利用大规模并行计算系统的硬件资源, 扩展性受到严重限制. 其次, 传统的搜
索策略如遗传算法、模拟退火等容易陷入局部最优解, 而更高级的搜索策略往往依赖于使用基于机器学习方法构
建的复杂而强大的模型. 这些模型 (例如深度神经网络等) 需要大量样本进行训练, 以保证模型的准确性和泛化性.
同时, 当前的搜索方法侧重于提高搜索效率和精度, 而忽视了搜索过程中的功耗开销. 在高性能计算领域, 功耗管
理变得尤为重要, 因为这直接关系到系统的总体运行成本和可扩展性. 最后, 当前的搜索空间优化方法主要依赖于
传统的统计学方法, 难以充分挖掘编译选项之间的深层次依赖关系, 从而导致错过潜在的优化机会.

