解除绑定到线性内存或 CUDA 数组的 CUDA 纹理的目的是什么?
在我的许多 CUDA 程序中,我使用绑定到使用cudaBindTexture2D
. 在函数结束时,我使用cudaUnbindTexture
释放纹理。
有几次我忘了解绑纹理。但对函数的性能和结果没有明显影响。
真的有必要解绑纹理吗?如果我不解绑可能会有什么后果?会不会导致内存泄露?
每个架构对可以同时绑定的纹理数量都有限制。Maximum number of textures that can be bound to a kernel
该编号在 CUDA C 编程指南中列出。CC < 3 为 128,CC >= 3 为 256。如果您不取消绑定纹理,您的程序将无法处理超过该数量的纹理。
在 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);
}