Page 86 - 《软件学报》2025年第9期
P. 86
韩柳彤 等: 面向 RISC-V 向量扩展的高性能算法库优化方法 3997
评估本文所提出的优化方法及其实现方案对高性能算法库的性能优化效果.
4.1 实验环境与测试集
实验平台为 CanMV-K230 开发板和 Banana Pi BPI-F3 开发板, 开发板的相关参数如表 4 所示.
表 4 实验平台信息表
参数名称 CanMV-K230开发板 Banana Pi BPI-F3开发板
处理器芯片 嘉楠 K230 进迭时空 K1
处理器内核 玄铁 C908 进迭时空 X60
处理器内核数量(向量) 1个 8个
向量寄存器长度 128 bits 256 bits
向量扩展标准 RISC-V Vector 1.0 RISC-V Vector 1.0
32 KB L1-I 32 KB L1-I
缓存 32 KB L1-D 32 KB L1-D
128 KB L2 512 KB L2
主频 1.6 GHz 2.0 GHz
内存 512 MB DDR3 4 GB DDR3
考虑到编译器对于 RISC-V 指令集的支持日益完善, 本文采用撰写时 GCC 编译器的最新发行版 (14.1), 将
OpenCV 源代码交叉编译到 RISC-V 向量扩展平台上, 选取 OpenCV 性能测试套件中的核心 (core) 模块测试集与
图像处理 (imgProc) 模块测试集, 在上述两种开发板上分别运行, 获得各个测试用例的执行时间, 用于评估本文方
法的性能优化效果.
核心模块测试集包含 3 363 个测试用例, 用于评估 OpenCV 核心组件的性能, 包含对向量或矩阵的算术和逻
辑运算等操作. 本文按照测试用例的操作类型将其分为 38 个类别; 图像处理测试集包含 4 122 个测试用例, 用于
评估 OpenCV 图像处理相关操作的性能, 包含对向量或矩阵的滤波与模糊、图像金字塔构建、轮廓检测等操作,
本文按照测试用例的操作类型将其分为 54 个类别. 取各测试类别内所有测试用例的平均执行时间用于性能评估.
4.2 实验设计
为了评估本文所提出的优化方法和实现方案对算法库的性能优化效果, 设置如下 5 组实验.
● 标量版本: 不启用任何向量优化方法的测试用例, 作为测试基准;
● 定长版本: 采用 OpenCV 现有固定长度的通用内建函数的测试用例;
● 自动向量化版本: 只使用编译器自动向量化, 而不采用任何内建函数优化方法的测试用例;
● 可变长版本 (本文方法): 采用适用于可变长体系结构的通用内建函数优化方法的测试用例;
● 可变长+自动向量化版本 (联用): 同时采用自动向量化和可变长通用内建函数优化的测试用例, 也是用户构
建 OpenCV 时的默认版本.
根据上述 5 组实验的结果, 第 4.3 节通过比较测试用例的执行时间与相对于标量版本的加速比, 验证了本文
方法对于算法库在 RISC-V 平台上性能优化的有效性. 第 4.4 节基于寄存器分组特性进一步讨论了本文方法的性
能提升原因.
4.3 面向 RISC-V 向量扩展的硬件抽象层效果分析
为了评估本文方法在 RISC-V 平台上性能优化效果, 将 OpenCV 核心模块的测试用例分别编译得到 5 个版本
的测试程序, 在两种开发板上执行并统计各类别的平均执行时间.
图 5 展示了各类测试用例在 RISC-V 开发板上的平均执行时间, 其中纵坐标采用对数轴. 从图 5(a) 中可以发
现, DCT、DFT、Eye、LUT、Reduce、Rotate、Round、SorIdx、Sort、TransposeND 和 Zeros 等操作在各自 5 个
版本中的执行时间均近似, 说明编译器自动向量化无法作用于这些操作, 且 OpenCV 源码中也未使用通用内建函
数实现这些操作的向量化版本, 其原因是这些操作在给定的场景中不具备向量优化机会, 不在本文讨论范围内.

