4. DPU架构与Kria DPU配置选型
DPU(Deep Learning Processing Unit)是 AMD Vitis AI 在 FPGA/SoC 上实现神经网络推理的核心硬件加速器。它并不是一个固定不变的“黑盒”,而是由 DPU IP 参数化生成、再通过 Vitis AI 编译器匹配的指令集驱动。理解 DPU 的卷积加速原理、指令集、并行度与资源占用,是正确选择 Kria 目标板配置并完成硬件平台集成的前提。
卷积加速原理:从乘加到阵列复用
卷积层是 CNN 中计算量最大的部分。DPU 的核心计算单元是二维的乘加阵列(PE Array),每个时钟周期内,阵列中的每个 PE 完成一次乘加运算。以 DPUCZDX8G 为例,其典型配置包含 DSP48 数量、卷积并行度(Conv 通道并行)和像素并行度(Pixel 并行)三个关键维度。假设配置为 Conv=8、Pixel=4,则每个周期可并行处理 8 个输入通道 × 4 个像素位置,共 32 个乘加操作。若时钟为 300 MHz,理论峰值算力约为 32 × 2 × 300M ≈ 19.2 GOPS(乘加计为 2 次操作)。
DPU 并不直接执行“卷积”这一高层语义,而是把卷积、池化、激活、全连接等算子拆解为统一的微指令序列。指令集主要包括:CONV(卷积/矩阵乘)、MISC(池化、激活、量化/反量化)、LOAD(从 DDR 搬运特征图到片上缓存)、SAVE(写回结果)、END(同步与中断)。编译器将量化后的模型映射为这些指令,并按层顺序排布。因此,DPU 的“指令集”本质上是数据搬运与计算交替的流水线描述。
并行度与资源占用的权衡
并行度越高,单周期吞吐越大,但消耗的 DSP、BRAM 和 LUT 也越多。Kria K26 的 PL 资源有限,必须在算力与资源之间做取舍。下表给出 DPUCZDX8G 在 Kria K26 上常见的三档配置示例(参数为教学示例,实际以 Vitis AI 提供的配置文件为准):
| 配置档 | Conv 并行 | Pixel 并行 | DSP 估算 | BRAM 估算 | 典型用途 |
|---|---|---|---|---|---|
| B512 | 4 | 4 | 约 512 | 约 180 | 低功耗、小模型 |
| B1024 | 8 | 4 | 约 1024 | 约 260 | 主流分类/检测 |
| B2048 | 8 | 8 | 约 2048 | 约 380 | 高吞吐、多路视频 |
选择时先看模型的计算量与特征图尺寸,再看 PL 剩余资源。若模型以 3×3 小卷积为主、通道数在 256 以内,B1024 通常能在 K26 上取得较好的帧率与资源平衡;若需要同时跑多路 1080p 检测,则考虑 B2048,但需确认 BRAM 与 DSP 不超限。
Kria DPU 配置选型与硬件平台集成
Kria 的 DPU 集成通常基于 kv260 或 kr260 的 Vitis 平台。流程是:在 Vivado 中创建 Block Design,加入 DPUCZDX8G IP,配置并行度与 AXI 接口;连接 PS 的 M_AXI_HPM0 到 DPU 的控制接口,连接 S_AXI_HP0 到 DPU 的数据接口;分配中断;生成 XSA 并导出到 Vitis 平台。随后在 PetaLinux 中使能 DPU 驱动,并在 rootfs 中放入 libvart、libvitis_ai_library 与 xrt 运行库。
一个常见的坑是 AXI 位宽与时钟域不匹配。DPU 的数据接口通常为 128 位或 256 位,若 PS 侧 HP 口位宽不足,需要加入 AXI Data Width Converter 与 Clock Converter。另一个坑是中断号冲突,需在设备树中确认 interrupt-parent 与 interrupts 与 BD 一致。集成完成后,可用 xdputil query 查看 DPU 是否被正确识别,输出中应包含 DPU core 数量、fingerprint 与 version。
完成硬件平台集成后,建议先用一个已编译好的 .xmodel 做最小验证:加载模型、分配输入张量、执行一次推理,观察 xdputil query 返回的 DPU 指纹与模型编译时使用的指纹是否一致。若不一致,说明 DPU 配置与编译器目标不匹配,需要重新生成 IP 或重新编译模型。只有指纹一致,后续的精度与性能调优才有意义。