FAQ CUDA
FAQ CUDAConsultez toutes les FAQ
Nombre d'auteurs : 1, nombre de questions : 43, dernière mise à jour : 16 juin 2021
CUDA est une architecture de calcul parallèle qui utilise la capacité de calcul parallèle des GPU NVIDIA. En tant que tel, il permet le développement d'applications dans un langage de relativement haut niveau, comme le C ou le C++, et est compatible avec les API standard comme DirectX et OpenCL.
Il s'agit d'extensions propres à NVIDIA pour le C. Ce langage est compilé grâce à nvcc.
CUDA est disponible dès l'origine sous Windows, la gestion de macOS et de Linux a été ajoutée plus tard.
Lien : GPU compatibles
De manière générale, toutes les cartes graphiques NVIDIA produites dès 2008 sont compatibles avec CUDA : tant les GeForce que les Quadro, qu'elles soient de bureau ou mobile. En particulier, les cartes de la gamme Tesla sont prévues exclusivement pour être utilisées avec CUDA et ne disposent pas des mécaniques nécessaires pour afficher des images sur un écran.
Officiellement, le C, le C++ et le Fortran sont gérés.
La communauté fournit déjà des bindings pour d'autres langages :
- Python : PyCUDA
- Java : jCUDA, JCublas, JCufft, JCudpp
- .NET : CUDA.NET
Cependant, le support du C++ est limité aux fonctions qui s'exécutent sur l'hôte. Les fonctions pour les périphériques doivent se limiter au C. Néanmoins, quelques fonctionnalités du C++ fonctionnent sur le périphérique (templates, surcharge d'opérateurs), mais ne sont pas du tout supportées.
Lien : PyCuda
Lien : jCuda, JCublas, JCufft, JCudpp
Lien : CUDA.NET
CUDA est prévu pour des calculs efficaces de tout type sur GPU. Les développeurs peuvent compiler du C pour CUDA pour éviter de réécrire leurs algorithmes pour se plier aux concepts des API graphiques.
CUDA expose quelques fonctionnalités du matériel qui ne sont pas disponibles par ces API. La plus importante est la mémoire partagée. Ceci permet de mettre en caches les données souvent utilisées, ce qui peut accélérer l'accès à la mémoire. Combiné à une synchronisation des threads, ceci permet le calcul parallèle coopératif de données présentes sur le processeur, ce qui réduit fortement le coût du transfert des données de nombreux algorithmes parallèles.
Ces API forcent les développeurs à stocker leurs données dans des textures, ce qui requiert de les stocker dans des tableaux à deux dimensions, en complexifiant la situation, déjà non triviale.
CUDA offre aussi des transferts de données optimisés depuis et vers le GPU.
Parallel Thread eXecution.
Il s'agit de l'assembleur, généré par nvcc, exécuté sur le GPU compatible avec CUDA. Avant CUDA 2.2, il était aussi possible de compiler cet assembleur pour pouvoir l'utiliser sur CPU, ou sur toute autre plateforme.
Ce langage est parfaitement défini : sa documentation est fournie avec CUDA.
Les fichiers PTX sont compilés à l'aide de ptxas, utilitaire fourni avec CUDA.
Avec ce langage, il est possible d'utiliser certains caches qui ne sont pas disponibles à travers le runtime ou le pilote.