Как блоки CUDA делятся на основы? - PullRequest
13 голосов
/ 30 мая 2011

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

dim3 block_dims(16,16);

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

Предполагается, что вычислительная способность GPU равна 2,0.

Ответы [ 2 ]

26 голосов
/ 30 мая 2011

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

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

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

0 голосов
/ 26 февраля 2019

Чтобы проиллюстрировать ответ @ talonmies через окно Visual Studio WarpWatch для двух последовательных деформаций (dim3 block_dims(16,16); и WarpSize = 32):

First Warp Second Warp

...