# GPU Load and Utilization

**URL:** <https://forums.imgtec.com/t/gpu-load-and-utilization/3977>\
**Category:** PowerVR Insider\
**Created:** [July 16, 2024, 1:42pm UTC](https://forums.imgtec.com/t/gpu-load-and-utilization/3977 "2024-07-16T13:42:53Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Subbu](https://avatars.discourse-cdn.com/v4/letter/s/a88e57/32.png) [@Subbu](https://forums.imgtec.com/u/Subbu)\
**Post date:** [July 16, 2024, 1:42pm UTC](https://forums.imgtec.com/t/gpu-load-and-utilization/3977/1 "2024-07-16T13:42:53Z")

</div>

Hi PowerVR Team,

We are working on an embedded platform with Imagination’s GE7800 GPU and dual ARM Cortex A57 CPU. The ARM core runs linux OS. We are using PVRTuneDeveloper in order to profile the GPU. We are trying to obtain the GPU load or utilization for a specified use case. In order to do that, we are looking at the following:

1. Renderer Active and Tiler Active percentages
2. Render Time and Tiler Time

Are there any other counters that we can consider? Also, in our profiling we can see that a number of the tiler and renderer tasks are overlapped. However the above mentioned counters do not take overlap into account. Given this scenario, what is the best way to obtain a GPU load or utilization value?

Thanks and regards,  
Subramanya.

---

<div class="post-metadata">

**Author:** ![AlejandroC](https://avatars.discourse-cdn.com/v4/letter/a/97f17d/32.png) [@AlejandroC](https://forums.imgtec.com/u/AlejandroC)\
**Post date:** [July 19, 2024, 10:22am UTC](https://forums.imgtec.com/t/gpu-load-and-utilization/3977/2 "2024-07-19T10:22:47Z")

</div>

Hi Subbu,

For your first question:

- Renderer Active and Tiler Active percentages show whether there are any Renderer or Tiler tasks in the GPU, being it a binary GPU counter. This means, if a small workload is sent to the GPU, those counters will show _100%_ which does **not** show realistically how busy the GPU is.
- I would recommend to follow the counters below:  
_Processing load: pixel_: % of time the Shader Processor is busy shading fragments.  
_Processing load: vertex_: % of time the Shader Processor is busy shading vertices.  
_Processing load: compute_: % of time the Shader Processor is busy processing compute kernels (in case your application has compute).  
I would also recommend watching the counter _GPU memory interface load_, to know how busy the GPU is in terms of bandwidth reads and writes from the system.

For your second question:

- GPU counters are linked to specific parts of the GPU. In the case of Tiler and Renderer tasks being run at the same time, those counters will overlap, as they refer to different parts of the GPU.
- There is not a specific GPU counter that can give a global utilization value. You will need to interpret those counters. For example if you have an application with no compute workloads, you could consider adding the counters _Processing load: pixel_ + _Processing load: vertex_ and divide by 2 to have rough idea that can express how busy the GPU is. In an ideal application with no bottlenecks which manages to utilize each part of the GPU to the maximum and is balanced, this number would be close to 100%. Another case could be to take maximum of both, max(_Processing load: pixel_, _Processing load: vertex_) which gives a more realistic value on how much one of the parts of the GPU is being utilized.

Best regards,  
Alejandro
