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 '''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.
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).
** 8192 registers for compute capability <= 1.1, otherwise
** 8K registers for compute capability <= 1.1, otherwise
** 16384 for compute capability <= 1.3
** 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 &lt;D<sub>x</sub>, D<sub>y</sub>, D<sub>z</sub>&gt;, the threadId of the thread having index &lt;x, y, z&gt; is (x + y * D<sub>x</sub> + z * D<sub>y</sub> * D<sub>x</sub>).
** For a block of dimensions &lt;D<sub>x</sub>, D<sub>y</sub>, D<sub>z</sub>&gt;, the threadId of the thread having index &lt;x, y, z&gt; 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 &lt;D<sub>x</sub>, D<sub>y</sub>&gt;, the blockId of the block having index &lt;x, y&gt; is (x + y * D<sub>x</sub>).
** For a grid of dimensions &lt;D<sub>x</sub>, D<sub>y</sub>&gt;, the blockId of the block having index &lt;x, y&gt; 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 backwards-compatible.
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
|-
|-
|Warp schedulers
|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
|1024
|1K
|1024
|1K
|1536
|1536
|1536
|1536
|2048
|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
|-
|-
|32-bit registers
|Examples
|8192
|G80
|8192
|G9x
|16384
|GT21x
|16384
|GT200
|32768
|GF110
|32768
|GF10x
|65536
|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
! Const mem
! Shmem/block
! Shmem/block
! Reg/block
! Reg/block
Line 397: Line 464:
! Shared maps?
! Shared maps?
|-
|-
! COLSPAN="15" style="background:#8070D8;" | Compute capability 3.0
! 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="15" style="background:#ffdead;" | Compute capability 2.1
! 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
| 64k
| 48k
| 48k
| 32k
| 32k
Line 462: Line 541:
|-
|-
| GeForce GTS 450
| GeForce GTS 450
|
|
|
|
|
Line 476: Line 554:
|
|
|-
|-
! COLSPAN="15" style="background:#ffdead;" | Compute capability 2.0
! 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
| 64k
| 48k
| 48k
| 32k
| 32k
Line 512: Line 588:
| 14
| 14
| 448
| 448
| 64k
| 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="15" style="background:#efefef;" | Compute capability 1.3
! COLSPAN="13" style="background:#efefef;" | Compute capability 1.3
|-
|-
| Tesla C1060
| Tesla C1060
Line 559: Line 632:
| 30
| 30
| 240
| 240
| 65536b
| 16384b
| 16384b
| 16384
| 16384
Line 574: Line 646:
| 30
| 30
| 240
| 240
| 65536b
| 16384b
| 16384b
| 16384
| 16384
Line 589: Line 660:
| 30
| 30
| 240
| 240
| 65536b
| 16384b
| 16384b
| 16384
| 16384
Line 604: Line 674:
| 30
| 30
| 240
| 240
| 65536b
| 16384b
| 16384b
| 16384
| 16384
Line 619: Line 688:
| 27
| 27
| 216
| 216
| 65536b
| 16384b
| 16384b
| 16384
| 16384
Line 630: Line 698:
| Yes
| Yes
|-
|-
! COLSPAN="15" style="background:#efefef;" | Compute capability 1.2
! COLSPAN="13" style="background:#efefef;" | Compute capability 1.2
|-
|-
| GeForce GT 360M
| GeForce GT 360M
Line 636: Line 704:
| 12
| 12
| 96
| 96
| 65536b
| 16384b
| 16384b
| 16384
| 16384
Line 651: Line 718:
| 2
| 2
| 16
| 16
| 65536b
| 16384b
| 16384b
| 16384
| 16384
Line 666: Line 732:
| 12
| 12
| 96
| 96
| 65536b
| 16384b
| 16384b
| 16384
| 16384
Line 677: Line 742:
| Yes
| Yes
|-
|-
! COLSPAN="15" style="background:#efefef;" | Compute capability 1.1
! COLSPAN="13" style="background:#efefef;" | Compute capability 1.1
|-
|-
| ION
| ION
Line 683: Line 748:
| 2
| 2
| 16
| 16
| 65536b
| 16384b
| 16384b
| 8192
| 8192
Line 698: Line 762:
| 2
| 2
| 16
| 16
| 65536b
| 16384b
| 16384b
| 8192
| 8192
Line 713: Line 776:
| 16
| 16
| 128
| 128
| 65536b
| 16384b
| 16384b
| 8192
| 8192
Line 728: Line 790:
| 16
| 16
| 128
| 128
| 65536b
| 16384b
| 16384b
| 8192
| 8192
Line 743: Line 804:
| 8
| 8
| 64
| 64
| 65536b
| 16384b
| 16384b
| 8192
| 8192
Line 759: Line 819:
| 2
| 2
| 16
| 16
| 65536b
| 16384b
| 16384b
| 8192
| 8192
Line 774: Line 833:
| 16
| 16
| 128
| 128
| 65536b
| 16384b
| 16384b
| 8192
| 8192
Line 789: Line 847:
| 4
| 4
| 32
| 32
| 65536b
| 16384b
| 16384b
| 8192
| 8192
Line 804: Line 861:
| 1
| 1
| 8
| 8
| 65536b
| 16384b
| 16384b
| 8192
| 8192