Page 114 - 《软件学报》2025年第7期
P. 114

沈庆超 等: 深度学习编译器缺陷实证研究: 现状与演化分析                                                   3035


                 也提醒开发者增强代码复用性以避免修复缺陷时修改过多函数造成冗余修改和维护负担.

                                               表 7 补丁涉及的函数数量占比 (%)

                                        编译器       0      1      2      3      ≥4
                                         AKG     0.00   41.30  16.30  6.52   35.87
                                         Glow    2.38   35.71  22.62  9.52   29.76
                                         TVM     11.90  50.11  13.73  7.09   17.16
                                         合计      8.81   46.82  15.33  7.34   21.70

                    发现  12. 与传统编译器特征相似, 高达        78.30%  的补丁仅针对    3  个或更少的函数进行修改. 且常出现跨多个函
                 数的相似修改模式.

                 5   启发与应用

                 5.1   对后续研究工作的启发
                    基于本文的研究发现, 我们进一步为将来              DL  编译器的缺陷检测、定位和修复等研究方向均提供了一系列可
                 行的指导建议.
                    首先, 本文识别出一些针对         DL  编译器的缺陷检测任务亟待解决的研究问题并提供了一些潜在的解决方案.
                 例如, 发现  2、8  和  9  指出逻辑错误, 特别是优化相关的逻辑错误已上升为最普遍的缺陷类型, 目前的测试用例生
                 成方法和测试预言构造方法          (比如, NNSmith、HirGen  和  MT-DLComp) 均存在检测逻辑错误缺陷效率低下的问
                 题. 如何设计能够生成包含优化敏感结构的测试输入并设计细粒度的测试预言以捕获优化逻辑错误类型的缺陷十
                 分重要. 考虑到逻辑错误更容易出现在            Low-level IR  转换阶段, 针对  Low-level IR  设计细粒度的测试预言或许能
                 进一步提高已有测试方法捕获缺陷的能力. 发现                4  指出张量类型错误占比显著下降, 表明类型相关的数据结构和
                 代码逐步完善. 随着类型系统的成熟, 类型缺陷的检测方法应进一步聚焦于识别和处理复杂或隐蔽的类型错误. 例
                 如, 缺陷检测工具可以集成更精确的静态类型分析功能, 自动识别类型不匹配和隐性转换错误. 针对类型相关缺陷
                 的调试方法应更依赖自动化推理, 尤其是增强形状推理机制, 使得在编译阶段即可发现潜在的类型问题. 发现                                 6  和
                 发现  10 指出深度学习编译器的性能缺陷占比增长迅速, 并且已有的自动化缺陷测试技术                         (比如, HirGen、NNSmith
                 和  Tzer) 均没有检测到此类缺陷. 因此, 设计性能缺陷的检测方法愈发重要. 由于性能问题隐蔽且与硬件特性密切
                 相关, 未来应重点研究基于硬件特性的测试工具, 通过结合静态和动态分析, 提升自动化检测和调试性能问题的能
                 力, 从而减少此类缺陷的影响. 此外, 考虑到超过            62%  的此类缺陷和访存有关, 设计更多内存操作相关的变异算子
                 或许也可以检测到更多此类的缺陷.
                    发现  11  指出, 59.44%  的缺陷回归测试用例是全新编写的, 即与已有的开发者测试用例没有强关联, 这反映出
                 已有测试用例难以覆盖触发此类缺陷所需覆盖的源码. 因此, 提高源代码的覆盖率是一个潜在的缺陷检测策略. 另
                 一方面, 在基于修改的回归测试用例中, 50%            的回归测试用例修改通常涉及不到             10  行代码. 这一发现表明, 基于
                 DL  编译器的缺陷特征设计相应的变异算子             (例如, 张量形状或类型变异), 并对现有开发者测试用例进行变异以生
                 成更多新的测试用例, 也是一个潜在有效的缺陷检测策略. 发现                   2  和发现  3  表明, DL  编译器中新引入的特性更容
                 易引入缺陷, 比如     TVM  中有  25.29%  的张量形状错误缺陷和新增的动态张量形状推理功能相关, 因此, 在代码持
                 续集成的时候, 对修改变更部分执行静态缺陷分析与缺陷预测将有助于及时的检测到代码变更中引入的缺陷, 减
                 少缺陷的影响, 从而提高       DL  编译器整体的代码质量.
                    其次, 本文的研究发现可以辅助开发人员对缺陷进行定位与调试. 例如, 发现                       1  指出, 尽管深度学习编译器不
                 断引入新功能与特性, 但其缺陷根因的类别已趋于稳定. 因此, 自动化识别缺陷根因是一个潜在可行的研究方向.
                 调试人员可以基于已知的根因类别, 优先排查常见高频问题, 并结合智能分析工具, 更快速、准确地定位和修复缺
                 陷, 从而进一步提升调试效率. 此外, 发现          8  指出, 构建失败的根因主要是配置错误和不兼容问题, 性能问题和挂起
                 错误主要由逻辑错误, API 误用和异常处理错误引起等, 这些症状与根因的内在联系有助于开发人员快速识别缺
   109   110   111   112   113   114   115   116   117   118   119