Historique du multiprocesseur Nvidia Streaming


Le week-end dernier, j'ai passé à apprendre la programmation CUDA et SIMT. Ce temps fructueux s'est terminé par une accélération de près de 700 fois de mon «coureur de cartes de visite» [1] - de 101 secondes à 150 ms.

Une expérience aussi agréable a été une bonne excuse pour poursuivre l'étude du thème et de l'évolution de l'architecture Nvidia. En raison de l'énorme quantité de documentation publiée au fil des ans par l'équipe «verte», j'ai réussi à remonter le temps et à parcourir brièvement l'incroyable évolution de ses multiprocesseurs de streaming.

Dans cet article, nous considérerons:

Année génération Crystal Process Technology Series Carte la plus puissante
==================================================== ===========================
2006 Tesla GeForce 8 G80 90 nm 8800 GTX 
2010 Fermi GeForce 400 GF100 40 nm GTX 480
2012 Kepler GeForce 600 GK104 28 nm GTX 680
2014 Maxwell GeForce 900 GM204 28 nm GTX 980 Ti
2016 Pascal GeForce 10 GP102 16 nm GTX 1080 Ti
2018 Turing GeForce 20 TU102 12 nm RTX 2080 Ti

Impasse


Jusqu'en 2006, l'architecture GPU de NVidia était en corrélation avec les étapes logiques du rendu API [2] . La GeForce 7900 GTX, contrôlée par le cristal G71, se composait de trois parties impliquées dans le traitement des sommets (8 blocs), la génération de fragments (24 blocs) et la combinaison de fragments (16 blocs).


Crystal G71. Faites attention à l'optimisation Z-Cull, qui élimine un fragment qui ne passerait pas le test Z.

Cette corrélation a fait deviner aux concepteurs l'emplacement des goulots d'étranglement du convoyeur pour un équilibrage correct de chacune des couches. Avec l'avènement d'une autre étape dans DirectX 10 - le shader géométrique, les ingénieurs de Nvidia ont été confrontés à la tâche difficile d'équilibrer le cristal sans savoir avec quelle efficacité cette étape sera utilisée. Il est temps pour un changement.

Tesla



Nvidia a résolu le problème de la complexité croissante à l'aide de l'architecture Tesla «intégrée», publiée en 2006.

Il n'y avait plus de différence entre les couches du cristal G80. En raison de la possibilité d'exécuter des sommets, des fragments et des «noyaux» géométriques, le multiprocesseur de flux (Stream Multiprocessor, SM) a remplacé tous les blocs existants. L'équilibrage de la charge a été effectué automatiquement, grâce au remplacement du «cœur» effectué par chaque SM, en fonction des besoins du convoyeur.

"En fait, nous avons jeté toute l'architecture de shader NV30 / NV40 et en avons créé une nouvelle, avec une nouvelle architecture commune pour les processeurs universels (SIMT), qui a également introduit de nouvelles méthodologies de conception de processeurs."

John Alben (interview extremetech.com)

Ne pouvant plus exécuter les instructions SIMD, les «blocs de shader» se sont transformés en «noyaux», capables d'exécuter une instruction entière ou une instruction avec float32 par cycle. SM reçoit des threads en groupes de 32 threads, appelés warp. Idéalement, tous les threads de la même chaîne exécutent la même instruction en même temps, uniquement pour des données différentes (d'où le nom SIMT). L'unité d'instructions multithread (MT) est engagée dans l'activation / désactivation des threads dans la chaîne si leur pointeur d'instruction (pointeur d'instruction, IP) converge / rejette.

Deux SFU vous aident à effectuer des calculs mathématiques complexes, tels que la racine carrée inverse, sin, cos, exp et rcp. Ces blocs sont également capables d'exécuter une instruction par cycle, mais comme il n'y en a que deux, la vitesse de la chaîne est divisée en quatre. Il n'y a pas de support matériel pour float64, les calculs sont effectués par programme, ce qui affecte considérablement la vitesse d'exécution.

SM réalise son potentiel maximal lorsqu'il est capable de masquer des latences de mémoire en raison de la présence constante de chaînes distribuables, mais également lorsque le flux dans la chaîne ne dévie pas (la logique de contrôle le maintient sur le même chemin d'exécution des instructions). Les états de flux sont stockés dans des fichiers de registre de 4 kilo-octets (Register File, RF). Les threads qui occupent trop d'espace sur la pile réduisent le nombre de threads possibles pouvant s'exécuter en même temps, tout en réduisant les performances.

