解除绑定到线性内存或CUDA数组的CUDA纹理的目的是什么?
在我的许多CUDA程序中,我使用绑定到线性内存的纹理cudaBindTexture2D
。在函数结束时,我使用cudaUnbindTexture
来释放纹理。
有几次,我忘了解开纹理。但它对该功能的性能和结果没有明显的影响。
是否真的有必要解开纹理?如果我不解除它会产生什么后果? 它会导致内存泄漏吗?
答案 0 :(得分:9)
每个体系结构都限制了可以同时绑定多少个纹理。该号码在“CUDA C编程指南”中列为Maximum number of textures that can be bound to a kernel
。 CC <128时为128。 3&256 for CC&gt; = 3.如果你没有取消绑定纹理,你的程序将无法处理超过该数量的纹理。
答案 1 :(得分:-2)
在Blender Cycles中,达到极限将输出如下图像:
代码在这里(intern/cycles/render/image.cpp
)
if(slot == images.size()) {
/* max images limit reached */
if(images.size() == tex_num_images) {
printf("ImageManager::add_image: byte image limit reached %d, skipping '%s'\n",
tex_num_images, filename.c_str());
return -1;
}
images.resize(images.size() + 1);
}