【发布时间】:2013-09-17 08:00:39
【问题描述】:
有什么办法可以解除在同一个 CUDA 内核中预先分配的共享内存? 例如,在内核中我曾经定义过一次
__shared__ unsigned char flag;
__shared__ unsigned int values [ BLOCK_DIM ];
稍后在代码内部,我需要定义一个数组,考虑到先前定义的共享内存超过为块设置的共享内存限制。如果没有重复使用先前定义的共享内存的肮脏工作,我该如何做到这一点?或者 NVCC 足够聪明,可以识别内核跟踪中的依赖关系,并在使用共享变量完成时释放它? 我的设备是 GeForce GTX 780 (CC=3.5)。
【问题讨论】:
-
在 C/C++ 中,无法释放静态定义的数组。为什么不从内核启动时动态分配最坏情况所需的共享内存量(
extern __shared__ ...然后myKernel<<<numBlocks, numThreads, sh_mem_size>>>)?