046、NPU的利用率:如何避免计算单元空闲?

发布时间:2026/6/7 19:16:05

046、NPU的利用率:如何避免计算单元空闲? 好的,我们继续。这是《嵌入式NPU原理基础:从零开始理解神经网络处理器》系列的第046篇。046、NPU的利用率:如何避免计算单元空闲?去年在调试一个端侧人脸检测模型时,我盯着NPU profiler的输出看了整整一个下午。算力标称4TOPS,实际跑起来平均利用率只有23%。MAC阵列像一群懒散的工人,大部分时间在等数据。那个模型在GPU上能跑到80%的利用率,换到NPU上就水土不服。问题出在哪?不是NPU慢,是数据流没伺候好。NPU的核心是脉动阵列或近存计算阵列,本质是一堆乘累加单元(MAC)排成矩阵。理想状态下,每个时钟周期每个MAC都应该在干活。但现实是,数据搬运、同步等待、控制流开销,都会让这些昂贵的晶体管空转。利用率低,意味着你花大价钱买的算力,大部分时间在睡觉。第一个杀手:数据饥饿NPU的计算单元跑得飞快,但外部DDR带宽是瓶颈。一个典型的卷积层,如果输入特征图是112x112x64,权重是3x3x64x128,一次卷积需要加载的数据量是(11211264 + 3364*128)字节,约1.1MB。而NPU内部SRAM通常只有几百KB。这意味着权重和输入必须频繁地从DDR搬运。当MAC阵列算完手头的一小块数据,下一块数据还没从DDR搬进来,计算单元就不得不 stall(停顿)。这就是数据饥饿。我见过最极端的案例,一个深度可分离卷积,因为逐通道卷积的权重复用率极低,MAC利用率直接掉到个位数。怎么治?核心思路是“数据本地化”。尽量让数据在NPU内部的SRAM里多待几个周期,别急着写回DDR。这需要

相关新闻