PowerVR Graphics SDK tools explained: Profiling a render with PVRTune

This blog post is about PVRTune, the PowerVR hardware performance analysis tool included in the PowerVR Graphics SDK.

Profiling a render with PVRTune_1

PVRTune collects performance data in real-time to get a very detailed view of what is the GPU doing (again, in real time). This helps you identify the bottlenecks in your render, regardless of how obscure they might be.

Further recommended reading

I would definitely recommend you to check my quick start guide for Android: PVRTune Quick Start Guide for Android. Also, you can look into installing PVRMonitor as it packs some of the PVRTune functionality listed below.

Profiling a render with PVRTune_2

Overview

PVRTune is divided in two components:

  • PVRPerfServer: A daemon that runs on the PowerVR device. It retrieves the GPU performance data and sends it over the network
  • PVRTune GUI: A GPU profiling tool that runs on a Linux, Mac OS or Windows computer. It connects to the device through PVRPerfServer and displays the GPU performance data in a comprehensive way

It allows us to:

  • Capture the FPS (total and per-PID)
  • Capture timing data (GPU timing events)
  • Capture hardware loads
  • Capture the CPU load
  • Capture the memory transfers (GPU memory upload)

If we combine it with PVRTrace recording libraries we can also:

  • Capture API call timing data
  • Capture software counters
  • Override the render state

About the data itself

Profiling a render with PVRTune_3

The data is exposed at the driver level by the PVRScopeServices. For more details on the data itself please check my earlier  PVRScope Stats blog post.

The data shown by PVRTune varies slightly from device to device even though all the core hardware counters and timing data stats are common.

Profiling a render with PVRTune_4

All the loads, counters and timing events are explained in the PVRTune User Manual. On Series5 hardware you should definitely keep an eye for:

  • CPU Load

The percentage of time that the CPU is busy. The value is the average load across all CPU cores.

  • GPU Task Load: TA 

The load of the “TA core”. This includes USSE (Universal Scalable Shader Engine) vertex processing, TA (Tile Accelerator) processing and related stall time.

  • GPU Task Load: 3D

The load of the “3D core”. This includes ISP (Image Synthesis Processor), TSP (Texture and Shading Processor), USSE (Universal Scalable Shader Engine) fragment processing and related stall time

  • USSE Load: Pixel

Percentage of time that the USSE (Universal Scalable Shader Engine) has spent processing pixels.

  • USSE Load: Vertex 

Percentage of time that the USSE (Universal Scalable Shader Engine) has spent processing vertices.

Which platforms are supported?

All Linux and Android PowerVR devices are compatible with PVRTune. This includes all commercial Android devices, regardless of OS or GPU driver version. It just works out of the box.

Conclusion

This has been a short intro to PVRTune. I intend to get into more details on the following blog posts where I am going to describe the UI with more detail.

For an overview of the PowerVR Graphics SDK 3.2, check out this blog post we’ve written at launch. Make sure you follow us on Twitter (@PowerVRInsider) for the latest news and announcements from the PowerVR Developer Technology team.

, , , , ,