要启动 vitis_analyzer
以查看 XRT 流程中的剖析信息,请使用以下命令。
vitis_analyzer xrt.run_summary
要启动 vitis_analyzer
以查看 XSDB 流程中的剖析信息,请使用以下命令。
vitis_analyzer aie_trace_profile.run_summary
heat_map 核指标与 conflicts 存储器指标的示例
下图显示了 heat_map
指标和存储器冲突时间所涵盖的设计活动时间、停滞时间、累积指令计数和 vector_instruction_count,以及对应设计示例的十个拼块的 conflicts
指标的累积存储器错误时间。
以位于 (24,2) 的 AI 引擎为例。停滞时间 (.043 ms) 为活动时间 (.214 ms) 的 20%。在此活动时间期间,它会执行 179200 条矢量指令,占活动时间的 95%。这表示性能卓越,即核的最优化十分有效。
stalls 核指标与 dma_locks 存储器指标的示例
下图显示了 stalls
指标和累积 DMA 活动时间所涵盖的设计存储器停滞时间、串流停滞时间、级联停滞时间和锁定停滞时间,以及对应设计示例的十个拼块的 dma_locks
指标的累积 DMA 锁定计数。
在核 (24,2) 上,DMA 已保持活动达 70.645 ms(7780 万条指令),但发生 298 次停滞。这并非表示在 298 条指令中发生停滞,因为每次停滞都可能持续多个时钟周期。
execution 核指标与 conflicts 存储器指标的示例
下图显示了 execution
指标和存储器冲突时间所涵盖的设计累积指令计数、矢量指令计数、加载指令计数和存储指令计数,以及对应设计示例的十个拼块的 conflicts
指标的累积存储器错误时间。
核 (24,2) 存在某些存储器冲突,虽然这些只是次要冲突,但也必须明确。这些冲突较为罕见,原因可能是因为存在某些 DMA 或某些其它内核访问干扰。
stream_put_get 核指标与 dma_stalls_s2mm 存储器指标的示例
下图显示了 stream_put_get
指标和 s2mm channel0 停滞时间所涵盖的设计串流读取指令计数、级联读取指令计数和级联写入指令计数,以及对应设计示例的十个拼块的 dma_stalls_s2mm
指标的 s2mm channel1 停滞时间。
此 graph 显示核 (25,1) 将 3% 的时间用于写入级联串流。(24,1) 读取该级联串流所用的时间与写入时间相同。
heat_map 核指标与 dma_locks 存储器指标的示例
下图显示了 heat_map
指标和累积 DMA 活动时间所涵盖的设计活动时间、停滞时间、累积指令计数和 vector_instruction_count,以及对应设计示例的十个拼块的 dma_lock
指标的累积 DMA 锁定计数。
累积 DMA 活动时间与累积 DMA 锁定计数相结合即可便于您查看在锁定获取数量与通过 DMA 传输的数据量之间是否存在任何不一致。锁定计数的相对数量同样可用于解读每个核的相对迭代次数。
input_bandwidths 接口指标的示例
下图显示了 8 x 8 级联拼块设计内的 input_bandwidths:0
指标所涵盖的 PLIO 级设计输入带宽。
在此 graph 中,所有输入 PLIO 的通道 0 带宽约为 95%,接近可达成的最大值。经此剖析步骤后,请验证 AI 引擎并未发生数据匮乏。
Vitis 分析器中的报告整合
在剖析阶段,运行时期间无法同时使用所有指标。您可通过重启开发板来多次运行硬件中的设计,每次运行都使用 xrt.ini
中的不同剖析指标集。通常对于 AI 引擎接口带宽剖析,运行时期间可剖析一条通道(对于所有 PLIO 都是如此)。要进行多通道剖析,需多次运行。
vitis_analyzer
能够对涉及同一设计的不同运行轮次的多份报告进行整合。举例来说,这样您即可显示多条接口通道的带宽。虽然 vitis_analyzer
是搭配设计的特定运行的 xrt.run_summary
来运行的,但仍可通过单击主工具栏和窗口工具栏中的 + 来打开其它 xrt.run_summary
报告,如下所示。
为输入 PLIO 通道 0 和 4 及输出 PLIO 通道 0 整合剖析数据后,vitis_analyzer
即可显示下表: