事件追踪构建流程如下所示。
- 使用
--event-trace
和其它相应的标志来编译 graph。用于事件追踪的 AI 引擎编译器命令示例如下所示:
aiecompiler --verbose --pl-freq=100 --workdir=./myWork \ --event-trace-port=gmio --event-trace=runtime \ --num-trace-streams=1 --xlopt=0 --include="./" \ --include="./src" --include="./src/kernels" --include="./data" \ ./src/graph.cpp
注释:- 前述示例演示了使用
--event-trace=runtime
配置编译设计的操作。该选项可用于配置 AI 引擎在运行时期间捕获的事件的类型。 -
--event-trace-port=gmio
选项使用 GMIO 来捕获事件追踪数据。该选项使用 AI 引擎到 NoC 事件追踪路径。替代方法是使用 PLIO,它使用 AI 引擎到 PL 路径来捕获事件追踪数据。此方法使用编程逻辑资源捕获从 AI 引擎到 DDR 的数据。 - 赛灵思建议使用 gmio 选项作为 event-trace-port(事件追踪端口)配置。该选项使用 AI 引擎到 NoC 事件追踪路径。这样即可避免使用编程逻辑资源,并避免由于 PL 资源使用而导致的时序错误。
- GMIO = AI 引擎 NoC 事件路径。GMIO 是默认事件追踪端口配置。
- PLIO = AI 引擎到 PL 事件追踪路径,此外还使用 PL 资源来捕获追踪数据。
- 前述示例演示了使用
- 使用 Vitis 编译器来编译和链接设计。
编译 AI 引擎 graph 应用后,必须构建系统的其它要素,如 使用 Vitis 工具流程来集成应用 中所述。在 libadf.a 文件中从 AI 引擎编译器启用
--event-trace
后,由 Vitis 编译器生成的系统硬件会包含为 PS 应用编译的 ELF 文件、为 AI 引擎处理器编译的 ELF 文件以及 PL 的 XCLBIN 文件。这些都是在硬件上运行系统所需的要素。 - 完成链接并创建器件二进制文件后,运行 Vitis 编译器
--package
步骤即可创建启动器件所需的 sd_card 文件夹和文件,如 封装 中所述。此步骤会对为系统构建BOOT.BIN
文件所需的所有一切进行封装。为器件封装启动文件时,还必须指定--package.defer_aie_run
以伴随 ELF 文件一起加载 AI 引擎应用,但等待至graph.run
发出指令后再运行该应用,如 graph 执行控制 中所述。aiecompiler --event-trace
选项具有一项功能特性,您可使用runtime
实参编译自己的设计以捕获数据。您可使用该选项来编译 AI 引擎 graph,对其进行设置用于事件追踪,并指定要在运行时捕获的剖析数据的类型:functions
、functions_partial_stalls
和functions_all_stalls
。因此,您无需重新编译设计以捕获不同类型的数据。使用该功能特性可以减少重新编译 graph 和重新封装设计的需求。表 1. 预定义的事件追踪级别中支持的事件 事件类型 预定义的事件追踪级别 functions
functions_partial_stalls
functions_all_stalls
函数调用/返回 已捕获 已捕获 已捕获 串流停滞 不适用 已捕获 已捕获 级联停滞 不适用 已捕获 已捕获 锁定停滞 不适用 已捕获 已捕获 存储器停滞 不适用 不适用 已捕获 - 函数调用/返回
- 调用和返回内核函数时生成的事件。
- 串流停滞
- 当核停滞时生成的事件。停滞原因可能是输入处无数据或者串流输出处存在来自核的反压。
- 级联停滞
- 当核停滞时生成的事件。停滞原因可能是输入处无数据或者串流输出处存在来自核的反压。
- 锁定停滞
- 如果由于当前正在获取锁定而导致核停滞,则会生成此类事件。
- 存储器停滞
- 如果由于存储器冲突导致核停滞,则会生成此类事件。