Retour aux cours
AI021 Professional

Guide de programmation CUDA

La ressource officielle et complète destinée aux développeurs pour apprendre le modèle de programmation CUDA et comment écrire un code haute performance exécuté sur les GPU NVIDIA. Ce guide couvre l'architecture de la plateforme, l'interface de programmation, les fonctionnalités avancées du matériel et les spécifications techniques.

5.0
30.0h
1762 étudiants
1 j'aime
Intelligence Artificielle
Commencer à apprendre

Aperçu du cours

📚 Résumé du contenu

La ressource officielle et complète destinée aux développeurs pour apprendre le modèle de programmation CUDA et écrire des codes performants exécutés sur les GPU NVIDIA. Ce guide couvre l'architecture de la plateforme, l'interface de programmation, les fonctionnalités matérielles avancées et les spécifications techniques.

Maîtrisez l'art du calcul parallèle avec le guide de référence de l'industrie pour NVIDIA CUDA.

Auteur : NVIDIA Corporation

Remerciements : Copyright © 2007-2024 NVIDIA Corporation et filiales. Tous droits réservés.

🎯 Objectifs d'apprentissage

  1. Définir les rôles de l'hôte (CPU) et de l'appareil (GPU) au sein d'un système hétérogène.
  2. Expliquer le modèle de programmation SIMT et l'organisation hiérarchique des threads, blocs et grilles.
  3. Différencier le code PTX (Parallel Thread Execution) et le code binaire (cubins), et expliquer comment la compilation Juste-à-temps (JIT) facilite la compatibilité.
  4. Développer et compiler des noyaux CUDA : écrire des fonctions global, configurer l'exécution avec la notation à trois chevrons, et gérer le flux de compilation NVCC.
  5. Optimiser la mémoire et le déplacement des données : distinguer les modèles de mémoire Unifiée, Explicite et Mappée, et implémenter la mémoire hôte verrouillée en pages pour des transferts efficaces.
  6. Gérer l'exécution parallèle : utiliser les flux CUDA, les événements et les groupes coopératifs pour gérer les tâches asynchrones et synchroniser les opérations CPU-GPU.
  7. Effectuer des calculs d'arithmétique de pointeurs complexes et identifier les goulets d'étranglement architecturaux (von Neumann vs. Harvard).
  8. Mettre en œuvre des motifs d'exécution CUDA avancés, notamment les lancements conditionnels de noyaux et les transferts batchés hétérogènes de mémoire.
  9. Utiliser des fonctionnalités spécifiques au matériel comme les champs de thread, les proxys asynchrones et les pipelines afin de maximiser la concurrence.
  10. Configurer et ajuster les performances de la mémoire unifiée grâce à l'anticipation, aux indications d'utilisation et à la gestion de la taille des pages.

🔹 Leçon 1 : Fondamentaux CUDA et aperçu architectural

Aperçu : Cette leçon présente la plateforme de calcul parallèle CUDA et son architecture matérielle sous-jacente. Elle explore comment les systèmes hétérogènes utilisent à la fois les CPU et les GPU, le modèle de programmation SIMT (Single Instruction, Multiple Threads), ainsi que la hiérarchie des threads, blocs et grilles. Elle couvre également le processus de compilation CUDA, incluant les rôles du PTX, des cubins et des fatbins dans la garantie de compatibilité binaire et future.

Objectifs d'apprentissage :

  • Définir les rôles de l'hôte (CPU) et de l'appareil (GPU) au sein d'un système hétérogène.
  • Expliquer le modèle de programmation SIMT et l'organisation hiérarchique des threads, blocs et grilles.
  • Différencier le code PTX (Parallel Thread Execution) et le code binaire (cubins), et expliquer comment la compilation Juste-à-temps (JIT) facilite la compatibilité.

🔹 Leçon 2 : Programmation de base GPU et gestion de l'exécution

