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  所
                 示  (每个测试用例在所有迭代阶段获得的全局最优性能用红色粗体标记), 随着调优过程中编译选项数量的不断减
   217   218   219   220   221   222   223   224   225   226   227