Ответ 1
Потоки нумеруются по порядку в блоках, так что threadIdx.x
изменяется быстрее, а затем threadIdx.y
второй самый быстрый, и threadIdx.z
самый медленный. Это функционально то же самое, что и упорядочение столбцов в многомерных массивах. Деформации последовательно строятся из потоков в этом порядке. Таким образом, вычисление для 2d-блока составляет
unsigned int tid = threadIdx.x + threadIdx.y * blockDim.x;
unsigned int warpid = tid / warpSize;
Это описано как в руководстве по программированию, так и в руководстве PTX.