如果我从一个其块具有维度的网格开始我的内核:

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/

10-12 04:25