Home Dossiers et tutos Hardware Nvidia Fermi : l'architecture

01

Oct

2009

Nvidia Fermi : l'architecture

Écrit par sirius   
Hits

Voici les spécifications de l’architecture Fermi (cGPU / GT300) de Nvidia.

Attendu au tournant, que réserve Fermi ce supposé monstre issue d'une architecture hérité du G80 et du plus récent GT200, certaines "leçons" ont-elles été tirées par les ingénieurs Nvidia notamment au niveau de la parallélisassions ? L’architecture Fermi bien sûr servira pleinement les applications graphiques, c’est certain, mais nvidia travail sur CUDA depuis fort longtemps maintenant et s’ancre à nouveau fermement dans le GPU computing avec Fermi et ses nouvelles capacités dans les applications dédiées aux calculs brut.

La très bonne nouvelle, qui fait de l’œil aux développeurs, c’est le support total du langage C++, là ou l’on taclait Nvidia pour son PhysX c’est un retour à l’envoyeur façon « OpenSpace » dédié aux développeurs qui est mis en avant.

Sans oublier la plateforme de développement Nexus tout spéciallement dédié au support des applications CUDAC C, OpenCL et DirectCompute.

Voilà donc un petit aperçu des nouvelles capacités et améliorations diverses de cette architecture Fermi.

Le premier GPU basé sur Fermi, est constitué de 3 milliards de transistors, embarque jusqu’à 512 CUDA Cores. Un CUDA core execute une instruction à virgule flottante ou entière par cycle et par tâche. Les 512 CUDA Cores sont organisés en 16 SMs de 32 cores chacun. Le GPU a six partitions mémoire de 64-bit, pour une interface mémoire de 384-bit, supporte jusqu’à un total de 6GB de mémoire DRAM GDDR5.

dieshot

Une interface connecte le GPU au CPU via PCI-Express. Le programmateur global GigaThread distribue les blocs de tâches aux planificateurs de tâche SM.

 

fermi-16sm


Troisième génération de Streaming Multiprocesseur

 

fermi-cuda-core

La troisième génération SM introduit plusieurs innovations au sein de l’architecture

512 CUDA cores Haute Performance

Chaque SM dispose de 32 processeurs CUDA une concentration quatre fois supérieure au design SM précédent.

Chaque processeur CUDA dispose d’une unité logique arithmétique sous pipeline pour les entiers (ALU) ainsi qu’une unité pour virgule flottante (FPU).

A la différence, qu’au préalable les GPUs utilisaient le standard pour l’arithmétique à virgule flottante de type IEEE 754-1985. L’architecture Fermi utilise le nouveau standard IEEE 754-2008 disposant de l’instruction multiplication-addition (FMA) fusionnée pour simple et double précision arithmétique.

FMA améliore les instructions multiplication-addition (MAD) avec une simple étape finale sans perte de précision dans l’addition. FMA est plus précis que l’exécution des opérations séparées. Pour mémoire le GT200 disposait d’une double précision FMA.

A contrario du GT200 dont la valeur de l’entier ALU était limité à 24-bit de précision pour les opérations de multiplications, Fermi supporte pleinement 32bit de précision pour toutes les instructions, en accord avec les pré-requis des langages de programmation.

Le ALU est optimisé pour les opérations 64-bit et à précision étendu. Beaucoup d’autres sont supportées, comme : Boolean ; shift ; move ; compare ; convert ; bit-field extract ; bit-reverse insert et population count.

16 Unités de chargement/stockage

Chaque SM a 16 unités de chargement/stockage, ce qui permet un calcul de l’allocation des adresses source et destination pour 16 tâches par cycles Supportant par unités la charge et le stockage des données à chaque adresses du cache ou de la DRAM.

Quatre unités de fonctions spéciales

Les « Spécial Function Units (SFUs) exécutent les instructions comme sin, cosine, reciprocal et racine carré. Chaque SFU exécute une instruction par tâche, par cycle ; un ensemble s’exécute sur huit horloges. Le pipeline SFU est découplé de l’unité de répartition (dispatch), ce qui permet à l’unité de répartition de transmettre à une autre unité d’exécution pendant que le SFU est occupé.

Conçu pour la double précision

L’arithmétique à double précision est le cœur des applications HPC comme l’algèbre linéaire, la simulation numérique et la chimie quantique. L’architecture Fermi a été spécialement désignée pour offrir des performances sans précédent dans la double précision ; jusqu'à 16 opérations multiplication-addition fusionnées peuvent être exécutées par SM, par cycle, un bon en avant par rapport au GT200.

fermi-double-precision

Planificateur Dual Warp

Le SM planifie les tâches en groupe de 32 tâches parallèles appelés « warps » (chaînes). Chaque SM dispose de deux planificateurs warp et de deux instructions d’unités de répartition, ce qui permet à deux warps d’êtres assigné et exécutées en même temps.

Le planificateur double du Fermi sélectionne deux warps et assigne une instruction pour chacun des warp à un groupe de 16 cores, 16 unités de chargement/stockage, ou quatre SFUs.

