【发布时间】:2017-02-22 13:59:06
【问题描述】:
在主机端,我可以保存我打算用来启动内核的动态共享内存量,并使用它。我什至可以将它作为参数传递给内核。但是 - 有没有办法直接从设备代码中获取它,而无需主机端的帮助?也就是说,内核的代码在运行时确定它有多少动态共享内存可用?
【问题讨论】:
在主机端,我可以保存我打算用来启动内核的动态共享内存量,并使用它。我什至可以将它作为参数传递给内核。但是 - 有没有办法直接从设备代码中获取它,而无需主机端的帮助?也就是说,内核的代码在运行时确定它有多少动态共享内存可用?
【问题讨论】:
是的,有一个特殊的寄存器保存该值。命名为%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获取分配的共享内存的总大小(静态+动态)。
【讨论】: