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

3998                                                       软件学报  2025  年第  36  卷第  9  期



                   512
                                                                                                标量
                   256
                                                                                                定长
                   128                                                                          自动向量化
                                                                                                可变长
                  平均执行时间 (ms)  32 8                                                             自动向量化
                    64
                                                                                                可变长+
                    16
                     2 4
                     1
                     0
                              DCT   DFT    Eye   LUT   Reduce  Rotate  Round  SorIdx  Sort  TransposeND  Zeros


                                                    (a) 不具备向量优化机会的算子
                   512
                                                                                        标量
                   256                                                                  定长
                   128                                                                  自动向量化
                                                                                        可变长
                  平均执行时间 (ms)  32 8
                    64
                                                                                        可变长+自动向量化
                    16

                    2 4
                    1
                    0
                             Clone/Copy
                         Add
                                                                                     SetToWithMask
                                                                                 PatchNaNs
                                                                        Min
                                            Decompose
                                    CountNonZero
                   Abs/Absdiff BitwiseLogic  Compare Convert  CustomPtr  Divide  Dot InRange KMeans  Max  Mean  Merge MixedArithm Multiply  Norm  Phase32f  Split Subtract  Sum Transform
                                                          测试用例组
                                                     (b) 具备向量优化机会的算子
                                 图 5 OpenCV  核心模块测试用例在        RISC-V  开发板上的平均执行时间

                    通过观察图     5(b) 中剩余  27  类操作不难发现, 使用本文提出的可变长通用内建函数实现版本                   (图中黄色, 左   4)
                 的执行时间都低于使用固定长度内建函数实现版本                  (图中绿色, 左   2), 也低于标量实现版本      (图中橙色, 左   1), 说明
                 本文方法改进了      OpenCV  目前的硬件抽象层实现, 且具有性能优化效果.
                    表  5  展示了不同优化方法应用于        OpenCV  核心模块中的加速比, 加粗值表示测试平台上各测试用例类型的最
                 优加速比. 各方法相较于标量实现的加速比可以通过下式计算得到:

                                                            AverageCost
                                                  SpeedUp =          i                                (1)
                                                        i
                                                           AverageCost  scalar
                    通过加粗值可以看出, 本文方法在           BPI-F3  开发板上对于大部分类别的测试用例产生了最佳的性能提升效果,
                 且本文方法的平均加速比         (3.93  倍) 高于自动向量化方法加速比        (2.16  倍), 仅略低于二者联合使用     (4.04  倍). 说明
                 开发人员使用本文提出的通用内建函数实现优化算法的效果优于自动向量化, 而自动向量化在某些场景中可以通
                 过优化其他代码片段的方式在本文方法基础上进一步提高执行效率. CanMV-K230                       的结果与    BPI-F3  的结果类似,
                 此处不再赘述.
                    类似地, 表   6 展示了不同优化方法应用于         OpenCV  图像处理模块中的加速比. 结合表          5  和表  6  可以发现, 在几
                 乎所有类型的测试用例中, 固定长度实现的版本性能都是最差的, 甚至其相较于标量实现的加速比也小于                                  1, 说明
                 将可变长的    RISC-V  向量扩展整合到固定长度的硬件抽象层的方案对于算法库的性能优化产生了负面作用, 其原
                 因在于固定长度的抽象方法在           RISC-V  向量扩展的实现中产生了冗余访存操作, 从而引入了大量额外开销, 以至
                 于抵消了向量优化带来的性能提升, 具体分析已在第                 3.2  节中给出, 此处不再赘述.
   82   83   84   85   86   87   88   89   90   91   92