Profiling is a form of dynamic program analysis that measures the input/output throughput, the space (memory), time complexity of a program, the usage of specific instructions, or the frequency and duration of function calls. Most commonly, profiling information serves to aid program optimization, and more specifically, performance tuning.
You can obtain profiling data when you run your design in simulation or in hardware at run-time. Analyzing this data helps you gauge the efficiency of the kernels, the stall and active times associated with each AI Engine, and pinpoint the AI Engine kernel whose performance might not be optimal. This also allows you to collect data on design latency, throughput, and bandwidth by using run-time event APIs in your PS host code.
You have two options to gather this information; the first option is built on top of the second option.
- Use event APIs to profile the AI Engine graph inputs and outputs from the graph host application. This feature can be used in simulation and hardware flows.
- Use performance counters built into the hardware to monitor AI Engine and memory module events. This feature can only be used in hardware.