I use Performance Advisor (PA) to optimize my game. By the way, in PA, I can set performance budgets, but I don't know how to set an appropriate level for some budgets.
For example, for GPU cycles budget case, I can calculate the absolute limit of GPU cost per frame for : GPU top frequency/Frame rate = Maximum GPU cycles per frame.
So what about shader-cycles-budget (Shader cycles per frame) and cpu-cycles-budget (CPU cycles per frame)? I don't know exactly what 'Shader cycles per frame' means, so I can't calculate the value, and mobile processor has multiple multi-core cpu, and the frequency is different.
Anyone know more about this?
It's hard to give specific values here to be honest - a suitable budget depends very heavily on target device and the content being run.
Your approach for setting that GPU cycle budget is a good starting point, but will give you the absolute maximum budget you can use. In reality you may want to aim below that "on average", so that small spikes in workload don't cause dropped frames. On high-end devices the max GPU frequency is also unlikely to be thermally sustainable.
For memory bandwidth aim for a total that keeps your game under ~4GB/s total bandwidth. If you are targeting higher frame rates then your per-frame budget will reduce, as that per-second budget gets split more ways.
The shader cycles give a more detailed breakdown of the workload inside the GPU for your rendering workload. You probably don't need a specific budget for these - if you break your GPU cycle budget these can give you hints about where the high workload is coming from.
Kind regards, Pete
Thank you so much for the good advice.Let me ask you one more thing.
Peter Harris said:For memory bandwidth aim for a total that keeps your game under ~4GB/s total bandwidth. If you are targeting higher frame rates then your per-frame budget will reduce, as that per-second budget gets split more ways.
Can I get the current total memory bandwidth (GB/s) using streamline capture data counters?
Performance Advisor will always show the per-frame numbers, so for budget setting take your target GB/s and divide it by your target FPS. E.g. if you are targeting 4GB/s at 30 FPS then your per-frame budget is (4*1024/30) = 136MB/frame.
You can see the bandwidth per second in the Streamline capture.
Highlight a 1 second range with the cross-section marker tool, and the message bubble will show you the total bandwidth.
I am using the G-78 template.Is External memory bandwidth the same as Mali Memory bandwidth? If so, does the sum of Output external read bytes and Output external write bytes mean Total Memory bandwidth?
If you apply the template in the Timeline too (not just counter configuration) you should get the same chart that I show above.
Peter Harris said:For memory bandwidth aim for a total that keeps your game under ~4GB/s total bandwidth.
Could you please explain why the 4GB limit is? Is there any article on this that I can refer to?
Your answers always help me a lot. Thank you!
A common entry-level memory system for mobile is capable of ~6.4GB/s (peak DRAM performance). DRAM performance drops a lot under high load, so under realistic usage you want to aim for ~60% of the peak performance. This gives the ~4GB/s target.
For high-end systems you have much faster DRAM performance (latest phones are often quoted with > 30GB/s). However accessing DRAM is very power hungry. A useful rule of thumb is ~80mW/GB/s for memory system+DRAM power, so 30GB/s is over 2 Watts of memory power. This is unlikely to be thermally sustainable. For these high-end systems you can definitely use more than 4GB/s, but < 8GB/s is still a very sensible target for energy efficiency reasons.
That's good advice I need.