如何将2D / 3D CUDA块分成扭曲?

问题描述 投票:15回答:2

如果我从其块具有尺寸的网格开始我的内核:

dim3 block_dims(16,16);

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

假定GPU计算能力为2.0。

cuda gpgpu gpu-warp
2个回答
29
投票

在块内按顺序对线程进行编号,以便threadIdx.x变化最快,然后threadIdx.y变化最快,而threadIdx.z变化最快。这在功能上与多维数组中的列主排序相同。从线程按此顺序顺序构造经线。因此,对于2d块的计算是

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

这在编程指南和PTX指南中都有介绍。


2
投票

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

[First Warp Second Warp

© www.soinside.com 2019 - 2024. All rights reserved.