Page 222 - 《软件学报》2026年第6期
P. 222
周文浩 等: SWTuner: 基于机器学习方法的分布式编译调优框架 2541
的重要性, 这一结果也与我们对于程序特性和选项功能的理解相一致. 此外, 随着迭代次数的增加, 排名前 10 的编
译选项中被标记颜色的比例也随之提高. 特别地, 在第 4 次迭代 (Iter3) 中, 排名前 10 的编译选项均曾在之前的迭
代中被标记. 这表明基于 SHAP 的选项分析及筛选方法具有良好的稳定性, 能够有效地识别并保留对优化目标产
生显著影响的编译选项.
表 5 BT 测试用例在不同迭代中排名前 10 的 GCC 编译选项及其对应的 Shapley 值
迭代 BT测例编译选项及对应的Shapley值 Others
-ffloat-store (9.088), -Ox (5.290), -fschedule-insns (0.904), -ftree-loop-optimize (0.082), -ftree-ch (0.078),
Iter0 -fif-conversion2 (0.039), -fsched-interblock (0.035), -fipa-pta (0.035), -fmove-loop-invariants (0.034), 181 other
flags
-fdevirtualize-speculatively (0.034)
-ffloat-store (8.506), -Ox (6.877), -fschedule-insns (0.671), -ftree-forwprop (0.212), -fnon-call-exceptions (0.121), 119 other
Iter1
-fselective-scheduling (0.066), -fipa-pta (0.060), -fsw-veclib (0.053), -fschedule-insns2 (0.053), -fipa-cp (0.053) flags
-ffloat-store (8.483), -Ox (4.420), -fschedule-insns (0.831), -ftree-loop-optimize (0.293), -ftree-forwprop (0.093),
60 other
Iter2 -fselective-scheduling (0.090), -flive-range-shrinkage (0.070), -fschedule-fusion (0.050), -fipa-pta (0.048),
flags
-ftrapv (0.042)
-ffloat-store (9.559), -Ox (5.528), -fschedule-insns (0.917), -fselective-scheduling (0.207), -ftrapv (0.158), -ftree- 26 other
Iter3
forwprop (0.097), -ftree-loop-optimize (0.073), -flive-range-shrinkage (0.059), -fipa-pta (0.057), -ftree-ch (0.035) flags
考虑到求解 Shapley 值及其交互值的复杂度较高, 选项重要性分析的时间开销不容忽视. 如图 12 和图 13 所
示, 对于随机森林模型, Shapley 值及 Shapley 交互值的计算开销均随着迭代次数的增加而呈现出下降趋势. 具体
而言, Shapley 值的计算开销整体较低, 在当前示例中最高仅为 1.65 s. 由于 Shapley 值的计算在每个迭代阶段仅需
执行一次, 因此相对于整个调优过程而言可忽略不计. Shapley 交互值的计算复杂度与选项数量线性相关, 因此不
同编译器的计算开销存在差异. 对于上述示例, GCC 和 LLVM 的平均开销分别为 230.88 s 和 85.16 s, 与各编译器
的选项数量情况基本保持一致. 通过在性能预测的同时执行选项重要性分析和筛选操作, SWTuner 能够有效地隐
藏上述计算开销, 从而实现高效的自动调优.
1.8 400
Iter0 Iter1 Iter2 Iter3 Iter0 Iter1 Iter2 Iter3
1.6 350
1.4 300
1.2 250
时间 (s) 1.0 时间 (s) 200
0.8
0.6 150
100
0.4
0.2 50
0 0
BT-GCC BT-swLLVM CG-swGCC CG-swLLVM BT-GCC BT-swLLVM CG-swGCC CG-swLLVM
图 12 典型测试用例在不同迭代中的 Shapley 值计算 图 13 典型测试用例在不同迭代中的 Shapley 交互值
开销 计算开销
3.3 整体优化效果评测
为了验证 SWTuner 的整体调优效果, 本文使用 GCC 和 LLVM 编译器分别对 NPB 测试集中的所有测试用例
进行了 4 轮迭代调优, 图 14 展示了调优过程中编译选项数量的变化情况. 对于所有测试用例, 编译选项的数量均
随着迭代次数的增加而下降, 这表明基于 SHAP 的选项分析及筛选算法能够有效地降低搜索空间的维度. 同时,
与 LLVM 编译器相比, GCC 编译器的选项数量随迭代次数的变化较为缓慢. 这意味着在每轮迭代的筛选阶段之
后, 有较多的选项被重新添加到集合 O'中, 以避免遗漏对程序性能有潜在重要影响的编译选项. 这一现象表明, GCC
编译器的选项之间可能存在着更强的相关性和依赖性, 导致即使经过筛选后, 也需要保留更多的选项以维持优化
的有效性.
相应地, 本文以-O3 优化作为基准, 记录了调优过程中各个用例的归一化最优执行时间的变化情况. 如表 6 所
示 (每个测试用例在所有迭代阶段获得的全局最优性能用红色粗体标记), 随着调优过程中编译选项数量的不断减

