Reduce, Scan e Sort con Thrust
Primitive di alto livello con una sola chiamata
Reduce, Scan e Sort con Thrust è una lezione CUDA Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento CUDA Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso CUDA Academy include 4 lezioni in totale.
Algoritmi complessi, una riga
Scrivere a mano riduzioni, scan e ordinamenti veloci è difficile. Thrust offre versioni ottimizzate tramite una singola chiamata di funzione. 🎁
Reduce riduce tutto a un valore
thrust::reduce combina ogni elemento in un unico risultato, ad esempio sommando un array, tutto in parallelo internamente.
int total = thrust::reduce(d.begin(), d.end());Operatori di riduzione personalizzati
Per impostazione predefinita, reduce usa l'addizione, ma puoi passare un valore iniziale e un'operazione binaria per calcolare un prodotto, un massimo o qualsiasi operazione associativa.
int m = thrust::reduce(d.begin(), d.end(),
0, thrust::maximum<int>());Scan mantiene il totale progressivo
Uno scan, o somma prefissa, produce il totale progressivo in ogni posizione. È alla base della compattazione, dell'ordinamento e dell'allocazione di stream.
Inclusivo ed esclusivo
inclusive_scan include l'elemento corrente nella somma; exclusive_scan no. Scegliere quello corretto evita un bug off-by-one.
thrust::inclusive_scan(d.begin(), d.end(),
out.begin());La parallelizzazione di scan non è ovvia
Una somma prefissa sembra sequenziale, eppure Thrust la esegue in parallelo con un ingegnoso algoritmo ad albero che non devi scrivere tu.
Ordina in loco
thrust::sort ordina un device_vector in loco usando un rapido radix sort o merge sort sulla GPU, molto più velocemente di un ordinamento sulla CPU con grandi quantità di dati.
thrust::sort(d.begin(), d.end());Ordina per chiave
sort_by_key ordina un array e riordina un secondo array di valori in modo corrispondente, ideale per mantenere allineati i record e le relative chiavi.
thrust::sort_by_key(keys.begin(),
keys.end(), values.begin());Componi i primitivi
Le pipeline reali concatenano queste operazioni: transform poi reduce, oppure sort poi scan. Ogni passaggio è una chiamata ottimizzata, così puoi concentrarti sulla logica.
transform_reduce fuso
transform_reduce esegue map e somma in un solo passaggio, calcolando ad esempio un prodotto scalare o la somma dei quadrati senza un array temporaneo.
float ss = thrust::transform_reduce(
d.begin(), d.end(), sq, 0.0f, thrust::plus<float>());Lascia vincere la libreria
Questi primitivi sono fortemente ottimizzati da NVIDIA. Usarli per primi è solitamente più efficace di un kernel personalizzato e consente di risparmiare ore di lavoro.
Verifica rapida
Ricorda che cosa produce una somma prefissa.
Riepilogo
Hai ridotto i dati con reduce, costruito totali progressivi con scan, ordinato gli array con sort e fuso i passaggi con transform_reduce. 🏁
Domande Frequenti
La lezione «Reduce, Scan e Sort con Thrust» è gratuita?
Sì — il testo completo di «Reduce, Scan e Sort con Thrust» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso CUDA Academy, passa a CoddyKit PRO. Il corso CUDA Academy include 4 lezioni in totale.
Cosa imparerò in «Reduce, Scan e Sort con Thrust»?
Primitive di alto livello con una sola chiamata Eserciti CUDA Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare CUDA Academy?
Non è richiesta alcuna esperienza precedente. CUDA Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Reduce, Scan e Sort con Thrust»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione CUDA Academy?
Sì. Ogni lezione CUDA Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- cuBLAS GEMM nel modo corretto
- Vettori e trasformazioni Thrust
- Reduce, Scan e Sort con Thrust
- cuDNN per il deep learning