Как блоки CUDA делятся на перекосы?

Если я запускаю свое ядро ​​с сеткой, чьи блоки имеют размеры:

dim3 block_dims(16,16);

Как блокировка блоков теперь разбивается на перекосы? Первые две строки такого блока образуют одну деформацию, или первые два столбца, или это произвольно-упорядоченное?

Предположим, что вычислительная способность GPU составляет 2.0.

Ответ 1

Потоки нумеруются по порядку в блоках, так что threadIdx.x изменяется быстрее, а затем threadIdx.y второй самый быстрый, и threadIdx.z самый медленный. Это функционально то же самое, что и упорядочение столбцов в многомерных массивах. Деформации последовательно строятся из потоков в этом порядке. Таким образом, вычисление для 2d-блока составляет

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

Это описано как в руководстве по программированию, так и в руководстве PTX.