Le cristal phare de la génération Tesla était le G80 90 nm introduit dans la GeForce 8800 GTX. Deux SM sont combinés dans un cluster de processeur de texture (TPC) avec une unité de texture et un cache Tex L1. Il a été promis que le G80 avec 8 TPC et 128 cœurs génère 345,6 gigaflops [3]. La carte 8800 GTX était extrêmement populaire à un moment donné, elle a reçu de merveilleuses critiques et est tombée amoureuse de ceux qui pouvaient se le permettre. Il s'est avéré être un produit si excellent que, treize mois après sa sortie, il est resté l'un des GPU les plus rapides du marché.


G80 installé dans 8800 GTX. Les unités de sortie de rendu (ROP) effectuent le lissage.

Avec Tesla, Nvidia a introduit le langage de programmation C pour Compute Unified Device Architecture (CUDA), un sur-ensemble du langage C99. Les amateurs de GPGPU, qui ont salué l'alternative à tromper le GPU avec des textures et des shaders GLSL, ont aimé cela.

Bien que je parle principalement de SM dans cette section, ce n'était que la moitié du système. Dans SM, il est nécessaire de transférer des instructions et des données stockées dans la mémoire du GPU. Pour éviter les temps d'arrêt, les GPU n'essaient pas de minimiser les transferts de mémoire à l'aide de caches volumineux et de prédire le fonctionnement du processeur. Les GPU profitent de la latence, saturant le bus mémoire pour répondre aux besoins d'E / S de milliers de threads. Pour cela, une puce (par exemple, G80) réalise une bande passante mémoire élevée en utilisant six bus de mémoire DRAM bilatéraux.


Les GPU profitent des latences de mémoire, tandis que les CPU les cachent avec un énorme cache et une logique de prédiction.

Fermi



Tesla était une décision risquée qui s'est avérée très réussie. Il a connu un tel succès qu'il est devenu la base du GPU NVidia pour les deux prochaines décennies.

« , , (Fermi , Maxwell ), , G80, [Pascal]».

( extremetech.com)

En 2010, Nvidia a sorti le GF100, basé sur la toute nouvelle architecture Fermi. L'intérieur de sa dernière puce est décrit en détail dans la documentation technique de Fermi [4] .

Le modèle d'exécution est toujours basé sur la déformation de 32 threads envoyés à SM. NVidia a réussi à doubler / quadrupler tous les indicateurs uniquement grâce à la technologie de traitement à 40 nanomètres. Grâce à deux tableaux de 16 cœurs CUDA, SM était désormais en mesure d'envoyer simultanément deux semi-warp (16 threads chacun). Malgré le fait que chaque cœur a exécuté une instruction par cycle d'horloge, SM a essentiellement été en mesure d'exclure une instruction de distorsion par cycle d'horloge (quatre fois plus que l'architecture SM de Tesla).

Le nombre de SFU a également augmenté, mais pas tant que cela - la capacité n'a que doublé. On peut conclure que les instructions de ce type n'ont pas été utilisées très activement.

Il existe un support semi-matériel pour float64, qui combine les opérations effectuées par deux cœurs CUDA. Grâce à l'ALU 32 bits (dans Tesla, il était de 24 bits), le GF100 peut effectuer une multiplication d'entiers en un cycle, et en raison de la transition de l'IEEE 754-1985 à l'IEEE 754-2008, il a une précision accrue lors de l'utilisation du pipeline float32 à l'aide de Fused Multiply -Add (FMA) (plus précis que celui utilisé dans Tesla MAD).

Du point de vue de la programmation, le système de mémoire intégré de Fermi a permis de compléter CUDA C avec des fonctionnalités C ++ telles qu'un objet, des méthodes virtuelles et des exceptions.

Du fait que les blocs de texture sont désormais devenus SM, le concept de TPC a été abandonné. Il a été remplacé par des clusters de processeurs graphiques (GPC), chacun avec quatre SM. Enfin et surtout, SM est désormais doté du moteur polymorphe, qui permet d'obtenir des sommets, de transformer la fenêtre et la tessellation. Le produit phare GeForce GTX 480 basé sur le GF100 a été annoncé comme contenant 512 cœurs et capable de fournir 1 345 gigaflops [5] .


GF100 installé dans la GeForce GTX 480. Notez les six contrôleurs de mémoire qui desservent le GPC.

