面向边缘设备的异构向量计算
Zynq 的可编程逻辑资源有限,完整向量模型放不进去。PS 处理文本并运行轻量模型,PL 负责重复的 INT8 向量计算。双 MAC 点积现已通过 AXI DMA 完成板上批量测试。
把一条检索链拆成四个部分
文本与模型留在 PS
分词、模型推理、向量归一化和候选元数据涉及复杂控制与软件生态,更适合由处理器和 Linux 环境承载。
重复计算下沉到 PL
点积的数据流固定,适合放进 PL。当前 AXI4-Stream 核心每拍接收两组 INT8 操作数,100 MHz 下的计算上限为 200 MMAC/s;这只是计算值,不是端到端实测。
数据通路决定实际收益
如果查询向量和候选数据在 PS 与 PL 之间频繁小块往返,传输开销可能抵消计算收益,因此 AXI、DMA 和缓冲策略必须与计算核一起设计。
Top-K 不能只看算子
完整检索还涉及候选组织、分值排序、结果编号和原始记录关联。单个点积核心只是链路中的第一块,不等于端到端系统已经完成。
测试环境
处理器
双核 Cortex-A9,主频 667 MHz。
可编程逻辑
PL 时钟 100 MHz;双 MAC INT8 点积核心;AXI DMA 经 HP0 端口访问 PS DDR。
软件
PYNQ Linux(Ubuntu 18.04)、Python 3.6.5、NumPy 1.13.3。
输入与测量
1024 维 INT8 向量,INT32 累加。CPU 取 7 组中位数;DMA 每个批量预热 10 次后测量 100 次。
实测数据
四种实测路径与一个计算上限
| 执行路径 | 测试方式 | 每向量中位延迟 | 吞吐率 |
|---|---|---|---|
| Cortex-A9 纯 Python | 单向量;7 组,每组 200 次 | 1287.380 μs | 0.795 MMAC/s |
| Cortex-A9 NumPy INT32 | 单向量;7 组,每组 5000 次 | 28.686 μs | 35.697 MMAC/s |
| PL:JTAG + AXI GPIO | 单向量;5 次中位数 | 1,202,241 μs | 0.000852 MMAC/s |
| PL:AXI DMA | 批量 256;100 次中位数 | 5.838 μs | 175.394 MMAC/s |
| PL 双 MAC 核心上限(计算值) | 512 周期,不含传输 | 5.120 μs | 200 MMAC/s |
以上均为 1024 维 INT8 向量。CPU、GPIO 和 DMA 行的延迟都是端到端实测;DMA 行采用批量 256,并按向量数折算。核心上限不含 DMA 启动、DDR 访问和软件轮询。
AXI DMA 批量对比
| 每次传入向量数 | NumPy 延迟 / 向量 | NumPy 吞吐率 | PL DMA 延迟 / 向量 | PL DMA 吞吐率 | PL 相对 NumPy |
|---|---|---|---|---|---|
| 1 | 25.669 μs | 39.892 MMAC/s | 187.628 μs | 5.458 MMAC/s | 0.14× |
| 4 | 13.940 μs | 73.457 MMAC/s | 47.195 μs | 21.697 MMAC/s | 0.30× |
| 16 | 15.202 μs | 67.358 MMAC/s | 16.270 μs | 62.939 MMAC/s | 0.93× |
| 64 | 14.409 μs | 71.067 MMAC/s | 7.796 μs | 131.357 MMAC/s | 1.85× |
| 128 | 14.455 μs | 70.842 MMAC/s | 6.484 μs | 157.918 MMAC/s | 2.23× |
| 256 | 14.670 μs | 69.802 MMAC/s | 5.838 μs | 175.394 MMAC/s | 2.51× |
结果说明
结果一致
DMA 板测覆盖 8、31 和 1024 维,结果与 NumPy 一致。1024 维模式支持一次传入多个向量并连续返回结果。
单次传输不占优势
批量 1 时,PL 延迟为 187.628 μs,NumPy 为 25.669 μs。批量达到 64 后,DMA 启动和轮询开销被摊薄,PL 才开始快于 NumPy。
资源与时序
DMA overlay 使用 2869 LUT、3732 个寄存器和 2 个 BRAM Tile;PL 时钟 100 MHz,WNS 为 0.139 ns。
测试范围
这些数据只说明 INT8 点积在当前软硬件和批量条件下的表现,不代表完整文本向量检索。平方范数、余弦相似度、Top-K 和 PS 侧轻量向量模型不在本次测试范围内。