Page 42 - 《软件学报》2026年第6期
P. 42

屈晟 等: 面向  RISC-V  指令集多样性的兼容性感知多层级构建方法                                           2361


                 优化选项-O3) 分别以     5  种指令集扩展组合编译各软件, 通过对应测试工具               (如  x264-benchmark、cachebench  等)
                 运行并记录性能数据; 二是中间代码优化测试, 先利用                SG2044  全指令集编译生成     LLVM IR bitcode, 再通过  llvm-
                 attribute-adjust 工具修改  IR  文件以适配不同指令集, 转换为    ELF  格式共享库后, 采用与直接编译测试相同的工具
                 和方法进行性能评估.
                    为确保结果可靠性, 部分软件采用多次测试策略                 (如  KissFFT  重复运行  11  次并取中位数) 以降低随机误差.
                 实验中, 通过对比两种测试路径的结果            (如  RuyiBuild  与  Clang  直接编译结果) 验证测试方法的一致性, 最终以性
                 能耗时   (如编码时间、压缩时间) 或数据处理速率             (如  MB/s、MP/s (百万像素每秒)) 作为核心指标, 量化不同指令
                 集扩展组合的性能差异.
                  4.4   实验结果与分析
                    为检验   RuyiBuild  在指令集适配中的效果, 本文以两款开发板为测试平台: 搭载进迭时空                    X60 8  核  CPU、16
                 GB  内存的进迭时空     K1  开发板, 以及搭载玄铁      C920 64  核  CPU、128 GB  内存的算能  SG2044  开发板. 在此基础
                 上, 对比  6  款软件在  5  种指令集组合下的性能数据, 其中, 使用          Clang  默认开启-O3  优化选项, SG2044  和  K1  上使
                 用的前端编译最优选项如附录           A.10  所示, 具体表现见表    2  与表  3. 实验结果显示, 基于   RuyiBuild  工具链全自动生
                 成的二进制文件与基于        Clang  程序员定制化编译的二进制文件在运行性能方面高度接近, 且在不同平台与各类指
                 令集扩展组合下均展现出优于基线            (RV64GC) 的性能增益, 验证了其自适应方案的有效性.

                                            表 2 RuyiBuild  指令集适配效果    (SG2044)

                                      x264                   SQLite3                   GNU GSL
                    指令集       Clang  RuyiBuild  偏差率  Clang  RuyiBuild  偏差率     Clang    RuyiBuild  偏差率
                               (s)    (s)     (%)     (ms)    (ms)     (%)     (MB/s)    (MB/s)    (%)
                  基线RV64GC    39.033  -       -     155.272    -       -      10 968.52   -         -
                  RV64GCV+B   27.353  28.045  2.53  162.282  163.738   0.90   19 047.38  18 646.11  −2.11
                    RV64GV    28.832  28.662  −0.59  165.579  165.262  −0.19  18 371.44  17 857.30  −2.80
                   RV64GCV    28.660  28.799  0.48  164.832  161.201  −2.20   18 212.91  17 465.15  −4.11
                    RVA23     27.902  28.254  1.26  166.481  164.284  −1.32   19 053.99  18 576.67  −2.51
                    SG2044    28.772  28.276  −1.72  161.048  163.231  1.36   18 767.27  18 520.25  −1.32
                                       xz                    KissFFT                    Pixman
                    指令集       Clang  RuyiBuild  偏差率  Clang  RuyiBuild  偏差率     Clang    RuyiBuild  偏差率
                               (s)    (s)     (%)     (s)      (s)     (%)     (MP/s)    (MP/s)    (%)
                  基线RV64GC    24.832  -       -      62 423    -       -      99.441 5    -         -
                  RV64GCV+B   23.168  23.766  2.58   59 394  58 056   −2.25   327.908   327.842    −0.02
                    RV64GV    24.768  25.292  2.12   59 850  60 616    1.28   326.215   326.982    0.24
                   RV64GCV    24.731  24.572  −0.64  58 353  60 399    3.51   330.838   331.383    0.16
                    RVA23     22.918  23.151  1.02   58 029  58 665    1.10   325.723   335.211    2.91
                    SG2044    22.904  22.839  −0.28  58 600  58 502   −0.17   321.319   330.469    2.85

                    从整体性能偏差来看, SG2044       开发板中, RuyiBuild  与  Clang  在不同指令集扩展中的性能差异整体高度接近.
                 在  RV64GCV+B  组合中, x264  的偏差率为   2.53%, SQLite3  为  0.90%, GNU GSL  为−2.11%, xz 为  2.58%, KissFFT
                 为−2.25%, Pixman  为−0.02%; RV64GV  指令集下, 偏差率范围在−0.59% (x264)–2.12% (xz) 之间; RV64GCV  指令
                 集中, 除  KissFFT  偏差率为  3.51%  外, 其余软件偏差均低于     1%; RVA23  子集与  SG2044  指令集下, 最大偏差分别
                 为  2.91% (Pixman) 和  2.85% (Pixman), 整体波动幅度较小. 在  K1  开发板中, RV64GCV+B  组合中, x264  偏差率仅
                 0.48%, SQLite3  为  0.30%, xz 为  1.02%, KissFFT  仅  0.27%, 仅  Pixman  偏差率相对较高但也仅−2.70%, 整体波动幅
                 度同样较小, 表明     RuyiBuild  的自动化处理能够精准复现       Clang  的编译优化效果.
                    从性能增益角度对比, 两平台所有指令集扩展组合                  (RV64GCV+B、RV64GV、RV64GCV、RVA23        子集、
                 SG2044、K1) 的性能显著优于基线       (RV64GC). SG2044  平台中, 以  x264  为例, 基线耗时  39.033 s, 而在各扩展指令
   37   38   39   40   41   42   43   44   45   46   47