
RVV 作为 RISC-V 指令集的向量扩展,凭借其可变长等设计特点,为高性能计算带来全新可能的同时,也为编译器自动向量化和手工库优化带来新的挑战。自 2024 年进迭时空推出支持 256 位向量宽度的 RVV 1.0 扩展的 K1 芯片以来,SpacemiT K1 已经被全球开发者广泛用于 RVV 开发。
进迭时空在 RISC-V 产品化实践中,深刻受益于社区开发的 RVV 优化,也在实际使用中发现了一些潜在问题,并进行了修复与完善。秉持“取之于开源,贡献于开源”的理念,进迭时空将 RVV 的优化改动陆续 upstream。此前,进迭时空已分享过 Vector 技术实践、OpenCV 成果等系列工作,本文将进一步介绍 3 个重要基础库的改动。
libpng 是官方PNG(Portable Network Graphics)图像格式参考库,负责 PNG 图像的编码、解码及处理,广泛应用于浏览器、图像处理软件及操作系统中的 PNG 解析与生成。
在 Paeth 滤波实现png_read_filter_row_paeth_rvv中,RVV 并行处理多个像素的减法、绝对值、比较选择等操作,避免了传统逐像素处理的循环开销。进迭时空测试发现原实现存在未定义行为,导致高优化级别(-O2/-O3)下 PNG 解码输出损坏的图像数据。分析其根本原因是原 RVV 实现错误依赖于 “掩码未激活位置保留原始值”的特性。而根据 RVV 1.0 规范,掩码位为 0 的位置其行为是“实现定义”的——这些位置的值可能被保留,也可能被设为全1(0xFFFF)。
进迭时空 Upstream 的 patch [1] 改用完全确定性的无条件向量操作。新实现不仅更安全,指令更精简,速度还更快,在 SpacemiT K1 处理器上可获得约 14% 的速度提升。
在平均滤波实png_read_filter_row_avg_rvv中,RVV 利用向量加法与移位指令,一次性处理多个像素的并行平均计算,显著减少了分支与指令数,提升吞吐量。原有 RVV 实现中使用 vwaddu + vnsrl 完成平均值计算,性能优于标量实现,但仍存在优化空间。
进迭时空 Upstream 的 patch [2] 改用一条专门的向量无符号平均指令 vaaddu,并配合设置舍入模式(vxrm=2,朝零舍入),直接完成加法和平均计算。优化后指令数量减半,有效降低了指令缓存和译码的压力,减少了循环开销,从而显著提升了函数整体吞吐量。
zlib-ng 是 zlib 库的下一代高性能实现,专注于数据压缩与解压缩,实现了 Deflate 算法(RFC 1951)。被 libpng、HTTP 服务器及游戏引擎等依赖,广泛用于实时压缩/解压数据流。
Deflate 算法中大量使用内存块复制(如字典回溯复制)。RVV 的向量加载/存储指令可一次性拷贝整个向量寄存器(如 256 位数据),减少循环迭代次数,隐藏内存延迟,尤其适合长距离重复模式的数据压缩场景。
进迭时空 Upstream 的 patch [3] 针对 chunkcopy_rvv 函数中内存重叠复制场景进行优化,通过跳过不必要的内存对齐和最大化单次复制长度,精细地优化了在真实负载(尤其是数据包压缩、安装软件等常见操作中出现的重叠复制模式)下的执行路径,带来了可观的性能提升。
libyuv 是谷歌开源的跨平台的 YUV 图像处理库,核心功能是高效实现 YUV 与 RGB 颜色空间转换、图像缩放、旋转、裁剪及镜像等操作,广泛应用于移动端、WebRTC、编解码、视频处理等领域。
RVV 扩展指令虽已于 2021 年发布 v1.0 ratify 版本,但在实际开发中,除了直接使用汇编代码外,开发者更常借助更为便捷的 intrinsic 编程接口。RVV intrinsic 接口历经 v0.11、v0.12 版本,于 2025 年 4 月发布 v1.0 ratify 版本,对应的编译器版本也是逐步完善。

当前 libyuv 库中的 RVV 实现,主要通过宏定义等方式判断编译环境,为 v0.11 和 v0.12 分别提供支持。但在后续迭代过程中,v0.12 的支持被关闭,v1.0 则尚未被纳入考虑。
进迭时空 Upstream 的 patch[4] [5],通过重新梳理条件组合,使得 libyuv 在 v0.12 和 v1.0 的编译环境中,也能正确启用 RVV 优化。
RVV 扩展自 2021 年迎来 v1.0 版本,随后市场上开始出现 SpacemiT K1 等支持 RVV 1.0 的处理器,为 RISC-V 社区开发提供了良好的硬件基础。RVV intrinsic 在 v0.12 之后接口已基本稳定,v1.0 也在 2025 年ratify,软件接口统一,工具链成熟,都将更好地支持 RVV intrinsic 的优化。
RVA23 时代,RVV 更是成为了必选扩展,2026 年市场上将有 SpacemiT K3 等更多支持 RVV 的高性能处理器,面向 RVA23 的软件也都将继续使用 RVV 深入进行性能优化。
进迭时空的高性能 RISC-V AI CPU,将搭载越来越强的 RVV 算力和 AI 算力,也将继续拥抱开源,与社区携手共建 RISC-V 软件生态。
[1] https://github.com/pnggroup/libpng/commit/d27beddf9f4d80b8998791cbb91fe684820ff387
[2] https://github.com/pnggroup/libpng/commit/87ed1cd2b802ba8df133e6cbc91a5b4fdaf87cf6
[3] https://github.com/zlib-ng/zlib-ng/commit/962ab42190c0fd197595c8f47e2c9ea91fd7c0aa
[4] https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6953818
[5] https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6995438