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 Signaler un problème

Avatar de marsupial marsupial - Membre émérite 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 confirmé 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.
Avatar de dourouc05 dourouc05 - Responsable Qt https://www.developpez.com
le 14/12/2017 à 13:29
Sortie de CUDA 9.1 avec des améliorations de performance
et intègre des améliorations de performance et de nouvelles fonctionnalités pour accélérer l'apprentissage profondnd

NVIDIA veut rester à la pointe de la performance pour tout ce qui concerne l’apprentissage profond et investit donc massivement dans le développement de CUDA, sa solution pour exécuter du code sur ses processeurs graphiques. Un peu plus de six mois après la version 9.0, voici que CUDA 9.1 est disponible.

Cette nouvelle mouture se concentre sur des améliorations de performance, notamment au niveau des pilotes. Ainsi, lancer un noyau peut être jusque douze fois plus rapide que précédemment. Toujours au niveau du cœur de CUDA, le compilateur est maintenant plus rapide et est compatible avec de nouvelles versions d’autres compilateurs : XLC 13.1.6 pour AIX, Clang 4 sur Linux et Intel C++ 17.0 (pour ce dernier, toutes les fonctionnalités C++14 sont maintenant disponibles). Une petite restriction a été apportée au niveau du langage : les opérateurs ne peuvent plus être marqués __global__ ; en réalité, précédemment, cette annotation était tolérée dans le langage, mais ne fonctionnait pas à tous les coups et pouvait occasionner des plantages à l’exécution.

Les bibliothèques standard CUDA ont vu plus de modifications. Pour les calculs de FFT, cuFFT est nettement plus efficace sur plusieurs GPU grâce à une série d’heuristiques qui diminuent la consommation de mémoire. En algèbre linéaire, cuBLAS dispose de deux nouvelles fonctions de multiplication entre matrices en spécifiant les précisions données et voulues : ainsi, on peut exploiter au mieux les cœurs tensoriels des nouveaux GPU Volta ; ces deux fonctions seront surtout utiles pour les applications de traduction et de modélisation de séquences avec des réseaux neuronaux profonds. Les NPP (NVIDIA Performance Primitive) reçoivent plus de nouvelles fonctionnalités, de nouvelles routines d’augmentation des images. Celles-ci incluent un bon nombre d’opérations morphologiques, mais aussi d’étiquetage de composantes connectées.

Télécharger CUDA 9.1.

Sources : What’s New in CUDA, notes de version.

Et vous ?

Que pensez-vous de cette nouvelle version de CUDA ?
Avatar de Matthieu76 Matthieu76 - Membre confirmé https://www.developpez.com
le 24/01/2018 à 15:08
CUDA n'est toujours pas compatible à le compilateur mvsc 2017 ?
Dans mon cas j'ai dû compiler avec mvsc 2015.3.
Avatar de dourouc05 dourouc05 - Responsable Qt https://www.developpez.com
le 01/06/2018 à 23:55
Sortie de CUDA 9.2, l'interface de programmation de processeurs graphiques de NVIDIA,
qui facilite la création de noyaux pour l'algèbre linéaire

L’interface de calcul sur processeur graphique de NVIDIA dispose d’une nouvelle version, numérotée 9.2, six mois après la 9.1. En résumé, CUDA 9.2 apporte des mises à jour des bibliothèques et des optimisations au niveau du pilote. Ainsi, les noyaux CUDA pourront se lancer jusqu’à deux fois plus vite par rapport à la version précédente, grâce à des modifications dans l’implémentation de CUDA.

Au niveau des bibliothèques, CUTLASS fait son apparition. Ce code exploite les mécanismes de programmation générique de C++ pour faciliter la création de noyaux d’algèbre linéaire plus précis (contrairement à BLAS, par exemple, qui est limité à des opérations de base — qui permettent d’exprimer tout calcul d’algèbre linéaire, mais pas forcément de manière optimale pour le matériel).

Les bibliothèques existantes ont aussi vu quelques mises à jour, comme cuBLAS pour les opérations des réseaux neuronaux récurrents et convolutionnels, ainsi que cuFFT, pour des tailles de matrice correspondant à des nombres premiers.

Télécharger CUDA 9.2.

Source : CUDA 9.2 now available.

Et vous ?

Que pensez-vous de cette nouvelle version de CUDA ?
Responsable bénévole de la rubrique HPC : Thibaut Cuvelier -