Evolving Asynchronous Compute with the Quick Response Queue
Todays graphics engines provide many opportunities to take advantage of asynchronous compute, but some tasks can still struggle to reach peak benefit because they dont explicitly know when the graphics card has started executing new work. In these cases, we can resolve the problem by guaranteeing to the game engine that a task will start and end in a certain amount of time.
In order to meet this requirement, these time-critical tasks must be given higher priority access to processing resources than other tasks.
One way to accomplish this is through the use of preemption, which works by temporarily suspending all other GPU tasks until the high-priority task can be completed. However, preemption often causes costly time delays as the old tasks are wound down before the new one is started; this can potentially manifest as undesirable stuttering in games.
Instead, the Polaris architecture supports another method for handling time-critical tasks called the Quick Response Queue (QRQ). Tasks submitted to this queue get preferential treatment from GPU resources, while running asynchronously, so they can overlap with other workloads. The game developer can even control how, when, and how much of the GPU is being used by a QRQ task through a hardware component of the Polaris architecture called the Hardware Scheduler (HWS).