3

私はCUDAでいくつかのコードを書いていますが、実際に何が並列に実行されているかについて少し混乱しています。

  1. 次のようなカーネル関数を呼び出しているとしますkenel_foo<<<A, B>>>。以下のデバイス クエリによると、ブロックごとに最大 512 のスレッドを持つことができます。では、実行するたびにブロックごとに 512 回の計算が行われることが保証されていますkernel_foo<<<A, 512>>>か? しかし、ここでは 1 つのスレッドが 1 つの CUDA コアで実行されると書かれているので、一度に 96 のスレッドを同時に実行できるということですか? (下記の device_query を参照してください)。

  2. ブロックについて知りたいです。を呼び出すたびにkernel_foo<<<A, 512>>>、並列に実行される計算の数と方法は? つまり、ブロックを次々に実行するのですか、それともブロックも並列化されますか? はいの場合、それぞれ 512 スレッドを並列に実行できるブロックはいくつですか? ここでは、1 つの CUDA SM で 1 つのブロックが実行されると書いてありますが、12 個のブロックが同時に実行できるというのは本当ですか? はいの場合、12 個のブロックすべてが同時に実行されている場合、各ブロックは最大でいくつのスレッド (8、96、または 512) を同時に実行できますか? (下記の device_query を参照してください)。

  3. もう 1 つの質問はA、値が ~50 の場合、カーネルを起動する方が良いですか、kernel_foo<<<A, 512>>>またはkernel_foo<<<512, A>>>ですか? スレッドの同期は必要ないと仮定します。

申し訳ありませんが、これらは基本的な質問かもしれませんが、ちょっと複雑です
...

ありがとう

これが私のものdevice_queryです:

Device 0: "Quadro FX 4600"
CUDA Driver Version / Runtime Version          4.2 / 4.2
CUDA Capability Major/Minor version number:    1.0
Total amount of global memory:                 768 MBytes (804978688 bytes)
(12) Multiprocessors x (  8) CUDA Cores/MP:    96 CUDA Cores
GPU Clock rate:                                1200 MHz (1.20 GHz)
Memory Clock rate:                             700 Mhz
Memory Bus Width:                              384-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: 8192
Warp size:                                     32
Maximum number of threads per multiprocessor:  768
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 execution:                 No with 0 copy engine(s)
Run time limit on kernels:                     Yes
Integrated GPU sharing Host Memory:            No
Support host page-locked memory mapping:       No
Concurrent kernel execution:                   No
Alignment requirement for Surfaces:            Yes
Device has ECC support enabled:                No
Device is using TCC driver mode:               No
Device supports Unified Addressing (UVA):      No
Device PCI Bus ID / PCI location ID:           2 / 0
4

1 に答える 1

2

最初のヒントについては、この回答をご覧ください。答えは、計算能力 1.x を備えた古い GPU について話しているという点で少し古くなっていますが、いずれにせよ、それはあなたの GPU に一致します。新しい GPU (2.x と 3.x) には異なるパラメーター (SM あたりのコア数など) がありますが、スレッドとブロックの概念と、レイテンシを隠すためのオーバーサブスクライブの概念を理解すれば、変更を簡単に理解できます。

また、この Udacity コースまたはこの Coursera コースを受講することもできます。

于 2013-02-12T12:45:49.097 に答える