Réduction finale sur plusieurs blocs
Combinez les sommes partielles de chaque bloc.
Réduction finale sur plusieurs blocs 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.
Certaines parties de cette leçon n'ont pas encore été traduites et s'affichent en anglais.
Blocks Cannot Talk
A reduction within a block is easy, but blocks run independently and cannot synchronize with each other mid-kernel. So one launch cannot sum everything.
Each Block Produces a Partial
So every block reduces its own chunk to one number, a partial sum, and writes it to a small output array indexed by blockIdx.
if (tid == 0)
out[blockIdx.x] = data[0];Now You Have Fewer Values
With 1000 blocks you go from a million inputs to 1000 partials. The hard part is done; only a tiny array remains to combine.
Strategy One: Launch Again
The simplest finish is a second launch of the same kernel on the partials. Repeat until only one value is left.
Recursive Until One
Each pass shrinks the array by the block size. A few recursive launches reduce millions down to a single final sum.
Strategy Two: Atomics
Alternatively, thread 0 of each block can add its partial straight into one global total with atomicAdd, avoiding a second kernel.
if (tid == 0)
atomicAdd(total, data[0]);Atomics Trade Off
Atomics are simple and need only one launch, but many blocks contending on the same address can serialize. With few partials it is usually fine.
Strategy Three: Grid-Stride
A grid-stride loop lets each thread first sum many elements into a register, so far fewer blocks are needed before the final step.
for (int i = gid; i < n; i += gridDim.x * blockDim.x)
sum += in[i];Fewer Blocks, Less Overhead
Doing more work per thread up front means fewer partials and fewer launches. This often beats spawning one thread per element.
Zero the Total First
If you use atomics, remember to zero the global total before launching, or your sum starts from garbage left in that memory.
Pick by Problem Size
Small inputs love atomics for their simplicity; huge inputs favor a two-pass or grid-stride design. Measure on your data to choose.
Quick Check
Think about why a single kernel launch cannot sum the whole array directly.
Recap
Blocks each emit a partial sum, then you combine them with a second launch, atomics, or grid-stride. You can now reduce arrays of any size. 🏁
Questions Fréquemment Posées
La leçon « Réduction finale sur plusieurs blocs » est-elle gratuite ?
Oui — le texte complet de « Réduction finale sur plusieurs blocs » 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 « Réduction finale sur plusieurs blocs » ?
Combinez les sommes partielles de chaque bloc. 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 « Réduction finale sur plusieurs blocs » ?
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
- L’idée de l’arbre de réduction
- Éliminer la divergence des warps
- Adressage séquentiel
- Réduction finale sur plusieurs blocs