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: 回归测试用例与已有测试用例的差异
在修复缺陷时, 开发者通常会使用触发该缺陷的测试用例作为回归测试用例, 并将其加入项目自带的测试套
件中. 具体来说, 如果已有的测试套件未能覆盖缺陷相关的源码, 开发者将会在已有测试套件中添加一个全新的回

