## blocksize和gridsize设置
- 使用deviceQuery查看GPU相关信息(下图为1080 ti)
- blocksize的最大值建议不要超过Maximum number of threads per block(1024)
- 由于每个block里的线程需要被分为数个wrap,而wrap size为32(Warp size),故最好将blocksize设置为32的倍数
- blocksize设置完成后,需要设置gridsize的大小,即block得数量,该值受几个条件约束:共享内存、寄存器数量、warp数量,等
- 在使用nvcc编译cu文件时,可以使用“--ptxas-options=-v”参数查看每个线程使用得寄存器数量(以下为我的样例程序:可以看出其每个线程需要使用17个寄存器)
bytes stack frame:
是指本地内存的数量bytes smem
:共享内存
bytes cmem[0] 不太确定,好像是传入函数的某些常量
bytes cmem[2] 传入核函数的参数大小 - 计算方法(假设blocksize=64线程):
1.每个block使用的shared memory是:0Byte
2.每个block使用的寄存器文件数量:17*64=1088
3.每个block中的warp数量:64/32=2
4. 由shared memory数量限制的active block数量:没有使用shared memory
5.由寄存器数量限制的active block数量:65536/17/64=60
6.由warp数量限制的active block数量:64/2=32,其中的wrap数量好像是由GPU算力确定的(1. Introduction — CUDA C Programming Guide)
7.每个SM中的最大active block数量:192,待确认 - 其他参考方法: CUDA中Block大小的选择_cuda block大小-CSDN博客