Programmation de processeurs massivement parallèles : Approche pratique
Ce cours propose une introduction complète au calcul sur GPU et à la programmation parallèle en utilisant l'environnement CUDA C. Il couvre les architectures GPU, la parallélisation des données, la gestion des threads, l'optimisation de la mémoire et les considérations avancées liées aux performances, illustrées à travers des études de cas du monde réel telles que la reconstruction d'IRM et la visualisation moléculaire.
Aperçu du cours
Résumé du contenu
Ce cours offre une introduction complète au calcul sur GPU et à la programmation parallèle en utilisant l’environnement CUDA C. Il couvre les architectures GPU, la parallélisation des données, la gestion des threads, l’optimisation de la mémoire et les considérations avancées sur les performances, illustrées à travers des études de cas réels comme la reconstruction d’IRM et la visualisation moléculaire.
Maîtrisez l’art du calcul parallèle haute performance grâce à un guide pratique et appliqué à CUDA et aux architectures GPU.
Auteur : David B. Kirk, Wen-mei W. Hwu
Remerciements : Ian Buck, John Nickolls, équipe NVIDIA DevTech, Jensen Huang, David Luebke, Bill Bean, Simon Green, Mark Harris, Manju Hedge, Nadeem Mohammad, Brent Oster, Peter Shirley, Eric Young et Cyril Zeller.
Objectifs d'apprentissage
- Différencier les philosophies de conception et les trajectoires de performance des CPUs multicœurs et des GPUs many-core.
- Identifier les composants clés d'une architecture GPU moderne, notamment les Streaming Multiprocessors (SMs) et les structures de mémoire.
- Appliquer la loi d'Amdahl pour calculer le gain théorique et identifier l'impact des goulets d'étranglement séquentiels.
- Contraire les différences architecturales entre pipelines fixes et tableaux de processeurs unifiés programmables.
- Expliquer le rôle du "GPGPU" comme étape intermédiaire et les limitations des premiers modèles de programmation shader.
- Analyser comment des fonctionnalités matérielles comme les opérations atomiques, la synchronisation par barrière et le support de la double précision ont permis la transition vers un calcul généralisé évolutif.
- Identifier et exploiter la parallélisation des données dans les algorithmes de multiplication matricielle.
- Mettre en œuvre la gestion de la mémoire périphérique, incluant l'allocation, le transfert de données entre hôte et périphérique, et la libération.
- Créer et exécuter des noyaux CUDA en utilisant des index de thread et des configurations appropriées de grille/bloc.
- Concevoir des hiérarchies de threads multidimensionnelles (grilles et blocs) pour mapper des structures de données complexes sur le matériel GPU.