用于 graph 输入和输出的事件剖析 API - 2022.1 简体中文

Versal ACAP AI 引擎编程环境 用户指南 (UG1076)

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

您可通过在自己的 PS 主机代码中调用事件 API 来收集设计的剖析统计数据。这些事件 API 在仿真期间以及在硬件中运行设计时均可用。

AI 引擎具有硬件性能计数器,可通过配置来对硬件事件进行计数,以测量性能指标。您可将事件 API 与 graph 控制 API 搭配使用,在 graph 执行的受控时间段内剖析某些性能指标。事件 API 仅支持平台 I/O 端口 (PLIO & GMIO) 以测量各项性能指标,如平台 I/O 端口带宽、graph 吞吐量和 graph 时延。

事件 API 会追踪跨 AI 引擎到 PL 接口的信号线的串流交换机上发生的事件。信号线的串流交换机上的事件包括 idlerunningstall,如下图所示。

图 1. 信号线上的事件
  • 如果没有数据经过串流交换机,则串流交换机处于 idle 状态。
  • 如有数据经过串流交换机,则串流交换机处于 running 状态。
  • 当信号线上的所有 FIFO 都已满时,串流交换机处于 stall 状态。
  • 当数据传输恢复时,串流交换机会返回 running 状态。

以下 graph 显示了从 mm2s PL 内核发送到 AI 引擎的数据示例。它还显示了 graph 将数据从 AI 引擎发送到 s2mm PL 内核的过程。

图 2. graph 示例

不同端口可经过相同的 AI 引擎到 PL 接口列,并共享接口中的性能计数器。您可检查 Vitis 分析器中的 array 视图,查看这些端口布线经过的列。下图显示了以上示例的 array 视图,请注意,红色圆圈中的串流交换机就是事件 API 正在监控的部分。

图 3. 阵列视图示例
注释:
  • 当 graph 已完成初始化后,AI 引擎中的输入缓冲器 buf0 即已准备好接受来自 mm2s PL 内核的数据。一旦 mm2s PL 内核启动,它将按顺序填满连接到 buf0 的串流交换机内的乒乓缓冲器和 FIFO。往来这些缓冲器传输的数据不依赖于 graph.run()
  • AI 引擎到 PL 接口的每个列都具有两个性能计数器。由于性能计数器数量有限,event::stop_profiling() 可用于释放性能计数器。
  • 调用 graph 和剖析 API 时都存在一些开销。剖析结果可使用 event::read_profiling() 来读取。如果在 event::read_profiling() 前不停止性能计数器,那么可能产生不同的剖析结果。
重要: 这些 API 可在 AI 引擎仿真流程、硬件仿真流程和硬件流程中使用。