Page 98 - 《软件学报》2024年第6期
P. 98

2674                                                       软件学报  2024  年第  35  卷第  6  期



                                       ( )
                 1.   function MatchAndRewrite op
                 2.   // 以可配置参数  vs 为例, 设置可选配置数值
                 3.     configRange ← setRange(16,32,64,128,256)
                 4.   // 设置开销函数子集, 默认使用开销函数全集

                 5.     costSet ← setCostSet(BroadcastCost,FMACost,MemoryCost,...)
                 6.   // 定义优化算法重写模式 1
                 7.     pat1 ← rewritePattern1(op,...)
                 8.   // 分析优化算法构造分析规则 1
                 9.     rule1 ← func(op,...)
                 10.  // 初始化分析模型 1
                 11.    model1 ← initAnalyModel(rule1,costSet,configRange)
                 12.  // 定义优化算法重写模式 2
                 驱动器, 负责将每对重写模式和分析模型进行注册. AutoConfig
                 13.    pat2 ← rewritePattern2(op,...)
                 14.  // 分析优化算法构造分析规则 2
                 15.    rule2 ← func(op,...)
                 16.  // 初始化分析模型 2
                 17.    model2 ← initAnalyModel(rule2,costSet,configRange)
                 18.  // 初始化 AutoConfig 对象

                 19.    autoConfig ← initAutoConfig()
                 20.  // 将分析模型 1 和重写模式 1 注册到 AutoConfig 对象中
                 21.    autoConfig.register(model1,pat1)
                 22.  // 将分析模型 2 和重写模式 2 注册到 AutoConfig 对象中
                 23.    autoConfig.register(model2,pat2)
                 24.  // AutoConfig 对象选择合适的算法和配置进行代码生成

                 25.    autoConfig.populate()
                 26.   end function
                    进一步地, 开发者需针对不同优化算法定义相应的重写模式和分析模型. 这些重写模式以                             MLIR  为中间表示,
                 利用其多层级的      MLIR  方言来丰富语义表达. 优化分析模型结合分析规则、动态测量程序集合以及可配置参数的
                 取值范围, 共同定义了编译优化的配置空间以供编译优化过程中的搜索和决策使用. 在用户接口方面, 本文提出的
                 方法使用   rewritePattern 函数实现可配置的重写模式, 并使用      lambda 表达式来约定优化分析模型. 其中, rewritePattern
                 函数接受目标操作以及可配置参数, 并在函数体内使用各个操作的构造函数实现编译优化的代码生成逻辑. 同时,
                 为了构建分析模型, lambda 表达式通过其捕获列表传递动态测量程序集合, 通过参数列表传递可选配置数值集合.
                 该模型在   lambda 函数体内部完成构建, 详细的构建过程将在本文的第                4  节中展开讨论.
                    在定义了多种优化算法的重写模式和分析模型之后, 开发者需要初始化一个                          AutoConfig  对象, 这一对象作为
                                                                  对象的   populate 函数负责为每个重写模式选择最
                 优的配置项, 然后对不同的重写模式进行比较和评估, 最终选择出执行开销最小的重写模式和最佳配置项, 将其整
                 合进编译优化     Pass 及其工具链.

                 3.4   AutoConfig  的生态集成
                    本文将   AutoConfig  集成到了  Buddy Compiler 中, 展示了  AutoConfig  对深度学习编译器的适配能力及其在优
                 化深度学习计算任务方面的调优能力. Buddy Compiler 是一个基于              MLIR  的特定领域编译器, 它致力于打造面向
                 深度学习领域的软硬件协同编译生态. 如图              2(b) 所示, Buddy Compiler 中的多级中间表示编译工具       buddy-opt 会
   93   94   95   96   97   98   99   100   101   102   103