Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Sortie de CUDA 7.0 RC
Gestion de C++11 et nouvelle bibliothèque d'algèbre linéaire

Le , par dourouc05

0PARTAGES

4  0 
CUDA 7, dont la RC vient de sortir, est présentée par NVIDIA comme une « mise à jour importante de la plateforme ». Outre les habituelles améliorations de performances, du côté des plateformes, l’architecture IBM POWER sera maintenant gérée dans toutes les versions du SDK (seule la version 5.5 était disponible) — ce qui n’est pas étonnant, NVIDIA étant membre de la fondation OpenPOWER.

Du côté du compilateur, nvcc accepte le code C++11 : les « nouvelles » fonctionnalités comme les types automatiques (mot clé auto), les fonctions anonymes (lambdas), les boucles for sur des plages de valeur, etc. Le code accéléré pourra profiter des nombreuses améliorations syntaxiques pour devenir plus clair, plus simple, plus expressif.

La bibliothèque Thrust, qui imite la bibliothèque standard C++ pour l’accélération sur GPU, est disponible en version 1.8. Cette couche d’abstraction permet maintenant d’appeler des algorithmes Thrust depuis du code pour le GPU ou encore d’exécuter le code par flux. Certains algorithmes ont été retravaillés pour en améliorer les performances, comme le tri (jusqu’à trois fois plus rapide pour des types non primitifs).

Une autre bibliothèque est maintenant incluse dans la distribution : cuSOLVER, pour l’algèbre linéaire dense (cusolverDN) ou creuse mais aussi pour les problèmes aux valeurs propres (cusolverSP). Le niveau de fonctionnalité est équivalent à LAPACK : les bibliothèques déjà inclues étaient équivalentes à BLAS (cuBLAS, cuSPARSE) et proposaient des fonctionnalités de base en algèbre linéaire (multiplication de matrices, principalement). cuSOLVER apporte les décompositions LU, QR, de Cholesky et en valeurs singulières, ainsi que des solveurs linéaires creux.

Le code pour le GPU ne doit plus être compilé en même temps que l’application : l’environnement d’exécution propose maintenant une API pour compiler du code CUDA-C++ lors de l’exécution de l’application, avec une possibilité de sauvegarde des noyaux ainsi compilés, nvrtc. L’utilité ? Pour optimiser des noyaux de calcul, une technique courante est d’employer les templates C++ pour générer plusieurs versions du code avec certains paramètres fixés, que le compilateur peut ainsi mieux optimiser ; le problème est que la génération de toutes ces variantes doit être faite à la main avant la compilation (instancier chaque variante et choisir laquelle utiliser) : il sera maintenant possible d’éviter cette étape, puisque le noyau sera compilé juste avant son exécution.

Source : CUDA 7 Release Candidate Feature Overview: C++11, New Libraries, and More
Billet de blog.

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

Avatar de captaindidou
Inactif https://www.developpez.com
Le 15/01/2015 à 23:36
On aurait bien aimé le support GCC sous windows.
Question portabilité Linux/Windows, nous aurions été gagnants.
Une prochaine fois, peut-être.
0  0 
Avatar de mintho carmo
Membre averti https://www.developpez.com
Le 16/01/2015 à 15:16
Je crois pas que ce soit a l'ordre du jour. LLVM/Clang a une architecture intermodulaire, qui permet d'inplementer facilement des analyses syntaxiques, appeler des back-end, etc. Pas GCC
0  0 
Avatar de dourouc05
Responsable Qt & Livres https://www.developpez.com
Le 17/01/2015 à 15:13
D'ailleurs, aux dernières nouvelles, le compilateur NVCC était basé sur LLVM : https://developer.nvidia.com/cuda-llvm-compiler. Maintenant, utiliser GCC pour compiler du code CUDA, ça n'est pas de la pure science fiction : les modifications pour sortir du PTX (assembleur de haut niveau utilisé pour les noyaux CUDA, puis compilé par le pilote juste avant exécution) arrivent pour GCC 5.0 (http://www.phoronix.com/scan.php?pag...amp;px=MTgzNTM), mais uniquement dans le contexte d'OpenACC 2.0. Peut-être un jour une implémentation libre de CUDA basée sur GCC… ?
0  0 
Avatar de mintho carmo
Membre averti https://www.developpez.com
Le 17/01/2015 à 15:38
Bien vu pour le PTX. Je ne suis pas trop ce qu'il se passe de coté depuis que NVIDIA a rendu les spécifications publiques (je me souviens juste du projet Ocelot). Et j'avais effectivement vu passer des travaux pour porter OpenACC sur GCC.

Je crois (mais je n'ai pas étudié en profondeur la question) que LLVM est utilisé parce qu'il permet d'intégrer facilement un back-end dans la chaîne de compilation, ce qui permet par exemple d'utiliser l'arbre syntaxique généré par LLVM/CLang pour faire le pré-travail de compilation du code CUDA (j'imagine que c'est pour cela qu'ils ont pu porter facilement C++11 dans CUDA, si le travail a déjà été fait en partie par LLVM/Clang). GCC est à la base moins modulaire, donc il est probablement plus difficile d'intégrer la compilation CUDA dedans.

Une différence importante entre LLVM et GCC pour le support de CUDA quand même : le premier est développé par NVIDIA, le second est un projet indépendant. Cela pourrait avoir un impact sur le code généré, en particulier sur les micro-optimisations. Sauf si NVIDIA participe aussi au développement de GCC aussi.

Peut être un compilateur Visual Studio CUDA un jour ?
0  0 
Avatar de dourouc05
Responsable Qt & Livres https://www.developpez.com
Le 18/03/2015 à 18:12
La version finale est disponible : http://devblogs.nvidia.com/parallelf...-cpp11-cuda-7/.
0  0