018、NPU中的存储层次:全局缓存、本地缓存、寄存器文件
018、NPU中的存储层次:全局缓存、本地缓存、寄存器文件去年调一个端侧推理项目,模型在PC上跑得好好的,一上板子就崩。定位了三天,最后发现是NPU的本地缓存溢出——一个卷积层的中间特征图尺寸刚好卡在本地缓存边界上,编译器没做tiling,直接写爆了。从那以后,我对NPU的存储层次就再也不敢只看框图了。为什么NPU的存储层次和CPU不一样CPU的存储层次(L1/L2/L3缓存)对软件基本透明,你写C代码时根本不用操心哪个变量在哪个缓存里。NPU不行。NPU的存储层次是显式管理的,程序员或者编译器必须明确告诉硬件:数据从哪里读、暂存在哪里、算完写回哪里。根本原因在于NPU的架构哲学:用确定性的数据流换取能效。CPU要处理乱序执行、分支预测、缓存一致性,这些开销在NPU场景下都是浪费。NPU面对的是规整的矩阵运算,数据访问模式可以提前分析,那就干脆把存储层次的控制权交给软件,省掉硬件自动预取和一致性维护的功耗。三层存储,各司其职NPU的存储通常分三层:全局缓存(Global Buffer)、本地缓存(Local Buffer)、寄存器文件(Register File)。不同芯片的叫法可能不同,比如有些叫Shared Memory、Scratchpad,但本质一样。全局缓存:DRAM和计算单元之间的缓冲带全局缓存是NPU芯片上最大的片上存储,通常几百KB到几MB。它连接着片外DRAM和计算单元,主