Plan du cours
Introduction au calcul accéléré par GPU
- Calcul hétérogène et architecture CPU-GPU
- Espaces d'exécution et de mémoire CUDA
- Compilation du code CUDA C++ avec nvcc et CMake
- Vérification de l'environnement de développement GPU
Algorithmes parallèles avec Thrust et CUB
- Trie, réduction et transformation accélérés par GPU
- Refactoring des algorithmes STL pour l'exécution sur GPU
- Vecteurs device de Thrust et politiques d'exécution
- Primitives CUB au niveau du device pour pipelines personnalisés
Architecture et gestion de la mémoire GPU
- Types de mémoire globale, constante et texture
- Allocation explicite et transferts de mémoire device
- Mémoire unifiée pour un accès simplifié aux données
- Coalescence de la mémoire et optimisation des modèles d'accès
Exécution asynchrone avec les flux CUDA
- Création et gestion des flux CUDA
- Couverture de l'exécution des noyaux avec les transferts de données
- Événements CUDA pour la gestion des dépendances
- Priorités des flux et réglage de la concurrence
Rédaction de noyaux CUDA personnalisés
- Le modèle de programmation SIMT et l'exécution par warp
- Configuration du lancement de noyau et boucles stride-grille
- Indexation des threads et grilles multidimensionnelles
- Gestion des erreurs et vérifications de l'API runtime CUDA
Hiérarchie des threads et modèle d'exécution
- Grilles, blocs et threads dans le code device
- Primitives au niveau du warp et opérations de scrutin (ballot)
- Synchronisation au niveau du bloc et barrières
- Analyse de l'occupation et de l'utilisation des ressources
Groupe coopératif pour une parallélisation flexible
- L'API cooperative_groups et les types de groupes
- Tuiles de blocs de threads et tiled_partition
- Lancements coopératifs au niveau de la grille
- Patterns de synchronisation multi-grilles
Techniques d'optimisation de la mémoire partagée
- Banques de mémoire partagée et évitement des conflits de banques
- Stratégies de tuilage pour les opérations matricielles
- Mémoire partagée en tant que cache géré par l'utilisateur
- cuda::shared_memory_mdspan pour les vues multidimensionnelles
Fusion de noyaux et patterns avancés de parallélisme
- Fusion de plusieurs noyaux pour réduire la surcharge de lancement
- Scan, réduction par clé et algorithmes segmentés
- Opérations atomiques et structures de données sans verrouillage
- Atomiques agrégées par warp pour le débit
Profilage et optimisation avec Nsight Systems
- Analyse chronologique des activités CPU et GPU
- Identification des goulots d'étranglement des transferts de mémoire
- Profilage de la performance et de l'occupation des noyaux
- Optimisation itérative avec Nsight Compute
Fonctionnalités modernes de C++ dans le code device CUDA
- Lambdas, constexpr et auto dans les noyaux
- Algorithmes parallèles C++17 et politiques d'exécution
- Concepts et plages C++20 sur le device
- Support C++23 dans nvcc et CCCL 3.x
Graphes CUDA et avancée de l'asynchronisme
- Définition et lancement de graphes CUDA
- Capture de graphe depuis l'exécution des flux
- Mise à jour de graphe et nœuds d'exécution conditionnelle
- Réduction de la latence de lancement pour les charges de travail itératives
Patterns d'intégration pour les applications existantes
- Enveloppement du code GPU derrière des interfaces C++
- Gestion des systèmes multi-GPU et NUMA
- Intégration du système de construction avec CMake et CUDA
- Débuggage du code device avec cuda-gdb
Résumé et meilleures pratiques
- Choix entre Thrust, CUB et noyaux personnalisés
- Portabilité des performances à travers les architectures GPU
- Organisation du code et RAII pour les ressources CUDA
- Prochaines étapes et parcours d'apprentissage avancés de CUDA
Pré requis
- Compétences de base en C++ incluant les expressions lambda, les templates et la STL
- Connaissance des algorithmes standard, des conteneurs et des itérateurs
- Aisance avec les boucles, les conditions et les fonctions
- Aucune connaissance préalable de CUDA ou de la programmation GPU requise
Public cible
- Développeurs C++ souhaitant accélérer des applications intensives en calcul avec des GPU
- Ingénieurs logiciels passant d'une programmation uniquement sur CPU à une programmation parallèle hétérogène
- Ingénieurs performance et développeurs quantitatifs travaillant avec de grands jeux de données
Nos clients témoignent (3)
Explication détaillée, répétition des points de manière subtile qui a vraiment bien ancré les connaissances. La volonté de Rod de vérifier à double tour les questions obscures que nous avons posées pour s'assurer que ses réponses étaient 100% correctes. De plus, son intérêt pour la discussion sur les avantages et les inconvénients des styles de codage alternatifs, afin que nous apprenions non seulement comment utiliser C++ selon nos intentions, mais aussi pourquoi il convient de le faire ainsi.
Nick Dillon - cellxica Ltd
Formation - Using C++ in Embedded Systems - Applying C++11/C++14
Traduction automatique
Le partage d'expérience, c'est le savoir-faire et la valeur de l'enseignant.
Carey Fan - Logitech
Formation - C/C++ Secure Coding
Traduction automatique
Le fait que cela se déroule en ligne nous a permis de gagner beaucoup de temps, ce qui était très apprécié. De plus, le formateur connaissait à la fois C# et C++, ce qui a été un grand avantage car il pouvait expliquer tout par rapport aux connaissances que nous avions déjà.
Gabor - Rheinmetall Electronics Hungary Kft
Formation - Advanced C++
Traduction automatique