Frames Overview

The Intel® GPA enables you to use the Frame API to insert calls to the desired places in your code and analyze performance per frame, where frame is the time period between frame begin and end points. When Frames are displayed in Intel® GPA Platform Analyzer, they are displayed in a separate track, so they provide a way to visually separate this data from normal task data.

You can run the frame analysis to:

  • Analyze game applications using DirectX* calls or other renders.
  • Analyze graphical applications performing repeated calculations.

  • Analyze transaction processing on a per transaction basis to discover input cases that cause bad performance.

To analyze frames in your application:

  1. Use Frame API to insert calls in your code and compile the application.
  2. Launch your application using the Intel® GPA Monitor and create a trace capture file.
  3. Open the trace capture file with the Intel® GPA Platform Analyzer and view the results.

Frames represent a series of non-overlapping regions of Elapsed time. Frames are global in nature and not connected with any specific thread. Intel GPA provides a set of APIs that enable analyzing code frames and presenting the analysis data in the product viewpoints.

Guidelines for Frame API Usage

  • Use the Frame API to denote the frame begin point and end point. Consider a frame as the time period between frame begin and end points.
  • If there are consecutive __itt_frame_begin_v3 calls in the same domain, treat it as a __itt_frame_end_v3/__itt_frame_begin_v3 pair.
  • Recursive/nested/overlapping frames for the same domain are not allowed.
  • The __itt_frame_begin_v3() and __itt_frame_end_v3() calls can be made from different threads.
  • The recommended maximum rate for calling the Frame API is 1000 frames per second. A higher rate may result in large product memory consumption and slow finalization.

Usage Example

The following example uses the Frame API to capture the Elapsed times for the specified code sections.

#include “ittnotify.h”

__itt_domain* pD = __itt_domain_create(L”My Domain”);

for (int i = 0; i < getItemCount(); ++i)

{

  __itt_frame_begin_v3(pD, NULL);

  do_foo();

  __itt_frame_end_v3(pD, NULL);

}

__itt_frame_begin_v3(pD, NULL);

do_foo_1();

__itt_frame_end_v3(pD, NULL);

__itt_frame_begin_v3(pD, NULL);

do_foo_2();

__itt_frame_end_v3(pD, NULL);

  

Frames Overview