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

周文浩 等: SWTuner: 基于机器学习方法的分布式编译调优框架                                              2537


                 于模拟求解三对角线系统的数值方法, 其计算操作远远超过数据移动的成本. CG (conjugate gradient) 则侧重于解
                 决大规模稀疏线性系统的问题, 具有不规则和离散的数据访问模式, 因此属于典型的访存受限课题. 在性能评测部
                 分, 本文首先以    BT  和  CG  为例, 对关键技术的有效性进行详细分析. 然后, 本文分别展示以                swGCC  和  swLLVM
                 作为目标编译器的所有测试用例的性能数据, 以验证                 SWTuner 调优框架的整体优化效果.
                  3.2   关键技术有效性评测
                  3.2.1    分布式元搜索
                    为了验证分布式元搜索策略的有效性, 本文对                PureRandom、SRTuner、Bliss、OpenTuner 和  SWTuner 在
                 NPB  典型测试用例上的调优效果进行了比较, 结果如图               6  所示, 其中, 横坐标为搜索时间, 纵坐标为以-O3          优化作
                 为基准的归一化最优性能. PureRandom          是一种随机搜索方法, 通过随机选取编译选项组合的方式进行调优.
                 SRTuner 是一个利用多阶段协同优化和分布式估计的编译器调优框架, 通过多臂老虎机模型提升调优效率. Bliss
                 是一个基于多样化贝叶斯优化模型池的自动调优框架, 通过动态策略与实时反馈机制实现复杂场景下的参数优
                 化. OpenTuner 是开源的自动调优工具, 使用了一系列高效的优化算法, 如贝叶斯优化和遗传算法等, 以快速找到
                 最优的参数设置. SWTuner 在 OpenTuner 的基础上实现了分布式元搜索策略, 能够并行收集多个搜索样本的性能
                 数据, 以加速调优过程.

                                                                  1.08
                        1.20                    PureRandom        1.06                      PureRandom
                                                                                            Bliss
                                                Bliss
                                                                                            SRTuner
                    使用 GCC 编译器的  归一化最优性能  1.10  OpenTuner-Parallel  使用 LLVM 编译器的  归一化最优性能  1.04  OpenTuner-Parallel
                                                SRTuner
                        1.15
                                                                                            OpenTuner
                                                OpenTuner
                                                                                            SWTuner
                                                SWTuner
                                                                                            O3-Baseline
                                                O3-Baseline
                                                                  1.02
                        1.05
                                                                  1.00
                        1.00
                        0.95
                                                                  0.96
                        0.90                                      0.98
                           0     500   1 000  1 500  2 000            0   100  200  300  400  500
                                       搜索时间 (s)                                   搜索时间 (s)
                                (a) 使用 GCC 编译的 BT 测试用例                    (b) 使用 LLVM 编译的 BT 测试用例
                        4.8                                       2.15
                                                PureRandom                                  PureRandom
                        4.3                     Bliss             1.95                      Bliss
                    使用 GCC 编译器的  归一化最优性能  3.3   OpenTuner-Parallel  使用 LLVM 编译器的  归一化最优性能  1.55  OpenTuner-Parallel
                                                SRTuner
                                                                                            SRTuner
                        3.8
                                                OpenTuner
                                                                                            OpenTuner
                                                                  1.75
                                                SWTuner
                                                                                            SWTuner
                                                                                            O3-Baseline
                                                O3-Baseline
                        2.8
                                                                  1.35
                        2.3
                        1.8
                                                                  0.95
                        1.3                                       1.15
                        0.8                                       0.75
                           0   100  200  300  400  500  600  700      0   100  200  300  400  500  600  700
                                       搜索时间 (s)                                   搜索时间 (s)
                                 (c) 使用 GCC 编译的 CG 测试用例                   (d) 使用 LLVM 编译的 CG 测试用例
                                       图 6 典型测试用例使用分布式元搜索策略的优化效果

                    在搜索过程的初始阶段, PureRandom       方法能够有效识别出一些具有较好性能的编译选项组合, 从而促使性能
                 指标迅速提升. 然而, 由于搜索空间庞大, 随机搜索方法在后期容易陷入局部最优解, 从而导致搜索效率的显著下
                 降. 与  PureRandom  方法相比, OpenTuner 采用了先进的元搜索技术和反馈机制, 能够根据先前的搜索结果动态调
                 整后续的搜索方向, 有效避免了盲目地探索整个搜索空间. 即使在搜索过程的后期阶段, OpenTuner 也能够较为有
                 效地识别出潜在的性能改进点, 从而确保性能提升曲线更加平缓且稳定. OpenTuner 原生支持基于                          ThreadPool 的
                 并行调优机制, 本文在神威新一代超级计算机上对其进行了适配, 24                    线程并行规模下的调优效果如图            6  中  Open-
                 Tuner-Parallel 曲线所示. OpenTuner 原生的并行机制能够有效提升搜索效率, 对于            BT  和  CG  测试用例, 其在相同
   213   214   215   216   217   218   219   220   221   222   223