
140、NPU的仿真测试:使用MAESTRO进行数据重用分析上周调试一块自研NPU的卷积加速器,跑ResNet-18第一层时发现DDR带宽利用率只有12%。盯着波形图看了三天,最后发现是数据重用策略没配好——每次从外部存储器拉数据都重复搬运了同一个输入特征图的同一行。这种问题在硬件流片前如果不暴露,流片回来就是几百万的学费。今天聊聊怎么用MAESTRO这个工具,在仿真阶段就把数据重用的问题揪出来。为什么数据重用分析这么重要NPU和CPU最大的区别在于:CPU靠缓存命中率吃饭,NPU靠数据流调度吃饭。一个典型的卷积层,输入特征图可能有几百KB,权重有几MB,输出特征图又有几百KB。如果每次计算都从DRAM取数,功耗和延迟都扛不住。我见过最夸张的案例:某团队做3x3卷积,输入是112x112x64,他们让每个PE(处理单元)独立从DDR读数据,结果同一个输入像素被读了9次(3x3卷积核的每个位置都要读一次)。这相当于把DDR带宽需求放大了9倍,而实际上完全可以通过行缓冲(line buffer)把数据重用起来。MAESTRO这个工具就是干这个的——它能在架构设计阶段,帮你分析清楚数据在不同存储层级之间的流动次数,找出哪些数据可以被重用、哪些搬运是浪费的。MAESTRO的核心概念:别被学术名词吓到MAESTRO的输入其实很简单:你告诉它你的计算映射方式(比如卷积核怎么在输入特征图上滑动),它就能算出每个数据元素被读了多少次、写入了多少次。它的核心模型叫“数据流图”(Dataflow Grap