存储器和数据移动 - 2023.2 简体中文

Versal 自适应 SoC 系统和解决方案规划方法指南 (UG1504)

Document ID
UG1504
Release Date
2023-11-15
Version
2023.2 简体中文

了解 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)

图 1. Versal 自适应 SoC AI Core 系列中的片上存储器层级
注释: AI 引擎阵列存储器总量为 32 KB 乘以器件上的 AI 引擎拼块数量。例如,VC1902 包含 400 个拼块。因此,AI 引擎阵列存储器总量(32 KB 乘以 400)等于 12.8 MB。

数据通信是实现高效设计的关键,使用 AI 引擎阵列时尤其如此。因此,必须了解往来 AI 引擎的数据带宽以及各 AI 引擎间内部数据带宽才能对设计进行高效分区。欲知详情,请访问此链接以参阅 Versal 自适应 SoC AI 引擎架构手册(AM009) 中的相应内容。

图 2. 通过 Versal 自适应 SoC 的通信带宽

对称 FIR、卷积神经网络 (CNN) 或波束成形等功能之间有些数据复用(例如,系数和权重共享)。对于此类功能,您可以降低存储器带宽,并使用串流广播功能来向多个 AI 引擎拼块发送相同的权重或系数。具有大量数据复用的应用也适合在 AI 引擎中实现。在单一拼块上的大型滤波器实现中,窗口接口更适合数据复用。

下图显示了数据通过 Versal 自适应 SoC 进入 AI 引擎阵列的数据流示例,其中包含一些通过器件进行数据映射时需要考量的重要带宽数值。

图 3. 进入 AI 引擎的数据流示例

使用此数据流示例时,根据您的应用详细信息,有些必须考量的注意事项。将数据从 DDR 存储器导入 PL 中的多阶段存储器(例如,UltraRAM)的方式取决于要传输的数据量、存储器控制器吞吐量、NoC 带宽以及存储器大小。

将数据载入 UltraRAM 后,PL 中可能需要数据排序或预处理阶段。假定无需这些阶段,那么数据需进入 AI 引擎以供处理。此数据流阶段内主要需要关注的是通过 AI 引擎阵列接口的带宽以及 AI 引擎阵列内用于将数据传输至必要拼块的带宽。

AI 引擎中要解决的问题范围取决于 AXI4‑Stream 带宽和 AI 引擎拼块与阵列中的数据存储器大小。