CUDA块如何分为经线?

时间:2011-05-30 13:54:32

标签: cuda gpgpu gpu-warp

如果我用一个网格开始我的内核,其网格的块有尺寸:

dim3 block_dims(16,16);

现在如何将网格块拆分为经线?这样一个块的前两行是形成一个warp,还是前两列,还是这个任意排序?

假设GPU计算能力为2.0。

2 个答案:

答案 0 :(得分:26)

线程在块内按顺序编号,以便threadIdx.x变化最快,然后threadIdx.y变化第二快,threadIdx.z变化最慢。这在功能上与多维数组中的列主要排序相同。 Warps按此顺序中的线程顺序构造。所以2d块的计算是

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

编程指南和PTX指南均对此进行了介绍。

答案 1 :(得分:0)

为说明@talonmies通过“ Visual Studio WarpWatch”窗口针对两个连续扭曲(dim3 block_dims(16,16);和WarpSize = 32)的答案:

First Warp Second Warp