0

私は CUDA が初めてで、カーネル呼び出しと混同しています。

カーネル メソッドを呼び出すときは、この kernelMethod<<< block, Threads >>>(parameters); のように、ブロック数とブロックごとのスレッドを指定します。"

では、なぜ 3 番目のパラメーターを使用できるのでしょうか。kernelMethod<<< ブロック、スレッド、???>>>(パラメータ);

cudaDeviceProp を使用すると、変数 maxThreadsPerBlock でブロックごとのスレッド数を読み取ることができます。しかし、どうすればブロックの最大数を知ることができますか? ありがとう!!

4

1 に答える 1

5

3 番目のパラメータは、動的に割り当てられるブロックごとの共有メモリの量を指定します。プログラミング ガイドには、共有メモリの詳細、説明、および例が記載されています。

共有メモリは、カーネルで静的に割り当てることができます。

__shared__ int myints[256];

または動的に:

extern __shared__ int myints[];

後者の場合、追加のカーネル構成パラメーター (言及した 3 番目のパラメーター)として、割り当てられる共有メモリのサイズをバイト単位で渡す必要があります。

その場合、ポインターmyintsは動的に割り当てられた領域の先頭を指します。

ブロックの最大数は、グリッドの次元 (x、y、z) ごとに指定され、デバイス プロパティクエリを介して取得することもできます。これはmaxGridSize パラメータで指定されます。実際の例については、 deviceQuery サンプルを参照してください。

于 2013-06-23T22:53:28.617 に答える