上篇文章介绍完AI SoC架构AI系统-16AI SoC推理芯片架构介绍那么这篇就开始NPU架构了更加重磅干货。之前跟随ZOMI酱《AI系统》中的内容介绍NPU的文章不少AI系统-8AI芯片介绍1AI系统-10AI芯片介绍2AI系统-11AI芯片基础NPUAI系统-12谷歌跨时代AI芯片TPUAI系统-13特斯拉AI芯片DOJOAI系统-14特斯拉FSD芯片AI系统-15国内AI芯片介绍但是总感觉不够深入网上介绍NPU内部结构架构的文章也不多可能是比较保密。ZOMI酱介绍华为达芬奇NPU的时候架构资料还相对多一些所以就以华为NPU为例辅助之前我们介绍的几个公司的NPU技术结合AI芯片架构分析五步法加上我自己的理解和思考对NPU怎么设计进行探讨对于AI芯片的架构总结有下面5点AI芯片五步分析法簇计算部分有很多的cluster就是簇PE簇里面有几个PE处理引擎AI Core一般是4个里面有张量、标量等计算硬件算子调度NPU里面有调度器管理cluster/PE的计算通信簇之间的通信一般通过NoC总线存储SRAM一般有两级簇有一个小的SRAMNPU整体有一个大的SRAM1. NPU Cluster介绍首先为什么要有簇一个AI计算任务例如人脸识别需要大量的数据运算那么要并行处理就需要对任务进行切片并行处理那么一个子任务对应硬件的处理就是cluster可以理解为多个cluster并行工作。那就要保证cluster有足够的资源可以应对子任务NPU的Core就是PE集成了计算单元但是单个PE可能应对不了一个子任务并且相关配套的SRAM和调度以及低频率的运算需要CPU的参与。这就需要cluster是一个最小的战斗单元例如行军打仗这个单元需要有做饭的有后勤有医疗各种兵种都有才可以。先举几个簇的例子1.1 壁仞科技可以看到簇之间使用NoC高速互联簇内的Core则使用低速一点的通信就可以满足这样二级的设计让组织效率更加的有效。同样cache在簇中有一级L1PE有一级L0这样两级的设计也让系统更加的有效。这就是为什么说NPU的组织更像是一个公司老板CPU发话说要干一个事情NPU部门就对任务进行分解给各个子部门簇子部门内部就去捯饬不行跟相邻子部门借资源干。而不是CPU发话干一个事没有组织的所有员工直接往上扑就造成很多的资源浪费。可以看到一个cluster里面有16个PE具体多少个由业务去决定。然后就是簇里面除了EU还有什么这个壁仞科技的只有缓存了可见其偏GPU的设计并不太纯粹的NPU。只是用GPU的思路只是把里面的AI算子部分由通用直接变成神经网络深度学习专用的算子了。1.2 寒武纪其IPU就是PE上图中是一个cluster里面有4个PE。除了4个PE又添加了MPU用于内存处理的协处理器里面有SRAM共享内存还有DMA、针对cluster基本的调度控制里面的东西还挺不少。但是感觉不够简洁和精细化估计设计时间短直接堆出来的。1.3 华为达芬奇没有用簇的概念但是其有一个任务调度器这里面感觉是隐形的把一些Core灵活的组织成了一个Cluster另外其Core里面有强大的功能更像是一个core一个cluster的感觉例如里面有协处理器、缓存等。本文后续都按华为的一个Core就是一个cluster来介绍因为其实现了cluster的功能除了PE计算单元外又集成了存储、控制等功能。如果这个架构扩展一个cluster4个PE那就把计算单元给分成4份就可以了。这里根据华为的场景子任务应该不需要那么多的Core一份就够用了这个就是一个cluster使用几个PE的权衡。通过对比可能是需要针对不同的产品或者一个架构对新产品适配的周期进行灵活的调整那些任务由那些硬件完成特别是存储、通信、调度这些其实放哪里NPU/cluster/core都可以怎么放功能分配、放多少这就是考虑是否组织成簇的意义。2. NPU整体架构设计了解完cluster这个NPU中最重要的单位我们再从NPU整体出发以AI芯片架构分析五步法进行彻底的剖析对于AI芯片的架构总结有下面5点AI芯片五步分析法簇计算部分有很多的cluster就是簇PE簇里面有几个PE处理引擎AI Core一般是4个里面有张量、标量等计算硬件算子调度NPU里面有调度器管理cluster/PE的计算通信簇之间的通信一般通过NoC总线存储SRAM一般有两级簇有一个小的SRAMNPU整体有一个大的SRAMNPU相关的可以看到调度器调度DMA和SRAM存储达芬奇core通信总线达芬奇core一个cluster内部的cluster里面有计算单元PE存储系统控制单元调度相关总线通信华为达芬奇按AI芯片架构分析五步法归纳如下簇一个达芬奇Cluster就是一个簇簇里面有PE、存储、控制、通信PE计算簇里面有1个PE里面有张量、向量、标量等计算硬件算子调度两级结构独立的任务调度器和簇里面的控制器通信两级结构簇间通信和簇内通信通信种类包括数据总线、指令总线、中断、共享内存等。存储两级结构簇有一个小的SRAMNPU整体有一个大的SRAM重要上面就是一个典型NPU框架设计特别是对比上几款NPU的框架基本也都是这么个套路这里算是对NPU架构高度概况了下至于细节的实现使用什么技术怎么搭配就比较灵活了。cluster其实是一个功能合集设计上也最灵活这里从功能角度介绍剩下的4个然后再来看cluster设计的一些要点。2.1 调度相关设计我们还是以华为达芬奇为例NPU里面的调度分为两部分任务调度器独立的核和固件以及SRAM专门用于切片后的任务调度Cluster内部的控制单元里面会有指令流水线指挥子任务的执行首先看下调度器的上游就是CPU和DDR关系如下调度器接收CPU的任务并反馈给CPU运行结果获取NPU的一些信息给CPU按照CPU的指示对NPU进行配置对DDR中的AI数据搬运到SRAM更快的进行运算这个搬运要快就需要数据总线NoC以及DMA 调度器跟CPU的通信其实属于核间通信了基本依赖Mailbox也就是中断共享内存。调度器跟下游cluster的通信就是是发射NPU指令。这一条指令就是一行代码就可以完成一次AI运算如果没有AI硬件那就需要把这个算子的算法用多行代码进行实现。如下图所示发射的是如果是存算一体数据那么就是调度器直接把NPU SRAM的存算一体数据给到Cluster的SRAM这样Cluster里面的控制单元有核一般是RISCV就开始干活了去取数据运行得到结果再给调度器。这点看华为达芬奇这个架构还没做即它是指令和数据分离的统一由调度器去先放数据然后去发指令不是一股脑的把存算打包为PE这样调度器的压力就比较大还是适合算力小的情况。但是实现存算一体还有个问题就是对编译器的挑战存算一体的数据是提前编译器搞好的里面包含了调度依赖这样减轻了调度器的压力把运行时干的活放编译干等于提前准备干活时就快这是计算机的一项重要技术存算一体对PE来说是好处很多运算时不用受调度器的指挥只管对着存算一体数据干活干完活才汇报干活过程中不受打扰。回到华为达芬奇这个调度器其是一个固件有核有RTOS按照目前流行的做法是使用RISC-VFreeRTOS实现其作用就是安排好数据和指令给到Cluster。调度的另外一部分就是Cluster内部的控制单元按ZOMI视频的说法这个标量处理单元其实是一个ARM核除了进行常规的CPU标量运算其还可以管理下面的指令队列和同步模块那就是控制啊灰色部分就是控制单元其可以成为标量核的附属因为ARM核或者RISC-V核本身就自带一些这样的功能然后再通过核上运行软件的辅助就可以实现。控制单元主要组成部分为系统控制模块、指令缓存、标量指令处理队列、指令发射模块、矩阵运算队列、向量运算队列、存储转换队列和事件同步模块。下面详细介绍下系统控制模块控制任务块AI Core最小任计算务粒度的执行进程在任务块执行完成后系统控制模块会进行中断处理和状态申报。如果执行过程出错会把执行的错误状态报告给任务调度器指令缓存在指令执行过程中可以提前预取后续指令并一次读入多条指令进入缓存提升 指令执行效率标量指令处理队列指令被解码后便会被导入标量队列中实现地址解码与 运算控制这些指令包括矩 阵计算指令、向量计算指令以及存储转换指令等指令发射模块读取标量指令队列中配置好 的指令地址和参数解码然后根据指令类型分别发送到 对应的指令执行队列中而 标量指令会驻留在标量指令 处理队列中进行后续执行指令执行队列指令执行队列由矩阵运算队 列、向量运算队列和存储转 换队列组成不同的指令进 入相应的运算队列队列中的指令按进入顺序执行事件同步模块时刻控制每条指令流水线的 执行状态并分析不同流水 线的依赖关系从而解决指令流水线之间的数据依赖和同步的问题。这个标量处理单元怎么去触发AI矩阵运算单元和向量单元等工作呢答案就是其可以定制NPU指令集ARM或者RISCV是支持的这样就可以在cluster里面做土皇帝了。自己干点标量计算的活顺带当个工头代班指挥下别人干活。调度器发射指令就需要用到指令总线所以指令总线需要把Cluster都串起来这里华为达芬奇就按1个Core就是1个Cluster来说。调度在软件层面非常的核心甚至决定AI芯片的成败也在这上面因为实现太难了这里说的很少的篇幅但是具体技术代码实现上用到的东西涉及核心的技术算法研究这个的应该都是顶尖人才了。就是AI编译器静态和调度器动态的协调配合去盘活整个NPU那么多核的资源利用率。大家都知道CPU的平均利用率基本10%这个NPU要想在做业务的时候是核心算子是满负载的状态软件的确难度很大。这还涉及到NPU中硬件算子的搭配比例不能有一些类型的算子不够而拖后腿。2.2 存储相关设计这里还是以华为达芬奇为例进行介绍上图中cluster内部存储来说主打一个近存计算速度快也就是说PE计算单元要离存储近而且这个存储必须上快速的SRAM。要处理的AI数据的根源在DDR里面那直接从DDR搬运到PE的SRAM就又慢了DDR会拖后腿那就在NPU里面放一个大的SRAM从NPU的SRAM往PE的SRAM里面拷贝就ok了另外这里的搬运需要用到DMA这样把这种搬运任务从控制系统解放出来并行操作等于加了一个人干活。所以NPU里面使用了两级SRAM进行存储。 对于cluster内部的存储有三部分组成存储控制单元通过总线接口直接访问 AI Core 外更低层级缓存也可直通DDR/HBM 访问内存。另外设置存储转换单元作为AI Core内部数据通路传输控制器负责AI Core内部数据在不同缓冲区间读写管理以及完成一系列的格式转换操作如补零Img2Col转置、解压缩等。跟BIU总线进行通信连接这样cluster外就可以通过BIU跟这个DMA进行指令通信。输入缓冲区用于暂存需频繁复用数据不需要每次都通过总线接口到 AI Core 外部读取从而减少 BUS 上数据访问频次同时降低总线数据拥堵风险实现节省功耗、提高IO、提升性能效果输出缓冲区用来存放神经网络中每层计算中间结果从而在进入下一层计算时方便获取数据。相比较 BUS 读取数据带宽低延迟大通过输出缓冲区可以极大提升计算效率2.3 通信相关1. 首先就是中断这个核间通信必备参考之前文章SoC软件技术–核间通信。CPU和调度器之间调度器和Cluster直接都使用中断去触发一些通信。2. 如上图数据搬运拷贝就用NoC总线配合DMA进行。NoC是Mesh总线就是擅长点对点的数据传输算mesh总线。如果需要对数据进行广播的场景在并行计算中会经常用到一个数据广播给几个PE同时接收这样这几个PE协同运算只用广播这一次数据就可以了。那么适用于广播的环形总线也需要安排上把各个Cluster给串起来。3. 其他就是调度器跟Core之间的数据总线和指令总线了。指令总线在华为达芬奇里面就是BIU数据总线没提这些硬件根据需求都可以自己设计例如NoC、APB这些CPU里面常用到的总线技术。这些都是芯片最基本的技术每个芯片里面都有这些东西这里只是把信息提炼了下入门简单介绍下。在SoC里面能触发通信的单位需要有核例如CPU、调度器、标量核。然后对于数据通信来说核都配的有DMA帮手数据介质就是DDR、NPU SRAM、Cluster SRAM什么核能访问什么复制什么数据通过什么总线都是需要设计的。权限和根据和的MPU来设置总线的类型有快有慢按需使用。NoC总线SoC内速度最高但是成本也高AXI总线高速度、高带宽支持管道化互联、读写并行、乱序传输和非对齐操作适用于高性能、高带宽的SoC系统。其多通道设计五个独立通道和复杂的仲裁机制使其能够高效处理大量数据传输但实现复杂度和硬件开销较大。APB总线低速、低功耗设计简单主要用于低带宽的外围设备如UART、I2C等。其单主设备多从设备的架构和简单的状态机设计使其易于实现但无法满足高性能需求。2.4 计算单元PEPE里面就是算子构成的算子是指令直接驱动。CLube矩阵计算深度学习算法必备的算子这类AI算子就是NPU的核心最后都是为它服务的干最重的活向量运算例如平方根、求导运算等可以完成AI中的softmax、laynorm计算标量运算普通的运算通用CPU即可以完成且负责各类型标量数据运算和程序流程控制算力最低功能上类比小核 CPU完成整个程序循环控制、分支判断、Cube/Vector 等指令地址和参数计算以及基本算术运算等。累加器把当前矩阵乘结果与上一次计算中间结果相加 可以用于完成卷积中加 bias 等操作。MTE存储转换单元例如矩阵的存储是一维的多维矩阵就需要进行转换这里也是一个算子同步模块也是标量核控制的硬件需要用指令触发2.5 Cluster相关NPU的另一种拆分从功能角度就是管理和计算。cluster专注计算稍微带点基础队列的管理调度器则主抓管理。所以cluster在管理和计算上有很大的灵活性。1. Cluster需要用多少个PE 通常就是寒武纪的4个具体根据业务如果是1个那就没有Cluster了就像华为的。2. Cluster里面除了PE还可以放什么 首先一个SRAM供PE近存使用这样算的快那配套的DMA和协处理器也需要安排上。协处理器可以用RISCV同时做一些标量运算弥补PE的缺陷这个协处理器也可以运行队列组织PE有序的运行。例如上图华为达芬奇中的。3. Cluster之间用什么连接 culster是运作子任务的单位那么子任务是由调度器去管理的调度器跟Cluster的数据通信有NoC还有需要指令总线和数据总线来实现例如寒武纪的设计。4. 属于NPU但是在Cluster之外有什么 首先就是调度器然后是NoC总线以及指令和数据总线。然后有一个NPU使用大的SRAM例如华为达芬奇里面的。这个就需要协调这些存储、通信、调度等资源的颗粒度那些放NPU里面那些放Cluster里面那些放调度器里面。后记对于NPU的设计基础框架参考华为达芬奇就基本够了还有本文的达芬奇介绍估计不先进其前身还是需要看寒武纪最新的寒武纪芯片设计应该更加先进寒武纪老板陈天石来源于中科院计算所博导所以先进的技术还是需要科研支撑的门槛高。“啥都懂一点啥都不精通干啥都能干干啥啥不是专业入门劝退堪称程序员杂家”。欢迎各位有自己公众号的留言申请转载纯干货持续更新欢迎分享给朋友、点赞、收藏、在看、划线和评论交流公众号“那路谈OS与SoC嵌入式软件”欢迎关注个人文章汇总https://thatway1989.github.io
AI系统-17NPU架构设计介绍
发布时间:2026/5/30 20:11:49
上篇文章介绍完AI SoC架构AI系统-16AI SoC推理芯片架构介绍那么这篇就开始NPU架构了更加重磅干货。之前跟随ZOMI酱《AI系统》中的内容介绍NPU的文章不少AI系统-8AI芯片介绍1AI系统-10AI芯片介绍2AI系统-11AI芯片基础NPUAI系统-12谷歌跨时代AI芯片TPUAI系统-13特斯拉AI芯片DOJOAI系统-14特斯拉FSD芯片AI系统-15国内AI芯片介绍但是总感觉不够深入网上介绍NPU内部结构架构的文章也不多可能是比较保密。ZOMI酱介绍华为达芬奇NPU的时候架构资料还相对多一些所以就以华为NPU为例辅助之前我们介绍的几个公司的NPU技术结合AI芯片架构分析五步法加上我自己的理解和思考对NPU怎么设计进行探讨对于AI芯片的架构总结有下面5点AI芯片五步分析法簇计算部分有很多的cluster就是簇PE簇里面有几个PE处理引擎AI Core一般是4个里面有张量、标量等计算硬件算子调度NPU里面有调度器管理cluster/PE的计算通信簇之间的通信一般通过NoC总线存储SRAM一般有两级簇有一个小的SRAMNPU整体有一个大的SRAM1. NPU Cluster介绍首先为什么要有簇一个AI计算任务例如人脸识别需要大量的数据运算那么要并行处理就需要对任务进行切片并行处理那么一个子任务对应硬件的处理就是cluster可以理解为多个cluster并行工作。那就要保证cluster有足够的资源可以应对子任务NPU的Core就是PE集成了计算单元但是单个PE可能应对不了一个子任务并且相关配套的SRAM和调度以及低频率的运算需要CPU的参与。这就需要cluster是一个最小的战斗单元例如行军打仗这个单元需要有做饭的有后勤有医疗各种兵种都有才可以。先举几个簇的例子1.1 壁仞科技可以看到簇之间使用NoC高速互联簇内的Core则使用低速一点的通信就可以满足这样二级的设计让组织效率更加的有效。同样cache在簇中有一级L1PE有一级L0这样两级的设计也让系统更加的有效。这就是为什么说NPU的组织更像是一个公司老板CPU发话说要干一个事情NPU部门就对任务进行分解给各个子部门簇子部门内部就去捯饬不行跟相邻子部门借资源干。而不是CPU发话干一个事没有组织的所有员工直接往上扑就造成很多的资源浪费。可以看到一个cluster里面有16个PE具体多少个由业务去决定。然后就是簇里面除了EU还有什么这个壁仞科技的只有缓存了可见其偏GPU的设计并不太纯粹的NPU。只是用GPU的思路只是把里面的AI算子部分由通用直接变成神经网络深度学习专用的算子了。1.2 寒武纪其IPU就是PE上图中是一个cluster里面有4个PE。除了4个PE又添加了MPU用于内存处理的协处理器里面有SRAM共享内存还有DMA、针对cluster基本的调度控制里面的东西还挺不少。但是感觉不够简洁和精细化估计设计时间短直接堆出来的。1.3 华为达芬奇没有用簇的概念但是其有一个任务调度器这里面感觉是隐形的把一些Core灵活的组织成了一个Cluster另外其Core里面有强大的功能更像是一个core一个cluster的感觉例如里面有协处理器、缓存等。本文后续都按华为的一个Core就是一个cluster来介绍因为其实现了cluster的功能除了PE计算单元外又集成了存储、控制等功能。如果这个架构扩展一个cluster4个PE那就把计算单元给分成4份就可以了。这里根据华为的场景子任务应该不需要那么多的Core一份就够用了这个就是一个cluster使用几个PE的权衡。通过对比可能是需要针对不同的产品或者一个架构对新产品适配的周期进行灵活的调整那些任务由那些硬件完成特别是存储、通信、调度这些其实放哪里NPU/cluster/core都可以怎么放功能分配、放多少这就是考虑是否组织成簇的意义。2. NPU整体架构设计了解完cluster这个NPU中最重要的单位我们再从NPU整体出发以AI芯片架构分析五步法进行彻底的剖析对于AI芯片的架构总结有下面5点AI芯片五步分析法簇计算部分有很多的cluster就是簇PE簇里面有几个PE处理引擎AI Core一般是4个里面有张量、标量等计算硬件算子调度NPU里面有调度器管理cluster/PE的计算通信簇之间的通信一般通过NoC总线存储SRAM一般有两级簇有一个小的SRAMNPU整体有一个大的SRAMNPU相关的可以看到调度器调度DMA和SRAM存储达芬奇core通信总线达芬奇core一个cluster内部的cluster里面有计算单元PE存储系统控制单元调度相关总线通信华为达芬奇按AI芯片架构分析五步法归纳如下簇一个达芬奇Cluster就是一个簇簇里面有PE、存储、控制、通信PE计算簇里面有1个PE里面有张量、向量、标量等计算硬件算子调度两级结构独立的任务调度器和簇里面的控制器通信两级结构簇间通信和簇内通信通信种类包括数据总线、指令总线、中断、共享内存等。存储两级结构簇有一个小的SRAMNPU整体有一个大的SRAM重要上面就是一个典型NPU框架设计特别是对比上几款NPU的框架基本也都是这么个套路这里算是对NPU架构高度概况了下至于细节的实现使用什么技术怎么搭配就比较灵活了。cluster其实是一个功能合集设计上也最灵活这里从功能角度介绍剩下的4个然后再来看cluster设计的一些要点。2.1 调度相关设计我们还是以华为达芬奇为例NPU里面的调度分为两部分任务调度器独立的核和固件以及SRAM专门用于切片后的任务调度Cluster内部的控制单元里面会有指令流水线指挥子任务的执行首先看下调度器的上游就是CPU和DDR关系如下调度器接收CPU的任务并反馈给CPU运行结果获取NPU的一些信息给CPU按照CPU的指示对NPU进行配置对DDR中的AI数据搬运到SRAM更快的进行运算这个搬运要快就需要数据总线NoC以及DMA 调度器跟CPU的通信其实属于核间通信了基本依赖Mailbox也就是中断共享内存。调度器跟下游cluster的通信就是是发射NPU指令。这一条指令就是一行代码就可以完成一次AI运算如果没有AI硬件那就需要把这个算子的算法用多行代码进行实现。如下图所示发射的是如果是存算一体数据那么就是调度器直接把NPU SRAM的存算一体数据给到Cluster的SRAM这样Cluster里面的控制单元有核一般是RISCV就开始干活了去取数据运行得到结果再给调度器。这点看华为达芬奇这个架构还没做即它是指令和数据分离的统一由调度器去先放数据然后去发指令不是一股脑的把存算打包为PE这样调度器的压力就比较大还是适合算力小的情况。但是实现存算一体还有个问题就是对编译器的挑战存算一体的数据是提前编译器搞好的里面包含了调度依赖这样减轻了调度器的压力把运行时干的活放编译干等于提前准备干活时就快这是计算机的一项重要技术存算一体对PE来说是好处很多运算时不用受调度器的指挥只管对着存算一体数据干活干完活才汇报干活过程中不受打扰。回到华为达芬奇这个调度器其是一个固件有核有RTOS按照目前流行的做法是使用RISC-VFreeRTOS实现其作用就是安排好数据和指令给到Cluster。调度的另外一部分就是Cluster内部的控制单元按ZOMI视频的说法这个标量处理单元其实是一个ARM核除了进行常规的CPU标量运算其还可以管理下面的指令队列和同步模块那就是控制啊灰色部分就是控制单元其可以成为标量核的附属因为ARM核或者RISC-V核本身就自带一些这样的功能然后再通过核上运行软件的辅助就可以实现。控制单元主要组成部分为系统控制模块、指令缓存、标量指令处理队列、指令发射模块、矩阵运算队列、向量运算队列、存储转换队列和事件同步模块。下面详细介绍下系统控制模块控制任务块AI Core最小任计算务粒度的执行进程在任务块执行完成后系统控制模块会进行中断处理和状态申报。如果执行过程出错会把执行的错误状态报告给任务调度器指令缓存在指令执行过程中可以提前预取后续指令并一次读入多条指令进入缓存提升 指令执行效率标量指令处理队列指令被解码后便会被导入标量队列中实现地址解码与 运算控制这些指令包括矩 阵计算指令、向量计算指令以及存储转换指令等指令发射模块读取标量指令队列中配置好 的指令地址和参数解码然后根据指令类型分别发送到 对应的指令执行队列中而 标量指令会驻留在标量指令 处理队列中进行后续执行指令执行队列指令执行队列由矩阵运算队 列、向量运算队列和存储转 换队列组成不同的指令进 入相应的运算队列队列中的指令按进入顺序执行事件同步模块时刻控制每条指令流水线的 执行状态并分析不同流水 线的依赖关系从而解决指令流水线之间的数据依赖和同步的问题。这个标量处理单元怎么去触发AI矩阵运算单元和向量单元等工作呢答案就是其可以定制NPU指令集ARM或者RISCV是支持的这样就可以在cluster里面做土皇帝了。自己干点标量计算的活顺带当个工头代班指挥下别人干活。调度器发射指令就需要用到指令总线所以指令总线需要把Cluster都串起来这里华为达芬奇就按1个Core就是1个Cluster来说。调度在软件层面非常的核心甚至决定AI芯片的成败也在这上面因为实现太难了这里说的很少的篇幅但是具体技术代码实现上用到的东西涉及核心的技术算法研究这个的应该都是顶尖人才了。就是AI编译器静态和调度器动态的协调配合去盘活整个NPU那么多核的资源利用率。大家都知道CPU的平均利用率基本10%这个NPU要想在做业务的时候是核心算子是满负载的状态软件的确难度很大。这还涉及到NPU中硬件算子的搭配比例不能有一些类型的算子不够而拖后腿。2.2 存储相关设计这里还是以华为达芬奇为例进行介绍上图中cluster内部存储来说主打一个近存计算速度快也就是说PE计算单元要离存储近而且这个存储必须上快速的SRAM。要处理的AI数据的根源在DDR里面那直接从DDR搬运到PE的SRAM就又慢了DDR会拖后腿那就在NPU里面放一个大的SRAM从NPU的SRAM往PE的SRAM里面拷贝就ok了另外这里的搬运需要用到DMA这样把这种搬运任务从控制系统解放出来并行操作等于加了一个人干活。所以NPU里面使用了两级SRAM进行存储。 对于cluster内部的存储有三部分组成存储控制单元通过总线接口直接访问 AI Core 外更低层级缓存也可直通DDR/HBM 访问内存。另外设置存储转换单元作为AI Core内部数据通路传输控制器负责AI Core内部数据在不同缓冲区间读写管理以及完成一系列的格式转换操作如补零Img2Col转置、解压缩等。跟BIU总线进行通信连接这样cluster外就可以通过BIU跟这个DMA进行指令通信。输入缓冲区用于暂存需频繁复用数据不需要每次都通过总线接口到 AI Core 外部读取从而减少 BUS 上数据访问频次同时降低总线数据拥堵风险实现节省功耗、提高IO、提升性能效果输出缓冲区用来存放神经网络中每层计算中间结果从而在进入下一层计算时方便获取数据。相比较 BUS 读取数据带宽低延迟大通过输出缓冲区可以极大提升计算效率2.3 通信相关1. 首先就是中断这个核间通信必备参考之前文章SoC软件技术–核间通信。CPU和调度器之间调度器和Cluster直接都使用中断去触发一些通信。2. 如上图数据搬运拷贝就用NoC总线配合DMA进行。NoC是Mesh总线就是擅长点对点的数据传输算mesh总线。如果需要对数据进行广播的场景在并行计算中会经常用到一个数据广播给几个PE同时接收这样这几个PE协同运算只用广播这一次数据就可以了。那么适用于广播的环形总线也需要安排上把各个Cluster给串起来。3. 其他就是调度器跟Core之间的数据总线和指令总线了。指令总线在华为达芬奇里面就是BIU数据总线没提这些硬件根据需求都可以自己设计例如NoC、APB这些CPU里面常用到的总线技术。这些都是芯片最基本的技术每个芯片里面都有这些东西这里只是把信息提炼了下入门简单介绍下。在SoC里面能触发通信的单位需要有核例如CPU、调度器、标量核。然后对于数据通信来说核都配的有DMA帮手数据介质就是DDR、NPU SRAM、Cluster SRAM什么核能访问什么复制什么数据通过什么总线都是需要设计的。权限和根据和的MPU来设置总线的类型有快有慢按需使用。NoC总线SoC内速度最高但是成本也高AXI总线高速度、高带宽支持管道化互联、读写并行、乱序传输和非对齐操作适用于高性能、高带宽的SoC系统。其多通道设计五个独立通道和复杂的仲裁机制使其能够高效处理大量数据传输但实现复杂度和硬件开销较大。APB总线低速、低功耗设计简单主要用于低带宽的外围设备如UART、I2C等。其单主设备多从设备的架构和简单的状态机设计使其易于实现但无法满足高性能需求。2.4 计算单元PEPE里面就是算子构成的算子是指令直接驱动。CLube矩阵计算深度学习算法必备的算子这类AI算子就是NPU的核心最后都是为它服务的干最重的活向量运算例如平方根、求导运算等可以完成AI中的softmax、laynorm计算标量运算普通的运算通用CPU即可以完成且负责各类型标量数据运算和程序流程控制算力最低功能上类比小核 CPU完成整个程序循环控制、分支判断、Cube/Vector 等指令地址和参数计算以及基本算术运算等。累加器把当前矩阵乘结果与上一次计算中间结果相加 可以用于完成卷积中加 bias 等操作。MTE存储转换单元例如矩阵的存储是一维的多维矩阵就需要进行转换这里也是一个算子同步模块也是标量核控制的硬件需要用指令触发2.5 Cluster相关NPU的另一种拆分从功能角度就是管理和计算。cluster专注计算稍微带点基础队列的管理调度器则主抓管理。所以cluster在管理和计算上有很大的灵活性。1. Cluster需要用多少个PE 通常就是寒武纪的4个具体根据业务如果是1个那就没有Cluster了就像华为的。2. Cluster里面除了PE还可以放什么 首先一个SRAM供PE近存使用这样算的快那配套的DMA和协处理器也需要安排上。协处理器可以用RISCV同时做一些标量运算弥补PE的缺陷这个协处理器也可以运行队列组织PE有序的运行。例如上图华为达芬奇中的。3. Cluster之间用什么连接 culster是运作子任务的单位那么子任务是由调度器去管理的调度器跟Cluster的数据通信有NoC还有需要指令总线和数据总线来实现例如寒武纪的设计。4. 属于NPU但是在Cluster之外有什么 首先就是调度器然后是NoC总线以及指令和数据总线。然后有一个NPU使用大的SRAM例如华为达芬奇里面的。这个就需要协调这些存储、通信、调度等资源的颗粒度那些放NPU里面那些放Cluster里面那些放调度器里面。后记对于NPU的设计基础框架参考华为达芬奇就基本够了还有本文的达芬奇介绍估计不先进其前身还是需要看寒武纪最新的寒武纪芯片设计应该更加先进寒武纪老板陈天石来源于中科院计算所博导所以先进的技术还是需要科研支撑的门槛高。“啥都懂一点啥都不精通干啥都能干干啥啥不是专业入门劝退堪称程序员杂家”。欢迎各位有自己公众号的留言申请转载纯干货持续更新欢迎分享给朋友、点赞、收藏、在看、划线和评论交流公众号“那路谈OS与SoC嵌入式软件”欢迎关注个人文章汇总https://thatway1989.github.io