1. Hexagon DSP 架构总览
Hexagon 是高通 Snapdragon 平台中的专用数字信号处理器系列,它并不是一颗“更快的 CPU”,而是一套围绕低功耗、高吞吐信号与张量计算设计的异构计算子系统。理解 Hexagon,关键是把它拆成四条主线:负责控制与标量运算的标量单元(Scalar Unit)、负责 SIMD 数据并行的向量单元(Vector Unit)、作为可编程协处理器的 HVX(Hexagon Vector eXtensions),以及把它们与外部世界连接起来的内存子系统。这四者共同决定了同一段算法在 Hexagon 上“能不能跑、跑多快、耗多少电”。
一、标量单元:控制流与地址计算的中枢
标量单元是 Hexagon 的“大脑”,执行 32 位定点和地址运算,负责分支、循环、函数调用、指针运算以及标量与向量之间的数据搬运调度。它采用 VLIW(超长指令字)架构,一条指令包(packet)内可并行发射多条子指令,例如同时做一次加载、一次乘加和一次跳转判断。这种设计把并行度交给编译器静态调度,硬件不需要复杂的乱序执行逻辑,从而在同等功耗下获得更高的确定性吞吐。
标量单元的关键资源包括通用寄存器组、谓词寄存器(用于条件执行)、循环硬件(如 loop0/loop1 硬件循环寄存器)以及地址寄存器。实际工程中,标量代码通常承担“壳”的角色:解析参数、计算基地址与步长、组织循环边界,然后把密集计算交给向量单元。因此标量代码的效率往往体现在循环开销、地址生成和分支预测友好度上,而不是单纯的算术峰值。
二、向量单元与 HVX:数据并行的主力
向量单元是 Hexagon 面向数据并行的执行部件,HVX 则是其可编程向量扩展的统称。HVX 提供 128 字节宽的向量寄存器(如 V0–V31),支持按字节、半字、字等多种粒度的 SIMD 运算,并配有向量谓词寄存器 Q 用于掩码与条件选择。典型 HVX 指令包括向量加、乘、乘加(VMPY、VADD)、向量比较、向量移位、向量置换(vshuff、vdeal)以及向量加载/存储(vmem)。
HVX 的价值在于把“同一操作作用于大量数据”的循环向量化。例如一个 8 位图像卷积,标量实现每像素要多次访存与乘加,而 HVX 可一次处理 128 字节,配合向量乘加与滑动窗口重排,把吞吐提升一个数量级。但 HVX 并非万能:它依赖数据对齐、连续访问和可向量化的循环结构。若存在大量数据依赖、非对齐随机访问或复杂控制流,向量化收益会显著下降,此时应回到标量单元或重构数据布局。
三、内存子系统:VTCM 与多级存储
Hexagon 的内存子系统是性能与功耗的关键。它通常包含紧耦合的向量内存(VTCM,Vector Tightly Coupled Memory)、数据缓存(D-cache)、指令缓存(I-cache)以及通过 AXI/NoC 连接的外部 DDR。VTCM 是 HVX 的“近端仓库”,访问延迟低、带宽高,适合存放频繁复用的向量数据块,例如卷积权重、图像 tile 或中间特征图。
典型的数据流是:DDR 中的原始数据先由 DMA 或标量加载搬入 VTCM,HVX 在 VTCM 上完成向量计算,结果再写回 DDR 或交给其他子系统。这样做的原因是 HVX 直接访问 DDR 会受限于外部带宽与延迟,而 VTCM 能把“计算—访存”比例拉高,减少等待。工程上常需要关注 VTCM 容量(不同 SoC 版本从几百 KB 到数 MB 不等)、bank 冲突、DMA 与 HVX 的同步(如使用 fence 或事件信号)以及缓存一致性策略。
四、在 Snapdragon SoC 中的位置
在 Snapdragon SoC 中,Hexagon 通常与 CPU(Kryo/ARM 核)、GPU(Adreno)、ISP、NPU(Hexagon Tensor Accelerator)以及内存控制器并列,通过系统总线互连。它既可作为独立 DSP 运行音频、语音、传感器、图像后处理等任务,也可作为 AI 推理的向量后端,与张量加速器协同。对开发者而言,Hexagon 往往通过 FastRPC 机制被 CPU 侧调用:CPU 发起远程调用,Hexagon 上的 skel 库执行计算并回传结果,从而把重负载从应用处理器卸载到低功耗 DSP。
五、从架构到工程:一个可复现的观察路径
把上述结构落到实际开发,可以用一个最小示例建立直觉。假设要在 Hexagon 上实现 8 位灰度图像的 3×3 均值滤波,输入为 640×480 的 uint8 图像,输出同尺寸。标量版本对每个像素读取 9 个邻域值求和再除以 9,访存次数约为 640×480×9 ≈ 276 万次。若改用 HVX,可先把图像按行分块搬入 VTCM,每次加载 128 字节向量,利用向量加法和移位完成邻域求和,再写回。此时每次向量操作覆盖 128 个像素,理论访存次数可降到约 640×480×9/128 ≈ 2.2 万次量级,差异主要来自向量宽度与数据复用。
判断是否值得向量化,可以观察三个信号:循环体内是否存在跨迭代依赖;数据是否连续且可对齐;算术强度(运算次数/访存字节数)是否足够高。若三者都满足,HVX 通常能带来数倍到十余倍加速;若数据依赖强或访存随机,则应优先优化数据布局或改用标量加 DMA 的方案。
总结来看,Hexagon 的架构可以理解为“标量管控制、向量管吞吐、VTCM 管供给、总线管协同”。在 Snapdragon SoC 中,它既是一个独立的低功耗信号处理器,也是 AI 与多媒体流水线中的向量后端。掌握这四部分的职责边界与数据流向,是后续编写高效 HVX 内核、配置 VTCM 以及使用 FastRPC 卸载计算的基础。