High Efficiency on Mobile

One of the main draws of Vulkan for mobile and embedded platforms is its efficiency. OpenGL ES proved to be very demanding of the driver to perform, which resulted in graphics applications being bottlenecked by the CPU. This is one of the most obvious effects of having a high CPU overhead in a graphics API, as it imposes a maximum draw call throughput on various platforms.

Vulkan can achieve a larger amount of draws per frame thanks to the removal of run-time validation, ability to create command buffers on multiple CPU threads, and explicit control over buffer synchronisation, making it more likely that the bottleneck will be the GPU rather than the CPU. Well-written applications can batch more work per draw, avoiding the worst effects of the CPU bottleneck. However, this is not always the case; even if it can be avoided, each draw call may still perform unnecessary work.

Figure 1: Gnome Horde CPU Usage: Vulkan (left) and OpenGL ES (right)