Page 221 - 《软件学报》2026年第6期
P. 221
2540 软件学报 2026 年第 37 卷第 6 期
分别为 34.11% 和 12.28%. 出现该现象的主要原因是 LLVM 编译器的大部分优化选项对程序性能的影响较小, 使
得程序性能分布较为集中, 而搜索过程中多数样本的性能位于均值左侧, 从而导致较为频繁的实际执行.
45
Iter0 Iter1 Iter2 Iter3
40
功耗节省比例 (%) 30
35
25
20
15
10
5
0
BT-GCC BT-LLVM CG-GCC CG-LLVM
图 10 典型测试用例在性能预测阶段的功耗节省比例
3.2.3 选项分析及筛选
编译选项数量的增长导致了搜索空间的指数级膨胀, 使得遍历寻找最优配置变得不切实际. 主流编译调优框
架采用启发式方法寻求近似最优解, 但需在优化质量和效率间权衡. 本文提出的基于 SHAP 的选项分析及筛选方
法综合考虑编译选项的重要程度及依赖关系, 通过逐步减小搜索空间的方式保证搜索过程聚焦于对性能调优有显
著影响的选项集合. 图 11 以 GCC 编译器编译的 BT 测试用例为例, 展示了 SWTuner 在不同迭代阶段中的最优性
能变化情况, 并且与 BOCA 框架的调优效果进行了对比, 其中纵坐标为以-O3 优化作为基准的归一化最优执行时
间. 对于 SWTuner 框架, 在单次迭代内部, 程序的执行时间均呈现下降的趋势. 然而, 随着搜索时间的增加, 搜索算
法可能会陷入局部最优解, 导致性能的变化趋于稳定而难以找到全局最优解. 经过 SWTuner 的 4 轮迭代调优, BT
测试用例的归一化最优执行时间最终稳定在 0.9 左右, 相较于前 3 轮迭代的最优性能分别提升 1.2%、2.7% 及 0.4%.
1.08
SWTuner-Iter0 SWTuner-Iter1
1.06 SWTuner-Iter2 SWTuner-Iter3
使用 GCC 编译器的 归一化最优性能 1.02
1.04
O3-Baseline
BOCA (k=8)
1.00
0.98
0.96
0.94
0.92
0.90
0 2 000 4 000 6 000 8 000 10 000
搜索时间 (s)
图 11 BT 测试用例在不同迭代中的最优性能变化情况
为了降低搜索空间的维度, BOCA 框架在每轮迭代中选择重要性最高的 k 个选项进行变异, 图 11 中给出了
k=8 情况下最优性能的变化情况. 如图所示, BOCA 在调优初始阶段能够获得与 SWTuner 相当的收敛速度 (介于
Iter1 与 Iter2 之间), 但后期调优效果显著下降, 最优性能仅约为 SWTuner 第 4 轮迭代的 93.9%. BOCA 框架默认采
用平均不纯度减少法 (mean decrease impurity, MDI) 评估选项的重要性, 其计算高效但可能高估某些孤立的重要
选项. 相较于 MDI 方法, 基于 SHAP 的选项分析及筛选方法能够显式建模选项间的交互效应, 从而更加精准地识
别关键选项及其组合, 推动调优效果持续改进.
正如第 2.3 节中算法 1 所述, 为了确保选项筛选的有效性, SWTuner 运用 Shapley 值理论来量化分析编译选项
与程序性能之间的关系, 并从中筛选出对程序性能有显著影响的选项集合. 表 5 统计了上述 BT 示例在各个迭代
阶段中重要性排名前 10 的编译选项及其对应的 Shapley 值, 并通过颜色来区分选项出现的频率: 出现 4 次的选项
被标记为红色, 出现 3 次的选项被标记为绿色, 而出现 2 次的选项则被标记为蓝色. 具体而言, -ffloat-store、-Ox 和
-fschedule-insns 这 3 个选项在整个迭代过程中始终展现出较高的 Shapley 值, 表明其对于 BT 测试用例具有显著

