16

ブロックに次元があるグリッドでカーネルを開始する場合:

dim3 block_dims(16,16);

グリッドブロックはどのようにワープに分割されますか?そのようなブロックの最初の2行は1つの縦糸を形成しますか、それとも最初の2列を形成しますか、それともこれは任意の順序ですか?

GPUコンピューティング機能を2.0と想定します。

4

2 に答える 2

32

スレッドはブロック内で順番に番号が付けられ、最も速く変化threadIdx.xし、次にthreadIdx.y2番目に速く変化しthreadIdx.z、最も遅く変化します。これは、多次元配列の列の主要な順序と機能的に同じです。ワープは、この順序でスレッドから順番に作成されます。したがって、2Dブロックの計算は次のようになります。

unsigned int tid = threadIdx.x + threadIdx.y * blockDim.x;
unsigned int warpid = tid / warpSize;

これは、プログラミングガイドとPTXガイドの両方で説明されています。

于 2011-05-30T14:23:14.357 に答える
3

dim3 block_dims(16,16);2つの連続したワープ(およびWarpSize = 32)の「VisualStudioWarpWatch」ウィンドウで@talonmiesの回答を説明するには:

最初のワープ セカンドワープ

于 2019-02-26T15:08:41.447 に答える