Un processeur graphique, ou GPU (Graphical Processing Unit), également appelé coprocesseur graphique sur certains systèmes, est une unité de calcul assurant les fonctions de calcul d'image. Il peut être présent sous forme de circuit intégré (ou puce) indépendant, soit sur une carte graphique ou sur la carte mère, ou encore intégré au même circuit intégré que le microprocesseur général (on parle d'un SoC lorsqu'il comporte toutes les puces spécialisées). Dans la terminologie d'AMD une GPU intégrée à la même puce que le processeur est appelée APU, et dans la terminologie d'Intel un IGP). La sortie peut être affichée à l'écran, ou retraitée en RAM ou VRAM pour différents usages tels que l'écriture sur mémoire de masse ou un nouveau traitement interne. Un processeur graphique a généralement une structure hautement parallèle (voir accélération matérielle) qui le rend efficace pour une large palette de tâches graphiques comme le rendu géométrique 2D ou 3D, s'opérant généralement dans une mémoire vidéo dédiée. Une unité de traitement du signal vidéo peut être couplée à ce processeur pour le décodage ou l'encodage de vidéo dans différents formats tels que MPEG Enfin, ce parallélisme permet également le calcul intensif en général, lorsqu'il s'agit d'un GPGPU (, signifiant GPU à vocation généraliste).
Les bibliothèques d'utilisation de ces processeurs les plus répandues sont les standards OpenGL et Vulkan, la bibliothèque spécifique à Microsoft Windows, Direct3D et la bibliothèque spécifique à macOS, Metal. La bibliothèque standard OpenCL est destinée au calcul intensif, et une plus spécifique créée par Nvidia est CUDA.
Leur parallélisme poussé les rend aussi intéressants comme processeurs de calcul matriciel, pour casser des codes en « force brute »« Peut-on casser un mot de passe avec une carte graphique ? », Tom's Hardware, ., de minage de cryptomonnaies, ou pour l'entrainement de modèles d'intelligence artificielle.
Enfin, leur rapport performance/prix les avantage pour le calculZDNet, août 2016 : .
Histoire
Le optimisé pour le calcul et l'affichage d'image existe depuis les années 1970 ; cela inclut par exemple la présence de deux au lieu d'un seul dans la NES. L'expression et l'acronyme GPU remontent à leur utilisation publicitaire par NVIDIA en 1999 pour la GeForce 256. Initialement destinés au jeu vidéo les GPU sont depuis les années 2010 utilisés pour de nombreux problèmes facilement parallélisables tels que le minage de bitcoins, ou l'apprentissage par réseau de neurones.
Typologie
Il existe différents types de processeurs graphiques, également appelés processeurs géométriques.
Les tâches graphiques au sein de premiers systèmes informatiques étaient partagées entre processeur géométrique (quand il y en avait un) et processeur vidéo (indispensable pour envoyer l'image à afficher vers l'écran). Le premier est chargé de faire des opérations graphiques au sein de la mémoire, allégeant ainsi le processeur général de cette tâche.
Aujourd'hui on parle également de processeur vidéo pour désigner un processeur de traitement de signal, utilisé pour le décodage de vidéogrammes, ça n'est pas le sujet abordé ici. Les processeurs vidéos dans leur fonction graphique, permettent sur les premiers systèmes informatiques de modifier l'image au moment de l'envoyer à l'écran, alors typiquement, un écran à balayage, utilisant un canon à électrons parcourant l'écran de gauche à droite et de haut en bas. Ce processeur est synchronisé avec le balayage, et permet donc de gérer de façon synchrone plus ou moins de modification sur l'image (position à lire en mémoire, couleur), évitant ainsi le processeur principal et le processeur graphique de tâches lourdes comme des modifications ou transferts de mémoire.
Processeur vidéo
Table d'éléments graphiques Ils ont généralement un mode texte, dans lequel une table contient les codes des caractères à afficher, en , et une autre table fait la liaison entre le code du caractère et l'emplacement mémoire au sein du système du motif les représentant. Des motifs sont généralement présents en ROM ou EPROM, et il est alors possible de les remplacer par un motif défini par logiciel en RAM.
Les consoles de jeu et bornes d'arcades ont généralement un système similaire pour les décors. Une table des tuiles graphiques à afficher à l'écran, généralement plus grande que l'écran affiché afin de permettre les défilements de l'écran, et une table définissant leur emplacement en mémoire.
Raster Depuis les ordinateurs 8 bits, il est également possible, à l'aide du processeur vidéo d'opérer des changements en fonction de la position de l'élément en cours de traçage (en ) à l'écran. Les coordonnées actuelles sont déterminées à partir des signaux de synchronisation verticale (VBLANK, 1 par image) et horizontale (HBLANK, 1 par ligne), et du temps pendant lequel l'information d'un pixel est envoyée. Il est alors possible de changer la couleur de la palette ou du fond de l'écran par exemple. Ce principe était souvent utilisé sur les ordinateurs 8 bits pour signaler un chargement ou une décompression en cours. Ce principe a également été utilisé pour afficher des dégradés et différents effets dans les démos.
Sprite et bitplan Le sprite est un objet graphique, superposé à l'image de fond par le processeur vidéo. Si sa couleur est transparente, il envoie l'information mémoire de l'image de fond, si elle est opaque, il envoie l'information du sprite lui-même. Sur de nombreux systèmes le nombre de sprites était limité en largeur (nécessité de parcourir la mémoire des différents sprites au moment d'afficher la ligne horizontale). Selon les systèmes, cette limite est plus souple verticalement en raison de la dépendance au Raster. Il est principalement utilisé dans le domaine des jeux vidéo, mais est également utilisé dans les interfaces graphiques, pour afficher le curseur.
Le plan d'image () est similaire au sprite, mais sur une image entière, selon les systèmes il est plus ou moins limité. Par exemple sur un système dont la mémoire à une limite d'un écran complet en , pourra afficher images , il faut également prendre en compte les limites dans les opérations de mixage de ces plans, limitées dans le temps.
Les SoC utilisés aujourd'hui sur les téléphones conservent toujours ces possibilités.
Processeur géométrique 2D Une des fonctions premières d'un processeur géométrique 2D est celle de blitter. Il sert à la copie d'image de part et d'autre de la RAM (principale ou vidéo selon les systèmes), avec ou sans gestion de la transparence pour le mixage. La transparence peut être gérée via un masque de transparence (contenant une version de l'image où 0 signifie transparent et 1, ou autre valeur selon les capacités, signifie opaque ou translucide), ou via une valeur dans l'image dédiée à la transparence. Cela permet de complémenter la présence ou de compenser l'absence d'un processeur vidéo gérant les sprites ou les multiples plans de bits. On retrouve par exemple cette fonction dans Denise (Amiga), ou G2D (certains processeurs ARM, notamment Samsung, AllWinner, Rockchip, NXP).
Certains processeurs vectoriels 2D, comme celui de la console de jeu Vectrex, gèrent uniquement des objets vectoriels, tels que des segments de droite.
Processeur géométrique 3D Il est chargé de faire des calculs en trois dimensions, c'est-à-dire de représenter dans l'espace des objets géométriques.
Silicon Graphics, en 1992, est un pionnier dans le domaine, en sortant des stations de travail équipées de processeurs graphiques spécialisés en 3D. Ils créent également le langage OpenGL qui deviendra ensuite un standard ouvert, géré par le consortium industriel Khronos Group, qui le fait évoluer vers Vulkan.
Selon les processeurs, il a des fonctions plus ou moins avancées : tracé de droite, de polygones, modification géométrique d'image pour les textures, anticrénelage, sont des fonctions de base.
GPGPU
Les fonctions de traitement d'image des processeurs géométrique 3d utilisant, au fur et à mesure de leur évolution de plus en plus les mêmes instructions qu'un processeur vectoriel, les deux fonctions ont été réunies au sein de ce que l'on appelle un GPGPU (signifiant littéralement processeur graphique à but généraliste). Cela a permis de démocratiser ces derniers.
Il permet en plus de faire des opérations géométriques 2D et 3D, des opérations d'algèbre linéaire complexes, et avec un bon niveau de parallélisme. Il est principalement utilisé en calcul intensif, que ce soit dans le rendu d'images avancé, ou le calcul scientifique (analyse numérique).
Intégration du processeur dans un système Ces processeurs peuvent être intégrés de différentes manières dans un système informatique : une puce dédiée, soudée sur la carte mère, c'était le cas sur les micro-ordinateurs et (comme la puce Agnus de l'Amiga), ou les bornes d'arcades des années 1980 (un processeur secondaire pouvant être destiné au calcul graphique), des consoles de jeu , ainsi que quelques micro-ordinateurs des années 1990) ; une puce dédiée, soudée sur une carte graphique, notamment sur les compatibles IBM PC (cartes CGA, EGA, VGA, SVGA, jusqu'à nos jours) ; un processeur intégré à un SoC (une puce, regroupant l'ensemble du système, dont ; processeur principal, graphique, sonore, vidéo, réseau), c'est le cas notamment de la majorité des puces d'architecture ARM, tels que sur les téléphones mobiles, tablettes tactiles, box internet, SBC ; un processeur intégré à un APU, le processeur principal et le processeur graphique sont intégrés dans la même puce. Intel et AMD se sont inspirés d'ARM, pour améliorer les performances des échanges entre le processeur principal et le processeur graphique en intégrant leurs propres circuits graphiques à leurs processeurs.
Fonctionnement Les sommets (en anglais vertex) de polygones constituent les données élémentaires de la géométrie en trois dimensions et par là des processeurs graphiques. Ce sont les points entre lesquels seront tracées les arêtes d’un objet et par lesquels le processeur construit les objets multidimensionnels. Si les objets sont en deux dimensions, ou s’il s’agit de vidéos, les données sont directement envoyées à la fenêtre d’affichage.
Pour accélérer le calcul, le processeur recherche les sommets invisibles (cachés par d’autres sommets, par les faces d’un objet ou autrement) et les supprime pour ne pas avoir à les gérer.
Le processeur graphique applique ensuite aux faces des objets les textures puisées sur le disque dur grâce au pipeline graphique (). Le moteur graphique envoie ensuite au processeur des données sur l’éclairage des polygones, que celui-ci se charge de mettre en œuvre pour éclairer la scène. Ensuite, la puce graphique applique à l’image les divers filtres (anticrénelage ou filtrage anisotrope), et envoie le résultat à la fenêtre d’affichage, qui « aplatit » l’image pour l’afficher à l’écran.
Implémentations matérielles Il existe différentes organisations des architectures informatiques dans lesquels les processeurs graphiques sont utilisés.
Puce sur carte mère Sur les premiers micro-ordinateurs, le processeur graphique était un circuit intégré (ou puce), situé sur la carte mère de l'ordinateur. C'est également le cas généralement sur les consoles de jeu, ou encore aujourd'hui sur les ordinateurs à carte unique.
Carte graphique dédiée
Il s’agit du type de processeur graphique le plus puissant. Le processeur est généralement situé sur une carte interfacée avec la carte mère de l’ordinateur par un port PCI Express pour les machines récentes (AGP ou PCI pour les machines plus anciennes) ; quant aux ordinateurs portables, certains disposent d’une déclinaison spécifique du port PCI Express, le MXM ou Mobile PCI-Express Module. Ces cartes disposent de leur propre mémoire vive.
SoC