How GPU Async Shaders Prevent Stalls in Hardware Benchmarks
This article explains how GPU asynchronous shader execution prevents pipeline stalls during demanding hardware benchmarks. By abandoning strict sequential processing, asynchronous execution allows a graphics card to run rendering and compute tasks simultaneously. This concurrency fills idle hardware gaps, maximizes processor utilization, and ensures stable frame times when benchmarking complex 3D scenes.
Understanding the GPU Pipeline Stall
In traditional rendering architectures, GPUs process tasks in a single, sequential queue. The graphics card must finish rendering Task A before it can begin Task B.
During a complex benchmarking scene, the GPU is bombarded with varied workloads, such as heavy geometry calculations, lighting, physics simulations, and post-processing effects. Not all of these tasks use the entire GPU. For example, generating a shadow map might heavily utilize the rasterization engine while leaving the compute shader cores completely idle.
When these shader cores sit waiting for the current task to finish before they can start the next one, a "pipeline stall" or "bubble" occurs. The hardware is bottlenecked not by its maximum capacity, but by inefficient scheduling.
The Mechanics of Asynchronous Shader Execution
Asynchronous shader execution (often referred to as Async Compute) solves this bottleneck by breaking the single processing line into multiple independent queues. Typically, modern APIs like DirectX 12 and Vulkan divide workloads into three main categories:
- Graphics Queue: Handles standard rendering tasks like geometry and pixel shading.
- Compute Queue: Handles non-traditional rendering tasks like physics, artificial intelligence, and lighting calculations.
- Copy Queue: Manages data transfers across system and video memory.
Modern GPUs feature dedicated hardware schedulers that monitor these queues in real time. When the scheduler detects that a graphics task is only using 60% of the GPU's shader cores, it immediately pulls a task from the compute queue to utilize the remaining 40% of the hardware.
Pairing Workloads in Complex Scenes
Benchmarking software intentionally stresses hardware by layering multiple complex effects into a single frame. Asynchronous shader execution prevents stalls in these scenarios by pairing workloads that require different parts of the GPU.
- Depth-Only Passes and Compute: While the GPU is rendering depth passes (which require minimal shader power), the hardware scheduler can simultaneously run compute shaders to calculate particle physics or global illumination.
- Memory-Bound vs. Math-Bound Tasks: If one shader task is stalled waiting to fetch texture data from VRAM, the GPU does not freeze. Instead, it instantly switches context to execute a math-heavy shader task that already has its data loaded in the cache.
- Post-Processing Overlap: Instead of waiting for a frame to be completely rendered before applying post-processing effects like motion blur or ambient occlusion, the GPU can begin computing these effects for the current frame while simultaneously starting the geometry rendering for the next frame.
Why It Matters in Hardware Benchmarking
Synthetic benchmarks, such as 3DMark Time Spy, are specifically designed to saturate the GPU pipeline to measure a card's absolute peak performance.
Without asynchronous shader execution, a complex benchmark scene would cause constant micro-stutters and erratic frame times as the GPU repeatedly stalls and restarts its pipeline. By dynamically interweaving tasks, async execution smooths out these frame time spikes. It ensures that the benchmark is measuring the true raw computational power of the silicon, rather than measuring how long the GPU spends waiting on itself to finish sequential tasks.