来自主机应用的所有 XRT 相关操作均通过 OpenCL API 调用或 XRT API 调用来进行自动追踪以供剖析之用。但您也可以对超出 XRT 相关事件范围的主机应用进行剖析,即,基于用户指定的操作或事件来捕获事件数据。
该功能可提供两种类型的定制剖析:
- 用户范围
- 对某一范围内指定的代码开始/结束时间进行剖析。这样即可捕获主机应用中发生某项操作的时间段。
- 用户事件
- 在时间线中标记某一事件。在发生用户事件的任意时间点,将其添加到时间线波形中。
user_range
和 user_event
数据均可捕获到Profile Summary(剖析汇总)报告和Timeline Trace(时间线轨迹)报告中,以便显示在 Vitis 分析器内。如下图所示,Profile Summary显示了给定事件的发生次数和范围。“User Ranges”(用户范围)表还可报告主机代码中用户定义的范围的“Min/Max/Avg/Total”(最小/最大/平均/总计)持续时间。在Timeline Trace(时间线轨迹)报告中,主机代码中的 user_range
元素单独显示在一行中,user_event
标记则被添加到时间线上的各特定时间点上。
图 1. 剖析汇总 - 用户范围
使用定制剖析需要对主机应用源代码和构建进程进行些许更改。您必须在代码中使用 C 或 C++ API(如下所述),并且链接主机应用时,必须包含 xrt_coreutil
库。
- C/C++ API 如下所述,但也可通过以下 URL 获取:https://github.com/Xilinx/XRT/blob/master/src/runtime_src/core/include/experimental/xrt_profile.h。
- 对于 C 和 C++,您必须添加:
#include experimental/xrt_profile.h
- 链接主机代码时,请将
-lxrt_coreutil
添加到编译器命令行中。
提示: 如需获取
user_range
和 user_event
的示例,请参阅以下主机代码:https://github.com/Xilinx/Vitis_Accel_Examples/blob/master/host/debug_profile/src/host.cpp。