3. 功耗与延迟基础:功耗模型(动态/静态)、延迟组成(计算/访存/通信)、两者之间的基本权衡关系
在异构NPU(Neural Processing Unit)调度中,功耗与延迟是衡量系统效率的两个核心指标。调度器在决定"哪个核跑哪个任务、以什么频率跑、数据放在哪里"时,本质上是在做功耗与延迟的交换。要理解这种交换,必须先拆解功耗的来源与延迟的构成。本章从功耗模型(动态/静态)、延迟组成(计算/访存/通信)以及两者之间的基本权衡关系三个层面展开,为后续的调度策略分析奠定量化基础。
3.1 功耗模型:动态功耗与静态功耗的量化基础
NPU的功耗由动态功耗和静态功耗两部分组成。动态功耗(P_dyn)源于CMOS电路充放电过程,其表达式为 P_dyn = α·C·V²·f,其中α为翻转率(即每个时钟周期内信号发生翻转的概率),C为负载电容,V为供电电压,f为时钟频率。静态功耗(P_sta)则来自晶体管的漏电流,表达式为 P_sta = V·I_leak,其中I_leak包括亚阈值漏电和栅极漏电。在先进制程(7nm及以下)中,静态功耗占比可达30%-50%,不能忽略。
在异构NPU中,不同计算单元(如张量核、向量核、标量核)的功耗特性差异显著。张量核以高吞吐的MAC(乘累加)运算为主,动态功耗密度高;而标量核逻辑复杂,静态功耗占比相对更高。调度器需要根据任务的计算密度(每字节操作数)选择匹配的计算单元,避免"大马拉小车"造成不必要的功耗浪费。
| 功耗类型 | 表达式 | 关键参数 | 调度可调手段 |
|---|---|---|---|
| 动态功耗 | α·C·V²·f | 翻转率α、电压V、频率f | DVFS调频调压、时钟门控、任务合并降低翻转率 |
| 静态功耗 | V·I_leak | 漏电流I_leak、温度T | 电源门控、睡眠状态管理、温度感知调度 |
3.2 延迟组成:计算、访存与通信的三元分解
NPU上执行一个推理任务的端到端延迟(T_total)可分解为三部分:计算延迟(T_compute)、访存延迟(T_memory)和通信延迟(T_comm)。计算延迟是NPU执行矩阵乘法、卷积、激活函数等运算所消耗的时间;访存延迟是数据从DRAM/SRAM加载到计算单元的时间;通信延迟是数据在不同计算单元之间或NPU与CPU/其他加速器之间传输的时间。
在实际系统中,这三部分延迟并非简单相加,而是存在重叠。现代NPU采用多级流水线和异步DMA(直接内存访问)机制,访存操作可以与计算并行执行。因此,实际延迟的估算公式为:
T_total ≈ max(T_compute, T_memory, T_comm) + T_sync + T_overhead
其中T_sync是同步开销,T_overhead是调度器本身的决策开销。当访存延迟远大于计算延迟时,系统处于"访存墙"状态;当通信延迟成为瓶颈时,则处于"通信墙"状态。调度器需要识别当前瓶颈类型,采取不同的优化策略。
- 计算密集型任务:矩阵乘法、卷积层,T_compute占主导,优化方向是提高MAC利用率、减少流水线气泡。
- 访存密集型任务:Embedding查找、Attention中的KV Cache读取,T_memory占主导,优化方向是数据复用、缓存命中率提升。
- 通信密集型任务:多卡并行、数据并行中的梯度同步,T_comm占主导,优化方向是通信压缩、拓扑感知调度。
3.3 功耗与延迟的基本权衡:从EDP到帕累托前沿
功耗与延迟的权衡关系可以用功耗-延迟积(Energy-Delay Product, EDP)来量化:EDP = P × T。EDP越小,表示在功耗和延迟的综合维度上越优。但EDP只是一个标量指标,实际调度中往往需要在多个工作点之间选择。这些工作点构成了功耗-延迟平面上的帕累托前沿(Pareto Frontier)——在功耗轴上无法找到另一个点同时具有更低功耗和更低延迟。
调度器的核心任务是在帕累托前沿上选择合适的工作点。具体操作流程如下:
- 建立功耗-延迟模型:对每个计算单元,测量不同频率/电压组合下的功耗和延迟数据,形成查找表。
- 识别任务特征:分析任务的算术强度(Arithmetic Intensity,即操作数/字节),判断是计算密集还是访存密集。
- 设定约束条件:根据SLA(服务等级协议)确定延迟上限,或根据散热设计确定功耗预算。
- 选择工作点:在满足约束的前提下,选择EDP最小的工作点;若无约束,则选择能效最优(每瓦性能最高)的点。
3.4 案例拆解:ResNet-50在异构NPU上的功耗-延迟调优
以一个典型的ResNet-50图像分类任务为例,目标平台为某款异构NPU,包含2个张量核(Tensor Core)和4个向量核(Vector Core),支持DVFS调频(频率范围800MHz-1.5GHz)。初始配置为:所有核运行在1.2GHz,数据放置在片外DRAM,未使用数据复用优化。
初始现象:端到端延迟为12.5ms,平均功耗为8.2W。通过性能计数器分析发现:计算周期占比45%,访存等待周期占比40%,通信等待周期占比15%。访存瓶颈明显,且功耗偏高。
分析判断:ResNet-50的卷积层计算密度较高,但BatchNorm和ReLU层涉及大量中间特征图的读写,导致访存压力大。当前配置下,张量核的计算能力未完全发挥,因为数据供给不足。
实际操作步骤:
- 将频率从1.2GHz降至1.0GHz,电压从0.85V降至0.75V,动态功耗降低约30%(因为P∝V²f)。
- 启用数据复用优化:将卷积层的输入特征图分块(Tiling),使数据在SRAM中复用,减少DRAM访问次数约35%。
- 将部分BatchNorm层从张量核迁移到向量核执行,利用向量核的并行处理能力,减少张量核的流水线气泡。
- 调整DMA预取策略,提前将下一层数据加载到SRAM,隐藏访存延迟。
结果对比:优化后,端到端延迟降至9.8ms(降低21.6%),平均功耗降至5.6W(降低31.7%)。EDP从102.5降至54.9(降低46.4%)。虽然频率降低了,但由于访存瓶颈缓解,延迟反而下降。
风险与代价:频率降低后,若遇到突发计算密集型任务(如动态形状输入),可能导致计算能力不足。为此,调度器保留了动态升频的触发条件:当计算队列深度超过阈值时,自动将频率提升至1.2GHz。
复盘经验:功耗与延迟的权衡不是简单的"降频省电",而是需要先识别瓶颈类型。在本案例中,访存是瓶颈,因此降低频率不会显著影响计算延迟,反而通过降低电压节省了大量功耗。调度器应优先优化瓶颈环节,再考虑DVFS调节。