阶段 2:系统剖析 - 2023.2 简体中文

AI 引擎工具和流程用户指南 (UG1076)

Document ID
UG1076
Release Date
2023-12-04
Version
2023.2 简体中文

此阶段的目标是剖析设计并判定是哪个域(AI 引擎、PL 或 NoC)导致吞吐量下降从而导致设计停滞。

下图显示了此阶段中可用的任务和技巧。

图 1. 系统剖析

以下章节列出了此阶段可用的技巧。

剖析 AI 引擎核、接口和存储器模块

您可在 XRT 或 XSDB 流程中剖析 AI 引擎核、接口和存储器模块。这属于非侵入性功能特性,可在运行时使用 XRT.ini 文件或者在 XSDB 中运行脚本来启用。该功能特性使用 AI 引擎阵列中可用的性能计数器来收集剖析数据。收集的数据量和类型受到可用的性能计数器数量的限制。

表 1. AI 引擎指标
AI 引擎指标
heat_map 用于剖析处于活动和停滞状态的矢量指令以及累积指令时间。这些指标表明 AI 引擎的效率,不仅包括代码效率(矢量指令)也包括与存储器和串流的交互。
stalls 用于剖析存储器、串流、锁定和级联停滞数。这些指标允许对 heat_map 指标集检测到的停滞的原因进行更深入的分析。
execution 用于剖析矢量的加载和存储指令时间。您可利用这些指标来判定内核代码的效率。
floating-point 用于剖析浮点异常。如果您当前使用浮点算法,那么这些指标会高亮显示代码中发生的异常。
aie_trace 用于剖析 AI 引擎和存储器模块追踪码字计数和停滞计数。使用时间追踪功能特性时,该指标十分适合用于判定追踪串流中是否存在拥塞。
write_bandwidths 用于剖析串流写入、级联写入和停滞时间。该指标可表明串流和级联输出的效率。如果存在大量停滞,则表明计算图中的下一个内核无法以足够快的速度来耗用数据,这可能影响设计吞吐量。
read_bandwidth 用于剖析串流读取、级联读取和停滞时间。该指标可表明串流和级联输入的效率。如果存在大量停滞,则表明计算图中的上一个内核无法以足够快的速度来提供数据,这可能影响设计吞吐量。
表 2. 存储器模块指标
存储器模块指标
conflicts 用于剖析存储器冲突和存储器错误。当两个存储器区块驻留在相同存储体内,并且供相同 AI 引擎(使用两个读取端口)访问或者供两个不同 AI 引擎访问时,就会发生存储器冲突。可能的解决方案是将这些存储器的位置约束到不同 bank。为了获取有关哪个 bank 导致这些冲突的更多详细信息,应对来自仿真(AI 引擎仿真)的事件进行分析,或者应在硬件中执行事件追踪。
dma_locks 用于剖析两个 DMA 上的锁定活动。4 条 DMA 通道(2xS2MM 和 2xMM2S)均由缓冲器描述符 (BD) 来驱动。“Cumulative DMA Activity”是由于所有通道上存在已停滞的锁定获取事件而导致耗费的时间的计数。所有这些 DMA 事件将帮助您了解穿过器件的部分连接速度低于期望速度的原因。
dma_stalls_s2mm 用于剖析 s2mm 通道上由于锁定获取冲突而导致的 DMA 停滞。如有 s2mm DMA 发生停滞,则表明访问目标存储器时存在冲突。原因可能是因为有另一个 s2mm 或 mm2s DMA 正在访问同一个 bank,或者内核正在执行存储器访问,导致锁定获取冲突。
dma_stalls_mm2s 用于剖析 mm2s 通道上由于锁定获取冲突而导致的 DMA 停滞。如有 mm2s DMA 发生停滞,则表明访问源存储器时存在冲突。原因可能是因为有另一个 s2mm 或 mm2s DMA 正在访问同一个 bank,或者内核正在执行存储器访问,导致锁定获取冲突。
write_bandwidths 用于剖析 s2mm DMA 所使用的带宽。这允许您评估是否能达到带宽目标。
read_bandwidths 用于剖析 mm2s DMA 所使用的带宽。这允许您评估是否能达到带宽目标。
表 3. 接口拼块指标
接口拼块指标
input_bandwidths 用于剖析除停滞和空闲时间之外的输入 PLIO 通道带宽。如果输入带宽过低,原因可能是停滞率过高,这也就意味着 AI 引擎阵列未能以正确的速率耗用样本。请继续执行 AI 引擎事件追踪(阶段 4)。原因也可能是空闲率过高,这表明设计的 PL 侧无法按正确的速率生成样本。继续执行 PL 内核分析(阶段 3)。
output_bandwidths 用于剖析除停滞和空闲时间之外的输出 PLIO 通道带宽。如果输出带宽过低,原因可能是空闲率过高,这也就意味着 AI 引擎阵列未能以正确的速率生产样本。请继续执行 AI 引擎事件追踪(阶段 4)。原因也可能是停滞率过高,这表明设计的 PL 侧无法按正确的速率耗用样本。继续执行 PL 内核分析(阶段 3)。
packets 用于剖析输入包和输出包的数量

您可多次运行设计,并在每次运行之间以 xrt.ini 文件中的不同参数来重新启动开发板。Vitis IDE 允许您整合不同 xrt.run.summary 文件报告,以便您总览接口级别的各项带宽、停滞和空闲。

如需了解有关在硬件中启用剖析和解释结果的详细信息,请参阅 AI 引擎剖析

剖析结果允许您快速精确识别设计性能下降中所涉及的 AI 引擎、输入串流或输出串流。

下一阶段:

  • 如果您判定 PL 内核当前导致性能下降,请继续执行阶段 3。在阶段 3 中,您可以精确识别性能不达标的 PL 内核。
  • 如果您判定 AI 引擎内核当前导致吞吐量下降,请继续执行阶段 4。