« Les cartes graphiques/Les processeurs de shaders » : différence entre les versions

m
aucun résumé des modifications
mAucun résumé des modifications
mAucun résumé des modifications
==Le jeu d'instruction des processeurs de shaders==
 
Les processeurs de shaders peuvent effectuer le même calcul sur plusieurs vertices ou plusieurs pixels à la fois. On dit que ce sont des processeurs parallèles, à savoir qu'ils peuvent faire plusieurs calculs en parallèle dans des unités de calcul séparées. LesSuivant processeursla parallèlescarte sontgraphique, on peut les classer en trèsdeux nombreuxtypes, maissuivant tousla sontmanière dont ils exécutent des processeursinstructions diten parallèle : les processeurs SIMD et les processeurs VLIW. Avant d'expliquer à quoi correspondent ces deux termes, sachez juste que nousl'usage allonsde voirprocesseurs VLIW dans lales sectioncartes suivante,graphiques àest quelquesanecdotique. exceptionsIl prèsa dontexisté nousdes reparleronscartes graphiques AMD assez anciennes qui utilisaient des processeurs de type VLIW, mais ce n'est plus tarden odeur de sainteté de nos jours. NousSi parleronson omet cette exception, les processeurs de shaders sont tous des processeurs SIMTSIMD dansou des dérivés (la sectiontechnique surdites ladu microarchitectureSIMT est une sorte de SIMD amélioré).
 
====Processeurs SIMD====
Trouver suffisamment d’instructions indépendantes d'une lecture dans un shader n'est donc pas une chose facile. Les améliorations au niveau du compilateur de shaders des drivers peuvent aider, mais la marge est vraiment limitée. Pour trouver des instructions indépendantes d'une lecture en mémoire, le mieux est encore d'aller chercher dans d'autres shaders… Sans la technique qui va suivre, chaque shader correspond à un programme qui s’exécute sur toute une image. Avec les techniques de multi-threading matériel, chaque shader est dupliqué en plusieurs copies indépendantes, des threads, qui traitent chacun un morceau de l'image. Un processeur de shader peut traiter plusieurs threads, et répartir les instructions de ces threads sur l'unité de calcul suivant les besoins : si un thread attend la mémoire, il laisse l'unité de calcul libre pour un autre.
 
====SIMT====
 
Les processeurs plus récents fonctionnent comme des processeurs SIMD au niveau de l'unité de calcul, mais ce fonctionnement est masqué au niveau du jeu d'instruction. Ces processeurs poussent la logique des threads jusqu'au bout : chaque instance de shader (thread) ne manipule qu'un seul pixel ou vertex. Ces threads sont rassemblés en groupes de 16 à 32 threads qui exécutent la même instruction, en même temps, mais sur des pixels différents. En clair, ces processeurs vont découvrir à l’exécution qu'ils peuvent exécuter la même instruction sur des pixels différents, et fusionner leurs instructions en instructions vectorielles. L'instruction vectorielle née de cette fusion est appelée un warp. On parle de '''Single Instruction Multiple Threads'''.
 
Chaque thread se voit attribuer un Program Counter, des registres, et un identifiant qui permet de l'identifier parmi tous les autres. Un circuit spécialisé fusionne les pixels des threads en vecteurs qu'il distribue aux unités de calcul. Sur certaines cartes graphiques récentes, le processeur peut démarrer l'exécution de plusieurs warps à la fois. Il faut noter que si un branchement ne donne pas le même résultat dans différents threads d'un même warp, le processeur se charge d'effectuer la prédication en interne : il utilise quelque chose qui fait le même travail que des instructions de prédication qui utilisent vector mask register. Dans ce cas, chaque thread est traité un par un par l'unité de calcul. Ce mécanisme se base sur une pile matérielle qui mémorise les threads à exécuter, dans un certain ordre.
 
{{NavChapitre | book=Les cartes graphiques
40 957

modifications