Ok, so che le domande correlate sono state poste più e più volte e ho letto praticamente tutto ciò che ho trovato su questo, ma le cose non sono ancora chiare. Probabilmente anche perché ho trovato e letto cose che si contraddicevano a vicenda (forse perché, provenendo da tempi diversi, si riferivano a dispositivi con capacità di calcolo diverse, tra le quali sembra esserci un bel gap). Sto cercando di essere più efficiente, per ridurre il mio tempo di esecuzione e quindi ho bisogno di sapere esattamente quanti thread/warp/blocchi possono essere eseguiti contemporaneamente in parallelo. Inoltre stavo pensando di generalizzare questo e calcolare un numero ottimale di thread e blocchi da passare al mio kernel basandomi solo sul numero di operazioni che so di dover fare (per programmi più semplici) e sulle specifiche del sistema.CUDA Blocks & Warps
Ho una GTX 550Ti, btw con capacità di calcolo 2.1. 4 SMs x 48 core = 192 core CUDA.
Ok, quindi ciò che è chiaro per me è:
può più di 1 isolato run contemporaneamente (in parallelo) su un multiprocessore (SM)? Ho letto che fino a 8 blocchi possono essere assegnati a un SM, ma nulla su come vengono eseguiti. Dal fatto che il mio numero massimo di thread per SM (1536) è appena più grande del mio numero massimo di thread per block (1024), penserei che i blocchi non vengano eseguiti in parallelo (forse 1 e mezzo?). O almeno non se ho un numero massimo di discussioni su di loro. Inoltre, se imposto il numero di blocchi, diciamo 4 (il mio numero di SM), verranno inviati a un SM diverso ciascuno? Oppure non riesco davvero a controllare come tutto questo è distribuito sull'hardware e quindi questo è un punto controverso, il mio tempo di esecuzione varierà in base ai capricci del mio dispositivo ...
In secondo luogo, so che un blocco dividerà i suoi thread in gruppi di 32 thread che corrono in parallelo, chiamati warps. Ora questi orditi (presumendo che non abbiano alcuna relazione l'uno con l'altro) possono essere eseguiti parallelamente? Perché nell'architettura Fermi si afferma che 2 orditi vengono eseguiti contemporaneamente, inviando un'istruzione da ogni distorsione a un gruppo di 16 (?) Core, mentre da qualche altra parte leggo che ogni nucleo gestisce un ordito, che spiegherebbe i 1536 thread massimi (32 * 48) ma sembra un po 'troppo. 1 core CUDA può gestire 32 thread contemporaneamente?
In una nota più semplice, quello che sto chiedendo è: (per esempio) se voglio sommare 2 vettori in un terzo, quale lunghezza dovrei dare loro (nr di operazioni) e come dovrei dividerli in blocchi e thread per il mio dispositivo per funzionare contemporaneamente (in parallelo) a piena capacità (senza core inattivi o SM).
Mi dispiace se questo è stato chiesto prima e non ho capito o non l'ho visto. Spero che tu possa aiutarmi. Grazie!
Estendendo la domanda: * 1 Can CUDA nucleo ansa 32 thread contemporaneamente *, è necessario che questi 32 fili devono essere dello stesso bloccare? È possibile che un nucleo CUDA eseguire due filetti da diversi blocchi contemporaneamente – haccks
nucleo A CUDA non è un "core", è un numero intero/floating point pipeline di esecuzione. Esiste una mappatura fissa tra l'id della riga del filetto (ptx% laneid) nel warp e le pipeline di esecuzione. Sui dispositivi CC 3.x 32 thread da un warp vengono inviati a un percorso di esecuzione int/fp 32-wide. Sui dispositivi CC 2.x 32 thread da un warp vengono inviati a un doppio percorso clocked in/fp di 16 ampiezze su 2 hot clock. L'unità a doppia precisione non è così ampia da causare problemi di curvatura su più cicli. Tutte le discussioni devono far parte dello stesso ordito. –
Sì, lo so. Tutti i thread devono far parte dello stesso wrap. L'equivalente core della CPU in GPU è un SM ed esegue i thread in wraps (32 thread). Ogni SP elabora un thread. Ciò che mi confonde è che un SM può avere più di un residente di blocco, vale a dire che più blocchi di thread possono essere eseguiti simultaneamente su un multiprocessore. Se un SM ha 8 SP e può avere blocchi 8 residenti alla volta e ciascuna di blocco con 64 thread, quindi è necessario che nel primo ciclo 8 saranno trattati solo blocco? – haccks