4、J5 BPU整体架构:宏观框图、计算单元、存储层次、互联总线与数据流

地平线征程J5(Journey 5)作为面向高级辅助驾驶与准L3级自动驾驶的车规级AI芯片,其BPU(Brain Processing Unit)是承载深度学习推理任务的核心引擎。理解J5 BPU的整体架构,不能停留在“有多少TOPS”的粗浅层面,而必须深入到宏观拓扑、计算阵列、存储层次、总线协议以及数据流调度机制。本章将从系统级视角拆解J5 BPU的物理与逻辑构成,帮助学员建立从“芯片引脚”到“算子映射”的完整认知链路。

J5 BPU 宏观架构与数据流总览 BPU 计算阵列 (MAC Array) 4个独立计算核 (Core0-Core3) 每核 64×64 MAC 单元 支持 INT8 / INT16 / FP16 脉动阵列 + SIMD 混合 峰值算力: 128 TOPS @INT8 向量单元 激活/池化/归一化 标量单元 控制流/地址生成 存储层次 (Memory Hierarchy) 寄存器堆 (RF) 每核 512KB 片上SRAM (L2) 共 8MB, 4分区 L3 共享缓存 16MB, 多核共享 外部DDR4/LPDDR4x 4266MT/s, 64bit×2通道 互联总线与接口 NoC 网格总线 256bit 全双工 AXI4 主接口 512bit 读/写通道 DMA 引擎 16通道, 描述符链 片外接口 PCIe 3.0 ×8 / USB3.0 MIPI CSI-2 ×16 / CAN-FD 读写 数据请求 DDR/PCIe 图例: 计算单元 存储层次 互联总线 数据流 控制流 外部接口 注:实际物理布局中,4个计算核与8MB SRAM采用2×2网格排布,NoC总线位于中央交叉区域 DMA引擎负责SRAM与DDR之间的批量搬运,CPU仅下发描述符

4.1 宏观框图:从芯片级到BPU子系统

J5 SoC内部集成了多个异构计算单元,包括ARM Cortex-A78AE CPU簇、DSP、GPU(可选)、以及本文核心的BPU。从芯片级宏观框图看,BPU并非孤立模块,而是通过一套层次化的总线系统与CPU、DDR控制器、ISP、视频编解码单元(VDU)以及PCIe控制器相连。BPU子系统内部又可细分为四个主要部分:计算阵列(Compute Array)、存储层次(Memory Hierarchy)、互联与路由(NoC)以及控制与调度单元(Control Plane)。

在物理实现上,J5 BPU采用4核设计,每个核心拥有独立的MAC阵列和向量单元,但共享L3缓存与DDR带宽。这种“多核独立执行+共享存储”的架构,既保证了并行算力的可扩展性,又避免了多核间频繁的数据同步开销。宏观框图中需要特别关注的是“近存储计算”理念——BPU的MAC阵列与SRAM之间的物理距离被压缩到极致,以减少数据搬运延迟。

核心原理:J5 BPU的宏观架构设计遵循“数据流驱动计算”而非“指令流驱动计算”。传统CPU从内存取指令再执行,而BPU直接由DMA引擎将权重和特征图推送到计算阵列附近的SRAM中,计算单元以流水线方式消费数据。这种架构的优劣取决于数据局部性(Data Locality)的利用效率。

4.2 计算单元:MAC阵列与向量/标量协处理

每个BPU核心的计算单元由三部分组成:脉动MAC阵列、向量处理单元(VPU)和标量处理单元(SPU)。MAC阵列是算力的主要来源,J5每个核心包含64×64=4096个MAC单元,4个核心总计16384个MAC。每个MAC单元在单周期内可完成一次INT8乘法累加操作,因此理论峰值算力为:16384 × 2 × 1GHz ≈ 32.8 TOPS(考虑MAC=2次操作),4核合计约128 TOPS。

MAC阵列采用脉动(Systolic)结构,权重从左侧逐列注入,特征图从上方逐行注入,部分和沿对角线方向累加。这种设计减少了寄存器堆的读写次数,但要求数据排布必须符合脉动时序。向量单元负责处理非卷积类算子,如ReLU、Sigmoid、MaxPool、LayerNorm等,其宽度为512bit,可并行处理32个FP16或64个INT8数据。标量单元则承担地址计算、循环控制、分支跳转等控制密集型任务,相当于每个核心的“小管家”。

计算单元类型 硬件资源 典型算子 数据宽度 性能特征
MAC阵列 64×64 脉动阵列 Conv2D, MatMul, Depthwise Conv INT8/INT16/FP16 高吞吐,延迟固定
向量单元 512bit SIMD ReLU, GELU, Softmax, Pooling FP16/FP32 灵活,支持非线性
标量单元 RISC-V 核心 地址生成, 循环控制 32bit 低功耗,控制面

4.3 存储层次:从寄存器堆到DDR的四级金字塔

