Home Dossiers et tutos Hardware Nvidia Fermi : l'architecture - Parallel Thread Execution ISA

01

Oct

2009

Nvidia Fermi : l'architecture - Parallel Thread Execution ISA

Écrit par sirius   
Hits

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



 

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