CUDA块如何分为经线?

Gab*_*iel 14 cuda gpgpu gpu-warp

如果我使用其网格具有维度的网格启动我的内核:

dim3 block_dims(16,16);
Run Code Online (Sandbox Code Playgroud)

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

假设GPU计算能力为2.0.

tal*_*ies 28

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

unsigned int tid = threadIdx.x + threadIdx.y * blockDim.x;
unsigned int warpid = tid / warpSize;
Run Code Online (Sandbox Code Playgroud)

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

  • 注意"列主要顺序"假定dim3是一个数组,而不是结构.更精确的描述是`.x`是维度变化最快的,`.y`是第二快的变化,而`.z`变化最慢.如何将`.x`,`.y`和`.z`与行,列,切片,偏移,树级或内存中的任何其他寻址相关联取决于您. (9认同)