CUDA: Difference between revisions
"65K" ?! |
|||
| (66 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
[[File:Gt200die-big.jpg|right|thumb|A "Fermi" GT200 die]] | [[File:Gt200die-big.jpg|right|thumb|A "Fermi" GT200 die]] | ||
==Hardware== | ==Hardware== | ||
NVIDIA maintains a list of [http://www.nvidia.com/object/cuda_learn_products.html supported hardware]. | NVIDIA maintains a list of [http://www.nvidia.com/object/cuda_learn_products.html supported hardware]. You'll need the "nvidia.ko" kernel module. On [[Debian]], use the <tt>nvidia-kernel-dkms</tt> package to build a module appropriate for your kernel (and automatically rebuild it upon kernel upgrades). You can also download the <tt>nvidia-kernel-source</tt> and <tt>nvidia-kernel-common</tt> packages, unpack <tt>/usr/src/nvidia-kernel.tar.bz2</tt>, and run <tt>make-kpkg modules_image</tt>. Install the resulting .deb, and modprobe nvidia. You'll see something like this in dmesg output:<pre>nvidia: module license 'NVIDIA' taints kernel. | ||
Disabling lock debugging due to kernel taint | Disabling lock debugging due to kernel taint | ||
nvidia 0000:07:00.0: enabling device (0000 -> 0003) | nvidia 0000:07:00.0: enabling device (0000 -> 0003) | ||
| 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. | 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== | ||
===Host=== | ===Host=== | ||
| Line 53: | Line 22: | ||
** Larger one-time setup cost due to device register programming for DMA transfers. | ** Larger one-time setup cost due to device register programming for DMA transfers. | ||
** This memory will be unswappable -- allocate only as much as is needed. | ** This memory will be unswappable -- allocate only as much as is needed. | ||
* Pinned memory can be mapped directly into CUDAspace on ''integrated'' devices or in the presence of some IOMMUs. | * Pinned memory can be mapped directly into CUDAspace on ''integrated'' devices or in the presence of some [[IOMMU|IOMMUs]]. | ||
** "Zero (explicit)-copy" interface (can never hide all bus delays) | ** "Zero (explicit)-copy" interface (can never hide all bus delays) | ||
* Write-combining memory (configured via [[MTRR|MTRRs]] or [[Page Attribute Tables|PATs]]) avoids PCI snoop requirements and maximizes linear throughput | * Write-combining memory (configured via [[MTRR|MTRRs]] or [[Page Attribute Tables|PATs]]) avoids PCI snoop requirements and maximizes linear throughput | ||
| Line 63: | 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 112: | Line 83: | ||
===Stream Processor=== | ===Stream Processor=== | ||
* In-order, multithreaded processor: memory latencies can be hidden only by TLP, not ILP. | * In-order, multithreaded processor: memory latencies can be hidden only by TLP, not ILP. | ||
** '''UPDATE''' Vasily Volkov's awesome GTC 2010 paper, "[http://www.cs.berkeley.edu/~volkov/volkov10-GTC.pdf Better Performance at Lower Occupancy]", ''destroys'' this notion. | |||
*** Really. Go read Vasily's paper. It's better than anything you'll find here. | |||
** Arithmetic intensity and parallelism are paramount! | ** Arithmetic intensity and parallelism are paramount! | ||
** Memory-bound kernels require sufficiently high ''occupancy'' (the ratio of concurrently-running warps to maximum possible concurrent warps (as applied, usually, to [[#Streaming Multiprocessor|SMs]])) to hide latency. | ** Memory-bound kernels require sufficiently high ''occupancy'' (the ratio of concurrently-running warps to maximum possible concurrent warps (as applied, usually, to [[#Streaming Multiprocessor|SMs]])) to hide latency. | ||
* No branch prediction or speculation | * No branch prediction or speculation. Full predication. | ||
{| border="1" | {| border="1" | ||
! Memory type | ! Memory type | ||
| Line 161: | Line 134: | ||
| Read-write | | Read-write | ||
| Read-write | | Read-write | ||
| None | | '''1.x''': None | ||
'''2.0+''': L1 on SM, L2 on TPC(?) | |||
| Yes | | Yes | ||
|- | |- | ||
| Line 191: | 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" | |||
! Resource | |||
! 1.0 SM | |||
! 1.1 SM | |||
! 1.2 SM | |||
! 1.3 SM | |||
! 2.0 SM | |||
! 2.1 SM | |||
! 3.0 SMX | |||
! 3.5 SMX | |||
! 7.0 SM | |||
! 7.5 SM | |||
|- | |||
|CUDA cores | |||
|8 | |||
|8 | |||
|8 | |||
|8 | |||
|32 | |||
|48 | |||
|192 | |||
|192 | |||
|64/32<br/>64/8 | |||
|64/2<br/>64/8 | |||
|- | |||
|Schedulers | |||
|1 | |||
|1 | |||
|1 | |||
|1 | |||
|2 | |||
|2 | |||
|4 | |||
|4 | |||
|4 | |||
|4 | |||
|- | |||
|Insts/sched | |||
|1 | |||
|1 | |||
|1 | |||
|1 | |||
|1 | |||
|2 | |||
|2 | |||
|2 | |||
|1 | |||
|1 | |||
|- | |||
|Threads | |||
|768 | |||
|768 | |||
|1K | |||
|1K | |||
|1536 | |||
|1536 | |||
|2K | |||
|2K | |||
|2K | |||
|1K | |||
|- | |||
|Warps | |||
|24 | |||
|24 | |||
|32 | |||
|32 | |||
|48 | |||
|48 | |||
|64 | |||
|64 | |||
|64 | |||
|32 | |||
|- | |||
|Blocks | |||
|8 | |||
|8 | |||
|8 | |||
|8 | |||
|8 | |||
|8 | |||
|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 197: | Line 282: | ||
|- | |- | ||
| 1.1 | | 1.1 | ||
| Atomic ops on 32-bit global integers. Breakpoints and other debugging support. | | | ||
* Atomic ops on 32-bit global integers. | |||
* Breakpoints and other debugging support. | |||
|- | |- | ||
| 1.2 | | 1.2 | ||
| Atomic ops on 64-bit global integers and 32-bit shared integers. 32 warps (1024 threads) and 16K registers per multiprocessor (MP). Vote instructions. Three MPs per Texture Processing Cluster (TPC). Relaxed memory coalescing constraints. | | | ||
* Atomic ops on 64-bit global integers and 32-bit shared integers. | |||
* 32 warps (1024 threads) and 16K registers per multiprocessor (MP). | |||
* Vote instructions. | |||
* Three MPs per Texture Processing Cluster (TPC). | |||
* Relaxed memory coalescing constraints. | |||
|- | |- | ||
| 1.3 | | 1.3 | ||
| Double-precision floating point at 32 cycles per operation. | | | ||
* Double-precision floating point at 32 cycles per operation. | |||
|- | |- | ||
| 2.0 | | 2.0 | ||
| Atomic addition on 32-bit global and shared FP. 48 warps (1536 threads), 48K shared memory banked 32 ways, and 32K registers per MP. 512K local memory per thread. <tt>__syncthreads_{count,and,or}()</tt>, <tt>__threadfence_system()</tt>, and <tt>__ballot()</tt>. 1024 threads per block and <tt>blockIdx.{x,y}</tt> values ranging through 1024. Larger texture references. PTX 2.0. | | | ||
* 32 cores per SM | |||
* 4 SFUs | |||
* Atomic addition on 32-bit global and shared FP. | |||
* 48 warps (1536 threads), 48K shared memory banked 32 ways, and 32K registers per MP. | |||
* 512K local memory per thread. | |||
* <tt>__syncthreads_{count,and,or}()</tt>, <tt>__threadfence_system()</tt>, and <tt>__ballot()</tt>. | |||
* 1024 threads per block and <tt>blockIdx.{x,y}</tt> values ranging through 1024. | |||
* Larger texture references. | |||
* ''PTX 2.0'' | |||
** Efficient uniform addressing (<tt>ldu</tt>) | |||
** Unified address space: <tt>isspacep</tt>/<tt>cvta</tt> | |||
** Prefetching: <tt>prefetch</tt>/<tt>prefetchu</tt> | |||
** Cache modifiers on loads and stores: <tt>.ca</tt>, <tt>.cg</tt>, <tt>.cs</tt>, <tt>.lu</tt>, <tt>.cv</tt> | |||
** New integer ops: <tt>popc</tt>/<tt>clz</tt>/<tt>bfind</tt>/<tt>brev</tt>/<tt>bfe</tt>/<tt>bfi</tt> | |||
** Video ops: <tt>vadd</tt>, <tt>vsub</tt>, <tt>vabsdiff</tt>, <tt>vmin</tt>, <tt>vmax</tt>, <tt>vshl</tt>, <tt>vshr</tt>, <tt>vmad</tt>, <tt>vset</tt> | |||
** New special registers: <tt>nsmid</tt>, <tt>clock64</tt>, ...). | |||
|- | |- | ||
| | | 2.1 | ||
| | |||
* 48 cores per SM | |||
* 8 SFUs per SM, 8 TFUs per ROP | |||
* 2 warp schedulers per SM, capable of issuing two instructions per clock | |||
|- | |||
| 3.0 | |||
| | |||
* 192 cores per SMX | |||
* 32 SFUs per SMX, 32 TFUs per ROP | |||
* 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'' | |||
** <tt>madc</tt> and <tt>mad.cc</tt> instructions | |||
** Cubemaps and cubearrays for the <tt>tex</tt> instruction | |||
** 3D surfaces via the <tt>suld.b.3d</tt> and <tt>sust.b.3d</tt> instructions | |||
** <tt>pmevent.mask</tt> to trigger multiple performance counters | |||
** 64-bit grid IDs | |||
** 4 more performance counters, for a total of 8 | |||
** 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 | ||
* to | |||
* | |- | ||
| 7.0 | |||
| | |||
* ''PTX 6.3'' | |||
* Tensor cores | |||
* Independent thread scheduling | |||
|- | |||
| 7.5 | |||
* | | | ||
* | * ''PTX 6.4'' | ||
* Integer matrix multiplication in tensor cores | |||
|- | |||
|} | |||
==PTX== | |||
===Syntax Coloring=== | |||
[[File:ptxcolor.png|thumb|right|PTX with syntax coloring]] | |||
I've got a [[vim]] syntax coloring file for PTX/NVIR/SASS at https://raw.github.com/dankamongmen/dankhome/master/.vim/syntax/nvir.vim. It operates by coloring all registers congruent to some integer mod 10 the same color: | |||
<pre>syn match asmReg0 "v\?R[0-9]*0\(\.B\|\.F\|\.U\?\(I\|L\)\|\([^0-9]\)\@=\)" | |||
syn match asmReg1 "v\?R[0-9]*1\(\.B\|\.F\|\.U\?\(I\|L\)\|\([^0-9]\)\@=\)" | |||
syn match asmReg2 "v\?R[0-9]*2\(\.B\|\.F\|\.U\?\(I\|L\)\|\([^0-9]\)\@=\)" | |||
syn match asmReg3 "v\?R[0-9]*3\(\.B\|\.F\|\.U\?\(I\|L\)\|\([^0-9]\)\@=\)" | |||
syn match asmReg4 "v\?R[0-9]*4\(\.B\|\.F\|\.U\?\(I\|L\)\|\([^0-9]\)\@=\)" | |||
syn match asmReg5 "v\?R[0-9]*5\(\.B\|\.F\|\.U\?\(I\|L\)\|\([^0-9]\)\@=\)" | |||
syn match asmReg6 "v\?R[0-9]*6\(\.B\|\.F\|\.U\?\(I\|L\)\|\([^0-9]\)\@=\)" | |||
syn match asmReg7 "v\?R[0-9]*7\(\.B\|\.F\|\.U\?\(I\|L\)\|\([^0-9]\)\@=\)" | |||
syn match asmReg8 "v\?R[0-9]*8\(\.B\|\.F\|\.U\?\(I\|L\)\|\([^0-9]\)\@=\)" | |||
syn match asmReg9 "v\?R[0-9]*9\(\.B\|\.F\|\.U\?\(I\|L\)\|\([^0-9]\)\@=\)" | |||
syn match asmPReg "P[0-9]\([0-9]*\)\(\.B\|\.F\|\.U\?\(I\|L\)\|\([^0-9]\)\@=\)" | |||
syn match asmBB "BB[0-9][0-9]*\(_\d\d*\)\?" | |||
syn match asmBBNew "BB-\d\d*" | |||
syn match nvirNT ".NEXT_TRUE.*" | |||
syn match nvirNF ".NEXT_FALSE.*" | |||
syn match hexconst "0x\x\+\(\.F\|\.U\?\(I\|L\)\)\?" | |||
syn match spreg "\(ctaid\|ntid\|tid\|nctaid\).\(x\|y\|z\)"</pre> | |||
==Building CUDA Apps== | ==Building CUDA Apps== | ||
===nvcc flags=== | ===nvcc flags=== | ||
* <tt>- | Pass flags to <tt>ptxas</tt> via -X: | ||
* <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>-dlcm={cg,cs,ca}</tt> modifies cache behavior for loads | |||
* <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 286: | Line 438: | ||
==deviceQuery info== | ==deviceQuery info== | ||
* Memory shown is that amount which is free; I've substituted total VRAM. | |||
* Most CUDA devices can switch between multiple frequencies; the "Clock rate" output ought be considered accurate only at a given moment, and the outputs listed here are merely illustrative. | * Most CUDA devices can switch between multiple frequencies; the "Clock rate" output ought be considered accurate only at a given moment, and the outputs listed here are merely illustrative. | ||
* Three device modes are currently supported: | * Three device modes are currently supported: | ||
| Line 293: | Line 446: | ||
* The mode can be set using <tt>nvidia-smi</tt>'s -c option, specifying the device number via -g. | * The mode can be set using <tt>nvidia-smi</tt>'s -c option, specifying the device number via -g. | ||
* 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 | * Please feel free to [mailto:nickblack@acm.org send me output!] | ||
{| border="1" | {| border="1" | ||
! Device name | ! Device name | ||
| Line 483: | Line 454: | ||
! MP's | ! MP's | ||
! Cores | ! Cores | ||
! | ! Shmem/block | ||
! Reg/block | |||
! | |||
! Warp size | ! Warp size | ||
! | ! Thr/block | ||
! | ! Texalign | ||
! Clock | ! Clock | ||
! C+E? | ! C+E? | ||
! Integrated? | ! Integrated? | ||
! Shared maps? | ! Shared maps? | ||
|- | |||
! 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 | |||
| 1.5GB | |||
| 8 | |||
| 1536 | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| Yes | |||
| No | |||
| Yes | |||
|- | |||
! COLSPAN="13" style="background:#ffdead;" | Compute capability 2.1 | |||
|- | |||
| GeForce GTX 560 Ti | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
|- | |||
| GeForce GTX 550 Ti | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
|- | |||
| GeForce GTX 460 | |||
| 1GB | |||
| 7 | |||
| 224 | |||
| 48k | |||
| 32k | |||
| 32 | |||
| 1024 | |||
| 512b | |||
| 1.35GHz | |||
| Yes | |||
| No | |||
| Yes | |||
|- | |||
| GeForce GTS 450 | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
|- | |||
! COLSPAN="13" style="background:#ffdead;" | Compute capability 2.0 | |||
|- | |||
| GeForce GTX 580 | |||
| 1.5GB | |||
| 16 | |||
| 512 | |||
| | |||
| | |||
| 32 | |||
| 1024 | |||
| | |||
| 1.544GHz | |||
| Yes | |||
| No | |||
| Yes | |||
|- | |||
| Tesla C2050 (*CB) | |||
| 3GB | |||
| 14 | |||
| 448 | |||
| 48k | |||
| 32k | |||
| 32 | |||
| 1024 | |||
| 512b | |||
| 1.15GHz | |||
| Yes | |||
| No | |||
| Yes | |||
|- | |||
| Tesla C2070 (*CB) | |||
| 6GB | |||
| 14 | |||
| 448 | |||
| 48k | |||
| 32k | |||
| 32 | |||
| 1024 | |||
| 512b | |||
| 1.15GHz | |||
| Yes | |||
| No | |||
| Yes | |||
|- | |||
| GeForce GTX 480 | |||
| 1536MB | |||
| 15 | |||
| 480 | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
|- | |||
| GeForce GTX 470 | |||
| 1280MB | |||
| 14 | |||
| 448 | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
|- | |||
! COLSPAN="13" style="background:#efefef;" | Compute capability 1.3 | |||
|- | |||
| Tesla C1060 | |||
| 4GB | |||
| 30 | |||
| 240 | |||
| 16384b | |||
| 16384 | |||
| 32 | |||
| 512 | |||
| 256b | |||
| 1.30GHz | |||
| Yes | |||
| No | |||
| Yes | |||
|- | |||
| GeForce GTX 295 | |||
| 1GB | |||
| 30 | |||
| 240 | |||
| 16384b | |||
| 16384 | |||
| 32 | |||
| 512 | |||
| 256b | |||
| 1.24GHz | |||
| Yes | |||
| No | |||
| Yes | |||
|- | |||
| GeForce GTX 285 | |||
| 1GB | |||
| 30 | |||
| 240 | |||
| 16384b | |||
| 16384 | |||
| 32 | |||
| 512 | |||
| 256b | |||
| 1.48GHz | |||
| Yes | |||
| No | |||
| Yes | |||
|- | |||
| GeForce GTX 280 | |||
| 1GB | |||
| 30 | |||
| 240 | |||
| 16384b | |||
| 16384 | |||
| 32 | |||
| 512 | |||
| 256b | |||
| 1.30GHz | |||
| Yes | |||
| No | |||
| Yes | |||
|- | |||
| GeForce GTX 260 | |||
| 1GB | |||
| 27 | |||
| 216 | |||
| 16384b | |||
| 16384 | |||
| 32 | |||
| 512 | |||
| 256b | |||
| 1.47GHz | |||
| Yes | |||
| No | |||
| Yes | |||
|- | |||
! COLSPAN="13" style="background:#efefef;" | Compute capability 1.2 | |||
|- | |||
| GeForce GT 360M | |||
| 1GB | |||
| 12 | |||
| 96 | |||
| 16384b | |||
| 16384 | |||
| 32 | |||
| 512 | |||
| 256b | |||
| 1.32GHz | |||
| Yes | |||
| No | |||
| Yes | |||
|- | |||
| GeForce 310 | |||
| 512MB | |||
| 2 | |||
| 16 | |||
| 16384b | |||
| 16384 | |||
| 32 | |||
| 512 | |||
| 256b | |||
| 1.40GHz | |||
| Yes | |||
| No | |||
| Yes | |||
|- | |||
| GeForce 240 GT | |||
| 1GB | |||
| 12 | |||
| 96 | |||
| 16384b | |||
| 16384 | |||
| 32 | |||
| 512 | |||
| 256b | |||
| 1.424GHz | |||
| Yes | |||
| No | |||
| Yes | |||
|- | |||
! COLSPAN="13" style="background:#efefef;" | Compute capability 1.1 | |||
|- | |- | ||
| ION | | ION | ||
| Line 501: | Line 748: | ||
| 2 | | 2 | ||
| 16 | | 16 | ||
| 16384b | | 16384b | ||
| 8192 | | 8192 | ||
| 32 | | 32 | ||
| 512 | | 512 | ||
| 256b | | 256b | ||
| 1.1GHz | | 1.1GHz | ||
| Line 519: | Line 762: | ||
| 2 | | 2 | ||
| 16 | | 16 | ||
| 16384b | | 16384b | ||
| 8192 | | 8192 | ||
| 32 | | 32 | ||
| 512 | | 512 | ||
| 256b | | 256b | ||
| 0.92GHz | | 0.92GHz | ||
| Line 533: | Line 772: | ||
| No | | No | ||
|- | |- | ||
| GeForce 9800 GTX | | GeForce GTS 250 (*JR) | ||
| 1G | |||
| 16 | |||
| 128 | |||
| 16384b | |||
| 8192 | |||
| 32 | |||
| 512 | |||
| 256b | |||
| 1.84GHz | |||
| Yes | |||
| No | |||
| No | |||
|- | |||
| GeForce 9800 GTX | |||
| 512MB | | 512MB | ||
| 16 | | 16 | ||
| 128 | | 128 | ||
| 16384b | | 16384b | ||
| 8192 | | 8192 | ||
| 32 | | 32 | ||
| 512 | | 512 | ||
| 256b | | 256b | ||
| 1.67GHz | | 1.67GHz | ||
| Line 555: | Line 804: | ||
| 8 | | 8 | ||
| 64 | | 64 | ||
| 16384b | | 16384b | ||
| 8192 | | 8192 | ||
| 32 | | 32 | ||
| 512 | | 512 | ||
| 256b | | 256b | ||
| 1.62GHz, 1.50GHz | | 1.62GHz, | ||
1.50GHz | |||
| Yes | | Yes | ||
| No | | No | ||
| Line 573: | Line 819: | ||
| 2 | | 2 | ||
| 16 | | 16 | ||
| 16384b | | 16384b | ||
| 8192 | | 8192 | ||
| 32 | | 32 | ||
| 512 | | 512 | ||
| 256b | | 256b | ||
| 0.88GHz | | 0.88GHz | ||
| Line 591: | Line 833: | ||
| 16 | | 16 | ||
| 128 | | 128 | ||
| 16384b | | 16384b | ||
| 8192 | | 8192 | ||
| 32 | | 32 | ||
| 512 | | 512 | ||
| 256b | | 256b | ||
| 1.62GHz | | 1.62GHz | ||
| Line 609: | Line 847: | ||
| 4 | | 4 | ||
| 32 | | 32 | ||
| 16384b | | 16384b | ||
| 8192 | | 8192 | ||
| 32 | | 32 | ||
| 512 | | 512 | ||
| 256b | | 256b | ||
| 0.95GHz | | 0.95GHz | ||
| Line 627: | Line 861: | ||
| 1 | | 1 | ||
| 8 | | 8 | ||
| 16384b | | 16384b | ||
| 8192 | | 8192 | ||
| 32 | | 32 | ||
| 512 | | 512 | ||
| 256b | | 256b | ||
| 1.40GHz | | 1.40GHz | ||
| Line 642: | Line 872: | ||
|- | |- | ||
|} | |} | ||
(*CB) Thanks to Cameron Black for this submission! | |||
(*JR) Thanks to Javier Ruiz for this submission! | |||
==See Also== | ==See Also== | ||
| Line 649: | Line 881: | ||
* The [http://code.google.com/p/gpuocelot/ gpuocelot] project, hosted on Google Code. | * The [http://code.google.com/p/gpuocelot/ gpuocelot] project, hosted on Google Code. | ||
* The NVIDIA [http://developer.nvidia.com/object/gpucomputing.html GPU Developer Zone] | * The NVIDIA [http://developer.nvidia.com/object/gpucomputing.html GPU Developer Zone] | ||
* My [[CUBAR]] tools | * My [[CUBAR]] tools and reverse-engineered [[libcudest]] | ||
[[CATEGORY: GPGPU]] | |||