Cooperative Groups
Un'API moderna per ambiti di sincronizzazione flessibili.
Cooperative Groups è una lezione CUDA Academy gratuita su CoddyKit. Questa è la lezione 4 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.
Un'API di sincronizzazione più chiara
Le maschere e le intrinsic grezze funzionano, ma sono macchinose. I Cooperative groups racchiudono i thread in oggetti a cui può assegnare un nome, una dimensione e una sincronizzazione esplicita.
#include <cooperative_groups.h>
namespace cg = cooperative_groups;Acquisire l'intero blocco
Inizi ottenendo un riferimento al blocco di thread. this_thread_block restituisce un gruppo che può sincronizzare come syncthreads, ma sotto forma di oggetto.
cg::thread_block block = cg::this_thread_block();Sincronizzare tramite il gruppo
Chiamare sync sul blocco equivale alla barriera moderna. Fa esattamente ciò che fa syncthreads, ma è chiaramente un metodo del gruppo interessato.
block.sync();Creare un tile di warp
Può dividere un blocco in tiles di dimensione fissa. Un tile di 32 lane offre un gruppo delle dimensioni di un warp, con metodi chiari invece delle maschere di shuffle grezze.
auto warp = cg::tiled_partition<32>(block);I metodi sostituiscono le maschere
Un gruppo suddiviso in tile offre shfl_down e funzioni simili senza un argomento mask. Il gruppo conosce già i propri membri, quindi l'API rimane breve e sicura.
val += warp.shfl_down(val, offset);Conoscere la propria posizione
Ogni gruppo espone i propri membri e la posizione del thread. thread_rank fornisce l'indice all'interno del gruppo, mentre size restituisce il numero di thread che contiene.
int rank = warp.thread_rank();Anche tile più piccoli
I tile non devono necessariamente avere ampiezza 32. Un tiled_partition di 8 o 16 crea gruppi sub-warp, utili quando i dati sono naturalmente organizzati in piccoli insiemi.
Riduzioni a livello di gruppo
La libreria offre collettive già pronte. Un reduce di gruppo somma un tile con una sola chiamata, nascondendo il ciclo sull'offset scritto manualmente in precedenza.
int total = cg::reduce(warp, val, cg::plus<int>());Grid che si sincronizzano
Il gruppo più potente è il grid group. Con un avvio cooperativo, ogni blocco può sincronizzarsi su un'unica barriera, cosa che un kernel normale non può fare.
È necessario un avvio cooperativo
La sincronizzazione dell'intera grid funziona solo se avvia il kernel con cudaLaunchCooperativeKernel e se la GPU la supporta. Un avvio normale non lo consente.
Perché usarli
I cooperative groups rendono il codice dei warp readable e portabile: niente maschere gestite manualmente, ambiti chiari e collettive riutilizzabili che corrispondono all'intento.
Verifica rapida
Ricordi come creare da un blocco un gruppo cooperativo delle dimensioni di un warp.
Riepilogo
I cooperative groups trasformano le maschere in oggetti con nome: può suddividere un blocco in tile, chiamare reduce e persino sincronizzare un'intera grid. Ora sa gestire CUDA a livello di warp. ✨
Impara C++ con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 30
- Lezioni
- 120
Domande Frequenti
La lezione «Cooperative Groups» è gratuita?
Sì — il testo completo di «Cooperative Groups» è 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 «Cooperative Groups»?
Un'API moderna per ambiti di sincronizzazione flessibili. 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 4 di 4.
Quanto tempo richiede la lezione «Cooperative Groups»?
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.