Page 90 - 《软件学报》2025年第9期
P. 90
韩柳彤 等: 面向 RISC-V 向量扩展的高性能算法库优化方法 4001
为了在实际应用场景中评估该方法对高性能算法库的性能优化效果, 如图 6 所示, 本文选用计算机视觉领域
常用的高斯模糊 (Gaussian blur)、边缘检测与二维码检测这 3 个场景, 使用 C++语言和 OpenCV 提供的编程接口
编写了 3 个应用程序. 在链接时, 分别链接采用本文方法优化的 OpenCV 算法库和标量版本的 OpenCV 算法库, 并
在 BPI-F3 开发板上运行, 二者输出的图像一致, 但在执行性能上体现出了差异.
(a) 原始图像 (b) 高斯模糊
(c) 边缘检测 (d) 二维码检测
图 6 所选计算机视觉算法的效果图
在计算机视觉领域不同场景的应用程序中, 都需要对原始图像进行存取和相应操作. 在实验评估中, 我们分别
统计了图像读取、图像操作和图像输出这 3 个部分的执行时间. 如后文图 7 所示, 对于尺寸为 4096 × 3072 的 JPEG
图像, 无论是否应用向量优化, 图像读取和存储的耗时并无显著差异, 这是由于文件 I/O 是外部存储设备和内存之
间的数据传输过程, 其主要受限于外部存储设备速度和带宽等非向量优化所作用的因素; 而在高斯模糊场景中, 模
糊算子中的计算或访存密集型操作均使用通用内建函数编写, 可以通过本文方法在 RISC-V 设备上获得性能提升,
当算核尺寸为 63 × 63 时, 所用时间由标量版本的 15 291 ms 下降到 2 679 ms, 图像操作部分的加速比为 5.71 倍, 包
含图像存取的实际应用场景加速比为 3.73 倍; 边缘检测所涉及的算法也可以使用向量优化, 能够获得 1.8 倍的加
速比, 但由于其本身计算复杂度较低, 计算量较小, 实际应用场景中的主要时间开销是由无法优化的图像存取操作
带来的, 只能获得 1.06 倍的加速比; 二维码检测场景与高斯模糊场景类似, 图像操作部分的时间开销占比显著高
于图像存取部分, 因此在二维码检测算子的加速比为 4.8 倍时, 整体应用场景也能够获得较高 (4.05 倍) 的加速比.
4.4 RISC-V 向量扩展的寄存器分组特性对于性能优化的影响
RISC-V 向量扩展的寄存器分组特性同样可以用于优化通用内建函数的 RISC-V 向量扩展后端实现. 由于部
分 SIMD 扩展仅有 16 个向量寄存器, 开发者在使用 OpenCV 的通用内建函数编写加速算法时, 通常仅使用不超
过 16 个向量寄存器, 防止在这部分平台上造成寄存器溢出, 产生额外的访存指令, 影响加速效果. 在如今主流 SIMD
扩展普遍提供 32 个向量寄存器的情况下, 兼容早期平台的保守寄存器使用策略将导致硬件资源浪费, 无法达到最
优效率.