Parce que les warps s’exécutent indépendamment, le planificateur du Fermi n’a pas besoin de vérifier les dépendances du flux d’instruction. En utilisant ce modèle de double-assignation, Fermi réussie des pointes de performances.

fermi-warp-scheduler

Beaucoup d’autres instructions peuvent être doublement assignées.

64KB de mémoire partagée configurable et cache L1

Un des points clé de l’architecture qui permet une grande amélioration aussi bien pour les performances que pour les applications GPU c’est la mémoire partagée on-chip (sur-puce).

La mémoire partagée permet aux tâches au sein d’un même bloc de tâches de coopérer, faciliter la réutilisation des données on-chip et de grandement réduire le traffic off-chip et donc d’économiser de l’énergie.

La mémoire partagée est l’élément déterminant pour beaucoup d’applications hautes performances CUDA.

A titre de comparaison le G80 et le GT200 ont 16KB de mémoire partagée par SM. Dans l’architecture Fermi, chaque SM a 64KB de mémoire on-chip qui peuvent être configurés à 48KB de mémoire partagée avec 16KB de cache de niveau 1 (L1) ou a 16KB de mémoire partagée avec 48KB de cache L1.

De par le triplement des yields de mémoire partagée, les applications gourmandes en mémoire partagée se retrouvent avec des améliorations de performances significatives.

En fait, les applications et logiciels comme les gestionnaires de cache, peuvent prendre avantage du cache hardware, pendant qu’ils peuvent toujours accéder au 16KB de mémoire partagée.

Encore plus fort, les applications qui n’utilisent pas la mémoire partagée, bénéficient automatiquement du cache L1, permettant la construction de programmes CUDA haute performance en un minimum de temps et d’efforts.

Résumé

fermi-specs


Seconde Génération Parallel Thread Execution ISA

Fermi est la première architecture qui supporte le nouveau jeu d’instructions « Parallel Thread eXecution (PTX) 2.0 ». PTX est une machine virtuelle de bas niveau ISA conçue pour supporter les opérations d’un processeur de tâches parallèles.

Au moment de l’installation du programme, les instructions PTX sont traduites aux instructions machine par le pilote GPU.

Les buts principaux de PTX sont :

  • Fournir un ISA qui englobe plusieurs générations de GPU
  • Obtenir des performances GPU complètes dans les applications compilées.
  • Fournir un ISA pour le C, C++, Fortran et autres compilateurs indépendant de la machine.
  • Fournir un code ISA distribué pour les applications et les développeurs.
  • Fournir un ISA commun pour optimiser les générateurs et les traducteurs de code, qui guide PTX sur des machines spécifiques.
  • Faciliter le codage manuel des librairies kernels
  • Fournir un model de programmation souple et adaptable qui englobe la taille des GPU que ce soit quelques cores jusqu’à plusieurs en parallèle.

PTX 2.0 introduit de nouvelles fonctionnalités qui améliorent énormément la programmation GPU, la précision et la performance. Celles-ci incluent la précision virgule flottante IEEE 32-bit, un espace d’adresses unifié pour les variables et les pointeurs, adressage 64-bit et nouvelles instructions pour OpenCL et DIrectCompute. Mais le plus important, PTX 2.0 a été spécialement conçu pour un support total au langage de programmation C++ ( !)

L’espace d’adresse unifié active le support C++

Auparavant, pour PTX 1.0,  les instructions load/store étaient spécifiques à un des trois espaces d’adresses distinct (thread private local, block shared et global), les programmes pouvaient charger ou stocker des valeurs dans un espace spécifique appelé « compile time ». Il était difficile d’implémenter les pointeurs C et C++ puisqu’un pointeur ciblant un espace d’adressage ne peut être connu lors du compil time et peut-être uniquement déterminé lors du run time.

PTX 2.0 a unifié l’espace d’adresses, les trois en un seul espace continu. Et donc un seul jeu d’instruction load/store opère sur cet espace d’adresses. Ce qui engendre que l’espace d’adressage unifié de 40-bit supporte un Terabyte de mémoire adressable et l’ISA load/store supporte 64-bit d’adressage pour les besoins futur.

fermi-adress-spaces

En C++, toutes les variables et les fonctions résident dans des « objets » qui passent par des pointeurs. PTX 2.0 permet simplement d’utiliser des pointeurs pour passer des objets dans n’importe quel espace et l’unité de traduction d’adresse du Fermi dirige automatiquement les références du pointeur à l’espace mémoire adéquat.

Les fonctions virtuelles, function pointers,  les opérateurs « new » et « delete » pour les allocations et dé-allocations d’objets sont également supportés par Fermi et le PTX 2.0 ISA.

Optimisé pour OpenCL et DirectCompute

OpenCL et DirectCompute sont étroitement lié au modèle de programmation CUDA, ils partagent a peu près tout : abstraction des clés de tâches, blocs de tâches, grilles de blocs de tâches, synchronisation de barrière, mémoire partagée par bloc, mémoire globale et opérations atomiques. Fermi est par nature, bien optimisé pour ces API. En supplément Fermi offre le support hardware pour  les instructions génériques OpenCL et DirectCompute avec conversion de format permettant aux programmes de calculs et de graphiques de fonctionner facilement tout en opérant sur les mêmes données.

