8

2 枚の Nvidia Quadro FX 5800 カードがインストールされたワークステーションがあります。deviceQuery CUDA サンプルを実行すると、マルチプロセッサ (SM) あたりの最大スレッド数が 1024 であるのに対し、ブロックあたりの最大スレッド数は 512 であることがわかります。

一度に各 SM で実行できるブロックは 1 つだけですが、最大スレッド数/プロセッサが最大スレッド数/ブロックの 2 倍になるのはなぜですか? SM ごとに他の 512 スレッドをどのように利用するのでしょうか?

Device 1: "Quadro FX 5800"
  CUDA Driver Version / Runtime Version          5.0 / 5.0
  CUDA Capability Major/Minor version number:    1.3
  Total amount of global memory:                 4096 MBytes (4294770688 bytes)
  (30) Multiprocessors x (  8) CUDA Cores/MP:    240 CUDA Cores
  GPU Clock rate:                                1296 MHz (1.30 GHz)
  Memory Clock rate:                             800 Mhz
  Memory Bus Width:                              512-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: 16384
  Warp size:                                     32
  Maximum number of threads per multiprocessor:  1024
  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 kernel execution:          Yes with 1 copy engine(s)
  Run time limit on kernels:                     No
  Integrated GPU sharing Host Memory:            No
  Support host page-locked memory mapping:       Yes
  Alignment requirement for Surfaces:            Yes
  Device has ECC support:                        Disabled
  Device supports Unified Addressing (UVA):      No
  Device PCI Bus ID / PCI location ID:           4 / 0
  Compute Mode:
     < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >

乾杯、ジェームズ。

4

1 に答える 1

19

各 SM で一度に実行できるブロックは 1 つだけであるため、

このステートメントは根本的に間違っています。リソースの競合がなければ、カーネル (つまりグリッド) に十分なスレッドブロックがあると仮定すると、SM には通常、複数のスレッドブロックが割り当てられます。

実行の基本単位はワープです。ワープは 32 のスレッドで構成され、SM によって命令サイクルごとにロックステップで一緒に実行されます。

したがって、単一のスレッドブロック内であっても、SM は通常、「飛行中」の複数のワープを持ちます。これは、マシンがレイテンシを隠蔽できるようにするために、優れたパフォーマンスを得るために不可欠です。

同じスレッドブロックからワープを選択して実行するか、異なるスレッドブロックからワープを選択するかに概念的な違いはありません。SM には複数のスレッドブロックを常駐させることができます (つまり、各常駐スレッドブロックに割り当てられたレジスタや共有メモリなどのリソースを使用)。任意の命令サイクル。

したがって、SM は複数のブロックをサポートできるため、そのブロックがスレッドで最大限に構成されている場合でも (この場合は 512)、「常駐」できるスレッドの数が多くなります。複数のスレッドブロックを常駐させることで、スレッドブロックの制限を超えて使用します。

また、GPU プログラムにおける占有率の概念を調査することもできます。

于 2013-07-23T16:49:31.163 に答える