DirectX 12 expone las colas de comandos para gráficos (llamados "directos"), tareas de cómputo o copia. En términos de funcionalidad proporcionada, cada uno es un superconjunto del siguiente. La especificación establece que el dispositivo puede ejecutar colas de comandos simultáneamente. Sin embargo, la API no limita el número de colas de comandos de ninguna manera (al menos no conozco ninguna limitación).
Aparentemente, diferentes proveedores manejan esto muy diferente:
- Intel declara en una presentación reciente (diapositiva 23) que actualmente sus GPU no pueden manejar Gráficos y Computación en paralelo y que el motor de copia tiene un rendimiento débil. No recomiendan el uso de múltiples gráficos / colas de cómputo.
- AMD comenzó hace mucho tiempo a anunciar el uso de colas / "sombreadores asíncronos" a partir de Mantle y las consolas de generación actuales. También hay algunos desarrolladores ( ejemplo ) que confirman ganancias de rendimiento significativas al ejecutar tareas de cómputo y gráficos en paralelo.
- Recientemente ha habido un escándalo acerca de que Nvidia no sea compatible con el sombreador asíncrono en el hardware: el uso de gráficos y cola de cómputo separados a la vez parece hacer las cosas más lentas, lo que indica la emulación del controlador. Las operaciones de copia paralela, por otro lado, han sido respaldadas por CUDA durante mucho tiempo, lo que deja en claro que el motor DMA puede funcionar de forma independiente.
¿Hay alguna manera de decidir en tiempo de ejecución si es significativo enviar CommandLists a múltiples CommandQueues en lugar de una sola? (dado que el caso anterior no involucra mucha sobrecarga de ingeniería)
Si bien puedo ver fácilmente cómo es útil realizar operaciones de memoria paralelas a las operaciones de cómputo / gráficos, me parece innecesariamente complicado ejecutar múltiples procesos de cómputo y gráficos en paralelo (a menos que no haya un beneficio de rendimiento importante). Tampoco está claro para mí, cómo esto puede conducir a un rendimiento significativamente mejor de todos modos; excepto en casos patológicos donde muchas tareas secuenciales pequeñas no pueden generar suficiente carga de GPU.