手書きのカーネルの各 CUDA スレッドのリソース使用量を理解しようとしています。
kernel.cu
ファイルをファイルkernel.o
にコンパイルしましたnvcc -arch=sm_20 -ptxas-options=-v
そして、次の出力を得ました(パススルーc++filt
):
ptxas info : Compiling entry function 'searchkernel(octree, int*, double, int, double*, double*, double*)' for 'sm_20'
ptxas info : Function properties for searchkernel(octree, int*, double, int, double*, double*, double*)
72 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info : Used 46 registers, 176 bytes cmem[0], 16 bytes cmem[14]
上記の出力を見ると、次のように言うのは正しいですか?
- 各 CUDA スレッドは 46 個のレジスタを使用していますか?
- ローカルメモリに流出するレジスタはありませんか?
出力の理解にも問題があります。
私のカーネルはたくさんの
__device__
関数を呼び出しています。__global__
関数と__device__
関数のスタック フレームのメモリの合計は 72 バイトですか?0 byte spill stores
とはどう違いますか0 bytes spill loads
の情報
cmem
(これは定数メモリであると想定しています) が異なる数値で 2 回繰り返されるのはなぜですか? カーネル内では、定数メモリを使用していません。それは、コンパイラが内部で GPU に一定のメモリを使用するように指示するということですか?
この質問は次のセクションに「続きます」: ptxas の詳細出力の解釈、パート II