2012-12-04 1 views
5

Capisco che in CUDA, 32 thread adiacenti nello stesso blocco saranno programmati come un ordito. Ma trovo spesso alcuni codici CUDA tutorial che ha più blocchi con 1 thread per blocco. In questo modello, 32 thread da 32 blocchi saranno programmati come un ordito? In caso contrario, posso dire che questo modello non è efficiente come organizzare in 32 thread per blocco? Grazie!I 32 thread da 32 blocchi saranno programmati come un ordito?

risposta

6

No, le discussioni da blocchi diversi non possono essere programmate nello stesso ordito. Se crei griglie di threadblock con un solo thread, non otterrai sicuramente le prestazioni complete dalla macchina. È meno efficiente di avere 32 (o un multiplo intero di 32) thread per blocco. Un Fermi SM, ad esempio, ha 32 linee di ordito che possono essere utilizzate. Se si pianificano blocchi di un singolo thread, solo 1 di quelle 32 corsie può essere utilizzato in qualsiasi momento.

I thread hanno un ID thread (variabile built-in threadIdx) che è definito all'interno (e unico solo per) un singolo blocco.

La sezione di multithreading hardware della guida alla programmazione C fornisce a formula which defines the total number of warps in a single block.

0

Un altro punto da aggiungere. Calcolo in CUDA SEMPRE avviene tramite orditi, quindi anche se si allocano meno di 32 thread per blocco (1,2..8,16), il calcolo avviene per un warp (32 thread), le risorse sono bloccate per 32 thread per quello bloccare.

Se si allocano 32 blocchi con un thread ciascuno, si stanno bloccando le risorse per i thread 32X32. Evita questo se puoi.