Merci d'avoir envoyé votre demande ! Un membre de notre équipe vous contactera sous peu.
Merci d'avoir envoyé votre réservation ! Un membre de notre équipe vous contactera sous peu.
Plan du cours
Introduction
- Qu’est-ce que CUDA ?
- CUDA par rapport à OpenCL et SYCL
- Aperçu des fonctionnalités et de l’architecture de CUDA
- Configuration de l’environnement de développement
Premiers pas
- Création d’un nouveau projet CUDA à l’aide de Visual Studio Code
- Exploration de la structure du projet et des fichiers
- Compilation et exécution du programme
- Affichage de la sortie en utilisant printf et fprintf
API CUDA
- Compréhension du rôle de l’API CUDA dans le programme hôte
- Utilisation de l’API CUDA pour interroger les informations et capacités de l’appareil
- Utilisation de l’API CUDA pour allouer et libérer de la mémoire appareil
- Utilisation de l’API CUDA pour copier des données entre l’hôte et l’appareil
- Utilisation de l’API CUDA pour lancer des noyaux et synchroniser les threads
- Utilisation de l’API CUDA pour gérer les erreurs et exceptions
CUDA C/C++
- Compréhension du rôle de CUDA C/C++ dans le programme appareil
- Utilisation de CUDA C/C++ pour écrire des noyaux qui s’exécutent sur le GPU et manipulent les données
- Utilisation des types de données, qualificateurs, opérateurs et expressions de CUDA C/C++
- Utilisation des fonctions intégrées de CUDA C/C++, telles que mathématiques, atomiques, warp, etc.
- Utilisation des variables intégrées de CUDA C/C++, telles que threadIdx, blockIdx, blockDim, etc.
- Utilisation des bibliothèques CUDA C/C++, telles que cuBLAS, cuFFT, cuRAND, etc.
Modèle de mémoire CUDA
- Compréhension de la différence entre les modèles mémoire hôte et appareil
- Utilisation des espaces mémoire CUDA, tels que global, partagé, constant et local
- Utilisation des objets mémoire CUDA, tels que pointeurs, tableaux, textures et surfaces
- Utilisation des modes d’accès mémoire CUDA, tels que lecture seule, écriture seule, lecture-écriture, etc.
- Utilisation du modèle de cohérence mémoire CUDA et des mécanismes de synchronisation
Modèle d’exécution CUDA
- Compréhension de la différence entre les modèles d’exécution hôte et appareil
- Utilisation des threads, blocs et grilles CUDA pour définir le parallélisme
- Utilisation des fonctions de thread CUDA, telles que threadIdx, blockIdx, blockDim, etc.
- Utilisation des fonctions de bloc CUDA, telles que __syncthreads, __threadfence_block, etc.
- Utilisation des fonctions de grille CUDA, telles que gridDim, gridSync, groupes coopératifs, etc.
Débogage
- Compréhension des erreurs et bugs courants dans les programmes CUDA
- Utilisation du débogueur de Visual Studio Code pour inspecter les variables, points d’arrêt, pile d’appels, etc.
- Utilisation de CUDA-GDB pour déboguer les programmes CUDA sous Linux
- Utilisation de CUDA-MEMCHECK pour détecter les erreurs et fuites mémoire
- Utilisation de NVIDIA Nsight pour déboguer et analyser les programmes CUDA sous Windows
Optimisation
- Compréhension des facteurs qui affectent les performances des programmes CUDA
- Utilisation des techniques de consolidation (coalescing) CUDA pour améliorer le débit mémoire
- Utilisation des techniques de mise en cache et de prédiction (prefetching) CUDA pour réduire la latence mémoire
- Utilisation de la mémoire partagée CUDA et de la mémoire locale pour optimiser les accès mémoire et la bande passante
- Utilisation du profilage CUDA et des outils de profilage pour mesurer et améliorer le temps d’exécution et l’utilisation des ressources
Résumé et prochaines étapes
Pré requis
- Une compréhension du langage C/C++ et des concepts de programmation parallèle
- Des connaissances de base en architecture informatique et hiérarchie mémoire
- De l’expérience avec les outils en ligne de commande et les éditeurs de code
Public cible
- Développeurs souhaitant apprendre à utiliser CUDA pour programmer des GPU NVIDIA et exploiter leur parallélisme
- Développeurs souhaitant écrire du code haute performance et évolutive capable de s’exécuter sur différents appareils CUDA
- Programmateurs souhaitant explorer les aspects bas niveau de la programmation GPU et optimiser les performances de leur code
28 Heures