AIGC标识 RISC-V端侧功耗与热约束调优指南:动态调频、热节流与能效比评估

1. 功耗的两个分量

处理器功耗由两部分构成。动态功耗来自晶体管翻转,可写为 P_dyn = α · C · V² · f,其中 α 为活动因子、C 为等效电容、V 为供电电压、f 为频率。静态功耗来自漏电,在深亚微米工艺下不再可以忽略,且随结温升高按指数规律增长。

两个分量在温度上形成正反馈:温度升高使漏电增大,漏电增大又抬升温度。散热能力不足时该回路可能收敛到超出安全范围的温度,温度墙由硬件实现并强制介入,原因即在于此——软件调频策略无法保证在失稳前及时响应。

该式也给出能效优化的方向。降频直接减少与 f 成正比的部分,配套降压则作用于 V² 项,收益更大。只降频不降压,能效改善有限;可用的工作点总是一组频率与电压的配对,而非独立频率值。

2. 端侧长时运行的约束特征

端侧设备与数据中心平台的差异,决定了功耗优化的目标函数不同。数据中心配备主动散热,约束是功率上限与机房散热能力,指标以每瓦吞吐为主。端侧设备通常无风扇,热量经外壳传导,可感知的约束是外壳温度而非结温;设备由电池供电,持续功耗还受电池容量与放电能力限制。

两类约束关注的量不同。散热约束针对持续功率,量纲为瓦特;能量约束针对累计能耗,量纲为焦耳。短时突发对散热约束的冲击有限,长时运行则受能量约束主导。这一区别解释了一个常见现象:以短时峰值吞吐为口径的跑分结论无法外推到长时场景。

3. 工作点的定义与实现路径

工作点由一组频率与电压配对构成,全部可用工作点的集合以表的形式组织,称为 OPP(Operating Performance Point)表,通常由固件或平台描述提供,声明每个频率点对应的电压与约束。

内核侧的决策由调频策略完成,常见策略的判据不同:

策略

决策依据

适用场景

performance

恒定取最高工作点

时延敏感、供电散热充足

powersave

恒定取最低工作点

待机或极低负载

ondemand

依据 CPU 利用率阈值切换

负载阶跃明显的场景

schedutil

依据调度器负载预测

通用场景,响应更平滑

在 RISC-V 平台上,调频能力的实现依赖固件与内核的分工:固件声明可用工作点并提供设置接口,内核策略负责决策与下发。接口形态因平台而异,有的经由 SBI 扩展调用,有的通过平台时钟与稳压器驱动实现。评估某平台的可调频能力应以固件与驱动文档为准,不宜假定接口一致。OPP 表中声明的频率应视为上限而非保证值,实际可达值还受供电能力、温度与负载类型限制。

4. 调频对时延的非线性影响

调频对推理时延的影响是非线性的,原因在于推理负载中各算子的瓶颈类型不同。

第 18 篇已给出算术强度判据:算术强度高的算子受访存带宽约束,执行时间主要由访存量与可达带宽决定,与核心频率弱相关;算术强度低的算子受计算能力约束,执行时间近似与频率成反比。一段推理由两类算子共同构成,整体时延随频率的变化因此介于两者之间。

以一个简化模型描述这一关系:

 

其中 c / f 为计算受限部分,随频率下降而增大;m 为访存受限部分的时延下界,与频率基本无关。取示例参数 c = 0.06 GHz·s、m = 0.02 s,四个工作点的结果如下:

频率

电压

单 Token 时延

输出速率

总功耗

能效

单 Token 能耗

2.0 GHz

1.00 V

50.0 ms

20.00 tok/s

2.150 W

9.30 tok/J

0.1075 J

1.6 GHz

0.90 V

57.5 ms

17.39 tok/s

1.446 W

12.03 tok/J

0.0831 J

1.2 GHz

0.80 V

70.0 ms

14.29 tok/s

0.918 W

15.56 tok/J

