2013-01-17 85 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