如果我从一个其块具有维度的网格开始我的内核:
dim3 block_dims(16,16);
现在如何将网格块拆分为扭曲?这样的块的前两行是一个翘曲,还是前两列,或者是任意排序的?
假设GPU计算能力为2.0。
最佳答案
在块内按顺序对线程进行编号,以使threadIdx.x
变化最快,然后threadIdx.y
变化第二快,而threadIdx.z
变化最小。这在功能上与多维数组中的列主要排序相同。从线程按此顺序顺序构造经线。因此,对于2d块的计算是
unsigned int tid = threadIdx.x + threadIdx.y * blockDim.x;
unsigned int warpid = tid / warpSize;
编程指南和PTX指南都对此进行了介绍。
关于cuda - 2D/3D CUDA块如何分成变形?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6177202/