Prenez contact avec nous

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

Nombre de participants


Prix par participant

Nos clients témoignent (3)

Cours à venir

Catégories Similaires