Prérequis

Hello ! o/

Je vais vous introduire au fonctionne interne, de manière top-down, le fonctionnement d’un GPU. Le but est de découvrir et synthétiser le fonctionnement d’un processeur graphique et sa programmation. Les GPUs (Graphic Processing Unit) sont aujourd’hui au cœur de l’exécution parallèle, pour avoir une idée globale, il s’agit d’un énorme nombre d’ALUs (Arithmetic Logic Unit) qui permettent de traiter un énorme flow de données, mais qui a une latence plus haute que le CPU (Central Processing Unit) et qui a des caches de petites tailles pour maximiser le débit mémoire.

Source: Wikipédia

Ceci est parfait pour des traitements lourds comme de la vidéo, du traitement de pools d’objets, de simulations physiques, de systèmes d’apprentissage par neurones, etc.

Ce sont les gros groupes d’aujourd’hui qui définissent l’architecture et comment programmer notre GPU : NVIDIA avec CUDA, AMD avec ATI Stream, et Khronos Group (Apple) avec OpenCL (Open Computing Language), ce sont des technologies de GPGPUs (General-Purpose Computing on Graphic Processing Unit), c’est-à-dire qui permettent le calcul générique sur les GPU.

Néanmoins, comme nous l’avons vu avec les vulnérabilités CPU (Meltdown, Specte, Zombieload, RIDL, Fallout, SwapGSAttack, etc), nos GPUs ne sont pas infaillibles non plus. Il y a le problème de mémoire isolée : la politique d’isolation de mémoire renforcée par un CPU ne peut pas être appliqué à la mémoire du GPU automatiquement, de ce fait, une contradiction entre ces 2 unités de calculs peut mener à de la fuite d’information mémoire, ce qui représente un risque à haute criticité.

Le GPU est une unité programmable qui permet l’accélération des calculs matriciel par le CPU. Cette unité est constituée majoritairement d’ALUs, unité qui permet le calcul arithmétique, ce qui permet un calcul parallèle avec une grande bande passante. Les premières cartes graphiques s’appelées les MDA (Monochrome Display Adapter), commercialisées en 1981 et implémentées dans les IBM-PC, et servait uniquement à la gestion des caractères pour l’affichage.

Source: Wikipédia

En 1996 apparaît les premières cartes graphiques pouvant calculer des opérations sur 3 dimensions, et c’est l’entreprise 3Dfx (rachetée depuis 20 ans par Nvidia) qui propose la solution avec leur carte 3Dfx Voodoo 1. C’est une carte graphique qui propose uniquement de la 3D, par conséquent il fallait connecter à une carte graphique 2D par connectique VGA pour ensuite l’afficher sur le moniteur.

Source: Fabien Sanglard

En 1999 Nvidia propose une solution propriétaire de Register Combiner, c’est une solution qui permet de spécialiser des ALUs en leur donnant des registres pour calculer la couleur finale du framebuffer (tampon de la frame/image). Cette solution sera dans leur gamme très populaire GeForce. En 2001 on entend parler des shader (ombrage) programmable, ce sont des programmes qui sont fait pour être exécutés sur le processeur graphique à une certaine étape du pipeline de rendu.

Source: Nvidia, Programming Register Combiners with nvparse, John Spitzer

En 2002 on intègre les FPUs (Floating Point Units) dans les processeurs graphiques. Par la suite en 2005 on a le modèle de shader unifié qui permet aux différentes étapes du pipeline de rendu d’avoir les mêmes capacités au niveau des ressources matérielles.

Source: Wikipédia

Par la suite en 2006 avec l’introduction des Nvidia GeForce 8000 series, les cartes graphiques deviennent à but général, c’est ce qu’on appelle les GPGPU (General Processing GPU), elles sont utilisées pour le calcul matriciel, mais aussi dans les statistiques, l’intelligence artificielle, l’algèbre linéaire, la cryptomonaie, etc.

2007 signe le début de la plateforme CUDA par Nvidia qui a été un modèle de programmation très vite adopté. Ensuit vint OpenCL par Khronos Group qui permet le développement sur CPU et GPU avec une portabilité exemplaire. Et jusqu’à aujourd’hui, le but au niveau des constructeurs est de réduire la taille des unités et de réduire la consommation électrique.

En 2018 Nvidia rajoute des cœurs de ray-tracing, une technologie permettant le calcul plus simple des effets de lumière.

Source: What you need to know about ray tracing and NVIDIA's Turing architecture, Koh Wanzi

Source: How The Turing GPU Does Ray-tracing (Explanation For Humans), Nerdy N Gon

La suite ici !