La formula classica dell'indice
blockIdx.x * blockDim.x + threadIdx.x.
La formula classica dell'indice è una lezione CUDA Academy gratuita su CoddyKit. Questa è la lezione 1 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 thread, un elemento
Lo scopo di un kernel CUDA è fare in modo che ogni thread elabori un elemento di dati. Per farlo, ogni thread ha bisogno di un indice globale univoco.
Perché gli ID locali non bastano
All'interno di un block, threadIdx.x conta solo da 0 fino a blockDim meno uno. Molti block riutilizzano gli stessi numeri piccoli, quindi questo non può essere l'indice finale.
I block sono disposti uno accanto all'altro
Immagini la grid come una serie di block disposti uno dopo l'altro. Ogni block possiede una porzione contigua dell'array e blockIdx.x indica in quale porzione ci si trova.
Quanto è grande un block?
blockDim.x è il numero di thread per block. Rappresenta la larghezza di ogni porzione, quindi scala l'offset del block fino alla posizione corretta.
La formula classica
Combini i tre valori: salti i block precedenti, poi aggiungi la tua posizione all'interno del block corrente. Questa singola riga fornisce a ogni thread un indice univoco.
int i = blockIdx.x * blockDim.x + threadIdx.x;Un esempio passo per passo
Con 4 thread per block, il block 0 copre da 0 a 3, il block 1 da 4 a 7 e il block 2 da 8 a 11. Gli offset non si sovrappongono mai.
Un esempio concreto
Il thread 2 del block 3, con blockDim uguale a 256, si trova in 3 per 256 più 2, cioè 770. Questa è la sua posizione globale nei dati.
// blockIdx.x=3, blockDim.x=256, threadIdx.x=2
int i = 3 * 256 + 2; // i == 770Usare l'indice
Una volta ottenuto i, lo si usa come indice di un array. Ogni thread legge e scrive solo il proprio elemento, senza sovrapposizioni.
out[i] = a[i] + b[i];Corrispondenza uno a uno
Avviando n thread, la formula produce ogni valore da 0 a n meno 1 esattamente una volta. Si ottiene così una copertura uno a uno perfetta dell'array.
L'ordine è importante
Moltiplichi sempre prima di sommare. blockIdx.x * blockDim.x indica l'inizio della porzione, mentre threadIdx.x indica lo spostamento al suo interno.
Oltre una dimensione
La stessa idea si estende a 2D e 3D usando i membri .y e .z, ma per gli array piatti è sufficiente la formula con .x. 🚀
Verifica rapida
Calcoli l'indice globale di un thread.
Riepilogo
Ha imparato la formula usata da ogni kernel: blockIdx.x * blockDim.x + threadIdx.x. Essa assegna a ogni thread una posizione univoca nell'array. 🎉
Domande Frequenti
La lezione «La formula classica dell'indice» è gratuita?
Sì — il testo completo di «La formula classica dell'indice» è 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 «La formula classica dell'indice»?
blockIdx.x * blockDim.x + threadIdx.x. 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 1 di 4.
Quanto tempo richiede la lezione «La formula classica dell'indice»?
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
- La formula classica dell'indice
- Proteggersi dagli indici fuori intervallo
- Arrotondare per eccesso il numero di blocchi
- Cicli grid-stride