CUDA 7 RC

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

Laisser un commentaire