DirectX 12 expose les files d'attente de commandes pour les graphiques (appelés "directs"), les tâches de calcul ou de copie. En termes de fonctionnalités fournies, chacune est un super-ensemble de la suivante. La spécification stipule que les files d'attente de commandes peuvent être exécutées simultanément par le périphérique. Cependant, l'API ne limite en aucune façon le nombre de files d'attente de commandes (du moins je ne connais aucune limitation).
Apparemment, différents fournisseurs gèrent cela très différemment:
- Intel déclare dans une récente présentation (diapositive 23) qu'actuellement leurs GPU ne sont pas capables de gérer Graphics & Compute en parallèle et que le moteur de copie a un faible débit. Ils déconseillent l'utilisation de plusieurs files d'attente graphiques / de calcul.
- AMD a commencé il y a longtemps à annoncer l'utilisation de files d'attente / "shaders asynchrones" à partir de Mantle et des consoles gen actuelles. Il existe également certains développeurs ( exemple ) qui confirment des gains de performances significatifs en exécutant des tâches de calcul et graphiques en parallèle.
- Il y a eu récemment une agitation à propos de Nvidia ne supportant pas shaders asynchrone dans le matériel: l' utilisation de graphiques séparés et la file d' attente Compute au semble une fois pour rendre les choses plus lent qui indique l' émulation du pilote. Les opérations de copie parallèle, en revanche, sont prises en charge par CUDA depuis très longtemps, ce qui montre clairement que le moteur DMA peut fonctionner indépendamment.
Existe-t-il un moyen de décider au moment de l'exécution s'il est significatif de valider des CommandLists dans plusieurs CommandQueues au lieu d'une seule? (étant donné que l'ancien cas n'implique pas beaucoup de frais généraux d'ingénierie)
Bien que je puisse facilement voir comment il est utile d'effectuer des opérations de mémoire parallèlement aux opérations de calcul / graphiques, il me semble inutilement compliqué d'exécuter plusieurs processus de calcul et graphiques en parallèle (à moins qu'il n'y ait aucun avantage majeur en termes de performances). Je ne vois pas non plus comment cela peut conduire à de bien meilleures performances de toute façon; sauf pour les cas pathologiques où de nombreuses petites tâches séquentielles ne sont pas en mesure de générer suffisamment de charge GPU.