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 所示.

