我可以从内核中获取分配的动态共享内存量吗?
Can I obtain the amount of allocated dynamic shared memory from within a kernel?
在主机端,我可以保存我打算用来启动内核的动态共享内存量,并使用它。我什至可以将其作为参数传递给内核。但是 - 有没有办法直接从设备代码中获取它,而无需主机端的帮助?也就是说,让内核代码在运行时确定它有多少动态共享内存可用?
是的,有一个保存该值的特殊寄存器。名为 %dynamic_smem_size
. You can obtain this register's value in your CUDA C/C++ code by wrapping some inline PTX,具有 getter 功能:
__device__ unsigned dynamic_smem_size()
{
unsigned ret;
asm volatile ("mov.u32 %0, %dynamic_smem_size;" : "=r"(ret));
return ret;
}
您可以类似地从寄存器 %total_smem_size
.
中获取分配的共享内存(静态 + 动态)的总大小
在主机端,我可以保存我打算用来启动内核的动态共享内存量,并使用它。我什至可以将其作为参数传递给内核。但是 - 有没有办法直接从设备代码中获取它,而无需主机端的帮助?也就是说,让内核代码在运行时确定它有多少动态共享内存可用?
是的,有一个保存该值的特殊寄存器。名为 %dynamic_smem_size
. You can obtain this register's value in your CUDA C/C++ code by wrapping some inline PTX,具有 getter 功能:
__device__ unsigned dynamic_smem_size()
{
unsigned ret;
asm volatile ("mov.u32 %0, %dynamic_smem_size;" : "=r"(ret));
return ret;
}
您可以类似地从寄存器 %total_smem_size
.