4. Hexagon DSP 与 NPU 模块:向量扩展、张量加速与 AI 数据流

4.1 模块边界与系统分层

高通 8155 的 AI 计算子系统由 Hexagon DSP 和独立 NPU 组成,两者共享 LPI(Low Power Island)总线与系统内存。Hexagon DSP 负责向量化信号处理(音频、传感器融合)和轻量级推理,而 NPU 专为高吞吐张量运算设计。模块边界如下图所示:

  • Hexagon DSP v66/v67:4 核 VLIW 架构,集成 HVX(Hexagon Vector eXtensions)向量单元,每个周期可处理 1024 位 SIMD 操作。
  • NPU(Neural Processing Unit):独立张量核心,支持 INT8/INT4/INT16 精度,峰值算力 6.5 TOPS(典型)。
  • 共享内存子系统:DSP 专用快存(L2 512KB) + NPU 本地 SRAM(1MB)+ 系统 DDR 通过 SMMU 统一寻址。
架构要点:8155 的 AI 流水线中,DSP 和 NPU 不直接互连,而是通过共享 DDR + 内部 DMA 引擎完成数据搬运。模型部署时需显式指定目标设备,不可自动 fallback。

4.2 DSP 向量扩展与 HVX 向量单元

Hexagon 向量扩展(HVX)是 DSP 核心的加速关键,支持两类操作模式:

特性HVX v2 (DSP v65)HVX v3 (8155 DSP v66)
向量宽度128 字节 (1024 bit)128 字节 (1024 bit)
累加器精度40 bit40 bit + 双倍累加路径
典型指令VXadd, VXmulVXfma, VXdot, VXcmp
峰值吞吐512 GOMAC/s @ 1.5GHz740 GOMAC/s @ 1.8GHz

HVX 单元通过 VLIW 包同时发射多道向量指令。典型代码片段(汇编级):

