Forums - CPU + GPU not busy?

3 posts / 0 new
Last post
CPU + GPU not busy?
zforest
Join Date: 25 Apr 17
Posts: 2
Posted: Tue, 2017-08-22 18:47

I profile a game on a powerful device such as Galaxy S8. I see

 

GPU utilization is 10 to 12%

GPU Clock shoots up to 89M either once every few seconds or few times per second. Rest is 0%

CPU utilization is 20 to 30%

And 

EGL->FPS swings from 13 to 47 wildly. 

 

GPU and CPU both seem not very busy so I can't conclude if CPU or GPU bound. Yet FPS varies a lot. How should I interpret this? 

  • Up0
  • Down0
guanning79
Join Date: 28 Aug 17
Posts: 1
Posted: Thu, 2017-08-31 05:39
We are facing the very same problem here.
When the last frame ends rendering, there are always dozens of milliseconds that GPU does nothing before the next frame starts. And at the same time, CPU was also not busy.
FPS varies a lot.
 
Does anyone have any ideas about how to figure out what's happening?

 

  • Up0
  • Down0
Carlos Dominguez Moderator
Join Date: 27 Jul 15
Location: San Diego
Posts: 110
Posted: Thu, 2017-08-31 11:35

FPS on Snapdragon Profiler will give you an instantaneous measure of the projected FPS between frames which increases variance as it's not implicitly accumulated or averaged. I would recommend smoothing it out with a simple moving average located in the metric settings icon on the graph track.

Per-process CPU % utilization considers the utilization across all cores. If the device you are using has a 4 core Snapdragon processor then the ~25% CPU utilization mentioned above might mean that you are probably indeed maxing 1/4th of the available cores but there's still 3 cores theoretically available that can be used (the other ~75%). This is a common behavior for single threaded CPU bound applications. I recommend doing a 'Trace' capture with the 'CPU Scheduling' metric enabled to see how your threads are executing across the cores. If the assumption I made earlier about a single thread maxing one core is true, you should see your main thread potentially context switching between cores but always executing in one continous line and the rest of the cores might have 'empty' spaces were CPU's were idle.

Also in 'Trace' capture you can enable the per-process 'Rendering Stages' metric which will give you the time spent on the GPU by your application. If you see many big 'gaps' in the data that means the GPU was either doing something else(unlikely) or most likely idling, hence not GPU bound.

  • Up0
  • Down0
or Register

Opinions expressed in the content posted here are the personal opinions of the original authors, and do not necessarily reflect those of Qualcomm Incorporated or its subsidiaries (“Qualcomm”). The content is provided for informational purposes only and is not meant to be an endorsement or representation by Qualcomm or any other party. This site may also provide links or references to non-Qualcomm sites and resources. Qualcomm makes no representations, warranties, or other commitments whatsoever about any non-Qualcomm sites or third-party resources that may be referenced, accessible from, or linked to this site.