纹理解除绑定的目的?

时间:2013-01-17 17:19:33

标签: cuda textures

解除绑定到线性内存或CUDA数组的CUDA纹理的目的是什么?

在我的许多CUDA程序中,我使用绑定到线性内存的纹理cudaBindTexture2D。在函数结束时,我使用cudaUnbindTexture来释放纹理。

有几次,我忘了解开纹理。但它对该功能的性能和结果没有明显的影响。

是否真的有必要解开纹理?如果我不解除它会产生什么后果? 它会导致内存泄漏吗?

2 个答案:

答案 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中,达到极限将输出如下图像:

http://www.xuanran001.com/public/repository/a69f/2083/c9be/4738/b36a/a138/49d5/3c54/preview/image.jpg

代码在这里(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);
}

更多阅读:http://www.elysiun.com/forum/showthread.php?309902-Suggestion-for-workaround-for-cycles-texture-limit