045、NPU的带宽利用率:Roofline模型分析
045、NPU的带宽利用率:Roofline模型分析
上周五晚上十一点,我在调试一块搭载自研NPU的AI加速卡。板子跑ResNet-50推理,理论算力标称4TOPS,结果实测帧率只有标称值的六成。盯着示波器上DDR总线的波形,我意识到问题不在计算单元——带宽瓶颈把算力活活饿死了。
这种场景在嵌入式NPU开发中太常见了。你花大价钱堆的MAC阵列,如果喂不饱数据,就是一堆昂贵的摆设。今天这篇笔记,我们就用Roofline模型这把手术刀,把NPU的带宽利用率剖开来看。
从一次“算力浪费”事故说起
那块板子的NPU核心频率跑到了800MHz,MAC利用率监控显示只有45%。我第一反应是算子没优化好,翻来覆去改了几版代码,毫无改善。后来用逻辑分析仪抓DDR读写时序,发现一个扎心的事实:每次计算单元请求数据,平均要等120个时钟周期。
这就像你雇了100个工人,但原材料传送带每两分钟才来一次。工人大部分时间在干瞪眼。
NPU的带宽利用率,本质上就是计算单元和存储系统之间的“供需匹配度”。Roofline模型正是用来量化这个匹配度的工具。
Roofline模型:一张图看懂瓶颈在哪
Roofline模型的核心思想很简单:NPU的实际性能,受限于两个因素——计算能力(天花板)和带宽能力(墙)。谁低谁就是瓶颈。
数学表达就两行:
性能 = min(峰值算力, 带宽 × 计算密度)这里的计算密度,指的是每从内存搬运一个字节的数据,你能
