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, Responsable Qt & Livres
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 ?


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 Matthieu76 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.
Avatar de BPStA 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 ?
Avatar de Matthieu76 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 ?

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