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 bit | 40 bit + 双倍累加路径 |
| 典型指令 | VXadd, VXmul | VXfma, VXdot, VXcmp |
| 峰值吞吐 | 512 GOMAC/s @ 1.5GHz | 740 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 加速人脸检测)包含四个阶段:
- 预处理:Camera ISP 将 RAW 图转换为 YUV420,DMA 直接写入 DDR Region A。
- 模型加载:TFLite/SNPE 运行时将模型权重加载至 NPU 本地 SRAM(若模型体积 > 512KB,则片外驻留,NPU 通过 AXI 突发读取)。
- 推理执行:Host CPU(Cortex-A76)写入任务描述到 Mailbox,NPU 自主计算,结果写回 DDR Region B。
- 后处理:DSP 或 CPU 读取 Region B,执行 NMS(非极大值抑制),输出检测框。
数据流图如下(仅含本模块内元素):
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 DSP | NPU | Adreno GPU |
|---|---|---|---|
| 延迟 (单帧) | 2~5 ms | 1~3 ms | 5~10 ms |
| 能效 (TOPS/W) | 0.8 | 2.1 | 0.4 |
| 编程灵活度 | C/汇编 + HVX intrinsics | SNPE/TFLite 定制算子 | OpenCL / Vulkan |
| 模型支持 | 小模型 (≤5MB) | 中大型模型 (≤50MB) | 任意尺寸 |
| 典型场景 | 音频降噪、IMU 融合 | 人脸检测、语义分割 | AR 特效、全景拼接 |
部署建议:优先将 INT8 量化模型部署至 NPU,获得最佳能效;对实时性要求高且模型较小的任务(如唤醒词检测)则落地到 DSP HVX。
4.7 落地步骤 SOP(以 NPU 部署 MobileNetV2 为例)
- 模型转换:
snpe-tensorflow-to-dlc -i model.pb -o model.dlc --input_dim input 1,224,224,3 - 量化校准:
snpe-dlc-quantize --input_dlc model.dlc --input_list calibration_list.txt --output_dlc model_quant.dlc --enable_htp - 设备端加载:
snpe-net-run --container model_quant.dlc --input_file input.raw --use_dsp - 验收检查:确认输出精度退化 < 2%,单帧耗时 < 15ms。
4.8 验收标准
| 检查项 | 通过条件 | 检测方法 |
|---|---|---|
| HVX 峰值吞吐 | ≥680 GOMAC/s | 运行内部向量 benchmark(mono_bench) |
| NPU INT8 精度 | Top-1 准确率 > 72.5% (ImageNet) | 量化前浮点模型对比 |
| 数据流延迟 | 从 ISP 输出到后处理输出 ≤ 33ms | Trace 记录时间戳 |
| 安全启动日志 | 无 SECURITY 异常 | dmesg | grep SECURITY |
| 功耗峰值 | DSP+NPU 联合跑满 < 3.5W | PMIC 电流采样 |
关键记录材料:转换后的 dlc 文件哈希值、校准数据集列表、量化前后的精度对比表格、温控日志(GPU 频率/温度曲线)。
4.9 异常处理参考
常见问题及操作:
- NPU 任务超时:检查 Mailbox 寄存器状态,可写入
0xDEAD0000软复位 NPU 逻辑。 - DSP HVX 溢出:在 hexagon_sim 上运行静态分析,观察 VLIW 包占用率。
- DRAM 带宽瓶颈:使用
perf stat -e arm_ddr_0统计内存带宽,若 > 15 GB/s 则需考虑局部性优化。