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

Aller à la navigation Aller à la recherche
m
==Jeu d'instruction==
 
CesLes shaders sont souvent écrits dans un langage de haut-niveau, : le HLSL oupour les shaders Direct X et le GLSL, etpour les shaders Open Gl. Ils sont traduits (compilés) à la volée par les pilotes de la carte graphique, pour les rendre compatibles avec le processeur de vertex shaders. Au début, ces langages, ainsi que le matériel, supportaient uniquement des programmes simples. Au fil du temps, les spécifications de ces langages sont devenues de plus en plus riches à chaque version de Direct X ou d'Open Gl, et le matériel en a fait autant. Les premiers processeurs de shaders disposaient de peu d'instructions. On trouvait uniquement des instructions de calcul arithmétiques, dont certaines étaient assez complexes (logarithmes, racines carrées, etc). Depuis, d'autres versions de vertex shaders ont vu le jour. Pour résumer, les améliorations ont portées sur :
 
* le nombre de registres ;
Sur tous les processeurs de traitement de vertices, il est possible de traiter plusieurs morceaux de vertices à la fois. Même chose pour les processeurs de pixels shaders, qui peuvent traiter plusieurs pixels à la fois. Ces processeurs sont dit parallèles, à savoir qu'ils peuvent faire plusieurs calculs en parallèle dans des unités de calcul séparées. Il existe plusieurs types de processeurs de shaders, qui se distingue par la manière dont les calculs sont faits en parallèle :
 
* les processeurs SIMD et VLIW, avec un parallélisme au niveau du jeu d'instruction ;
* les processeurs VLIWscalaires, ;sans parallélisme (du moins, au niveau du jeu d'instruction).
* les processeurs SIMT.
 
Les processeurs de shaders sont des processeurs SIMD ou VLIW, éventuellement des processeurs de flux. Les processeurs VLIW étaient autrefois utilisés sur les anciennes RADEON d'AMD, mais ne sont plus vraiment utilisées aujourd'hui, la mode étant aux processeurs SMIDSIMD ou scalaires. Nous parlerons des processeurs SIMT dans la section sur la microarchitecture, ceux-ci ayant un jeu d'instruction non-parallèle, mais convertissent les instructions séries en instructions parallèles à la volée.
 
====Processeurs SIMD====
====Processeurs VLIW====
 
Sur les processeurs VLIW, les instructions sont regroupées dans ce qu'on appelle des Bundles, des sortes de super-instructions. CesLes instructions d'un bundle peuvent s'exécuter en parallèle sur différentes unités de calcul, mais le bundle est chargé en une seule fois depuis la mémoire. Chaque instruction d'un faisceau doit expliciter quelle unité de calcul doit la prendre en charge. EtVu que chaque instruction sera attribué à ceune petitunité jeude calcul différente, le compilateur peut se débrouiller pour que les instructions dans un bundle soient indépendantes. Mais il existese deuxpeut possibilitésque le compilateur ne puisse pas remplir tout le bundle avec des instructions indépendantes. Sur les anciens processeurs VLIW, respectivementles nomméesbundles encodageétaient parde positiontaille fixe, ce qui forcait le compilateur à remplir d'éventuels vides avec des NOP (des instructions qui ne font rien), diminuant la densité de code. La majorité des processeurs VLIW récents utilise des bundles de longueur variable, etsupprimant parces nommageNOP.
 
* Avec la première méthode, la position de l'instruction dans le faisceau détermine l'ALU à utiliser. Un faisceau est découpé en créneaux (slot), chacun étant attribué à une ALU. Par exemple, le premier slot sera attribué à la première ALU, la second à une autre ALU, le troisième à la FPU, etc. Ainsi, l'unité de calcul exécutant l'instruction sera précisée via la place de l'instruction élémentaire, le slot dans lequel elle se trouve.
* Avec la seconde solution, chaque instruction d'un faisceau contient un numéro qui indique l'unité de calcul à utiliser. Cette technique est déclinée en deux formes : soit on trouve un identifiant d'ALU par instruction, soit on utilise un identifiant pour tout le faisceau, qui permet à lui seul de déterminer l'unité associée à chaque instruction.
 
Qui plus est, vu que chaque slot sera attribué à une unité de calcul différente, le compilateur peut se débrouiller pour que chaque instruction dans un bundle soit indépendante de toutes les autres instructions dans ce bundle. Quand le compilateur regroupe des instructions dans un faisceau, il se peut qu'il ne puisse pas remplir tout le faisceau avec des instructions indépendantes. Sur les anciens processeurs VLIW, les instructions VLIW (les faisceaux) étaient de taille fixe, ce qui forcait le compilateur à remplir d'éventuels vides avec des NOP, diminuant la densité de code. La majorité des processeurs VLIW récents utilise des faisceaux de longueur variable, supprimant ces NOP.
 
Dans la majorité des cas, ces unités VLIW sont capables de traiter deux instructions arithmétiques en parallèles : une qui sera appliquée aux couleurs R, G, et B, et une autre qui sera appliquée à la couleur de transparence. Cette possibilité s'appelle la co-issue.
41 129

modifications

Menu de navigation