IEEE 32-bit Floating Point Precision

Une amélioration en ce qui concerne les instructions simples précision de virgule flottante c’est le support des nombres « subnormaux », tout comme les quatre modes du IEE 754-2008 (proche, zéro, infini positif, infini négatif)

Les nombres « subnormaux » sont les tout petits nombres qui se trouvent entre zéro et le plus petit nombre défini par le système à virgule flottante.

Une opération fréquente dans les calculs graphiques, algèbre linéaire et applications scientifiques est de multiplier deux nombres, ajouter le produit à un troisième (D = A x B + C).

Les générations précédentes accéléraient cette fonction avec l’instruction multiply-add (MAD). Fermi utilise la nouvelle instruction multiply-add fusionnée (FMA) aussi bien pour les nombres double précision 64-bit et simple précision 32-bit. (le GT200 supporte FMA uniquement en double précision) ce qui permet des rendu de geometrie beaucoup plus fin, un plus grande précision dans les calculs mathématiques, des divisions et opérations sur racine carré juste.

fermi-multiply-add

Memory Subsystem Innovations

Fermi dispose aussi d’une vraie hiérarchie de cache pour les opérations load/store, ce qui représente un bon petit défi car d’habitude les architectures GPU supportent un chemin load en lecture seule pour les opérations de textures et un chemin « export » pour les pixels data output.

En effet une mauvaise appréhension des ordres de passage peut engendrer des corruptions.

fermi-memory-hierarchiy

L’architecture Fermi permet d’éviter et de palier à cela grâce à l’implémentation d’un chemin de requêtes unifié pour load et store, avec un cache L1 par multiprocesseur SM et un cache L2 unifié qui sert toutes les opérations (load, store et texture). La configuration des 64KB s’effectue comme nous vous le décrivions au début de l’article.

fermi-radix-physx


Premier GPU avec support de mémoire ECC

Bien évidemment pour un GPU qui est plus qu’orienté dans le GPU computing, Nvidia a accédé à la requête de nombreux utilisateurs afin de prévenir la perte de données.

Par exemple des radiations peuvent causer la modification d’un bit. ECC, bien connu tout de même, permet de détecter et de corriger un simple bit avant que le système ne soit touché.

Fermi supporte aussi la correction d’erreurs CRC sur les transmissions de puce à puce.

 

GigaThread™ Thread Scheduler

Une des technologies phare de Fermi c’est son planificateur distribué à deux niveaux.

La première génération GigaThread engine introduite dans le G80 prenait en charge 12288 tâches en temps réel. Fermi augmente cette capacité, mais en plus rend le changement de contexte, les exécutions concurrentielles kernel beaucoup plus rapides.

Le changement de contexte d’applications et tout simplement dix fois plus rapide grâce au pipeline du Fermi qui permet de passer sous la barre des 25 microsecondes.

L’exécution kernel concurrentielle est également supportée par Fermi. Ceci permet à des programmes qui exécutent un nombre de petits kernels (noyaux au fait…) d’utilser totalement le GPU.

Par exemple un programme PhysX peut invoquer un fluid solver et un rigid body solver, qui si exécutés de façon séquentielle, pourraient utiliser seulement la moitié des tâches processeurs disponibles. Sur l’architecture Fermi différents noyaux sur le même contexte CUDA peuvent s’exécuter de façon concurrentielle, pendant que des kernels de différents contextes d’applications continuent de façon séquentielle, tel est le but du et l’amélioration du « contect switching performance ».

fermi-serial-concurrent-kernel

Dim lights

Et voici la carte en question présenté par le CEO de Nvidia Jen-Hsun Huang

La carte Fermi

 

Pour d'avantage d'informations consultez : Next Generation CUDA architecture Fermi

 

Commentaires (1)

Flux RSS pour les commentaires
Affichez les commentaires
...
x00x
Sur le papier rien a dire, si cela s'avère fondé, alors cette nouvelle architecture va être monstrueuse en terme de puissance de calcul brute et fort honorable pour mouliner n'importe quels jeux actuels, les prochains, s'ils se dédient à utiliser pleinement les fonctions qu'offrent DX11 seront en mesure de nous montrer ce qu'elle vaut réellement sur le terrains, donc me reposant sur ma devise .... w8&see smilies/grin.gif
x00x , 01 octobre, 2009

Écrivez un commentaire


busy
 

Articles

Test Danger Den Double Wide Tower - 21 Black Series Edition

Test Danger Den Double Wide Tower - 21 Black Series Edition

Aujourd'hui nous allons tester le boîtier Danger Den Double Wide Tower...

Lire la suite

Test Asus Sabertooth X58

Test Asus Sabertooth X58

Asus que l’on ne présente plus, met à jour sa gamme...

Lire la suite

GOOC 2010 France : La Finale !

GOOC 2010 France : La Finale !

C'est la finale du GOOC 2010 France. Et c'est parti ! Notre...

Lire la suite
HitParade