使用cudaMalloc3DArray无法释放GPU内存 我使用C++,GTX1070
我正在分配cuda阵列,如下所述:使用cudaMalloc3DArray无法释放GPU内存 我使用C++,GTX1070,c++,matlab,cuda,gpu,mex,C++,Matlab,Cuda,Gpu,Mex,我正在分配cuda阵列,如下所述: //variables: Vdepth = 200, Vheight = 100, Vwidth = 100, device = 0 VolumeId = 0 cudaExtent volumeSize = make_cudaExtent(Vdepth, Vheight, Vwidth); cudaArray *d_volumeArray = NULL; cudaChannelFormatDesc channelDesc = cudaCreateChannel
//variables: Vdepth = 200, Vheight = 100, Vwidth = 100, device = 0 VolumeId = 0
cudaExtent volumeSize = make_cudaExtent(Vdepth, Vheight, Vwidth);
cudaArray *d_volumeArray = NULL;
cudaChannelFormatDesc channelDesc = cudaCreateChannelDesc<texture_type>();
VERIFY_CALL( cudaMalloc3DArray(&d_volumeArray, &channelDesc, volumeSize) );
cu_VolArray[device][VolumeId] = d_volumeArray;
使用GPUz,分配将增加100MB的GPU内存,释放将减少10MB-如何清除扩展内存
整个代码在MATLAB(2012a)中通过mex运行。
这些“卡滞”内存块导致我的MATLAB在尝试
清除mex\u name
时卡滞(卡滞在“忙”)CUDA有许多其他内存需求,这些内存需求导致您观察到的额外内存消耗。请在标记为Duplicate的位置阅读更多信息,说明只有在CUDA上下文被破坏时才会释放额外内存。尽管存在活动上下文,但固定内存消耗仍然在GPUHi上分配—我明白这一点。我的问题是为什么“clear mex”没有释放它,以及如何释放它,这就是为什么我认为您错误地将此标记为重复。这不是您最初问的问题。我已经将您的问题编辑为您所说的内容,并且正在尝试问和编辑标记。如果我有任何误解,请随意进一步编辑
VERIFY_CALL(cudaFreeArray(cu_VolArray[device][VolumeId]));
cu_VolArray[device][VolumeId] = NULL;