2013-01-17 42 views
2

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

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

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

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

回答

8

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

+0

这意味着,如果我在不解除纹理的情况下连续调用该函数,最终,128的极限将耗尽,程序将失败? – sgarizvi

+0

我不知道是否重复绑定相同的纹理占用额外的插槽。如果您发现问题是否存在,请添加答案让我们知道。 –

+0

好吧,我会试试看。 – sgarizvi

-2

在搅拌机循环,达到限制将输出图像是这样的:

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