2

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 カウントほど重要ではないようです。

4

2 に答える 2

3

マルチプロセッサあたりのレジスタの総数は限られているため、使用中のレジスタの数は GPU の占有率に影響します。

CUDA 占有計算機を見る

コンピューティング能力、共有メモリ サイズの構成値、ブロックあたりのスレッド数、スレッドあたりのレジスタ、およびブロックあたりの共有メモリ バイト数を入力できます。

このシートには、マルチプロセッサ (mp) ごとに実行されるスレッドの数、アクティブなワープの数、mp ごとのスレッド ブロックの数、および各 mp の占有率に関する情報が表示されます。

実際には問題によって異なりますが、リソースが無駄にならないように、占有率をできるだけ高くしたいと思うでしょう。一方、レジスタの数が制限されている場合、コードが遅くなる可能性があります。

そのため、占有率の低下を避けるためにすべてのレジスタを使用しないことに意味があるかもしれませんが、前述したように、それはトレードオフのことです。

于 2013-06-27T17:51:56.063 に答える