Page 92 - 《软件学报》2025年第9期
P. 92

韩柳彤 等: 面向   RISC-V  向量扩展的高性能算法库优化方法                                             4003


                                     表 7    不同寄存器分组在     OpenCV  核心模块中的加速比       (续)

                                                    BPI-F3                         CanMV-K230
                       测试用例类别
                                              m1             m2               m1               m2
                           Min                8.06           8.52            6.58             7.79
                        MixedArithm           4.02           4.50            1.70             2.03
                         Multiply             5.67           6.62            4.22             5.38
                          Norm                1.48           1.60            1.25             1.35
                         PatchNaNs            2.02           2.72            0.89             1.27
                         Phase32f             0.99           0.99            1.00             1.00
                       SetToWithMask          4.24           4.58            2.66             3.11
                           Split              1.04           2.46            1.05             1.39
                          Subtract            3.26           3.68            2.80             3.16
                           Sum                5.04           6.73            2.56             3.54
                         Transform            2.33           1.87            1.47             1.51
                           平均                 3.46           3.93            2.52             2.97

                 5   总结与展望

                    本文提出了一种面向        RISC-V  向量扩展的高性能算法库优化方法, 给出了兼容可变长向量体系结构的硬件抽
                 象层设计与实现方案. 该方法不仅可以抽象              RISC-V  向量扩展与其他     SIMD  扩展, 还具备兼容其他可变长体系结
                 构硬件的潜力. 例如, ARM SVE/SVE2     指令集扩展同样可受益于本文所述基于类型别名和特征类的向量类型抽象
                 方法, 从而实现统一向量硬件抽象.
                    这种可变长的硬件抽象层能够提供统一的向量编程接口, 抽象不同硬件的编程模型, 从而提高所编写的向量
                 优化算法的通用性, 避免高性能算法库中“多算法-多平台”之间组合爆炸而引发的重复实现和代码碎片化等问题,
                 从而降低算法库实现的复杂度, 帮助算法库维护者更高效地实现面向各平台的优化代码, 更好地支持                                 RISC-V  软
                 件生态发展. 在硬件抽象层设计时, 最大的挑战是可变长向量体系结构和固定长度                          SIMD  扩展在向量类型上难以
                 抽象, 在实现过程中则体现为无法通过统一的向量类型封装二者的元素类型和元素数量等信息. 本文采用剥离向
                 量类型和向量信息的方法, 以仅抽象出共性部分为目标, 使用类型别名的形式提供统一向量类型, 再通过额外的特
                 征类提供向量中元素类型与数量等信息, 从而实现了统一向量抽象, 避免额外性能开销. 硬件抽象层设计的另一难
                 题是如何确定所提供的向量操作, 在实现过程中体现为如何取舍仅在部分平台中可用的向量指令. 本文提出了以
                 覆盖目标硬件平台共有向量操作为基础、以满足算法库计算需求为目标的设计思想, 综合考虑某向量操作在应用
                 场景中的使用频次、引入该操作在部分平台上的性能收益和其他平台实现该操作的代价等因素, 定义出一套满足
                 算法库需求, 且适应于目标硬件平台的硬件抽象层向量操作.
                    本文还根据所提出的方法, 为开源计算机视觉算法库                  (OpenCV) 设计并实现了新的统一向量编程接口, 并实
                 现了该接口到     RISC-V  向量扩展的映射, 旨在优化其在         RISC-V  平台上的性能. 实验结果表明, 相较于原有硬件抽
                 象层, 本文的设计方案在        OpenCV  核心模块中获得了      2.97–3.93  倍的性能提升, 在图像处理模块中获得了           1.76–
                 2.11  倍的性能提升, 验证了本文方法的有效性. 同时, 通过进一步分析阐述了性能提升来源, 为其他高性能算法库
                 的硬件抽象层设计提供参考. 本文所述的相关工作已经被                   OpenCV  社区接收   (https://github.com/opencv/opencv/
                 blob/4.x/modules/core/include/opencv2/core/hal/intrin_rvv_scalable.hpp), 为丰富  RISC-V  软件生态做出了贡献.
                    未来的研究将聚焦于通过引入更多向量编程模型进一步优化硬件抽象层的设计, 从而继续改进适用于                                   SIMD
                 扩展和向量扩展的算法库优化方法. RISC-V           向量扩展中的向量长度寄存器特性有望简化循环向量化的编程模型
                 并减小代码体积, 此特性将在接下来的硬件抽象层设计中得到更深入的研究和应用, 以进一步提高性能优化效果.
                 此外, 本文提出的优化方法也可以应用于其他高性能算法库的                     RISC-V  移植与向量优化工作中, 这有助于提高这
                 些算法库在    RISC-V  平台上的可用性. 例如, GGML      是一个可用于     Transformer 架构推理的机器学习开源算子库,
                 被应用于深度学习或大语言模型的             CPU  端推理场景中. 其使用内联汇编和内建函数的方式面向                  ARM Neon  和
                 x86 AVX  系列指令集扩展优化了模型权重量化和通用矩阵乘法等少数核心算子, 且正逐步添加面向                            RISC-V  向量
   87   88   89   90   91   92   93   94   95   96   97