Mémoire partagée dynamique
Dimensionnez la mémoire partagée au lancement.
Mémoire partagée dynamique est une leçon CUDA Academy gratuite sur CoddyKit. Ceci est la leçon 4 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.
Quand la taille n’est pas encore connue
Parfois, la taille du tableau partagé dépend d’une valeur déterminée à l’exécution ; vous ne pouvez donc pas la coder en dur. CUDA résout ce problème avec la mémoire partagée dynamique.
La déclaration extern
Vous la déclarez avec extern __shared__ et des crochets vides. Aucune taille n’est indiquée dans le code : le compilateur la laisse ouverte.
extern __shared__ float sdata[];Taille définie au lancement
Vous transmettez le nombre d’octets comme troisième paramètre de lancement, entre le nombre de threads et les crochets fermants. La taille est ainsi définie à l’exécution.
kern<<<blocks, threads, n * sizeof(float)>>>();Toujours en octets
Une erreur classique : ce troisième argument indique une taille en octets, et non en éléments. Multipliez toujours votre quantité par sizeof pour obtenir la bonne valeur.
La valeur par défaut est zéro octet
Si vous omettez le troisième argument, CUDA réserve zéro octet de mémoire partagée dynamique. Lire sdata produit alors un comportement indéfini : ne l’oubliez jamais.
Statique et dynamique ensemble
Vous pouvez utiliser les deux types dans un même noyau. Les tableaux statiques conservent une taille fixe, tandis que le bloc dynamique s’adapte à l’argument de lancement.
Un tampon, plusieurs tableaux
La mémoire partagée dynamique vous fournit un tampon linéaire. Pour y stocker plusieurs tableaux, vous le découpez vous-même à l’aide de décalages de pointeurs. 🔪
Découper avec des décalages
Faites pointer un second tableau vers une position intermédiaire du tampon. Veillez simplement à aligner chaque partie afin qu’un float ne commence jamais au milieu d’un mot.
extern __shared__ float buf[];
float* a = buf;
float* b = &buf[blockDim.x];Pourquoi utiliser le dynamique
Un seul noyau compilé peut ainsi gérer de nombreuses tailles de tuiles. Vous ajustez la taille partagée à chaque lancement sans recompiler pour chaque cas.
Surveillez la limite matérielle
Vous ne pouvez toujours pas dépasser le maximum par bloc. Demandez trop d’octets au lancement et le noyau refuse simplement de démarrer.
Autoriser les allocations importantes
Pour dépasser la limite par défaut sur les GPU récents, vous devez l’autoriser explicitement avec cudaFuncSetAttribute avant le lancement. Sinon, les demandes importantes sont rejetées.
Vérification rapide
Vérifions comment la taille de la mémoire partagée dynamique est définie.
Récapitulatif
Vous avez appris que les tableaux extern __shared__ reçoivent leur taille en octets au lancement, peuvent être découpés en plusieurs tableaux et respectent la limite par bloc. Cours terminé ! 🎉
Questions Fréquemment Posées
La leçon « Mémoire partagée dynamique » est-elle gratuite ?
Oui — le texte complet de « Mémoire partagée dynamique » 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 « Mémoire partagée dynamique » ?
Dimensionnez la mémoire partagée au lancement. 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 4 sur 4.
Combien de temps prend la leçon « Mémoire partagée dynamique » ?
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
- Déclarer des tableaux __shared__
- Synchroniser avec __syncthreads
- Éviter les conflits de banques
- Mémoire partagée dynamique