ブロックごとのスレッドの最大数を動的に決定することは可能ですか? つまり、GPU に値を要求し、それを変数に格納する関数です。ご協力いただきありがとうございます。
ありがとう、私は次のコードでスレッドの最大数を決定しました:
int dev = 0;
cudaDeviceProp deviceProp;
cudaGetDeviceProperties(&deviceProp, dev);
unsigned int maxThreads = deviceProp.maxThreadsPerBlock;
この数値を使用して、カーネルのブロックとスレッドを次の行で計算します。
unsigned int blocksNum = 1+((mSize-1)/maxThreads); // mSize is the size of array
unsigned int threadsNum = 1+((mSize-1)/blocksNum);
dim3 dimGrid(blocksNum, 1, 1);
dim3 dimBlock(threadsNum, 1, 1);
...
kernel<<<dimGrid,dimBlock>>>();
この形式でカーネルを呼び出すのは正しいですか?
助けてくれてありがとう。
OK、私は Nvidia の合計削減カーネル番号 6 を使用しており、次のコードでスレッドとブロックを決定するサンプル コードを使用しています。
unsigned int threadsNum = (mSize < maxThreads*2) ? nextPow2((mSize + 1)/ 2) : maxThreads;
unsigned int blocksNum = (mSize + (threadsNum * 2 - 1)) / (threadsNum * 2);
このコードは私の配列で動作します。