如果使用的是vs+win環(huán)境,可以通過Nsight——windows——system infos查看MAX_REGISTERS_PRE_BLOCK(或者是MAX_REGISTERS_PRE_MULTIPROCESSOR?)醋安,假設為65535墓毒。那么亲怠,如果調(diào)用核函數(shù)時,blocksize為(x,y,z)赁炎,每個線程調(diào)用的寄存器個數(shù)為r,則x*y*z*r應該小于65535讥裤。
blocksize可以通過設置斷點姻报,查看局部變量來得到。
每個線程調(diào)用的寄存器個數(shù)可以通過nvcc編譯命令中加入--ptxas-options=-v吴旋,編譯時可以看到。數(shù)目大小與核函數(shù)的設計還有 屬性——cuda C/C++——code generation 有一定關(guān)系治拿,例如:compute30笆焰,sm30,其中的數(shù)字越小嚷掠,需要的硬件性能越低,但最大也不能超過Nsight查看infos中compute capability*10不皆。
同時,也可以通過修改max used register來限制寄存器使用能犯,防止超出限制项棠。下圖中64*32*32*1=65535<=65535