Jawed
Legend
I suspect that the preemption referred to in that article is what Windows (10) does. I suspect this is a brute force kind of preemption which is asking the driver to "wipe the slate clean". So while a compute task is shown taking over in this case, it could, equally, be another graphics task. That could explain the "compute submission isn't allowed to ramp until the graphics portion goes to zero." aspect of this. Which would look to the driver (at least, perhaps the hardware too?) like what silent_guy is alluding to: a mass of in-GPU state has to be protected from the new task, which has free reign.It's possibly not just the shaders in the preemption case, since the compute submission isn't allowed to ramp until the graphics portion goes to zero.
I think there are multiple definitions of "preempt" that are probably in contention here.The command processor has run ahead an unknown number of commands in the queues, in-flight state changes, the order of them, barriers, and pending messages to and from the rest of the system need to be resolved.
Graphics state rollovers have a similar drain, but not necessarily every change does that. I wonder how that interacts with a graphics preemption, or if the state changes that significant are the ones that restrict concurrency among graphics wavefronts in the first place.
It's just prioritisation of work in the queue, surely. Only asynchronous shaders can go in this queue and it's just turning up their priority to 11.I'm curious if the quick response queue can really guarantee that kind of resource ramp, or the floor value for graphics utilization. Does having that mode on mean the driver or GPU is quietly reserving wavefront slots away from one function or the other to make sure they are available?