我的程序的分析结果表明最大理论达到的占用率为 50%,限制器是寄存器。关于最小化 CUDA 代码中的寄存器数量的一般说明是什么?我看到分析结果显示寄存器的数量远远多于我的代码(每个线程)中的 32 位和 16 位变量的数量?可能是什么原因?
另外,将“maxregcount”设置为 32(32 * 2048(每个 SMX 的最大线程数)= 65536(每个 SMX 的最大寄存器数),解决了占用限制问题,但我没有得到太多的加速。“maxregcount”是否尝试优化代码比较多,这样使用寄存器就不会浪费了?还是干脆选择L1缓存或者本地内存进行寄存器溢出?