Kepler



En 2012, Nvidia a publié l'architecture Kepler, du nom d'un astrologue, mieux connu pour avoir découvert les lois du mouvement planétaire. Comme d'habitude, la documentation technique GK104 [6] nous a permis de regarder à l'intérieur .

Chez Kepler, Nvidia a considérablement amélioré l'efficacité énergétique de la puce en abaissant la vitesse d'horloge et en combinant la fréquence centrale avec la fréquence de la carte (auparavant leur fréquence était doublée).

De tels changements auraient dû entraîner une baisse de la productivité. Cependant, grâce à une réduction de moitié de la technologie de processus (28 nanomètres) et au remplacement d'un contrôleur matériel par un logiciel, Nvidia a non seulement pu placer plus de SM sur la puce, mais également améliorer leur conception.

Le multiprocesseur de streaming de nouvelle génération (SMX) est un monstre, dont presque tous les indicateurs ont été doublés ou triplés.

Grâce à quatre répartiteurs de chaîne capables de traiter une chaîne entière en un seul cycle d'horloge (Fermi ne pouvait traiter que la moitié de la chaîne), SMX contenait désormais 196 cœurs. Chaque répartiteur avait une double répartition, ce qui permettait d'exécuter la deuxième instruction en warp si elle était indépendante de l'instruction exécutable actuelle. La planification double n'était pas toujours possible car une colonne de 32 cœurs était commune à deux opérations de planification.

Un tel schéma a compliqué la logique de programmation (nous y reviendrons plus tard), mais grâce à l'exécution de jusqu'à six instructions de distorsion par cycle, le SMX a fourni deux fois les performances par rapport à l'architecture Fermi SM.

Il a été affirmé que le navire amiral NVIDIA GeForce GTX 680 avec un cristal GK104 et huit SMX a 1536 cœurs, atteignant 3 250 gigaflops [7]. Les éléments du cristal sont devenus si complexes que j'ai dû retirer toutes les signatures du diagramme.


GK104 installé dans la GeForce GTX 680.

Faites attention aux sous-systèmes de mémoire entièrement repensés, fonctionnant avec une fréquence à couper le souffle de 6 GHz. Ils ont permis de réduire le nombre de contrôleurs de mémoire de six à quatre.

Maxwell


En 2014, Nvidia a publié le GPU de dixième génération appelé Maxwell. Comme indiqué dans la documentation technique du GM107 [8] , la devise de la première génération d'architecture était «Efficacité énergétique maximale et performances extraordinaires pour chaque watt consommé». Les cartes ont été positionnées pour "des environnements à puissance limitée tels que les ordinateurs portables et les PC SFF".

La décision la plus importante a été d'abandonner la structure Kepler avec le nombre de cœurs CUDA en SM, ce qui n'est pas une puissance de deux: certains noyaux sont devenus communs et sont revenus au travail en mode demi-chaîne. Pour la première fois dans l'histoire de l'architecture, SMM avait moins de cœurs que son prédécesseur: «seulement» 128 cœurs.

L'adaptation du nombre de noyaux et de la taille de la chaîne a amélioré la segmentation des cristaux, ce qui a permis de réaliser des économies d'espace et d'énergie.


Un SMM 2014 comptait autant de cœurs (128) que l'ensemble du GTX 8800 en 2006.

La deuxième génération de Maxwell (décrite dans la documentation technique GM200 [9] ) a considérablement augmenté la productivité, tout en maintenant l'efficacité énergétique de la première génération.

La technologie du processus est restée à 28 nanomètres, de sorte que les ingénieurs de Nvidia ne pouvaient pas recourir à une simple miniaturisation pour augmenter la productivité. Cependant, une diminution du nombre de cœurs SMM a réduit leur taille, en raison de laquelle davantage de SMM pourraient être placés sur la puce. Par rapport à Kepler, la deuxième génération de Maxwell a doublé le nombre de SMM, tout en augmentant sa surface cristalline de seulement 25%.

Dans la liste des améliorations, vous pouvez également trouver une logique de répartition simplifiée, qui a permis de réduire le nombre de redondances redondantes de la répartition et le retard des calculs, ce qui a assuré une augmentation de l'optimalité de l'utilisation de la chaîne. De plus, la fréquence de la mémoire a été augmentée de 15%.

