Exemples pour les développeurs CUDA qui démontrent les fonctionnalités de CUDA Toolkit. Cette version prend en charge CUDA Toolkit 12.5.
Cette section décrit les notes de version pour les exemples CUDA sur GitHub uniquement.
Téléchargez et installez le CUDA Toolkit 12.5 pour votre plate-forme correspondante. Pour connaître la configuration système requise et les instructions d'installation de cuda toolkit, veuillez vous référer au Guide d'installation Linux et au Guide d'installation Windows.
En utilisant git, clonez le référentiel d'échantillons CUDA à l'aide de la commande ci-dessous.
git clone https://github.com/NVIDIA/cuda-samples.git
Sans utiliser git, le moyen le plus simple d'utiliser ces exemples est de télécharger le fichier zip contenant la version actuelle en cliquant sur le bouton "Télécharger ZIP" sur la page du dépôt. Vous pouvez ensuite décompresser l’intégralité de l’archive et utiliser les échantillons.
Les exemples Windows sont créés à l’aide de l’IDE Visual Studio. Les fichiers de solution (.sln) sont fournis pour chaque version prise en charge de Visual Studio, au format :
*_vs<version>.sln - for Visual Studio <version>
Des exemples complets de fichiers de solution existent dans le répertoire parent du dépôt :
Chaque échantillon individuel possède son propre ensemble de fichiers de solution dans : <CUDA_SAMPLES_REPO>Samples<sample_dir>
Pour créer/examiner tous les exemples en même temps, les fichiers de solution complets doivent être utilisés. Pour créer/examiner un seul échantillon, les exemples de fichiers de solution individuels doivent être utilisés.
Les exemples Linux sont construits à l'aide de makefiles. Pour utiliser les makefiles, remplacez le répertoire actuel par le répertoire exemple que vous souhaitez créer et exécutez make :
$ cd <sample_dir>
$ make
Les exemples de makefiles peuvent profiter de certaines options :
TARGET_ARCH= - compilation croisée ciblant une architecture spécifique. Les architectures autorisées sont x86_64, ppc64le, armv7l, aarch64. Par défaut, TARGET_ARCH est défini sur HOST_ARCH. Sur une machine x86_64, ne pas définir TARGET_ARCH équivaut à définir TARGET_ARCH=x86_64.
$ make TARGET_ARCH=x86_64
$ make TARGET_ARCH=ppc64le
$ make TARGET_ARCH=armv7l
$ make TARGET_ARCH=aarch64
Voir ici pour plus de détails sur la compilation multiplateforme d'échantillons cuda.
dbg=1 - construire avec des symboles de débogage
$ make dbg=1
SMS="AB..." - remplace les architectures SM pour lesquelles l'exemple sera construit, où "AB ..."
est une liste d'architectures SM délimitée par des espaces. Par exemple, pour générer SASS pour SM 50 et SM 60, utilisez SMS="50 60"
.
$ make SMS="50 60"
HOST_COMPILER=<host_compiler> - remplace le compilateur hôte g++ par défaut. Consultez le Guide d'installation Linux pour une liste des compilateurs hôtes pris en charge.
$ make HOST_COMPILER=g++
Exemples CUDA de base pour les débutants qui illustrent les concepts clés de l'utilisation de CUDA et des API d'exécution CUDA.
Exemples d'utilitaires qui montrent comment interroger les capacités de l'appareil et mesurer la bande passante GPU/CPU.
Exemples illustrant les concepts liés à CUDA et les techniques courantes de résolution de problèmes.
Exemples illustrant les fonctionnalités CUDA (groupes coopératifs, parallélisme dynamique CUDA, graphiques CUDA, etc.).
Exemples montrant comment utiliser les bibliothèques de la plateforme CUDA (NPP, NVJPEG, NVGRAPH cuBLAS, cuFFT, cuSPARSE, cuSOLVER et cuRAND).
Échantillons spécifiques au domaine (Graphisme, Finance, Traitement d'image).
Exemples illustrant l’optimisation des performances.
Exemples illustrant l'utilisation de libNVVVM et NVVM IR.
Certains exemples CUDA s'appuient sur des applications et/ou des bibliothèques tierces, ou sur des fonctionnalités fournies par la boîte à outils et le pilote CUDA, pour être créés ou exécutés. Ces dépendances sont répertoriées ci-dessous.
Si un exemple possède une dépendance tierce disponible sur le système, mais qui n'est pas installée, l'exemple s'abandonnera au moment de la génération.
Les dépendances de chaque échantillon sont répertoriées dans la section Dépendances de son README.
Ces dépendances tierces sont requises par certains exemples CUDA. Si disponibles, ces dépendances sont soit installées automatiquement sur votre système, soit installables via le gestionnaire de packages de votre système (Linux) ou un site Web tiers.
FreeImage est une bibliothèque d'imagerie open source. FreeImage peut généralement être installé sur Linux à l'aide du système de gestion de packages de votre distribution. FreeImage peut également être téléchargé à partir du site Web FreeImage.
Pour configurer FreeImage sur un système Windows, extrayez la distribution DLL FreeImage dans le dossier ../../../Common/FreeImage/Dist/x64
de manière à ce qu'elle contienne les fichiers .h et .lib. Copiez le fichier .dll dans le dossier bin/win64/Debug
et bin/win64/Release
au niveau racine.
MPI (Message Passing Interface) est une API permettant de communiquer des données entre des processus distribués. Un compilateur MPI peut être installé à l'aide du système de gestion de packages de votre distribution Linux. Il est également disponible sur certaines ressources en ligne, comme Open MPI. Sous Windows, pour créer et exécuter des applications MPI-CUDA, vous pouvez installer le SDK MS-MPI.
Certains exemples ne peuvent être exécutés que sur un système d'exploitation 64 bits.
DirectX est un ensemble d'API conçues pour permettre le développement d'applications multimédia sur les plateformes Microsoft. Pour les plates-formes Microsoft, le pilote CUDA de NVIDIA prend en charge DirectX. Plusieurs exemples CUDA pour Windows démontrent l'interopérabilité CUDA-DirectX. Pour créer de tels exemples, il faut installer Microsoft Visual Studio 2012 ou supérieur, qui fournit le SDK Microsoft Windows pour Windows 8.
DirectX 12 est un ensemble d'API de programmation avancées de bas niveau qui peuvent réduire la surcharge du pilote, conçues pour permettre le développement d'applications multimédia sur les plates-formes Microsoft à partir du système d'exploitation Windows 10. Pour les plates-formes Microsoft, le pilote CUDA de NVIDIA prend en charge DirectX. Peu d'exemples CUDA pour Windows démontrent l'interopérabilité CUDA-DirectX12. Pour créer de tels exemples, il faut installer le SDK Windows 10 ou supérieur, avec VS 2015 ou VS 2017.
OpenGL est une bibliothèque graphique utilisée pour le rendu 2D et 3D. Sur les systèmes prenant en charge OpenGL, l'implémentation OpenGL de NVIDIA est fournie avec le pilote CUDA.
OpenGL ES est une bibliothèque graphique de systèmes embarqués utilisée pour le rendu 2D et 3D. Sur les systèmes prenant en charge OpenGL ES, l'implémentation OpenGL ES de NVIDIA est fournie avec le pilote CUDA.
Vulkan est une API de calcul et de graphisme 3D multiplateforme à faible surcharge. Vulkan cible les applications graphiques 3D en temps réel hautes performances telles que les jeux vidéo et les médias interactifs sur toutes les plateformes. Sur les systèmes prenant en charge Vulkan, l'implémentation Vulkan de NVIDIA est fournie avec le pilote CUDA. Pour créer et exécuter des applications Vulkan, il faut installer le SDK Vulkan.
OpenMP est une API pour la programmation multitraitement. OpenMP peut être installé à l'aide du système de gestion de packages de votre distribution Linux. Il est généralement préinstallé avec GCC. Il peut également être trouvé sur le site Web OpenMP.
Screen est un système de fenêtrage présent sur le système d'exploitation QNX. Screen se trouve généralement dans le cadre du système de fichiers racine.
X11 est un système de fenêtrage que l'on trouve couramment sur les systèmes d'exploitation de style *-nix. X11 peut être installé à l'aide du gestionnaire de packages de votre distribution Linux et est préinstallé sur les systèmes Mac OS X.
EGL est une interface entre les API de rendu Khronos (telles que OpenGL, OpenGL ES ou OpenVG) et le système de fenêtrage natif de la plateforme sous-jacente.
EGLOutput est un ensemble d'extensions EGL qui permettent à EGL de s'afficher directement à l'écran.
EGLSync est un ensemble d'extensions EGL qui fournit des objets de synchronisation qui sont des primitives de synchronisation, représentant des événements dont l'achèvement peut être testé ou attendu.
NvSci est un ensemble de bibliothèques d'interfaces de communication à partir desquelles CUDA interagit avec NvSciBuf et NvSciSync. NvSciBuf permet aux applications d'allouer et d'échanger des tampons en mémoire. NvSciSync permet aux applications de gérer des objets de synchronisation qui se coordonnent lorsque les séquences d'opérations commencent et se terminent.
NvMedia offre un traitement puissant des données multimédia pour une véritable accélération matérielle sur les appareils NVIDIA Tegra. Les applications exploitent l'interface de programmation d'application (API) NvMedia pour traiter les données d'image et vidéo.
Ces fonctionnalités CUDA sont nécessaires à certains échantillons CUDA. Ils sont fournis soit par la boîte à outils CUDA, soit par le pilote CUDA. Certaines fonctionnalités peuvent ne pas être disponibles sur votre système.
Les routines de rappel CUFFT sont des routines de noyau fournies par l'utilisateur que CUFFT appellera lors du chargement ou du stockage de données. Ces routines de rappel ne sont disponibles que sur les systèmes Linux x86_64 et ppc64le.
CDP (CUDA Dynamic Parallellism) permet de lancer des noyaux à partir de threads exécutés sur le GPU. CDP n'est disponible que sur les GPU avec une architecture SM de 3,5 ou supérieure.
Les groupes coopératifs multi-blocs (MBCG) étendent les groupes coopératifs et le modèle de programmation CUDA pour exprimer la synchronisation entre blocs de threads. MBCG est disponible sur les GPU avec une architecture Pascal et supérieure.
Les groupes coopératifs multi-appareils étendent les groupes coopératifs et le modèle de programmation CUDA permettant aux blocs de threads s'exécutant sur plusieurs GPU de coopérer et de se synchroniser au fur et à mesure de leur exécution. Cette fonctionnalité est disponible sur les GPU avec une architecture Pascal et supérieure.
CUBLAS (CUDA Basic Linear Algebra Subroutines) est une version accélérée par GPU de la bibliothèque BLAS.
IPC (Interprocess Communication) permet aux processus de partager des pointeurs de périphériques.
CUFFT (CUDA Fast Fourier Transform) est une bibliothèque FFT accélérée par GPU.
CURAND (CUDA Random Number Generation) est une bibliothèque RNG accélérée par GPU.
CUSPARSE (CUDA Sparse Matrix) fournit des sous-programmes d'algèbre linéaire utilisés pour les calculs de matrice clairsemée.
La bibliothèque CUSOLVER est un package de haut niveau basé sur les bibliothèques CUBLAS et CUSPARSE. Il combine trois bibliothèques distinctes sous un même toit, chacune pouvant être utilisée indépendamment ou de concert avec d'autres bibliothèques de boîtes à outils. L'objectif de CUSOLVER est de fournir des fonctionnalités utiles de type LAPACK, telles que la factorisation matricielle commune et les routines de résolution triangulaire pour les matrices denses, un solveur de moindres carrés clairsemés et un solveur de valeurs propres. De plus, cuSolver fournit une nouvelle bibliothèque de refactorisation utile pour résoudre des séquences de matrices avec un modèle de parcimonie partagé.
NPP (NVIDIA Performance Primitives) fournit des fonctions de traitement d'image, de vidéo et de signal accélérées par GPU.
NVGRAPH est une bibliothèque d'analyse graphique accélérée par GPU.
La bibliothèque NVJPEG offre une fonctionnalité de décodage JPEG accélérée par GPU pour les formats d'image couramment utilisés dans les applications d'apprentissage en profondeur et multimédia hyperscale.
NVRTC (CUDA RunTime Compilation) est une bibliothèque de compilation d'exécution pour CUDA C++.
Les priorités de flux permettent la création de flux avec des priorités spécifiées. Les priorités de flux ne sont disponibles que sur les GPU avec une architecture SM de 3,5 ou supérieure.
UVM (Unified Virtual Memory) permet une mémoire accessible à la fois par le CPU et le GPU sans copie explicite entre les deux. UVM est uniquement disponible sur les systèmes Linux et Windows.
FP16 est un format à virgule flottante 16 bits. Un bit est utilisé pour le signe, cinq bits pour l'exposant et dix bits pour la mantisse.
Prise en charge NVCC des fonctionnalités C++11.
Les exemples libNVVM sont créés à l'aide de CMake 3.10 ou version ultérieure.
Nous apprécions vos commentaires sur les problèmes et vos suggestions d’échantillons. Pour le moment, nous n’acceptons pas les contributions du public, revenez ici à mesure que nous faisons évoluer notre modèle de contribution.
Nous utilisons Google C++ Style Guide pour toutes les sources https://google.github.io/styleguide/cppguide.html
Les réponses aux questions fréquemment posées sur CUDA sont disponibles sur http://developer.nvidia.com/cuda-faq et dans les notes de version de CUDA Toolkit.