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

时间:2016-10-13 12:32:09

标签: cuda gpu-shared-memory

在主机端,我可以保存我打算用它启动内核的动态共享内存量,并使用它。我甚至可以将它作为参数传递给内核。但是 - 有没有办法直接从设备代码获取它,没有主机端的帮助?也就是说,让内核的代码在运行时确定它有多少动态共享内存?

1 个答案:

答案 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获取已分配共享内存的总大小(静态+动态)。

相关问题