Sortie de CUDA 10
L'API de calcul sur processeur graphique de NVIDIA, avec la possibilité de définir ses calculs comme un graphe de dépendances

Le , par dourouc05

62PARTAGES

14  0 
]Dans le mois de l’annonce de CUDA 10, NVIDIA lance effectivement la nouvelle version de son API de calcul sur processeur graphique. Outre la gestion de la nouvelle architecture Turing, cette version 10 apporte bon nombre de nouveautés, partiellement déjà annoncées.

Une grande nouveauté de CUDA 10 facilitera l’expression de programmes de calcul compliqués, où certaines opérations ne peuvent être lancées que quand d’autres sont terminées : par exemple, on ne peut copier les résultats d’un calcul sur le processeur central que quand il a fini de s’exécuter sur la carte graphique. CUDA disposait déjà de la notion de flux, mais elle n’autorisait pas une grande flexibilité : le processeur central doit toujours gérer l’ordonnancement des tâches, par exemple. Lancer un noyau de calcul prend toujours un certain temps, non négligeable quand le noyau est assez petit.

L’idée des graphes de calcul est donc d’indiquer à CUDA les tâches à exécuter et leurs dépendances, de telle sorte que la carte graphique ou le pilote puisse décider, sans attendre l’application, des tâches à exécuter par la suite. Dans le cas de noyaux très rapides à l’exécution dans un processus plus long, les coûts de lancement sont en grande partie éliminés. Également, CUDA peut réordonner les tâches afin d’améliorer les temps d’exécution, notamment en réduisant les mouvements de données : la carte graphique sait quand des données seront réutilisées, par exemple.
Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
cudaGraphCreate(&graph);
cudaGraphAddNode(graph, kernel_a, {}, ...);
cudaGraphAddNode(graph, kernel_b, { kernel_a }, ...);
cudaGraphAddNode(graph, kernel_c, { kernel_a }, ...);
cudaGraphAddNode(graph, kernel_d, { kernel_b, kernel_c }, ...);

cudaGraphInstantiate(&instance, graph);

for(int i = 0; i < 100; i++)
      cudaGraphLaunch(instance, stream);

Une API spécifique permet de mélanger un code à base de flux et de graphe, en enregistrant les flux et en indiquant les moments où les flux doivent s’attendre.

Source : CUDA 10 Features Revealed: Turing, CUDA Graphs and More.

Et vous ?

Qu'en pensez-vous ?

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de Matthieu76
Membre éclairé https://www.developpez.com
Le 01/10/2018 à 10:12
Ça a l'air vraiment cool ce système de graph, ça me donne presque envie de me remettre au CUDA, malheureusement je n'ai pas le temps ...
En tout cas cela semble beaucoup plus simple pour tout ce qui est calculs de graph, réseaux de neurones, et autres algorithmes. D'autant plus que la plupart des algos peuvent être représenter sous forme de graph.
0  0 
Avatar de BPStA
Futur Membre du Club https://www.developpez.com
Le 10/10/2018 à 12:41
Bonjour,

J'utilise Visual studio 2015 et CUDA. Passer à Visual Studio 2017 community et CUDA, annoncé récemment comme enfin possible, est tout sauf simple. Je n'ai pas encore réussi à les faire fonctionner ensemble. Existe-t-il une note détaillée d'installation ?
0  0 
Avatar de Matthieu76
Membre éclairé https://www.developpez.com
Le 11/10/2018 à 12:57
Je ne sais pas trop mais au début j'avais eu des problème d’installation, j'avais du repasser à MSVC2015. C'était il y a un peu plus d'un an et à l'époque j'utilisait QtCreator comme IDE. Je suis dispo pour d'aider si tu veux. C'est quoi ton problème exactement ?
0  0 
Avatar de dourouc05
Responsable Qt & Livres https://www.developpez.com
Le 01/03/2019 à 0:45
Sortie de CUDA 10.1, l'interface de calcul sur carte graphique de NVIDIA,
avec une bibliothèque plus légère pour les produits matriciels

Moins de six mois après la sortie de CUDA 10.0, voici la première version mineure qui apporte une série de nouveautés. Notamment, cuBLASLt est une variante allégée de cuBLAS pour l'algèbre linéaire, spécialement focalisée sur le produit entre matrices (GEMM). Cette bibliothèque propose une API plus flexible que BLAS (une interface qui existe depuis 1990), notamment au niveau de la représentation en mémoire des matrices, peu importe le type des données (notamment en précision réduite, sur huit ou seize bits).

Les solveurs pour les valeurs propres ont également été revisités, avec des améliorations de performance leur permettant d'aller une fois et demi plus vite qu'avant. cuSOLVER propose aussi de nouveaux solveurs pour récupérer un sous-ensemble de valeurs propres ( SYEVDX et SYGVDX).

Côté génération de nombres aléatoires, six algorithmes ont été retravaillés (MTGP32, MRG32k3a, Sobol32 et Sobol64), avec une amélioration de performance qui peut monter jusqu'à un facteur quatre ! nvJPEG, une bibliothèque d'encodage et de décodage de fichiers JPEG, accélère fortement les opérations en lots.

Télécharger CUDA 10.1. Voir aussi les notes de version.
11  0 

 
Responsable bénévole de la rubrique HPC : Thibaut Cuvelier -

Partenaire : Hébergement Web