在主机端,我可以保存我打算用来启动内核的动态共享内存量,并使用它。我什至可以将它作为参数传递给内核。但是 - 有没有办法直接从设备代码中获取它,而无需主机端的帮助?也就是说,内核的代码在运行时确定它有多少可用的动态共享内存?
1 回答
3
是的,有一个特殊的寄存器保存该值。名为%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;
}
您可以类似地从 register 获取分配的共享内存的总大小(静态 + 动态)%total_smem_size
。
于 2016-10-13T12:32:08.960 回答