Plan du cours
Introduction au calcul accéléré par GPU
- Informatique 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
- Tri, réduction et transformation accélérés par GPU
- Réfactorisation des algorithmes STL pour l'exécution sur GPU
- Vecteurs de périphérique Thrust et politiques d'exécution
- Primitives au niveau du dispositif CUB pour des pipelines personnalisés
Architecture et gestion de la mémoire GPU
- Types de mémoire globale, constante et de texture
- Allocation explicite et transferts de mémoire de périphérique
- Mémoire unifiée pour simplifier l'accès aux données
- Regroupement de la mémoire et optimisation des schémas d'accès
Exécution asynchrone avec les flux CUDA
- Création et gestion des flux CUDA
- SUPERPOSITION 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
Écriture de noyaux CUDA personnalisés
- Le modèle de programmation SIMT et l'exécution par fil
- Configuration du lancement du noyau et boucles d'adresse de grille
- Indexation des fils et grilles multidimensionnelles
- Gestion des erreurs et vérifications de l'API runtime CUDA
Hiérarchie des fils et modèle d'exécution
- Grilles, blocs et fils dans le code de périphérique
- Primitives au niveau du fil 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 fils et tiled_partition
- Lancements coopératifs au niveau de la grille
- Patrones de synchronisation multi-grilles
Techniques d'optimisation de la mémoire partagée
- Banques de mémoire partagée et évitement des conflits de banque
- 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 schémas parallèles avancés
- Fusion de plusieurs noyaux pour réduire la surcharge de lancement
- Scans, réductions par clé et algorithmes segmentés
- Opérations atomiques et structures de données sans verrouillage
- Atomiques agrégées au niveau du fil pour le débit
Profilage et optimisation avec Nsight Systems
- Analyse chronologique de l'activité du CPU et du GPU
- Identification des goulots d'étranglement du transfert de mémoire
- Profilage de la performance et de l'occupation des noyaux
- Optimisation itérative avec Nsight Compute
Fonctionnalités C++ modernes dans le code de dispositif CUDA
- Lambdas, constexpr et auto dans les noyaux
- Algorithmes parallèles C++17 et politiques d'exécution
- Concepts C++20 et gammes sur le dispositif
- Support C++23 dans nvcc et CCCL 3.x
Graphe CUDA et asynchronie avancée
- Définition et lancement de graphes CUDA
- Capture de graphe à partir de l'exécution du flux
- Mise à jour du graphe et nœuds d'exécution conditionnelle
- Réduction de la latence de lancement pour les charges de travail itératives
Modèles d'intégration pour les applications existantes
- Envelopper le 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ébogage du code de dispositif avec cuda-gdb
Résumé et meilleures pratiques
- Choisir entre Thrust, CUB et noyaux personnalisés
- Portabilité des performances sur 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 de performance et développeurs quantitatifs travaillant avec de grands ensembles 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