XRT provides the xrt::aie::profiling class to support event profiling.
XRT Event Profile APIs are recommended for hardware flows to obtain accurate,
absolute throughput and latency measurements.
In hardware
emulation (hw_emu), these APIs are functionally
supported for trend analysis (for example, comparing design iterations to assess
relative improvements or regressions). However, because hw_emu executes on QEMU (untimed) and uses abstracted
memory/interconnect models, measurements are not cycle-accurate and should not be
used for absolute performance claims. Timing deviations are larger when designs use
GMIO or external memory paths (DDR/LPDDR). Always validate absolute performance on
hardware.
The XRT API header file xrt/xrt_aie.h defines class xrt::aie::profiling to support event profiling. The xrt::aie::profiling class member functions start, read, and stop are used to start profiling, read profiling
results, and stop profiling.
enum class profiling_option : int
{
io_total_stream_running_to_idle_cycles = 0,
io_stream_start_to_bytes_transferred_cycles = 1,
io_stream_start_difference_cycles = 2,
io_stream_running_event_count = 3
};
The start
function has the following
parameters:
int start(profiling_option option, const std::string& port1_name, const std::string& port2_name, uint32_t value) const; //meaning of value depends on option.
An example host code to use XRT API to profile follows:
#include "xrt/xrt_aie.h"
......
auto ghdl=xrt::graph(device,uuid,"gr");
xrt::aie::profiling handle(device);
handle.start(xrt::aie::profiling::profiling_option::io_stream_start_to_bytes_transferred_cycles, "gr.dataout", "", output_size_in_bytes);
......
long long cycle_count = handle.read();
handle.stop();For more information about PS host coding and compilation, see
Programming the PS Host Application.