0

SM の使用可能なすべての共有メモリを 1 つのブロックに割り当てたいと考えています。複数のブロックを同じ SM に割り当てたくないので、これを行っています。GPU カードには 64KB (共有 + L1) メモリがあります。私の現在の構成では、共有メモリに 48KB、L1 に 16KB が割り当てられています。利用可能な共有メモリをすべて使い切るために、次のコードを書きました。

   __global__ void foo()
{

  __shared__ char array[49152];
...

}

2 つの質問があります。

  1. すべての共有メモリ空間が使い果たされていることを確認するにはどうすればよいですか?
  2. 「48K」をはるかに高い値に増やすことができます(エラーや警告は表示されません)。これを正当化できる人はいますか?

前もって感謝します、

イマン

4

1 に答える 1

2
  1. cudaDeviceProp::sharedMemPerBlock呼び出して取得できる使用可能なデバイス共有メモリのサイズを読み取ることができますcudaGetDeviceProperties
  2. 配列のサイズを指定する必要はありません。代わりに、共有メモリのサイズを 3 番目のカーネル起動パラメーターとして動的に渡すことができます。

「クロック」CUDA SDK サンプルは、起動時に共有メモリ サイズを指定する方法を示しています。

于 2013-01-22T20:09:48.290 に答える