Cuda 4.0を搭載したUbuntu 10.10 システムでNVIDIA GTX 570グラフィックス カードを実行しています。
パフォーマンスのためには、メモリに効率的にアクセスし、デバイス上のレジスタと共有メモリを賢く使用する必要があることはわかっています。
ただし、計算方法、スレッドごとに使用可能なレジスタの数、単一のブロックで使用できる共有メモリの量、および特定のカーネル構成に対するその他の単純/重要な計算を理解していません。
明確な例でこれを理解したいと思います。ちなみに、私は現在、カーネルの 1 つがこのように見える粒子コードを書こうとしています。
各ブロックはスレッドの1 次元コレクションであり、各グリッドはブロックの1 次元コレクションです。
- ブロック数 : 16384
- ブロックあたりのスレッド数: 32 ( => 合計スレッド 32*16384 = 524288 )
- 各スレッド ブロックには、使用する共有メモリの32 x 32 の 2 次元整数配列が与えられます。
スレッド内に type のいくつかの数値を保存したいと思いますdouble
。しかしdouble
、レジスターがローカルメモリー (デバイス上) に流出することなく、そのような数値をいくつ保存できるかはわかりません。このカーネル構成のスレッドごとにいくつの double を格納できるか教えてもらえますか?
また、各ブロックの共有メモリの上記の構成は有効ですか?
これらのことをどのように推測するかについてのサンプル計算は、非常に説明的で役立つでしょう
これが私の GTX 570 に関する情報です: (CUDA-SDK の deviceQuery を使用)
[deviceQuery] starting...
./deviceQuery Starting...
CUDA Device Query (Runtime API) version (CUDART static linking)
Found 1 CUDA Capable device(s)
Device 0: "GeForce GTX 570"
CUDA Driver Version / Runtime Version 4.0 / 4.0
CUDA Capability Major/Minor version number: 2.0
Total amount of global memory: 1279 MBytes (1341325312 bytes)
(15) Multiprocessors x (32) CUDA Cores/MP: 480 CUDA Cores
GPU Clock Speed: 1.46 GHz
Memory Clock rate: 1900.00 Mhz
Memory Bus Width: 320-bit
L2 Cache Size: 655360 bytes
Max Texture Dimension Size (x,y,z) 1D=(65536), 2D=(65536,65535), 3D=(2048,2048,2048)
Max Layered Texture Size (dim) x layers 1D=(16384) x 2048, 2D=(16384,16384) x 2048
Total amount of constant memory: 65536 bytes
Total amount of shared memory per block: 49152 bytes
Total number of registers available per block: 32768
Warp size: 32
Maximum number of threads per block: 1024
Maximum sizes of each dimension of a block: 1024 x 1024 x 64
Maximum sizes of each dimension of a grid: 65535 x 65535 x 65535
Maximum memory pitch: 2147483647 bytes
Texture alignment: 512 bytes
Concurrent copy and execution: Yes with 1 copy engine(s)
Run time limit on kernels: Yes
Integrated GPU sharing Host Memory: No
Support host page-locked memory mapping: Yes
Concurrent kernel execution: Yes
Alignment requirement for Surfaces: Yes
Device has ECC support enabled: No
Device is using TCC driver mode: No
Device supports Unified Addressing (UVA): Yes
Device PCI Bus ID / PCI location ID: 2 / 0
Compute Mode:
< Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >
deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 4.0, CUDA Runtime Version = 4.0, NumDevs = 1, Device = GeForce GTX 570
[deviceQuery] test results...
PASSED
Press ENTER to exit...