すべてのアーキテクチャには、レジスタ ファイル割り当ての粒度があります。実際には、これは、ワープまたはブロックごとに割り当てられたレジスタの数を、レジスタ ページ サイズの次に大きい倍数に切り上げる必要があることを意味します。
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 ツールキットのすべてのバージョンに同梱されている占有スプレッドシートで確認できます。