Çok Bloklu Son Azaltma
Blok başına kısmi toplamları birleştirin.
Çok Bloklu Son Azaltma, CoddyKit'te ücretsiz bir CUDA Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, CUDA Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. CUDA Academy kursu toplamda 4 dersten oluşur.
Bu dersin bazı bölümleri henüz çevrilmemiş olup İngilizce olarak gösterilmektedir.
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. 🏁
Sıkça Sorulan Sorular
“Çok Bloklu Son Azaltma” dersi ücretsiz mi?
Evet — “Çok Bloklu Son Azaltma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve CUDA Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. CUDA Academy kursu toplamda 4 dersten oluşur.
“Çok Bloklu Son Azaltma” dersinde ne öğreneceğim?
Blok başına kısmi toplamları birleştirin. CUDA Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
CUDA Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te CUDA Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Çok Bloklu Son Azaltma” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu CUDA Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her CUDA Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Azaltma Ağacı Fikri
- Warp Ayrışmasını Ortadan Kaldırın
- Sıralı Adresleme
- Çok Bloklu Son Azaltma