L'étude du schéma fonctionnel du Maxwell GM200 commence déjà à vous fatiguer les yeux. Mais nous l'examinons toujours attentivement. La carte phare NVIDIA GeForce GTX 980 Ti avec un cristal GM200 et 24 SMM promettait 3072 cœurs et 6 060 gigaflops [10] .


GM200 installé dans la GeForce GTX 980 Ti.

Pascal


En 2016, Nvidia a présenté Pascal. La documentation technique GP104 [11] laisse une impression de déjà vu car le Pascal SM ressemble exactement au Maxwell SMM. L'absence de changements de SM n'a pas stagné les performances, car la technologie de traitement à 16 nanomètres nous a permis de placer plus de SM et de doubler à nouveau le nombre de gigaflops.

Parmi les autres améliorations majeures figurait un système de mémoire basé sur le tout nouveau GDDR5X. L'interface mémoire 256 bits, grâce à huit contrôleurs de mémoire, a fourni des vitesses de transfert de 10 gigaflops, augmentant la bande passante mémoire de 43% et réduisant le temps d'indisponibilité des déformations.

Le produit phare NVIDIA GeForce GTX 1080 Ti avec une puce GP102 et 28 TSM promettait 3584 cœurs et 11 340 gigaflops [12] .


GP104 installé dans la GeForce GTX 1080.

Turing


Avec la sortie de Turing en 2018, Nvidia a réalisé sa «plus grande étape architecturale en dix ans» [13] . Dans Turing SM, non seulement des noyaux Tensor spécialisés avec intelligence artificielle sont apparus, mais aussi des noyaux pour le lancer de rayons (rautracing, RT). Une telle structure fragmentée me rappelle l'architecture en couches qui existait avant Tesla, et cela prouve une fois de plus que l'histoire aime la répétition.


En plus des nouveaux cœurs, trois fonctionnalités importantes sont apparues dans Turing. Premièrement, le noyau CUDA est devenu superscalaire, ce qui permet l'exécution parallèle d'instructions avec des nombres entiers et à virgule flottante. Si vous trouvez 1996, cela peut vous rappeler l'architecture «innovante» d'Intel.

Deuxièmement, le nouveau sous-système de mémoire sur GDDR6X, pris en charge par 16 contrôleurs, est désormais capable de fournir 14 gigaflops.

Troisièmement, les flux n'ont plus de pointeurs d'instruction (IP) communs dans la chaîne. Grâce à la planification de threads indépendante dans Volta, chaque thread a sa propre IP. En conséquence, les SM peuvent configurer de manière plus flexible les flux de répartition dans la chaîne sans besoin de convergence aussi rapidement que possible.

Le vaisseau amiral NVIDIA GeForce GTX 2080 Ti avec TU102 et 68 cristaux TSM en a 4352 et atteint 13 45 gigaflops [14] . Je n'ai pas dessiné de diagramme car il ressemblerait à une tache verte floue.

Ce qui nous attend ensuite


Selon les rumeurs, la prochaine architecture, nommée Ampère, sera annoncée en 2020. Comme Intel a prouvé avec Ice Lake qu'il y avait encore un potentiel de miniaturisation en utilisant la technologie de traitement à 7 nanomètres, il ne fait aucun doute que Nvidia l'utilise pour réduire davantage le SM et doubler ses performances.


Téraflops / s pour chaque puce / carte Nvidia (source de données: techpowerup.com).

Il sera intéressant de voir comment Nvidia poursuit l'évolution de l'idée de cristaux ayant trois types de noyaux qui effectuent différentes tâches. Verrons-nous des cristaux, l'état complet des noyaux tenseurs ou des noyaux RT? Curieuse.

Matériel de référence


[1] Source: Revisiter la carte de visite Raytracer
[2] Source: Fermi: la première architecture informatique GPU complète
[3] Source: NVIDIA GeForce 8800 GTX (techpowerup.com)
[4] Source: livre blanc Fermi (GF100)
[5] Source: NVIDIA GeForce GTX 480
[6] Source: livre blanc Kepler (GK104)
[7] Source: NVIDIA GeForce GTX 680
[8] Source: livre blanc Maxwell Gen1 (GM107)
[9] Source: livre blanc Maxwell Gen2 (GM200)
[10] Source: NVIDIA GeForce GTX 980 Ti
[11] Source: livre blanc Pascal (GP102)
[12] Source:NVIDIA GeForce GTX 1080 Ti
[13] Source: Livre blanc de Turing (TU102)
[14] Source: NVIDIA GeForce GTX 2080 Ti

All Articles