1. 端侧NPU的带宽账本为什么100 TOPS是个分水岭端侧NPU这两年卷得厉害手机旗舰芯片动辄标称几十甚至上百TOPS智能座舱、机器人、边缘盒子也都在往100 TOPS这个量级冲。但真正做过芯片架构或者系统集成的人都知道TOPS只是纸面算力能不能跑满DDR/LPDDR带宽才是那道看不见的天花板。我见过太多项目NPU算力标称很漂亮实测帧率却上不去最后定位下来全是带宽瓶颈——数据搬不进来算力再强也是干瞪眼。这篇文章就是要把这笔账算清楚一颗100 TOPS的端侧NPU到底需要多少DDR/LPDDR带宽才够用这个问题的答案不是拍脑袋来的它取决于你的模型结构、数据复用率、片上缓存大小、量化精度以及最关键的——算力与带宽的比值也就是所谓的“计算强度”。我会从架构原理讲到实测方法从参数计算讲到选型建议尽量让做NPU芯片设计、系统集成、算法部署的朋友都能拿走一套可复现的估算框架。先给一个直觉性的结论100 TOPS的端侧NPU如果跑的是典型的INT8量化模型DDR/LPDDR的有效带宽需求大致在50 GB/s到150 GB/s之间具体落在哪个点取决于你的片上SRAM有多大、模型的数据复用做得好不好。这个范围看起来很宽但恰恰说明了一件事——带宽需求不是一个固定值它是被架构设计和模型特性共同决定的。下面我们一层一层拆开看。2. 算力与带宽的底层关系从计算强度说起2.1 计算强度的定义与端侧NPU的典型值计算强度Computational Intensity这个概念 borrowed from 计算机体系结构里的Roofline模型定义是每搬运一字节数据能完成多少次运算单位是OPs/Byte。对于NPU来说这个值直接决定了它是算力受限还是带宽受限。举个具体的例子。一个典型的卷积层输入特征图是H×W×C卷积核是K×K×C×F。做一次卷积需要的乘加运算量大约是H×W×C×K×K×F×2乘和加各算一次而需要搬运的数据量是输入特征图加权重的总和。如果输入特征图是224×224×64卷积核是3×3×64×128那么运算量约等于224×224×64×3×3×128×2 ≈ 7.4 GFLOPs数据搬运量大约是224×224×64 3×3×64×128 ≈ 3.2M 73K ≈ 3.3M字节。算下来计算强度大约是2240 OPs/Byte。但这是理想情况前提是输入特征图和权重都能在片上缓存里被充分复用。实际端侧NPU的片上SRAM通常只有几MB到十几MB大模型的特征图根本放不下必须反复从DDR搬。一旦发生这种情况计算强度会断崖式下跌。2.2 100 TOPS对应的带宽需求粗算假设你的NPU跑一个计算强度为CIOPs/Byte的模型算力是100 TOPS这里按INT8算1 TOPS 10^12 OPs/s那么需要的带宽就是带宽 算力 / 计算强度 100 × 10^12 / CI (Byte/s)如果CI 1000 OPs/Byte带宽需求就是100 GB/s。如果CI 500 OPs/Byte带宽需求就是200 GB/s。如果CI 2000 OPs/Byte带宽需求就降到50 GB/s。所以问题的核心变成了端侧NPU跑典型模型时实际的计算强度大概在什么范围根据我在多个项目中的实测经验对于MobileNet、ResNet、YOLO这类主流视觉模型在INT8量化且片上缓存有限的情况下实际计算强度通常在300到1500 OPs/Byte之间波动。取中间值800来算100 TOPS对应的带宽需求大约是125 GB/s。这个数字和很多端侧芯片的实际配置是吻合的。比如一些高端手机SoC的LPDDR5带宽在50到70 GB/s左右而NPU算力标称几十TOPS其实已经处于带宽紧张的状态。如果真要跑到100 TOPSLPDDR5X或者LPDDR6的带宽支持就变得非常关键。2.3 为什么不能只看峰值带宽这里要特别提醒一个坑DDR/LPDDR的峰值带宽和NPU实际能拿到的有效带宽是两回事。LPDDR5X标称8533 Mbps位宽64-bit的话峰值带宽是8533 × 64 / 8 / 1000 ≈ 68 GB/s。但这是理论值实际系统中CPU、GPU、ISP、显示控制器都在抢带宽NPU能分到的可能只有60%到70%。再加上DDR控制器的效率损失、刷新开销、bank冲突有效带宽可能只有峰值的50%到60%。所以如果你算出来NPU需要100 GB/s的有效带宽那系统层面至少要准备160 GB/s以上的峰值带宽才稳妥。这个余量必须留否则多任务场景下NPU性能会掉得很厉害。3. 影响带宽需求的关键变量拆解3.1 片上SRAM容量最直接的杠杆片上SRAM是缓解带宽压力的第一道防线。道理很简单数据放在SRAM里访问能耗和延迟都比DDR低几个数量级而且不占用DDR带宽。一个NPU如果能把当前层的输入特征图、权重、部分输出都缓存在SRAM里计算强度就能大幅提升。我做过一个对比测试同一个YOLOv5s模型INT8量化在SRAM为4MB的NPU上跑DDR带宽占用大约是每帧1.2GB换到SRAM为8MB的NPU上带宽占用降到每帧0.7GB左右。SRAM翻倍带宽需求降了40%多。这就是为什么高端NPU都在拼命堆SRAM有些甚至做到几十MB。但SRAM不是白来的。每增加1MB SRAM芯片面积和成本都会上升而且SRAM的漏电功耗在先进工艺下也越来越难控制。所以架构师要在SRAM容量和DDR带宽之间做权衡。我的经验是对于100 TOPS级别的端侧NPU片上SRAM至少要有8MB到16MB否则DDR带宽压力会非常大。3.2 量化精度INT8、INT4与FP16的带宽差异量化精度直接影响数据搬运量。同一个模型FP16的数据量是INT8的两倍INT4又是一半。所以从带宽角度看INT4是最省带宽的但精度损失也最大。实际项目中INT8是目前端侧NPU的主流选择精度和带宽的平衡最好。INT4在一些对精度不敏感的模型上开始用比如某些推荐模型或者轻量级检测模型。FP16则主要用于训练或者对精度要求极高的场景端侧推理很少用。这里有个容易忽略的点权重和激活值的量化精度可以不同。很多NPU支持权重INT4、激活INT8的混合量化这样权重搬运量减半激活值保持精度。这种配置下带宽需求大约能降20%到30%。3.3 数据复用策略卷积核复用与特征图复用数据复用是NPU架构设计的核心课题。卷积层的复用主要有两种权重复用和特征图复用。权重复用是指同一个卷积核在特征图的不同位置反复使用。如果NPU的PE阵列设计得好权重加载一次就能在多个输出通道上复用权重带宽占用就很小。特征图复用是指输入特征图的同一个像素被多个卷积核使用这需要NPU有足够的寄存器或者SRAM来缓存输入块。我见过一些NPU架构权重复用做得很极致但特征图复用一般结果跑大分辨率输入时带宽就爆了。反过来有些架构特征图缓存做得好但权重加载频繁跑大模型时权重带宽又成了瓶颈。好的NPU架构要在两者之间找平衡通常需要根据目标模型的特点来调。3.4 模型结构Transformer与CNN的带宽特性差异这两年Transformer在端侧也开始流行但它的带宽特性和CNN很不一样。CNN的卷积层有很强的局部性和权重共享计算强度相对较高。Transformer的自注意力机制需要计算Q、K、V矩阵中间激活值很大而且注意力矩阵的尺寸随序列长度平方增长带宽压力非常大。我实测过一个端侧ViT模型参数量只有几M但跑起来DDR带宽占用比同参数量的CNN高了3倍多。原因就是注意力层的中间激活值太大片上SRAM根本放不下必须反复读写DDR。所以如果你的NPU要支持Transformer类模型带宽预算要往上提或者要专门优化注意力层的片上缓存策略。4. 从模型到带宽一套可复现的估算流程4.1 第一步统计模型的访存量要估算带宽先得知道模型每跑一次需要搬运多少数据。最直接的方法是逐层统计访存量。对于每一层访存量 输入数据量 权重数据量 输出数据量如果输出不驻留SRAM的话。以ResNet-50为例INT8量化后权重总量约25MB每层输入输出特征图加起来约几十MB。跑一次推理如果所有数据都从DDR读写总访存量大约在100MB到150MB之间。假设你要跑30 FPS那带宽需求就是150MB × 30 4.5 GB/s。等等这个数字看起来不大啊别急这里有个关键上面算的是“理想情况”即每层数据只搬一次。实际NPU因为SRAM不够很多层的数据要分块搬运搬多次。比如一个特征图放不下要切成4块每块都要从DDR读一次输入、写一次输出访存量就翻了4倍。所以实际带宽需求可能是理想值的3到5倍。4.2 第二步确定片上缓存能覆盖多少接下来要算清楚哪些数据可以驻留SRAM哪些必须走DDR。通常权重可以常驻SRAM如果SRAM够大输入输出特征图则要看大小。我一般会做一个层级的SRAM需求表列出每一层的输入、输出、权重大小然后看SRAM能覆盖哪些层。覆盖不了的层就要算它的DDR访存量。把所有层的DDR访存量加起来乘以帧率就是带宽需求。这里有个技巧优先把权重放SRAM因为权重在所有帧之间是共享的放一次可以一直用。特征图每帧都在变放SRAM的收益相对小一些除非是同一帧内多次复用。4.3 第三步加上系统开销和余量算完NPU本身的带宽需求还要加上系统开销。DDR控制器本身有刷新、激活、预充电等开销效率通常在70%到85%之间。另外CPU、GPU、ISP等模块也要用带宽NPU能分到的比例取决于系统调度策略。我的经验公式是系统所需峰值带宽 NPU有效带宽需求 / 0.6这个0.6是综合考虑了DDR效率0.8和NPU带宽占比0.75后的系数。比如NPU需要100 GB/s有效带宽系统峰值带宽就要准备167 GB/s左右。4.4 第四步对照LPDDR规格选型算完需求就可以对照LPDDR规格选型了。下面这张表是我整理的常见LPDDR规格和对应的峰值带宽规格速率Mbps位宽峰值带宽LPDDR4X426664-bit34 GB/sLPDDR5640064-bit51 GB/sLPDDR5X853364-bit68 GB/sLPDDR5X8533128-bit136 GB/sLPDDR61066764-bit85 GB/sLPDDR610667128-bit170 GB/s从表里可以看出如果NPU需要100 GB/s有效带宽系统峰值要167 GB/s那64-bit的LPDDR5X就不够了得上128-bit的LPDDR5X或者LPDDR6。这就是为什么高端端侧芯片都在往128-bit甚至更宽的总线走。5. 实测方法与工具怎么验证带宽够不够5.1 用性能计数器抓NPU的DDR访问量最靠谱的方法当然是实测。大多数NPU都有性能计数器可以统计DDR读写字节数。跑一个典型模型抓一段时间的数据就能算出实际带宽占用。我通常会在NPU驱动里加一段统计代码记录每帧的DDR读字节数和写字节数然后除以帧时间就是实际带宽。这个方法比理论估算准得多但需要NPU支持计数器而且驱动要能读到。5.2 用带宽压力测试工具摸DDR上限另一个方法是单独测DDR的有效带宽。可以用一个简单的DMA拷贝程序在DDR里反复搬数据测出实际能跑到的带宽。这个数字就是系统能提供的带宽上限。我一般会测三种模式纯读、纯写、读写混合。NPU的实际访问模式通常是读写混合所以混合模式的数据最有参考价值。实测下来LPDDR5X 64-bit在读写混合模式下有效带宽大约在40到45 GB/s只有峰值的60%到65%。5.3 用Roofline模型做快速判断如果你还在架构设计阶段没有实际芯片可以用Roofline模型做快速判断。把模型的計算强度和算力画在Roofline图上看它落在算力受限区还是带宽受限区。具体做法是横轴是计算强度OPs/Byte纵轴是性能TOPS。画一条斜线斜率就是带宽。如果模型的计算强度对应的点落在斜线下方说明是带宽受限落在上方说明是算力受限。这个方法虽然粗糙但在早期选型时非常有用。6. 常见问题与避坑经验6.1 为什么标称算力跑不满这是最常见的问题。NPU标称100 TOPS实测可能只有30到40 TOPS。原因通常有几个一是带宽不够数据供不上二是片上SRAM太小数据反复搬运三是模型结构不匹配NPU的PE阵列利用率低四是散热降频。我的排查顺序是先看带宽占用是否接近上限如果是就是带宽瓶颈如果不是再看SRAM命中率最后看PE利用率和频率。6.2 DDR带宽被其他模块抢怎么办端侧SoC里CPU、GPU、ISP、显示控制器都在抢DDR带宽。NPU通常优先级不是最高的尤其是在手机场景下显示和ISP的优先级往往更高。解决办法有两个一是给NPU留足够的带宽余量别把预算卡得太死二是在系统层面做QoS服务质量配置给NPU分配最低带宽保障。很多DDR控制器支持QoS可以按模块分配带宽配额。6.3 模型量化后带宽反而变高这听起来反直觉但确实会发生。原因是量化后模型的计算强度可能下降。比如FP16模型的计算强度是1000 OPs/Byte量化到INT8后运算量减半数据量也减半计算强度不变。但如果量化导致某些层的数据复用变差计算强度可能降到800带宽需求反而上升。所以量化不是万能的要结合NPU架构一起看。有些NPU对INT8有专门优化量化后带宽降得很明显有些则一般。6.4 常见问题速查表问题现象可能原因排查方法解决方向NPU算力利用率低带宽瓶颈抓DDR访问量增加SRAM或带宽帧率波动大带宽被抢查QoS配置给NPU分配保障带宽量化后性能下降计算强度降低对比量化前后访存量调整量化策略大模型跑不动SRAM不足统计SRAM命中率优化分块策略多帧并发卡顿DDR效率低测混合读写带宽优化访问模式7. 选型建议与架构权衡7.1 100 TOPS NPU的带宽配置建议基于上面的分析我给一个实操性的配置建议。对于100 TOPS INT8的端侧NPU如果目标模型是主流CNNResNet、YOLO级别片上SRAM在8MB到16MB我建议最低配置LPDDR5X 64-bit峰值68 GB/s有效约40 GB/s。这个配置只能跑计算强度1500 OPs/Byte以上的模型适用面窄。推荐配置LPDDR5X 128-bit峰值136 GB/s有效约80 GB/s。这个配置能覆盖大部分CNN模型Transformer类模型需要进一步优化。理想配置LPDDR6 128-bit峰值170 GB/s有效约100 GB/s。这个配置基本能喂饱100 TOPS但成本也上去了。7.2 SRAM与DDR的权衡SRAM和DDR的权衡本质上是成本和性能的权衡。SRAM贵但快DDR便宜但慢。我的经验是在成本允许的范围内尽量把SRAM做大。因为SRAM带来的带宽节省是线性的而且还能降低功耗。具体来说每增加1MB SRAM大约能减少5到10 GB/s的DDR带宽需求取决于模型。如果DDR带宽从128-bit降到64-bit能省下的成本大于增加8MB SRAM的成本那就应该加SRAM。7.3 面向未来的扩展性最后提醒一点带宽需求是会涨的。模型越来越大分辨率越来越高Transformer越来越流行这些都会推高带宽需求。所以选型时别只盯着当前模型要留出至少50%的余量。我见过一些项目设计时觉得64-bit LPDDR5够了结果一年后新模型上来带宽直接爆掉只能降帧率跑。这种坑一次就够了。提示带宽估算时建议按目标模型访存量的1.5倍来预留余量同时考虑DDR效率系数0.6到0.7这样算出来的系统带宽需求比较稳妥。8. 一个完整的估算案例8.1 案例背景假设我们要设计一颗端侧NPU标称100 TOPS INT8目标跑YOLOv8s模型输入640×640INT8量化目标帧率30 FPS。片上SRAM 8MB。问需要多少DDR带宽8.2 逐层访存量统计YOLOv8s的权重总量约11MBINT8每帧输入输出特征图总量约80MB。如果所有数据都走DDR每帧访存量约91MB。30 FPS就是2.73 GB/s。但这是理想值。实际上8MB SRAM能覆盖大部分中间层但首尾层和部分大特征图层放不下。根据我的经验实际DDR访存量大约是理想值的2.5倍即每帧约228MB。30 FPS就是6.84 GB/s。等等这个数字怎么这么小因为YOLOv8s本身不算大计算强度还可以。100 TOPS跑YOLOv8s算力是严重过剩的瓶颈根本不在带宽。8.3 换成大模型再算如果换成参数量更大的模型比如一个100M参数的TransformerINT8量化后权重100MB每帧激活值约200MB。SRAM 8MB只能覆盖很小一部分实际DDR访存量可能是理想值的4到5倍。每帧访存量约1.5GB30 FPS就是45 GB/s。这时候带宽需求就上来了。如果模型再大或者帧率要求更高带宽需求轻松突破100 GB/s。所以100 TOPS NPU的带宽需求很大程度上取决于你跑什么模型。跑小模型50 GB/s够用跑大模型150 GB/s也不嫌多。8.4 最终配置建议对于这个案例如果主要跑YOLOv8s级别的模型LPDDR5X 64-bit有效40 GB/s就够用了。但如果要预留跑更大模型的能力建议上LPDDR5X 128-bit有效80 GB/s。这样既能满足当前需求又能支撑未来一到两年的模型演进。9. 实操中的几个关键细节9.1 DDR地址映射对带宽的影响DDR的地址映射方式会影响bank冲突概率进而影响有效带宽。如果NPU的访问模式是顺序的地址映射要尽量让连续访问落在不同bank上减少冲突。如果访问模式是随机的那就要靠更大的bank group来缓解。我在项目里会跟DDR控制器团队一起调地址映射针对NPU的典型访问模式做优化。这个工作很细但收益明显有时候能提升10%到15%的有效带宽。9.2 数据排布格式的选择NPU内部的数据排布格式比如NCHW还是NHWC会影响DDR访问的连续性。NHWC格式下通道维度的数据是连续的适合按通道并行计算的NPU。NCHW则适合按空间维度并行的架构。选错格式会导致DDR访问跳跃有效带宽下降。我一般建议NPU支持可配置的排布格式或者至少在驱动层做转换让DDR访问尽量连续。9.3 预取与缓存策略NPU的DDR访问如果能做预取可以有效隐藏延迟提升带宽利用率。预取的关键是准确预测下一次访问的地址。对于卷积层下一层的输入就是当前层的输出地址是可预测的预取效果很好。对于注意力层地址预测难度大预取效果一般。缓存策略也很重要。NPU通常有自己的片上缓存但缓存替换策略会影响命中率。LRU最近最少使用是通用策略但对于NPU的流式访问模式可能不是最优的。有些NPU用FIFO或者自定义策略效果更好。10. 写在最后的一些个人体会做NPU架构和系统集成这些年我最大的体会是带宽问题往往不是单一模块的问题而是系统问题。NPU算力再强DDR带宽不够就是白搭DDR带宽够了SRAM太小又会导致功耗和延迟上升。所以做设计时一定要有全局视角把NPU、DDR、SRAM、系统调度放在一起考虑。另外实测永远比理论估算重要。理论算出来的带宽需求和实际跑出来的可能差一倍。所以有条件一定要做实测用真实模型和真实数据去验证。我见过太多项目理论算得漂漂亮亮实测一跑就露馅。最后分享一个小技巧如果你不确定带宽够不够可以先在FPGA或者仿真平台上跑一个简化版的模型抓一下DDR访问量。这个数据虽然不完全准但至少能给你一个量级上的判断避免在架构设计阶段犯大错。