0.0643 J

0.8 GHz

0.70 V

95.0 ms

10.53 tok/s

0.542 W

19.42 tok/J

0.0515 J

由 2.0 GHz 降至 1.6 GHz,频率下降 20%,时延仅增加 15%,低于线性预期;降至 0.8 GHz 时频率减半,时延增加 90% 而非 100%。对访存受限占比高的负载,降频的时延代价小于按频率比例的估算——这一性质是后文按约束选点的基础。

功耗按 P_dyn ∝ f · V² 相对 2.0 GHz 点归一算得,静态功耗取示例值 0.15 W。上述数字为示例参数下的计算结果,非任何平台实测值,不可外推为普遍规律。

5. 热节流机制

结温与环境温度、功耗的关系可用稳态热阻模型描述:

 

热量积累到稳态需要时间,时间常数为 τ = R_th · C_th。取示例参数 R_th = 8 °C/W、C_th = 10 J/°C,时间常数为 80 秒。该量级说明两点:秒级突发负载不会显著抬升结温,温度墙在短时任务中通常不介入;持续数分钟的负载才逐步逼近稳态温度,节流因此是长时负载专属的现象。

沿用同一组参数,环境温度 40 °C、温度墙 85 °C,允许的最大稳态功耗为 (85 − 40) / 8 = 5.625 W。对照各工作点:单模型满频运行的 2.150 W 对应稳态结温 57.2 °C,不触发节流;当多模型并发连同加速器同时工作、整机功耗达到 8 W 量级时,稳态结温升至 104 °C,超出温度墙,须削减约 29.7% 的功耗才能收敛到限值内。

这一对照补充了第 19 篇的判断:内存预算给出的并发上限,未必是热约束允许的并发上限,两者须同时满足,实际可用并发度取较小值。多模型常驻在内存维度可能是经济的,在热维度却可能不可持续。

节流与调频在机制上须区分:调频是软件策略的主动选择,可在工作点之间按需切换;节流是硬件保护动作,触发后实际工作点由温度决定而非策略决定。诊断时若观察到频率低于策略设定值,应先确认是否处于节流状态,再排查策略配置——把节流误判为策略失效会导向错误的优化方向。

6. 能效比的评估口径

能效比有两类等价表述:以单位能量完成的工作量衡量,即 吞吐 / 功率,量纲为 token 每焦耳;或以完成单位工作的能耗衡量,即 功率 / 吞吐,量纲为焦耳每 token。二者互为倒数,报告时应明确采用哪一种。

评估口径的第二个要素是测量点,可用手段各有观测边界。外部电流传感器测得整机输入功率,涵盖核心、内存、外设与电源管理芯片的损耗,反映真实能耗但无法区分各部分贡献;片上性能计数器可归因到核心内部,但不含内存与外设功耗;电池电量计适合长时间平均,无法捕捉毫秒级波动。

观测边界不同,不同手段得到的数字不可直接比较。报告能效数据须同时声明测量点、时间窗口与负载类型,否则不具可比性。电流采样率也需覆盖负载的毫秒级波动,采样率不足会把峰值平均掉,得到偏乐观的结论。

7. 实战:按约束选择工作点

本流程的目标是:在满足时延约束的前提下,选择能耗最低的工作点。

步骤一:逐点测量。 固定负载类型与输入规模,依次将设备置于各工作点,待温度进入稳态后记录吞吐与输入功率。测量顺序建议由高到低,使节流状态在高温点先暴露。

步骤二:计算能效列。 按选定口径算出各工作点能效值,保留时延与功耗原始数据以备重新筛选。

步骤三:按约束筛选。 剔除时延不达标的工作点,在剩余可行点中取功耗最低者。

