1

カーネル呼び出しでグリッド サイズとスレッド カウントを渡すと、これらの値は常に、渡したとおりに gridDim と blockDim に配置されますか?

さらに、blockIdx と threadIdx は常にこれらの制限を尊重しますか?

つまり、呼び出し

kernel<<<5, 7>>>()

常に、カーネルで、

gridDim.x == 5 && blockIdx.x < gridDim.x
blockDim.x == 7 && threadIdx.x < blockDim.x

保持する上記の条件?(2D と 3D のサイズとインデックスも同じですか?)

これはばかげた質問に聞こえるかもしれませんが、CUDA がリソース割り当てのこの制限を無視できるかどうか疑問に思っているため、プログラマーは常に確認する必要があります。

それが明確であることを願っています、ありがとう!

4

1 に答える 1

3

はい、次元 <<<5,7>>> でカーネルを開始すると、ブロックごとに 5 つのブロックと 7 つのスレッドがあります。GPU の境界内で操作する場合に最も効率的であることに注意してください。カードの最大速度を引き出すには、デバイス プロパティから読み取った warpsize を使用する必要があります。必要に応じて多くのスレッドを使用しますが、ブロックはワープサイズの倍数にする必要があります。

CUDA自体はスレッド/ブロックを別のサイズに変更しないので、アドレス指定は問題ありません。

于 2012-09-26T07:38:36.100 に答える