// 对 128 字节向量做点积累加
v1 = vmem(R0++);      // 加载输入向量
v2 = vmem(R1++);      // 加载权重向量
v3 = vtmpy(v1, v2);   // 16×16 乘法累加
v9 = vadd(v9, v3);    // 累加至累加器
p0 = vcmp.eq(v9, #0); // 条件预测
注意事项:HVX 向量寄存器共用 512 个 32 位寄存器,编程时需手动管理寄存器压力。超出数量将导致编译器 spill/fill,性能急剧下降。

4.3 NPU 张量加速器架构

NPU 采用可配置的脉动阵列(Systolic Array)架构,核心参数:

  • MAC 阵列:16×16 × INT8 乘积累加单元,支持 4×4 块稀疏加速。
  • 激活函数硬件支持:ReLU、Sigmoid、Tanh,避免查表抖动。
  • 本地数据缓存 512KB,支持 NHWC/NCHW 自适应排布。

NPU 控制流通过 TLMM(Task Lifecycle Manager)管理。推理请求格式:

// NPU 任务描述结构
struct NPUJob {
    uint32_t input_addr;       // DDR 输入缓冲区物理地址
    uint32_t output_addr;      // DDR 输出缓冲区物理地址
    uint16_t model_id;         // 预加载的模型句柄
    uint8_t  precision;        // 0=INT8, 1=INT4
    uint8_t  priority;         // 0-3
    uint32_t context_id;       // 用于中断回传
};
// 通过 Mailbox 寄存器写入 NPU CSRs

4.4 AI 模型部署的数据流路径

典型端侧 AI 推理(例如 NPU 加速人脸检测)包含四个阶段:

  1. 预处理:Camera ISP 将 RAW 图转换为 YUV420,DMA 直接写入 DDR Region A。
  2. 模型加载:TFLite/SNPE 运行时将模型权重加载至 NPU 本地 SRAM(若模型体积 > 512KB,则片外驻留,NPU 通过 AXI 突发读取)。
  3. 推理执行:Host CPU(Cortex-A76)写入任务描述到 Mailbox,NPU 自主计算,结果写回 DDR Region B。
  4. 后处理:DSP 或 CPU 读取 Region B,执行 NMS(非极大值抑制),输出检测框。

数据流图如下(仅含本模块内元素):

Hexagon DSP + NPU 子系统架构与数据流 Hexagon DSP (v66) VLIW Core 0-3 VLIW Core 4-7 HVX 向量单元 (×8) 128B SIMD | 740 GOMAC/s L2 Cache 512KB DMA 引擎 NPU (张量加速器) Systolic Array 16×16 激活硬件 ReLU/Sigmoid Local SRAM 512KB Mailbox CSR 接口 TLMM 任务管理器 共享 DDR (LPDDR5) Region A / Region B DMA 读写 NPU 读取/写入 系统总线 (SMMU) 数据流路径:ISP → DDR Region A → DMA → DSP/NPU → DDR Region B → CPU 后处理

4.5 信任链路与安全区域

8155 通过 QSEE(Qualcomm Secure Execution Environment)对 DSP/NPU 的固件加载进行签名验证:

  • 启动信任根:PBL 验证 SBL,SBL 验证 QSEE,QSEE 验证 DSP/NPU 固件哈希。
  • 安全通道:CPU 侧只能通过 QSEE 共享内存与 DSP/NPU 交换敏感数据(如人脸特征向量)。
  • 异常处理:若 DSP/NPU 固件验签失败,SOC 触发安全重置,打印日志:[SECURITY] DSP image authentication failed, rebooting...

4.6 方案权衡:DSP vs NPU vs GPU

维度Hexagon DSPNPUAdreno GPU
延迟 (单帧)2~5 ms1~3 ms5~10 ms
能效 (TOPS/W)0.82.10.4
编程灵活度C/汇编 + HVX intrinsicsSNPE/TFLite 定制算子OpenCL / Vulkan
模型支持小模型 (≤5MB)中大型模型 (≤50MB)任意尺寸
典型场景音频降噪、IMU 融合人脸检测、语义分割AR 特效、全景拼接
部署建议:优先将 INT8 量化模型部署至 NPU,获得最佳能效;对实时性要求高且模型较小的任务(如唤醒词检测)则落地到 DSP HVX。

4.7 落地步骤 SOP(以 NPU 部署 MobileNetV2 为例)

  1. 模型转换:
    snpe-tensorflow-to-dlc -i model.pb -o model.dlc --input_dim input 1,224,224,3
  2. 量化校准:
    snpe-dlc-quantize --input_dlc model.dlc --input_list calibration_list.txt --output_dlc model_quant.dlc --enable_htp
  3. 设备端加载:
    snpe-net-run --container model_quant.dlc --input_file input.raw --use_dsp
  4. 验收检查:确认输出精度退化 < 2%,单帧耗时 < 15ms。

4.8 验收标准

检查项通过条件检测方法
HVX 峰值吞吐≥680 GOMAC/s运行内部向量 benchmark(mono_bench)
NPU INT8 精度Top-1 准确率 > 72.5% (ImageNet)量化前浮点模型对比
数据流延迟从 ISP 输出到后处理输出 ≤ 33msTrace 记录时间戳
安全启动日志无 SECURITY 异常dmesg | grep SECURITY
功耗峰值DSP+NPU 联合跑满 < 3.5WPMIC 电流采样
关键记录材料:转换后的 dlc 文件哈希值、校准数据集列表、量化前后的精度对比表格、温控日志(GPU 频率/温度曲线)。

4.9 异常处理参考

常见问题及操作:

  • NPU 任务超时:检查 Mailbox 寄存器状态,可写入 0xDEAD0000 软复位 NPU 逻辑。
  • DSP HVX 溢出:在 hexagon_sim 上运行静态分析,观察 VLIW 包占用率。
  • DRAM 带宽瓶颈:使用 perf stat -e arm_ddr_0 统计内存带宽,若 > 15 GB/s 则需考虑局部性优化。