Есть ли способ освободить разделяемую память, предварительно распределенную внутри одного ядра CUDA? Например, внутри ядра в одной точке я определилОсвобождение от общей разделяемой памяти 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 >>>')? – JackOLantern