J5 BPU的存储层次设计遵循经典的“金字塔”模型,但针对AI推理做了特殊优化。第一级是寄存器堆(RF),每个核心拥有512KB,分为多个Bank以支持MAC阵列的高带宽访问。RF的读写带宽高达数TB/s,但容量极小,仅能容纳当前计算所需的输入/输出切片。第二级是片上SRAM(L2),总容量8MB,分为4个分区,每个分区对应一个核心。L2 SRAM采用双端口设计,支持同时读写,带宽约为2TB/s。

第三级是L3共享缓存,容量16MB,由所有核心共享,用于存放权重共享数据或跨核心通信的中间结果。L3的引入是为了减少对DDR的访问频率——在自动驾驶场景中,模型权重往往超过8MB,无法全部放入L2,因此L3充当了“”。第四级是外部DDR4/LPDDR4x,容量可达16GB,带宽约68GB/s(4266MT/s × 64bit × 2通道)。

存储层次的关键指标:评估BPU存储系统时,不能只看容量,更要关注带宽匹配度。MAC阵列每周期需要消耗 64×64×2字节 = 8KB 的输入数据(INT8),若L2带宽不足,MAC阵列将处于“饥饿”状态。J5的L2带宽设计为2TB/s,恰好满足4核同时全速运行的需求。

4.4 互联总线与数据流:NoC与DMA的协同调度

J5 BPU内部采用2×2网格NoC(Network-on-Chip)拓扑,4个计算核分别位于网格的四个节点,L3缓存和DMA引擎位于中央交叉区域。NoC总线宽度为256bit,工作频率与核心同频,支持全双工通信。每个节点通过路由器与相邻节点连接,数据包采用最短路径路由算法,典型延迟为2-4个时钟周期。

数据流分为控制流和数据流两条路径。控制流由CPU通过AXI4-Lite接口下发指令描述符(Command Descriptor)到BPU的控制寄存器,描述符包含算子类型、输入输出地址、维度信息等。数据流则由DMA引擎主导:DMA从DDR读取权重和特征图,写入L3或L2 SRAM;计算完成后,DMA再将结果从SRAM搬回DDR。整个过程CPU不参与数据搬运,实现了“异步计算”。

// 典型的数据流时序(以一次卷积为例)
1. CPU 写描述符到 BPU 控制队列 (地址0x1000)
2. DMA 通道0: DDR(0x20000000) -> L2 SRAM(0x30000000)  权重, 大小256KB
3. DMA 通道1: DDR(0x40000000) -> L2 SRAM(0x31000000)  输入特征图, 大小512KB
4. BPU 核心0 开始计算, 从L2读取数据, 结果写入L2(0x32000000)
5. 计算完成后, 中断通知CPU
6. DMA 通道2: L2(0x32000000) -> DDR(0x50000000)  输出结果, 大小128KB

4.5 案例拆解:BEV感知模型在J5 BPU上的部署优化

某自动驾驶公司需要在J5上部署一个BEV(Bird's Eye View)感知模型,模型包含一个Backbone(ResNet-50变体)和两个任务头(3D检测与地图分割)。初始部署时,端到端延迟为45ms,未达到30ms的实时性要求。通过分析BPU的硬件计数器,发现以下瓶颈:

  • L2命中率仅72%:Backbone的中间特征图过大,频繁溢出到L3,导致DMA搬运次数增加。
  • MAC利用率仅58%:由于特征图通道数(256)与MAC阵列宽度(64)不匹配,存在大量填充(Padding)浪费。
  • DMA通道冲突:两个任务头同时启动,争抢DMA通道2,造成等待。

针对上述问题,工程师采取了以下优化措施:

  1. 算子融合:将Conv+BN+ReLU融合为单一算子,减少L2与L3之间的中间数据往返,L2命中率提升至89%。
  2. 通道重排:将特征图从NCHW格式转换为NHWC,并按照64通道对齐,MAC利用率提升至81%。
  3. DMA优先级调度:为检测头分配高优先级DMA通道,地图分割头使用低优先级,避免冲突。

优化后,端到端延迟降至28ms,满足实时性要求。该案例表明,BPU架构的调优核心在于数据排布与硬件拓扑的匹配,而非单纯依赖编译器优化。

常见误区:许多开发者认为BPU是“黑盒”,只需调用工具链即可。实际上,J5 BPU对数据布局(Layout)、对齐(Alignment)和DMA描述符的编写非常敏感。例如,若输入特征图的宽度不是64的整数倍,MAC阵列将产生大量无效计算,导致实际算力远低于峰值。建议在模型转换阶段使用地平线提供的模型分析工具,查看每一层的MAC利用率和存储带宽占用。

4.6 总结与设计哲学

J5 BPU的整体架构体现了三个核心设计哲学:算力与存储的平衡、数据流驱动的计算模型、多核可扩展性。其128 TOPS的算力并非孤立存在,而是依赖于8MB L2、16MB L3以及高效的NoC互联。在实际开发中,理解架构的层次关系比记住具体参数更重要——只有清楚数据从DDR到MAC阵列的完整路径,才能定位性能瓶颈并做出有效优化。