Ce Quicky va parler de GPU. Il est un peu spécial car il est en deux parties (cliquez ici pour voir la deuxième) et fait office d’introduction pour un nouveau type d’articles, créés spécialement pour vous.
Ces nouveaux articles s’appelleront les « Inside ». Ils auront pour but de se plonger à l’intérieur du GPU d’une carte en particulier, et de l’étudier. Le but est de voir quelle est sa structure et ainsi pouvoir montrer ses potentielles forces et faiblesses.
Connaître le fonctionnement d’un GPU n’est pas forcément facile, mais nous allons essayer de vous expliquer ici la base, afin d’affiner plus tard vos connaissances dans le domaine.
Déjà commençons par le début. Qu’est-ce qu’un GPU ? De son nom complet Graphic Processing Unit, c’est ni plus ni moins que le processeur de votre carte graphique. Contrairement au processeur central (CPU), il est bien moins versatile, mais également beaucoup plus puissant.
Quelques soient les micro-architecture de GPU, une base reste commune : les unités d’un GPU. J’ai ainsi l’honneur de vous présenter :
Les Stream Processors (en Français nommés processeurs de flux) sont les éléments les plus connus d’une carte graphique. Nvidia les nomme CUDA Cores, d’autres les nomment à tort des « coeurs », mais ce sont bel et bien des Stream Processor.
Un Stream Processor est ni plus ni moins qu’une unité capable de faire du calcul sur des flottants (traduction anglicisé de floats, qui sont les nombres à virgule). Typiquement, plus les Stream Processors sont nombreux, plus le calcul de données mathématique s’effectue rapidement. Et il y a beaucoup de maths à faire calculer dans un jeu pour une carte graphique : les mouvements, les effets de particules, la direction de la lumière, les ombres, les reflets …
A noter que les Stream Processor (SP) calculent sur des floats en 32 bits (de manière très approchée, c’est un nombre avec 32 chiffres binaires après la virgule) car ce sont les nombres les plus utilisés par nos programmes. Certains Stream Processor sont capables de calculer des floats en 64 bits, qui sont plus précis. Ces floats 64 sont très apprécié dans le monde du calcul et le monde professionnel, car assez utilisé. Par contre, il y a toujours moins d’unités capable de traiter des flaots 64 que celles capables de traiter des floats 32.
Les Raster Engines (en français les unités de rasterisation) sont de grosses unités capables de générer des polygones. Comme vous le savez sûrement, votre jeu vidéo préféré est composé de nombreux objets (personnages, murs, sols, caisses en bois …) composés chacun de nombreux polygones (des triangles). Actuellement, pour arriver au niveau de réalisme exigé par les joueurs, il faut un nombre effroyable de polygones pour que l’objet ne soit pas « cubique ».
Regardez les deux exemples ci-dessous : Lara Croft avec 300 polygones et Lara Croft avec 5000 polygones. Mais actuellement, un personnage d’un très beau jeu (par exemple Ryse : Son of Rome) peut atteindre voir dépasser les 100 000 polygones. Et ce nombre ne cesse d’augmenter ! D’ici 2025, il est estimé qu’on dépassera le Million de polygone pour un personnage.
Passons maintenant aux Texture Mapping Units (TMU). Ce sont les unités qui appliquent des textures aux polygones générés. Un dessin valant bien mieux qu’un discours, voici un exemple d’un monstre sous forme de polygone (à droite), et le même à gauche une fois « texturéfié » (j’appelle « La Rousse » pour leur recommander ce mot).
Typiquement, quand vous téléchargez un pack de texture HD (pour Skyrim par exemple), ou plus simplement si vous augmentez les détails des textures dans votre jeu, c’est les TMU que vous faîtes plus travailler, bande d’esclavagistes !
Et enfin, on termine par les Render Output Units (ROP) qui sont des unités chargées du traitement de l’image. Ce sont les ROP que vous ferez travailler lorsque vous poussez l’anti-aliasing et l’anisotropic filtering ou que vous montez en résolution d’affichage.
Ces quatre unités spécialisées font partie intégrante des puissances de calcul théoriques des cartes graphiques. Le principe général est de multiplier le nombre d’unité valides par la fréquence du GPU. Ainsi :
Rien de bien compliqué en fait. Attention, il existe quelques rares exceptions qui n’ont pas toutes les unités effectives à 100 % sur certaines références, ce qui fausse un peu ce calcul. Mais concrètement tout est là. On ne vous parlera plus chinois quand on vous parlera de GTexel/s.
A titre d’exemple, nous allons donc faire l’étude théorique et comparative de deux GPU milieu/haut de gamme : la R9 280X d’AMD et la GTX 770 de Nvidia.
Ces cartes de performances similaires n’ont pas les mêmes points forts. En effet, la R9 280X a un énorme avantage au niveau du nombre Stream Processor (2048 contre 1536, 33 % d’avantage quand même), ce qui lui permet de calculer bien plus vite, surtout en 64 bits ! En effet, 1 SP sur 4 (ratio de 1/4) est capable de calculer du 64 bits sur la Radeon, contre 1 SP sur 24 pour la Geforce (ratio de 1/24), d’où cet écart monstrueux.
Par contre la GTX 770 bat sa concurrente à plate couture au niveau du débit de triangle, puisqu’elle possède le double de Raster Engine (4 contre 2).
Cependant, au niveau du débit de filtrage et le débit de pixel, égalité quasi parfaite puisque même nombre d’unités à chaque fois, avec un léger avantage pour la Nvidia, grâce à sa fréquence plus élevée.
Au final, on peut voir que l’avantage de la Radeon au niveau de la puissance de calcul compense l’avantage de la Geforce sur la génération de triangle.
Maintenant ca y est, vous pourrez comparer vos b… cartes sur leurs performances théoriques. Qui ici saurait faire le calcul d’une des performances théoriques de sa carte ?