AI 引擎阵列由二维 AI 引擎拼块 (tile) 阵列构成,其中每个 AI 引擎拼块均包含一个 AI 引擎、存储器模块和拼块互连模块。AI 引擎拼块概览如下图所示。
- AI 引擎
- 每个 AI 引擎都是一个超长指令字 (VLIW) 处理器,其中包含一个标量单元、一个矢量单元、两个加载单元和一个存储单元。
- AI 引擎拼块
- 每个 AI 引擎拼块都包含一个 AI 引擎、一个本地存储器模块,搭配多条通信路径以促进拼块间的数据交换。
- AI 引擎阵列
- AI 引擎阵列是指 AI 引擎拼块的完整二维阵列。
- AI 引擎程序
- AI 引擎程序包含以 C/C++ 编写的数据流 graph 规范。该程序是使用 AI 引擎工具链来编译并执行的。
- AI 引擎内核
- 内核是使用 AI 引擎矢量数据类型和内部函数以 C/C++ 编写的。这些函数均为 AI 引擎上运行的计算函数。内核构成数据流 graph 规范的基本构建块。
下图显示的是单个 AI 引擎的架构。
每个 AI 引擎都是一个超长指令字 (VLIW) 处理器,其中包含一个标量单元、一个矢量单元、两个加载单元和一个存储单元。主要的算力由矢量单元提供。矢量单元包含一个定点单元(含 128 个 8 位定点乘法器)和一个浮点单元(含 8 个单精度浮点乘法器)。在浮点与定点矢量单元之间共享矢量寄存器和置换网络。峰值性能取决于操作数所使用的数据类型的大小。下表提供了矢量处理器通过每条指令可执行的 MAC 运算数量。
X 操作数 | Z 操作数 | 输出 | MAC 数 |
---|---|---|---|
8 real | 8 real | 48 real | 128 |
16 real | 8 real | 48 real | 64 |
16 real | 16 real | 48 real | 32 |
16 real | 16 complex | 48 complex | 16 |
16 complex | 16 real | 48 complex | 16 |
16 complex | 16 complex | 48 complex | 8 |
16 real | 32 real | 48/80 real | 16 |
16 real | 32 complex | 48/80 complex | 8 |
16 complex | 32 real | 48/80 complex | 8 |
16 complex | 32 complex | 48/80 complex | 4 |
32 real | 16 real | 48/80 real | 16 |
32 real | 16 complex | 48/80 complex | 8 |
32 complex | 16 real | 48/80 complex | 8 |
32 complex | 16 complex | 48/80 complex | 4 |
32 real | 32 real | 80 real | 8 |
32 real | 32 complex | 80 complex | 4 |
32 complex | 32 real | 80 complex | 4 |
32 complex | 32 complex | 80 complex | 2 |
32 SPFP | 32 SPFP | 32 SPFP | 8 |
要计算给定数据路径的最大性能,需要将每条指令的 MAC 数量乘以 AI 引擎内核的时钟频率。例如,对于 16 位输入矢量 X 和 Z,矢量处理器每条指令可执行 32 次 MAC 运算。使用最慢速度等级的时钟频率即可得到:
大多数情况下,每条指令 32 次 MAC 运算仍是理论上限,因为要实现的算法无法连续使用 AI 引擎的完整能力,或者可能受到 I/O 带宽的约束。
与对 AI 引擎读取和写入数据以进行计算相关的主要 I/O 接口包括:数据存储器接口、串流接口和级联串流接口。如需获取完整的接口列表,包括程序存储器接口和调试接口,请参阅 Versal ACAP AI 引擎架构手册(AM009)。
- 数据存储器接口会看到一个连续的存储器,它由全部四个方向的多个数据存储器模块组成,总容量为 128 KB。AI 引擎具有两个 256 位宽的加载单元和一个 256 位宽的存储单元。
- AI 引擎具有两个 32 位输入 AXI4-Stream 接口和两个 32 位输出 AXI4-Stream 接口。其中每个串流都允许 AI 引擎在每 4 个时钟周期内执行一次 128 位访问,或者在每个周期内执行一次 32 位宽的访问。
- 来自单个 AI 引擎的 384 位累加器数据可转发至相邻 AI 引擎,方法是使用级联串流接口构成一条接口链。级联串流接口是单向接口,其方向取决于 AI 引擎所在的行。在输入串流和输出串流上各有一个深度为 2 的小型 384 位宽 FIFO,允许在 AI 引擎之间存储最多 4 个值。链式 AI 引擎可在每个周期内发送和接收 384 位。
AI 引擎上的程序存储器大小为 16 KB,即允许存储 1024 条 128 位指令。AI 引擎指令位宽均为 128 位,支持多指令格式和可变长度指令,以减小程序存储器大小。位于经最优化的内层循环之外的众多指令均可使用更短的格式。