第二章 芯片架构基础:征程系列芯片的CPU、GPU、BPU等核心模块组成与工作原理

征程系列芯片作为面向智能驾驶与机器人场景的专用计算平台,其架构设计并非简单地将CPU、GPU、AI加速器堆叠在同一个SoC上,而是围绕“数据流驱动计算”这一核心理念进行系统级优化。理解征程芯片的架构,关键在于厘清CPU、GPU、BPU(贝叶斯处理器)以及各类硬件加速单元之间的职责边界、数据通路与协同机制。本章将从模块组成、工作原理、工程判断方法及实战案例四个维度,深入拆解征程系列芯片的底层架构逻辑。

征程系列SoC核心模块架构与数据流 LPDDR4/5 多通道 256bit 征程系列 SoC 内部架构 CPU 簇 8× Arm Cortex-A78 L2 4MB / L3 8MB 锁步核 2× A78 GPU Arm Mali-G78 16 核 800MHz 支持 Vulkan/GLES BPU 贝叶斯核 2× 深度学习核 INT8 算力 128TOPS 稀疏化加速 硬件加速单元 ISP / VPU / NPU JPEG编解码 / 视频处理 安全岛 (Safety Island) ASIL-D 锁步核 / R5F ECC / 双核比较 / 看门狗 AXI 互联总线 (NoC) - 一致性主端口 PCIe Gen3 MIPI CSI-2 USB3.0 / UFS CAN-FD / ETH 数据 帧数据 权重/特征 CPU数据通路 GPU帧数据 BPU权重/特征流 外设接口

上图展示了征程系列SoC的宏观架构视图。从工程视角看,该芯片并非将CPU、GPU、BPU简单并联,而是通过一个高带宽的NoC(片上网络)总线将它们与安全岛、硬件编解码单元及外部存储紧密耦合。其中,CPU簇负责逻辑控制与调度,GPU负责图形渲染与通用并行计算,而BPU则专门针对深度学习推理中的卷积、矩阵乘等算子进行极致优化。三者之间通过共享内存池(Shared Memory Pool)实现零拷贝数据交互,这是征程芯片实现低延迟推理的关键设计之一。

2.1 核心模块组成与职责边界

征程系列芯片(以征程5为典型参考)的模块划分遵循“功能安全岛+高性能计算簇+专用加速器”的三层设计哲学。这种划分并非随意为之,而是基于智能驾驶场景中“高算力需求”与“高功能安全等级”并存的矛盾而提出的工程解决方案。

2.1.1 CPU簇:逻辑控制与任务调度的中枢

CPU簇通常集成8个Arm Cortex-A78核心,并额外配备2个锁步(Lock-Step)核心用于功能安全监控。A78核心采用DynamIQ架构,支持异构多核配置,最高主频可达2.0GHz以上。在征程芯片中,CPU并非算力主力,而是扮演“指挥官”角色:它运行Linux或QNX操作系统,负责任务调度、通信协议栈、传感器数据预处理以及BPU/GPU的任务分发。

从工程实践角度,CPU簇的性能瓶颈往往不在峰值算力,而在缓存一致性(Cache Coherency)与中断响应延迟。征程芯片通过引入CCI/CMN互联总线,确保CPU、GPU、BPU在访问共享内存时数据一致,避免因缓存未命中导致的性能抖动。在开发中,我们通常将实时性要求高的任务(如车辆控制)绑定在锁步核上,将复杂逻辑任务(如路径规划)分配到A78大核上。

2.1.2 GPU:图形渲染与通用并行计算的补充

征程芯片集成的GPU为Arm Mali-G78系列,具备16个着色器核心,支持Vulkan、OpenGL ES 3.2等图形API。在智能驾驶场景中,GPU的主要职责包括:仪表盘/中控屏的图形渲染、环视影像的拼接与畸变校正、以及部分适合SIMT(单指令多线程)模式的并行算法(如某些光流计算)。

需要特别指出的是,GPU在征程芯片中并非用于运行深度学习模型——这是与桌面级GPU最大的区别。深度学习推理任务被严格限定在BPU上执行,原因在于GPU的能效比(TOPS/W)远低于BPU。例如,在运行ResNet-50时,BPU的能效比可达GPU的5-8倍。因此,在开发中应避免将卷积运算误派发到GPU,否则会显著增加功耗并降低帧率。

2.1.3 BPU(贝叶斯处理器):AI推理的专用引擎

BPU是征程芯片最核心的差异化模块。其名称“贝叶斯”并非指采用贝叶斯定理进行推理,而是寓意芯片设计借鉴了贝叶斯推断中“先验-后验”的迭代思想,在硬件层面实现了对模型权重的高效压缩与动态稀疏化处理。BPU内部包含多个深度学习核(DL Core),每个核由脉动阵列(Systolic Array)、向量处理单元(VPU)和激活函数引擎组成。

BPU的工作原理可概括为“数据流驱动”计算模式:权重和特征图以流水的形式在脉动阵列中流动,避免了传统冯·诺依曼架构中频繁的取指-译码-执行操作。征程5的BPU支持INT8/INT16混合精度,并针对Transformer结构中的Softmax、LayerNorm等算子提供了硬件加速指令。在实际部署中,BPU的利用率(Utilization)是衡量模型优化程度的核心指标,通常应保持在70%以上。

2.2 核心模块协同工作原理与判断方法

理解各模块的独立功能只是第一步,真正的工程挑战在于如何让它们高效协同。征程芯片通过“异构计算框架”将CPU、GPU、BPU统一抽象为计算资源池,开发者通过工具链(如地平线OpenExplorer)将算法任务映射到不同计算单元上。

