Prenez contact avec nous

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
 8 Heures

Nombre de participants


Prix par participant

Nos clients témoignent (3)

Cours à venir

Catégories Similaires