Page 86 - 《软件学报》2026年第6期
P. 86

刘佳玮 等: 面向   RISC-V  架构的深度学习算子测试                                                 2405


                    CPU  时间层面   (图  9(a)) 呈现明显的右偏分布特征.       R h/l  的中位数约为  0.95, 箱体范围为  [0.85, 1.08], 但存在
                 多个上侧离群点      (最大值约   1.4), 基于  1.5  倍  IQR  法则  (上界  U=Q 3 +1.5×IQR≈1.43), 这些离群点被标记为统计意义
                 上的异常放大系数样本, 表明部分算子在高复杂度下的                  CPU  时间增长显著偏离正常模式.         R m/l  和  R h/m  的分布相对
                 紧凑, 中位数分别约      1.0  和  0.92, 离群点数量较少, 表明多数算子在复杂度逐级提升过程中保持了相对稳定的性能
                 变化特征. 为进一步验证不同复杂度层级间性能差异的统计显著性, 我们对                        CPU  时间指标进行了单因素方差分
                 析  (One-way ANOVA). 结果表明, 3  个复杂度层级    (低、中、高) 间的性能差异具有极高的统计显著性                (F=127.34,
                 p<0.001), 说明基于复杂度分组的测试能够在 RISC-V 平台上有效触发并区分不同的算子执行模式.
                    常驻内存层面      (图  9(b)) 展现出极高的一致性, 3     种放大系数的中位数均接近           1.0, 四分位距极小    (约  0.03–
                 0.05), 表明无论复杂度如何, 不同算子实现在内存占用的敏感性方面高度一致. 这种集中分布使得常驻内存的离群
                 点检测阈值范围极窄        (上界  U≈1.02), 即使微小的偏离也能被识别为异常. 方差分析同样显示复杂度层级对常驻内
                 存有显著影响     (F=89.21, p<0.001) 表明该指标在刻画复杂度敏感行为方面具有统计有效性.
                    缺页率指标     (图  9(c)) 同样呈现高度集中的分布, 3     种放大系数的中位数均为          1.0, 箱体几乎退化为一条线. 尽
                 管分布集中,    R h/l 、 R m/l  仍各存在一个上侧离群点  (约  1.15), 基于  IQR  法则  (上界  U≈1.03) 被识别为显著偏离整体
                 分布的异常样本, 对应的算子在内存访问模式上存在内存访问行为的异常放大趋势, 导致缓存失效率随复杂度增
                 加而异常上升. 综合      4  个指标的箱形图分析可以看出: CPU         时间和用户态      CPU  占比是识别异常实现的最有效指
                 标, 其离群点数量最多且分布范围最广; 常驻内存和缺页率的分布高度集中, 说明                        RISC-V  平台上不同算子库在内

                 存管理策略方面具有较强的一致性.
                    用户态   CPU  占比指标   (图  9(d)) 的箱体范围较大   (约  0.2–0.3), 表明不同算子实现在系统开销方面存在一定差
                 异.  R h/m  存在多个上侧离群点   (最大值约   1.37, 上界  U≈1.28), 对应的算子从中到高复杂度时系统开销异常增加, 这
                 与  TVM  在高负载场景下引入的额外运行时管理与调度开销具有相关性.
                    我们进一步对比       TVM  和  TFLite 的源码, 来对检测到的异常的产生原因进行分析. TVM             采用基于    LLVM  的
                 动态代码生成策略, 其       tir::transform::StorageRewrite  模块在处理复杂度增加时产生碎片化内存布局, TVM          的
                 ScheduleOps::ComputeStorageScope() 函数生成的内存访问跨度随复杂度呈指数级增长, 在           RISC-V  的简化缓存控
                 制器上表现对存储层次结构更加敏感. 相反, TFLite              采用静态预分配, 实现连续内存布局, tflite::graph_utils::
                 CalculateOptimalAllocation() 在图优化阶段确定内存排布, 确保复杂度增加时仍保持线性扩展的内存访问模式. 汇
                 编代码分析表明, TVM      生成的内存访问指令存在非对齐访问, 产生跨               cache line 的  ld  指令序列; 而  TFLite 保持规
                 律的步长访问模式, 与      RISC-V cache line 大小良好对齐. 上述源码级差异为统计分析中识别出的异常放大系数提
                 供了合理的实现层解释, 表明 RIVdoo 基于 IQR 的异常检测结果能够与底层实现行为建立一致关联, 从而支持其
                 在揭示 RISC-V 平台相关行为差异方面的有效性.
                  4.3   研究问题  3
                    第  4.1  和  4.2  节揭露了深度学习算子执行时间、常驻内存峰值、主缺页率和                   CPU  占比等方面可能呈现出
                 与平台特性相关的性能差异与资源敏感行为, 为了进一步聚焦于研究问题                          3, 我们在上述关键性能指标的基础
                 上, 对  47 个算子的实验结果进行了系统化分析, 以识别其在               RISC-V  架构上的具体适配表现, 以刻画其在         RISC-V
                 架构下的具体行为表现与适配特征. 通过该分析, 我们能够区分算子在资源受限环境下的不同表现模式, 并进一
                 步揭示这些行为差异在效率、内存与系统层面的具体体现形式, 从而评估 RIVdoo                         在识别平台相关行为特征方
                 面的能力.
                    在效率层面, RIVdoo    的结果揭示了     TVM  与  TFLite 的不同算子在  RISC-V  平台上的  CPU  时间存在显著差异,
                 热力图分析显示      TFLite 在几乎所有   47 个算子上的   CPU  时间均比   TVM  短  30%–50%, 这一普遍性优势源于     TFLite
                 针对端侧部署的预编译策略. 这一差异与两者的源码实现紧密相关. TFLite 在                    fully_connected.cc 和  kernel_utils.h
                 中采用固定的循环嵌套结构, 在编译期完成了所有算子内核的优化和代码生成, 避免了运行时的编译开销和动态
                 调度成本. 这种策略在       RISC-V  平台上尤为有效, 因为      RISC-V  的静态编译特性使得运行时优化的收益有限, 而
   81   82   83   84   85   86   87   88   89   90   91