3

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

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

有几次我忘了解绑纹理。但对函数的性能和结果没有明显影响。

真的有必要解绑纹理吗?如果我不解绑可能会有什么后果?会不会导致内存泄露?

4

2 回答 2

9

每个架构对可以同时绑定的纹理数量都有限制。Maximum number of textures that can be bound to a kernel该编号在 CUDA C 编程指南中列出。CC < 3 为 128,CC >= 3 为 256。如果您不取消绑定纹理,您的程序将无法处理超过该数量的纹理。

于 2013-01-17T20:18:09.640 回答
-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

于 2015-03-25T11:33:38.093 回答