以第 4 节数据为例,设产品要求输出速率不低于 15 tok/s,可行点只有 2.0 GHz 与 1.6 GHz 两个;其中 1.6 GHz 的功耗为 1.446 W,低于 2.0 GHz 的 2.150 W,能效 12.03 tok/J 相对后者的 9.30 tok/J 提升 29.3%。在满足时延约束的可行点中,工作点越低能效越好——能效随频率单调下降时,约束的作用只是划定可行区间的下界,最优解总落在紧邻该下界的位置。

该结论的适用前提是能效随频率单调变化。当平台存在高频段收益递减、或低压点受工艺偏差限制无法稳定工作时,单调性会被破坏,此时须依据实测数据确定拐点。

对应的分析脚本如下,输入为各工作点的实测吞吐与功率:

# workpoint.py —— 按约束筛选工作点
OPS = [
    # (频率 GHz, 电压 V, 实测吞吐 tok/s, 实测整机功率 W)
    (2.0, 1.00, 20.00, 2.150),
    (1.6, 0.90, 17.39, 1.446),
    (1.2, 0.80, 14.29, 0.918),
    (0.8, 0.70, 10.53, 0.542),
]


def evaluate(ops, min_tps):
    rows = []
    for f, v, tps, p in ops:
        rows.append({
            "f": f, "v": v, "tps": tps, "p": p,
            "eff": tps / p,          # token/J,越大越好
            "energy": p / tps,       # J/token,越小越好
        })
    feasible = [r for r in rows if r["tps"] >= min_tps]
    best = min(feasible, key=lambda r: r["p"]) if feasible else None
    return rows, best


if __name__ == "__main__":
    rows, best = evaluate(OPS, min_tps=15.0)
    print("%-8s %-8s %-10s %-10s %-10s" % ("f(GHz)", "V(V)", "tok/s", "P(W)", "tok/J"))
    for r in rows:
        print("%-8.1f %-8.2f %-10.2f %-10.3f %-10.2f"
              % (r["f"], r["v"], r["tps"], r["p"], r["eff"]))
    if best:
        print("\n约束 15 tok/s 下的最优工作点: %.1f GHz  %.3f W  %.2f tok/J  %.4f J/token"
              % (best["f"], best["p"], best["eff"], best["energy"]))

脚本输出与前述结论一致。实际使用时应替换为平台实测数据,并补充温度稳定判据——温度未进入稳态时测得功率偏低,选出的工作点在高负载下可能不成立。

8. 常见问题与成因

  • 降频后时延增幅小于预期:属正常现象,说明负载中访存受限算子占比较高,据此推算时延会高估降频代价;
  • 降频后时延反而大幅增加:需排查是否触发内存侧降级路径。频率下降会拉长算子执行时间,间接抬高并发请求的驻留内存,可能越过准入阈值并触发上下文削减,此时时延增加来自内存策略而非频率本身;
  • 长时运行数分钟后才出现降频:时间量级与热时间常数吻合,应判定为热节流而非调频策略异常,确认方式是对比同负载下的短时与长时频率记录;
  • 外壳温度偏高但结温读数正常:热量在传导路径上的温差所致,二者限值不同,需分别核对;外壳温度超标时改进方向在结构与散热材料,而非降低芯片功耗;
  • 能效数据在不同文档间不可比:测量点或口径不一致,核对是否一方为整机输入功率、另一方为核心功耗,以及是否为同一时间窗口;
  • 提高工作点后能效大幅恶化:符合 V² 项的增长规律,若以能耗为主要指标应避免长期运行于最高工作点。

9. 结语

端侧长时运行的功耗与热约束本质上是一组多目标取舍:时延、能效与温度不能同时取到各自最优值,工程解总落在由约束划定的可行区间内。两条可操作的结论是:满足时延约束的最低工作点通常是能效最优的可行解;内存与热两个维度分别给出的并发上限须同时满足,实际可用值取较小者。功耗、内存与时延约束的是同一执行计划的不同侧面,任何一项的调整都会改变其余两项的可行区间。

posted @ 2026-09-28 18:03  RISCV_Explore  阅读(5)  评论(0)    收藏  举报