## 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博客