
这两年我至少被问过几十次同一个问题RISC-V到底能不能做AI芯片每次看到有人在群里贴某家RISC-V AI芯片的新闻稿评论区总会吵成一锅粥。一派说开源指令集终于轮到AI了另一派说Arm加NPU早就够用RISC-V只是来蹭热度的。实际上我在项目里看到的图景完全不是非黑即白——RISC-V不仅已经切进AI芯片而且切进来的路径不止一条目前主流的是三条每一条都对应完全不同的产品形态、技术栈和风险取舍。这篇文章就把这三种姿势拆开讲清楚顺便把那些最容易被PPT带偏的坑也一并说了。如果你是正在评估AI SoC方案的技术负责人、做端侧推理的嵌入式工程师或者单纯想搞明白“RISC-V到底凭啥跟AI扯上关系”的人这篇内容应该能帮你省下不少调研时间。1. AI芯片真正需要的不是一纸授权而是能改的指令集1.1 异构AI芯片的“CPU加速器”拼图先看一个基本事实现在的AI芯片无论宣传吹得多玄乎内部几乎都是同一种架构——通用CPU核加上专用加速器。CPU负责启动、调度、任务切分、跑系统、处理网络协议加速器负责把卷积、矩阵乘、注意力机制这些计算密集型的活干完。这个搭配不是某家公司拍脑袋定的而是过去十几年GPU、NPU产品反复验证过的成熟范式。为什么不能只用加速器因为加速器再强也需要有人告诉它“该算什么、数据在哪、算完怎么搬”。为什么不能只用通用CPU因为通用CPU跑矩阵乘的能效比太难看同样的功耗预算NPU能顶十倍甚至几十倍算力。所以AI芯片的底层逻辑永远是“会算的”和“会指挥的”配合缺一不可。在这个拼图里“会指挥的”那个人过去通常是Arm核或者自研CPU核。现在越来越多团队开始把它换成RISC-V核原因不是RISC-V算力更强而是RISC-V在“当指挥”这件事上有天然优势——指令集精简、面积小、授权灵活、可裁剪程度高放一个进去不心疼而且不需要为了一个小控制核去跟商业IP厂商谈一整个框架的授权费。1.2 RISC-V凭什么当那块拼图很多人一说RISC-V就会想到“开源”“免费”觉得这是它最核心的竞争力。做AI芯片选型之后我才发现免费只是最表面的那层。RISC-V真正值钱的地方是指令集本身允许你改。而且不只是改一条两条指令是给你留了完整的自定义扩展空间。这句话的重要性放在AI芯片场景里会被放大好几倍。Arm的指令集是锁死的你想加一条“把8x8矩阵乘塞进寄存器直接算”的指令基本不可能除非走Arm的定制计划而那个门槛和成本都不是初创团队愿意碰的。x86就更不用说了连底层的微码修改都要层层审批。但RISC-V天生就允许厂商在标准指令集之上定义自己的东西。这对AI芯片来说太关键了——因为AI算法里最核心的运算其实就是那么几个固定模式矩阵乘、卷积、向量激活函数、量化变换。把这些模式做成专用指令或者挂一个专用协处理器芯片能效会有数量级提升。1.3 三种姿势的定位差异RISC-V切入AI芯片的三种姿势并不是“三个版本”的关系而是“三个层级”的关系。第一种是把RISC-V当主控AI加速器挂在总线上两者通过驱动和运行时配合。这时RISC-V只做指挥不碰重计算。第二种是彻底放弃外部加速器直接用RISC-V的RVV向量扩展指令去跑并行计算让CPU自己把AI算子扛起来。第三种最狠在RISC-V的指令集编码空间里自定义AI专用指令把矩阵运算、脉动阵列这些硬件逻辑直接耦合进指令流水线做成一套领域专用架构。这三种姿势没有绝对优劣只有合不合适。下面逐个展开。2. 姿势一RISC-V当“总指挥”调度AI加速器干活2.1 主控核要解决什么问题AI芯片里的主控核听起来好像是个配角实际上它承载的工作量和复杂度一点也不低。芯片上电之后主控要完成BootROM启动、DDR初始化、把模型权重从Flash或者PCIe搬运到内存、解析推理任务、给NPU下发命令、处理中断、回收结果同时还要跑Linux内核、设备驱动、协议栈。一旦任务队列调度不当NPU再快也是白等。用RISC-V做主控最关键的是实时性和确定性。AI推理任务对延迟很敏感比如自动驾驶里的障碍物检测一帧数据的处理晚了几毫秒可能就会出问题。RISC-V里的M模式可以跑裸机实时任务S模式跑LinuxU模式跑应用模式切换干净利落配合PLIC中断控制器响应延迟是可以预期的比某些商业核在复杂中断嵌套里的表现更让人放心。再有一点主控核不需要多高的绝对性能但需要极低的面积和功耗。一个AI加速卡上塞几十瓦都是常事主控核只占几瓦甚至不到一瓦才算正常。RISC-V核不追求超标量乱序执行用简单的顺序双发射加足够深的Cache就能把NPU调度得井井有条。选RISC-V当主控的人看中的是它的可控性和成本不是跑分。2.2 几个公认的主控型案例这条路走得最早也最稳的是Esperanto公司的ET-SoC-1。它非常典型几十个RISC-V通用核负责任务调度和并行控制同时集成了上千个定制AI核心专门跑矩阵运算。虽然这个项目最后因为商业原因没能继续推进但它的架构验证了一个核心结论——RISC-V完全可以撑起一个大规模AI加速芯片的主控平面。Tenstorrent的打法也值得一提。他们做AI处理器的时候把RISC-V核直接当管理核心用负责PCIe枚举、网络配置、任务派遣这些脏活累活而AI计算部分由自己的Tensix核阵列完成。后来他们做高性能RISC-V CPU的时候很多思路也是从这套AI芯片的管理经验里长出来的。国内团队就更常见了。大量端侧AI SoC选择把玄铁E902、C906这类RISC-V核放在芯片里当主控旁边挂一个自研或者外购的NPU。这种方案在实际产品里已经非常成熟芯片厂商和方案商都跑通了软件栈也沉淀了很多年。2.3 这套架构的经验门槛主控型架构通常是很多团队第一次接触RISC-V AI芯片时的首选但我建议重视两个容易被低估的问题。第一个是中断与通信开销。别觉得NPU一次推理几分钟主控可以慢慢等——实际场景里任务很多NPU的完成中断频率可能高达每秒几千次甚至上万次。每次中断都要触发Linux内核调度、驱动回调、内存屏障如果RISC-V核的中断控制器和驱动写得不够优化主控会变成瓶颈。第二个是多核一致性。AI加速器要跟RISC-V共享内存就需要IO Coherence协议。用一个带SMMU或者ACE接口的RISC-V核比用裸核再做一套自研一致性模块要省事得多。很多团队选主控核的时候只看DMIPS和面积结果集成阶段发现缓存一致性问题绕不过去只能回头改方案。3. 姿势二用RVV向量扩展直接扛并行计算3.1 RVV到底给了开发者什么RVV是RISC-V的向量扩展指令集经过多年争论之后1.0版本终于在2021年定稿冻结。它的核心思想是“可移植的并行”——开发者写一份向量代码不管CPU的向量寄存器是128位还是512位代码都不用改硬件会自动适配当前可以并行处理的元素个数。这一点跟Arm NEON的设计思路完全是两回事。NEON的向量宽度固定是128位你写代码的时候就知道一次能处理4个float或者16个int8。RVV引入了VLEN、VL、LMUL、SEW这些概念其中VL表示“当前这个循环硬件实际允许你处理多少个元素”由vsetvli这条指令在运行时算出来。打个比方NEON像一辆固定16座的面包车你永远要按16座做行程计划RVV像一辆容量自动感的公交司机看一眼车厢就能告诉你“这趟还能上多少个人”乘客不用操心座位数。这套设计给AI推理带来的好处非常直接同一个神经网络算子库不用为下一代更宽向量长度重新写汇编硬件升级之后原有代码自动多吃数据这在端侧芯片迭代里是巨大优势。3.2 一段看得懂的RVV代码很多人觉得RVV编程很难其实核心就几个API。我放一段最典型的向量加法你看完就明白它跟普通C循环的区别。#include riscv_vector.h void vec_add(const float *a, const float *b, float *c, size_t n) { size_t vl; for (size_t i 0; i n; i vl) { vl vsetvl_e32m4(n - i); vfloat32m4_t va vle32_v_f32m4(a i, vl); vfloat32m4_t vb vle32_v_f32m4(b i, vl); vfloat32m4_t vc vfadd_vv_f32m4(va, vb, vl); vse32_v_f32m4(c i, vc, vl); } }vsetvl_e32m4做了两件事请求把元素位宽设为32位寄存器分组设为m4同时传入剩余元素个数硬件返回当前循环能处理的实际元素数。之后vle32_v_f32m4做向量loadvfadd_vv_f32m4做向量浮点加法vse32_v_f32m4做向量store。整个过程不需要开发者关心这颗芯片的VLEN到底是128还是512。这段代码看着简单但它之后可以扩展成卷积计算的核心循环、量化transformer里的GELU近似计算、Softmax的向量版本。我在实际项目中见过只用RVV把NPU以外的预处理算子重写了一遍端到端延迟降了30%以上代码量还不到原先C语言版本的一半。3.3 RVV适合算哪些AI算子RVV适合的AI算子特点是“数据规则、访存连续、逻辑简单”。典型的是逐元素运算比如激活函数、归一化、量化反量化还有规约型运算比如Softmax里的求和与最大值、LayerNorm里的均值方差以及矩阵乘和卷积的内层循环只要数据已经重排得足够规整RVV能打得很凶。但RVV也有明显不擅长的。稀疏计算就是典型的反面教材——Transformer里的注意力矩阵很多场景是稀疏的你没法让vsetvli知道“哪些位置有数据”只能把稀疏变成稠密再算这样向量宽度的优势就被浪费了。不规则访存也一样什么Gather/Scatter操作RVV做起来既费电又费时间不如让专用硬件去处理。如果硬要给RVV在AI芯片里的定位下个结论它是“算得很快的通用计算部件”而不是“为AI定制的专武”。比标量CPU强出一个数量级但跟专用NPU比算力上限还是差着量级。3.4 市面上“RVV往AI上靠”的落地形态现在市面上打着“RISC-V AI芯片”旗号的产品相当一部分走的是RVV路线。平头哥的玄铁C908内置RVV 1.0很多端侧音频、视觉方案都在上面跑了语音唤醒、关键词识别、轻量级图像分类。Andes的AX45V也是一样的思路用RVV向量指令去加速AI推理里的部分热算子。SiFive X280更激进一些把RVV 1.0当成标配之外还加了针对AI负载的智能扩展面向自动驾驶、机器人场景。实测下来这类芯片在几GOPS到几十GOPS量级的轻量AI推理上是够用的。你跑个YOLOv5n、MobileNetV3、十几个算子组成的语音模型RVV核能咬牙撑住。但一旦模型膨胀到几十上百TOPS才能满足帧率RVV就力不从心了这时候还得回到“主控加NPU”的组合。4. 姿势三把矩阵乘法写进指令集做成定制DSA4.1 为什么通用SIMD解决不了全部问题RVV再好本质还是通用SIMD。通用意味着什么意味着指令集要覆盖大量场景意味着向量寄存器的读取端口、执行部件的数据位宽、访存部件的吞吐都要做成“够用就行”。而AI计算最核心的矩阵乘讲究的是数据复用率——同一个矩阵元素要被反复读取很多次如果每一次读取都要走一遍通用Load指令那负载就太大了。脉动阵列就是为这个问题设计的数据从左边和上边流进每个处理单元做一次乘累加就往右边和下边传数据复用率极高功耗效率因此非常好。Google TPU、各家NPU基本都用了类似结构。关键在于这种脉动阵列要高效工作最好是让软件一条指令就触发“一大块计算”而不是让CPU一条条向量指令去喂数据。RVV解决不了“一条指令触发一次大矩阵计算”的需求。这就逼着厂商在指令集上动手脚。4.2 RISC-V给自定义指令留了哪些“空地”RISC-V从一开始设计就预留了自定义指令空间。在标准编码里有多个custom opcode段是公开允许厂商自行定义的。你可以在这些编码空间里定义自己的AI专用指令比如一条GEMM指令操作码后面直接带上数据地址、矩阵维度、累加标志执行单元接到这条指令后会走专门的微码控制路径把数据导入脉动阵列完成整个矩阵乘最后把结果写回寄存器堆或者专用SRAM。这种设计把RISC-V从“ISA供应商”变成了“可编程骨架”。主核仍然用标准RISC-V指令跑控制流遇到AI计算就直接发一条自定义指令给专用执行引擎。编译器、汇编器层面需要自行扩展binutils和LLVM但指令本身一旦定义清楚软硬件就都有了明确的契约。实际项目里有的团队选择在RVCore上挂一个协处理器接口用RISC-V指令里的空闲段触发协处理操作。有的团队更激进直接把RVV的向量寄存器堆和自研矩阵单元耦合起来向量load负责从内存把矩阵块搬进SRAM然后自定义指令负责让矩阵单元开跑。这两种我都见过落地效果都比“RVV硬扛矩阵乘”高出一截。4.3 定制AI指令的实际成本和回报定制AI指令的回报很性感但成本绝不能被低估。先说回报。嘉楠K230就是一个典型内部既然有C908核和KPU专用计算单元对外就敢标称几个TOPS的INT8算力跑视觉模型的时候比同级别纯RVV方案快很多。很多团队做AIoT芯片最终形态都是“RISC-V主控核加自研AI指令扩展”这部分投入回报率很高。再说成本。自定义AI指令意味着你要同时改编译器、汇编器、调试器、反汇编器还要维护一套独特的算子库和运行时。如果团队里有系统软件背景的人这事能推进下去如果全是硬件工程师指令定义得再漂亮也落不了地因为客户拿不到一个好用的编译工具链你的芯片就只能是纸面上的性能怪兽。我见过一个项目硬件把AI指令设计得很完善流水线深度规划得漂漂亮亮但软件团队花了九个月才把基本算子库在LLVM上跑通。这中间的痛苦很难用语言描述而且只要RISC-V上游LLVM版本一更新你就要面临漫长的rebase工作。5. 三种姿势怎么选先听客户算力预期再看团队软件底子5.1 三种姿势的横向对比搞明白各条路线的成本和收益之后最实际的问题就是我的项目到底选哪条我整理了一个表格直接把三种姿势放在一起比维度选了产品定位、算力区间、软件栈成熟度和典型成本。对比维度主控型RISC-V NPU向量型RVV扛计算定制扩展型自定义AI指令/DSA产品形态云端加速卡、自动驾驶SoC、边缘盒子语音唤醒、传感器融合、轻量视觉垂直场景AIoT、固定算法设备典型算力区间几十TOPS以上几GOPS到几十GOPS几TOPS到几百TOPS硬件复杂度中高NPU是瓶颈低主要是访存带宽高流水线、一致性、微码全要管软件栈成熟度高SDK围绕Linux/driver较高LLVM/GCC原生支持低编译器、算子库都要自己投入代表产品Tenstorrent、早期Esperanto、大量SoC玄铁C908、Andes AX45V、SiFive X280嘉楠K230、自研AI协处理器方案的各类芯片这个表格可能跟你预想的不一样。很多团队以为“RISC-V切入AI芯片”就非得做第三种其实第一种最常见第二种最容易起步第三种天花板最高但代价最大。5.2 选型自查清单我自己的经验做选型时不要先想“RISC-V怎么样”更不要先想“哪种姿势更高级”而是先回答下面四个问题客户要跑的模型复杂度是多少是个位数的TOPS还是接近百TOPS这直接决定你要不要带专用NPU。团队里有没有能改编译器、维护算子的软件工程师没有的话直接放弃第三种姿势否则项目大概率卡在软件集成上。产品形态是固定功能还是通用计算固定功能设备适合定制指令比如一直跑同一种目标检测算法通用计算设备选主控加NPU灵活性和生态抗风险能力更强。对实时性和功耗的要求有多硬有些车规场景对中断响应的确定性要求极其变态这时候RISC-V主控加可预测的硬件调度器比一堆高主频乱序核更稳。5.3 真实产品往往三合一实际产品里这三种姿势不总是互斥的。越来越多的AI芯片是“我全都要”的形态RISC-V主控核负责调度RVV向量单元跑预处理和后处理自定义AI单元或者NPU专门跑网络主体。这种组合拳的好处是不管客户的模型有多偏门总有一块计算资源能接住不至于让某个单元闲着。嘉楠K230就是个极好的案例。它同时拥有RISC-V核的通用控制能力、RVV的向量计算能力、以及自研KPU的神经网络加速能力。开发者拿到芯片后可以先跑官方SDK把模型一股脑丢给KPU遇到KPU不支持的算子再掉到RVV上去执行。这种“三合一”方案实际上就是目前RISC-V AI芯片的主流终极形态。6. 纸上数据很好看落地之后这些坑一个也绕不开6.1 理论峰值和实测性能不是一回事做AI芯片的最怕的就是拿了厂商的datasheet算峰值。RVV那条线我经常看到有人拿“128位向量、1GHz、int8”算出来峰值有几十GOPS实际跑起来却只有标称的四五成甚至更低。原因很简单RVV是load-compute-store模型算得再快数据送不进来也白搭。128位向量寄存器在1GHz下理论上每个周期能做16个int8乘累加也就是每周期32次操作1GHz就是32 GOPS。但要拿到这个数处理器每个周期都得从缓存里喂进16个新的int8数据LSU访存部件吞吐稍微低一点或者缓存带宽不够性能立刻掉到20 GOPS以下。所以评估RVV方案一定要跑实际模型的算子尤其是看访存密集型算子如逐元素激活函数千万别信PPT里的理论峰值。这也是我建议团队直接拿RVV板子跑一段Softmax或者量化卷积的原因跑一次心里就有底了。6.2 版本分裂与工具链裂缝RISC-V AI开发里有一个比性能更难受的坑同一套RVV代码在不同核心上可能完全不兼容。玄铁C906用的是RVV 0.7.1版本C908用的是RVV 1.0版本两者指令编码和intrinsic API都有差异C906上编出来的算子库放到C908上没法直接用反过来也不行。这种版本分裂是RISC-V早期生态未被“标准化”导致的历史遗留问题。更麻烦的是工具链配置。LLVM、GCC对RVV 1.0的支持已经有几年了但很多SoC厂商的官方SDK仍然各自带了一套自己编译的工具链版本五花八门。你拿到一块开发板第一件事往往是重新编译一遍工具链然后发现官方算子库用的intrinsic方法和你的LLVM版本对不上。我的经验是项目一开始就锁定工具链版本并且把自研算子库的编译环境做成Docker镜像跟工程一起提交。否则半年后新同事拉代码光编译环境就能耗掉一整天。6.3 AI芯片的成败在SDK不在指令集很多RISC-V AI芯片项目第一版硬件做出来之后开发团队会兴奋地发现裸机上跑一个向量加法demo性能表现完美。但接下来客户问的问题永远是“你们的SDK能不能一键转换我的PyTorch模型”到这一步大量团队就卡住了。因为AI芯片的竞争力本质上是“训练好的模型能不能高效地跑到你的芯片上”的竞争力。你需要把PyTorch/ONNX模型解析、图优化、算子映射、量化、代码生成、运行时推理全链路打通。RISC-V指令集本身完全不能帮你解决这些问题。很多买IP回来集成的小公司芯片流片前根本没考虑过算子库的完整度结果流片回来一看官方SDK只支持十几个常见算子客户模型一跑就崩。如果你负责选方案一定记得在立项时把“一个常见YOLO模型能在芯片上跑通的CPU时间”当成第一验收指标而不是只看指令集多漂亮。6.4 同为RVV 1.0微架构差异能差出一倍同样是RVV 1.0的芯片性能差距可以很夸张。有的核心设计了完善的向量访存流水线一个周期能同时处理多笔向量load有的核心为了省面积向量数据要跟标量数据抢访存带宽跑起来吞吐直接砍半。微架构的差异还表现在寄存器分组策略和流水线互锁上。LMUL设置成m4的时候指令要占用4个物理向量寄存器如果寄存器堆的写端口不够两条相邻指令之间就得多等周期。编译器调度得好不好、CPU微架构能不能支持背靠背发射直接决定算子性能。所以别一听“支持RVV 1.0”就觉得算法代码随便迁移跑同样的代码实测能差出一倍甚至更多。选型时最好问清楚对方芯片向量执行单元到底有几个、LSU宽度是64位还是128位、有没有独立的向量缓存。问到细节才能避开“纸面支持”的坑。6.5 调试和验证比想象中更费时间最后一项是很少人提前意识到的RISC-V AI芯片的调试难度比传统MCU和Arm SoC都要高。普通RISC-V核调试还算成熟OpenOCD、GDB都能用但一旦涉及向量寄存器、自定义AI指令、协处理器状态调试工具的支持就非常不统一。GDB里查看向量寄存器的功能在有些工具链里等于没有你只能靠打印内存来间接确认计算结果效率低到让人崩溃。遇到自定义AI指令问题更明显。QEMU模拟器通常只模拟标准RISC-V指令集你的自定义指令不可能被模拟所以想在PC上快速调算子逻辑根本不可行只能回到芯片或者FPGA原型上跑迭代一次的时间成本变得很高。我建议项目早期就把性能模型和硬件探针机制做起来。至少留一个能输出自定义单元内部状态的调试端口再准备一套基于随机指令流的硬件验证环境这样RTL侧的问题能在仿真阶段暴露而不是拖到FPGA上再去猜。6.6 一点实在建议如果你现在让我给一个正在评估RISC-V AI方案的人推荐路线我的回答是先判断有没有人长期维护软件栈。有可以考虑RVV起步逐步往自定义指令和NPU协同扩展把芯片做成“可编程AI平台”没有那就老老实实走“成熟RISC-V主控加成熟NPU IP”的路子把精力放在SDK集成和应用开发上这可能是最不容易翻车、也最快能见到产品落地的方案。