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

Contenu supprimé Contenu ajouté
mAucun résumé des modifications
Ligne 1 :
Au fur et à mesure que les procédés de fabrication devenaient de plus en plus étoffés, les cartes graphiques pouvaient incorporer un plus grand nombre de circuits. Les unités géométriques, autrefois câblées, sont devenues des unités programmables. Les unités de traitement de la géométrie deviennent donc des processeurs indépendants, capable d’exécuter des programmes surappelés des vertices'''Shaders'''. CesLes programmespremiers sontshaders étaient dédiés aux traitement de la géométrie, et étaient appelés des '''Vertexvertex Shaders'shaders''. Par la suite, l'étape de traitement des pixels est elle aussi devenue programmable. Des programmes capables de traiter des pixels, les '''pixels shaders''' ont fait leur apparition. Une seconde sériePuis d'unitésautres a alors été ajoutée dans nos cartes graphiques : les processeursformes de pixels shaders. Ilssont fonctionnentapparues surpar lela même principe que les processeurs de vertex shaderssuite, maispour leureffectuer jeudes d'instructioncalculs étaitgéométriques quelquecomplexes peuou différent.des Les premières cartescalculs non-graphiques avaient des jeux d'instructions séparés pour les unités de vertex shader et les unités de pixel shader et les processeurs étaient séparés. Depuis DirectX 10, ce n'est plus le cas : le jeu d'instructions a été unifié entre les vertex shaders et les pixels shaders.
 
Les shaders sont souvent écrits dans un langage de haut-niveau :, le HLSL pour les shaders Direct X et le GLSL pour les shaders Open Gl., Ilspuis sont traduitsensuite traduit (compilés) àen lainstructions voléemachines parà lesdestination pilotesdes de la carte graphique, pour les rendre compatibles avec le processeurprocesseurs de vertex shaders. Au début, ces langages, ainsiet quela lecarte matériel,graphique supportaient uniquement des programmes simples. AuMais 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é sur :
==Jeu d'instruction==
 
==Le jeu d'instruction des processeurs de shaders==
Les shaders sont souvent écrits dans un langage de haut-niveau : le HLSL pour les shaders Direct X et le GLSL pour 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é sur :
 
* le nombre de registres ;
* la taille de la mémoire qui stocke les shaders ;
* le support des branchements ;
* l'ajout d'instructions d'appel de fonction ;
* le support de fonctions imbriquées ;
* l'ajout d'instructions de lecture/écriture en mémoire centrale ;
* l'ajout d'instructions capables de traiter des nombres entiers ;
* l'ajout d'instructions bit à bit.
 
===Jeu d'instruction===
 
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 scalaires, sans parallélisme (du moins, au niveau du jeu d'instruction).
Ligne 28 ⟶ 16 :
 
[[File:Instructions SIMD.png|centre|vignette|upright=2.0|Instructions SIMD]]
 
Les cartes graphiques anciennes avaient des jeux d'instructions séparés pour les unités de vertex shader et les unités de pixel shader et les processeurs étaient séparés. Depuis DirectX 10, ce n'est plus le cas : le jeu d'instructions a été unifié entre les vertex shaders et les pixels shaders et un processeur de shader peut effectuer aussi bien des calculs géométriques que des traitements de pixels.
 
La première carte graphique commerciale destinée aux gamers à disposer d'une unité de vertex programmable est la Geforce 3. Celui-ci respectait le format de vertex shader 1.1. L'ensemble des informations à savoir sur cette unité est disponible dans l'article "A user programmable vertex engine", disponible sur le net. Le processeur de cette carte était capable de gérer un seul type de données : les nombres flottants de norme IEEE754. Toutes les informations concernant la coordonnée d'une vertice, voire ses différentes couleurs, doivent être encodées en utilisant ces flottants. Ce processeur est capable d’exécuter 17 instructions différentes. Voici la liste de ces instructions :
Ligne 82 ⟶ 72 :
 
De nos jours, les processeurs de vertices sont capables de gérer des nombres entiers, et les instructions qui vont avec.
 
Pour résumer, les améliorations ont porté sur :
* le nombre de registres ;
* la taille de la mémoire qui stocke les shaders ;
* le support des branchements ;
* l'ajout d'instructions d'appel de fonction ;
* le support de fonctions imbriquées ;
* l'ajout d'instructions de lecture/écriture en mémoire centrale ;
* l'ajout d'instructions capables de traiter des nombres entiers ;
* l'ajout d'instructions bit à bit.
 
====Processeurs VLIW====