Proteggersi dagli indici fuori intervallo
Il controllo dei limiti if (i < n).
Proteggersi dagli indici fuori intervallo è una lezione CUDA Academy gratuita su CoddyKit. Questa è la lezione 2 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.
Spesso si avviano troppi thread
Il numero di thread deve rispettare dimensioni fisse dei block, quindi quasi sempre si avviano alcuni thread aggiuntivi oltre la lunghezza dell'array. Questi thread devono essere gestiti.
Cosa può andare storto
Un thread aggiuntivo calcola un indice oltre la fine dell'array. Se scrive in quella posizione, accede a memoria che non gli appartiene, causando un bug out-of-bounds silenzioso.
La GPU non la avviserà
A differenza di un arresto evidente, una scrittura fuori dai limiti può corrompere dati vicini o leggere valori casuali. Il kernel continua a essere eseguito, quindi il problema rimane invisibile finché i risultati non diventano errati.
La correzione richiede una sola riga
Prima che un thread usi il proprio indice, verifichi che rientri nell'array. Questo piccolo controllo dei limiti è la più importante abitudine di sicurezza in CUDA.
if (i < n) {
out[i] = a[i] + b[i];
}Perché minore di, non minore o uguale
Gli indici validi vanno da 0 a n meno 1. La condizione stretta i < n consente l'accesso all'ultimo elemento valido e blocca il primo non valido.
I thread inattivi terminano semplicemente
Un thread il cui indice è fuori dai limiti salta semplicemente il lavoro e termina. Non fare nulla è perfettamente sicuro e richiede quasi tempo.
Passare n al kernel
Il kernel non può indovinare la lunghezza dell'array, quindi gli si passa n come parametro. In questo modo il controllo sa sempre dove terminano i dati.
__global__ void add(float* a, float* b, float* out, int n) {
int i = blockIdx.x * blockDim.x + threadIdx.x;
if (i < n) out[i] = a[i] + b[i];
}Protegga anche le letture
Non sono solo le scritture a essere pericolose. Leggere a[i] oltre la fine carica dati casuali o genera un errore, quindi lo stesso controllo i < n protegge ogni accesso.
Un errore comune di uno
Scrivere per errore i <= n consente a un thread di accedere all'elemento n, che non esiste. Mantenga sempre il confronto stretto.
Una precauzione conveniente
Il ramo condizionale costa quasi nulla, perché i thread aggiuntivi sono pochi e terminano rapidamente. La sicurezza che offre vale molto più di questo piccolo costo. ✅
Lo trasformi in un riflesso
Consideri il controllo dei limiti parte integrante della formula dell'indice. Calcoli i, poi lo protegga immediatamente prima di fare qualsiasi altra cosa.
Verifica rapida
Scelga il controllo corretto.
Riepilogo
Ha imparato ad aggiungere if (i < n) dopo aver calcolato l'indice. Questa singola riga blocca le letture e le scritture fuori dai limiti, che la GPU non segnalerebbe mai. 🛡️
Domande Frequenti
La lezione «Proteggersi dagli indici fuori intervallo» è gratuita?
Sì — il testo completo di «Proteggersi dagli indici fuori intervallo» è 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 «Proteggersi dagli indici fuori intervallo»?
Il controllo dei limiti if (i < n). 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 2 di 4.
Quanto tempo richiede la lezione «Proteggersi dagli indici fuori intervallo»?
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