AMD has been building Asynchronous Compute Engines (ACEs) since the Radeon 7970. Until very recently, the possibility to use these ACEs has been very limited, and were previously only for computing workloads (like rendering, or other compute only tasks). Now AMD is working on how to use these asynchronous shaders for more than simply compute based tasks because DirectX 12 is the reason why they now can be used. In DirectX 11, the way graphics are rendered meant that API is simply not suited to asynchronous shading.
- Command Queue: The individual commands that make up the command stream.
- Command Stream All the commands that need to be rendered/completed.
- Command Queue Switching: Switching from one command queue to another to try to finish tasks faster. (This is a mixed bag as to whether it makes the task get completed faster or slows it down, but always adds overhead)
DirectX 11 uses a type of processing that has command queue switching, which leads to overhead, lack of prioritization, and never fully utilizing the GPU. Also in DirectX 11 is pre-emption, a way to make some tasks be processed faster than other tasks. The problem with the utilization of this in DirectX 11 is that the higher priority tasks suspend all other tasks while the prioritized task is being processed which led to overhead, slower rendering and is not very efficient.
Since DirectX 11 is heavily serial based and it does not support the type of rendering DirectX 12 can, it is not nearly as good at rendering graphics. This is because DirectX 12 has support for asynchronous shading, where DirectX 11 does not. In asynchronous shading, multiple command queues can be processed eliminating much of the overhead that DirectX 11 had, and at the same time DirectX 12 also supports pre-emption and prioritization, so it is backwards compatible. On AMD’s new GPUs, DirectX 12 and asynchronous shading is very well supported, with 2 to 8 ACEs per GPU (depending on the model).
Nvidia has yet to reveal whether their GPUs will support asynchronous shading, but since Nvidia cards support DirectX 12 it is probably safe to assume that the GPUs will support it. Perhaps there will be a real competition with this generation of GPUs between AMD and Nvidia cards, which will be great for the consumers, as well as great for innovation of technologies!