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

Contenu supprimé Contenu ajouté
Ligne 79 :
[[File:Geforce 3 architecture vertex unit.PNG|centre|vignette|upright=2.0|Architecture d'un processeur de shaders avec accès aux textures.]]
 
==La microarchitecture des processeurs de shaders==
==Microarchitecture==
 
Outre le jeu d’instruction, la conception interne (aussi appelée microarchitecture) des processeurs de shaders possède quelques particularités idiosyncratiques. Rien de bien déroutant pou qui a déjà étudié les architectures à parallélisme de données, mais quelques rappels ou explications ne peuvent pas faire de mal.
 
Les cartes graphiques modernes, programmables, sont des architectures massivement parallèles. Il faut dire que chaque triangle ou pixel d'une scène 3D peut être traité indépendamment des autres, ce qui rend le traitement 3D fortement parallèle. De fait, une carte graphique est conçue pour effectuer un maximum de calculs en parallèle, quitte à réduire la puissance pour des calculs séquentiels (ceux qu'effectue un processeur). Tpiquemùent, lesLes cartes graphiques récentes incorporent toutes les techniques de parallélisme de donnée au niveau matériel : elles ont plusieurs processeurs, ceux-ci sont capables d’exécuter des instructions SIMD (ils ne font que cela, à vrai dire), et j'en passe. Et cela a des conséquences sur le nombre de processeurs etL'architecture d'unitésune decarte calcul,graphique ainsirécente queest surillustrée laci-dessous. hiérarchieOn mémoire.y Déjà,voit la carte graphique contientprésence d'un très grand nombre de processeurs/cœurs et d'unités de calcul. De plus,une hiérarchie mémoire d'uneassez carteétagée graphiqueavec doitdes gérermémoires un grand nombre d'accès mémoire simultanés : qui dit plein d'instructionslocales en parallèle qui travaillent sur des données indépendantes dit aussi pleincomplément de donnéesla indépendantesmémoire à lire ou écrire !vidéo principale.
 
L'architecture d'une carte graphique récente est illustrée ci-dessous. On y voit plusieurs caractéristiques typiques : un grand nombre de processeurs/cœurs, un grand nombre d'unités de calculs par cœur, et une hiérarchie mémoire assez étagée avec des mémoires locales en complément de la mémoire vidéo principale.
 
[[File:NVIDIA GPU Accelerator Block Diagram.png|centre|vignette|upright=2.0|Ce schéma illustre l'architecture d'un GPU en utilisant la terminologie NVIDIA. Comme on le voit, la carte graphique contient plusieurs cœurs de processeur distincts. Chacun d'entre eux contient plusieurs unités de calcul généralistes, appelées processeurs de threads, qui s'occupent de calculs simples (en bleu). D'autres calculs plus complexes sont pris en charge par une unité de calcul spécialisée (en rouge). Ces cœurs sont alimentés en instructions par le processeur de commandes, ici appelé ''Thread Execution Control Unit'', qui répartit les différents shaders sur chaque cœur. Enfin, on voit que chaque cœur a accès à une mémoire locale dédiée, en plus d'une mémoire vidéo partagée entre tous les cœurs.]]
Ligne 95 ⟶ 93 :
Pour profiter au mieux des opportunités de parallélisme, une carte graphique contient de nombreux processeurs, qui eux-mêmes contiennent plusieurs unités de calcul. Savoir combien de cœurs contient une carte graphique est cependant très compliqué, car la terminologie utilisée par les fabricants de carte graphique est particulièrement confuse. Il n'est pas rare que ceux-ci appellent cœurs ou processeurs, ce qui correspond en réalité à une unité de calcul d'un processeur normal, sans doute histoire de gonfler les chiffres. Et on peut généraliser à la majorité de la terminologie utilisée par les fabricants, que ce soit pour les termes ''warps processor'', ou autre, qui ne sont pas aisés à interpréter.
 
VuLa lemicroarchitecture granddes nombre d'unitésprocesseurs de calcul,shaders les autres circuits ne peuvent pas trop prendreest de place. En conséquence, les unités de décodage et/ou de contrôle sont relativement simples, peu complexes. Leurs fonctionnalités sont limitées au strict minimum, avec cependant quelques optimisations sur les cartesplus graphiquesparticulièrement récentessimple. On n'y retrouve pas les fioritures des CPU modernes, tant utiles pour du calcul séquentiel : pas d’exécution dans le désordre, de renommage de registres, et autres techniques avancées. En conséquence, les unités de décodage et/ou de contrôle sont relativement simples, peu complexes. La majeure partie du processeur est dédié aux unités de calcul.
 
[[File:Cpu-gpu.svg|centre|vignette|upright=2.0|Comparaison entre l'architecture d'un processeur généraliste et d'un processeur de shaders.]]
Ligne 105 ⟶ 103 :
[[File:GeForce 6800 Vertex processor block.png|centre|vignette|upright=2.0|Processeur de shader (vertex shader) d'une GeForce 6800. On voit clairement que celui-ci contient, outre les traditionnelles unités de calcul et registres temporaires, un "cache" d'instructions, des registres d'entrée et de sortie, ainsi que des registres de constante.]]
 
Cela n'a pas changé avec l'unification des ''shaders'', si ce n'est que les unités de calcul ne sont pas aussi spécialisées que dans l'exemple précédent. DeLes nosGPU jours,modernes lesdisposent unitésd'une de calculs dédiées à des opérations bien précises sont plus rares. On ne trouve plusflopée d'unitéunités spécialiséede pourcalcul les opérationsSIMD complexesidentiques, commeà danssavoir lqu'exempleelles précédent,calculent dedes tellesinstructions opérationsSIMD pouvantcomplètes, êtrechaque émuléespixel parétant unetraité suite d'opérations plusen simplesparallèle. AuDe lieunos de mettre une unité spécialisée utile pour une opération sur 10/20jours, autantles mettreunités une unité généraliste pour accélérer lesde calculs simples et fréquents, quittedédiées à émulerdes lesopérations calculsbien complexes.précises Deexistent plusencore, les unités de calculsmais sont devenues beaucoup plus nombreusesrares.
 
Les GPU modernes disposent d'une flopée d'unités de calcul SIMD identiques, à savoir qu'elles calculent des instructions SIMD complètes, chaque pixel étant traité en parallèle.
 
[[File:SIMD2.svg|centre|vignette|Unités de calculs SIMD.]]