Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cuda 我可以从内核中获得分配的动态共享内存量吗?_Cuda_Gpu Shared Memory - Fatal编程技术网

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

Cuda 我可以从内核中获得分配的动态共享内存量吗?,cuda,gpu-shared-memory,Cuda,Gpu Shared Memory,在主机端,我可以节省启动内核所需的动态共享内存量,并使用它。我甚至可以将其作为参数传递给内核。但是-有没有一种方法可以直接从设备代码中获取,而不需要主机端的帮助?也就是说,让内核的代码在运行时确定它有多少动态共享内存可用?是的,有一个特殊的寄存器保存该值。命名的。您可以在CUDA C/C++代码中通过使用getter函数封装一些内联函数来获取此寄存器的值: __device__ unsigned dynamic_smem_size() { unsigned ret; asm v

在主机端,我可以节省启动内核所需的动态共享内存量,并使用它。我甚至可以将其作为参数传递给内核。但是-有没有一种方法可以直接从设备代码中获取,而不需要主机端的帮助?也就是说,让内核的代码在运行时确定它有多少动态共享内存可用?

是的,有一个特殊的寄存器保存该值。命名的。您可以在CUDA C/C++代码中通过使用getter函数封装一些内联函数来获取此寄存器的值:

__device__ unsigned dynamic_smem_size()
{
    unsigned ret; 
    asm volatile ("mov.u32 %0, %dynamic_smem_size;" : "=r"(ret));
    return ret;
}

同样,您可以从寄存器中获取分配的共享内存的总大小(静态+动态)
%total\u smem\u size

@talonmies:是的,谢谢。至少我开始只依靠你做一些小的修改。。。