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

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


                    为了应对上述挑战, 本文设计并实现了基于机器学习方法的分布式编译调优框架                            SWTuner, 以提升调优过程
                 的资源利用率和搜索效率. 本文的主要贡献如下.
                    1) 在国产超算系统软硬件环境的基础上, 实现了基于                AUC-Bandit 的分布式元搜索策略. 该策略通过分布式
                 优化显著降低了元搜索过程中的编译和运行开销, 有效提升了元搜索技术的整体效率.
                    2) 使用随机森林模型对编译选项与程序性能的关系进行建模, 并将其应用于后续的元搜索过程. 该方案有效
                 减少了搜索过程中程序实际执行的次数及时间, 从而降低了编译调优过程的能耗.
                    3) 引入  Shapley  值及  Shapley  交互值来评估编译选项的重要程度及其相关性. 通过逐步淘汰影响较小的编译
                 选项, 在保证调优效果的前提下降低了搜索空间的维度, 进一步提升了搜索效率.
                    本文第   1  节介绍背景及相关工作. 第       2  节介绍  SWTuner 编译调优框架的基本结构及关键技术实现. 第             3  节通
                 过实验对关键技术的有效性以及整体调优效果进行评测. 第                   4  节给出总结和展望.
                  1   相关工作

                    目前, 编译器自动调优的研究主要集中在优化搜索空间、调整评估模型以及改进搜索策略这                               3  个方面.
                    首先, 较大的搜索空间意味着需要考虑更多的编译选项组合, 这不仅增加了计算资源的需求, 还可能导致调优
                 过程耗时较长. 为了提高编译调优的搜索效率, 研究者们提出了多种方法来优化搜索空间. 例如, MiCOMP                             方法  [18]
                 将所有选项分为几个大组, 固定组内选项的出现次数和顺序, 仅调整大组之间的顺序和出现次数. 这种方法显著减
                 少了搜索空间, 调优后的程序性能最多可提升               1.51  倍. ICMC  方法  [19] 通过构建选项关系依赖图来识别选项间的依
                 赖关系, 并仅以强依赖的子序列作为调优单位, 从而显著缩小搜索空间的维度. Theodoridis 等人                      [20] 为减少搜索空

                 间, 将函数调用图划分成更小的子图来探索子图的最优内联参数, 这种方法使得穷举搜索成为可能.
                    其次, 有效的评估模型能够准确地预测不同编译选项组合对程序性能的影响, 这对于快速定位最优配置至关
                 重要. MLGOPerf [21] 是一种基于强化学习的迭代优化算法, 它通过           IR2Perf 模型从中间表示中提取特征来预测代码
                 性能. AdaTune [22] 使用自适应的评估方法, 通过监测程序执行的稳定性来决定何时停止测量, 以平衡准确性和效率.
                 部分自动调优方案结合使用成本模型和实际测量, 以提高效率和准确率. 例如, Ansor                      [23] 先使用成本模型快速估计
                 配置性能, 然后实际测量预测性能较好的配置, 并将测量结果用于进一步训练成本模型, 提高预测准确性. 通过不
                 断迭代, 成本模型的预测准确率逐渐提高, 从而提升调优算法的整体效率.
                    最后, 搜索策略决定了每轮迭代后如何根据当前配置的性能选择下一个配置. 如果过于依赖某一种优化策略,
                 可能会导致陷入局部最优值, 错过新的提升程序性能的机会. SRTuner 方法                   [24] 将搜索策略抽象为多臂老虎机模型,
                 其中每个选项代表一条“手臂”, 在每轮迭代过程中根据其性能调整对该分支的奖励. BOCA                           方法  [25] 使用基尼系数
                 评估选项的重要性, 并优先考虑重要选项. 同时, 为了避免过拟合, 该方法在每次迭代过程中还会随机选择一些不
                 重要的优化选项, 与重要选项一起组成候选集合进行调优. Bliss 方法                 [26] 使用多种具有不同代理模型和采集函数的
                 贝叶斯优化模型, 迭代的过程中按照一定概率选择贝叶斯模型, 并在每轮迭代结束后为效果更好的模型分配更高
                 的概率值.
                    OpenTuner [27] 是一个用于构建特定领域多目标程序自动调优器的框架, 其核心优势在于灵活性和可扩展性. 与
                 其他搜索框架相比, OpenTuner 能够更加方便地集成新的搜索算法, 从而增强其调优能力. 通过元搜索策略,
                 OpenTuner 同时使用多种不同的搜索技术, 并根据每种技术的实际表现动态调整资源分配, 确保资源的有效利用, 提
                 高整体调优过程的效率. 这一机制使得 OpenTuner 能够在有限时间内找到更优的编译选项组合. 同时, OpenTuner
                 还能应对多目标优化挑战, 如同时优化程序的执行时间和内存消耗. 因此, OpenTuner 成为当前编译调优领域的一

                 个主流选择, 为研究人员提供了一个强大而灵活的工具.
                    然而, 现有的编译调优方法仍面临着一些挑战. 首先, 在搜索空间方面, 现有方法往往难以在短时间内全面覆
                 盖对程序性能影响显著的编译选项组合, 特别是对于那些包含复杂相互作用和非线性效应的选项. 其次, 在评估模
                 型方面, 虽然已经提出了多种预测模型, 但它们的准确度仍受限于训练数据的数量和质量, 尤其是在处理新类型的
   205   206   207   208   209   210   211   212   213   214   215