Page 17 - 《软件学报》2025年第12期
P. 17

5398                                                      软件学报  2025  年第  36  卷第  12  期


                 位优先搜索. 图    5  给出了每个程序中     FI3D  基于函数浮点指令差异性分析过滤掉的函数数目所占程序中总的函数
                 个数的比例; FI3D   平均能够过滤     44.1%  的函数, 过滤比例范围为      7.7%–66.7%, 这能有效缩小后续     Delta-Debugging
                 的搜索空间.


                                             表 3 编译优化结果不一致性定位结果

                                            Localization results                      Time (s)
                   Program
                                  PLiner                 FI3D              PLiner   FI3D   Improvement (%)
                    CG.A           failed             [sparse, sprnvc]      NA      8.3        NA
                    CG.B       [sparse:741-795]       [sparse:741-795]     369.8   256.4       30.7
                    MG.A           failed          [resid:499, psinv:1 191]  NA     76.8       NA
                    SP.A      [exact_solution:44]    [exact_solution:44]   282.8   184.9       34.6
                    SP.B      [exact_solution:44]    [exact_solution:44]   1 331.3  847.1      36.4
                    LU.A        [blts:109-197]        [blts:109-197]       546.8   445.1       18.6
                     sin         [sin_e:254]           [sin_e:254]          2.4     1.9        20.8
                     sinc        [sin_e:319]           [sin_e:319]          2.7     2.2        18.5
                     cos         [cos_e:262]           [cos_e:262]          2.0     1.5        25.0
                    dilog          failed         [xge0:234-245, series_2:195]  NA  2.5        NA
                   expint_E1  [expint_E1_impl:419]  [expint_E1_impl:419]    3.6     3.1        13.9
                   expint_E2   [cheb_eval_e:all]     [cheb_eval_e:all]      1.5      1         33.3
                    clausen  [angle_res_pos_err_e]  [angle_res_pos_err_e]   1.5     0.9         40
                     Ci          [sin_e:601]           [sin_e:601]          2.9     2.5        13.8
                   bessel_J1       failed      [cheb_eval_e:216, bessel_J1_e:290]  NA  3.9     NA
                   bessel_y0     [cos_e:230]           [cos_e:230]          1.9     1.5        21.1
                   arclength      [do_fun]              [do_fun]            2.6     1.2        53.8
                     dft          [dft:82]               [dft:82]           3.4     2.9        14.7


                                    80
                                    70                            66.7          66.7  66.7
                                                            60.0
                                    60    57.1         50.0 50.0     57.1  50.0
                                   函数比例 (%)  40  42.8  46.7    37.5       37.5  40.0  33.3
                                    50

                                    30
                                    20              15.4
                                    10         7.7  7.7
                                     0
                                       CG.A  CG.B  MG.A  SP.A  SP.B  LU.A  sin  sinc  cos  dilog expint_E1 expint_E2  clausen  Ci bessel_J1 bessel_y0 arclength  dft
                                                             程序
                                                图 5 FI3D  过滤函数比例示意图

                    表  3  中  Time 列给出了  PLiner 和  FI3D  的定位时间开销, Improvement 列给出了  FI3D  对于  PLiner 的性能提升
                 百分比   (PLiner 定位时间减去   FI3D  定位时间再除以     PLiner 定位时间). 对于 PLiner 定位失效的情况, 时间开销和
                 性能提升比例均设置为        NA. 对于  PLiner 定位成功的   14  个测试用例, FI3D  能够获得平均     26.8%  的性能提升, 性能
                 提升比例范围为      13.8%–53.8%. 这有效反映了浮点指令差异性引导对问题代码搜索定位效率提升的作用.
                    表  4  给出了每个测试程序中问题函数在所有函数浮点指令差异性系数中的排名, m/n                        表示问题函数在所有       n
                 个函数的浮点指令差异性系数中位于第              m  位, 多个问题函数使用&连接. 所有程序的问题函数均排在函数指令差
                 异性系数序列的前部, 特别是         MG.A、SP.A、SP.B   和  LU.A, 其问题函数在全部     10  余个函数中排名前几位. 排名
                 较差的   CG  和  Ci, 其问题函数也位于差异性系数排名的前半部分. 这充分说明基于函数编译优化前后浮点指令序
                 列的差异性系数对待定位文件/函数进行排序, 能够有效引导                   Delta-Debugging  快速定位问题代码.
   12   13   14   15   16   17   18   19   20   21   22