0Pricing
CUDA Academy · Lektion

Abschließende Reduktion über mehrere Blöcke

Fassen Sie die Teilsummen der einzelnen Blöcke zusammen.

Abschließende Reduktion über mehrere Blöcke ist eine kostenlose CUDA Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des CUDA Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der CUDA Academy-Kurs umfasst insgesamt 4 Lektionen.

Teile dieser Lektion wurden noch nicht übersetzt und werden auf Englisch angezeigt.

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. 🏁

Häufig gestellte Fragen

Ist die Lektion „Abschließende Reduktion über mehrere Blöcke“ kostenlos?

Ja — der vollständige Text von „Abschließende Reduktion über mehrere Blöcke“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des CUDA Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der CUDA Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Abschließende Reduktion über mehrere Blöcke“?

Fassen Sie die Teilsummen der einzelnen Blöcke zusammen. Du übst CUDA Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um CUDA Academy zu starten?

Keine Vorkenntnisse erforderlich. CUDA Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.

Wie lange dauert die Lektion „Abschließende Reduktion über mehrere Blöcke“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser CUDA Academy-Lektion Code schreiben und ausführen?

Ja. Jede CUDA Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Die Idee des Reduktionsbaums
  2. Warp-Divergenz beseitigen
  3. Sequenzielle Adressierung
  4. Abschließende Reduktion über mehrere Blöcke
← Zurück zu CUDA Academy