3. AI张量模块与DSP块对比
在 Agilex 系列 FPGA 中,AI 张量模块(Tensor Block)与 DSP 块(Variable Precision DSP Block)是两类承担乘加运算的核心硬核资源。它们并非互相替代的关系,而是面向不同计算形态设计的两种引擎:张量模块为高吞吐、低精度的矩阵乘累加而生,DSP 块则为灵活、高精度、可级联的标量与向量运算而生。理解二者的结构差异、精度支持范围与负载划分原则,是后续做架构映射与资源分配的前提。
一、张量模块:面向矩阵乘法的脉动阵列结构
Agilex 的 AI 张量模块本质上是一个可配置的脉动阵列(Systolic Array),其基本运算单元是乘法累加器(MAC),但组织方式与 DSP 块完全不同。张量模块内部以二维网格形式排列 MAC,数据从阵列边缘按节拍逐级传递,每个 MAC 在每个时钟周期完成一次乘加并把部分和向相邻单元推进。这种结构的核心优势在于:一次数据加载可以驱动大量乘加运算,权重与激活值在阵列内被高度复用,从而把外部存储带宽压力降到最低。
以典型的 INT8 配置为例,一个张量模块可在单周期内完成数十至数百次 8 位乘加,并支持 INT4、INT8、FP16、BF16 等多种精度模式。当精度从 INT8 降到 INT4 时,同一硬件可容纳的乘法器数量翻倍,吞吐率随之提升;当切换到 FP16/BF16 时,吞吐率下降但保留浮点动态范围。这种“精度换吞吐”的特性,使张量模块特别适合卷积、全连接、Transformer 中的 QKV 投影与注意力矩阵乘法等规则、密集、可批处理的负载。
需要强调的是,张量模块的强项是“规整的矩阵运算”。它要求数据按特定分块(tile)方式组织,对非规则稀疏、逐元素操作、复杂控制流并不友好。若把这类负载硬塞进张量模块,往往因为填充(padding)和调度开销而得不偿失。
二、DSP 块:灵活可级联的乘法累加结构
DSP 块是 FPGA 中历史更久、通用性更强的运算单元。Agilex 的可变精度 DSP 块通常包含一个 18×19 或更大位宽的乘法器、一个预加器、一个 64 位累加器以及可选的流水线寄存器。其关键能力在于:乘法器位宽可拆分,例如一个 18×19 乘法器可拆成两个 9×9 乘法器并行使用,从而在低精度场景下提升利用率;同时多个 DSP 块可通过专用级联链(cascade)把部分和直接传给相邻块,无需经过通用布线,适合构建长抽头 FIR 滤波器、大位宽累加和矩阵运算。
DSP 块支持定点(INT)与浮点(FP)两种模式。定点模式下可配置为有符号/无符号、不同位宽组合;浮点模式下通常支持 FP16、BF16 甚至 FP32 的乘加。与张量模块相比,DSP 块单块吞吐低,但胜在灵活:可以逐拍改变操作数、支持非规则访问、便于实现复数乘法、CORDIC、坐标旋转、自适应滤波等控制密集或数据依赖强的算法。
三、精度支持与结构对比
下表从结构、精度、吞吐、适用负载四个维度对二者做对照,便于在架构设计时快速判断。
| 对比维度 | AI 张量模块 | DSP 块 |
|---|---|---|
| 基本结构 | 二维脉动阵列,MAC 网格 | 独立乘法器 + 预加器 + 累加器 |
| 数据复用 | 权重/激活在阵列内高度复用 | 依赖外部寄存器与级联链 |
| 精度模式 | INT4 / INT8 / FP16 / BF16 | INT4~INT27、FP16 / BF16 / FP32 |
| 单周期吞吐 | 高(数十至数百 MAC) | 低(1~2 MAC/块) |
| 级联能力 | 阵列内固定互连 | 专用 cascade 链,可跨块累加 |
| 典型负载 | 卷积、GEMM、注意力矩阵乘 | FIR、复数乘、CORDIC、控制密集运算 |
从精度角度看,张量模块的浮点支持集中在 FP16/BF16,适合推理与训练中的低精度加速;DSP 块则能覆盖到 FP32,适合对数值稳定性要求更高的场景。从吞吐角度看,张量模块在规则矩阵运算上可达到 DSP 块一个数量级以上的优势,但在非规则运算上可能反而不如 DSP 块高效。
四、负载划分的实践原则
在实际工程中,负载划分不是“二选一”,而是按算子特征做映射。以下给出一个可操作的判断流程,供架构设计时参考。
- 先看数据形态:若算子是卷积、全连接、矩阵乘等可表达为 GEMM 的规则运算,优先映射到张量模块;若算子包含逐元素、查表、条件分支、非规则索引,优先考虑 DSP 块或逻辑资源。
- 再看精度需求:推理场景若可接受 INT8/FP16,张量模块吞吐优势明显;若需要 FP32 累加或高动态范围,DSP 块更稳妥。
- 再看数据复用率:张量模块的收益来自权重与激活的复用。若某层权重很小、激活频繁变化,复用率低,张量模块的填充开销可能抵消吞吐优势,此时 DSP 块反而更经济。
- 最后看级联需求:需要长抽头累加、跨块部分和传递的运算(如大位宽 FIR),DSP 块的 cascade 链是天然优势;张量模块的阵列内互连固定,不适合这类拓扑。
五、一个简化的资源估算示例
假设某 Agilex 器件含 64 个张量模块和 2000 个 DSP 块。某推理任务中,卷积层总运算量为 2 GMAC(INT8),若张量模块在 INT8 下每模块每周期可完成 256 MAC,目标频率 500 MHz,则单模块吞吐为 128 GMAC/s。64 个模块理论峰值约 8192 GMAC/s,2 GMAC 的运算量在理想情况下约 0.24 ms 完成。若改用 DSP 块,每块每周期 1 MAC,2000 块在 500 MHz 下约 1000 GMAC/s,同样运算量约需 2 ms。这一数量级差异说明:规则矩阵运算应优先使用张量模块。
但若该任务中还有 0.1 GMAC 的复数乘法与自适应滤波,这部分若强行映射到张量模块,需要大量填充与重排,实际有效吞吐可能不足峰值的 20%;而映射到 DSP 块,2000 块中划出 200 块即可在约 0.1 ms 内完成,且实现简单、时序收敛容易。这就是“按算子特征划分”的实际价值。
总结来看,张量模块与 DSP 块的分工可以概括为:张量模块解决“规则、密集、低精度、高吞吐”的矩阵运算;DSP 块解决“非规则、控制密集、高精度、可级联”的乘加运算。架构设计的关键不是比较谁更强,而是把每一类算子放到它最擅长的引擎上,并在资源预算内取得吞吐、精度与实现复杂度的平衡。