了解 Versal 自适应 SoC 中的存储器层级的重要意义在于帮助您判定:
- 需解决的问题的范围。
- 不同引擎之间的数据通信方式以及可用带宽。
- 如何利用每个 AI 引擎中可用的原始计算来为应用提供最佳单位功耗性能(如适用)。
不同类型的应用根据其部署环境,有不同的存储器层级。例如,某些应用具有外部 DDR 存储器需求,其他应用使用诸如 JESD 等接口来从离散模数转换器 (ADC) 引入数据。无论数据源自何处,构建正确的存储器层级以满足系统需求都至关重要。
例如,在需要外部 DDR 存储器的系统中,只能以指定速率从 DDR 存储器获取数据。因此,最大带宽针对系统为固定值。例如,在 Versal 自适应 SoC 中,每个存储器控制器到 NoC 的最大 LPDDR 存储器带宽约为 34 GB/s。
来自 DDR 存储器的数据可通过 NoC 在整个自适应 SoC 内移动。对于 AI 引擎,可通过 AI 引擎阵列接口中的 NoC 接口拼块 (tile) 直接访问 AI 引擎阵列。但带宽相对较低,因此这可能并非将输入导入 AI 引擎拼块的最佳途径。
在大部分情况下,由于 Versal 器件中有大量片上存储器可用,因此数据应通过 NoC 导入 PL 中的多阶段存储器(例如,UltraRAM 和/或块 RAM)。然后,由于从 PL 进出 AI 引擎阵列的带宽要高得多,因此使用 PL 接口阵列拼块来将数据传入和传出 AI 引擎。
某些应用可能要求在 DDR 存储器到 NoC 再到 AI 引擎之间进行直接通信。此通信方式虽然可行,但可用总体带宽较低。因此,对于大部分应用,建议使用 NoC 通过 PS 或任何主控制器来对通信进行调试、追踪和控制。
包含 AI 引擎阵列的器件在每个 AI 引擎拼块内还包含本地数据存储器。每个拼块都有 8 个数据存储体,每个存储体均为 4 KB,总计每个拼块 32 KB。每个 AI 引擎核均可在本地直接访问相同 AI 引擎拼块上的数据存储器以及相邻拼块上的 3 个数据存储器(例如,北、南以及东或西侧)。这样每个拼块都有 128 KB 本地共享存储器。
含 AI 引擎机器学习阵列的器件可包含额外的行,其中含有 512 KB 存储器拼块,用于提供低时延的本地存储器存储空间。
下图显示了 VC1902 可用存储器总量。对于 Versal AI Core 器件,请参阅 Versal AI Core 系列产品选型指南(XMP452)。
数据通信是实现高效设计的关键,使用 AI 引擎阵列时尤其如此。因此,必须了解往来 AI 引擎的数据带宽以及各 AI 引擎间内部数据带宽才能对设计进行高效分区。欲知详情,请访问此链接以参阅 Versal 自适应 SoC AI 引擎架构手册(AM009) 中的相应内容。
对称 FIR、卷积神经网络 (CNN) 或波束成形等功能之间有些数据复用(例如,系数和权重共享)。对于此类功能,您可以降低存储器带宽,并使用串流广播功能来向多个 AI 引擎拼块发送相同的权重或系数。具有大量数据复用的应用也适合在 AI 引擎中实现。在单一拼块上的大型滤波器实现中,窗口接口更适合数据复用。
下图显示了数据通过 Versal 自适应 SoC 进入 AI 引擎阵列的数据流示例,其中包含一些通过器件进行数据映射时需要考量的重要带宽数值。
使用此数据流示例时,根据您的应用详细信息,有些必须考量的注意事项。将数据从 DDR 存储器导入 PL 中的多阶段存储器(例如,UltraRAM)的方式取决于要传输的数据量、存储器控制器吞吐量、NoC 带宽以及存储器大小。
将数据载入 UltraRAM 后,PL 中可能需要数据排序或预处理阶段。假定无需这些阶段,那么数据需进入 AI 引擎以供处理。此数据流阶段内主要需要关注的是通过 AI 引擎阵列接口的带宽以及 AI 引擎阵列内用于将数据传输至必要拼块的带宽。
在 AI 引擎中要解决的问题范围取决于 AXI4‑Stream 带宽和 AI 引擎拼块与阵列中的数据存储器大小。