CUDA: Difference between revisions
"65K" ?! |
|||
| (12 intermediate revisions by the same user not shown) | |||
| Line 7: | Line 7: | ||
nvidia 0000:07:00.0: setting latency timer to 64 | nvidia 0000:07:00.0: setting latency timer to 64 | ||
NVRM: loading NVIDIA UNIX x86_64 Kernel Module 190.53 Wed Dec 9 15:29:46 PST 2009</pre> | NVRM: loading NVIDIA UNIX x86_64 Kernel Module 190.53 Wed Dec 9 15:29:46 PST 2009</pre> | ||
Once the module is loaded, CUDA should be able to find the device. See [[CUDA#deviceQuery_Output|below]] for sample outputs. Each device has a | Once the module is loaded, CUDA should be able to find the device. See [[CUDA#deviceQuery_Output|below]] for sample outputs. Each device has a [[CUDA#Compute_Capabilities|compute capability]], though this does not encompass all differentiated capabilities (see also <tt>deviceOverlap</tt> and <tt>canMapHostMemory</tt>...). Note that "emulation mode" has been removed as of CUDA Toolkit Version 3.1. | ||
==CUDA model== | ==CUDA model== | ||
| Line 32: | Line 32: | ||
===Streaming Multiprocessor=== | ===Streaming Multiprocessor=== | ||
* Each SM has a register file, fast local (''shared'') memory, a cache for constant memory, an instruction cache (ROP), a multithreaded instruction dispatcher, and some number of [[#Stream Processor|Stream Processors]] (SPs). | * Each SM has a register file, fast local (''shared'') memory, a cache for constant memory, an instruction cache (ROP), a multithreaded instruction dispatcher, and some number of [[#Stream Processor|Stream Processors]] (SPs). | ||
** | ** 8K registers for compute capability <= 1.1, otherwise | ||
** | ** 16K for compute capability <= 1.3, otherwise | ||
** 32K for compute capability <= 2.1, otherwise | |||
** 64K through at least compute capability 3.5 | |||
* A group of threads which share a memory and can "synchronize their execution to coördinate accesses to memory" (use a [[barrier]]) form a '''block'''. Each thread has a ''threadId'' within its (three-dimensional) block. | * A group of threads which share a memory and can "synchronize their execution to coördinate accesses to memory" (use a [[barrier]]) form a '''block'''. Each thread has a ''threadId'' within its (three-dimensional) block. | ||
** For a block of dimensions <D<sub>x</sub>, D<sub>y</sub>, D<sub>z</sub>>, the threadId of the thread having index <x, y, z> is (x + y * D<sub>x</sub> + z * D<sub>y</sub> * D<sub>x</sub>). | ** For a block of dimensions <D<sub>x</sub>, D<sub>y</sub>, D<sub>z</sub>>, the threadId of the thread having index <x, y, z> is (x + y * D<sub>x</sub> + z * D<sub>y</sub> * D<sub>x</sub>). | ||
* Register allocation is performed per-block, and rounded up to the nearest | * Register allocation is performed per-block, and rounded up to the nearest | ||
** 256 registers per block for compute capability <= 1.1, otherwise | ** 256 registers per block for compute capability <= 1.1, otherwise | ||
** 512 registers per block for compute capability <= 1.3 | ** 512 registers per block for compute capability <= 1.3 | ||
* A group of blocks which share a kernel form a '''grid'''. Each block (and each thread within that block) has a ''blockId'' within its (two-dimensional) grid. | * A group of blocks which share a kernel form a '''grid'''. Each block (and each thread within that block) has a ''blockId'' within its (two-dimensional) grid. | ||
** For a grid of dimensions <D<sub>x</sub>, D<sub>y</sub>>, the blockId of the block having index <x, y> is (x + y * D<sub>x</sub>). | ** For a grid of dimensions <D<sub>x</sub>, D<sub>y</sub>>, the blockId of the block having index <x, y> is (x + y * D<sub>x</sub>). | ||
| Line 163: | Line 165: | ||
===Compute Capabilities=== | ===Compute Capabilities=== | ||
The original public CUDA revision was 1.0, implemented on the NV50 chipset corresponding to the GeForce 8 series. Compute capability, formed of a non-negative major and minor revision number, can be queried on CUDA-capable cards. All revisions thus far have been | The original public CUDA revision was 1.0, implemented on the NV50 chipset corresponding to the GeForce 8 series. Compute capability, formed of a non-negative major and minor revision number, can be queried on CUDA-capable cards. All revisions thus far have been fowards-compatible, though recent CUDA toolkits will not generate code for CC1 or 2. | ||
{| border="1" class="wikitable" | {| border="1" class="wikitable" | ||
! Resource | ! Resource | ||
| Line 173: | Line 176: | ||
! 2.1 SM | ! 2.1 SM | ||
! 3.0 SMX | ! 3.0 SMX | ||
! 3.5 SMX | |||
! 7.0 SM | |||
! 7.5 SM | |||
|- | |- | ||
|CUDA cores | |CUDA cores | ||
| Line 182: | Line 188: | ||
|48 | |48 | ||
|192 | |192 | ||
|192 | |||
|64/32<br/>64/8 | |||
|64/2<br/>64/8 | |||
|- | |- | ||
| | |Schedulers | ||
|1 | |1 | ||
|1 | |1 | ||
| Line 190: | Line 199: | ||
|2 | |2 | ||
|2 | |2 | ||
|4 | |||
|4 | |||
|4 | |||
|4 | |4 | ||
|- | |- | ||
| Line 200: | Line 212: | ||
|2 | |2 | ||
|2 | |2 | ||
|2 | |||
|1 | |||
|1 | |||
|- | |- | ||
|Threads | |Threads | ||
|768 | |768 | ||
|768 | |768 | ||
| | |1K | ||
| | |1K | ||
|1536 | |1536 | ||
|1536 | |1536 | ||
| | |2K | ||
|2K | |||
|2K | |||
|1K | |||
|- | |- | ||
|Warps | |Warps | ||
| Line 218: | Line 236: | ||
|48 | |48 | ||
|64 | |64 | ||
|64 | |||
|64 | |||
|32 | |||
|- | |- | ||
|Blocks | |Blocks | ||
| Line 227: | Line 248: | ||
|8 | |8 | ||
|16 | |16 | ||
|16 | |||
|32 | |||
|16 | |||
|- | |||
|32-bit regs | |||
|8K | |||
|8K | |||
|16K | |||
|16K | |||
|32K | |||
|32K | |||
|64K | |||
|64K | |||
|64K | |||
|64K | |||
|- | |- | ||
| | |Examples | ||
| | |G80 | ||
| | |G9x | ||
| | |GT21x | ||
| | |GT200 | ||
| | |GF110 | ||
| | |GF10x | ||
| | |GK104 | ||
|GK110 | |||
|GV100 | |||
|TU10x | |||
|- | |- | ||
} | |} | ||
{| border="1" | {| border="1" | ||
! Revision | ! Revision | ||
| Line 289: | Line 328: | ||
* 32 SFUs per SMX, 32 TFUs per ROP | * 32 SFUs per SMX, 32 TFUs per ROP | ||
* 4 warp schedulers per SMX, capable of issuing two instructions per clock | * 4 warp schedulers per SMX, capable of issuing two instructions per clock | ||
* Double-precision instructions can be paired with non-DP | |||
** Previously, double-precision instructions couldn't be paired with anything | |||
* ''PTX 3.0'' | * ''PTX 3.0'' | ||
** <tt>madc</tt> and <tt>mad.cc</tt> instructions | ** <tt>madc</tt> and <tt>mad.cc</tt> instructions | ||
| Line 298: | Line 339: | ||
** DWARF debugging symbols support | ** DWARF debugging symbols support | ||
|- | |||
| 3.5 | |||
| | |||
* 255 registers per thread | |||
* "CUDA Dynamic Parallelism", the ability to spawn threads from within device code | |||
* ''PTX 3.1'' | |||
** A funnel shift instruction, <tt>shf</tt> | |||
** Loading read-only global data through the non-coherent texture cache, <tt>ld.global.nc</tt> | |||
** 64-bit atomic/reduction operators extended to {or, xor, and, integer min, integer max} | |||
** Mipmap type support | |||
** Indirect texture/surface support | |||
** Extends generic addressing to include the const state space | |||
|- | |||
| 7.0 | |||
| | |||
* ''PTX 6.3'' | |||
* Tensor cores | |||
* Independent thread scheduling | |||
|- | |||
| 7.5 | |||
| | |||
* ''PTX 6.4'' | |||
* Integer matrix multiplication in tensor cores | |||
|- | |- | ||
|} | |} | ||
| Line 328: | Line 394: | ||
* <tt>-X -v</tt> displays per-thread register usage | * <tt>-X -v</tt> displays per-thread register usage | ||
* <tt>-X -abi=no</tt> disables the PTX ABI, saving registers but taking away your stack | * <tt>-X -abi=no</tt> disables the PTX ABI, saving registers but taking away your stack | ||
* <tt>-dlcm={cg,cs,ca} modifies cache behavior for loads | * <tt>-dlcm={cg,cs,ca}</tt> modifies cache behavior for loads | ||
* <tt>-dscm={cw,cs} modifies cache behavior for stores | * <tt>-dscm={cw,cs}</tt> modifies cache behavior for stores | ||
===SDK's common.mk=== | ===SDK's common.mk=== | ||
This assumes use of the SDK's common.mk, as recommended by the documentation. | This assumes use of the SDK's common.mk, as recommended by the documentation. | ||
| Line 381: | Line 447: | ||
* A run time limit is activated by default if the device is being used to drive a display. | * A run time limit is activated by default if the device is being used to drive a display. | ||
* Please feel free to [mailto:nickblack@acm.org send me output!] | * Please feel free to [mailto:nickblack@acm.org send me output!] | ||
{| border="1" | {| border="1" | ||
! Device name | ! Device name | ||
| Line 386: | Line 454: | ||
! MP's | ! MP's | ||
! Cores | ! Cores | ||
! Shmem/block | ! Shmem/block | ||
! Reg/block | ! Reg/block | ||
| Line 397: | Line 464: | ||
! Shared maps? | ! Shared maps? | ||
|- | |- | ||
! COLSPAN=" | ! COLSPAN="13" style="background:#eebeb6;" | Compute capability 7.0 | ||
|- | |||
| Tesla V100 | |||
| 16GB | |||
| 84 | |||
| 5376/2688/672 | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| 1.53GHz | |||
| Yes | |||
| No | |||
| Yes | |||
|- | |||
! COLSPAN="13" style="background:#8070D8;" | Compute capability 3.0 | |||
|- | |- | ||
| GeForce GTX 680 | | GeForce GTX 680 | ||
| Line 404: | Line 487: | ||
| 1536 | | 1536 | ||
| | | | ||
| | | | ||
| | | | ||
| Line 414: | Line 496: | ||
| Yes | | Yes | ||
|- | |- | ||
! COLSPAN=" | ! COLSPAN="13" style="background:#ffdead;" | Compute capability 2.1 | ||
|- | |- | ||
| GeForce GTX 560 Ti | | GeForce GTX 560 Ti | ||
| | | | ||
| | | | ||
| Line 432: | Line 513: | ||
|- | |- | ||
| GeForce GTX 550 Ti | | GeForce GTX 550 Ti | ||
| | | | ||
| | | | ||
| Line 450: | Line 530: | ||
| 7 | | 7 | ||
| 224 | | 224 | ||
| 48k | | 48k | ||
| 32k | | 32k | ||
| Line 462: | Line 541: | ||
|- | |- | ||
| GeForce GTS 450 | | GeForce GTS 450 | ||
| | | | ||
| | | | ||
| Line 476: | Line 554: | ||
| | | | ||
|- | |- | ||
! COLSPAN=" | ! COLSPAN="13" style="background:#ffdead;" | Compute capability 2.0 | ||
|- | |- | ||
| GeForce GTX 580 | | GeForce GTX 580 | ||
| Line 482: | Line 560: | ||
| 16 | | 16 | ||
| 512 | | 512 | ||
| | | | ||
| | | | ||
| Line 497: | Line 574: | ||
| 14 | | 14 | ||
| 448 | | 448 | ||
| 48k | | 48k | ||
| 32k | | 32k | ||
| Line 512: | Line 588: | ||
| 14 | | 14 | ||
| 448 | | 448 | ||
| 48k | | 48k | ||
| 32k | | 32k | ||
| Line 527: | Line 602: | ||
| 15 | | 15 | ||
| 480 | | 480 | ||
| | | | ||
| | | | ||
| Line 542: | Line 616: | ||
| 14 | | 14 | ||
| 448 | | 448 | ||
| | | | ||
| | | | ||
| Line 553: | Line 626: | ||
| | | | ||
|- | |- | ||
! COLSPAN=" | ! COLSPAN="13" style="background:#efefef;" | Compute capability 1.3 | ||
|- | |- | ||
| Tesla C1060 | | Tesla C1060 | ||
| Line 559: | Line 632: | ||
| 30 | | 30 | ||
| 240 | | 240 | ||
| 16384b | | 16384b | ||
| 16384 | | 16384 | ||
| Line 574: | Line 646: | ||
| 30 | | 30 | ||
| 240 | | 240 | ||
| 16384b | | 16384b | ||
| 16384 | | 16384 | ||
| Line 589: | Line 660: | ||
| 30 | | 30 | ||
| 240 | | 240 | ||
| 16384b | | 16384b | ||
| 16384 | | 16384 | ||
| Line 604: | Line 674: | ||
| 30 | | 30 | ||
| 240 | | 240 | ||
| 16384b | | 16384b | ||
| 16384 | | 16384 | ||
| Line 619: | Line 688: | ||
| 27 | | 27 | ||
| 216 | | 216 | ||
| 16384b | | 16384b | ||
| 16384 | | 16384 | ||
| Line 630: | Line 698: | ||
| Yes | | Yes | ||
|- | |- | ||
! COLSPAN=" | ! COLSPAN="13" style="background:#efefef;" | Compute capability 1.2 | ||
|- | |- | ||
| GeForce GT 360M | | GeForce GT 360M | ||
| Line 636: | Line 704: | ||
| 12 | | 12 | ||
| 96 | | 96 | ||
| 16384b | | 16384b | ||
| 16384 | | 16384 | ||
| Line 651: | Line 718: | ||
| 2 | | 2 | ||
| 16 | | 16 | ||
| 16384b | | 16384b | ||
| 16384 | | 16384 | ||
| Line 666: | Line 732: | ||
| 12 | | 12 | ||
| 96 | | 96 | ||
| 16384b | | 16384b | ||
| 16384 | | 16384 | ||
| Line 677: | Line 742: | ||
| Yes | | Yes | ||
|- | |- | ||
! COLSPAN=" | ! COLSPAN="13" style="background:#efefef;" | Compute capability 1.1 | ||
|- | |- | ||
| ION | | ION | ||
| Line 683: | Line 748: | ||
| 2 | | 2 | ||
| 16 | | 16 | ||
| 16384b | | 16384b | ||
| 8192 | | 8192 | ||
| Line 698: | Line 762: | ||
| 2 | | 2 | ||
| 16 | | 16 | ||
| 16384b | | 16384b | ||
| 8192 | | 8192 | ||
| Line 713: | Line 776: | ||
| 16 | | 16 | ||
| 128 | | 128 | ||
| 16384b | | 16384b | ||
| 8192 | | 8192 | ||
| Line 728: | Line 790: | ||
| 16 | | 16 | ||
| 128 | | 128 | ||
| 16384b | | 16384b | ||
| 8192 | | 8192 | ||
| Line 743: | Line 804: | ||
| 8 | | 8 | ||
| 64 | | 64 | ||
| 16384b | | 16384b | ||
| 8192 | | 8192 | ||
| Line 759: | Line 819: | ||
| 2 | | 2 | ||
| 16 | | 16 | ||
| 16384b | | 16384b | ||
| 8192 | | 8192 | ||
| Line 774: | Line 833: | ||
| 16 | | 16 | ||
| 128 | | 128 | ||
| 16384b | | 16384b | ||
| 8192 | | 8192 | ||
| Line 789: | Line 847: | ||
| 4 | | 4 | ||
| 32 | | 32 | ||
| 16384b | | 16384b | ||
| 8192 | | 8192 | ||
| Line 804: | Line 861: | ||
| 1 | | 1 | ||
| 8 | | 8 | ||
| 16384b | | 16384b | ||
| 8192 | | 8192 | ||