【问题标题】:Can I obtain the amount of allocated dynamic shared memory from within a kernel?我可以从内核中获取分配的动态共享内存的数量吗?
【发布时间】:2017-02-22 13:59:06
【问题描述】:

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

【问题讨论】:

    标签: cuda gpu-shared-memory


    【解决方案1】:

    是的,有一个特殊的寄存器保存该值。命名为%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获取分配的共享内存的总大小(静态+动态)。

    【讨论】:

    • @talonmies:是的,谢谢。至少我开始只依靠你进行小的修改......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-23
    • 2016-10-21
    • 1970-01-01
    • 2013-09-17
    • 1970-01-01
    相关资源
    最近更新 更多