« Les cartes graphiques/Le processeur de commandes » : différence entre les versions

Contenu supprimé Contenu ajouté
Ligne 76 :
===Synchronisation avec le CPU===
 
AvecSur unles cartes commandgraphiques buffermodernes, le processeur etde lacommandes cartepeut graphiquedémarrer une commande avant que les précédentes soient terminées. Par exemple, il est possible d’exécuter une commande ne fonctionnentrequérant pasque audes calculs, en même rythmetemps qu'une commande qui ne fait que faire des copies en mémoire. Toutefois, etcette celaparallélisation posedu problèmesprocesseur de commandes a un désavantage : celui-ci doit gérer les synchronisations entre commandes. Par exemple, imaginons que Direct X et Open Gl décidentdécide d'allouer ouet de libérer de la mémoire vidéo pour les textures ou les vertices. Or, Direct X et Open Gl ne savent pas quand le rendu de l'image précédente se termine. Mais commentComment éviter d'enlever une texture de la mémoire tant que les commandes qui l'utilisent celle-ci ne sont pas terminées ? Ce problème ne se limite pas aux textures, mais vaut pour tout ce qui est placé en mémoire vidéo. De manière générale, Direct X et Open Gl doivent savoir quand une commande se termine.
 
De manière générale, Direct X et Open Gl doivent savoir quand une commande se termine. Un moyen pour éviter tout problème serait d'intégrer les données nécessaire à l'exécution d'une commande dans celle-ci : par exemple, on pourrait copier les textures nécessaires dans chacune des commandes. Mais cela gâche de la mémoire, et ralentit le rendu à cause des copies de textures. UneLes autrecartes solutiongraphiques estrécentes incorporent des '''commandes de synchronisation''' : les fences. Ces fences vont empêcher le démarrage d'utiliserune desnouvelle commande tant que la carte graphique n'a pas fini de traiter toutes les commandes qui serventprécèdent àla synchroniserfence. Pour gérer ces fences, le command buffer contient des registres, qui permettent au processeur etde lesavoir GPU :la carte graphique en est dans l’exécution de la commande.
 
Les cartes graphiques récentes incorporent des commandes de synchronisation : les '''fences'''. Ces fences vont empêcher le démarrage d'une nouvelle commande tant que la carte graphique n'a pas fini de traiter toutes les commandes qui précèdent la fence. Pour gérer ces fences, le command buffer contient des registres, qui permettent au processeur de savoir où la carte graphique en est dans l’exécution de la commande. Un autre problème provient du fait que les commandes se partagent souvent des données, et que de nombreuses commandes différentes peuvent s'exécuter en même temps. Or, si une commande veut modifier les données utilisées par une autre commande, il faut que l'ordre des commandes soit maintenu : la commande la plus récente ne doit pas modifier les données utilisées par une commande plus ancienne. Pour éviter cela, les cartes graphiques ont introduit des '''instructions de '''sémaphore''', qui permettent à une commande de bloquer tant qu'une ressource (une texture) est utilisée par une autre commande.
 
{|class="wikitable"