2013-07-23 8 views
5

Wir haben eine Workstation mit zwei Nvidia Quadro FX 5800 Karten installiert. Beim Ausführen des deviceQuery-CUDA-Beispiels wird angezeigt, dass der maximale Thread pro Multiprozessor (SM) 1024 ist, während der maximale Thread pro Block 512 ist.CUDA: Was unterscheidet Threads pro Multiprozessor und Threads pro Block?

Da nur ein Block auf jedem SM gleichzeitig ausgeführt werden kann, ist max. Threads/Prozessor verdoppeln die maximalen Threads/Block? Wie nutzen wir die anderen 512 Threads pro SM?

Device 1: "Quadro FX 5800" 
    CUDA Driver Version/Runtime Version   5.0/5.0 
    CUDA Capability Major/Minor version number: 1.3 
    Total amount of global memory:     4096 MBytes (4294770688 bytes) 
    (30) Multiprocessors x ( 8) CUDA Cores/MP: 240 CUDA Cores 
    GPU Clock rate:        1296 MHz (1.30 GHz) 
    Memory Clock rate:        800 Mhz 
    Memory Bus Width:        512-bit 
    Max Texture Dimension Size (x,y,z)    1D=(8192), 2D=(65536,32768), 3D=(2048,2048,2048) 
    Max Layered Texture Size (dim) x layers  1D=(8192) x 512, 2D=(8192,8192) x 512 
    Total amount of constant memory:    65536 bytes 
    Total amount of shared memory per block:  16384 bytes 
    Total number of registers available per block: 16384 
    Warp size:          32 
    Maximum number of threads per multiprocessor: 1024 
    Maximum number of threads per block:   512 
    Maximum sizes of each dimension of a block: 512 x 512 x 64 
    Maximum sizes of each dimension of a grid:  65535 x 65535 x 1 
    Maximum memory pitch:       2147483647 bytes 
    Texture alignment:        256 bytes 
    Concurrent copy and kernel execution:   Yes with 1 copy engine(s) 
    Run time limit on kernels:      No 
    Integrated GPU sharing Host Memory:   No 
    Support host page-locked memory mapping:  Yes 
    Alignment requirement for Surfaces:   Yes 
    Device has ECC support:      Disabled 
    Device supports Unified Addressing (UVA):  No 
    Device PCI Bus ID/PCI location ID:   4/0 
    Compute Mode: 
    < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) > 

Cheers, James.

+4

Die Anweisung "Angegeben, dass nur ein Block auf jedem SM gleichzeitig ausgeführt werden kann" ist falsch. Nimm das weg und es macht Sinn. Das wurde schon Millionen mal gefragt. Sobald ich einen gefunden habe, werde ich dafür stimmen, dies als ein Duplikat zu betrachten. – talonmies

Antwort

18

Da nur ein einziger Block, Diese Aussage ist grundsätzlich unrichtige

zu einem Zeitpunkt, an jedem SM ausgeführt werden. Wenn Ressourcenkonflikte ausgeschlossen werden und genügend Threadblocks in einem Kernel (d. H. Dem Grid) angenommen werden, werden einem SM im Allgemeinen mehrere Threadblocks zugewiesen.

Die Grundeinheit der Ausführung ist die Warp. Ein Warp besteht aus 32 Threads, die zusammen in einem Lockstep von einem SM ausgeführt werden, auf einem Instruktionszyklus nach Instruktionszyklus.

Daher wird ein SM selbst innerhalb eines einzelnen Threadblocks im Allgemeinen mehr als einen einzigen Warp "im Flug" haben. Dies ist wichtig für eine gute Leistung, damit die Maschine die Latenz verbergen kann.

Es gibt keinen konzeptionellen Unterschied zwischen der Auswahl von Warps aus demselben Threadblock oder der Warps von verschiedenen Threadblocks. SMs können mehrere residente Threads auf ihnen haben (dh mit Ressourcen wie Registern und gemeinsamem Speicher, die jedem residenten Threadblock zugewiesen sind), und der Warp-Scheduler wird unter allen Warps in allen residenten Threadblocks auswählen, um den nächsten Warp für die Ausführung auszuwählen irgendein gegebener Instruktionszyklus.

Daher hat der SM eine größere Anzahl von Threads, die "resident" sein können, da er mehr als einen einzelnen Block unterstützen kann, selbst wenn dieser Block maximal mit Threads konfiguriert ist (in diesem Fall 512). Wir verwenden mehr als die Threadblockgrenze, indem wir mehrere Threadblöcke resident haben.

Sie können auch die Idee von Belegung in GPU-Programmen recherchieren.

+0

Ah, das ist, wo ich falsch gelaufen bin! Danke für die Beantwortung der Frage Robert. –