AI 引擎拼块架构 - 2022.1 简体中文

Versal ACAP AI 引擎编程环境 用户指南 (UG1076)

Document ID
UG1076
Release Date
2022-05-25
Version
2022.1 简体中文

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 规范的基本构建块。
图 1. AI 引擎拼块模块框图

下图显示的是单个 AI 引擎的架构。

图 2. AI 引擎

每个 AI 引擎都是一个超长指令字 (VLIW) 处理器,其中包含一个标量单元、一个矢量单元、两个加载单元和一个存储单元。主要的算力由矢量单元提供。矢量单元包含一个定点单元(含 128 个 8 位定点乘法器)和一个浮点单元(含 8 个单精度浮点乘法器)。在浮点与定点矢量单元之间共享矢量寄存器和置换网络。峰值性能取决于操作数所使用的数据类型的大小。下表提供了矢量处理器通过每条指令可执行的 MAC 运算数量。

表 1. 矢量数据路径的受支持的精度位宽
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 * 1 GHz 时钟频率 = 32 Giga 次 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 位,支持多指令格式和可变长度指令,以减小程序存储器大小。位于经最优化的内层循环之外的众多指令均可使用更短的格式。