资讯动态

AI芯片软硬件协同设计:从TOPS到NPU编译器与算子库的全景解读

发布时间:2026/10/27 17:14:27 来源:尧图企业网站定制
一块标称30 TOPS的AI芯片跑起某个模型来却被旁边一块只有10 TOPS的芯片反杀——这种场景在行业里见得太多了。问题几乎不在算力牌面上而在软硬件设计没对齐。AI芯片这个行当特别有意思的地方在于它从来不是一个纯硬件项目你设计的是芯片但最后用户摸到的是编译器、算子库和推理引擎。这篇文章是“AI芯片的软硬件设计”系列的第一篇先把整张地图摊开AI芯片为什么必须软硬件协同设计、硬件侧有哪些核心组成、软件侧的主干是什么、一个真实场景里协同设计怎么做以及我建议新手入行先抓住哪几件事。适合三类人看正在做芯片后端或嵌入式开发、想往AI芯片方向转的工程师算法工程师想搞明白“我的模型为什么在NPU上跑不快”以及正在选型AI芯片做产品的硬件负责人。1. 为什么AI芯片的命门是软硬件协同1.1 从冯·诺依曼瓶颈说起AI计算为何把传统架构逼到墙角要理解AI芯片为什么不能按老路子设计得先看经典CPU到底卡在哪。冯·诺依曼架构把运算器和存储器分开指令和数据通过总线搬运这个结构通用性强什么程序都能跑但代价是“取指、译码、执行、访存”这一套流水线里真正干活的运算时间占比并不高。AI模型层层叠加几乎全是矩阵乘法、卷积、激活函数计算密度极高数据又在层与层之间反复流动。于是访存带宽就成了天花板很多处理器的算术能力明明不低算力却喂不饱这就是常说的“内存墙”。打个比方CPU就像一位什么菜都能做的厨师厨艺全面但每次做菜都得不停跑到冰箱取食材。AI任务相当于同时做几百道需要大量同一批食材的菜通用厨师放不下食材只能一趟趟跑腿再快也快不起来。专用芯片的思路则是把厨房重新设计一遍大操作台片上存储、专用备料员DMA和一辆直接对接灶台的餐车脉动阵列/近内存计算让食材在厨房里循环流动而不是反复进出冰箱。AI领域另一个特点是对精度不那么偏执。模型训练和推理对数值误差有比较强的容忍度FP32、FP16、INT8甚至INT4都能用这给硬件设计者留了巨大的优化空间——用更小的数据位宽换取更高的吞吐和能效。通用CPU为了面向所有场景指令集和精度体系都得面面俱到AI芯片则只做取舍极端明确的那套动作。这就是AI芯片在能效上能碾压CPU的根本原因也是软硬件协同设计的原始动机。1.2 性能必须软硬共同兑现不懂编译就无法发挥算力硬件把运算单元做得再快如果软件不能把目标模型准确映射到这些单元上一切白搭。AI芯片的架构通常是为特定计算模式服务的也就是DSADomain Specific Architecture这类架构效率极高代价是灵活性比CPU低一个量级。那么谁来负责“把通用的模型翻译成专用硬件的指令”答案就是编译器。一个卷积操作在CPU上可能就是一个循环套循环编译器随便优化一下都能跑但在NPU上你得把卷积拆成矩阵乘决定数据切片tiling尺寸安排数据从DRAM搬运到片上SRAM的顺序再把矩阵单元按脉动阵列的数据流方式喂入。排布得不好硬件所有流水线都在空转等数据。我见过一个真实的对比两款边缘AI芯片标称一个6 TOPS、一个4 TOPS跑同一个INT8检测模型结果4 TOPS那款反而快得多。原因不是前者虚标而是它前几版工具链对带残差结构的模型支持得很差一个Reshape就把数据打断来回做了四次搬出搬进数据搬运开销把矩阵单元的收益全吃掉了。硬件给了你算力上限软件才决定你能兑现多少。理解这句话是进入AI芯片领域的第一课。1.3 不要只把AI芯片当成一个硬件项目很多团队做AI芯片最容易犯的错就是把项目当成“芯片设计项目”管理流片回来了大家欢呼板子点亮了以为成功。结果SDK还没写好算子库只覆盖了常用二十个编译器连残差结构都融合不了客户拿到开发板根本没办法把模型部署上去。芯片成了漂亮的“性能样品”离产品还很远。成熟的AI芯片产品应该是一整套组合芯片硬件、编译器工具链、算子库、运行时、调试工具、参考算法模型外加针对典型场景的适配包。硬件只是这套系统的第一层。所以后面系列文章里我会沿着硬件架构、指令集、编译器、算子库、工具链、典型场景适配这条线往下拆。本篇先把框架搭好把术语和边界理清后面每一章才好深入。2. 硬件侧的核心组成从SoC启动到NPU计算引擎2.1 认清芯片层级MCU、应用处理器SoC与AI加速芯片的分工聊AI芯片之前得先给芯片分个类。行业里经常把这几个概念混着说实际上分工差异很大我按开发者的视角整理如下芯片类型典型代表核心职责AI能力定位MCU微控制器STM32、ESP32控制、采集、简单的实时任务一般不带AI加速只有极低成本的语音/唤醒场景会放一个很小的NPU应用处理器SoCRK3588、Jetson Orin系列跑Linux/Android做多媒体、网络、人机交互集成NPU/GPU作为算力模块是整个系统的计算主力专用AI加速器芯片各类云端推理卡、数据中心训练卡大规模矩阵计算、大模型训练/推理纯粹为AI计算服务以板和模组形态出现这里需要特别注意真正的产品系统很少只用一颗AI芯片。边缘设备里常见组合是一颗MCU管理电源时序和外围传感器一颗SoC跑系统业务再挂一颗AI加速芯片或SoC内置NPU做模型推理。上电启动时MCU先起来再给SoC供电、释放复位、引导启动整个链路涉及到的地址映射、中断线、启动模式选择都在硬件设计阶段就要确定好。以RK3588这类SoC为例它内部其实包含多类计算单元CPU负责控制和通用逻辑、GPU负责图形渲染、NPU负责AI推理、还有专门的图像信号处理器ISP处理摄像头数据。软件侧要把每个单元的“角色”安排明白在异构系统里合理调度任务才能把硬件潜力榨出来。如果只盯着NPU参数忽视CPU和DMA的配合很容易出现整个系统都在等数据搬运的尴尬。2.2 NPU计算引擎拆解标量单元、向量单元、矩阵单元理解了SoC层级之后我们把镜头拉近到NPU内部。现代NPU的组成万变不离其宗核心是三类运算单元标量单元、向量单元、矩阵单元。矩阵单元负责最重的活——卷积和全连接这些操作本质上是矩阵乘法。为了让矩阵单元保持高利用率硬件设计上常用脉动阵列结构权重从一侧流入阵列激活数据从另一侧流入部分和沿着阵列方向累积数据在阵列内部反复使用避免每次计算都从存储搬运。脉动阵列对数据流的规整性要求极高这也是为什么编译器必须做精细的数据排布。向量单元处理那些矩阵单元干不了的事比如激活函数、归一化、池化、逐元素操作。这是很多新手忽视的地方模型里大量存在这类非矩阵运算如果一个NPU只有矩阵单元没有灵活的向量单元遇到Softmax或LayerNorm就只能回调CPU来回搬运几次延迟立刻上去。我评估NPU时会特别看它的向量单元能力——很多标称很高的TOPS一旦模型里激活函数和Normalization占比高实际性能垮得厉害。数据流路径同样关键。标准流程是主控单元从DRAM发起DMA搬运把输入特征图和权重搬入片上SRAM计算完成后结果再搬回DRAM。片上存储越大数据复用越充分对DRAM带宽压力就越小。软硬件协同设计的一个重要任务就是根据模型计算图安排数据在片上驻留的时机让数据搬运和计算尽量重叠。2.3 芯片设计与后端的现实从RTL到量产测试硬件部分还要交代清楚一颗AI芯片是怎么从设计落到物理存在的。芯片设计流程大概分这样几段算法建模用C/C或Python验证架构方案、架构设计确定单元组成和数据通路、RTL编码硬件描述语言实现电路、验证仿真和FPGA原型验证、逻辑综合再往后就是物理设计——后端。后端主要做布局布线、时钟树综合、电源网格设计还要处理信号完整性和可制造性问题。这些听上去离软件很远但直接影响芯片能跑到多高的频率、功耗拐点在哪、量产良率如何。流片回来后还有芯片测试。芯片测试不是只测功能对错而是要覆盖制造缺陷。设计阶段就要留出DFT可测性设计逻辑比如扫描链、BIST内建自测试让测试机能在有限引脚数下观察到芯片内部状态。ATE测试机上跑完pattern才知道这颗芯片能不能算“良品”。对于软件工程师这段流程的现实意义是芯片刚回来时几乎不可能立刻跑完整系统都得靠最基本的启动代码先点亮时钟和总线再逐个单元bring-up。我在工作中经常提醒团队不要在新型号芯片上直接跑完整推理程序先确保串口能打印、DMA能搬数、内存能读写否则出错时根本分不清是硬件bug还是软件bug。2.4 别忽视外围芯片电源、时钟与看门狗也在设计清单里完整的AI芯片系统从来不是单颗芯片包打天下。你在开发板上看到的是一整套“芯片军团”电源管理芯片PMIC负责给内核和IO供电并控制上电时序晶振和时钟缓冲器保证各路时钟对齐看门狗芯片负责程序跑飞后的复位兜底电平转换芯片协调不同IO电压域。这些外围设计在AI芯片项目的初期就要规划好因为它们的引脚分配直接影响PCB布局和系统启动可靠性。举个例子一颗NPU核心电压通常需要在特定时间窗口内稳定建立如果PMIC配置的软启动斜率不对轻则系统偶尔复位重则芯片烧毁。嵌入式工程师拿到新NPU开发板第一件事永远是读原理图和参考设计而不是装SDK。我见过不少搞软件的人拿到板子只看主芯片型号结果遇到“系统偶尔重启”查了半个月最后发现是看门狗芯片喂狗周期配置错误——这其实不是AI芯片本身的问题但发生频率极高。行业里顺手提到的LED驱动芯片、音频芯片、E-Marker芯片等都在提醒我们芯片设计的系统性视野是从一颗主芯片扩展到整块板卡电源树和控制链路的。AI芯片设计必须连同这些“配角芯片”一起纳入考量。3. 软件侧的主干算子库、编译器与运行时3.1 从PyTorch到芯片指令的五层翻译链硬件搭好之后真正决定用户体验的是软件栈。一个PyTorch训练出来的模型到最终在NPU上跑起来大致经过五层翻译框架层接收到模型计算图图优化层做算子融合、常量折叠、死分支删除算子映射层把标准算子分解成目标硬件支持的底层算子序列资源调度层负责内存分配、多核任务划分和流水编排最后是指令生成层把调度结果翻译成芯片指令。每一层都会带来性能损失也可能带来性能增益。图优化层如果足够聪明能把几个算子融合成一个直接减少一到两次完整的数据搬运资源调度层如果做得粗放就会让矩阵单元频繁空等。软硬件协同设计很大程度就是围绕这五层反复规划接口和契约。我常跟同事说理解这五层翻译链是软件工程师和硬件工程师对话的公共语言。硬件工程师提“我这有个双缓冲区可以流水”软件工程师要能立刻意识到这是给资源调度层用的—把下一块数据搬运和当前计算重叠起来。软件栈不是“把模型跑起来就行”而是每一层都要回答“性能消耗在哪里”的问题。3.2 算子库的覆盖率决定“能用率”算子库是硬件为用户提供的“预制件集合”通常以API形式暴露卷积、矩阵乘、激活、池化等常用操作。不同芯片厂商算子库的覆盖范围差距极大有的厂商针对常用视觉模型覆盖得很好一跑Transformer就露出马脚特别是一些动态shape、Reshape、Transpose要么效率极低要么干脆不支持。我评估AI芯片时有个固定动作拿真实业务模型去编译看算子覆盖率和支持度。如果初始覆盖率达到95%以上剩下的5%可以用CPU回退跑这个芯片还有救如果覆盖率只有70%那即使TOPS再高也意味着30%的计算流量要落到慢速CPU上所谓AI加速在真实场景里成了拖后腿。算子库设计本质上是在做软硬件接口定义哪些操作在硬件上做哪些交给软件模拟。定得太宽硬件成本膨胀定得太窄软件栈就极其痛苦。这也是为什么AI芯片的软硬件设计不是流水线式先后完成而必须从一开始就一起定接口。3.3 张量编译器与算子融合算力之外的第二战场如果说算子库是预制件张量编译器就是高级定制。以TVM、MLIR为代表的开源生态和各家闭源编译器都在解决同一个问题如何把计算图映射到硬件上并做到极致优化。最典型的优化是算子融合。以卷积批归一化ReLU为例不融合的话卷积结果要写到DRAM批归一化再从DRAM读回来计算完写回去ReLU再读一次三次完整访存融合之后这三个操作在片上一次性完成只搬一次数据和写一次结果。访存量直接降到原来的三分之一整个模型延迟也能缩一半以上。这就是为什么有时候硬件算力没变仅仅升级一版编译器模型速度就大幅提升—优化编译器往往是AI芯片性能释放最划算的投资。编译器还有一个关键任务是自动调优。芯片的访存带宽、片上存储大小、脉动阵列尺寸都是确定的约束编译器要在这套约束下搜索最优的tiling和调度方案。很多厂家的工具链用cost model加机器学习调优本质上就是把这个搜索过程自动化。3.4 芯片启动与固件一切软件的冷启动前提讨论AI软件栈很容易忽略一个“冷启动”问题芯片本身怎么跑起来如果一颗芯片连启动都不顺畅后面的NPU、编译器再强也动不了。这里就要说到SoC芯片启动流程芯片上电后BootROM先执行固化程序它会根据启动引脚的电平状态决定从QSPI Flash、SD卡、USB或网口加载下一级bootloaderbootloader再初始化DDR、加载内核或RTOS操作系统起来后再挂载NPU驱动固件才算完整。很多人遇到“更换QSPI芯片后板子起不来”的问题根源就在BootROM只认特定启动介质和特定固件头格式换了Flash芯片后虽然没有改软件但启动脚位配置或固件烧写位置变了。这类问题在AI板上尤其常见因为AI板通常要外挂或更换大容量存储。所以我的建议是拿到新芯片先把启动流程摸清楚——启动介质有哪些、BootROM到U-Boot再到内核的链路怎么走、固件怎么烧写和加签。这块扎实了后面做NPU和算子调试才有稳定的地基。3.5 调试与Profile第一天就要搭的环境软件栈里最容易被新人低估的是调试与性能分析工具。芯片刚上电时串口打印是最可靠的观察窗口JTAG/SWD可用于在线断点调试RTL和驱动到了算子层面就需要硬件性能计数器比如矩阵单元利用率、DMA搬用带宽占用率、流水线停顿周期数。这些指标往往能直接告诉你问题在哪。我在定位NPU性能瓶颈时习惯的顺序是先看数据搬运是否和计算重叠。如果DMA和计算是串行的利用率再高也没用再看矩阵单元利用率如果低于50%多半是tiling或数据排布问题最后核对模型图看是否有不必要的算子被切分到了CPU上。开发环境里profiling工具比调试器更重要。好的profile报告就是一种“软硬件契约”的可视化模型每一层的计算时间、访存时间、调度时间清清楚楚。软硬件协同设计做得好的团队profile工具一定是最早完成、质量最高的模块之一。4. 一个典型AI场景的软硬件协同设计过程4.1 场景拆解训练、推理、云侧还是端侧你说要设计一颗AI芯片第一件事不是选架构而是明确场景。训练芯片和推理芯片的诉求差别极大训练卡要支撑反向传播内存带宽和互联带宽被推到极致集群通信能力是核心推理芯片则更灵活既可以做成云端高吞吐卡也可以做成边缘低功耗盒子。光凭“AI芯片”四个字根本没法谈设计。以边缘视觉检测盒子为例。场景要求是实时跑目标检测模型、功耗不超过7W、价格不能太高、支持INT8量化、要能在宽温环境下稳定运行。这些约束直接推导硬件规格矩阵单元规模大概多大才够跑目标检测系列模型片上存储做多大能塞下常见模型内存只用LPDDR4X还是需要更大带宽。场景拆解过程中还要考虑模型侧。算法团队用的模型版本、是否做了剪枝量化、输入分辨率大小每一个细节都会影响硬件设计。我见过最典型的反例是芯片设计时只考虑了YOLO系列卷积密集型模型结果产品落地时算法切成了Transformer检测头动态shape和注意力矩阵把片上存储打得措手不及性能直接腰斩。4.2 大模型时代的新变量AI Agent与多AI协作大模型兴起之后AI芯片的软硬件设计又多了一批新约束。大模型推理不再是一颗芯片单打独斗一是KV Cache带来的高内存占用长对话场景下缓存大小可能超过模型权重本身芯片不仅要算得快还要有足够的内存容量二是注意力机制对内存访问模式极不友好随机访存加重访存量让很多原本为卷积设计的NPU难以发挥三是量化范围从INT8扩展到INT4甚至更低指令集和数据类型都得跟着改。同时AI Agent和多AI协作成为新的趋势。一个Agent应用里往往同时常驻多个模型一个语音识别模型、一个意图理解模型、一个文本生成模型它们在芯片上可能是交替执行或并行执行。这对芯片意味着多任务调度能力、更大的内存容量以及更灵活的功耗管理。软件侧不再是“单个模型编译优化”而是“多模型资源调度编排”。这轮变化给了新进入者机会。老牌架构针对旧模型结构优化得再狠面对新的模型形态也得大改。软硬件协同设计的价值恰恰体现在这里谁能在模型变化的第一时间调整硬件和编译器谁就能占据主动。4.3 架构选型与算力评估别被峰值TOPS骗了回到选型和评估。峰值TOPS只是硬件理论极限真实场景里的有效算力可以用一个很粗的公式来估算有效算力峰值TOPS×算子可映射率×实际使用率×访存匹配系数。其中每一项都可能不足百分之五六十乘起来往往惨不忍睹。我之前测过一块宣传20 TOPS的板子跑一个实时语义分割模型实测等效算力只有7 TOPS左右。原因有三块模型里有一部分算子没有高效核回退到了CPU单batch输入时矩阵单元利用率上不去DRAM带宽不够数据搬运卡住了计算。峰值TOPS高的芯片实际性能不一定强关键在于软硬件系统能不能把这些算力“喂”到计算单元里。正确的评估方法不是看参数表而是拿自己的真实业务模型用厂商工具链实际编译、运行、测量。至少要测三个指标编译是否通过、模型延迟是多少、功耗是多少。如果厂商工具链在评估阶段就让你觉得难用那产品阶段只会更差。4.4 软硬件接口设计指令集、内存系统与数据格式架构选型之后软硬件协同设计的核心工作就是定义接口“契约”我归结为三个层次。第一层是指令集。NPU指令要覆盖矩阵运算、向量运算、数据搬运、同步控制等基本操作粒度太粗会让编译器难以表达模型结构粒度太细则指令数爆炸。设计时要做平衡。第二层是内存系统。芯片要定义DMA描述符格式、地址映射方式、片上存储的访问带宽和同步机制。编译器必须知道数据放在哪个bank、怎么对齐、什么时候发同步信号这些都要在硬件设计文档中写清楚。常见问题是对齐要求不一致软件按32字节对齐搬运硬件DMA却只能按64字节对齐触发一次模型推理就多了无数次无效搬运。第三层是数据格式和精度。NCHW布局和NHWC布局对访存效率影响极大INT8量化时是per-tensor还是per-channel都直接决定算子能否高效执行。这些看似是软件问题其实必须在芯片设计阶段就把硬件的偏好固化下来否则后面软件再怎么优化也改变不了硬件对某种布局的天然不友好。软硬件接口文档才是AI芯片项目里真正值钱的技术交付物。5. 新手入行我建议先抓住这几件事5.1 读规格书、看引脚定义别只跑Demo如果你刚进入AI芯片行业第一个建议听起来有点土从读懂规格书和原理图开始。很多人拿到RK3588或STM32开发板习惯是立刻跑官方Demo跑通了就以为懂了。但实际上你连芯片从哪只引脚启动、哪个电源域给NPU供电、复位信号的时序要求是什么都不知道。我招人时喜欢问一个看似简单的问题芯片有多个电源域软件上电初始化顺序应该怎么样能答上来的说明他是真去看过硬件手册的人。看规格书不是背参数而是理解硬件设计者的意图。AI芯片的软硬件协同设计恰恰就是从这些引脚和电源定义的耦合开始的。看懂了引脚定义你就知道为什么驱动初始化的顺序必须是“先时钟后复位再DMA”——每一行代码背后都有电路逻辑在约束。5.2 建立从底层寄存器到顶层应用的全链路调试意识第二个建议是刻意训练自己全链路调试的能力。AI模型推理出错误结果时可能的原因从最底层到最高层排开寄存器配置错误、DMA搬运地址错、权重量化精度问题、算子库实现有bug、模型转换过程图被改坏。新手常常一上来就猜“模型问题”或“芯片问题”然后瞎试。更高效的做法是逐层收敛。我调试NPU算子错值问题时会先跑一个最简单的测试把某个权重全部置1输入构造为单位矩阵看输出是否符合预期。这个小测试通过基本排除硬件和DMA问题然后再回到真实模型里逐层定位。这种从“最小可复现”到“逐层加码”的思路在AI芯片这种复杂系统里几乎是唯一靠谱的调试方法。5.3 仿真表现与真实板卡的落差处理最后一个建议关于心态和预期。芯片仿真通常过于乐观因为功能仿真往往忽略访存延迟、电源噪声和信号完整性FPGA原型验证频率低、内存带宽不同性能数据也不能当真实参考等真正流片回来板卡上还会遇到发热降频、NPU与CPU争抢内存带宽、DDR初始化不稳定等一系列仿真里根本没出现过的问题。所以我建议团队在流程上提前做一件事建立一套回归基准。至少包含三五个覆盖主要业务场景的模型每次工具链或驱动更新后都跑一遍把延迟、功耗、精度变化记录下来。性能回归的坑往往不是大版本升级引起的而是某次小优化在某个模型上引入了高额访存开销。有了基准才能快速定位“哪次改动让芯片变慢了”。进入AI芯片这个领域最大的门槛不在某一门单点技术上而在你能不能同时理解硬件电路那边在想什么以及编译器和运行时这边该如何配合。这篇系列第一篇先把全局框架和基本术语梳理清楚后面我会继续拆解NPU指令集的细节设计、张量编译器的优化pass实现以及具体算子如何在一颗NPU上落地调优。如果你正处在从软件视角向软硬件协同视角切换的阶段希望这篇地图能帮你把方向感建立起来。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