028、片上SRAM vs 片外DRAM:NPU存储设计的权衡
028、片上SRAM vs 片外DRAM:NPU存储设计的权衡去年调一个边缘推理板卡,模型跑MobileNetV3,帧率死活上不去。看波形图,NPU核心利用率只有40%多,大部分时间在等数据。我盯着DDR总线上那些长长的读延迟波形,突然意识到一个残酷的事实:NPU不是在算,是在等。那次之后,我花了两周时间重新梳理了NPU存储架构。今天这篇笔记,就是当时踩坑的总结。一个真实的调试现场先说说那个让我失眠的bug。板子上用的是某款国产NPU芯片,片上SRAM只有2MB,片外挂了两颗LPDDR4,总容量4GB。跑分类网络时,模型权重大概3.8MB,激活值中间结果大约1.2MB。按说4GB的DDR带宽有25.6GB/s,应该够用才对。但实际跑起来,NPU的PE阵列(处理单元阵列)经常空转。用逻辑分析仪抓DDR总线,发现每笔读请求的延迟在80-120ns之间,而NPU内部一个MAC操作只需要0.5ns。这意味着,等一次DDR读的时间,足够PE做200次乘法。更坑的是,权重数据是反复重用的。同一个卷积核的权重,在滑动窗口过程中会被读取几十次。每次都要从DDR读,带宽全浪费在重复传输上了。片上SRAM:贵但快,容量是硬伤片上SRAM的延迟通常在1-2ns,带宽可以做到几百GB/s(取决于工艺和设计)。但代价是面积和功耗。在28nm工艺下,1MB的SRAM面积大约2-3平方毫米,而同样容量的DRAM(需要外挂)面积成本低两个数量级。NPU设计里,SRAM主要用来做三件事: