我可以从内核中获取分配的动态共享内存量吗?

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.

中获取分配的共享内存(静态 + 动态)的总大小