Registres et mémoire locale
Le stockage le plus rapide par thread et ses débordements.
Registres et mémoire locale est une leçon CUDA Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage CUDA Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours CUDA Academy comprend 4 leçons au total.
La mémoire la plus rapide dont vous disposez
Chaque fil d’exécution possède ses propres registres, le stockage le plus rapide de la puce. Ils se trouvent juste à côté des unités de calcul, si bien que les lectures coûtent presque rien.
Les variables ordinaires deviennent des registres
Lorsque vous écrivez une variable locale ordinaire dans un noyau, le compilateur la conserve généralement dans un registre. Aucune syntaxe particulière n’est nécessaire. 🙂
__global__ void k() {
int x = 5; // x lives in a register
float y = x * 2.0f;
}Privé à un seul fil d’exécution
La valeur d’un registre appartient exactement à un seul fil d’exécution. Le fil d’exécution 7 ne peut pas voir le registre du fil d’exécution 8, ce qui permet de séparer proprement le travail de chaque fil.
Les registres forment un pool partagé
Chaque multiprocesseur de flux possède un fichier de registres de taille fixe. Tous les fils d’exécution actifs se le partagent : utiliser moins de registres par fil permet donc d’exécuter davantage de fils simultanément.
Lorsque vous n’en avez plus
Si un noyau a besoin de plus de registres qu’il n’en existe, les valeurs supplémentaires sont déplacées ailleurs. Cet événement est appelé un débordement de registres.
Où vont les débordements : la mémoire locale
Les valeurs déplacées aboutissent dans la mémoire locale qui, malgré son nom, ne se trouve pas sur la puce. Elle se trouve en réalité dans la DRAM lente située hors de la puce.
La mémoire locale reste propre à chaque fil
La mémoire locale est privée à chaque fil d’exécution, tout comme les registres. La différence est uniquement une question de vitesse, car la mémoire locale est beaucoup plus lente à atteindre.
Les grands tableaux locaux provoquent des débordements
Déclarer un grand tableau propre à chaque fil d’exécution force souvent son placement dans la mémoire locale, car il n’y a tout simplement pas assez de registres pour contenir chaque élément.
__global__ void k() {
float buf[64]; // likely lives in local memory
}Les débordements nuisent aux performances
Chaque débordement transforme un accès gratuit à un registre en aller-retour lent vers la DRAM. Réduire la pression sur les registres est l’une des optimisations les plus faciles à réaliser.
Voir votre nombre de registres
Vous pouvez demander au compilateur d’indiquer le nombre de registres par fil d’exécution. Transmettez --ptxas-options=-v à nvcc : l’utilisation sera affichée pour chaque noyau.
nvcc --ptxas-options=-v kernel.cuLimiter volontairement les registres
Le qualificatif __launch_bounds__ indique au compilateur de limiter les registres, en échange d’une légère baisse de vitesse par fil pour permettre l’exécution simultanée d’un plus grand nombre de fils.
__global__ void __launch_bounds__(256)
myKernel() { /* ... */ }Vérification rapide
Vous avez déclaré un grand tableau propre à chaque fil d’exécution et les performances ont diminué. Que s’est-il probablement passé ?
Récapitulatif : rapides et privés
Vous avez appris que les registres constituent le stockage le plus rapide pour chaque fil d’exécution, que leur pool est limité et que le dépassement se déverse dans la mémoire locale lente. Maintenez une faible pression sur les registres. 🎯
Apprends C++ avec un tuteur IA — gratuit
Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.
- Cours
- 30
- Leçons
- 120
Questions Fréquemment Posées
La leçon « Registres et mémoire locale » est-elle gratuite ?
Oui — le texte complet de « Registres et mémoire locale » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours CUDA Academy, passe à CoddyKit PRO. Le cours CUDA Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Registres et mémoire locale » ?
Le stockage le plus rapide par thread et ses débordements. Tu pratiques CUDA Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer CUDA Academy ?
Aucune expérience préalable n'est requise. CUDA Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « Registres et mémoire locale » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon CUDA Academy ?
Oui. Chaque leçon CUDA Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Registres et mémoire locale
- Compromis de la mémoire globale
- Mémoire constante et son cache
- Modèle mental de la hiérarchie