Improving thermally bound applications
When under a high processing load, high-end smartphones and tablets can produce more heat than they can dissipate. If such a load is prolonged, the device starts to throttle its performance to avoid overheating, reducing CPU and GPU performance until a thermally-sustainable level is reached. To maintain smooth gameplay and a consistent frame rate, you should aim to make efficient use of the available CPU, GPU, and memory bandwidth to avoid pushing the device into a thermally unsustainable performance requirement.
When a device is thermally bound, optimizing any workload, even if it is not the highest load, will improve the thermal situation. You should review the following areas:
- DRAM access is very power intensive, costing approximately 100pJ per byte for LPDDR4. Aim to reduce the number of memory accesses per frame. To do this:
- Reduce the resolution of render passes, and use narrower attachment color formats.
- Use simpler meshes with reduced vertex count and attribute precision
- Use texture compression and mipmapping.
- For CPU processing, Arm-based devices often use multiple different CPU designs, using big.LITTLE or DynamIQ technology. These designs mix “big” cores, which have high performance, and “LITTLE” cores, which are slower but much more energy efficient. When thermally bound you should aim to get as much work as possible running on the "LITTLE" cores, by using a mixture of optimization and multi-threading.
- For GPU processing, reduce the precision of computation in shaders;
mediumpuses half the energy per operation of a