NVIDIA annonce CUDA 9, la nouvelle version de son API de programmation des processeurs graphiques
Avec la notion de groupe coopératif

Le , par dourouc05, Responsable Qt
Parallèlement à ses derniers GPU (de génération Volta), NVIDIA annonce une nouvelle version de son API CUDA. Cette neuvième itération se concentre sur les nouvelles fonctionnalités des GPU annoncés, mais propose également de nouveaux algorithmes dans cuSolver et nvGraph, ainsi qu’un compilateur amélioré — plus rapide, compatible avec le code C++14 pour l’hôte — et une intégration pour les environnements de programmation les plus récents — Visual Studio 2017, Clang 3.9, PGI 17.1 et GCC 6.

Groupes coopératifs

Les algorithmes parallèles imposent souvent aux fils d’exécution de travailler de manière collective (et non parfaitement en parallèle et sans synchronisation), ce que le développeur peut faire en groupant certains et en synchronisant ces groupes. CUDA 9 apporte justement cette notion de groupes coopératifs.

De manière historique, le degré le plus fin de découpage des fils d’exécution est le bloc, qui correspond à une limite physique des premiers GPU entièrement programmables. La synchronisation ne pouvait ainsi se faire qu’entre ces blocs. Cette manière de programmer est difficile à bien assimiler et limite la performance. De plus, les interactions avec les bibliothèques extérieures sont plus compliquées.

Au contraire, un groupe coopératif est une subdivision plus fine du travail à effectuer, qui peut correspondre à un morceau de bloc ou à plusieurs blocs… voire plusieurs GPU. Les opérations collectives peuvent alors s’effectuer par rapport à ces groupes. Ainsi, le nombre de fils d’exécution par bloc peut varier pour s’adapter au matériel (et donc en extraire un maximum de performance), tandis que la synchronisation n’en pâtit pas.

Cette fonctionnalité est disponible sur toutes les générations de processeurs graphiques, mais pas tous les détails. Ainsi, la synchronisation entre GPU n’est possible qu’avec les processeurs Pascal et Volta, en dessous d’une trame d’exécution uniquement avec Volta (grâce à un ordonnancement des fils d’exécution entièrement repensé).

Outils pour développeurs

Le profileur visuel a reçu deux améliorations majeures pour faciliter l’analyse de la performance des applications utilisant la mémoire unifiée. D’un côté, il montre maintenant les lignes de code où se produit chaque défaut de page du côté CPU (et donc où l’exécution du code doit être interrompue le temps de charger la zone de mémoire demandée).


De l’autre, la ligne du temps du profileur affiche trois types d’événements liés à l’utilisation de la mémoire unifiée :

  • les goulots d’étranglement (page throttling) qui se produisent quand un processeur est bloqué sur une page de mémoire le temps pour laisser un autre y accéder sans interruption ;
  • les écroulements (thrashing) qui indiquent qu’au moins deux processeurs accèdent à une même région en mémoire virtuelle à tour de rôle, ce qui fait que les pages concernées sont déplacées sans cesse d’un processeur à l’autre ;
  • une correspondance éloignée (remote map) pointe une région en mémoire virtuelle qui a été assignée à un autre processeur, notamment pour éviter un écroulement ou pour combler un manque de mémoire sur le processeur courant.




Cœurs tensoriels

Volta est la première architecture GPU de NVIDIA à fournir tant des cœurs de calcul génériques (CUDA) que spécifiques (tensoriels). Ces derniers sont prévus spécifiquement pour une opération : un cœur tensoriel peut mémoriser quatre matrices de seize éléments et effectuer l’opération D = A × B + C.


Chacun de ces cœurs effectue soixante-quatre opérations de multiplication-addition par coup d’horloge. Rassemblés dans une trame d’exécution, ils peuvent effectuer cette opération de multiplication et d’addition entre seize matrices carrées de seize éléments de côté. En continuant d’assembler ainsi les groupes de cœurs, on peut traiter des matrices de n’importe quelle taille, et cela très rapidement. La principale limitation concerne la précision : les deux matrices à multiplier sont forcément FP16, tandis que les deux matrices d’accumulation peuvent être FP16 ou FP32.

Source et détails : CUDA 9 Features Revealed : Volta, Cooperative Groups and More.

Et vous ?

Qu'en pensez-vous ?

Voir aussi

NVIDIA présente sa nouvelle génération de cartes graphiques, Volta accélère d'un facteur trois l'apprentissage profond grâce à ses cœurs tensoriels


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de marsupial marsupial - Membre expérimenté https://www.developpez.com
le 14/05/2017 à 3:18
J'espère me tromper, mais je ne saurai dire pourquoi, j'ai le vague pressentiment que celui qui arrivera à coder intelligement un jeu dessus n'est pas encore né...
Il a fallu des années pour appréhender le µ de la PS2, alors ce bestiau destiné au deep learning... j'ai des doutes...
Avatar de zobal zobal - Membre confirmé https://www.developpez.com
le 14/05/2017 à 12:34
Citation Envoyé par marsupial Voir le message
J'espère me tromper, mais je ne saurai dire pourquoi, j'ai le vague pressentiment que celui qui arrivera à coder intelligement un jeu dessus n'est pas encore né...
Il a fallu des années pour appréhender le µ de la PS2, alors ce bestiau destiné au deep learning... j'ai des doutes...
CUDA sert à faire du calcul scientique pas des jeux. D'ailleurs on le fait souvent tourner sur des cartes GPU qui n'ont même pas de sortie graphique.
Avatar de dourouc05 dourouc05 - Responsable Qt https://www.developpez.com
le 14/05/2017 à 12:49
D'un côté, si, CUDA sert à faire des jeux : plus précisément, certaines simulations physiques. C'est le cas de certaines solutions de NVIDIA GameWorks — même s'ils semblent migrer vers Direct Compute. Dans ces cas-là, vu qu'on n'a pas forcément besoin d'une précision dingue, ces cœurs tensoriels pourraient être utiles (mais pas forcément difficile à exploiter, vu que ces simulations sont assez classiques au niveau des méthodes numériques).
Avatar de Matthieu76 Matthieu76 - Membre habitué https://www.developpez.com
le 20/05/2017 à 18:53
Nan mais la question n'est pas là car de plus en plus de boîte de jeu vidéo ne développe plus leur propre moteur mais utilise des moteurs déjà existant tel que Unity ou Enreal Engine. Développer un jeu et développer un moteur de jeu n'est pas le même travaille. Et puis je trouve que certains jeux comme League of legends ou encore Starcraft 2 sont vraiment très bien optimiser et tourne sur des grille-pains.

En coup cas je viens de commencer il y a 2 semaine la programmation en CUDA et je trouve que le laguage et très clair avec une bonne documentation, rien à redire de ce côté
Avatar de dourouc05 dourouc05 - Responsable Qt https://www.developpez.com
le 27/09/2017 à 20:53
La version finale de CUDA 9 vient de sortir, le téléchargement est maintenant libre, à l'occasion de l'édition chinoise de la GTC, la conférence technologique de NVIDIA.
Responsable bénévole de la rubrique HPC : Thibaut Cuvelier -