CUDA ケネルのレジスタ/スレッド数を低く抑える利点はありますか?
私は利点(速度またはその他)がないと考えています。コンテキストの切り替えは、スレッドあたり 48 レジストリの場合と同様に、3 レジスタ/スレッドでも高速です。また、使用したくない場合を除き、使用可能なすべてのレジスタを使用しないことには意味がありません。レジスタはカーネル間で共有されません。これは間違っていますか?
編集: CUDA4.2 プログラミング ガイド (5.2.3) から:
The number of registers used by a kernel can have a significant impact on the number
of resident warps. For example, for devices of compute capability 1.2, if a kernel uses 16
registers and each block has 512 threads and requires very little shared memory, then two
blocks (i.e. 32 warps) can reside on the multiprocessor since they require 2x512x16
registers, which exactly matches the number of registers available on the multiprocessor.
But as soon as the kernel uses one more register, only one block (i.e. 16 warps) can be
resident since two blocks would require 2x512x17 registers, which are more registers than
are available on the multiprocessor. Therefore, the compiler attempts to minimize register
usage while keeping register spilling (see Section 5.3.2.2) and the number of instructions
to a minimum.
"regs/thread" カウントは、合計 reg カウントほど重要ではないようです。