如何将所有可用的共享内存分配给CUDA中的单个块?

时间:2013-01-22 19:30:57

标签: memory cuda gpu gpu-programming

我想将SM的所有可用共享内存分配给一个块。我这样做是因为我不希望将多个块分配给同一个SM。 我的GPU卡有64KB(共享+ L1)内存。在我当前的配置中,48KB分配给共享内存,16KB分配给L1。 我编写了以下代码来耗尽所有可用的共享内存。

   __global__ void foo()
{

  __shared__ char array[49152];
...

}

我有两个问题:

  1. 如何确保所有共享内存空间都用完了?
  2. 我可以将“48K”增加到更高的值(不会收到任何错误或警告)。有没有人可以证明这一点?
  3. 提前致谢,

    伊曼

1 个答案:

答案 0 :(得分:2)

  1. 您可以通过致电cudaDeviceProp::sharedMemPerBlock来了解cudaGetDeviceProperties中可用设备共享内存的大小
  2. 您不必指定数组的大小。相反,您可以动态地将共享内存的大小作为第三个内核启动参数传递。
  3. “clock”CUDA SDK示例说明了如何在启动时指定共享内存大小。