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

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


                 定特定的检测方法.

                                            表 4 缺陷在不同根因与位置下的数量分布

                               根因          模型加载        High-level IR转换  Low-level IR转换   总计
                              逻辑错误            18            33               67          118
                            张量形状问题            24            48               14           86
                              API误用           12            18               48           78
                              类型问题            11            30               34           75
                            异常处理错误            11            11               43           65
                              赋值错误            4              4               24           32
                              并发问题            0              3               27           30
                              不兼容             6              3               14           23
                            数值计算错误            4              6               13           23
                              注册错误            2              5               7            14
                               其他             0              2               6            8
                              拼写错误            1              4               3            8
                              配置错误            0              1               1            2
                               总计             93            168             301          562

                    发现  9. DL  编译器的逻辑错误倾向于出现在          Low-level IR  转换阶段. 此外, 并发问题均发生在     Low-level IR  转
                 换阶段, 且现有方法均未能识别出任何并发缺陷.

                 4.4.3    症状-位置之间的内在联系
                    表  5  展示了不同阶段缺陷的症状. 从该表中我们可以看出, 模型加载阶段中有                      73.12%  的缺陷会导致程序崩
                 溃, 显著高于   High-level IR  和  Low-level IR  转换阶段的崩溃类型缺陷. 因此, 针对每个前端     DL  框架构造语法多样
                 性强的测试用例将是一种检测模型加载阶段缺陷潜在可行的方案. 语法多样性强指的是测试用例应该尽可能覆盖
                 各种不同的算子和参数配置, 以更好地覆盖模型加载阶段的各种边界情况.

                                            表 5 缺陷在不同症状与位置下的数量分布

                                  症状       模型加载       High-level IR转换  Low-level IR转换  总计
                                  崩溃          68           103            160         331
                                结果错误          23           55             81          159
                                性能问题          0            2              24          26
                                 未报告          2            5              16          23
                                构建失败          0            2              10          12
                                  挂起          0            1              10          11
                                  总计          93           168            301         562

                    此外, 37  个性能相关缺陷      (包括  26  个性能问题和   11  个挂起) 中有  34  个出现在  Low-level IR  转换阶段, 占比
                 高达  91.89%. 进一步分析发现, 其中有      23  个和内存优化相关. 由于      Low-level IR  转换阶段中访存开销隐藏是一个
                 重要的优化功能, AKG      和  TVM  的自动调优算法都涉及针对内存的优化操作. 因此, 开发者在修改自动调优组件
                 的时候应该格外注意是否会导致性能下降或挂起的问题. 测试人员也需要重点关注自动调优组件性能问题和挂起
                 类型的缺陷.
                    发现  10. 崩溃是  DL  编译器模型加载阶段缺陷最常见的症状. 同时, 91.89%            的性能相关缺陷出现在         Low-level
                   转换阶段. 因此, 针对性能缺陷设计的测试方法应考虑                Low-level IR  转换阶段的功能特性.
                 IR
                 4.5   RQ5: 回归测试用例与已有测试用例的差异
                    在修复缺陷时, 开发者通常会使用触发该缺陷的测试用例作为回归测试用例, 并将其加入项目自带的测试套
                 件中. 具体来说, 如果已有的测试套件未能覆盖缺陷相关的源码, 开发者将会在已有测试套件中添加一个全新的回
   107   108   109   110   111   112   113   114   115   116   117