您可通过在自己的 PS 主机代码中调用事件 API 来收集设计的剖析统计数据。这些事件 API 在仿真期间以及在硬件中运行设计时均可用。
AI 引擎具有硬件性能计数器,可通过配置来对硬件事件进行计数,以测量性能指标。您可将事件 API 与 graph 控制 API 搭配使用,在 graph 执行的受控时间段内剖析某些性能指标。事件 API 仅支持平台 I/O 端口 (PLIO & GMIO) 以测量各项性能指标,如平台 I/O 端口带宽、graph 吞吐量和 graph 时延。
事件 API 会追踪跨 AI 引擎到 PL 接口的信号线的串流交换机上发生的事件。信号线的串流交换机上的事件包括 idle
、running
和 stall
,如下图所示。
图 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 引擎仿真流程、硬件仿真流程和硬件流程中使用。