1

私はCUDA 5.5、VS2010、およびパラメーターcompute_35とsm_35を使用しています。私はGFXタイタンを持っています。

レジスタ/スレッドが50個のレジスタを使用し、ブロックあたりのスレッドが128で、レジスタ/ブロックが7168であるカーネルがあります。

7168 / 128 = 56.

テクスチャは使用していません。

以下の画像を参照してください。

レジスタ

レジスタの使用を 48 に制限すると、次のようになります。47 レジスタ/スレッドですが、実際の使用はスレッドあたり 48 です。

4

1 に答える 1

8

すべてのアーキテクチャには、レジスタ ファイル割り当ての粒度があります。実際には、これは、ワープまたはブロックごとに割り当てられたレジスタの数を、レジスタ ページ サイズの次に大きい倍数に切り上げる必要があることを意味します。

GTX タイタンの場合、レジスタ ファイルの割り当てサイズは 256 レジスタで、割り当て単位はワープごとです。だからあなたの例を使用して:

50 registers per thread = 50 * 32 = 1600 registers per warp
1600 registers per warp / 256 registers per page = 7 pages per warp
7 pages per warp = 7 * 256 = 1792 registers per warp
128 threads per block = 4 warps per block = 4 * 1792 = 7168 registers per block

したがって、カーネルの 1 つのブロックには 7168 のレジスタが必要です。ただし、スレッドあたりのレジスタ数 * ブロックあたりのスレッドでは 6400 レジスタしか得られません。これらの数値はすべて、CUDA ツールキットのすべてのバージョンに同梱されている占有スプレッドシートで確認できます。

于 2013-07-01T15:38:44.047 に答える