Page 77 - 《软件学报》2026年第6期
P. 77
2396 软件学报 2026 年第 37 卷第 6 期
C(P ) ⩾ C(P), 这表明参数增长与计算复杂度增长之间存在严格的单调递增关系. 这种累乘效应使得即使
′
因此
单个参数适度增长, 多个参数协同变化也能产生指数级的复杂度提升.
在 RISC-V 平台的资源约束环境下, 这些参数的不同取值区间会产生显著差异的性能挑战模式. 因此, 在每个
参数维度上可以独立地定义高、中、低复杂度区间, 且该划分在理论上与算子复杂度增长趋势一致.
算子在实际硬件平台上的性能变化主要受 3 类资源限制因素共同决定: 计算能力、缓存容量与内存带宽. 当
输入参数逐步增大时, 算子的执行时间会经历 3 个阶段: 计算受限、缓存溢出与带宽受限, 不同阶段之间的跃迁
点, 即构成高、中、低复杂度区间的临界边界. 首先, 计算饱和点反映了算子乘加操作量接近 CPU 峰值算力的区
间, 当参数规模较小, CPU 能够在缓存命中率高的情况下维持线性加速, 此时性能主要由计算复杂度决定, 当参数
进一步增大, 乘加次数接近处理器吞吐极限, 计算速率开始下降, 进入计算饱和阶段. 其次, 缓存驻留边界由 L2 缓
C L2 为 L2 缓存容量), 所有数据均可缓存, 访
存容量决定, 设单次前向传播的特征张量大小为 S T , 若 S T ⩽ C L2 (其中
S T > C L2 时, 部分数据需要反复在主存与缓存之间调度, 访存延迟显著上升, 性能出现“阶跃”式变
存延迟最小; 当
S T 超过带宽可支持范围
化. 此外, 带宽受限区对应数据吞吐量超过内存带宽上限的位置, 当算子需读写的数据量
时, 内存访问成为主要瓶颈, 算子执行时间呈非线性增长. 因此, 性能变化在“完全缓存可驻留→部分缓存溢出→频
繁带宽竞争”这 3 个阶段间形成明显的拐点.
基于上述分析, 我们在每个参数维度上定义 3 档复杂度区间, 使其临界点与性能跃迁位置一一对应: 低复杂度
区对应参数取值使得算子数据完全驻留于缓存内, 计算量远低于 CPU 峰值, 性能近似线性; 中复杂度区对应部分
数据溢出缓存, 但尚未达到带宽瓶颈, 访存开销开始主导, 性能随参数缓慢下降; 高复杂度区对应参数进一步增长
导致缓存频繁置换、主存带宽饱和, 执行时间曲线出现明显拐点.
以本文实验平台 (8 GB 内存、四核 1.5 GHz RISC-V CPU、2 MB L2 缓存) 为例进行具体说明. 当 batch 从 2
增至 4 时, 计算量虽翻倍但仍处缓存可控范围; 当超过 8 时, 中间张量规模超过 L2 容量的两倍, 需频繁访问主存,
性能急剧下降, 因而 [1, 2)、[2, 4)、[4, 8) 可合理定义为低、中、高复杂度区. 对于通道数 ( in C /out C ), 当值小于
64 时, 单层特征图仅占用约 256 KB 内存, 可完全缓存; 当增加至 128–256 时, 占用约 0.5–1 MB, 已接近 L2 缓存上
限的一半, 访存延迟显著上升; 超过 256 后溢出频繁、带宽占用迅速增大, 因此定义区间 [8, 64)、[64, 256)、[256,
512). 对于空间维度 (H/W), 在 32×32 以下时计算稳定, 扩展至 56×56 时单张特征图近 1 MB, 达到缓存临界; 至
112×112 时超出缓存两倍, 主存访问成为主要瓶颈, 因而采用 [8, 28)、[28, 56)、[56, 112) 划分.
这些临界点均由硬件资源约束推导而来, 并在实测中对应算子性能曲线的突变位置. 因此, 不同参数的高、中、
低分组既符合计算复杂度的单调递增规律, 又准确反映了硬件资源利用的分层边界. 当多参数共同作用于算子时,
其整体复杂度划分自然继承单参数划分的合理性, 实现了理论与实验的一致. 对于不同硬件平台, 只需根据其缓存
容量和内存带宽重新计算相应的临界点位置, 即可获得适配该平台的分组方案.
2.2.2 分组设计
RIVdoo 采用基于区间约束的参数空间分组方法, 将关键参数维度抽象为可复用的参数池并对参数空间进行
分组, 每个参数池包含低、中、高这 3 个复杂度区间. 不同算子往往涉及相同类型的参数维度, 例如批量维度、通
道维度和空间维度在卷积算子、池化算子以及大多数逐元素算子中普遍存在. 通过将这些共性参数抽象为统一的
参数池, 不同算子可以直接复用相同的参数区间定义, 避免了为每个算子单独设计参数空间的重复工作, 提升了本
方法的可复用性.
表 1 展示了 RIVdoo 定义的核心参数池及其复杂度区间划分. 部分参数维度 (如批量、通道、空间维度) 定义
了多个版本的参数池, 这是由不同算子的计算特性差异决定的. 例如, 卷积算子由于涉及输入输出通道的乘积计
算, 采用标准批量 [1, 2)、[2, 4)、[4, 8) 即可触发 3 个资源压力阶段; 而计算简单的逐元素运算算子 (如 ReLU、Add)
数据规模较小, 需要采用扩展批量 [1, 2)、[2, 8)、[8, 16) 才能达到相同的缓存溢出和带宽饱和效果. 这种差异化设
计确保不同算子在各自的低、中、高复杂度配置下, 实际触发的硬件资源压力保持在相同的量级范围内.
表 2 展示了各算子如何从参数池中选择并组合参数, 以及不同参数组合对 RISC-V 平台资源的压力特征. 以

