3

線形メモリまたはCUDA配列にバインドされたCUDAテクスチャのバインドを解除する目的は何ですか?

私のCUDAプログラムの多くでは、を使用してピッチ線形メモリにバインドされたテクスチャを使用していcudaBindTexture2Dます。関数の最後にcudaUnbindTexture、テクスチャを解放するために使用します。

何度か、テクスチャのバインドを解除するのを忘れたことがありました。ただし、関数のパフォーマンスと結果には明らかな影響はありませんでした。

テクスチャのバインドを解除する必要が本当にありますか?バインドを解除しないと、どのような結果になる可能性がありますか?メモリリークが発生しますか?

4

2 に答える 2

9

各アーキテクチャには、同時にバインドできるテクスチャの数に制限があります。番号はMaximum number of textures that can be bound to a kernel、CUDACプログラミングガイドに記載されています。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 に答える