2.2.1 数据流与任务分配策略

一个典型的自动驾驶感知任务数据流如下:传感器数据(Camera/LiDAR)→ MIPI/PCIe接口 → 内存 → ISP预处理 → BPU推理 → CPU后处理 → 控制指令输出。在这个过程中,CPU负责配置ISP参数并启动DMA传输,BPU完成神经网络推理,GPU则并行处理可视化渲染。判断任务分配是否合理,可通过以下三个指标进行量化评估:

  • 端到端延迟(Latency):从传感器数据到达SoC到输出控制指令的总耗时,通常要求小于100ms。
  • 模块利用率(Utilization):CPU、GPU、BPU各自的忙碌时间占比,理想状态是三者均衡且无长时间空闲。
  • 内存带宽占用(Bandwidth):各模块对DDR带宽的争抢情况,若带宽占用超过80%,则需考虑数据压缩或零拷贝优化。
  • 2.2.2 判断BPU是否成为瓶颈的实操方法

    在开发过程中,我们经常需要快速定位性能瓶颈。以下是一套基于征程芯片性能计数器的判断流程:

    1. 使用地平线提供的hrt_tool工具采集BPU的busy_ratio和idle_ratio指标。
    2. 若busy_ratio持续高于90%,且CPU侧等待事件(wait_event)频繁触发,则判定BPU为瓶颈。
    3. 此时应检查模型是否已开启混合量化(如将敏感层保留INT16),或尝试调整BPU的batch size以提升数据复用率。
    4. 若busy_ratio低于50%,则说明模型计算量未充分填充BPU流水线,应检查是否因内存分配碎片化导致数据搬运延迟。
    经验提醒:在征程芯片上,BPU的利用率并非越高越好。当利用率超过95%时,任务排队延迟会急剧增加,反而导致端到端延迟恶化。建议将BPU利用率控制在85%-92%之间,留出余量应对突发帧率波动。

    2.3 案例拆解:基于征程5的多传感器融合感知部署

    为更直观地说明架构原理,我们以一个实际项目为例:在某L3级自动驾驶控制器中,需要同时处理8路800万像素摄像头数据,并运行一个包含目标检测(YOLOX)、语义分割(PIDNet)和可行驶区域预测的多任务模型。

    2.3.1 初始现象与关键指标

    系统初始设计将全部8路图像数据直接送入BPU推理,结果发现BPU利用率达到98%,但端到端延迟高达180ms,远超100ms的设计指标。通过hrt_tool采集数据发现:CPU的wait_event占比高达40%,说明CPU在等待BPU结果时大量空转;同时DDR带宽占用达到92%,接近饱和。

    2.3.2 分析判断过程

    进一步分析发现,问题根源并非BPU算力不足,而是数据搬运开销过大。8路图像以RAW格式直接写入DDR,每帧数据量约50MB,导致内存带宽被大量占用。此外,模型未进行稀疏化剪枝,权重矩阵中存在大量无效计算。

    2.3.3 实际操作步骤与结果对比

    优化步骤具体操作效果指标
    1. 数据预处理下沉将ISP输出的图像直接在MIPI接收端完成裁剪/缩放,仅将ROI区域写入DDRDDR带宽占用从92%降至55%
    2. 模型稀疏化使用OpenExplorer工具对YOLOX进行通道剪枝,稀疏度设为2:4BPU计算量减少35%,利用率降至85%
    3. 任务异构调度将语义分割任务分配到GPU执行,BPU专注目标检测端到端延迟降至95ms,满足设计要求

    2.3.4 风险与复盘经验

    该优化方案并非没有代价。将语义分割迁移至GPU后,GPU利用率从20%提升至75%,导致芯片整体功耗增加了4.5W。在散热受限的控制器中,这可能需要调整风扇策略或降低GPU主频。复盘经验总结为三点:第一,在征程平台上,内存带宽往往比算力更早成为瓶颈,应优先优化数据通路;第二,BPU的稀疏化支持是免费的算力提升手段,但需注意稀疏度设置过高可能引入精度损失;第三,异构调度需要结合具体模型的算子特性,不能一概而论。

    2.4 常见误区与总结复盘

    在征程芯片的开发实践中,工程师常陷入以下认知误区,需要特别警惕:

    误区一:将BPU视为万能加速器。BPU对卷积、矩阵乘等密集计算效率极高,但对动态形状、递归神经网络等不规则计算支持较弱。若模型中含有大量自定义算子,强行部署到BPU可能导致算子被拆分为多个小算子,反而增加调度开销。正确做法是使用工具链的hbdk编译器查看算子映射报告,将不支持的算子回退到CPU执行。
    误区二:忽略CPU侧的“隐藏”开销。很多开发者只关注BPU利用率,却忽视了CPU在数据预处理、后处理(如NMS)中的耗时。在征程5上,一个典型的NMS操作若未使用硬件加速库,可能消耗2-3ms的CPU时间,这在100ms的预算中占比可观。建议使用地平线提供的libhrt加速库,或考虑将NMS逻辑迁移到GPU并行执行。

    总结复盘:征程芯片的架构精髓在于“专芯专用”——CPU负责控制、GPU负责图形、BPU负责AI推理。在实际开发中,应遵循“数据流优先”的设计原则,先梳理清楚数据从传感器到执行器的完整路径,再根据各模块的算力特征进行任务映射。同时,务必建立性能基线测试体系,将BPU利用率、DDR带宽、端到端延迟作为核心监控指标,在每次模型或代码变更后及时回归验证。最后,善用工具链提供的性能分析报告(如hrt_report),它能够精确指出每个算子在BPU上的计算周期和内存访问次数,是定位瓶颈的“显微镜”。