0

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

   __global__ void foo()
{

  __shared__ char array[49152];
...

}

我有两个问题:

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

提前致谢,

伊曼

4

1 回答 1

2
  1. 您可以从中读取可用设备共享内存的大小cudaDeviceProp::sharedMemPerBlock,您可以通过调用获得cudaGetDeviceProperties
  2. 您不必指定数组的大小。相反,您可以动态传递共享内存的大小作为第三个内核启动参数。

“时钟”CUDA SDK 示例说明了如何在启动时指定共享内存大小。

于 2013-01-22T20:09:48.290 回答