All XRT related actions from the host application are automatically tracked for profiling, through either theOpenCL API calls, or the XRT API calls. However, you can also profile the host application beyond the XRT related events, capturing event data based on user-specified actions or events.
- User range
- Profiles the specified start/end times across a range of code. This captures the span of time within which an action occurs in the host application.
- User events
- Marks an event in the timeline. The user event is added to the timeline waveform at whatever point in time it occurs.
The user_range
and user_event
data can be captured to the Profile Summary and Timeline Trace reports for display in Vitis analyzer. As seen in the figure below, the
Profile Summary shows the
number of occurrences of a given event and the range. The User Ranges table also reports
the Min/Max/Avg/Total duration of the user-defined ranges in the host code. In the
Timeline Trace report
user_range
elements in the host code are displayed
in a separate row, and user_event
markers are added at
specific points on the timeline.
Using custom profiling requires a few changes in your host application
source code and build process. You must make use of C or C++ API in your code, as
described below, and you must include the xrt_coreutil
library when linking your host application.
- The C/C++ API are described below, but can also be found at the following URL: https://github.com/Xilinx/XRT/blob/master/src/runtime_src/core/include/experimental/xrt_profile.h.
- For both C and C++ you must add the following:
#include experimental/xrt_profile.h
- When linking host code, add
-lxrt_coreutil
to the compiler command line.
user_range
and user_event
can be seen in the host code at https://github.com/Xilinx/Vitis_Accel_Examples/blob/master/host/debug_profile/src/host.cpp.