- Une compréhension de base du GPU computing est essentielle pour tout ingénieur logiciel
- Cet article se concentre principalement sur les GPU Nvidia et utilise la terminologie de Nvidia
- Les GPU sont conçus pour le traitement massivement parallèle et un haut débit dans les domaines du graphisme, du calcul numérique, du deep learning, etc.
Comparaison entre CPU et GPU
- Les CPU sont conçus pour l’exécution séquentielle d’instructions et intègrent diverses fonctionnalités visant à réduire la latence d’exécution des instructions.
- Les GPU sont conçus pour le traitement massivement parallèle et un haut débit, avec une latence d’exécution des instructions moyenne à élevée.
- Les GPU peuvent traiter un bien plus grand nombre d’opérations bien plus rapidement que les CPU.
# Architecture GPU
Architecture de calcul des GPU
- Un GPU est composé d’un ensemble de streaming multiprocessors (SM).
- Chaque SM contient plusieurs streaming processors (cœurs ou threads).
- Un SM dispose d’une quantité limitée de mémoire on-chip (mémoire partagée ou scratchpad), partagée par tous les cœurs.
Architecture mémoire des GPU
- Un GPU possède plusieurs types de mémoire organisés en différentes couches.
- Chaque SM dispose d’un grand nombre de registres, partagés entre les cœurs.
- Le cache de constantes est utilisé pour mettre en cache les données constantes utilisées lors de l’exécution du code.
- La mémoire partagée est une mémoire SRAM on-chip rapide, à faible latence et programmable.
- Le cache L1 met en cache les données fréquemment accédées depuis le cache L2.
- Le cache L2 est partagé par tous les SM et met en cache les données fréquemment accédées depuis la mémoire globale.
- La mémoire globale est une DRAM de grande capacité et à large bande passante, éloignée des SM, avec une latence élevée.
# Comprendre le modèle d’exécution des GPU
Brève introduction aux kernels CUDA et aux blocs de threads
- CUDA est une interface de programmation pour écrire des programmes destinés aux GPU Nvidia.
- Un kernel est un calcul exprimé sous une forme similaire à une fonction C/C++ exécutée en parallèle sur le GPU.
- Pour exécuter un kernel, on lance un ensemble de threads appelé grille.
Étapes d’exécution d’un kernel sur un GPU
- Copier les données de l’hôte vers le device
- Planifier les blocs de threads sur les SM
- Single Instruction Multiple Threads (SIMT) et warps
- Ordonnancement des warps et masquage de la latence
- Copier les données de résultat du device vers la mémoire de l’hôte
# Partitionnement des ressources et notion d’occupation
- L’utilisation des ressources GPU se mesure à l’aide d’un indicateur appelé « occupation », qui représente le ratio entre le nombre de warps alloués et le nombre maximal de warps qu’un SM peut prendre en charge.
- L’occupation est limitée par les ressources d’exécution du SM, les registres, la mémoire partagée, les slots de blocs de threads et les slots de threads.
- Il est important de minimiser la latence tout en maintenant une occupation élevée grâce à l’optimisation du code.
# Résumé
- Un GPU est composé de plusieurs SM, chacun contenant plusieurs cœurs de traitement.
- La mémoire globale est éloignée de la puce et présente une latence élevée.
- Les caches L1 et L2 fonctionnent de manière similaire aux caches L1/L2 des CPU.
- Chaque SM possède une mémoire partagée, commune aux cœurs.
- Pour exécuter un kernel sur un GPU, on lance une grille de threads.
- Le GPU alloue les blocs à exécuter sur les SM, et tous les threads d’un bloc s’exécutent sur le même SM.
- Les threads alloués à un SM sont ensuite regroupés en unités de 32 appelées warps.
- Le GPU effectue un partitionnement dynamique des ressources entre les threads selon leurs besoins et les limites du SM.
# Conclusion
- Les GPU sont aujourd’hui largement utilisés, et leur architecture ainsi que leur modèle d’exécution diffèrent fondamentalement de ceux des CPU.
- Cet article aborde différents aspects des GPU et donne des clés pour comprendre pourquoi ils sont si largement utilisés et comment ils fonctionnent.
L’avis de GN⁺
- Les GPU sont une technologie essentielle pour le deep learning et les calculs numériques complexes, et cet article aide à comprendre leur architecture de base et leur modèle d’exécution.
- Le contenu est particulièrement important pour les ingénieurs logiciel débutants intéressés par le traitement parallèle et le calcul haute performance.
- Cet article fournit des bases en programmation GPU et constitue une ressource intéressante pour éveiller la curiosité sur ce domaine.
1 commentaires
Avis Hacker News