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  实现的正确性.
   13   14   15   16   17   18   19   20   21   22   23