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

Contenu supprimé Contenu ajouté
Fukovv (discussion | contributions)
m Petite corrections
Ligne 17 :
==Le processeur de commandes==
 
Le pilote de la carte graphique envoie des '''commandes''' à la carte graphique, commandes qui sont gérées par le '''processeur de commandes'''. Certaines de cesCes commandes vont demanderdemandent à la carte graphique d'effectuer une opération 2D, d'autresou une opération 3D, etou d'autresencore unele opérationrendu concernant ld'accélérationune vidéo.
 
===Les commandes graphiques===
* Certaines commandes servent essentiellement à faire du rendu 2D.
* D'autres commandes servent pour l'affichage 3D : afficher une image à partir de paquets de vertices, ou préparer le passage d'une image à une autre.
* Certaines commandes servent pour l’accélération des vidéos.
* Et d'autres servent pour la synchronisation avec le CPU (on verra cela plus tard).
 
Les commandes graphiques en question varient beaucoup selon la carte graphique. Les commandes sont régulièrement revues et chaque nouvelle architecture a quelques changements par rapport aux modèles plus anciens. Des commandes peuvent apparaitre, d'autres disparaitre, d'autre voient leur fonctionnement légèrement altéré, etc. Mais dans les grandes lignes, on peut classer ces commandes en quelques grands types. Les commandes les plus importantes s'occupent de l'affichage 3D : afficher une image à partir de paquets de vertices, préparer le passage d'une image à une autre, changer la résolution, etc. Plus rare, d'autres commandes servent à faire du rendu 2D : afficher un polygone, tracer une ligne, coloriser une surface, etc. Sur les cartes graphiques qui peuvent accélérer le rendu es vidéos, il existe des commandes spécialisées pour l’accélération des vidéos. Enfin, d'autres commandes servent pour la synchronisation avec le CPU (on verra cela plus tard).
Vous vous demandez à quoi peuvent bien ressembler ces commandes. Prenons les commandes de la carte graphique AMD Radeon X1800.
 
VousPour vousdonner demandezquelques àexemples, quoiprenons peuvent bien ressembler cesles commandes. Prenons les commandes2D de la carte graphique AMD Radeon X1800.
Voici les commandes 2D :
 
{|class="wikitable"
Ligne 70 ⟶ 67 :
|}
 
===Parallélisme et synchronisation avec le CPU===
 
Sur les cartes graphiques modernes, le commandprocesseur processorde commandes peut démarrer une commande avant que les précédentes soient terminées. Par exemple, il est possible d’exécuter une commande ne requérant que des calculs, en même temps qu'une commande qui ne fait que faire des copies en mémoire. Toutefois, cette parallélisation du commandprocesseur de processorcommandes a un désavantage : celui-ci doit gérer les synchronisations entre commandes.
 
===Synchronisation avec le CPU===
 
Avec un processeur de commande gérant le parallélisme, celui-ci doit gérer les synchronisations entre commandes. Par exemple, imaginons que Direct X décide d'allouer et de libérer de la mémoire vidéo. Direct X et Open GL ne savent pas quand le rendu de l'image précédente se termine. Comment éviter d'enlever une texture tant que les commandes qui l'utilisent 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. 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. 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 commandtampon bufferde commandes 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.