3. 功耗与延迟基础:功耗模型(动态/静态)、延迟组成(计算/访存/通信)、两者之间的基本权衡关系

在异构NPU(Neural Processing Unit)调度中,功耗与延迟是衡量系统效率的两个核心指标。调度器在决定"哪个核跑哪个任务、以什么频率跑、数据放在哪里"时,本质上是在做功耗与延迟的交换。要理解这种交换,必须先拆解功耗的来源与延迟的构成。本章从功耗模型(动态/静态)、延迟组成(计算/访存/通信)以及两者之间的基本权衡关系三个层面展开,为后续的调度策略分析奠定量化基础。

功耗模型 延迟组成 权衡关系 动态功耗 P_dyn = α·C·V²·f 静态功耗 P_sta = V·I_leak 影响因素:电压/频率/翻转率/温度 DVFS调节点 | 时钟门控 | 电源门控 计算延迟 MAC/ALU 访存延迟 DRAM/SRAM 通信延迟 NoC/PCIe 关键路径:计算+访存+通信重叠 访存墙 | 通信墙 | 调度开销 功耗-延迟积 (EDP) EDP = P × T 调度策略:频率/核数/数据放置 能效最优 | 延迟最优 | 帕累托前沿 功耗-延迟权衡曲线(帕累托前沿) 延迟 (ms) → 功耗 (W) → 高性能点 高f/多核 能效点 中f/中核 低功耗点 低f/少核 调度目标:在满足延迟约束下最小化功耗,或在功耗预算内最小化延迟

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、频率fDVFS调频调压、时钟门控、任务合并降低翻转率
静态功耗V·I_leak漏电流I_leak、温度T电源门控、睡眠状态管理、温度感知调度
核心原理:动态功耗与电压的平方成正比,因此降低电压是功耗优化的第一手段。但电压降低会导致频率上限下降,进而增加延迟。调度器需要在电压-频率对(V/F pair)之间做出选择,这就是DVFS(动态电压频率调节)的基本出发点。

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占主导,优化方向是通信压缩、拓扑感知调度。
判断方法:通过性能计数器(Performance Counter)分别统计计算周期数、访存等待周期数和通信等待周期数。若访存等待周期占总周期的比例超过60%,则判定为访存瓶颈;若通信等待占比超过40%,则判定为通信瓶颈。

3.3 功耗与延迟的基本权衡:从EDP到帕累托前沿

功耗与延迟的权衡关系可以用功耗-延迟积(Energy-Delay Product, EDP)来量化:EDP = P × T。EDP越小,表示在功耗和延迟的综合维度上越优。但EDP只是一个标量指标,实际调度中往往需要在多个工作点之间选择。这些工作点构成了功耗-延迟平面上的帕累托前沿(Pareto Frontier)——在功耗轴上无法找到另一个点同时具有更低功耗和更低延迟。

调度器的核心任务是在帕累托前沿上选择合适的工作点。具体操作流程如下:

  1. 建立功耗-延迟模型:对每个计算单元,测量不同频率/电压组合下的功耗和延迟数据,形成查找表。
  2. 识别任务特征:分析任务的算术强度(Arithmetic Intensity,即操作数/字节),判断是计算密集还是访存密集。
  3. 设定约束条件:根据SLA(服务等级协议)确定延迟上限,或根据散热设计确定功耗预算。
  4. 选择工作点:在满足约束的前提下,选择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. 将频率从1.2GHz降至1.0GHz,电压从0.85V降至0.75V,动态功耗降低约30%(因为P∝V²f)。
  2. 启用数据复用优化:将卷积层的输入特征图分块(Tiling),使数据在SRAM中复用,减少DRAM访问次数约35%。
  3. 将部分BatchNorm层从张量核迁移到向量核执行,利用向量核的并行处理能力,减少张量核的流水线气泡。
  4. 调整DMA预取策略,提前将下一层数据加载到SRAM,隐藏访存延迟。

结果对比:优化后,端到端延迟降至9.8ms(降低21.6%),平均功耗降至5.6W(降低31.7%)。EDP从102.5降至54.9(降低46.4%)。虽然频率降低了,但由于访存瓶颈缓解,延迟反而下降。

风险与代价:频率降低后,若遇到突发计算密集型任务(如动态形状输入),可能导致计算能力不足。为此,调度器保留了动态升频的触发条件:当计算队列深度超过阈值时,自动将频率提升至1.2GHz。

复盘经验:功耗与延迟的权衡不是简单的"降频省电",而是需要先识别瓶颈类型。在本案例中,访存是瓶颈,因此降低频率不会显著影响计算延迟,反而通过降低电压节省了大量功耗。调度器应优先优化瓶颈环节,再考虑DVFS调节。

总结:功耗与延迟的权衡是异构NPU调度的核心问题。动态功耗与静态功耗的模型提供了功耗优化的理论依据;计算/访存/通信的延迟分解帮助定位系统瓶颈;EDP和帕累托前沿为调度决策提供了量化目标。实际调优中,应遵循"先识别瓶颈,再调节频率,最后优化数据流"的顺序,避免盲目降频或盲目升频。