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

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


                 理生态中, 显著降低了技术落地的门槛和维护成本. 这是对传统方案需要大规模修改构建系统和导致软件包数量
                 爆炸式增长问题的根本性改进.
                    同时, 需要特别注意, RuyiBuild    的精准指令集适配可以保障兼容性与优化基础. 截至目前, 在实验过程中, 未
                 出现因指令集不兼容导致的运行错误, 且在不同扩展组合下均观察到相对于基线未有扩展版本的显著性能提升,
                 如  x264 在所有扩展组合下耗时均从基线          39.033 s 降至  28 s 左右, 提升超过  28%; GNU GSL  速率从  10 968.52 MB/s
                 提升至大于    17 465 MB/s, 提升超过  60%. 这直接归功于   RuyiBuild  的动态模板指令集自适应机制, 这个提升是全自
                 动化且显著的. 该机制确保在         SG2044  平台上, 无论目标   ISA  是  RV64GCV、RV64GV  还是更复杂的     RVA23  子集
                 或  SG2044  和  K1  全扩展集, 最终生成的  ELF  都精确匹配了测试时指定的指令集属性, 为后续的微架构优化奠定
                 了正确的基础, 规避了潜在的兼容性陷阱.
                    基于动态模板的指令集扩展自适应机制是               RuyiBuild  实现精准优化的关键. 该机制在部署时自动探测目标设
                 备的实际   ISA  扩展  (如通过/proc/cpuinfo  或  riscv_hwprobe), 并利用一个根据探测结果编译生成的“空函数” LLVM
                 IR  模板, 通过工具  (如  llvm-attribute-adjust) 自动调整待部署软件  IR  文件的指令集属性, 确保其与目标硬件精确匹
                 配. 这个过程完全自动化, 无需开发者或用户干预, 彻底解决了因指令集扩展组合多样导致的兼容性风险, 并保证
                 优化基础的正确性.
                    整个实验中测试了多种指令集组合             (5  种) 和多个软件   (6  款), 其优化版本的性能数据能够被系统性地获取和
                 对比, 本身就依赖于      RuyiBuild  设计的云端批量并行转换与       RPM  仓库自动化构建机制. 该机制理论上可以高效地
                 覆盖  RISC-V  生态中可能出现的指数级增长的指令集/微架构组合, 为用户提供“开箱即用”的最优二进制包. 用户
                 最终通过简单的      dnf install 即可获得接近手工优化性能的软件         (如表  2  和表  3  所示), 这验证了其提升部署效率和
                 用户体验的设计目标.
                  4.6   编译过程效率比较
                    我们对从源码编译上述软件所需时间和从               LLVM IR  转换得到相应的动态库所需时间进行对比, 如表              4  所示.

                                                 表 4 RuyiBuild  编译时间 (s)

                            类型                x264    SQLite3    GNU GSL      xz      KissFFT    Pixman
                   源码编译 (包括下载安装依赖)            227       644         344       216       14        111
                        从LLVM IR转换            133       84          160       10        1         31

                    源码编译使用      open build service 的  osc 命令进行, 使用-j64 -t 64  选项.
                    如图  5  所示, LLVM IR  转换构建动态库的耗时普遍显著低于传统源码编译. 其中, 例如, SQLite3                源码编译耗
                 时达到   644 s, 而其  LLVM IR  转换仅需  84 s, 差距达一个数量级; x264  编译耗时    227 s, 而  IR  转换耗时仅  133 s, 也
                 显示出超过    40%  的时间节约. 这一趋势在      GNU GSL  和  Pixman  等项目上同样存在.


                                  720
                                  660      644
                                  600
                                  540
                                 所需时间 (s)  420  227  344  216          从LLVM IR转换
                                  480
                                                                       源码编译 (包括下载安装依赖)
                                  360
                                  300
                                  240
                                  180
                                  120  133   84   160          111
                                   60                             31
                                    0                  10  14 1
                                      x264 SQLite3 GNU GSL xz  KissFFT  Pixman
                                                  图 5 RuyiBuild  编译时间

                    此外, 我们进一步考察了        4  种方式  (Clang  编译、Clang LTO  编译、RuyiBuild  编译以及  IR→SO  转换) 在内存
                 消耗与挂钟时间上的表现, 如表         5  所示.
   39   40   41   42   43   44   45   46   47   48   49