Aperçu : Cette leçon traite des aspects fondamentaux et avancés de la programmation GPU à l'aide de CUDA C++. Elle passe du développement de noyaux basiques et du flux de compilation NVCC aux sujets complexes de gestion de l'exécution, y compris la conception de noyaux SIMT, les conflits de banque de mémoire partagée et l'exécution asynchrone via les flux et événements. Les étudiants apprendront à équilibrer les modèles de mémoire (Unifiée vs. Explicite) et à optimiser l'occupation matérielle pour des calculs haute performance.

Objectifs d'apprentissage :

  • Développer et compiler des noyaux CUDA : écrire des fonctions global, configurer l'exécution avec la notation à trois chevrons, et gérer le flux de compilation NVCC.
  • Optimiser la mémoire et le déplacement des données : distinguer les modèles de mémoire Unifiée, Explicite et Mappée, et implémenter la mémoire hôte verrouillée en pages pour des transferts efficaces.
  • Gérer l'exécution parallèle : utiliser les flux CUDA, les événements et les groupes coopératifs pour gérer les tâches asynchrones et synchroniser les opérations CPU-GPU.

🔹 Leçon 3 : Logique mémoire avancée et systèmes multi-GPU

Aperçu : Cette leçon explore la transition des architectures mémoire fondamentales et de la logique des pointeurs vers des techniques avancées d'accélération GPU. Elle couvre les modèles d'exécution au niveau matériel (SIMT, Planification indépendante des threads), des mécanismes de synchronisation sophistiqués (barrières asynchrones, atomiques encadrées) et l'orchestration des systèmes multi-GPU à l'aide des API Runtime et Driver.

Objectifs d'apprentissage :

  • Effectuer des calculs d'arithmétique de pointeurs complexes et identifier les goulets d'étranglement architecturaux (von Neumann vs. Harvard).
  • Mettre en œuvre des motifs d'exécution CUDA avancés, notamment les lancements conditionnels de noyaux et les transferts batchés hétérogènes de mémoire.
  • Utiliser des fonctionnalités spécifiques au matériel comme les champs de thread, les proxys asynchrones et les pipelines afin de maximiser la concurrence.

🔹 Leçon 4 : Optimisation, graphes et accélérateurs matériels

Aperçu : Cette leçon aborde les techniques de programmation CUDA haute performance, en se concentrant sur l'optimisation du déplacement des données et du flux d'exécution. Elle explore la transition de l'exécution par flux vers les graphes CUDA persistants, le contrôle granulaire de la mémoire unifiée via l'anticipation et les indications, ainsi que l'utilisation d'accélérateurs matériels spécifiques comme le Tensor Memory Accelerator (TMA) et la persistance du cache L2. Elle détaille également des schémas de synchronisation avancés, la partition des ressources via les Green Contexts, et l'interopérabilité entre API pour le calcul hétérogène moderne.

Objectifs d'apprentissage :

  • Configurer et ajuster les performances de la mémoire unifiée grâce à l'anticipation, aux indications d'utilisation et à la gestion de la taille des pages.
  • Créer, mettre à jour et exécuter des graphes CUDA, y compris l'utilisation de nœuds mémoire et de lancements côté appareil.
  • Implémenter une synchronisation avancée à l’aide de barrières asynchrones et du schéma Producteur-Consommateur.

🔹 Leçon 5 : Référence technique et extensions du langage

Aperçu : Cette leçon propose une analyse approfondie des spécifications de référence du modèle de programmation CUDA et des extensions du langage C++. Elle couvre l'interface matériel-logiciel via les capacités de calcul, les variables d'environnement pour contrôler l'exécution en temps réel, ainsi que les exigences syntaxiques spécifiques pour écrire du code dispositif hautement performant en utilisant les normes modernes C++, les groupes coopératifs et les intrinsèques matérielles spécialisées.

Objectifs d'apprentissage :

  • Identifier les contraintes matérielles et les jeux de fonctionnalités selon les versions de la capacité de calcul GPU.
  • Configurer l'environnement d'exécution CUDA et la compilation JIT à l'aide de variables d'environnement au niveau système.
  • Appliquer les extensions du langage C++ (annotations, lambdas et templates) tout en respectant les restrictions côté dispositif.