在主机端,我可以保存我打算用它启动内核的动态共享内存量,并使用它。我甚至可以将它作为参数传递给内核。但是 - 有没有办法直接从设备代码获取它,没有主机端的帮助?也就是说,让内核的代码在运行时确定它有多少动态共享内存?
答案 0 :(得分:2)
是的,有一个特殊的寄存器持有该值。名为%dynamic_smem_size
。您可以通过使用getter函数包含一些内联PTX来在CUDA C / C ++代码中获取此寄存器的值:
__device__ unsigned dynamic_smem_size ()
{
unsigned ret;
asm volatile ("mov.u32 %0, %dynamic_smem_size;" : "=r"(ret));
return ret;
}
您可以同样从寄存器%total_smem_size
获取已分配共享内存的总大小(静态+动态)。