2013-06-07 20 views
6

Sono confuso dalla relazione tra il numero di core in una GPU NVidia, il numero di SMP e il numero massimo di thread. Le proprietà del dispositivo per la GT650m del mio portatile mostrano 384 core, 2 SMP, con 1024 thread per SMP.Core CUDA vs conteggio thread

In che modo questi numeri sono correlati tra loro e le dimensioni dell'ordito? Presumo (forse erroneamente) che ci siano 192 core per SMP, ma questo non è un fattore di 1024. Se ogni core esegue una curvatura di 32 thread, mi aspetterei 32 * 192 thread per SMP o 2^5 * (2^7 + 2^6) o 4096 + 2048 = 6142.

Cosa mi manca?

risposta

9

Penso che dovresti dare un'occhiata più approfondita alla programmazione dei kernel in cuda.

Ci sono due dimensioni importanti: blocchi e thread per blocco

Ogni blocco è prevista su un SM e c'è quindi tagliati a orditi. Quindi i blocchi hanno una memoria condivisa accessibile solo all'interno del blocco, perché si trova sulla memoria SM. Il numero di blocchi per SM dipende dal limite del dispositivo e dal calcolo dell'occupazione. I blocchi massimi per SM sono 8 per CC 1.0-2.xe 16 per CC 3.x.

Ogni blocco ha un determinato numero di thread per blocco. I fili sono divisi in in orditi e gli orditi possono essere eseguiti in un ordine arbitrario determinato solo dallo schedulatore di ordito e dal SM.

Ora la scheda ha un numero totale di 384 core su 2 SM con 192 core ciascuno. Il core count CUDA rappresenta il numero totale di istruzioni di thread in virgola mobile o intero intero che possono essere eseguite per ciclo. Non considerare i nuclei CUDA in alcun calcolo.

Il numero massimo di thread varia a seconda della capacità di calcolo. CC2.0-3.x supporta un massimo di 1024 thread per blocco a fronte di registri e spazi di curvatura sufficienti. I warps sono assegnati staticamente agli scheduler di warp. Il numero di schedulatori di ordito per SM è 1 per CC 1.x, 2 per CC 2.xe 4 per CC 3.x.

Se l'applicazione non esegue i kernel simultanei, quindi per utilizzare ogni SM la grigliaDim dovrebbe avere> = numero di blocchi SM.

Per GTX650m per utilizzare completamente la potenza del computer, è necessario disporre di almeno due blocchi (altrimenti con un blocco è possibile utilizzare solo un SM). D'altra parte, se si desidera pianificare 10240 thread, è possibile pianificare facilmente 10 blocchi di 1024 thread ciascuno.

+0

Grazie. La programmazione del distorsione era ciò che mi mancava, penso. –