AI 引擎存储器 - 2022.1 简体中文

AI 引擎内核编码 最佳实践指南 (UG1079)

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

每个 AI 引擎都有 16 KB 的程序存储器,允许存储 1024 条 128 位指令。AI 引擎指令位宽为 128 位(最大值),支持多指令格式和可变长度指令,以减小程序存储器大小。位于经最优化的内层循环之外的众多指令均可使用更短的格式。

每个 AI 引擎拼块 (tile) 都有 8 个数据存储体,其中每个存储体(单个 bank)均为一个 256 码字 x 128 位的单端口存储器(总计 32 KB)。每个 AI 引擎均可访问其东西南北四向的相邻拼块中的存储器,总计 128 KB 数据存储器(包括其本身的数据存储器)。栈是数据存储器的子集。栈大小和堆大小的默认值为 1 KB。如果最优化级别大于 0(对于 aiecompilerxlopt>=1),那么堆大小可由编译器自动进行计算和调整。栈大小和堆大小可使用源代码中的编译器选项或者约束来更改。如需了解有关栈和堆大小用法的更多信息,请参阅 Versal ACAP AI 引擎编程环境用户指南 (UG1076)

按逻辑表示法,128 KB 存储器可视作为单个连续 128 KB 块或 4 个 32 KB 块,每个块均可拆分为 4 个奇数 bank 或偶数 bank。通过将一个偶数 bank 和一个奇数 bank 交织即可构成一个双 bank。位于 AI 引擎阵列边缘的 AI 引擎可能所含相邻 bank 较少,相应的可用存储器也较少。

每个存储器端口均以 256 位/128 位矢量寄存器模式运行或者以 32 位/16 位/8 位标量寄存器模式来运行。256 位端口是由奇偶配对的存储体创建的。8 位和 16 位存储是作为读取 - 修改 - 写入指令来实现的。如果每个端口都访问不同 bank,那么支持全部 3 个端口并发操作。

存储器中存储的数据采用小字节序格式。

每个 AI 引擎都有一个 DMA 控制器,此控制器拆分为 2 个独立模块,S2MM 用于将串流数据存储到存储器(32 位数据),MM2S 则将存储器内容写入串流(32 位数据)。S2MM 和 MM2S 都有两条独立的数据通道。