Page 18 - 《软件学报》2025年第12期
P. 18
于恒彪 等: 面向编译优化结果不一致的代码高效定位 5399
消融实验: 为了进一步评估浮点指令差异性引导对搜索定位的贡献, 本文进一步实验了将浮点指令差异性引
+
+
导直接作用于 PLiner, 记为 PLiner . 图 6 给出了 PLiner 相比 PLiner 在定位成功的 14 个测试用例上的性能提升情
+
况, PLiner 能够获得平均 21.5% 的性能提升. 除了 Ci 函数外, 其余 13 个测试用例均能获得性能提升, 提升范围
为 8.3%–53.8%. 对于 Ci 函数, 尽管浮点指令差异性过滤掉了 3 个冗余函数, 但是考虑到其问题函数本身就位于二
+
分搜索容易定位的位置, PLiner 由于指令差异性分析存在一定的开销, 相比 PLiner 有 1.7% 的轻微性能下降. 总
体来说, 实验结果显示了浮点指令差异性引导能够有效提升问题代码的搜索定位效率.
表 4 问题函数的浮点指令差异性系数排名情况
问题函数 排名 问题函数 排名
CG.A 3/7&4/7 dilog 2/8&3/8
CG.B 3/7 expint_E1 2/6
MG.A 3/15&4/15 expint_E2 1/7
SP.A 1/13 clausen 2/6
SP.B 1/13 Ci 4/8
LU.A 2/13 bessel_J1 1/5&3/5
sin 2/5 bessel_y0 2/6
sinc 2/6 arclength 1/3
cos 2/5 dft 1/3
60
53.80
50
40.00
40 33.90 31.90
性能提升 (%) 30 17.30 18.50 26.70
20
10 13.50 8.30 14.80 8.30 14.70 14.70
−1.70
0
−10
CG.B SP.A SP.B LU.A sin cos sinc expint_E1 expint_E2 clausen Ci bessel_y0 arclength dft
测试用例
+
图 6 PLiner 相对 PLiner 的性能提升情况
研究问题 2: FI3D 能够比当前最先进的工具 PLiner 更高效地定位 NPB 应用、GSL 数学函数和 floatsmith 测
试程序触发编译优化结果不一致性的代码, 且对于 PLiner 定位成功的 14 个测试用例, FI3D 能够获取平均 26.8%
的性能提升. 将浮点指令差异性引导直接作用于 PLiner, 能够带来平均 21.5% 的性能提升.
4.5 有效性威胁
FI3D 的有效性威胁主要分为外部威胁和内部威胁两类. 外部威胁主要来源是选取的实验对象和对比的编译
优化选项有限. 尽管选取了有限的测试用例, NPB 测试集是高性能计算领域应用最广泛的性能评测程序集之一,
而 GSL 数学库则被广泛用于浮点分析工具有效性评测, floatsmith 测试集被广泛用于混合精度优化工具评测, 这
些程序被广泛用于编译优化相关工具的评测 [4,6,27] . 本文所选取的触发编译优化结果不一致性选项为-O0 和-O3
-ffast-math, 这是因为-O0 会关闭几乎所有编译优化策略, 而-O3 -ffast-math 是开发人员使用最广泛的激进编译优
化选项, 开启了绝大部分激进编译优化策略, 这组选项能够更好地触发结果不一致性和评测工具定位问题代码的
能力; FI3D 的内部威胁来自工具的实现正确性, 为了控制内部威胁, FI3D 在开发过程中进行了多轮内部正确性测
试, 且 FI3D 实验的结果也都经过了人工验证. 另一方面, FI3D 与 PLiner 在 14 个测试应用上定位结果的一致性也
反映了 FI3D 实现的正确性.

